feat(UX): Add option to disable consolidating leave types in balance reports
This commit is contained in:
@@ -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",
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
Reference in New Issue
Block a user