From adde080384da12dfe373b7e7a545dc042cb53000 Mon Sep 17 00:00:00 2001 From: barredterra <14891507+barredterra@users.noreply.github.com> Date: Thu, 7 Oct 2021 13:04:09 +0200 Subject: [PATCH] feat: resolve dunning on payment entry --- erpnext/accounts/doctype/dunning/dunning.py | 25 ++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/erpnext/accounts/doctype/dunning/dunning.py b/erpnext/accounts/doctype/dunning/dunning.py index 0e97b853f26..6e99c378ccd 100644 --- a/erpnext/accounts/doctype/dunning/dunning.py +++ b/erpnext/accounts/doctype/dunning/dunning.py @@ -68,15 +68,30 @@ class Dunning(AccountsController): def resolve_dunning(doc, state): """ - Todo: refactor + Check if all payments have been made and resolve dunning, if yes. Called + when a Payment Entry is submitted. """ for reference in doc.references: if reference.reference_doctype == "Sales Invoice" and reference.outstanding_amount <= 0: - dunnings = frappe.get_list("Dunning", filters={ - "sales_invoice": reference.reference_name, "status": ("!=", "Resolved")}, ignore_permissions=True) + unresolved_dunnings = frappe.get_all("Dunning", + filters={ + "sales_invoice": reference.reference_name, + "status": ("!=", "Resolved") + }, + pluck="name" + ) - for dunning in dunnings: - frappe.db.set_value("Dunning", dunning.name, "status", "Resolved") + for dunning_name in unresolved_dunnings: + resolve = True + dunning = frappe.get_doc("Dunning", dunning_name) + for overdue_payment in dunning.overdue_payments: + outstanding = frappe.get_value("Payment Schedule", overdue_payment.payment_schedule, "outstanding") + if outstanding >= 0: + resolve = False + + if resolve: + dunning.status = "Resolved" + dunning.save() @frappe.whitelist()