Flow ID's
Chaque fichier XML échangé avec Butler++ contient un Flow ID qui détermine comment le fichier est traité. Voici un aperçu :
| Flow ID | Direction | Type | Description |
|---|
| RSO1 | Odoo → Butler++ | Bon de commande | Envoi d'un bon de commande régulier vers Butler++ |
| DSO1 | Odoo → Butler++ | Bon de commande | Envoi d'un bon de commande dropshipment vers Butler++ |
| RSO10.1 | Butler++ → Odoo | Réponse PO | Confirmation/réponse reçue pour un PO régulier |
| DSO12.1 | Butler++ → Odoo | Réponse PO | Confirmation/réponse reçue pour un PO dropshipment |
| RSO10.2 | Butler++ → Odoo | Bon de commande | Commande magasin régulière créée dans Butler++ |
| DSO12.2 | Butler++ → Odoo | Bon de commande | Commande dropshipment créée dans Butler++ (est ignorée) |
| OO10.1 | Butler++ → Odoo | Bon de vente | Commande en ligne → retrait en magasin, PAS encore payée |
| OO10.2 | Butler++ → Odoo | Bon de vente | Commande en ligne → retrait en magasin, déjà payée |
| OO10.3 | Butler++ → Odoo | Bon de vente | Commande en ligne → livraison à domicile par LCK, déjà payée |
Butler++ Send orders
Vous pouvez commander via Butler++ depuis Connect-ERP. Lorsque vous sélectionnez le fournisseur "Lanckriet" dans l'application d'achat, le bouton "Send through Butler++" apparaît.
Cela envoie votre commande à Butler++ et vous verrez que le Sync Status affiche : "Send ok" lorsque tout se passe bien.
Dans l'application EDI → Butler++ Send orders → bouton d'action "Synchronizations", vous pouvez voir quelles requêtes ont réussi (vert) et lesquelles ont échoué (rouge). Les requêtes échouées signifient que votre commande n'a (généralement) pas été envoyée correctement.
Comment fonctionne l'envoi ?
- Vous créez un bon de commande (PO) pour le fournisseur Lanckriet/Connect+ — ceux-ci ont un code fournisseur Butler++.
- Vous cliquez sur "Send through Butler++".
- Un fichier XML est généré avec les codes produits, quantités et prix.
- La commande est envoyée immédiatement via SFTP.
- Après l'envoi, le statut devient "Send ok" et les quantités et prix attendus par ligne sont enregistrés. Ceux-ci seront comparés ultérieurement avec la réponse de Butler++.
Commande régulière (RSO1) vs. Dropshipment (DSO1)
RSO1 (régulier) :
L'adresse de livraison est l'entrepôt (code Butler++ de l'entrepôt). Pour la bonne configuration, vous pouvez contacter ictsupport@connect-plus.be.
DSO1 (dropshipment) :
L'adresse de livraison est le client final. Le fichier XML contient le nom, l'adresse, l'e-mail et le numéro de téléphone du client. Butler++/Lanckriet livre alors directement chez le client.
Un bon de commande initialement reçu DEPUIS Butler++ (RSO10.2) ou lié à une commande en ligne avec livraison à domicile (OO10.3) n'est JAMAIS renvoyé vers Butler++. Cela évite les boucles infinies.
Butler++ Receive Order Responses
Après avoir envoyé une commande à Lanckriet via Butler++ Send orders, les prix et les marchandises disponibles sont vérifiés. Si tout est correct, vous recevez de "OdooBot" le Sync Status : Receive ok. Cela signifie que la commande a été bien reçue. Les réponses des clients finaux avec l'option "dropshipment" sont également traitées ici.
Comment les réponses sont-elles traitées ? (RSO10.1 / DSO12.1)
- La réponse XML est récupérée depuis le serveur SFTP.
- Le système fait correspondre la réponse avec un PO existant via le champ ShopReference (= le numéro de PO).
- Il est vérifié que le PO a effectivement été envoyé (le statut ne peut pas être vide ou send_ok).
- Statut "pending" : Butler++ est encore en cours de traitement. Le statut devient "receive_pending".
- Statut "ok" : Chaque ligne de commande est mise à jour avec les quantités confirmées, les prix et les informations de stock.
Contrôle par ligne
Après réception de la réponse, les éléments suivants sont comparés par ligne :
- Quantité : attendue vs. confirmée (différence = butler_issue_on_qty)
- Prix : attendu vs. confirmé (différence = butler_issue_on_price)
- Erreurs : éventuels messages d'erreur ou d'avertissement de Butler++ (butler_error)
Si des problèmes sont détectés, ils sont enregistrés dans le chatter et des activités sont créées pour les membres de l'équipe de vente Butler++.
Attention : Si TOUTES les lignes sont en erreur, le PO complet est marqué comme "receive_ok", même si le statut global était "OK".
Butler++ Receive Orders
Vous pouvez passer une commande sur Butler++ et la faire charger automatiquement dans Connect-ERP. Dans ce cas, les bons de commande que vous aviez créés précédemment dans Butler++ sont générés. Également lorsque des clients finaux passent une commande sur votre site local ou le site national avec votre magasin comme point de retrait, une commande sera créée. Dans ce cas, un nouveau contact client et éventuellement un bon de vente sont également créés. Ceux-ci sont créés dans Connect-ERP par "OdooBot".
RSO10.2 : Commande magasin régulière créée dans Butler++
Lorsqu'un magasin passe une commande dans Butler++, celle-ci est automatiquement créée comme bon de commande (pour Lanckriet) dans Odoo.
- Un PO est créé avec Lanckriet comme fournisseur.
- Les lignes de commande sont créées et les produits sont mis en correspondance (voir "Correspondance des produits" ci-dessous).
- Tous les produits trouvés ? → Le PO est automatiquement confirmé.
- Produits manquants ? → Le PO reste en brouillon. Des activités sont créées pour l'équipe Butler++.
DSO12.2 : Commande dropshipment créée dans Butler++
Lorsqu'un magasin crée directement une commande dropshipment dans Butler++, le XML est reçu mais N'EST PAS traité. Ce type de commande doit être géré manuellement dans Odoo.
OO10.1 : Commande en ligne, retrait en magasin, PAS payée
Un client commande en ligne via la boutique web Butler++ et choisit le retrait en magasin. Le client n'a PAS encore payé.
- Un bon de vente (SO) est créé dans la bonne société.
- Le client est recherché ou créé (voir "Correspondance des clients" ci-dessous).
- Les lignes de commande sont mises en correspondance avec les produits.
- Aucun produit manquant → Le SO est confirmé.
- Une activité est créée : "Le client a choisi le retrait en magasin et doit ENCORE PAYER."
OO10.2 : Commande en ligne, retrait en magasin, DÉJÀ payée
Identique à OO10.1, mais le client a déjà payé en ligne.
Étapes supplémentaires :
- Un paiement est automatiquement enregistré dans Odoo via le journal de compte bancaire Butler++ configuré.
- Le paiement est immédiatement comptabilisé.
- Activité : "Le client a choisi le retrait et a DÉJÀ PAYÉ."
OO10.3 : Commande en ligne, livraison à domicile, DÉJÀ payée
Le client a commandé en ligne, payé, et choisit la livraison à domicile par Lanckriet. C'est un dropshipment du point de vue du magasin.
- Un SO est créé avec la route dropshipment Butler++ sur chaque ligne.
- Aucun produit manquant → Le SO est confirmé, ce qui génère automatiquement un PO pour Lanckriet. Ce PO est également confirmé immédiatement.
- Un paiement est enregistré et comptabilisé.
- Activité : "Le client a choisi la livraison à domicile et a DÉJÀ PAYÉ. Vous devez suivre la livraison."
Sécurité :
Lors de la confirmation d'un bon de vente OO10.3, chaque ligne DOIT avoir une route dropshipment Butler++. Si ce n'est pas le cas, la confirmation est bloquée.
Gestion des erreurs (dans l'application EDI)
- "Receipt without any shop code on the warehouse for the PO P0xxxx" :
Aucun entrepôt n'est configuré pour la réception des marchandises, voir la configuration en bas de l'article.
- "Vendor Product Code for Lanckriet is missing for those products:" :
Dans la fiche produit → PIM → Manufacturer Code, le code ne correspond pas à celui de Spécification → Numéro d'article dans Butler++. Vérifiez en interne si celui-ci a été modifié ou contactez masterdata@erbg.be pour le signaler.
- "No PO matches the ShopReference xxx:" :
Dans Butler++, une commande est enregistrée sous votre numéro de magasin mais il n'y a pas de numéro de PO dans Connect ERP auquel cette commande peut être liée. Peut-être qu'aucun PO n'a été créé.
- "No Sync Error" :
Pas de problème, une action a cherché de nouvelles commandes mais n'en a pas trouvé — il n'y en a tout simplement pas.
- "Folder "xxx_folder" : "/directory/folder" does not exists" :
La configuration de l'EDI est incorrecte ou le dossier n'existe plus sur le FTP. Contactez toujours ictsupport@erbg.be pour cela.
- "No Butler++ Bank Account configured for the company xxx" :
Configurez le compte bancaire Butler++ dans l'application Paramètres → Comptabilité.
- No Butler++ dropship route configured for the company :
Configurez une route comme indiqué dans "Configuration".
Correspondance des produits
Lors du traitement des lignes de commande entrantes, le système tente de faire correspondre chaque produit via une logique de recherche en trois étapes :
- Code PIM : Si le XML contient un champ PIM, la recherche se fait sur pim_code (y compris les produits archivés).
- Code-barres (EAN) : Si non trouvé via PIM, la recherche se fait sur le champ barcode (y compris les produits archivés).
- Code fournisseur (ItemId) : Si non trouvé via code-barres, la recherche se fait dans les informations fournisseur pour un code produit Lanckriet correspondant.
Correspondance des clients (Commandes en ligne)
Pour les commandes en ligne (OO10.x), le système doit rechercher ou créer un client sur base des données client présentes dans le XML.
Logique actuelle :
- Entreprises (Company = "Y") : Recherche sur e-mail OU numéro de TVA (avec is_company = True).
→ Nous travaillons sur un développement qui ajoutera cela dans les fichiers XML.
- Particuliers (Company = "N" ou non renseigné) : Recherche sur rue + code postal + ville + pays + e-mail + is_company = False.
Problème connu :
La correspondance actuelle pour les particuliers exige que TOUS les champs d'adresse correspondent exactement. Un contact créé manuellement dans Odoo ne sera donc pas reconnu s'il y a la moindre différence dans un champ (par ex. un espace de différence dans le champ rue). Le nom N'EST PAS utilisé pour la correspondance.
→ Nous travaillons sur une solution pour faire correspondre les contacts sur l'adresse e-mail. En l'absence d'une correspondance à 100 % sur l'adresse de livraison, une nouvelle adresse de livraison sera liée au contact ayant la bonne adresse e-mail.
Configuration
- Installer l'application ConnectERP EDI Butler++ Orders dans l'application Applications.
- Demander l'onboarding auprès de ictsupport@erbg.be (aucune information supplémentaire nécessaire).
- Sélectionnez le code Butler++ de l'entrepôt dans lequel les marchandises doivent être reçues. Par défaut, celui-ci doit être "001". Cela se fait dans l'application Inventaire. Si vous avez plusieurs entrepôts et ne connaissez pas les codes, demandez-les à ictsupport@erbg.be.
- Application Inventaire → Configuration → Routes → créez-en une nouvelle comme suit.
- Configurez le compte bancaire Butler++ dans l'application Paramètres → Comptabilité.
Butler++ Send Orders & Receive Responses
json
{"host": "c+ ftp", "host_key": "", "in_folder": "ORDER/IN/STATUS", "in_folder_done": "ORDER/IN/STATUS/Done", "in_folder_error": "ORDER/IN/STATUS/Error", "key": "", "on_conflict": "rename", "on_conflict_rename_extension": "old", "out_folder": "/OUT/ORDER", "password": "password", "user": "000xxxxx"}Butler++ Receive Orders
json
{"host": "c+ ftp", "user": "000xxxxx", "password": "password", "in_folder": "