From 64d02f917a5aca83cfd56a0f0f0d9becf6dcfde6 Mon Sep 17 00:00:00 2001 From: Solufyin <34390782+Solufyin@users.noreply.github.com> Date: Sat, 26 May 2018 09:26:03 +0530 Subject: [PATCH] [ADD] Department Analytics Bar Chart Feature (#14217) --- erpnext/config/hr.py | 11 ++++ .../report/department_analytics/__init__.py | 0 .../department_analytics.js | 5 ++ .../department_analytics.json | 28 +++++++++ .../department_analytics.py | 60 +++++++++++++++++++ 5 files changed, 104 insertions(+) create mode 100644 erpnext/hr/report/department_analytics/__init__.py create mode 100644 erpnext/hr/report/department_analytics/department_analytics.js create mode 100644 erpnext/hr/report/department_analytics/department_analytics.json create mode 100644 erpnext/hr/report/department_analytics/department_analytics.py diff --git a/erpnext/config/hr.py b/erpnext/config/hr.py index 9e893c044d2..cd2ddd9557c 100644 --- a/erpnext/config/hr.py +++ b/erpnext/config/hr.py @@ -397,5 +397,16 @@ def get_data(): "youtube_id": "5SZHJF--ZFY" } ] + }, + { + "label": _("Analytics"), + "items": [ + { + "type": "report", + "is_query_report": True, + "name": "Department Analytics", + "doctype": "Employee" + }, + ] } ] diff --git a/erpnext/hr/report/department_analytics/__init__.py b/erpnext/hr/report/department_analytics/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/hr/report/department_analytics/department_analytics.js b/erpnext/hr/report/department_analytics/department_analytics.js new file mode 100644 index 00000000000..a0b6fc76412 --- /dev/null +++ b/erpnext/hr/report/department_analytics/department_analytics.js @@ -0,0 +1,5 @@ +// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.query_reports["Department Analytics"] = { +}; \ No newline at end of file diff --git a/erpnext/hr/report/department_analytics/department_analytics.json b/erpnext/hr/report/department_analytics/department_analytics.json new file mode 100644 index 00000000000..1e26b33c530 --- /dev/null +++ b/erpnext/hr/report/department_analytics/department_analytics.json @@ -0,0 +1,28 @@ +{ + "add_total_row": 0, + "creation": "2018-05-15 15:37:20.883263", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "idx": 0, + "is_standard": "Yes", + "modified": "2018-05-15 17:19:32.934321", + "modified_by": "Administrator", + "module": "HR", + "name": "Department Analytics", + "owner": "Administrator", + "ref_doctype": "Employee", + "report_name": "Department Analytics", + "report_type": "Script Report", + "roles": [ + { + "role": "Employee" + }, + { + "role": "HR User" + }, + { + "role": "HR Manager" + } + ] +} \ No newline at end of file diff --git a/erpnext/hr/report/department_analytics/department_analytics.py b/erpnext/hr/report/department_analytics/department_analytics.py new file mode 100644 index 00000000000..c4a9030c591 --- /dev/null +++ b/erpnext/hr/report/department_analytics/department_analytics.py @@ -0,0 +1,60 @@ +# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe import _ + +def execute(filters=None): + if not filters: filters = {} + columns = get_columns() + employees = get_employees(filters) + departments_result = get_department(filters) + departments = [] + if departments_result: + for department in departments_result: + departments.append(department) + chart = get_chart_data(departments,employees) + return columns, employees, None, chart + +def get_columns(): + return [ + _("Employee") + ":Link/Employee:120", _("Name") + ":Data:200", _("Date of Birth")+ ":Date:100", + _("Branch") + ":Link/Branch:120", _("Department") + ":Link/Department:120", + _("Designation") + ":Link/Designation:120", _("Gender") + "::60", _("Company") + ":Link/Company:120" + ] + +def get_conditions(filters): + conditions = "" + if filters.get("department"): conditions += " and department = '%s'" % \ + filters["department"].replace("'", "\\'") + return conditions + +def get_employees(filters): + conditions = get_conditions(filters) + return frappe.db.sql("""select name, employee_name, date_of_birth, + branch, department, designation, + gender, company from `tabEmployee` where status = 'Active' %s""" % conditions, as_list=1) + +def get_department(filters): + return frappe.db.sql("""select name from `tabDepartment`""" , as_list=1) + +def get_chart_data(departments,employees): + if not departments: + departments = [] + datasets = [] + for department in departments: + if department: + total_employee = frappe.db.sql("""select count(*) from \ + `tabEmployee` where \ + department = %s""" ,(department[0]), as_list=1) + datasets.append(total_employee[0][0]) + chart = { + "data": { + 'labels': departments, + 'datasets': [{'name': 'Employees','values': datasets}] + } + } + chart["type"] = "bar" + return chart +