Hooks de routage par unité économique
Hooks de routage par unité économique
Une société peut émettre et recevoir des factures électroniques au nom de plusieurs unités économiques : établissements, services, agences. Dans l'annuaire, chaque unité a son propre code de routage. L'application E-transactions propose deux hooks pour qu'une autre application tienne compte de ces unités.
| Hook | Sens | Appel | Effet |
|---|---|---|---|
etransactions_seller_electronic_address | Émission | fn(sales_invoice) -> str | None | Remplace l'adresse électronique du vendeur (BT-34) de la facture |
etransactions_incoming_invoice_values | Réception | fn(einvoice) -> dict | None | Ajoute des valeurs d'en-tête à la facture fournisseur créée depuis la facture reçue |
Déclarez chaque hook comme une liste de chemins de fonctions dans le fichier hooks.py de votre application.
Émettre depuis l'adresse d'une unité
Lors de la génération de la facture électronique, E-transactions appelle chaque fonction du hook etransactions_seller_electronic_address avec la Facture de vente. La première réponse non vide remplace l'adresse électronique de la société pour cette facture. Si aucune fonction ne répond, E-transactions garde l'adresse de la société.
La valeur est un identifiant d'annuaire, avec ou sans schéma : 123456789_ROUTE1 ou 0225:123456789_ROUTE1.
# mon_app/hooks.py
etransactions_seller_electronic_address = ["mon_app.einvoice.adresse_vendeur"]
# mon_app/einvoice.py
import frappe
def adresse_vendeur(sales_invoice):
# Exemple fictif : le centre de coût de la facture porte le code de routage
# dans un champ personnalisé « custom_code_routage ».
if not sales_invoice.cost_center:
return None
return frappe.db.get_value("Cost Center", sales_invoice.cost_center, "custom_code_routage")
Une facture du centre de coût « Agence Lyon » (code de routage 123456789_LYON) part alors de l'adresse 123456789_LYON. Les autres factures partent de l'adresse de la société.
Compléter les factures reçues
Quand E-transactions crée une Facture fournisseur depuis une facture électronique reçue, il appelle chaque fonction du hook etransactions_incoming_invoice_values avec le document Einvoice reçu. Il fusionne les dictionnaires renvoyés, dans l'ordre des applications, et les ajoute aux valeurs d'en-tête. Les valeurs des champs qui existent aussi sur la Facture d'achat sont reportées sur celle-ci.
# mon_app/hooks.py
etransactions_incoming_invoice_values = ["mon_app.einvoice.valeurs_reception"]
# mon_app/einvoice.py
import frappe
def valeurs_reception(einvoice):
# Exemple fictif : le code de routage de l'acheteur (BT-49) donne le centre de coût.
code = einvoice.buyer_electronic_address
centre = frappe.db.get_value("Cost Center", {"custom_code_routage": code}, "name")
return {"cost_center": centre} if centre else None
Points d'attention
- Une exception dans une fonction n'est pas interceptée : elle arrête la génération ou la création de la facture.
- Gardez les fonctions sans effet de bord. Elles doivent seulement calculer une valeur.
- Le champ
custom_code_routagedes exemples est un champ personnalisé, à créer par votre application.