# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors # License: GNU General Public License v3. See license.txt import frappe, erpnext, json from frappe import _ from frappe.utils import nowdate, get_first_day, get_last_day, add_months from erpnext.accounts.utils import get_fiscal_year def get_data(): return frappe._dict({ "dashboards": get_dashboards(), "charts": get_charts(), "number_cards": get_number_cards(), }) def get_dashboards(): return [{ "name": "Manufacturing", "dashboard_name": "Manufacturing", "charts": [ { "chart": "Produced Quantity", "width": "Half" }, { "chart": "Completed Operation", "width": "Half" }, { "chart": "Work Order Analysis", "width": "Half" }, { "chart": "Quality Inspection Analysis", "width": "Half" }, { "chart": "Pending Work Order", "width": "Half" }, { "chart": "Last Month Downtime Analysis", "width": "Half" }, { "chart": "Work Order Qty Analysis", "width": "Full" }, { "chart": "Job Card Analysis", "width": "Full" } ], "cards": [ { "card": "Monthly Total Work Order" }, { "card": "Monthly Completed Work Order" }, { "card": "Ongoing Job Card" }, { "card": "Monthly Quality Inspection"} ] }] def get_charts(): company = erpnext.get_default_company() if not company: company = frappe.db.get_value("Company", {"is_group": 0}, "name") return [{ "doctype": "Dashboard Chart", "based_on": "modified", "time_interval": "Yearly", "chart_type": "Sum", "chart_name": _("Produced Quantity"), "name": "Produced Quantity", "document_type": "Work Order", "filters_json": json.dumps([['Work Order', 'docstatus', '=', 1, False]]), "group_by_type": "Count", "time_interval": "Monthly", "timespan": "Last Year", "owner": "Administrator", "type": "Line", "value_based_on": "produced_qty", "is_public": 1, "timeseries": 1 }, { "doctype": "Dashboard Chart", "based_on": "creation", "time_interval": "Yearly", "chart_type": "Sum", "chart_name": _("Completed Operation"), "name": "Completed Operation", "document_type": "Work Order Operation", "filters_json": json.dumps([['Work Order Operation', 'docstatus', '=', 1, False]]), "group_by_type": "Count", "time_interval": "Quarterly", "timespan": "Last Year", "owner": "Administrator", "type": "Line", "value_based_on": "completed_qty", "is_public": 1, "timeseries": 1 }, { "doctype": "Dashboard Chart", "time_interval": "Yearly", "chart_type": "Report", "chart_name": _("Work Order Analysis"), "name": "Work Order Analysis", "timespan": "Last Year", "report_name": "Work Order Summary", "owner": "Administrator", "filters_json": json.dumps({"company": company, "charts_based_on": "Status"}), "type": "Donut", "is_public": 1, "is_custom": 1, "custom_options": json.dumps({ "axisOptions": { "shortenYAxisNumbers": 1 }, "height": 300 }), }, { "doctype": "Dashboard Chart", "time_interval": "Yearly", "chart_type": "Report", "chart_name": _("Quality Inspection Analysis"), "name": "Quality Inspection Analysis", "timespan": "Last Year", "report_name": "Quality Inspection Summary", "owner": "Administrator", "filters_json": json.dumps({}), "type": "Donut", "is_public": 1, "is_custom": 1, "custom_options": json.dumps({ "axisOptions": { "shortenYAxisNumbers": 1 }, "height": 300 }), }, { "doctype": "Dashboard Chart", "time_interval": "Yearly", "chart_type": "Report", "chart_name": _("Pending Work Order"), "name": "Pending Work Order", "timespan": "Last Year", "report_name": "Work Order Summary", "filters_json": json.dumps({"company": company, "charts_based_on": "Age"}), "owner": "Administrator", "type": "Donut", "is_public": 1, "is_custom": 1, "custom_options": json.dumps({ "axisOptions": { "shortenYAxisNumbers": 1 }, "height": 300 }), }, { "doctype": "Dashboard Chart", "time_interval": "Yearly", "chart_type": "Report", "chart_name": _("Last Month Downtime Analysis"), "name": "Last Month Downtime Analysis", "timespan": "Last Year", "filters_json": json.dumps({}), "report_name": "Downtime Analysis", "owner": "Administrator", "is_public": 1, "is_custom": 1, "type": "Bar" }, { "doctype": "Dashboard Chart", "time_interval": "Yearly", "chart_type": "Report", "chart_name": _("Work Order Qty Analysis"), "name": "Work Order Qty Analysis", "timespan": "Last Year", "report_name": "Work Order Summary", "filters_json": json.dumps({"company": company, "charts_based_on": "Quantity"}), "owner": "Administrator", "type": "Bar", "is_public": 1, "is_custom": 1, "custom_options": json.dumps({ "barOptions": { "stacked": 1 } }), }, { "doctype": "Dashboard Chart", "time_interval": "Yearly", "chart_type": "Report", "chart_name": _("Job Card Analysis"), "name": "Job Card Analysis", "timespan": "Last Year", "report_name": "Job Card Summary", "owner": "Administrator", "is_public": 1, "is_custom": 1, "filters_json": json.dumps({"company": company, "docstatus": 1, "range":"Monthly"}), "custom_options": json.dumps({ "barOptions": { "stacked": 1 } }), "type": "Bar" }] def get_number_cards(): start_date = add_months(nowdate(), -1) end_date = nowdate() return [{ "doctype": "Number Card", "document_type": "Work Order", "name": "Monthly Total Work Order", "filters_json": json.dumps([ ['Work Order', 'docstatus', '=', 1], ['Work Order', 'creation', 'between', [start_date, end_date]] ]), "function": "Count", "is_public": 1, "label": _("Monthly Total Work Order"), "show_percentage_stats": 1, "stats_time_interval": "Weekly" }, { "doctype": "Number Card", "document_type": "Work Order", "name": "Monthly Completed Work Order", "filters_json": json.dumps([ ['Work Order', 'status', '=', 'Completed'], ['Work Order', 'docstatus', '=', 1], ['Work Order', 'creation', 'between', [start_date, end_date]] ]), "function": "Count", "is_public": 1, "label": _("Monthly Completed Work Order"), "show_percentage_stats": 1, "stats_time_interval": "Weekly" }, { "doctype": "Number Card", "document_type": "Job Card", "name": "Ongoing Job Card", "filters_json": json.dumps([ ['Job Card', 'status','!=','Completed'], ['Job Card', 'docstatus', '=', 1] ]), "function": "Count", "is_public": 1, "label": _("Ongoing Job Card"), "show_percentage_stats": 1, "stats_time_interval": "Weekly" }, { "doctype": "Number Card", "document_type": "Quality Inspection", "name": "Monthly Quality Inspection", "filters_json": json.dumps([ ['Quality Inspection', 'docstatus', '=', 1], ['Quality Inspection', 'creation', 'between', [start_date, end_date]] ]), "function": "Count", "is_public": 1, "label": _("Monthly Quality Inspection"), "show_percentage_stats": 1, "stats_time_interval": "Weekly" }]