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 "externalReference": "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