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

feat: add Employee Status filter in leave balance reports
This commit is contained in:
Rucha Mahabal 2022-05-13 22:07:08 +05:30 committed by GitHub
commit ead08aa192
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 109 additions and 10 deletions

View File

@ -4,21 +4,21 @@
frappe.query_reports["Employee Leave Balance"] = { frappe.query_reports["Employee Leave Balance"] = {
"filters": [ "filters": [
{ {
"fieldname":"from_date", "fieldname": "from_date",
"label": __("From Date"), "label": __("From Date"),
"fieldtype": "Date", "fieldtype": "Date",
"reqd": 1, "reqd": 1,
"default": frappe.defaults.get_default("year_start_date") "default": frappe.defaults.get_default("year_start_date")
}, },
{ {
"fieldname":"to_date", "fieldname": "to_date",
"label": __("To Date"), "label": __("To Date"),
"fieldtype": "Date", "fieldtype": "Date",
"reqd": 1, "reqd": 1,
"default": frappe.defaults.get_default("year_end_date") "default": frappe.defaults.get_default("year_end_date")
}, },
{ {
"fieldname":"company", "fieldname": "company",
"label": __("Company"), "label": __("Company"),
"fieldtype": "Link", "fieldtype": "Link",
"options": "Company", "options": "Company",
@ -26,16 +26,29 @@ frappe.query_reports["Employee Leave Balance"] = {
"default": frappe.defaults.get_user_default("Company") "default": frappe.defaults.get_user_default("Company")
}, },
{ {
"fieldname":"department", "fieldname": "department",
"label": __("Department"), "label": __("Department"),
"fieldtype": "Link", "fieldtype": "Link",
"options": "Department", "options": "Department",
}, },
{ {
"fieldname":"employee", "fieldname": "employee",
"label": __("Employee"), "label": __("Employee"),
"fieldtype": "Link", "fieldtype": "Link",
"options": "Employee", "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",
} }
], ],

View File

@ -168,9 +168,8 @@ def get_opening_balance(
def get_conditions(filters: Filters) -> Dict: def get_conditions(filters: Filters) -> Dict:
conditions = { conditions = {}
"status": "Active",
}
if filters.get("employee"): if filters.get("employee"):
conditions["name"] = filters.get("employee") conditions["name"] = filters.get("employee")
@ -180,6 +179,9 @@ def get_conditions(filters: Filters) -> Dict:
if filters.get("department"): if filters.get("department"):
conditions["department"] = filters.get("department") conditions["department"] = filters.get("department")
if filters.get("employee_status"):
conditions["status"] = filters.get("employee_status")
return conditions return conditions

View File

@ -207,3 +207,40 @@ class TestEmployeeLeaveBalance(unittest.TestCase):
allocation1.new_leaves_allocated - leave_application.total_leave_days allocation1.new_leaves_allocated - leave_application.total_leave_days
) )
self.assertEqual(report[1][0].opening_balance, opening_balance) 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)

View File

@ -30,6 +30,19 @@ frappe.query_reports['Employee Leave Balance Summary'] = {
label: __('Department'), label: __('Department'),
fieldtype: 'Link', fieldtype: 'Link',
options: 'Department', 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",
} }
] ]
}; };

View File

@ -35,9 +35,10 @@ def get_columns(leave_types):
def get_conditions(filters): def get_conditions(filters):
conditions = { conditions = {
"status": "Active",
"company": filters.company, "company": filters.company,
} }
if filters.get("employee_status"):
conditions.update({"status": filters.get("employee_status")})
if filters.get("department"): if filters.get("department"):
conditions.update({"department": filters.get("department")}) conditions.update({"department": filters.get("department")})
if filters.get("employee"): if filters.get("employee"):

View File

@ -36,7 +36,6 @@ class TestEmployeeLeaveBalance(unittest.TestCase):
frappe.set_user("Administrator") 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.employee_id = make_employee("test_emp_leave_balance@example.com", company="_Test Company")
self.date = getdate() self.date = getdate()
@ -146,3 +145,37 @@ class TestEmployeeLeaveBalance(unittest.TestCase):
] ]
self.assertEqual(report[1], expected_data) 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)