From 36b951d018f5a4fe88f1f1cd2e67ec2d476af5ba Mon Sep 17 00:00:00 2001 From: venkat102 Date: Fri, 21 Mar 2025 13:17:32 +0530 Subject: [PATCH] fix(payment term): allocate payment amount when payment term is fetched from order (cherry picked from commit 5618859bd8e7a11f6bdf3a9be123c2d742aaa343) --- erpnext/controllers/accounts_controller.py | 25 ++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 89fd7e30ef2..c455a68a80c 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -2100,7 +2100,7 @@ class AccountsController(TransactionBase): and automatically_fetch_payment_terms and self.linked_order_has_payment_terms(po_or_so, fieldname, doctype) ): - self.fetch_payment_terms_from_order(po_or_so, doctype) + self.fetch_payment_terms_from_order(po_or_so, doctype, grand_total, base_grand_total) if self.get("payment_terms_template"): self.ignore_default_payment_terms_template = 1 elif self.get("payment_terms_template"): @@ -2141,7 +2141,7 @@ class AccountsController(TransactionBase): d.payment_amount * self.get("conversion_rate"), d.precision("base_payment_amount") ) else: - self.fetch_payment_terms_from_order(po_or_so, doctype) + self.fetch_payment_terms_from_order(po_or_so, doctype, grand_total, base_grand_total) self.ignore_default_payment_terms_template = 1 def get_order_details(self): @@ -2179,7 +2179,7 @@ class AccountsController(TransactionBase): def linked_order_has_payment_schedule(self, po_or_so): return frappe.get_all("Payment Schedule", filters={"parent": po_or_so}) - def fetch_payment_terms_from_order(self, po_or_so, po_or_so_doctype): + def fetch_payment_terms_from_order(self, po_or_so, po_or_so_doctype, grand_total, base_grand_total): """ Fetch Payment Terms from Purchase/Sales Order on creating a new Purchase/Sales Invoice. """ @@ -2195,12 +2195,25 @@ class AccountsController(TransactionBase): "invoice_portion": schedule.invoice_portion, "mode_of_payment": schedule.mode_of_payment, "description": schedule.description, - "payment_amount": schedule.payment_amount, - "base_payment_amount": schedule.base_payment_amount, - "outstanding": schedule.outstanding, "paid_amount": schedule.paid_amount, } + if payment_schedule["invoice_portion"]: + payment_schedule["payment_amount"] = flt( + grand_total * flt(payment_schedule["invoice_portion"]) / 100, + schedule.precision("payment_amount"), + ) + payment_schedule["base_payment_amount"] = flt( + base_grand_total * flt(payment_schedule["invoice_portion"]) / 100, + schedule.precision("base_payment_amount"), + ) + payment_schedule["outstanding"] = payment_schedule["payment_amount"] + else: + payment_schedule["base_payment_amount"] = flt( + schedule.base_payment_amount * self.get("conversion_rate"), + schedule.precision("base_payment_amount"), + ) + if schedule.discount_type == "Percentage": payment_schedule["discount_type"] = schedule.discount_type payment_schedule["discount"] = schedule.discount