Anurag Mishra | 36aea71 | 2020-05-13 10:47:36 +0530 | [diff] [blame^] | 1 | # Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors |
| 2 | # License: GNU General Public License v3. See license.txt |
| 3 | |
| 4 | import frappe |
| 5 | import erpnext |
| 6 | import json |
| 7 | |
| 8 | def get_data(): |
| 9 | return frappe._dict({ |
| 10 | "dashboards": get_dashboards(), |
| 11 | "charts": get_charts(), |
| 12 | "number_cards": get_number_cards(), |
| 13 | }) |
| 14 | |
| 15 | def get_dashboards(): |
| 16 | dashboards = [] |
| 17 | dashboards.append(get_human_resource_dashboard()) |
| 18 | return dashboards |
| 19 | |
| 20 | def get_human_resource_dashboard(): |
| 21 | return { |
| 22 | "name": "Human Resource", |
| 23 | "dashboard_name": "Human Resource", |
| 24 | "is_default": 1, |
| 25 | "charts": [ |
| 26 | { "chart": "Gender Diversity Ratio", "width": "Half"}, |
| 27 | { "chart": "Employee Count", "width": "Half"}, |
| 28 | { "chart": "Outgoing Salary", "width": "Full"}, |
| 29 | { "chart": "Attendance Count", "width": "Full"} |
| 30 | ], |
| 31 | "cards": [ |
| 32 | {"card": "Total Employees"}, |
| 33 | {"card": "New Joinees"}, |
| 34 | {'card': "Job Applicants"}, |
| 35 | {'card': "Employees Left"} |
| 36 | ] |
| 37 | } |
| 38 | |
| 39 | def get_recruitment_dashboard(): |
| 40 | pass |
| 41 | # return { |
| 42 | # "name": "Human Resource", |
| 43 | # "dashboard_name": "Human Resource", |
| 44 | # "is_default": 1, |
| 45 | # "charts": [ |
| 46 | # ], |
| 47 | # "cards": [ |
| 48 | # ] |
| 49 | # } |
| 50 | |
| 51 | |
| 52 | def get_charts(): |
| 53 | company = erpnext.get_default_company() |
| 54 | |
| 55 | if not company: |
| 56 | company = frappe.db.get_value("Company", {"is_group": 0}, "name") |
| 57 | |
| 58 | dashboard_charts = [ |
| 59 | get_dashboards_chart_doc('Gender Diversity Ratio', "Group By", "Donut",document_type = "Employee", group_by_type="Count", group_by_based_on="gender", filters_json = json.dumps([["Employee","status","=","Active"]]), time_interval = "Monthly") |
| 60 | ] |
| 61 | |
| 62 | dashboard_charts.append( |
| 63 | get_dashboards_chart_doc('Outgoing salary', "Sum", "Line",document_type = "Salary Slip", group_by_type="Count", based_on="end_date", value_based_on = "rounded_total", time_interval = "Monthly", timeseries = 1 , filters_json = json.dumps([["Salary Slip","docstatus","=","1"]])) |
| 64 | ) |
| 65 | |
| 66 | custom_options = '''{"type": "bar", "axisOptions": {"shortenYAxisNumbers": 1}, "tooltipOptions": {}, "barOptions":{"stacked": 1}}''' |
| 67 | filters_json = json.dumps({"month":"May","year":"2020","company":company}) |
| 68 | |
| 69 | dashboard_charts.append( |
| 70 | get_dashboards_chart_doc('Attendance Count', "Report", "Bar",report_name = "Monthly Attendance Sheet", is_custom =1,group_by_type="Count", timeseries = 1 , filters_json = filters_json, custom_options=custom_options) |
| 71 | ) |
| 72 | |
| 73 | custom_options = """{"type": "donut", "axisOptions": {"shortenYAxisNumbers": 1}}""" |
| 74 | filters_json = json.dumps({"company":company ,"parameter":"Department"}) |
| 75 | |
| 76 | dashboard_charts.append( |
| 77 | get_dashboards_chart_doc('Employee Count', "Report", "Donut",report_name = "Employee Analytics", is_custom =1, group_by_type="Count", timeseries = 1 , filters_json = filters_json, custom_options=custom_options) |
| 78 | ) |
| 79 | |
| 80 | |
| 81 | |
| 82 | |
| 83 | def get_number_cards(): |
| 84 | number_cards = [] |
| 85 | |
| 86 | number_cards = [ |
| 87 | get_number_cards_doc("Employee", "Total Employees", filters_json = json.dumps([ |
| 88 | ["Employee","status","=","Active"] |
| 89 | ]) |
| 90 | ) |
| 91 | ] |
| 92 | number_cards.append( |
| 93 | get_number_cards_doc("Employee", "New Joinees", filters_json = json.dumps([ |
| 94 | ["Employee","date_of_joining","Previous","6 months"], |
| 95 | ["Employee","status","=","Active"] |
| 96 | ]), |
| 97 | stats_time_interval = "Daily") |
| 98 | ) |
| 99 | number_cards.append( |
| 100 | get_number_cards_doc("Employee", "Employees Left", filters_json = json.dumps([ |
| 101 | ["Employee","status","=","Left"] |
| 102 | ]) |
| 103 | ) |
| 104 | ) |
| 105 | number_cards.append( |
| 106 | get_number_cards_doc("Job Applicant", "Job Applicants", filters_json = json.dumps([ |
| 107 | ["Job Applicant","status","!=","Rejected"] |
| 108 | ]) |
| 109 | ) |
| 110 | ) |
| 111 | |
| 112 | return number_cards |
| 113 | |
| 114 | |
| 115 | def get_number_cards_doc(document_type, label, **args): |
| 116 | args = frappe._dict(args) |
| 117 | |
| 118 | return { |
| 119 | "doctype": "Number Card", |
| 120 | "document_type": document_type, |
| 121 | "function": args.func or "Count", |
| 122 | "is_public": args.is_public or 1, |
| 123 | "label": label, |
| 124 | "name": args.name or label, |
| 125 | "show_percentage_stats": args.show_percentage_stats or 1, |
| 126 | "stats_time_interval": args.stats_time_interval or 'Monthly', |
| 127 | "filters_json": args.filters_json or '[]', |
| 128 | } |
| 129 | |
| 130 | def get_dashboards_chart_doc(name, chart_type, graph_type, **args): |
| 131 | |
| 132 | args = frappe._dict(args) |
| 133 | |
| 134 | return { |
| 135 | "name": name, |
| 136 | "chart_name": args.chart_name or name, |
| 137 | "chart_type": chart_type, |
| 138 | "document_type": args.document_type or None, |
| 139 | "report_name": args.report_name or None, |
| 140 | "is_custom": args.is_custom or 0, |
| 141 | "group_by_type": args.group_by_type or None, |
| 142 | "group_by_based_on": args.group_by_based_on or None, |
| 143 | "based_on": args.based_on or None, |
| 144 | "value_based_on": args.value_based_on or None, |
| 145 | "number_of_groups": args.number_of_groups or 0, |
| 146 | "is_public": args.is_public or 1, |
| 147 | "timespan": args.timespan or "Last Year", |
| 148 | "time_interval": args.time_interval or "Yearly", |
| 149 | "timeseries": args.timeseries or 0, |
| 150 | "filters_json": args.filters_json or '[]', |
| 151 | "type": graph_type, |
| 152 | "custom_options": args.custom_options or '', |
| 153 | "doctype": "Dashboard Chart", |
| 154 | } |