# Mappage des champs Cegid Retail Y2

### Synchronisation des données client et fidélité

Création et mise à jour du compte client et des cartes de fidélité dans Y2 via les formulaires d'inscription.

Mappage des champs : Voici la liste des champs disponibles par défaut dans le connecteur :

```
Champs Wallet Crew     Champs Y2(WebService)
--------------------------------------------------------------------------
email                  EmailData.Email
consents_email         EmailData.EmailingAccepted
phoneNumber            PhoneData.CellularPhoneNumber
isProspect             IsProspect
firstName              FirstName
lastName               LastName
sex                    Sex
title                  TitleId
advisor                SalesPersonId
storeId                UsualStoreId
birthDate              BirthDateData
address                AddressData.AddressLine1
streetNumber           AddressData.AddressLine2
postcode / zipCode     AddressData.ZipCode
city                   AddressData.City
country                AddressData.CountryId
nationality            NationalityId
consents_email         OptinEmail(true = BrandOnly, false = DoNotUse)
consents_post          OptinPostal(true = BrandOnly, false = DoNotUse)
consents_sms           OptinMobile(true = BrandOnly, false = DoNotUse)
consents_emailReceipt  EmailData.SendReceiptByMail
```

Si vous souhaitez des champs supplémentaires, contactez votre administrateur Wallet Crew. Les libellés et les valeurs des champs à choix multiple doivent être renseignés et présents dans le BackOffice de Wallet Crew. Il en va de même pour les consentements et autres textes légaux.

### Personnalisation du mappage

Il est possible de personnaliser le mappage avec un script javascript personnalisé. Le script nécessite 2 méthodes : MapFromY2 et MapToY2. Vous trouverez ci-dessous le script minimal pour utiliser le mappage personnalisé

```js
// fichier server/scripts/y2.mapping.js

/**
 * Méthode utilisée pour convertir les informations du modèle de données Wallet Crew vers le modèle de données Y2.
 * Cette méthode sera invoquée chaque fois qu'un client est créé ou mis à jour dans Y2
 *
 * Cette méthode doit être implémentée si vous souhaitez envoyer des données spécifiques à Y2
 *
 * @param account dictionnaire de données provenant du Wallet Crew
 * @param data modèle de données client Y2 tel que défini dans CustomerWcfService
 */
const mapToY2 = function (account, data) {};

/**
 * Méthode utilisée pour convertir les informations de Y2 vers neostore.
 * Cette méthode sera invoquée chaque fois qu'un client est récupéré et affiché dans le Wallet Crew :
 * lors de l'édition d'un client existant via un formulaire d'inscription ou lors de l'affichage d'informations sur une Carte
 *
 * @param data modèle de données client Y2 tel que défini dans CustomerWcfService
 * @param account dictionnaire de données à définir dans le Wallet Crew
 */
const mapFromY2 = function (data, account) {};

export default function (context) {
  context.register("extensions.cegid.y2.mapper", {
    MapToY2: mapToY2,
    MapFromY2: mapFromY2,
  });
}
```

Le modèle de données Y2 est défini ainsi : ![cegid\_retail\_y2\_fields\_mapping\_1.png](https://3097111101-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWLc8AHXW4tdrAXUBfrYF%2Fuploads%2Fgit-blob-cdca83943839ffdbe7c2e0599989961428dbfbc3%2Fcegid_retail_y2_fields_mapping_1.png?alt=media)

#### Recettes

**Textes libres Y2 - YTC\_TEXTELIBRE**

Dans Cegid il est possible de définir jusqu'à 3 textes libres, ils sont stockés dans les colonnes `YTC_TEXTELIBRE1`, `YTC_TEXTELIBRE2`, `YTC_TEXTELIBRE3`. Les valeurs sont accessibles en utilisant `UserDefinedTexts` propriété.

Le mappage peut se faire ainsi :

```javascript
// la valeur Id correcte doit être remplacée - 2 fois dans mapToY2 et 1 fois dans mapFromY2
// Id : 0 => YTC_TEXTELIBRE1
// Id : 1 => YTC_TEXTELIBRE2
// Id : 2 => YTC_TEXTELIBRE3

const mapToY2 = function (account, data) {
  // autre mappage de champs

  const comment = account["comment"];
  if (comment) {
    data.UserDefinedTexts = [
      ...(data.UserDefinedTexts || []).filter((udt) => udt?.Id != 0),
      { Id: 0, Value: comment },
    ];
  }
};

const mapFromY2 = function (data, account) {
  // autre mappage de champs

  account["comment"] = (data.UserDefinedTexts || []).find(
    (udt) => udt?.Id == 0,
  )?.Value;
};
```

**Table libre Y2 - YTC\_TABLELIBRETIERS**

Dans Cegid il est possible de définir jusqu'à 10 valeurs dans une table libre (Table libre en français), elles sont stockées dans les colonnes `YTC_TABLELIBRETIERS1`, `YTC_TABLELIBRETIERS2`, `YTC_TABLELIBRETIERS3`, `YTC_TABLELIBRETIERS4`, `YTC_TABLELIBRETIERS5`, `YTC_TABLELIBRETIERS6`, `YTC_TABLELIBRETIERS7`, `YTC_TABLELIBRETIERS8`, `YTC_TABLELIBRETIERS9`, `YTC_TABLELIBRETIERSA`. Les valeurs sont accessibles en utilisant `UserDefinedData` propriété.

Attention : les WebServices Cegid ont un décalage de 1 entre le nom dans la base de données et le nom dans le service web.

Le mappage peut se faire ainsi :

```javascript
// Y2 a un décalage de 1. UserDefinedTable0Value correspond à YTC_TABLELIBRETIERS1, etc.
/*
 * UserDefinedTable0Value => YTC_TABLELIBRETIERS1
 * UserDefinedTable1Value => YTC_TABLELIBRETIERS2
 * UserDefinedTable2Value => YTC_TABLELIBRETIERS3
 * UserDefinedTable3Value => YTC_TABLELIBRETIERS4
 * UserDefinedTable4Value => YTC_TABLELIBRETIERS5
 * UserDefinedTable5Value => YTC_TABLELIBRETIERS6
 * UserDefinedTable6Value => YTC_TABLELIBRETIERS7
 * UserDefinedTable7Value => YTC_TABLELIBRETIERS8
 * UserDefinedTable8Value => YTC_TABLELIBRETIERS9
 * UserDefinedTable9Value => YTC_TABLELIBRETIERSA
 */

const mapToY2 = function (account, data) {
  // autre mappage de champs

  const preference = account["preference"];
  if (preference) {
    data.UserDefinedData = {
      ...(data.UserDefinedData || {}),
      UserDefinedTable1Value: preference,
    };
  }
};

const mapFromY2 = function (data, account) {
  // autre mappage de champs

  account["preference"] = data.UserDefinedData?.UserDefinedTable1Value;
};
```
