Version de développement
Cette documentation décrit la version « next » (develop), non encore publiée. Pour la version stable, basculez sur « v5 » dans l'en-tête.
Développeurs

Hooks de routage par unité économique

Les hooks etransactions_seller_electronic_address et etransactions_incoming_invoice_values adaptent les factures électroniques à l'unité économique qui les émet ou les reçoit.

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.

HookSensAppelEffet
etransactions_seller_electronic_addressÉmissionfn(sales_invoice) -> str | NoneRemplace l'adresse électronique du vendeur (BT-34) de la facture
etransactions_incoming_invoice_valuesRéceptionfn(einvoice) -> dict | NoneAjoute 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_routage des exemples est un champ personnalisé, à créer par votre application.