Le dialogue « Créer une pièce » de l'outil de rapprochement bancaire listait jusqu'à présent deux types de documents en dur : Saisie de paiement et Écriture au journal. Une application tierce (Lending pour le remboursement d'un prêt, par exemple) pouvait reconnaître ses propres écritures dans les correspondances, mais ne pouvait pas les créer directement depuis le rapprochement.
Désormais, ce dialogue est extensible via un registre : erpnext.accounts.bank_reconciliation.voucher_types. Chaque application peut y inscrire ses propres types de pièces, avec leurs champs de dialogue, leurs conditions d'affichage et leur logique de création côté serveur.
Inscrivez votre type dans le registre avant le chargement du bundle de l'outil de rapprochement (typiquement via un hook boot ou un script global de votre application) :
frappe.provide("erpnext.accounts.bank_reconciliation.voucher_types");
erpnext.accounts.bank_reconciliation.voucher_types["Loan Repayment"] = {
is_applicable: (bank_transaction) => bank_transaction.deposit > 0,
get_fields: (dialog_manager) => [
// champs de dialogue affichés pour ce type
],
create: (dialog_manager, values, allow_edit) =>
frappe.xcall("lending.api.create_loan_repayment", { ... }),
};
Une entrée du registre peut définir trois fonctions :
get_fields(dialog_manager) — renvoie un tableau de champs de dialogue supplémentaires affichés sous le sélecteur « Type de document ». Utilisez dialog_manager pour accéder au contexte (compte bancaire, transaction sélectionnée) si nécessaire.is_applicable(bank_transaction) — renvoie true/false pour masquer ou afficher ce type selon la transaction. Par exemple, ne proposer « Remboursement de prêt » que pour les dépôts (bank_transaction.deposit > 0).create(dialog_manager, values, allow_edit) — effectue l'appel serveur et renvoie la transaction bancaire réconciliée. Si allow_edit est vrai (chemin « Éditer en pleine page »), renvoyez le brouillon pour que l'utilisateur puisse le compléter avant soumission ; la réconciliation est alors déclenchée automatiquement après soumission.is_applicable sont masqués.get_fields sont injectés avant le bloc « Détails de la transaction ».create_voucher(values, allow_edit), qui appelle create du type sélectionné.Si un type de pièce propose l'édition en pleine page, l'utilisateur peut corriger le brouillon avant de le soumettre. À la soumission :
Ce comportement s'applique aussi bien aux types natifs qu'aux types fournis par des applications tierces.
L'application Lending enregistre un type « Loan Repayment » :
is_applicable : true uniquement pour les dépôts (remboursements reçus).get_fields : ajoute un champ « prêt » obligatoire pour rattacher le remboursement au contrat.create : appelle lending.api.create_loan_repayment qui crée l'écriture de remboursement et renvoie la transaction réconciliée.Le comptable voit désormais « Loan Repayment » dans le sélecteur de type de pièce pour les transactions entrantes et peut créer le remboursement sans quitter le rapprochement bancaire.
is_applicable n'est pas défini, le type est proposé pour toutes les transactions.create doit toujours renvoyer la transaction bancaire réconciliée (chemin direct) ou le brouillon (pleine page) pour que l'outil puisse mettre à jour l'interface.erpnext/public/js/bank_reconciliation_tool/dialog_manager.jserpnext/tests/js/bank_reconciliation_dialog_manager.test.mjs