diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py index 32020b88772754c4d427f05d0c30dd146742b2cd..91e6ba3571a9600fdd05fc3d1cabbf9c54ae74bd 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -331,22 +331,25 @@ class PaymentRequest(Document): @frappe.whitelist() def set_as_paid(self, reference_no=None): + payment_entry = None if reference_no and ( existing_pe := frappe.db.get_value( "Payment Entry", filters={"docstatus": 1, "reference_no": reference_no} ) ): - return frappe.get_doc("Payment Entry", existing_pe) + payment_entry = frappe.get_doc("Payment Entry", existing_pe) - frappe.flags.mute_messages = True - if reference_no: - self.register_customer(reference_no) + if not payment_entry: + frappe.flags.mute_messages = True + if reference_no: + self.register_customer(reference_no) - payment_entry = self.create_payment_entry(reference_no=reference_no) - self.make_invoice() - frappe.flags.mute_messages = False + payment_entry = self.create_payment_entry(reference_no=reference_no) + self.make_invoice() + frappe.flags.mute_messages = False - self.db_set("status", "Paid", commit=True) + if self.status != "Paid": + self.db_set("status", "Paid", commit=True) return payment_entry @@ -578,7 +581,6 @@ class PaymentRequest(Document): PAID_STATUSES = ("Authorized", "Completed", "Paid") curr_status, next_status = self.status, status is_not_draft = not self.docstatus.is_draft() - if next_status in PAID_STATUSES: self.run_method("set_as_paid", reference_no) elif (curr_status == "Requested") and (next_status == "Pending") and is_not_draft: