feat(HR): Working day calulation based on attendance or Leave
diff --git a/erpnext/payroll/doctype/gratuity/gratuity.py b/erpnext/payroll/doctype/gratuity/gratuity.py
index 23cc16b..dc2e773 100644
--- a/erpnext/payroll/doctype/gratuity/gratuity.py
+++ b/erpnext/payroll/doctype/gratuity/gratuity.py
@@ -6,7 +6,7 @@
 import frappe
 from frappe import _, bold
 from frappe.model.document import Document
-from frappe.utils import flt
+from frappe.utils import flt, get_datetime
 from math import floor
 
 from frappe.utils import get_datetime
@@ -68,17 +68,22 @@
 	if not relieving_date:
 		frappe.throw(_("Please set Relieving Date for employee: {0}").format(bold(employee)))
 
-	# time_difference = relativedelta(relieving_date, date_of_joining)
 	method = frappe.db.get_value("Gratuity Rule", gratuity_rule, "work_experience_calculation_function")
 
 	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"
+	if payroll_based_on == "Leave":
+		total_lwp = get_non_working_days(employee, relieving_date, "On Leave")
+		employee_total_workings_days -= total_lwp
+	elif  payroll_based_on == "Attendance":
+		total_absents = get_non_working_days(employee, relieving_date, "Absent")
+		employee_total_workings_days -= total_absents
+
 	# current_work_experience = time_difference.years
 
 	current_work_experience = employee_total_workings_days/total_working_days_per_year or 1
 
-	print("--->", current_work_experience)
-
 	if method == "Round off Work Experience":
 		current_work_experience = round(current_work_experience)
 	else:
@@ -87,6 +92,24 @@
 
 	return current_work_experience
 
+def get_non_working_days(employee, relieving_date, status):
+
+	filters={
+			"docstatus": 1,
+			"status": status,
+			"employee": employee,
+			"attendance_date": ("<=", get_datetime(relieving_date))
+		}
+
+	if status == "On Leave":
+		lwp_leave_types =  frappe.get_list("Leave Type", filters = {"is_lwp":1})
+		lwp_leave_types = [leave_type.name for leave_type in lwp_leave_types]
+		filters["leave_type"] =  ("IN", lwp_leave_types)
+
+
+	record = frappe.get_all("Attendance", filters=filters, fields = ["COUNT(name) as total_lwp"], debug = 1)
+	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"])
 	applicable_earnings_component = [component.salary_component for component in applicable_earnings_component]
@@ -95,15 +118,13 @@
 
 	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
 	fraction_to_be_paid = 0
 	year_left = experience
 	for slab in slabs:
-		if calculate_gratuity_amount_based_on == "Single Slab":
+		if calculate_gratuity_amount_based_on == "Current Slab":
 			if experience >= slab.get("from", 0) and (slab.to == 0 or experience <= slab.to):
 				gratuity_amount = total_applicable_components_amount * experience * slab.fraction_of_applicable_earnings
 				if slab.fraction_of_applicable_earnings:
@@ -116,13 +137,10 @@
 			if experience > slab.get("to") and experience > slab.get("from"):
 				gratuity_amount += (slab.get("to") - slab.get("from")) * total_applicable_components_amount * slab.fraction_of_applicable_earnings
 				year_left -= (slab.get("to") - slab.get("from"))
-				print(experience, year_left)
 			elif slab.get("from") < experience < slab.get("to"):
-				print(year_left)
 				gratuity_amount += year_left * total_applicable_components_amount * slab.fraction_of_applicable_earnings
 
 
-
 	return gratuity_amount
 
 def get_total_applicable_component_amount(employee, applicable_earnings_component, gratuity_rule):
diff --git a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.json b/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.json
index 40906fa..0df274d 100644
--- a/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.json
+++ b/erpnext/payroll/doctype/gratuity_rule/gratuity_rule.json
@@ -27,7 +27,7 @@
    "fieldtype": "Select",
    "in_list_view": 1,
    "label": "Calculate Gratuity Amount Based on",
-   "options": "Single Slab\nSum of all previous slabs",
+   "options": "Current slab\nSum of all previous slabs",
    "reqd": 1
   },
   {
@@ -65,11 +65,11 @@
   {
    "fieldname": "total_working_days_per_year",
    "fieldtype": "Int",
-   "label": "Total Working Days per year"
+   "label": "Total Working Days Per Year"
   }
  ],
  "links": [],
- "modified": "2020-08-13 16:21:10.466739",
+ "modified": "2020-08-14 14:17:36.599008",
  "modified_by": "Administrator",
  "module": "Payroll",
  "name": "Gratuity Rule",