From 02772442b63b1ff3cd7e66b52eea554936fcd77e Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 20 Apr 2016 18:45:46 +0530 Subject: [PATCH] [cleanup] added dashboard in project --- erpnext/buying/doctype/supplier/supplier.js | 2 ++ erpnext/config/desktop.py | 16 ++++----- erpnext/hr/doctype/employee/employee.js | 2 ++ .../production_order/production_order_list.js | 1 + erpnext/projects/doctype/project/project.js | 33 +++++++++---------- erpnext/projects/doctype/project/project.py | 12 +++++++ .../doctype/project/project_dashboard.html | 10 ++++++ .../projects/doctype/project/project_links.py | 23 +++++++++++++ erpnext/projects/doctype/task/task.js | 4 +-- erpnext/selling/doctype/customer/customer.js | 2 ++ .../doctype/customer/customer_links.py | 4 +++ erpnext/stock/doctype/item/item.js | 3 ++ .../stock/doctype/item/item_dashboard.html | 6 ++-- 13 files changed, 88 insertions(+), 30 deletions(-) create mode 100644 erpnext/projects/doctype/project/project_dashboard.html create mode 100644 erpnext/projects/doctype/project/project_links.py diff --git a/erpnext/buying/doctype/supplier/supplier.js b/erpnext/buying/doctype/supplier/supplier.js index 5088f2ea66..db8ab02aaa 100644 --- a/erpnext/buying/doctype/supplier/supplier.js +++ b/erpnext/buying/doctype/supplier/supplier.js @@ -7,6 +7,8 @@ frappe.ui.form.on("Supplier", { frappe.setup_language_field(frm); }, refresh: function(frm) { + frm.dashboard.show_heatmap = true; + frm.dashboard.heatmap_message = __('This is based on transactions against this Supplier. See timeline below for details'); frm.dashboard.show_dashboard(); if(frappe.defaults.get_default("supp_master_name")!="Naming Series") { diff --git a/erpnext/config/desktop.py b/erpnext/config/desktop.py index a3cb5d4961..68bf7681e3 100644 --- a/erpnext/config/desktop.py +++ b/erpnext/config/desktop.py @@ -27,14 +27,6 @@ def get_data(): "type": "link", "link": "List/Supplier" }, - { - "module_name": "Income Statement", - "_doctype": "Account", - "color": "#3498db", - "icon": "octicon octicon-repo", - "type": "link", - "link": "query-report/Profit and Loss Statement" - }, { "_doctype": "Employee", "module_name": "Employee", @@ -67,6 +59,14 @@ def get_data(): "type": "link", "link": "List/Lead" }, + { + "module_name": "Profit and Loss Statment", + "_doctype": "Account", + "color": "#3498db", + "icon": "octicon octicon-repo", + "type": "link", + "link": "query-report/Profit and Loss Statement" + }, # old { diff --git a/erpnext/hr/doctype/employee/employee.js b/erpnext/hr/doctype/employee/employee.js index cb26154ce4..a7198e3736 100755 --- a/erpnext/hr/doctype/employee/employee.js +++ b/erpnext/hr/doctype/employee/employee.js @@ -25,6 +25,8 @@ erpnext.hr.EmployeeController = frappe.ui.form.Controller.extend({ refresh: function() { var me = this; erpnext.toggle_naming_series(); + this.frm.dashboard.show_heatmap = true; + this.frm.dashboard.heatmap_message = __('This is based on the attendance of this Employee'); this.frm.dashboard.show_dashboard(); }, diff --git a/erpnext/manufacturing/doctype/production_order/production_order_list.js b/erpnext/manufacturing/doctype/production_order/production_order_list.js index f08158c13c..cce56cfe35 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order_list.js +++ b/erpnext/manufacturing/doctype/production_order/production_order_list.js @@ -9,6 +9,7 @@ frappe.listview_settings['Production Order'] = { return [__(doc.status), { "Draft": "red", "Stopped": "red", + "Not Started": "red", "In Process": "orange", "Completed": "green", "Cancelled": "darkgrey" diff --git a/erpnext/projects/doctype/project/project.js b/erpnext/projects/doctype/project/project.js index e4ac8647bf..6f0da36f77 100644 --- a/erpnext/projects/doctype/project/project.js +++ b/erpnext/projects/doctype/project/project.js @@ -3,6 +3,8 @@ frappe.ui.form.on("Project", { onload: function(frm) { + frm.hide_first = true; + var so = frappe.meta.get_docfield("Project", "sales_order"); so.get_route_options_for_new_doc = function(field) { if(frm.is_new()) return; @@ -40,26 +42,23 @@ frappe.ui.form.on("Project", { frappe.route_options = {"project": frm.doc.name, "start": frm.doc.expected_start_date, "end": frm.doc.expected_end_date}; frappe.set_route("Gantt", "Task"); - }, __("View"), true); - frm.add_custom_button(__("Tasks"), function() { - frappe.route_options = {"project": frm.doc.name} - frappe.set_route("List", "Task"); - }, __("View"), true); + }); } - if(frappe.model.can_read("Time Log")) { - frm.add_custom_button(__("Time Logs"), function() { - frappe.route_options = {"project": frm.doc.name} - frappe.set_route("List", "Time Log"); - }, __("View"), true); - } + frm.dashboard.show_dashboard(); + frm.dashboard.add_section(frappe.render_template('project_dashboard', {project: frm.doc})); + + // var bars = []; + // bars.push({ + // 'title': __('Percent Complete'), + // 'width': (frm.doc.percent_complete || 1) + '%', + // 'progress_class': 'progress-bar-success' + // }) + // + // var message = __("{0}% complete", [frm.doc.percent_complete]); + // + // frm.dashboard.add_progress(__('Status'), bars, message); - if(frappe.model.can_read("Expense Claim")) { - frm.add_custom_button(__("Expense Claims"), function() { - frappe.route_options = {"project": frm.doc.name} - frappe.set_route("List", "Expense Claim"); - }, __("View"), true); - } } } diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py index a74cbee17e..c6a996c6f9 100644 --- a/erpnext/projects/doctype/project/project.py +++ b/erpnext/projects/doctype/project/project.py @@ -26,6 +26,8 @@ class Project(Document): "task_id": task.name }) + self.set_onload('links', self.meta.get_links_setup()) + def __setup__(self): self.onload() @@ -144,6 +146,16 @@ class Project(Document): user.welcome_email_sent=1 +@frappe.whitelist() +def get_dashboard_data(name): + '''load dashboard related data''' + frappe.has_permission(doc=frappe.get_doc('Project', name), throw=True) + + from frappe.desk.notifications import get_open_count + return { + 'count': get_open_count('Project', name), + } + def get_project_list(doctype, txt, filters, limit_start, limit_page_length=20): return frappe.db.sql('''select distinct project.* from tabProject project, `tabProject User` project_user diff --git a/erpnext/projects/doctype/project/project_dashboard.html b/erpnext/projects/doctype/project/project_dashboard.html new file mode 100644 index 0000000000..efd6861cb8 --- /dev/null +++ b/erpnext/projects/doctype/project/project_dashboard.html @@ -0,0 +1,10 @@ +
Tasks
+{% if(project.tasks.length) { %} + {% project.tasks.forEach(function(d) { %} +

{{ d.title }}

+ {% }); %} +{% } else { %} +

No Tasks Defined

+{% } %} \ No newline at end of file diff --git a/erpnext/projects/doctype/project/project_links.py b/erpnext/projects/doctype/project/project_links.py new file mode 100644 index 0000000000..6c163784d6 --- /dev/null +++ b/erpnext/projects/doctype/project/project_links.py @@ -0,0 +1,23 @@ +from frappe import _ + +links = { + 'fieldname': 'project', + 'transactions': [ + { + 'label': _('Project'), + 'items': ['Task', 'Time Log', 'Expense Claim', 'Issue'] + }, + { + 'label': _('Material'), + 'items': ['Material Request', 'BOM', 'Stock Entry'] + }, + { + 'label': _('Sales'), + 'items': ['Sales Order', 'Delivery Note', 'Sales Invoice'] + }, + { + 'label': _('Purchase'), + 'items': ['Purchase Order', 'Purchase Receipt', 'Purchase Invoice'] + }, + ] +} diff --git a/erpnext/projects/doctype/task/task.js b/erpnext/projects/doctype/task/task.js index a0bbe26cec..605ed8d860 100644 --- a/erpnext/projects/doctype/task/task.js +++ b/erpnext/projects/doctype/task/task.js @@ -34,12 +34,12 @@ frappe.ui.form.on("Task", { frm.add_custom_button(__("Close"), function() { frm.set_value("status", "Closed"); frm.save(); - }, __("Status")); + }); } else { frm.add_custom_button(__("Reopen"), function() { frm.set_value("status", "Open"); frm.save(); - }, __("Status")); + }); } } } diff --git a/erpnext/selling/doctype/customer/customer.js b/erpnext/selling/doctype/customer/customer.js index d30924e67f..56452804b5 100644 --- a/erpnext/selling/doctype/customer/customer.js +++ b/erpnext/selling/doctype/customer/customer.js @@ -7,6 +7,8 @@ frappe.ui.form.on("Customer", { frappe.setup_language_field(frm); }, refresh: function(frm) { + frm.dashboard.show_heatmap = true; + frm.dashboard.heatmap_message = __('This is based on transactions against this Customer. See timeline below for details'); frm.dashboard.show_dashboard(); if(frappe.defaults.get_default("cust_master_name")!="Naming Series") { diff --git a/erpnext/selling/doctype/customer/customer_links.py b/erpnext/selling/doctype/customer/customer_links.py index 3ae139b439..32bedded77 100644 --- a/erpnext/selling/doctype/customer/customer_links.py +++ b/erpnext/selling/doctype/customer/customer_links.py @@ -11,6 +11,10 @@ links = { 'label': _('Orders'), 'items': ['Sales Order', 'Delivery Note', 'Sales Invoice'] }, + { + 'label': _('Support'), + 'items': ['Issue'] + }, { 'label': _('Projects'), 'items': ['Project'] diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js index 4a4de4c921..092bb31f98 100644 --- a/erpnext/stock/doctype/item/item.js +++ b/erpnext/stock/doctype/item/item.js @@ -76,6 +76,9 @@ frappe.ui.form.on("Item", { erpnext.item.toggle_attributes(frm); + frm.dashboard.show_heatmap = frm.doc.is_stock_item; + frm.dashboard.heatmap_message = __('This is based on stock movement. See {0} for details', + ['' + __('Stock Ledger') + '']); frm.dashboard.show_dashboard(); }, diff --git a/erpnext/stock/doctype/item/item_dashboard.html b/erpnext/stock/doctype/item/item_dashboard.html index cef209a666..3ce6b57844 100644 --- a/erpnext/stock/doctype/item/item_dashboard.html +++ b/erpnext/stock/doctype/item/item_dashboard.html @@ -1,6 +1,6 @@ -
-
Stock Levels
-