fix: changes requested
diff --git a/erpnext/payroll/doctype/gratuity/gratuity.py b/erpnext/payroll/doctype/gratuity/gratuity.py
index 5a08f6a..7160bf0 100644
--- a/erpnext/payroll/doctype/gratuity/gratuity.py
+++ b/erpnext/payroll/doctype/gratuity/gratuity.py
@@ -113,7 +113,13 @@
 		frappe.throw(_("Please set Relieving Date for employee: {0}").format(bold(get_link_to_form("Employee", employee))))
 
 	method = frappe.db.get_value("Gratuity Rule", gratuity_rule, "work_experience_calculation_function")
+	employee_total_workings_days = calculate_employee_total_workings_days(employee, date_of_joining, relieving_date)
 
+	current_work_experience = employee_total_workings_days/total_working_days_per_year or 1
+	current_work_experience = get_work_experience_using_method(method, current_work_experience, minimum_year_for_gratuity)
+	return current_work_experience
+
+def calculate_employee_total_workings_days(employee, date_of_joining, relieving_date ):
 	employee_total_workings_days = (get_datetime(relieving_date) - get_datetime(date_of_joining)).days
 
 	payroll_based_on = frappe.db.get_value("Payroll Settings", None, "payroll_based_on") or "Leave"
@@ -124,10 +130,9 @@
 		total_absents = get_non_working_days(employee, relieving_date, "Absent")
 		employee_total_workings_days -= total_absents
 
-	# current_work_experience = time_difference.years
+	return employee_total_workings_days
 
-	current_work_experience = employee_total_workings_days/total_working_days_per_year or 1
-
+def get_work_experience_using_method(method, current_work_experience, minimum_year_for_gratuity):
 	if method == "Round off Work Experience":
 		current_work_experience = round(current_work_experience)
 	else:
@@ -135,7 +140,6 @@
 
 	if current_work_experience < minimum_year_for_gratuity:
 		frappe.throw(_("Employee: {0} have to complete minimum {1} years for gratuity").format(bold(employee), minimum_year_for_gratuity))
-
 	return current_work_experience
 
 def get_non_working_days(employee, relieving_date, status):
@@ -157,27 +161,22 @@
 	return record[0].total_lwp if len(record) else 0
 
 def calculate_gratuity_amount(employee, gratuity_rule, experience):
-	applicable_earnings_component = frappe.get_all("Gratuity Applicable Component", filters= {'parent': gratuity_rule}, fields=["salary_component"])
-	if len(applicable_earnings_component) == 0:
-		frappe.throw(_("No Applicable Earnings Component found for Gratuity Rule: {0}").format(bold(get_link_to_form("Gratuity Rule",gratuity_rule))))
-	applicable_earnings_component = [component.salary_component for component in applicable_earnings_component]
-
-	slabs = get_gratuity_rule_slabs(gratuity_rule)
-
+	applicable_earnings_component = get_applicable_components(gratuity_rule)
 	total_applicable_components_amount = get_total_applicable_component_amount(employee, applicable_earnings_component, gratuity_rule)
 
 	calculate_gratuity_amount_based_on = frappe.db.get_value("Gratuity Rule", gratuity_rule, "calculate_gratuity_amount_based_on")
-
 	gratuity_amount = 0
+	slabs = get_gratuity_rule_slabs(gratuity_rule)
 	slab_found = False
 	year_left = experience
+
 	for slab in slabs:
 		if calculate_gratuity_amount_based_on == "Current Slab":
-			if experience >= slab.from_year and (slab.to_year == 0 or experience < slab.to_year):
-				gratuity_amount = total_applicable_components_amount * experience * slab.fraction_of_applicable_earnings
-				if slab.fraction_of_applicable_earnings:
-					slab_found = True
+			slab_found, gratuity_amount = calculate_amount_based_on_current_slab(slab.from_year, slab.to_year,
+				experience, total_applicable_components_amount, slab.fraction_of_applicable_earnings)
+			if slab_found == True:
 					break
+
 		elif calculate_gratuity_amount_based_on == "Sum of all previous slabs":
 			if slab.to_year == 0 and slab.from_year == 0:
 				gratuity_amount += year_left * total_applicable_components_amount * slab.fraction_of_applicable_earnings
@@ -194,16 +193,20 @@
 
 	if not slab_found:
 		frappe.throw(_("No Suitable Slab found for Calculation of gratuity amount in Gratuity Rule: {0}").format(bold(gratuity_rule)))
-
-
 	return gratuity_amount
 
+def get_applicable_components(gratuity_rule):
+	applicable_earnings_component = frappe.get_all("Gratuity Applicable Component", filters= {'parent': gratuity_rule}, fields=["salary_component"])
+	if len(applicable_earnings_component) == 0:
+		frappe.throw(_("No Applicable Earnings Component found for Gratuity Rule: {0}").format(bold(get_link_to_form("Gratuity Rule",gratuity_rule))))
+	applicable_earnings_component = [component.salary_component for component in applicable_earnings_component]
+
+	return applicable_earnings_component
+
 def get_total_applicable_component_amount(employee, applicable_earnings_component, gratuity_rule):
 	sal_slip  = get_last_salary_slip(employee)
-
 	if not sal_slip:
 		frappe.throw(_("No Salary Slip is found for Employee: {0}").format(bold(employee)))
-
 	component_and_amounts = frappe.get_list("Salary Detail",
 		filters={
 			"docstatus": 1,
@@ -217,9 +220,17 @@
 		frappe.throw(_("No Applicable Component is present in last month salary slip"))
 	for data in component_and_amounts:
 		total_applicable_components_amount += data.amount
-
 	return total_applicable_components_amount
 
+def calculate_amount_based_on_current_slab(from_year, to_year, experience, total_applicable_components_amount, fraction_of_applicable_earnings):
+	slab_found = False; gratuity_amount = 0
+	if experience >= from_year and (to_year == 0 or experience < to_year):
+		gratuity_amount = total_applicable_components_amount * experience * fraction_of_applicable_earnings
+		if fraction_of_applicable_earnings:
+			slab_found = True
+
+	return slab_found, gratuity_amount
+
 def get_gratuity_rule_slabs(gratuity_rule):
 	return frappe.get_all("Gratuity Rule Slab", filters= {'parent': gratuity_rule}, fields = ["*"], order_by="idx")