feat: Department wise Patient Appointments custom chart
diff --git a/erpnext/healthcare/dashboard_chart_source/__init__.py b/erpnext/healthcare/dashboard_chart_source/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/healthcare/dashboard_chart_source/__init__.py
diff --git a/erpnext/healthcare/dashboard_chart_source/department_wise_patient_appointments/__init__.py b/erpnext/healthcare/dashboard_chart_source/department_wise_patient_appointments/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/healthcare/dashboard_chart_source/department_wise_patient_appointments/__init__.py
diff --git a/erpnext/healthcare/dashboard_chart_source/department_wise_patient_appointments/department_wise_patient_appointments.js b/erpnext/healthcare/dashboard_chart_source/department_wise_patient_appointments/department_wise_patient_appointments.js
new file mode 100644
index 0000000..dd6dc66
--- /dev/null
+++ b/erpnext/healthcare/dashboard_chart_source/department_wise_patient_appointments/department_wise_patient_appointments.js
@@ -0,0 +1,14 @@
+frappe.provide('frappe.dashboards.chart_sources');
+
+frappe.dashboards.chart_sources["Department wise Patient Appointments"] = {
+ method: "erpnext.healthcare.dashboard_chart_source.department_wise_patient_appointments.department_wise_patient_appointments.get",
+ filters: [
+ {
+ fieldname: "company",
+ label: __("Company"),
+ fieldtype: "Link",
+ options: "Company",
+ default: frappe.defaults.get_user_default("Company")
+ }
+ ]
+};
\ No newline at end of file
diff --git a/erpnext/healthcare/dashboard_chart_source/department_wise_patient_appointments/department_wise_patient_appointments.json b/erpnext/healthcare/dashboard_chart_source/department_wise_patient_appointments/department_wise_patient_appointments.json
new file mode 100644
index 0000000..00301ef
--- /dev/null
+++ b/erpnext/healthcare/dashboard_chart_source/department_wise_patient_appointments/department_wise_patient_appointments.json
@@ -0,0 +1,13 @@
+{
+ "creation": "2020-05-18 19:18:42.571045",
+ "docstatus": 0,
+ "doctype": "Dashboard Chart Source",
+ "idx": 0,
+ "modified": "2020-05-18 19:18:42.571045",
+ "modified_by": "Administrator",
+ "module": "Healthcare",
+ "name": "Department wise Patient Appointments",
+ "owner": "Administrator",
+ "source_name": "Department wise Patient Appointments",
+ "timeseries": 0
+}
\ No newline at end of file
diff --git a/erpnext/healthcare/dashboard_chart_source/department_wise_patient_appointments/department_wise_patient_appointments.py b/erpnext/healthcare/dashboard_chart_source/department_wise_patient_appointments/department_wise_patient_appointments.py
new file mode 100644
index 0000000..3cd987b
--- /dev/null
+++ b/erpnext/healthcare/dashboard_chart_source/department_wise_patient_appointments/department_wise_patient_appointments.py
@@ -0,0 +1,75 @@
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe, json
+from frappe import _
+from frappe.utils.dashboard import cache_source
+from erpnext.stock.utils import get_stock_value_from_bin
+
+@frappe.whitelist()
+@cache_source
+def get(chart_name = None, chart = None, no_cache = None, filters = None, from_date = None,
+ to_date = None, timespan = None, time_interval = None, heatmap_year = None):
+ if chart_name:
+ chart = frappe.get_doc('Dashboard Chart', chart_name)
+ else:
+ chart = frappe._dict(frappe.parse_json(chart))
+
+ labels, datapoints = [], []
+ filters = frappe.parse_json(filters)
+
+ data = frappe.db.get_list('Medical Department', fields=['name'])
+ if not filters:
+ filters = {}
+
+ status = ['Open', 'Scheduled', 'Closed', 'Cancelled']
+ for department in data:
+ filters['department'] = department.name
+ department['total_appointments'] = frappe.db.count('Patient Appointment', filters=filters)
+
+ for entry in status:
+ filters['status'] = entry
+ department[frappe.scrub(entry)] = frappe.db.count('Patient Appointment', filters=filters)
+ filters.pop('status')
+
+ sorted_department_map = sorted(data, key = lambda i: i['total_appointments'],reverse=True)
+
+ if len(sorted_department_map) > 10:
+ sorted_department_map = sorted_department_map[:10]
+
+ labels = []
+ open_appointments = []
+ scheduled = []
+ closed = []
+ cancelled = []
+
+ for department in sorted_department_map:
+ labels.append(department.name)
+ open_appointments.append(department.open)
+ scheduled.append(department.scheduled)
+ closed.append(department.closed)
+ cancelled.append(department.cancelled)
+
+ return {
+ 'labels': labels,
+ 'datasets': [
+ {
+ 'name': 'Open',
+ 'values': open_appointments
+ },
+ {
+ 'name': 'Scheduled',
+ 'values': scheduled
+ },
+ {
+ 'name': 'Closed',
+ 'values': closed
+ },
+ {
+ 'name': 'Cancelled',
+ 'values': cancelled
+ }
+ ],
+ 'type': 'bar'
+ }
\ No newline at end of file
diff --git a/erpnext/healthcare/dashboard_fixtures.py b/erpnext/healthcare/dashboard_fixtures.py
index faa83cc..4fb05a8 100644
--- a/erpnext/healthcare/dashboard_fixtures.py
+++ b/erpnext/healthcare/dashboard_fixtures.py
@@ -69,19 +69,20 @@
"doctype": "Dashboard Chart",
"name": "Department wise Patient Appointments",
"chart_name": "Department wise Patient Appointments",
- "chart_type": "Group By",
- "document_type": "Patient Appointment",
- "group_by_type": "Count",
- "group_by_based_on": "department",
- "filters_json": json.dumps([
- ["Patient Appointment", "company", "=", company, False],
- ["Patient Appointment", "status", "!=", "Cancelled"]
- ]),
+ "chart_type": "Custom",
+ "source": "Department wise Patient Appointments",
+ "filters_json": json.dumps({}),
'is_public': 1,
"owner": "Administrator",
"type": "Bar",
"width": "Full",
- "color": "#5F62F6"
+ "custom_options": json.dumps({
+ "colors": ["#7CD5FA", "#5F62F6", "#7544E2", "#EE5555"],
+ "barOptions":{
+ "stacked":1
+ },
+ "height": 300
+ })
},
{
"doctype": "Dashboard Chart",