Aller directement à la fin des métadonnées
Aller au début des métadonnées

You are viewing an old version of this content. View the current version.

afficher les différences View Version History

Vous regardez la version actuelle de cette page. (v. 1) afficher la version suivante »

Résumé

Manipulation de l'entité Opportunity (Opportunités) en lecture/écriture/suppression via un objet métier depuis une application externe.

Remarque

Avant la Summer' 22, les opportunités étaient gérées par le webhook Deal.

Tables

Les tables utilisées sont :

  • sw_data_deal : Table des opportunités/affaires

Les tables liées sont :

  • sw_data_customeraddressdeal : Table des adresses d’opportunités

  • sw_data_dealstep : Table des étapes d’opportunités

Critères d'activation

WHK_Opportunity est défini dans la gestion des webhooks du studio.

Règles métier

verb: PUT

  • La date de création est mise par défaut à la date du jour (creationDate) si non fournie lors d'une création

  • Le statut est mis par défaut à 'Active' (generictype_ID_status = ACTIVE) si non fourni lors d'une création

  • L'ajout d'éléments (dealelement) n'est pas autorisé pour une opportunité

Fonctionnement

settings parameters

"settings":
{
  "getPartners": "1" // pour le verb GET et LIST permet de retourner les informations des partenaires de l'opportunité
}

verb: GET
resultType: simple

  "opportunity":{
    "codedeal": "PRJ000011",
    "customer_ID": "C0000001",
    "label": "Vitrine de magasin",
    "creationDate": "2021-12-01 00:00:00"
    "generictype_ID_dealType": "Type projet 1",
    "generictype_ID_status": "ACTIVE",
    "dealNumber": "PRJ000011"
  }

verb: GET
resultType: extended

  "opportunity":{
    "codedeal": "PRJ000011",
    "customer_ID": "C0000001",
    "label": "Vitrine de magasin",
    "creationDate": "2021-12-01 00:00:00",
    "generictype_ID_dealType": "Type projet 1",
    "generictype_ID_status": "ACTIVE",
    "dealNumber": "PRJ000011",
    "description": "",    
    "closingDate": "",
    "amount": "300",
    "probability": "55",
    "generictype_ID_lossReason": "",
    "customer_ID_introducer": "",
    "baseuser_ID": "MOREL",
    "amount2": "",
    "lossReasonComment": "",
    "realClosingDate": "",
    "dealstep_ID_current": "",
    "deal_ID_origin": "",
    "manualProbability": "0",
    "marketinglead_ID_origin": "",
    "customercontact_ID": "C0000001-DJ"
  }

verb: GET
resultType: extendedRelated
en complément du résultat pour resultType: extended on aura le détail pour les tables generictype_opportunityType, customer, customercontact, baseuser, generictype_status et opportunitystep_current

"related":[
{
  "generictype_opportunityType":{
    "codegenerictype": "DEAL_DEALTYPE-PRJ",
    "label": "Type projet 1",
    "originalCode": "PRJ",
    "dataType": "DEAL_DEALTYPE",
    "description": "",
    "translationKey": "",
    "generictype_ID_parent": "Project",
    "tag":"",
    "orderNumber":""
  },
  "generictype_status": {
    "codegenerictype": "OPPORTUNITY_STATUS-1",
    "label": "Active",
    "originalCode": "1",
    "dataType": "OPPORTUNITY_STATUS",
    "description": "3",
    "translationKey": "GenType_OPPORTUNITY_STATUS_ACTIVE",
    "generictype_ID_parent": "",
    "tag": "ACTIVE",
    "orderNumber": ""
  },
  "customer":{
    "codecustomer": "C0000001",
    "name": "ENTREPRISE DIJON GUICHARD",
    "baseuser_ID": "",
    "address1" :"33 Avenue du Drapeau",
    "address2": "",
    "address3": "",
    "postalCode": "21000",
    "city": "DIJON",
    "phoneNumber": "03 90 11 22 33",
    "faxNumber": "03 90 11 22 44",
    "mobilePhoneNumber": "06 90 11 22 33",
    "email": "contact@guichard.com",
    "deliveryDays": "1A;1B;2A;2B;3A;3B;4A;4B;5A;5B",
    "openingDays": "1A;1B;2A;2B;3A;3B;4A;4B;5A;5B",
    "siretNumber":" ",
    "vatIntra": "",
    "apeCode": "516K",
    "comment": "",
    "blocked": "0",
    "blockedComment": "",
    "message": "",
    "vacationStart": "",
    "vacationEnd": "",
    "gpsLongitude": "5.04372",
    "gpsLatitude": "47.33222",
    "accountNumber": "C0000001",
    "contactName": "",
    "currency_ID": "",
    "authorizedCredit": "0",
    "risk": "1",
    "underSurveillance": "",
    "workforce": "25",
    "customer_ID_paying": "",
    "pricecategory_ID": "",
    "discountRate": "0",
    "website": "https://www.guichard.com",
    "legalStatus": "Société Anonyme avec Directoire",
    "generictype_ID_brand": "",
    "generictype_ID_deliveryMode": "",
    "generictype_ID_paymentMean": "",
    "generictype_ID_country": "",
    "generictype_ID_province": "",
    "generictype_ID_customerType": "CTC",
    "generictype_ID_customerFamily": "",
    "confirmationEmail": "contact@guichard.com",
    "confirmationFax": "03 90 11 22 44",
    "generictype_ID_taxCode": "",
    "productdepot_ID": "",
    "generictype_ID_accountingCategory": "",
    "generictype_ID_customerPotential": "B",
    "generictype_ID_civility": "",
    "skype": "contact@guichard.com",
    "generictype_ID_role": "",
    "unused": "0",
    "customergroup_ID": "",
    "generictype_ID_referencing": "2",
    "generictype_ID_distribution": "SELF",
    "generictype_ID_market": "BIG",
    "area": "",
    "baseculture_ID": "FR-FR",
    "baseuser_ID_favoriteTechnician": "TECH-01",
    "branchoffice_ID": "SXB",
    "emailFormat": "",
    "isIndividual": "0",
    "facebook": "https://www.facebook.com/guichard/",
    "twitter": "https://twitter.com/guichard",
    "youtube": "https://www.youtube.com/watch?v=6jGbnEwQJ54",
    "linkedin": "https://www.linkedin.com/company/guichard",
    "activity": ""
  },
  "customercontact":{
    "codecustomercontact": "C0000001-DJ",
    "customer_ID": "C0000001",
    "lastName": "DENEIR",
    "firstName": "Jacques",
    "generictype_ID_civility": "Monsieur",
    "address1": "1b rue Darwin",
    "address2": "",
    "address3": "",
    "postalCode": "21000",
    "city": "DIJON",
    "phoneNumber": "05 55 79 56 92",
    "faxNumber": "05 55 79 56 11",
    "mobilePhoneNumber": "06 07 08 09 10",
    "email": "jdeneir@nebout.div",
    "gpsLongitude": "5.0384",
    "gpsLatitude": "47.33073",
    "description": "Acheteur direct",
    "generictype_ID_position": "Direction",
    "birthday": "1980-09-18 00:00:00",
    "generictype_ID_country": "FR",
    "generictype_ID_province": "",
    "mainContact": "0",
    "generictype_ID_service": "Direction",
    "skype": "",
    "baseculture_ID": "",
    "bouncedEmailDetected": "",
    "closedDate": "",
    "twitter": "",
    "linkedin": ""
  },
  "baseuser":{
    "codebaseuser":"25",
    "lastName":"MOREL",
    "firstName":"Vincent",
    "initials":"MV",
    "baseusertree_ID":"Région 2",
    "productdepot_ID":"Dépôt Vincent MOREL",
    "productdepot_ID_current":"",
    "email":"vincent@morel.com",
    "phoneNumber":"",
    "faxNumber":"",
    "address1":"",
    "address2":"",
    "postalCode":"",
    "city":"",
    "position":"Représentant",
    "department":"Commercial",
    "structureNav":"1",
    "supervisor":"0",
    "useMileageRate":"",
    "account":"",
    "analyticSection":"",
    "lastGPSDate":"",
    "gpsLongitude":"",
    "gpsLatitude":"",
    "gpsPrecision":"",
    "gpsUpdateDate":"",
    "gpsManual":"",
    "generictype_ID_country":"",
    "generictype_ID_province":"",
    "baseculture_ID":"",
    "branchoffice_ID":"",
    "resourcetype_ID":"",
    "teamtype_ID":""
  },
  "opportunitystep_current": {
    "codeopportunitystep": "PRJ000011-1",
    "opportunity_ID": "PRJ000011",
    "stepDate": "2023-09-15 13:27:12",
    "comment": "",
    "opportunitysteptype_ID": "DEAL_STEP-PRJ-O"
  }
}]

verb: PUT

{
  "opportunity": {
    "codeopportunity": "PRJ000011", /* Code globalement unique de l'opportunité (Varchar (255))*/
    "customer_ID": "C0000001", /* Code client (ForeignKey () - sw_data_customer.codecustomer)*/
    "label": "Vitrine de magasin", /* Libellé (Varchar (255))*/
    "generictype_ID_opportunityType": "DEAL_DEALTYPE-PRJ", /* Code type d'opportunité (ForeignKey () - sw_data_generictype.codegenerictype avec datatype = DEAL_DEALTYPE) et generictype_ID_parent = PROJECT*/
    "opportunityNumber": "PRJ000011", /* N° d'opportunité (Varchar (64))*/
    "description": "", Description (Text (65535))*/
    "creationDate" : "2021-12-01", /* Date de création (DateTime ())*/
    "closingDate": "", /* Date de fin (DateTime ())*/
    "amount": "300", /* Montant (Double ())*/
    "probability": "55", /* Probabilité (en %) (Int ())*/
    "generictype_ID_lossReason": "", /* Code raison de la perte (ForeignKey () - sw_data_generictype.codegenerictype avec datatype = DEAL_LOSTREASON)*/
    "lossReasonComment": "", /* Commentaire perte (Text (65535))*/
    "customer_ID_introducer": "", /* Code client apporteur d'affaire (ForeignKey () - sw_data_customer.codecustomer)
    "baseuser_ID": "", /* Code responsable (ForeignKey () - sw_data_baseuser.codebaseuser)*/
    "amount2": "", /* Montant 2 (Double ())*/
    "generictype_ID_status": "OPPORTUNITY_STATUS-1", /* Statut (ForeignKey () - sw_data_generictype.codegenerictype avec datatype = OPPORTUNITY_STATUS)*/    
    "realClosingDate": "", /* Date de fin réelle (DateTime ())*/
    "opportunitystep_ID_current": "", /* Code étape actuelle (ForeignKey () - sw_data_dealstep.codedealstep)*/   
    "manualProbability": "0", /* Probabilité manuelle (Valeurs possibles : 0,1) (Bool ())*/
    "marketinglead_ID_origin": "", /* Code lead marketing d'origine (ForeignKey () - sw_data_marketinglead.codemarketinglead)*/
    "customercontact_ID": "C0000001-DJ", /* Code contact client (ForeignKey () - sw_data_customercontact.codecustomercontact)*/	        
    "internalcodeopportunity": null /* Code opportunité original de weavy s'il y a eu transcodage (Varchar (255)) */

    /* Optionnel : pour mettre à jour les champs dynamiques selon paramétrage */
    /* Exemple 1 : */
    "dynamicfields": 
    [{
      "fieldname": "prj10",
      "fieldvalue": "100000"
    },
    {
      "fieldname": "prj30",
      "fieldvalue": "Jean-René Abraham"    
    },
    {
      ...
    }]
    /* Exemple 2 : */
    /* A partir de la version SUMMER'21, le mappage direct des champs dynamiques est possible en utilisant le nom du champ en bdd */
    "v_prj10": "100000",
    "v_prj30": "Jean-René Abraham",
    ...
  },
  "customeraddressopportunity": [
  {
    "codecustomeraddressopportunity": "", /* Code globalement unique d'un lien d'adresse. Si non fourni code=ID (Vachar(255))*/
    "opportunity_ID": "", /* Code opportunity. Optionnel : reprendre le code opportunité du bloc json "opportunity", si non fourni reprend automatiquement le code opportunité (ForeignKey () - sw_data_deal.codedeal)*/
    "customeraddress_ID" : "C0000001-SXB" /* Code de l'adresse. (ForeignKey () - sw_data_customeraddress.codecustomeraddress)*/
  }],
  "opportunitystep": [
  {
    "codeopportunitystep": "" /* Code gloablement unique de l'étape d'opportunité. Si non fourni code=ID (Vachar(255))*/
    "opportunity_ID": "", /* Code opportunité. Optionnel : reprendre le code opportunité du bloc json "opportunity", si non fourni reprend automatiquement le code opportunité (ForeignKey () - sw_data_deal.codedeal)*/
    "opportunitysteptype_ID": "DEAL_STEP-PRJ-C" /* Code type d'étape d'opportunité (ForeignKey () - sw_data_dealsteptype.codedealsteptype)*/
    "stepDate": "2023-09-12 10:00", /* Date-Heure de l'étape d'opportunité. Si non fourni, on prend l'heure courrante (DateTime ())
    "comment": "" /* Commentaire (Text (65535))*/
  }]
}

Compléments :

  • A la fin de la création/modification d’une opportunité, la mise à jour de l'étape actuelle sur l’opportunité est possible en même temps que sa création. Le statut de l’opportunité peut également évoluer en fonction du paramétrage des types d'étapes d’opportunités. Exemple :

    {
      "opportunity": {
        "codeopportunity": "PRJ000011", /* Code opportunité*/
        "customer_ID": "C0000001", /* Code client*/
        "generictype_ID_opportunityType": "DEAL_DEALTYPE-PRJ", /* Code type d'opportunité*/       
        "opportunitystep_ID_current": "PRJ000011-C" /* Code étape actuelle. Reprendre le code étape du bloc "opportunitystep" qui est en-dessous*/
        ...
      },
      "opportunitystep": [
      {
        "codeopportunitystep": "AFR000011-C", /* Code étape d'opportunité*/
        "opportunitysteptype_ID": "DEAL_STEP-PRJ-C", /* Code type d'étape d'opportunité*/
        ...
      }]
    }

verb: LIST
resultType: simple, extended reprendre les définitions du GET

"filters:" {
  "codeOpportunity": "value", filter is equal
  "opportunityNumber": "value", filter is equal
  "label": "value", filter is contains
  "creationDate": "value", filter is greater or equal to
  "creationDateBetween": "value1|value2", filter is between value1 and value2
  "codeCustomer": "value", filter is equal
  "opportunityType": "value", filter is equal
  "codeStatus": "value" filter is equal
},
"orderBy": "value"

Valeurs possibles pour le tri "orderBy" :

  • opportunityNumberAsc : par n° d'affaire/opportunité ascendant

  • labelAsc : par intitulé ascendant

  • creationDateAsc : par date de création ascendant

  • creationDateDesc : par date de création descendant

  • Aucune étiquette