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")
 
