diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py index 14a438d426d8d5fa11f66634d414c703c6c1c705..a135d248edcbe41a9a87536310f95bc6ce37e4ec 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -442,23 +442,26 @@ 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) - if self.make_sales_invoice: - self.make_invoice() - frappe.flags.mute_messages = False + payment_entry = self.create_payment_entry(reference_no=reference_no) + if self.make_sales_invoice: + 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 @@ -724,7 +727,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: