| # 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 _ |
| |
| def get_data(): |
| return frappe._dict({ |
| "dashboards": get_dashboards(), |
| "charts": get_charts(), |
| "number_cards": get_number_cards() |
| }) |
| |
| def get_dashboards(): |
| return [{ |
| "doctype": "Dashboard", |
| "name": "CRM", |
| "dashboard_name": "CRM", |
| "charts": [ |
| { "chart": "Incoming Leads", "width": "Full" }, |
| { "chart": "Opportunity Trends", "width": "Full"}, |
| { "chart": "Won Opportunities", "width": "Full" }, |
| { "chart": "Territory Wise Opportunity Count", "width": "Half"}, |
| { "chart": "Opportunities via Campaigns", "width": "Half" }, |
| { "chart": "Territory Wise Sales", "width": "Full"}, |
| { "chart": "Lead Source", "width": "Half"} |
| ], |
| "cards": [ |
| { "card": "New Lead (Last 1 Month)" }, |
| { "card": "New Opportunity (Last 1 Month)" }, |
| { "card": "Won Opportunity (Last 1 Month)" }, |
| { "card": "Open Opportunity"}, |
| ] |
| }] |
| |
| def get_company_for_dashboards(): |
| company = frappe.defaults.get_defaults().company |
| if company: |
| return company |
| else: |
| company_list = frappe.get_list("Company") |
| if company_list: |
| return company_list[0].name |
| return None |
| |
| def get_charts(): |
| company = get_company_for_dashboards() |
| |
| return [{ |
| "name": "Incoming Leads", |
| "doctype": "Dashboard Chart", |
| "time_interval": "Yearly", |
| "chart_type": "Count", |
| "chart_name": _("Incoming Leads"), |
| "timespan": "Last Quarter", |
| "time_interval": "Weekly", |
| "document_type": "Lead", |
| "based_on": "creation", |
| 'is_public': 1, |
| 'timeseries': 1, |
| "owner": "Administrator", |
| "filters_json": json.dumps([]), |
| "type": "Bar" |
| }, |
| { |
| "name": "Opportunity Trends", |
| "doctype": "Dashboard Chart", |
| "time_interval": "Yearly", |
| "chart_type": "Count", |
| "chart_name": _("Opportunity Trends"), |
| "timespan": "Last Quarter", |
| "time_interval": "Weekly", |
| "document_type": "Opportunity", |
| "based_on": "creation", |
| 'is_public': 1, |
| 'timeseries': 1, |
| "owner": "Administrator", |
| "filters_json": json.dumps([["Opportunity", "company", "=", company, False]]), |
| "type": "Bar" |
| }, |
| { |
| "name": "Opportunities via Campaigns", |
| "chart_name": _("Opportunities via Campaigns"), |
| "doctype": "Dashboard Chart", |
| "chart_type": "Group By", |
| "group_by_type": "Count", |
| "group_by_based_on": "campaign", |
| "document_type": "Opportunity", |
| 'is_public': 1, |
| 'timeseries': 1, |
| "owner": "Administrator", |
| "filters_json": json.dumps([["Opportunity", "company", "=", company, False]]), |
| "type": "Pie", |
| "custom_options": json.dumps({ |
| "truncateLegends": 1, |
| "maxSlices": 8 |
| }) |
| }, |
| { |
| "name": "Won Opportunities", |
| "doctype": "Dashboard Chart", |
| "time_interval": "Yearly", |
| "chart_type": "Count", |
| "chart_name": _("Won Opportunities"), |
| "timespan": "Last Year", |
| "time_interval": "Monthly", |
| "document_type": "Opportunity", |
| "based_on": "modified", |
| 'is_public': 1, |
| 'timeseries': 1, |
| "owner": "Administrator", |
| "filters_json": json.dumps([ |
| ["Opportunity", "company", "=", company, False], |
| ["Opportunity", "status", "=", "Converted", False]]), |
| "type": "Bar" |
| }, |
| { |
| "name": "Territory Wise Opportunity Count", |
| "doctype": "Dashboard Chart", |
| "chart_type": "Group By", |
| "group_by_type": "Count", |
| "group_by_based_on": "territory", |
| "chart_name": _("Territory Wise Opportunity Count"), |
| "document_type": "Opportunity", |
| 'is_public': 1, |
| "filters_json": json.dumps([ |
| ["Opportunity", "company", "=", company, False] |
| ]), |
| "owner": "Administrator", |
| "type": "Donut", |
| "custom_options": json.dumps({ |
| "truncateLegends": 1, |
| "maxSlices": 8 |
| }) |
| }, |
| { |
| "name": "Territory Wise Sales", |
| "doctype": "Dashboard Chart", |
| "chart_type": "Group By", |
| "group_by_type": "Sum", |
| "group_by_based_on": "territory", |
| "chart_name": _("Territory Wise Sales"), |
| "aggregate_function_based_on": "opportunity_amount", |
| "document_type": "Opportunity", |
| 'is_public': 1, |
| "owner": "Administrator", |
| "filters_json": json.dumps([ |
| ["Opportunity", "company", "=", company, False], |
| ["Opportunity", "status", "=", "Converted", False] |
| ]), |
| "type": "Bar" |
| }, |
| { |
| "name": "Lead Source", |
| "doctype": "Dashboard Chart", |
| "chart_type": "Group By", |
| "group_by_type": "Count", |
| "group_by_based_on": "source", |
| "chart_name": _("Lead Source"), |
| "document_type": "Lead", |
| 'is_public': 1, |
| "owner": "Administrator", |
| "type": "Pie", |
| "custom_options": json.dumps({ |
| "truncateLegends": 1, |
| "maxSlices": 8 |
| }) |
| }] |
| |
| def get_number_cards(): |
| return [{ |
| "doctype": "Number Card", |
| "document_type": "Lead", |
| "name": "New Lead (Last 1 Month)", |
| "filters_json": json.dumps([ |
| ["Lead", "creation", "Timespan", "last month"] |
| ]), |
| "function": "Count", |
| "is_public": 1, |
| "label": _("New Lead (Last 1 Month)"), |
| "show_percentage_stats": 1, |
| "stats_time_interval": "Daily" |
| }, |
| { |
| "doctype": "Number Card", |
| "document_type": "Opportunity", |
| "name": "New Opportunity (Last 1 Month)", |
| "filters_json": json.dumps([ |
| ["Opportunity", "creation", "Timespan", "last month"] |
| ]), |
| "function": "Count", |
| "is_public": 1, |
| "label": _("New Opportunity (Last 1 Month)"), |
| "show_percentage_stats": 1, |
| "stats_time_interval": "Daily" |
| }, |
| { |
| "doctype": "Number Card", |
| "document_type": "Opportunity", |
| "name": "Won Opportunity (Last 1 Month)", |
| "filters_json": json.dumps([ |
| ["Opportunity", "status", "=", "Converted",False], |
| ["Opportunity", "creation", "Timespan", "last month"] |
| ]), |
| "function": "Count", |
| "is_public": 1, |
| "label": _("Won Opportunity (Last 1 Month)"), |
| "show_percentage_stats": 1, |
| "stats_time_interval": "Daily" |
| }, |
| { |
| "doctype": "Number Card", |
| "document_type": "Opportunity", |
| "name": "Open Opportunity", |
| "filters_json": json.dumps([["Opportunity","status","=","Open",False]]), |
| "function": "Count", |
| "is_public": 1, |
| "label": _("Open Opportunity"), |
| "show_percentage_stats": 1, |
| "stats_time_interval": "Daily" |
| }] |