From f7eda8a156df74053a0a773c50032db8de2eb67b Mon Sep 17 00:00:00 2001 From: priyanshshah2442 Date: Fri, 6 Jun 2025 18:40:06 +0530 Subject: [PATCH] fix: patch to set discount percentange in case of mismatch --- .../set_additional_discount_percentage.py | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 erpnext/patches/v15_0/set_additional_discount_percentage.py diff --git a/erpnext/patches/v15_0/set_additional_discount_percentage.py b/erpnext/patches/v15_0/set_additional_discount_percentage.py new file mode 100644 index 00000000000..2015bfd6c32 --- /dev/null +++ b/erpnext/patches/v15_0/set_additional_discount_percentage.py @@ -0,0 +1,56 @@ +import frappe +from frappe import scrub +from frappe.model.meta import get_field_precision +from frappe.utils import flt + +from erpnext.accounts.report.calculated_discount_mismatch.calculated_discount_mismatch import ( + DISCOUNT_DOCTYPES, + LAST_MODIFIED_DATE_THRESHOLD, +) + + +def execute(): + for doctype in DISCOUNT_DOCTYPES: + documents = frappe.get_all( + doctype, + { + "docstatus": 0, + "modified": [">", LAST_MODIFIED_DATE_THRESHOLD], + "discount_amount": ["is", "set"], + }, + [ + "name", + "additional_discount_percentage", + "discount_amount", + "apply_discount_on", + "grand_total", + "net_total", + ], + ) + + if not documents: + continue + + precision = get_field_precision(frappe.get_meta(doctype).get_field("additional_discount_percentage")) + mismatched_documents = [] + + for doc in documents: + discount_applied_on = scrub(doc.apply_discount_on) + + calculated_discount_amount = flt( + doc.additional_discount_percentage * doc.get(discount_applied_on) / 100, + precision, + ) + + if calculated_discount_amount != doc.discount_amount: + mismatched_documents.append(doc.name) + + if mismatched_documents: + frappe.db.set_value( + doctype, + { + "name": ["in", mismatched_documents], + }, + "additional_discount_percentage", + 0, + )