diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 38364d8cef2..ded28c91204 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -192,6 +192,7 @@ class PaymentEntry(AccountsController): self.update_payment_schedule() self.set_payment_req_outstanding_amount() self.set_payment_req_status() + self.set_reference_advance_payment_status() self.set_status() def set_liability_account(self): @@ -268,6 +269,7 @@ class PaymentEntry(AccountsController): self.update_payment_schedule(cancel=1) self.set_payment_req_outstanding_amount(cancel=True) self.set_payment_req_status() + self.set_reference_advance_payment_status() self.set_status() def set_payment_req_outstanding_amount(self, cancel=False): @@ -282,6 +284,18 @@ class PaymentEntry(AccountsController): update_payment_req_status(self, None) + # todo: need to optimize + def set_reference_advance_payment_status(self): + advance_payment_doctypes = frappe.get_hooks("advance_payment_receivable_doctypes") + frappe.get_hooks( + "advance_payment_payable_doctypes" + ) + + for ref in self.get("references"): + ref_doc = frappe.get_doc(ref.reference_doctype, ref.reference_name) + if ref.reference_doctype in advance_payment_doctypes: + # set advance payment status + ref_doc.set_advance_payment_status() + def update_outstanding_amounts(self): self.set_missing_ref_details(force=True) @@ -1744,7 +1758,7 @@ class PaymentEntry(AccountsController): frappe.msgprint(msg=msg, alert=True, indicator="orange") - # todo: can be optimized + # todo: can be optimize @frappe.whitelist() def set_matched_payment_requests(self): if not self.references: @@ -1799,7 +1813,7 @@ class PaymentEntry(AccountsController): ) -# todo: can be optimized +# todo: can be optimize def get_matched_payment_request(reference_doctype, reference_name, outstanding_amount): payment_requests = frappe.get_all( doctype="Payment Request", diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py index 42d47596570..77b4e0ea43c 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -154,15 +154,6 @@ class PaymentRequest(Document): ).format(self.grand_total, amount) ) - def on_change(self): - ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name) - advance_payment_doctypes = frappe.get_hooks("advance_payment_receivable_doctypes") + frappe.get_hooks( - "advance_payment_payable_doctypes" - ) - if self.reference_doctype in advance_payment_doctypes: - # set advance payment status - ref_doc.set_advance_payment_status() - def before_submit(self): self.outstanding_amount = self.grand_total @@ -180,6 +171,9 @@ class PaymentRequest(Document): self.send_email() self.make_communication_entry() + def on_submit(self): + self.update_reference_advance_payment_status() + def request_phone_payment(self): controller = _get_payment_gateway_controller(self.payment_gateway) request_amount = self.get_request_amount() @@ -217,6 +211,7 @@ class PaymentRequest(Document): def on_cancel(self): self.check_if_payment_entry_exists() self.set_as_cancelled() + self.update_reference_advance_payment_status() def make_invoice(self): from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice @@ -424,6 +419,15 @@ class PaymentRequest(Document): return create_stripe_subscription(gateway_controller, data) + def update_reference_advance_payment_status(self): + ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name) + advance_payment_doctypes = frappe.get_hooks("advance_payment_receivable_doctypes") + frappe.get_hooks( + "advance_payment_payable_doctypes" + ) + if self.reference_doctype in advance_payment_doctypes: + # set advance payment status + ref_doc.set_advance_payment_status() + @frappe.whitelist(allow_guest=True) def make_payment_request(**args): diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 96dd55200d9..831a8c51bba 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -1943,6 +1943,8 @@ class AccountsController(TransactionBase): self.set_advance_payment_status() + # todo: need to optimize + # todo: modularize def set_advance_payment_status(self): from erpnext.accounts.doctype.payment_request.payment_request import ( get_existing_payment_request_amount as get_paid_amount,