From 865204a541651c284979a824576cdfcc4d789056 Mon Sep 17 00:00:00 2001 From: Rucha Mahabal Date: Mon, 28 Mar 2022 01:07:18 +0530 Subject: [PATCH] feat: add colors for attendance status to lessen the cognitive load - legend with colors and full form for status abbreviations --- .../monthly_attendance_sheet.js | 20 +++++++++++++ .../monthly_attendance_sheet.py | 30 +++++++++++++++---- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.js b/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.js index 26c868498b4..6f4bbd54fb0 100644 --- a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.js +++ b/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.js @@ -77,5 +77,25 @@ frappe.query_reports["Monthly Attendance Sheet"] = { year_filter.set_input(year_filter.df.default); } }); + }, + formatter: function(value, row, column, data, default_formatter) { + value = default_formatter(value, row, column, data); + const summarized_view = frappe.query_report.get_filter_value('summarized_view'); + const group_by = frappe.query_report.get_filter_value('group_by'); + + if (!summarized_view) { + if ((group_by && column.colIndex > 3) || (!group_by && column.colIndex > 2)) { + if (value == 'P' || value == 'WFH') + value = "" + value + ""; + else if (value == 'A') + value = "" + value + ""; + else if (value == 'HD') + value = "" + value + ""; + else if (value == 'L') + value = "" + value + ""; + } + } + + return value; } } diff --git a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py b/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py index c9d9aae361e..299b092eae3 100644 --- a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py +++ b/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py @@ -15,13 +15,13 @@ from frappe.query_builder.functions import Count, Extract, Sum Filters = frappe._dict status_map = { + 'Present': 'P', 'Absent': 'A', 'Half Day': 'HD', - 'Holiday': 'H', - 'Weekly Off': 'WO', + 'Work From Home': 'WFH', 'On Leave': 'L', - 'Present': 'P', - 'Work From Home': 'WFH' + 'Holiday': 'H', + 'Weekly Off': 'WO' } day_abbr = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] @@ -38,9 +38,26 @@ def execute(filters: Optional[Filters] = None) -> Tuple: if not data: return columns, [], None, None + message = get_message() if not filters.summarized_view else '' chart = get_chart_data(attendance_map, filters) - return columns, data, None, chart + return columns, data, message, chart + + +def get_message() -> str: + message = '' + colors = ['green', 'red', 'orange', 'green', '#318AD8', '', ''] + + count = 0 + for status, abbr in status_map.items(): + message += f""" + + {status} - {abbr} + + """ + count += 1 + + return message def get_columns(filters: Filters) -> List[Dict]: @@ -492,7 +509,8 @@ def get_chart_data(attendance_map: Dict, filters: Filters) -> Dict: {'name': 'Leave', 'values': leave}, ] }, - 'type': 'line' + 'type': 'line', + 'colors': ['red', 'green', 'blue'], } return chart \ No newline at end of file