Résumé
Manipulation de l'entité Deal (Affaires) en lecture/écriture/suppression via un objet métier depuis une application externe.
Remarque
A partir de la Summer'22, le webhook Deal a été scindé en deux afin de gérer les opportunités séparément. Il faudra donc à présent utiliser le nouveau webhook Opportunity pour cette partie.
Tables
Les tables utilisées sont :
sw_data_deal : Table des opportunités/affaires
Les tables liées sont :
sw_data_dealelement : Table des éléments d’affaires
sw_data_customeraddressdeal : Table des adresses d'affaires
sw_data_dealstep : Table des étapes d’affaires
Critères d'activation
WHK_Deal 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 à 'Brouillon' (generictype_ID_status = DRAFTING) si non fourni lors d'une création
Fonctionnement
settings parameters
"settings": { "getPartners": "1" // pour le verb GET et LIST permet de retourner les informations des partenaires de l'affaire }
verb: GET
resultType: simple
"deal":{ "codedeal": "AFR000011", "customer_ID": "C0000001", "label": "Vitrine de magasin", "creationDate": "2021-12-01 00:00:00" "generictype_ID_dealType": "Type affaire 1", "generictype_ID_status": "STARTED", "dealNumber": "AFR000011" }
verb: GET
resultType: extended
"deal":{ "codedeal": "AFR000011", "customer_ID": "C0000001", "label": "Vitrine de magasin", "creationDate": "2021-12-01 00:00:00", "generictype_ID_dealType": "Type affaire 1", "generictype_ID_status": "STARTED", "dealNumber": "AFR000011", "description": "", "closingDate": "", "amount": "300", "probability": "55", "customer_ID_introducer": "", "baseuser_ID": "MOREL", "amount2": "", "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_dealType, customer, customercontact, baseuser, generictype_status et dealstep_current
"related":[ { "generictype_dealType":{ "codegenerictype": "DEAL_DEALTYPE-AFR", "label": "Type affaire 1", "originalCode": "AFR", "dataType": "DEAL_DEALTYPE", "description": "", "translationKey": "", "generictype_ID_parent": "Deal", "tag":"", "orderNumber":"" }, "generictype_status": { "codegenerictype": "DEAL_STATUS-3", "label": "Démarré", "originalCode": "3", "dataType": "DEAL_STATUS_V2", "description": "", "translationKey": "GenType_DEAL_STATUS_STARTED", "generictype_ID_parent": "", "tag": "STARTED", "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":"" }, "dealstep_current": { "codedealstep": "AFR000011-2", "deal_ID": "AFR000011", "stepDate": "2023-09-15 11:34:01", "comment": "", "dealsteptype_ID": "DEAL_STEP-AFR-ANA" } }]
verb: PUT
{ "deal": { "codedeal": "AFR000011", /* Code globalement unique de l'affaire (Varchar (255))*/ "customer_ID": "C0000001", /* Code client (ForeignKey () - sw_data_customer.codecustomer)*/ "label": "Vitrine de magasin", /* Libellé (Varchar (255))*/ "generictype_ID_dealType": "DEAL_DEALTYPE-AFR", /* Code type d'affaire (ForeignKey () - sw_data_generictype.codegenerictype avec datatype = DEAL_DEALTYPE) et generictype_ID_parent = DEAL*/ "dealNumber": "AFR000011", /* N° d'affaire (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 ())*/ "customer_ID_introducer": "", /* Code client apporteur d'affaire (ForeignKey () - sw_data_customer.codecustomer) "baseuser_ID": "25", /* Code responsable (ForeignKey () - sw_data_baseuser.codebaseuser)*/ "amount2": "", /* Montant 2 (Double ())*/ "generictype_ID_status": "DEAL_STATUS-3", /* Statut (ForeignKey () - sw_data_generictype.codegenerictype avec datatype = DEAL_STATUS_V2)*/ "realClosingDate": "", /* Date de fin réelle (DateTime ())*/ "dealstep_ID_current": "", /* Code étape actuelle (ForeignKey () - sw_data_dealstep.codedealstep)*/ "deal_ID_origin": "", /* Code opportunité d'origine (ForeignKey () - sw_data_deal.codedeal)*/ "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)*/ "internalcodedeal": null /* Code deal 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": "aff10", "fieldvalue": "100000" }, { "fieldname": "aff30", "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_aff10": "100000", "v_aff30": "Jean-René Abraham", ... }, "dealelement": [ { "codedealelement": "AFR000011-0-1", /* Code globalement unique de l'élément d'affaire (Varchar (255))*/ "deal_ID": "AFR000011", /* Code affaire. Optionnel : reprendre le code affaire du bloc json "deal", si non fourni reprend automatiquement le code affaire (ForeignKey () - sw_data_deal.codedeal)*/ "label" : "Elément 1", /* Libellé (Varchar (255))*/ "DataOrder": "10", /* Ordre d'affichage (Int ())*/ "originalCode": "1", /* Code de l'élément d'affaire à afficher (Varchar (255))*/ "dealelementstructure_ID": "", /* Code structure (ForeignKey () - sw_data_dealelementstructure.codedealelementstructure)*/ "dealelement_ID_parent": "" /* Code élément d'affaire parent (nécessite que le parent a été créée avant celui-ci) (ForeignKey () - sw_data_dealelement.codedealelement)*/ }, { "codedealelement": "AFR000011-0-1.1", /* Code globalement unique de l'élément d'affaire (Varchar (255))*/ "deal_ID": "AFR000011", /* Code affaire. Optionnel : reprendre le code affaire du bloc json "deal", si non fourni reprend automatiquement le code affaire (ForeignKey () - sw_data_deal.codedeal)*/ "label" : "Elément 1.1", /* Libellé (Varchar (255))*/ "DataOrder": "11", /* Ordre d'affichage (Int ())*/ "originalCode": "1.1", /* Code de l'élément d'affaire à afficher (Varchar (255))*/ "dealelementstructure_ID": "", /* Code structure (ForeignKey () - sw_data_dealelementstructure.codedealelementstructure)*/ "dealelement_ID_parent": "AFR000011-0-1" /* Code élément d'affaire parent (nécessite que le parent a été créée avant celui-ci) (ForeignKey () - sw_data_dealelement.codedealelement)*/ }, { "codedealelement": "AFR000011-0-2", /* Code globalement unique de l'élément d'affaire (Varchar (255))*/ "deal_ID": "PJ000011", /* Code affaire. Optionnel : reprendre le code affaire du bloc json "deal", si non fourni reprend automatiquement le code affaire (ForeignKey () - sw_data_deal.codedeal)*/ "label" : "Elément 2", /* Libellé (Varchar (255))*/ "DataOrder": "20", /* Ordre d'affichage (Int ())*/ "originalCode": "2", /* Code de l'élément d'affaire à afficher (Varchar (255))*/ "dealelementstructure_ID": "", /* Code structure (ForeignKey () - sw_data_dealelementstructure.codedealelementstructure)*/ "dealelement_ID_parent": "" /* Code élément d'affaire parent (nécessite que le parent a été créée avant celui-ci) (ForeignKey () - sw_data_dealelement.codedealelement)*/ }], "customeraddressdeal": [ { "codecustomeraddressdeal": "", /* Code globalement unique d'un lien d'adresse. Si non fourni code=ID (Vachar(255))*/ "deal_ID": "", /* Code affaire. Optionnel reprendre le code affaire du bloc json "deal", si non fourni reprend automatiquement le code affaire (ForeignKey () - sw_data_deal.codedeal)*/ "customeraddress_ID" : "C0000001-SXB" /* Code de l'adresse. (ForeignKey () - sw_data_customeraddress.codecustomeraddress)*/ }], "dealstep": [ { "codedealstep": "" /* Code gloablement unique de l'étape d'affaire. Si non fourni code=ID (Vachar(255))*/ "deal_ID": "", /* Code affaire. Optionnel : reprendre le code affaire du bloc json "deal", si non fourni reprend automatiquement le code affaire (ForeignKey () - sw_data_deal.codedeal)*/ "dealsteptype_ID": "DEAL_STEP-AFR-ANA" /* Code type d'étape d'affaire (ForeignKey () - sw_data_dealsteptype.codedealsteptype)*/ "stepDate": "2023-09-12 10:00", /* Date-Heure de l'étape d'affaire. 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 affaire, la mise à jour de l'étape actuelle sur l’affaire est possible en même temps que sa création. Le statut de l’affaire peut également évoluer en fonction du paramétrage des types d'étapes d’affaires. Exemple :
{ "deal": { "codedeal": "AFR000011", /* Code affaire*/ "customer_ID": "C0000001", /* Code client*/ "generictype_ID_dealType": "DEAL_DEALTYPE-AFR", /* Code type d'affaire*/ "dealstep_ID_current": "AFR000011-ANA" /* Code étape actuelle. Reprendre le code étape du bloc "dealstep" qui est en-dessous*/ ... }, "dealstep": [ { "codedealstep": "AFR000011-ANA", /* Code étape d'affaire*/ "dealsteptype_ID": "DEAL_STEP-AFR-ANA", /* Code type d'étape d'affaire*/ ... }] }
verb: LIST
resultType: simple, extended reprendre les définitions du GET
"filters:" { "codeDeal": "value", filter is equal "dealNumber": "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 "dealType": "value", filter is equal "codeStatus": "value" filter is equal }, "orderBy": "value"
Valeurs possibles pour le tri "orderBy" :
dealNumberAsc : par n° d'affaire ascendant
labelAsc : par intitulé ascendant
creationDateAsc : par date de création ascendant
creationDateDesc : par date de création descendant
verb: DELETE
La suppression d'une affaire (sw_data_deal) va supprimer en cascade les éléments liés dans la table sw_data_dealelement.