feat: Recurring Addtional Salary
diff --git a/erpnext/hr/doctype/additional_salary/additional_salary.js b/erpnext/hr/doctype/additional_salary/additional_salary.js
index 18f6b8b..fb42b6f 100644
--- a/erpnext/hr/doctype/additional_salary/additional_salary.js
+++ b/erpnext/hr/doctype/additional_salary/additional_salary.js
@@ -13,5 +13,5 @@
}
};
});
- }
+ },
});
diff --git a/erpnext/hr/doctype/additional_salary/additional_salary.json b/erpnext/hr/doctype/additional_salary/additional_salary.json
index 9819b38..91bcdc3 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
},
{
@@ -108,13 +111,6 @@
"reqd": 1
},
{
- "fieldname": "salary_slip",
- "fieldtype": "Link",
- "label": "Salary Slip",
- "options": "Salary Slip",
- "read_only": 1
- },
- {
"fetch_from": "salary_component.type",
"fieldname": "type",
"fieldtype": "Data",
@@ -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 bc7dcee..a6f34cc 100644
--- a/erpnext/hr/doctype/additional_salary/additional_salary.py
+++ b/erpnext/hr/doctype/additional_salary/additional_salary.py
@@ -21,10 +21,23 @@
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 @@
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 d03a3dd..a78f55c 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.py
@@ -410,6 +410,7 @@
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)