Employee Benefit Claim - filter for earning component
diff --git a/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.js b/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.js
index 64fde03..cb6da29 100644
--- a/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.js
+++ b/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.js
@@ -5,12 +5,12 @@
setup: function(frm) {
frm.set_query("earning_component", function() {
return {
- filters: {
- type: "Earning",
- is_flexible_benefit: true,
- disabled: false
- }
- };
+ query : "erpnext.hr.doctype.employee_benefit_claim.employee_benefit_claim.get_earning_components_for_claim",
+ filters: {claim_date: frm.doc.claim_date, employee: frm.doc.employee}
+ };
});
+ },
+ employee: function(frm) {
+ frm.set_value("earning_component", null);
}
});
diff --git a/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py b/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py
index 69797ba..b1dbcaa 100644
--- a/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py
+++ b/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py
@@ -8,6 +8,7 @@
from frappe.model.document import Document
from erpnext.hr.doctype.employee_benefit_application.employee_benefit_application import get_max_benefits
from erpnext.hr.utils import get_payroll_period
+from frappe.desk.reportview import get_match_cond
class EmployeeBenefitClaim(Document):
def validate(self):
@@ -120,3 +121,48 @@
if len(salary_components_array) > 0:
return salary_components_array
return False
+
+def get_earning_components_for_claim(doctype, txt, searchfield, start, page_len, filters):
+ if len(filters) < 2:
+ return {}
+ employee = filters['employee']
+ claim_date = filters['claim_date']
+
+ payroll_period = get_payroll_period(claim_date, claim_date, frappe.db.get_value("Employee", employee, "company"))
+ application = frappe.db.exists(
+ "Employee Benefit Application",
+ {
+ 'employee': employee,
+ 'payroll_period': payroll_period.name,
+ 'docstatus': 1
+ }
+ )
+ earning_components = get_earning_components_from_application(doctype, application, start, page_len)
+
+ if not earning_components:
+ earning_components = get_all_pro_rata_earning_components(doctype, start, page_len)
+ return earning_components
+
+def get_earning_components_from_application(doctype, parent, start, page_len):
+ query = """select earning_component from `tabEmployee Benefit Application Detail` where parent = '{parent}'
+ order by name"""
+
+ return frappe.db.sql(query.format(**{
+ "parent": parent,
+ "mcond": get_match_cond(doctype)
+ }), {
+ 'start': start,
+ 'page_len': page_len
+ })
+
+def get_all_pro_rata_earning_components(doctype, start, page_len):
+ return frappe.db.sql("""
+ select name from `tabSalary Component`
+ where is_flexible_benefit = 1 and is_pro_rata_applicable = 1
+ and type = 'Earning' and disabled = 0
+ """.format(**{
+ "mcond": get_match_cond(doctype)
+ }), {
+ 'start': start,
+ 'page_len': page_len
+ })