feat(UX): Add option to disable consolidating leave types in balance reports

This commit is contained in:
Rucha Mahabal
2023-02-17 15:26:01 +05:30
parent e34f5c9cf7
commit ccd25684f9
2 changed files with 57 additions and 45 deletions

View File

@@ -2,53 +2,60 @@
// License: GNU General Public License v3. See license.txt // License: GNU General Public License v3. See license.txt
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", label: __("Company"),
"label": __("Company"), fieldname: "company",
"fieldtype": "Link", fieldtype: "Link",
"options": "Company", options: "Company",
"reqd": 1, reqd: 1,
"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", fieldname: "employee_status",
"label": __("Employee Status"), label: __("Employee Status"),
"fieldtype": "Select", fieldtype: "Select",
"options": [ options: [
"", "",
{ "value": "Active", "label": __("Active") }, { "value": "Active", "label": __("Active") },
{ "value": "Inactive", "label": __("Inactive") }, { "value": "Inactive", "label": __("Inactive") },
{ "value": "Suspended", "label": __("Suspended") }, { "value": "Suspended", "label": __("Suspended") },
{ "value": "Left", "label": __("Left") }, { "value": "Left", "label": __("Left") },
], ],
"default": "Active", default: "Active",
},
{
fieldname: "consolidate_leave_types",
label: __("Consolidate Leave Types"),
fieldtype: "Check",
default: 1,
depends_on: "eval: !doc.employee",
} }
], ],

View File

@@ -24,7 +24,7 @@ def execute(filters: Optional[Filters] = None) -> Tuple:
columns = get_columns() columns = get_columns()
data = get_data(filters) data = get_data(filters)
charts = get_chart_data(data) charts = get_chart_data(data, filters)
return columns, data, None, charts return columns, data, None, charts
@@ -89,7 +89,7 @@ def get_data(filters: Filters) -> List:
conditions = get_conditions(filters) conditions = get_conditions(filters)
user = frappe.session.user user = frappe.session.user
department_approver_map = get_department_leave_approver_map(filters.get("department")) department_approver_map = get_department_leave_approver_map(filters.department)
active_employees = frappe.get_list( active_employees = frappe.get_list(
"Employee", "Employee",
@@ -97,22 +97,27 @@ def get_data(filters: Filters) -> List:
fields=["name", "employee_name", "department", "user_id", "leave_approver"], fields=["name", "employee_name", "department", "user_id", "leave_approver"],
) )
precision = cint(frappe.db.get_single_value("System Settings", "float_precision", cache=True))
consolidate_leave_types = len(active_employees) > 1 and filters.consolidate_leave_types
row = None
data = [] data = []
for leave_type in leave_types: for leave_type in leave_types:
if len(active_employees) > 1: if consolidate_leave_types:
data.append({"leave_type": leave_type}) data.append({"leave_type": leave_type})
else: else:
row = frappe._dict({"leave_type": leave_type}) row = frappe._dict({"leave_type": leave_type})
for employee in active_employees: for employee in active_employees:
leave_approvers = department_approver_map.get(employee.department_name, []).append( leave_approvers = department_approver_map.get(employee.department_name, []).append(
employee.leave_approver employee.leave_approver
) )
if len(active_employees) > 1: if consolidate_leave_types:
row = frappe._dict() row = frappe._dict()
else:
row = frappe._dict({"leave_type": leave_type})
row.employee = employee.name row.employee = employee.name
row.employee_name = employee.employee_name row.employee_name = employee.employee_name
@@ -166,17 +171,17 @@ def get_opening_balance(
def get_conditions(filters: Filters) -> Dict: def get_conditions(filters: Filters) -> Dict:
conditions = {} conditions = {}
if filters.get("employee"): if filters.employee:
conditions["name"] = filters.get("employee") conditions["name"] = filters.employee
if filters.get("company"): if filters.company:
conditions["company"] = filters.get("company") conditions["company"] = filters.company
if filters.get("department"): if filters.department:
conditions["department"] = filters.get("department") conditions["department"] = filters.department
if filters.get("employee_status"): if filters.employee_status:
conditions["status"] = filters.get("employee_status") conditions["status"] = filters.employee_status
return conditions return conditions
@@ -268,12 +273,12 @@ def get_leave_ledger_entries(
return records return records
def get_chart_data(data: List) -> Dict: def get_chart_data(data: List, filters: Filters) -> Dict:
labels = [] labels = []
datasets = [] datasets = []
employee_data = data employee_data = data
if data and data[0].get("employee_name"): if data and filters.employee:
get_dataset_for_chart(employee_data, datasets, labels) get_dataset_for_chart(employee_data, datasets, labels)
chart = { chart = {