Employee Benefit Claim - non pro-rata claim validation updated
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 b8aef0c..809bf40 100644
--- a/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py
+++ b/erpnext/hr/doctype/employee_benefit_claim/employee_benefit_claim.py
@@ -6,7 +6,7 @@
 import frappe
 from frappe import _
 from frappe.model.document import Document
-from erpnext.hr.doctype.employee_benefit_application.employee_benefit_application import get_max_benefits
+from erpnext.hr.doctype.employee_benefit_application.employee_benefit_application import get_max_benefits, get_assigned_salary_sturecture
 from erpnext.hr.utils import get_payroll_period
 from frappe.desk.reportview import get_match_cond
 
@@ -41,16 +41,39 @@
 		claimed_amount = self.claimed_amount
 		pro_rata_amount = self.get_pro_rata_amount_in_application(payroll_period.name)
 		if not pro_rata_amount:
-			pro_rata_amount = 0
-			# TODO: 
 			# Get pro_rata_amount if there is no application,
-			# get salary slip for the period and calculate pro-rata amount per day and mulitply with payroll_period_days
+			# get salary structure for the date and calculate pro-rata amount
+			pro_rata_amount = self.get_benefit_pro_rata_ratio_amount()
+		if not pro_rata_amount:
+			pro_rata_amount = 0
 
 		claimed_amount += self.get_previous_claimed_amount(payroll_period, True)
 		if max_benefits < pro_rata_amount + claimed_amount:
 			frappe.throw(_("Maximum benefit of employee {0} exceeds {1} by the sum {2} of benefit application pro-rata component\
 			amount and previous claimed amount").format(self.employee, max_benefits, pro_rata_amount+claimed_amount-max_benefits))
 
+	def get_benefit_pro_rata_ratio_amount(self):
+		sal_struct_name = get_assigned_salary_sturecture(self.employee, self.claim_date)
+		if len(sal_struct_name) > 0:
+			sal_struct = frappe.get_doc("Salary Structure", sal_struct_name[0][0])
+			total_pro_rata_max = 0
+			benefit_amount_total = 0
+			for sal_struct_row in sal_struct.get("earnings"):
+				is_pro_rata_applicable, max_benefit_amount = frappe.db.get_value("Salary Component", sal_struct_row.salary_component, ["is_pro_rata_applicable", "max_benefit_amount"])
+				if sal_struct_row.is_flexible_benefit == 1 and is_pro_rata_applicable == 1:
+					total_pro_rata_max += max_benefit_amount
+			if total_pro_rata_max > 0:
+				for sal_struct_row in sal_struct.get("earnings"):
+					is_pro_rata_applicable, max_benefit_amount = frappe.db.get_value("Salary Component", sal_struct_row.salary_component, ["is_pro_rata_applicable", "max_benefit_amount"])
+					if sal_struct_row.is_flexible_benefit == 1 and is_pro_rata_applicable == 1:
+						component_max = max_benefit_amount
+						benefit_amount = component_max * sal_struct.max_benefits / total_pro_rata_max
+						if benefit_amount > component_max:
+							benefit_amount = component_max
+						benefit_amount_total += benefit_amount
+				return benefit_amount_total
+		return False
+
 	def get_pro_rata_amount_in_application(self, payroll_period):
 		application = frappe.db.exists(
 			"Employee Benefit Application",