WebHook Deal (V5.3)
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 version 5.6, 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 5.4, 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
"externalReference": "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.