From 6b40f5619838d162027d0dfb01463551d5f9653e Mon Sep 17 00:00:00 2001 From: Rucha Mahabal Date: Tue, 2 Jul 2024 11:00:03 +0530 Subject: [PATCH] feat: pull withheld salary slips in FnF (cherry picked from commit 77954db260cf0c71274e26a66456fb33f2637c3b) --- .../full_and_final_statement.py | 52 ++++++++++++++----- 1 file changed, 38 insertions(+), 14 deletions(-) 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 c2fced7e24..2a465d1ed6 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 @@ -61,19 +61,20 @@ def validate_assets(self): @frappe.whitelist() def get_outstanding_statements(self): - if self.relieving_date: - if not len(self.get("payables", [])): - components = self.get_payable_component() - self.create_component_row(components, "payables") - if not len(self.get("receivables", [])): - components = self.get_receivable_component() - self.create_component_row(components, "receivables") - self.get_assets_statements() - else: + if not self.relieving_date: frappe.throw( _("Set Relieving Date for Employee: {0}").format(get_link_to_form("Employee", self.employee)) ) + if not self.payables: + self.add_withheld_salary_slips() + components = self.get_payable_component() + self.create_component_row(components, "payables") + if not self.receivables: + components = self.get_receivable_component() + self.create_component_row(components, "receivables") + self.get_assets_statements() + def get_assets_statements(self): if not len(self.get("assets_allocated", [])): for data in self.get_assets_movement(): @@ -101,6 +102,30 @@ def set_totals(self): self.precision("total_receivable_amount"), ) + def add_withheld_salary_slips(self): + salary_slips = frappe.get_all( + "Salary Slip", + filters={ + "employee": self.employee, + "status": "Withheld", + "docstatus": ("!=", 2), + }, + fields=["name", "net_pay"], + ) + + for slip in salary_slips: + self.append( + "payables", + { + "status": "Unsettled", + "component": "Salary Slip", + "reference_document_type": "Salary Slip", + "reference_document": slip.name, + "amount": slip.net_pay, + "paid_via_salary_slip": 1, + }, + ) + def create_component_row(self, components, component_type): for component in components: self.append( @@ -114,7 +139,6 @@ def create_component_row(self, components, component_type): def get_payable_component(self): return [ - "Salary Slip", "Gratuity", "Expense Claim", "Bonus", @@ -122,10 +146,10 @@ def get_payable_component(self): ] def get_receivable_component(self): - return [ - "Loan", - "Employee Advance", - ] + receivables = ["Employee Advance"] + if "lending" in frappe.get_installed_apps(): + receivables.append("Loan") + return receivables def get_assets_movement(self): asset_movements = frappe.get_all(