diff --git a/hrms/hr/doctype/full_and_final_statement/full_and_final_statement.py b/hrms/hr/doctype/full_and_final_statement/full_and_final_statement.py index 2a465d1ed6..a48c4860b8 100644 --- a/hrms/hr/doctype/full_and_final_statement/full_and_final_statement.py +++ b/hrms/hr/doctype/full_and_final_statement/full_and_final_statement.py @@ -8,6 +8,16 @@ class FullandFinalStatement(Document): + def on_change(self): + for payable in self.payables: + if payable.component == "Gratuity": + gratuity = frappe.get_doc("Gratuity", payable.reference_document) + if self.status == "Paid": + amount = payable.amount if self.docstatus == 1 else 0 + gratuity.db_set("paid_amount", amount) + if self.docstatus == 2: + gratuity.set_status(update=True, cancel=True) + def before_insert(self): self.get_outstanding_statements() diff --git a/hrms/payroll/doctype/gratuity/gratuity.py b/hrms/payroll/doctype/gratuity/gratuity.py index de25701a0d..7a3cc56795 100644 --- a/hrms/payroll/doctype/gratuity/gratuity.py +++ b/hrms/payroll/doctype/gratuity/gratuity.py @@ -34,7 +34,7 @@ def gratuity_settings(self): return self._gratuity_settings - def set_status(self, update=False): + def set_status(self, update=False, cancel=False): status = {"0": "Draft", "1": "Submitted", "2": "Cancelled"}[cstr(self.docstatus or 0)] if self.docstatus == 1: @@ -44,17 +44,24 @@ def set_status(self, update=False): else: status = "Unpaid" - if update: - self.db_set("status", status) + if update and self.status != status: + if self.status != status: + self.db_set("status", status) else: self.status = status + if cancel and self.docstatus != 2: + self.db_set("docstatus", 2) + def on_submit(self): if self.pay_via_salary_slip: self.create_additional_salary() else: self.create_gl_entries() + def on_change(self): + self.set_status(update=True) + def on_cancel(self): self.ignore_linked_doctypes = ["GL Entry"] self.create_gl_entries(cancel=True)