Dokos et son framework sous-jacent (Frappe) offrent un système puissant de hooks pour personnaliser le comportement des applications sans modifier le code source principal. Les hooks permettent d'étendre ou de modifier des fonctionnalités existantes de manière propre et maintenable.
Un hook est un point d'ancrage dans le code qui permet d'exécuter une fonction personnalisée à un moment précis du cycle de vie d'une application ou d'une transaction. Les hooks sont définis dans le fichier hooks.py de votre application.
Permettent de valider des données avant qu'elles ne soient sauvegardées.
Exemple :
validate = ["mon_app.hooks.validate_client"]
Permettent de personnaliser des calculs, comme les taxes ou les totaux.
Exemple :
# Déjà documenté dans la section taxes
erpnext_taxable_base_resolvers = {"Sur MRP": "mon_app.taxes.calcul_sur_mrp"}
Permettent de déclencher des actions après un événement spécifique (création, mise à jour, suppression).
Exemple :
after_insert = ["mon_app.hooks.envoyer_email_confirmation"]
taxable-base resolver pour les taxesCe hook permet de personnaliser la base taxable pour des types de taxes spécifiques, comme les taxes sur le prix public conseillé (MRP) ou d'autres règles locales.
Ajoutez le hook dans le fichier hooks.py de votre application :
erpnext_taxable_base_resolvers = {
"Sur MRP": "mon_app.taxes.calcul_sur_mrp",
"Taxe Brésilienne": "mon_app.taxes.calcul_taxes_bresil"
}
Créez une fonction Python qui calcule la base taxable :
# mon_app/taxes.py
def calcul_sur_mrp(calc, item, tax):
"""
Calcule la base taxable basée sur le prix public conseillé (MRP).
Args:
calc: Objet de calcul des taxes.
item: Ligne d'article dans la transaction.
tax: Ligne de taxe dans le modèle de taxe.
Returns:
float: Base taxable calculée.
"""
return item.price_list_rate * item.qty
Pour que le calcul soit également effectué côté client (par exemple, dans les formulaires de vente), définissez une fonction JavaScript équivalente :
// Dans un fichier JavaScript personnalisé
erpnext.taxable_base_resolvers["Sur MRP"] = (calc, item) => {
return item.price_list_rate * item.qty;
};
Scénario :
Configuration :
::: warning Les hooks personnalisés doivent être utilisés avec précaution pour éviter des comportements inattendus dans les transactions financières. Testez toujours vos modifications dans un environnement de développement avant de les déployer en production. :::