Transforming information into performance

redirectEstimate

Le service redirectEstimate, associé à la plateforme Catalogue IO,
permet à l’application Partenaire de créer ou éditer un devis dans une application Catalogue IO.
Celle-ci est ouverte dans un navigateur de l’utilisateur, après qu’il ait demandé une ouverture de session.

<xat2 xmlns="http://xat2.etai.fr" version="2.0">
  <!-- Donnée obligatoire : URL de contact de l'application Partenaire -->
  <uri-list>
    <uri-service action="DMSaddress" direct-access="true">
      <uri>{URL de l'application Partenaire}</uri>
    </uri-service>
  </uri-list>
  <session-context>
    <!-- Déclaration obligatoire du quadruplet d'identifiants XAT2 -->
    <application-id>{identifiant unique de l'application Partenaire}</application-id>
    <dms-login>{identifiant de l’application Partenaire dans le garage}</dms-login>
    <user-shared-id>{identifiant de l’utilisateur}</user-shared-id>
    <garage-shared-id>{identifiant du garage}</garage-shared-id>
    <!-- OU BIEN, ces 4 identifiants peuvent être remplacés par l'identifiant de session, s'il existe -->
    <session-id>{identifiant unique de la session}</session-id>    
  </session-context>
  <shuttle>
    <transport>
      <partner>
        <name>{Nom application Partenaire}</name>
        <editor dictionary="ETAI:editor" ref="{editorRef}" />
        <version-code>{applicationVersion}</version-code>        
      </partner>
      <action-list>
        <!-- Déclaration obligatoire du verbe -->
        <action>
          <verb>redirectEstimate</verb>
          <option-list>
            <!-- Option pour obtenir systématiquement la connexion -->          
            <option>force</option>
            <!-- Donnée obligatoire de l'identifiant du devis dans l'application Partenaire.
            Si cet identifiant est inconnu dans l'application Catalogue IO, un nouveau devis est créé.
            Sinon, le devis associé est ouvert -->
            <option dictionary="ETAI:identifier" ref="estimateId" source="partner">2017_012345</option>
          </option-list>
        </action>
      </action-list>
    </transport>
    <!-- Paramètres par défaut -->
    <default-shuttle-settings>
      <currency dictionary="ETAI:unit" ref="euro" />
      <time-unit dictionary="ETAI:unit" ref="hour" />
    </default-shuttle-settings>
    <!-- Déclaration optionnelle des taux de MO, taux de TVA et remises par défaut -->
    <settings>
      <!-- Taux de main-d'oeuvre : {sectorValue} vaut "mechanical" ou "body" ou "paint"
      et {levelValue} vaut 1 ou 2 ou 3 -->
      <labor-list>
        <labor-cost-rate>
          <breakdown-list>
            <classification dictionary="ETAI:sector" ref="{sectorValue}" />
            <classification dictionary="ETAI:level" ref="{levelValue}" />
          </breakdown-list>
          <value>
            <amount>{amountValue}</amount>
          </value>
        </labor-cost-rate>
      </labor-list>
      <!-- Taux de TVA, en pourcentage -->
      <VAT-list>
        <VAT-rate internal-id="ID1">
          <value>
            <amount>{amountValue}</amount>
          </value>
        </VAT-rate>
      </VAT-list>
      <discount-list>
        <!-- Remises par défaut : {applicabiltyRef} vaut "part" pour les pièces/ingrédients 
        ou "tire" pour les pneus ou "labor-rate" pour les opérations de temps -->
        <discount internal-id="ID2">
          <breakdown-list>
            <classification dictionary="ETAI:applicability" ref="{applicabiltyRef}" />
          </breakdown-list>
          <value value-type="percent">
            <amount>{amountValue}</amount>
          </value>
        </discount>
        <!-- Remise sur le total de la commande (ref="total") -->
        <discount internal-id="ID3">
          <breakdown-list>
            <classification dictionary="ETAI:applicability" ref="total" />
          </breakdown-list>
          <value value-type="percent">
            <amount>{amountValue}</amount>
          </value>
        </discount>
      </discount-list>      
    </settings>
    <!-- Déclaration optionnelle du client associé au devis dans l'application Partenaire -->
    <person-list>  
      <person>
        <breakdown-list>
          <classification dictionary="ETAI:person" ref="client" />
        </breakdown-list>
        <name>Nom intervenant</name>
        <firstname>Prénom intervenant</firstname>
        <title>
          <classification dictionary="ETAI:personTitle" ref="{personTitleRef}">{personTitleLabel} </classification>
        </title>
        <place>
          <address number="1">{1ère ligne de l’adresse}</address>
          <address number="2">{2ème ligne de l’adresse}</address>
          <zip-code>Code Postal</zip-code>
          <city>Ville</city>
          <country>
            <classification dictionary="ETAI:country" ref="france">France</classification>
          </country>
        </place>
        <contact-list>
          <contact>
            <contact-category dictionary="ETAI:contact" ref="{contactRef}" />
            <contact-value>{contactValue}</contact-value>
          </contact>
        </contact-list>
        <agreement-list>
          <agreement>
            <classification dictionary="ETAI:agreement" ref="tvaIntra"> {tvaIntraValue}</classification>
          </agreement>
        </agreement-list>
        <classification-list>
          <!-- {idPartner} : identifiant du client dans l’application Partenaire.
          Obligatoire pour que le client soit pris en compte dans l’application ETAI -->
          <classification source="partner" ref="{idPartner}" />
        </classification-list>    
      <person>
    </person-list>
    <!-- Déclaration optionnelle du véhicule associé au devis dans l'application Partenaire -->    
    <vehicle-list>
      <vehicle>
        <!-- Identifiants administratifs du véhicule -->        
        <alternative-ref-list>
          <classification dictionary="ETAI:vehicle" ref="cnit" />
          <classification dictionary="ETAI:vehicle" ref="vin" />
          <classification dictionary="ETAI:vehicle" ref="vvt" />
          <classification dictionary="ETAI:vehicle" ref="registration">AA123AA</classification>
        </alternative-ref-list>  
        <!-- Identifiant du véhicule dans la base de l'application Partenaire -->
        <classification-list>
          <classification source="partner" ref="{idPartner}" />
        </classification-list>
      </vehicle>
    </vehicle-list>
  </shuttle>
</xat2>

La réponse en retour (avec accusé de réception, identifiant de la session et URL d’affichage) pourrait être la suivante :

<xat2 xmlns="http://xat2.etai.fr" version="2.0">
  <!-- Dates d'arrivée du message et du traitement de la requête -->
  <date-list>
    <explicit-date source="xat2">
      <breakdown-list>
        <classification dictionary="ETAI:date" ref="receive" source="xat2">Receive date</classification>
      </breakdown-list>
      <date format="dd.MM.yyyy HH:mm:ss:S Z">26.01.2017 11:41:45:107 +0100</date>
    </explicit-date>
    <explicit-date source="xat2">
      <breakdown-list>
        <classification dictionary="ETAI:date" ref="dispatch" source="xat2">Completion date</classification>
      </breakdown-list>
      <date format="dd.MM.yyyy HH:mm:ss:S Z">26.01.2017 11:41:45:150 +0100</date>
    </explicit-date>
  </date-list>
  <message-list>
    <!-- Confirmation de la création d'une session (si elle n'avait pas déjà été créée) -->  
    <message source="xat2">
      <message-category>ack</message-category>
      <user-description dictionary="Xat2:message" ref="complete">session creation OK</user-description>
      <technical-description>session creation OK</technical-description>
    </message>
    <!-- Accusé de réception de la demande redirectEstimate -->  
    <message source="xat2">
      <message-category>ack</message-category>
      <user-description dictionary="Xat2:message" ref="complete">redirectEstimate processing complete</user-description>
      <technical-description>redirectEstimate processing complete</technical-description>
      <classification-list>
        <classification dictionary="Xat2:message" ref="complete" />
      </classification-list>
    </message>
  </message-list>
  <!-- URL à ouvrir dans le navigateur de l'utilisateur, 
  après l'avoir complétée par : ?sessionid={identifiant de la session} -->
  <uri-list>
    <uri-service action="Display" direct-access="true">
      <uri>{URL de l'application Catalogue IO}</uri>
    </uri-service>
  </uri-list>
  <session-context>
    <!-- Rappel facultatif des identifiants de connexion -->
    <dms-login>{identifiant de l’application Partenaire dans le garage}</dms-login>
    <user-shared-id>{identifiant de l’utilisateur}</user-shared-id>
    <garage-shared-id>{identifiant du garage}</garage-shared-id>
    <!-- Déclaration OBLIGATOIRE de l'identifiant unique de la session -->
    <session-id>{identifiant unique de la session}</session-id>
    <!-- Date du dernier accès -->
    <last-accessed-time format="dd.MM.yyyy HH:mm:ss:S Z">26.01.2017 11:41:45:149 +0100</last-accessed-time>
    <!-- Déclaration de la durée maximale d'une session, en milli-secondes -->
    <max-session-duration>30000</max-session-duration>
  </session-context>
  <shuttle />
</xat2>

Lors de l’utilisation de ce service, plusieurs scénarios sont possibles, au moment de l’ouverture du navigateur de l’utilisateur :

  • Le devis existe déjà : le navigateur affiche directement ce devis dans l’application Catalogue IO.
  • Le devis n’existe pas encore et doit être créé dans l’application Catalogue IO.
    La page qui s’affiche dans le navigateur de l’utilisateur dépend de l’identification du véhicule :

    • La variante du devis est identifiée de façon unique dans la base E-T-A-I, via les informations fournies par l’application Partenaire : le navigateur affiche la page de résultat de la recherche avec cette unique variante. L’utilisateur confirme en cliquant sur cette variante et il est envoyé vers la page du nouveau devis associé.
    • Si une variante unique n’est pas identifiée, l’utilisateur est redirigé vers la page de recherche d’une variante. A la fin de cette recherche, lorsqu’une variante est sélectionnée, l’utilisateur est redirigé vers la page du nouveau devis associé.

Lorsque l’utilisateur a terminé son travail (complété le devis avec des pièces et des opérations), il clique sur le bouton « TRANSFERT » présent en page du devis.
Une redirection HTTP est envoyée à l’application Partenaire, qui reprend la main et invoque le serveur XAT2 (service getData) pour récupérer le devis (réponse postEstimate).

retour