Merge pull request #31013 from ruchamahabal/hr-reports-emp-status

feat: add Employee Status filter in leave balance reports
diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js
index 8bb3457..2339350 100644
--- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js
+++ b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.js
@@ -4,21 +4,21 @@
 frappe.query_reports["Employee Leave Balance"] = {
 	"filters": [
 		{
-			"fieldname":"from_date",
+			"fieldname": "from_date",
 			"label": __("From Date"),
 			"fieldtype": "Date",
 			"reqd": 1,
 			"default": frappe.defaults.get_default("year_start_date")
 		},
 		{
-			"fieldname":"to_date",
+			"fieldname": "to_date",
 			"label": __("To Date"),
 			"fieldtype": "Date",
 			"reqd": 1,
 			"default": frappe.defaults.get_default("year_end_date")
 		},
 		{
-			"fieldname":"company",
+			"fieldname": "company",
 			"label": __("Company"),
 			"fieldtype": "Link",
 			"options": "Company",
@@ -26,16 +26,29 @@
 			"default": frappe.defaults.get_user_default("Company")
 		},
 		{
-			"fieldname":"department",
+			"fieldname": "department",
 			"label": __("Department"),
 			"fieldtype": "Link",
 			"options": "Department",
 		},
 		{
-			"fieldname":"employee",
+			"fieldname": "employee",
 			"label": __("Employee"),
 			"fieldtype": "Link",
 			"options": "Employee",
+		},
+		{
+			"fieldname": "employee_status",
+			"label": __("Employee Status"),
+			"fieldtype": "Select",
+			"options": [
+				"",
+				{ "value": "Active", "label": __("Active") },
+				{ "value": "Inactive", "label": __("Inactive") },
+				{ "value": "Suspended", "label": __("Suspended") },
+				{ "value": "Left", "label": __("Left") },
+			],
+			"default": "Active",
 		}
 	],
 
diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
index ca352f1..1f7ade2 100644
--- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
+++ b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py
@@ -168,9 +168,8 @@
 
 
 def get_conditions(filters: Filters) -> Dict:
-	conditions = {
-		"status": "Active",
-	}
+	conditions = {}
+
 	if filters.get("employee"):
 		conditions["name"] = filters.get("employee")
 
@@ -180,6 +179,9 @@
 	if filters.get("department"):
 		conditions["department"] = filters.get("department")
 
+	if filters.get("employee_status"):
+		conditions["status"] = filters.get("employee_status")
+
 	return conditions
 
 
diff --git a/erpnext/hr/report/employee_leave_balance/test_employee_leave_balance.py b/erpnext/hr/report/employee_leave_balance/test_employee_leave_balance.py
index dc0f4d2..5354abf 100644
--- a/erpnext/hr/report/employee_leave_balance/test_employee_leave_balance.py
+++ b/erpnext/hr/report/employee_leave_balance/test_employee_leave_balance.py
@@ -207,3 +207,40 @@
 			allocation1.new_leaves_allocated - leave_application.total_leave_days
 		)
 		self.assertEqual(report[1][0].opening_balance, opening_balance)
+
+	@set_holiday_list("_Test Emp Balance Holiday List", "_Test Company")
+	def test_employee_status_filter(self):
+		frappe.get_doc(test_records[0]).insert()
+		inactive_emp = make_employee("test_emp_status@example.com", company="_Test Company")
+
+		allocation = make_allocation_record(
+			employee=inactive_emp,
+			from_date=self.year_start,
+			to_date=self.year_end,
+			leaves=5,
+		)
+
+		# set employee as inactive
+		frappe.db.set_value("Employee", inactive_emp, "status", "Inactive")
+
+		filters = frappe._dict(
+			{
+				"from_date": allocation.from_date,
+				"to_date": allocation.to_date,
+				"employee": inactive_emp,
+				"employee_status": "Active",
+			}
+		)
+		report = execute(filters)
+		self.assertEqual(len(report[1]), 0)
+
+		filters = frappe._dict(
+			{
+				"from_date": allocation.from_date,
+				"to_date": allocation.to_date,
+				"employee": inactive_emp,
+				"employee_status": "Inactive",
+			}
+		)
+		report = execute(filters)
+		self.assertEqual(len(report[1]), 1)
diff --git a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.js b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.js
index cb05d11..26dd782 100644
--- a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.js
+++ b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.js
@@ -30,6 +30,19 @@
 			label: __('Department'),
 			fieldtype: 'Link',
 			options: 'Department',
+		},
+		{
+			fieldname: "employee_status",
+			label: __("Employee Status"),
+			fieldtype: "Select",
+			options: [
+				"",
+				{ "value": "Active", "label": __("Active") },
+				{ "value": "Inactive", "label": __("Inactive") },
+				{ "value": "Suspended", "label": __("Suspended") },
+				{ "value": "Left", "label": __("Left") },
+			],
+			default: "Active",
 		}
 	]
 };
diff --git a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py
index 2a16dc4..82878db 100644
--- a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py
+++ b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py
@@ -35,9 +35,10 @@
 
 def get_conditions(filters):
 	conditions = {
-		"status": "Active",
 		"company": filters.company,
 	}
+	if filters.get("employee_status"):
+		conditions.update({"status": filters.get("employee_status")})
 	if filters.get("department"):
 		conditions.update({"department": filters.get("department")})
 	if filters.get("employee"):
diff --git a/erpnext/hr/report/employee_leave_balance_summary/test_employee_leave_balance_summary.py b/erpnext/hr/report/employee_leave_balance_summary/test_employee_leave_balance_summary.py
index 34b665f..2fd74b7 100644
--- a/erpnext/hr/report/employee_leave_balance_summary/test_employee_leave_balance_summary.py
+++ b/erpnext/hr/report/employee_leave_balance_summary/test_employee_leave_balance_summary.py
@@ -37,7 +37,6 @@
 		frappe.set_user("Administrator")
 
 		self.employee_id = make_employee("test_emp_leave_balance@example.com", company="_Test Company")
-		self.employee_id = make_employee("test_emp_leave_balance@example.com", company="_Test Company")
 
 		self.date = getdate()
 		self.year_start = getdate(get_year_start(self.date))
@@ -146,3 +145,37 @@
 		]
 
 		self.assertEqual(report[1], expected_data)
+
+	@set_holiday_list("_Test Emp Balance Holiday List", "_Test Company")
+	def test_employee_status_filter(self):
+		frappe.get_doc(test_records[0]).insert()
+
+		inactive_emp = make_employee("test_emp_status@example.com", company="_Test Company")
+		allocation = make_allocation_record(
+			employee=inactive_emp, from_date=self.year_start, to_date=self.year_end
+		)
+
+		# set employee as inactive
+		frappe.db.set_value("Employee", inactive_emp, "status", "Inactive")
+
+		filters = frappe._dict(
+			{
+				"date": allocation.from_date,
+				"company": "_Test Company",
+				"employee": inactive_emp,
+				"employee_status": "Active",
+			}
+		)
+		report = execute(filters)
+		self.assertEqual(len(report[1]), 0)
+
+		filters = frappe._dict(
+			{
+				"date": allocation.from_date,
+				"company": "_Test Company",
+				"employee": inactive_emp,
+				"employee_status": "Inactive",
+			}
+		)
+		report = execute(filters)
+		self.assertEqual(len(report[1]), 1)