fix(pr): set adv. pay. status base on pr stati
This commit is contained in:
@@ -149,6 +149,15 @@ 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 on_submit(self):
|
||||
if self.payment_request_type == "Outward":
|
||||
self.db_set("status", "Initiated")
|
||||
@@ -172,13 +181,6 @@ class PaymentRequest(Document):
|
||||
elif self.payment_channel == "Phone":
|
||||
self.request_phone_payment()
|
||||
|
||||
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_total_advance_paid()
|
||||
|
||||
def request_phone_payment(self):
|
||||
controller = _get_payment_gateway_controller(self.payment_gateway)
|
||||
request_amount = self.get_request_amount()
|
||||
@@ -217,14 +219,6 @@ class PaymentRequest(Document):
|
||||
self.check_if_payment_entry_exists()
|
||||
self.set_as_cancelled()
|
||||
|
||||
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_total_advance_paid()
|
||||
|
||||
def make_invoice(self):
|
||||
ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)
|
||||
if hasattr(ref_doc, "order_type") and ref_doc.order_type == "Shopping Cart":
|
||||
|
||||
@@ -1924,32 +1924,43 @@ class AccountsController(TransactionBase):
|
||||
|
||||
self.db_set("advance_paid", advance_paid)
|
||||
|
||||
self.set_advance_payment_status(advance_paid, order_total)
|
||||
self.set_advance_payment_status()
|
||||
|
||||
def set_advance_payment_status(self, advance_paid: float | None = None, order_total: float | None = None):
|
||||
def set_advance_payment_status(self):
|
||||
new_status = None
|
||||
# if money is paid set the paid states
|
||||
if advance_paid:
|
||||
new_status = "Partially Paid" if advance_paid < order_total else "Fully Paid"
|
||||
|
||||
if not new_status:
|
||||
prs = frappe.db.count(
|
||||
"Payment Request",
|
||||
{
|
||||
"reference_doctype": self.doctype,
|
||||
"reference_name": self.name,
|
||||
"docstatus": 1,
|
||||
},
|
||||
)
|
||||
if self.doctype in frappe.get_hooks("advance_payment_receivable_doctypes"):
|
||||
new_status = "Requested" if prs else "Not Requested"
|
||||
if self.doctype in frappe.get_hooks("advance_payment_payable_doctypes"):
|
||||
new_status = "Initiated" if prs else "Not Initiated"
|
||||
stati = frappe.get_list(
|
||||
"Payment Request",
|
||||
{
|
||||
"reference_doctype": self.doctype,
|
||||
"reference_name": self.name,
|
||||
"docstatus": 1,
|
||||
},
|
||||
pluck="status",
|
||||
)
|
||||
if self.doctype in frappe.get_hooks("advance_payment_receivable_doctypes"):
|
||||
if not stati:
|
||||
new_status = "Not Requested"
|
||||
elif "Requested" in stati or "Failed" in stati:
|
||||
new_status = "Requested"
|
||||
elif "Partially Paid" in stati:
|
||||
new_status = "Partially Paid"
|
||||
elif "Paid" in stati:
|
||||
new_status = "Fully Paid"
|
||||
if self.doctype in frappe.get_hooks("advance_payment_payable_doctypes"):
|
||||
if not stati:
|
||||
new_status = "Not Initiated"
|
||||
elif "Initiated" in stati or "Failed" in stati or "Payment Ordered" in stati:
|
||||
new_status = "Initiated"
|
||||
elif "Partially Paid" in stati:
|
||||
new_status = "Partially Paid"
|
||||
elif "Paid" in stati:
|
||||
new_status = "Fully Paid"
|
||||
|
||||
if new_status == self.advance_payment_status:
|
||||
return
|
||||
|
||||
self.db_set("advance_payment_status", new_status)
|
||||
self.db_set("advance_payment_status", new_status, update_modified=False)
|
||||
self.set_status(update=True)
|
||||
self.notify_update()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user