From 2ee211ad2118ed93b20ae5ff22051fc55e9aaeeb Mon Sep 17 00:00:00 2001 From: Jamsheer Date: Tue, 22 May 2018 13:42:53 +0530 Subject: [PATCH] Salary Structure - validate max benefits with flexi --- .../salary_structure/salary_structure.py | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.py b/erpnext/hr/doctype/salary_structure/salary_structure.py index 23c57de651..affd2bb0da 100644 --- a/erpnext/hr/doctype/salary_structure/salary_structure.py +++ b/erpnext/hr/doctype/salary_structure/salary_structure.py @@ -13,6 +13,7 @@ class SalaryStructure(Document): def validate(self): self.validate_amount() self.strip_condition_and_formula_fields() + self.validate_max_benefits_with_flexi() def validate_amount(self): if flt(self.net_pay) < 0 and self.salary_slip_based_on_timesheet: @@ -28,11 +29,27 @@ class SalaryStructure(Document): row.condition = row.condition.strip() if row.condition else "" row.formula = row.formula.strip() if row.formula else "" + def validate_max_benefits_with_flexi(self): + have_a_flexi = False + if self.max_benefits > 0 and self.earnings: + flexi_amount = 0 + for earning_component in self.earnings: + if earning_component.is_flexible_benefit == 1: + have_a_flexi = True + max_of_component = frappe.db.get_value("Salary Component", earning_component.salary_component, "max_benefit_amount") + flexi_amount += max_of_component + if self.max_benefits > flexi_amount: + frappe.throw(_("Total flexi component amount {0} should not be less \ + than max benefits {1}").format(flexi_amount, self.max_benefits)) + if not have_a_flexi and self.max_benefits > 0: + frappe.throw(_("Flexi component require to add max benefit")) + + @frappe.whitelist() def make_salary_slip(source_name, target_doc = None, employee = None, as_print = False, print_format = None): def postprocess(source, target): if employee: - employee_details = frappe.db.get_value("Employee", employee, + employee_details = frappe.db.get_value("Employee", employee, ["employee_name", "branch", "designation", "department"], as_dict=1) target.employee = employee target.employee_name = employee_details.employee_name @@ -62,4 +79,4 @@ def make_salary_slip(source_name, target_doc = None, employee = None, as_print = def get_employees(salary_structure): employees = frappe.get_list('Salary Structure Assignment', filters={'salary_structure': salary_structure}, fields=['employee']) - return list(set([d.employee for d in employees])) \ No newline at end of file + return list(set([d.employee for d in employees]))