From 2d7fcab2c96e82d4f812a8f8355660d457a7b593 Mon Sep 17 00:00:00 2001 From: Anurag Mishra Date: Mon, 13 Jan 2020 19:10:48 +0530 Subject: [PATCH] feat: Recurring Addtional Salary --- .../additional_salary/additional_salary.js | 2 +- .../additional_salary/additional_salary.json | 34 ++++++++++++++----- .../additional_salary/additional_salary.py | 27 ++++++++++++--- erpnext/hr/doctype/salary_slip/salary_slip.py | 1 + 4 files changed, 49 insertions(+), 15 deletions(-) diff --git a/erpnext/hr/doctype/additional_salary/additional_salary.js b/erpnext/hr/doctype/additional_salary/additional_salary.js index 18f6b8b52d5..fb42b6f410e 100644 --- a/erpnext/hr/doctype/additional_salary/additional_salary.js +++ b/erpnext/hr/doctype/additional_salary/additional_salary.js @@ -13,5 +13,5 @@ frappe.ui.form.on('Additional Salary', { } }; }); - } + }, }); diff --git a/erpnext/hr/doctype/additional_salary/additional_salary.json b/erpnext/hr/doctype/additional_salary/additional_salary.json index 9819b384eed..91bcdc394a3 100644 --- a/erpnext/hr/doctype/additional_salary/additional_salary.json +++ b/erpnext/hr/doctype/additional_salary/additional_salary.json @@ -17,8 +17,10 @@ "ref_docname", "column_break_5", "company", + "is_recurring", + "from_date", + "to_date", "payroll_date", - "salary_slip", "type", "department", "amount", @@ -76,12 +78,13 @@ "fieldtype": "Column Break" }, { + "depends_on": "eval:(doc.is_recurring==0)", "description": "Date on which this component is applied", "fieldname": "payroll_date", "fieldtype": "Date", "in_list_view": 1, "label": "Payroll Date", - "reqd": 1, + "mandatory_depends_on": "eval:(doc.is_recurring==0)", "search_index": 1 }, { @@ -107,13 +110,6 @@ "options": "Company", "reqd": 1 }, - { - "fieldname": "salary_slip", - "fieldtype": "Link", - "label": "Salary Slip", - "options": "Salary Slip", - "read_only": 1 - }, { "fetch_from": "salary_component.type", "fieldname": "type", @@ -131,6 +127,26 @@ "read_only": 1 }, { + "default": "0", + "fieldname": "is_recurring", + "fieldtype": "Check", + "label": "Is Recurring" + }, + { + "depends_on": "eval:(doc.is_recurring==1)", + "fieldname": "from_date", + "fieldtype": "Date", + "label": "From Date", + "mandatory_depends_on": "eval:(doc.is_recurring==1)" + }, + { + "depends_on": "eval:(doc.is_recurring==1)", + "fieldname": "to_date", + "fieldtype": "Date", + "label": "To Date", + "mandatory_depends_on": "eval:(doc.is_recurring==1)" + }, + { "fieldname": "ref_doctype", "fieldtype": "Link", "label": "Reference Document Type", diff --git a/erpnext/hr/doctype/additional_salary/additional_salary.py b/erpnext/hr/doctype/additional_salary/additional_salary.py index bc7dcee55e4..a6f34cc759e 100644 --- a/erpnext/hr/doctype/additional_salary/additional_salary.py +++ b/erpnext/hr/doctype/additional_salary/additional_salary.py @@ -21,10 +21,23 @@ class AdditionalSalary(Document): frappe.throw(_("Amount should not be less than zero.")) def validate_dates(self): - date_of_joining, relieving_date = frappe.db.get_value("Employee", self.employee, + date_of_joining, relieving_date = frappe.db.get_value("Employee", self.employee, ["date_of_joining", "relieving_date"]) - if date_of_joining and getdate(self.payroll_date) < getdate(date_of_joining): - frappe.throw(_("Payroll date can not be less than employee's joining date")) + + if not self.is_recurring and not self.payroll_date: + frappe.msgprint(_("Please enter Payroll Date."), indicator='blue', raise_exception=1) + if self.is_recurring and not self.from_date and not self.to_date: + frappe.msgprint(_("Please enter From Date and To Date."), indicator='blue', raise_exception=1) + if getdate(self.from_date) > getdate(self.to_date): + frappe.throw(_("From Date can not be greater than To Date.")) + + if date_of_joining: + if getdate(self.payroll_date) < getdate(date_of_joining): + frappe.throw(_("Payroll date can not be less than employee's joining date.")) + elif getdate(self.from_date) < getdate(date_of_joining): + frappe.throw(_("From date can not be less than employee's joining date.")) + elif getdate(self.to_date) > getdate(relieving_date): + frappe.throw(_("To date can not be greater than employee's relieving date.")) def get_amount(self, sal_start_date, sal_end_date): start_date = getdate(sal_start_date) @@ -45,8 +58,12 @@ def get_additional_salary_component(employee, start_date, end_date, component_ty from `tabAdditional Salary` where employee=%(employee)s and docstatus = 1 - and payroll_date between %(from_date)s and %(to_date)s - and type = %(component_type)s + and (payroll_date between %(from_date)s and %(to_date)s) + or ( + (from_date between %(from_date)s and %(to_date)s) + or(to_date between %(from_date)s and %(to_date)s) + ) + and type = %(component_type)s group by salary_component, overwrite_salary_structure_amount order by salary_component, overwrite_salary_structure_amount """, { diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index d03a3dd9a36..a78f55ca324 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -410,6 +410,7 @@ class SalarySlip(TransactionBase): if additional_components: for additional_component in additional_components: amount = additional_component.amount + print("-------------[>>>]", amount) overwrite = additional_component.overwrite self.update_component_row(frappe._dict(additional_component.struct_row), amount, component_type, overwrite=overwrite)