Employee Benefit Application - earning component filter by salary structure flexi component
diff --git a/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.js b/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.js
index 956c1fb..d38af3c 100644
--- a/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.js
+++ b/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.js
@@ -5,31 +5,28 @@
 	setup: function(frm) {
 		frm.set_query("earning_component", "employee_benefits", function() {
 			return {
-				filters: {
-					type: "Earning",
-					is_flexible_benefit: true,
-					is_group: false,
-					flexi_default: false,
-					disabled: false
-				}
+				query : "erpnext.hr.doctype.employee_benefit_application.employee_benefit_application.get_earning_components",
+				filters: {date: frm.doc.date, employee: frm.doc.employee}
 			};
 		});
 	},
 	employee: function(frm) {
-		frappe.call({
-			method: "erpnext.hr.doctype.employee_benefit_application.employee_benefit_application.get_max_benefits",
-			args:{
-				employee: frm.doc.employee,
-				on_date: frm.doc.date
-			},
-			callback: function (data) {
-				if(!data.exc){
-					if(data.message){
-						frm.set_value("max_benefits", data.message);
+		if(frm.doc.employee && frm.doc.date){
+			frappe.call({
+				method: "erpnext.hr.doctype.employee_benefit_application.employee_benefit_application.get_max_benefits",
+				args:{
+					employee: frm.doc.employee,
+					on_date: frm.doc.date
+				},
+				callback: function (data) {
+					if(!data.exc){
+						if(data.message){
+							frm.set_value("max_benefits", data.message);
+						}
 					}
 				}
-			}
-		});
+			});
+		}
 	}
 });
 
diff --git a/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py b/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py
index b5da98e..56b711b 100644
--- a/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py
+++ b/erpnext/hr/doctype/employee_benefit_application/employee_benefit_application.py
@@ -8,6 +8,7 @@
 from frappe.utils import nowdate, date_diff, getdate
 from frappe.model.document import Document
 from erpnext.hr.doctype.payroll_period.payroll_period import get_payroll_period_days
+from frappe.desk.reportview import get_match_cond
 
 class EmployeeBenefitApplication(Document):
 	def validate(self):
@@ -130,3 +131,25 @@
 	amount_per_day = amount / payroll_period_days
 	total_amount = amount_per_day * salary_slip_days
 	return total_amount
+
+def get_earning_components(doctype, txt, searchfield, start, page_len, filters):
+	if len(filters) < 2:
+		return {}
+	employee = filters['employee']
+	date = filters['date']
+	salary_structure = get_assigned_salary_sturecture(employee, date)
+
+	if len(salary_structure) > 0:
+		query = """select salary_component from `tabSalary Detail` where parent = '{salary_structure}'
+		and is_flexible_benefit = 1
+		order by name"""
+
+		return frappe.db.sql(query.format(**{
+			"salary_structure": salary_structure[0][0],
+			"mcond": get_match_cond(doctype)
+		}), {
+			'start': start,
+			'page_len': page_len
+		})
+
+	return {}