diff --git a/manufacturing/doctype/production_order/production_order.txt b/manufacturing/doctype/production_order/production_order.txt index 53b7f1ceb7..38a98fefab 100644 --- a/manufacturing/doctype/production_order/production_order.txt +++ b/manufacturing/doctype/production_order/production_order.txt @@ -2,7 +2,7 @@ { "creation": "2013-01-10 16:34:16", "docstatus": 0, - "modified": "2013-01-29 17:17:31", + "modified": "2013-07-02 11:56:54", "modified_by": "Administrator", "owner": "Administrator" }, @@ -106,6 +106,14 @@ "read_only": 0, "reqd": 1 }, + { + "doctype": "DocField", + "fieldname": "wip_warehouse", + "fieldtype": "Link", + "label": "Work-in-Progress Warehouse", + "options": "Warehouse", + "reqd": 1 + }, { "doctype": "DocField", "fieldname": "column_break1", @@ -172,6 +180,13 @@ "options": "Sales Order", "read_only": 0 }, + { + "doctype": "DocField", + "fieldname": "description", + "fieldtype": "Small Text", + "label": "Item Description", + "read_only": 1 + }, { "doctype": "DocField", "fieldname": "project_name", diff --git a/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/manufacturing/doctype/production_planning_tool/production_planning_tool.py index ed7f7bfb3f..26644ad787 100644 --- a/manufacturing/doctype/production_planning_tool/production_planning_tool.py +++ b/manufacturing/doctype/production_planning_tool/production_planning_tool.py @@ -210,7 +210,6 @@ class DocType: "wip_warehouse" : "", "fg_warehouse" : "", "status" : "Draft", - "fiscal_year" : webnotes.conn.get_default("fiscal_year") } return bom_dict, item_dict diff --git a/selling/doctype/customer/customer.js b/selling/doctype/customer/customer.js index 35a6f59a03..c0f6eab9cf 100644 --- a/selling/doctype/customer/customer.js +++ b/selling/doctype/customer/customer.js @@ -32,6 +32,7 @@ cur_frm.add_fetch('lead_name', 'company_name', 'customer_name'); cur_frm.add_fetch('default_sales_partner','commission_rate','default_commission_rate'); cur_frm.cscript.refresh = function(doc,dt,dn) { + cur_frm.layout.clear_dashboard(); if(sys_defaults.cust_master_name == 'Customer Name') hide_field('naming_series'); else @@ -39,7 +40,8 @@ cur_frm.cscript.refresh = function(doc,dt,dn) { if(doc.__islocal){ hide_field(['address_html','contact_html']); - }else{ + }else{ + cur_frm.cscript.setup_dashboard(doc); unhide_field(['address_html','contact_html']); // make lists cur_frm.cscript.make_address(doc,dt,dn); @@ -53,6 +55,35 @@ cur_frm.cscript.refresh = function(doc,dt,dn) { } } +cur_frm.cscript.setup_dashboard = function(doc) { + cur_frm.layout.dashboard.toggle(true); + var headline = $('
\ + Loading...
') + .appendTo(cur_frm.layout.dashboard); + + cur_frm.layout.add_doctype_badge(wn._("Opportunities"), "Opportunity", "customer"); + cur_frm.layout.add_doctype_badge(wn._("Quotations"), "Quotation", "customer"); + cur_frm.layout.add_doctype_badge(wn._("Sales Orders"), "Sales Order", "customer"); + cur_frm.layout.add_doctype_badge(wn._("Delivery Notes"), "Delivery Note", "customer"); + cur_frm.layout.add_doctype_badge(wn._("Sales Invoices"), "Sales Invoice", "customer"); + + wn.call({ + type: "GET", + method:"selling.doctype.customer.customer.get_dashboard_info", + args: { + customer: cur_frm.doc.name + }, + callback: function(r) { + cur_frm.layout.dashboard.find(".form-headline") + .html(wn._("Total Billing This Year: ") + "" + + format_currency(r.message.total_billing, cur_frm.doc.default_currency) + + ' / ' + wn._("Unpaid") + ": " + + format_currency(r.message.total_unpaid, cur_frm.doc.default_currency) + ''); + cur_frm.layout.set_badge_count(r.message); + } + }) +} + cur_frm.cscript.make_address = function() { if(!cur_frm.address_list) { cur_frm.address_list = new wn.ui.Listing({ @@ -95,4 +126,4 @@ cur_frm.fields_dict['customer_group'].get_query = function(doc,dt,dn) { } -cur_frm.fields_dict.lead_name.get_query = erpnext.utils.lead_query; +cur_frm.fields_dict.lead_name.get_query = erpnext.utils.lead_query; \ No newline at end of file diff --git a/selling/doctype/customer/customer.py b/selling/doctype/customer/customer.py index 10d2ce52fb..83c10a5452 100644 --- a/selling/doctype/customer/customer.py +++ b/selling/doctype/customer/customer.py @@ -173,4 +173,25 @@ class DocType(TransactionBase): #update master_name in doctype account webnotes.conn.sql("""update `tabAccount` set master_name = %s, - master_type = 'Customer' where master_name = %s""", (new,old)) \ No newline at end of file + master_type = 'Customer' where master_name = %s""", (new,old)) + +@webnotes.whitelist() +def get_dashboard_info(customer): + if not webnotes.has_permission("Customer", customer): + webnotes.msgprint("No Permission", raise_exception=True) + + out = {} + for doctype in ["Opportunity", "Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]: + out[doctype] = webnotes.conn.get_value(doctype, + {"customer": customer, "docstatus": ["!=", 2] }, "count(*)") + + billing = webnotes.conn.sql("""select sum(grand_total), sum(outstanding_amount) + from `tabSales Invoice` + where customer=%s + and docstatus = 1 + and fiscal_year = %s""", (customer, webnotes.conn.get_default("fiscal_year"))) + + out["total_billing"] = billing[0][0] + out["total_unpaid"] = billing[0][1] + + return out \ No newline at end of file diff --git a/selling/doctype/opportunity/opportunity.js b/selling/doctype/opportunity/opportunity.js index 3a56d4dbcb..a4c84af8c5 100644 --- a/selling/doctype/opportunity/opportunity.js +++ b/selling/doctype/opportunity/opportunity.js @@ -34,11 +34,21 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn){ // =============================================================== cur_frm.cscript.onload = function(doc, cdt, cdn) { - if(!doc.enquiry_from) hide_field(['customer', 'customer_address', 'contact_person', 'customer_name','lead', 'address_display', 'contact_display', 'contact_mobile', 'contact_email', 'territory', 'customer_group']); - if(!doc.status) set_multiple(cdt,cdn,{status:'Draft'}); - if(!doc.date) doc.transaction_date = date.obj_to_str(new Date()); - if(!doc.company && sys_defaults.company) set_multiple(cdt,cdn,{company:sys_defaults.company}); - if(!doc.fiscal_year && sys_defaults.fiscal_year) set_multiple(cdt,cdn,{fiscal_year:sys_defaults.fiscal_year}); + if(!doc.enquiry_from && doc.customer) + doc.enquiry_from = "Customer"; + if(!doc.enquiry_from && doc.lead) + doc.enquiry_from = "Lead"; + + if(!doc.enquiry_from) + hide_field(['customer', 'customer_address', 'contact_person', 'customer_name','lead', 'address_display', 'contact_display', 'contact_mobile', 'contact_email', 'territory', 'customer_group']); + if(!doc.status) + set_multiple(cdt,cdn,{status:'Draft'}); + if(!doc.date) + doc.transaction_date = date.obj_to_str(new Date()); + if(!doc.company && sys_defaults.company) + set_multiple(cdt,cdn,{company:sys_defaults.company}); + if(!doc.fiscal_year && sys_defaults.fiscal_year) + set_multiple(cdt,cdn,{fiscal_year:sys_defaults.fiscal_year}); if(doc.enquiry_from) { if(doc.enquiry_from == 'Customer') { @@ -61,6 +71,8 @@ cur_frm.cscript.onload = function(doc, cdt, cdn) { if(cur_frm.fields_dict.contact_by.df.options.match(/^Profile/)) { cur_frm.fields_dict.contact_by.get_query = erpnext.utils.profile_query; } + + if(doc.customer && !doc.customer_name) cur_frm.cscript.customer(doc); } cur_frm.cscript.onload_post_render = function(doc, cdt, cdn) { diff --git a/selling/doctype/opportunity/opportunity.txt b/selling/doctype/opportunity/opportunity.txt index fc4d0412e8..7b86df2d33 100644 --- a/selling/doctype/opportunity/opportunity.txt +++ b/selling/doctype/opportunity/opportunity.txt @@ -2,7 +2,7 @@ { "creation": "2013-03-07 18:50:30", "docstatus": 0, - "modified": "2013-06-11 16:03:41", + "modified": "2013-07-02 17:22:21", "modified_by": "Administrator", "owner": "Administrator" }, @@ -43,6 +43,12 @@ "doctype": "DocType", "name": "Opportunity" }, + { + "doctype": "DocField", + "fieldname": "from_section", + "fieldtype": "Section Break", + "label": "From" + }, { "description": "To manage multiple series please go to Setup > Manage Series", "doctype": "DocField", diff --git a/selling/doctype/quotation/quotation.js b/selling/doctype/quotation/quotation.js index 4276193696..654779ca44 100644 --- a/selling/doctype/quotation/quotation.js +++ b/selling/doctype/quotation/quotation.js @@ -26,8 +26,16 @@ wn.require('app/utilities/doctype/sms_control/sms_control.js'); wn.require('app/selling/doctype/sales_common/sales_common.js'); erpnext.selling.QuotationController = erpnext.selling.SellingController.extend({ + onload: function(doc, dt, dn) { + this._super(doc, dt, dn); + if(doc.customer && !doc.quotation_to) + doc.quotation_to = "Customer"; + else if(doc.lead && !doc.quotation_to) + doc.quotation_to = "Lead"; + + }, refresh: function(doc, dt, dn) { - this._super(); + this._super(doc, dt, dn); if(doc.docstatus == 1 && doc.status!='Order Lost') { cur_frm.add_custom_button('Make Sales Order', cur_frm.cscript['Make Sales Order']); diff --git a/selling/doctype/quotation/quotation.txt b/selling/doctype/quotation/quotation.txt index b9772c8379..433ccf3aa4 100644 --- a/selling/doctype/quotation/quotation.txt +++ b/selling/doctype/quotation/quotation.txt @@ -2,7 +2,7 @@ { "creation": "2013-05-24 19:29:08", "docstatus": 0, - "modified": "2013-06-28 12:47:10", + "modified": "2013-07-02 16:49:52", "modified_by": "Administrator", "owner": "Administrator" }, @@ -42,6 +42,12 @@ "doctype": "DocType", "name": "Quotation" }, + { + "doctype": "DocField", + "fieldname": "customer_section", + "fieldtype": "Section Break", + "label": "Customer" + }, { "doctype": "DocField", "fieldname": "column_break0", diff --git a/selling/page/selling_home/selling_home.js b/selling/page/selling_home/selling_home.js index 8eae737ddb..be0d9dd434 100644 --- a/selling/page/selling_home/selling_home.js +++ b/selling/page/selling_home/selling_home.js @@ -7,6 +7,11 @@ wn.module_page["Selling"] = [ title: wn._("Documents"), icon: "icon-copy", items: [ + { + label: wn._("Customer"), + description: wn._("Customer database."), + doctype:"Customer" + }, { label: wn._("Lead"), description: wn._("Database of potential customers."), @@ -33,11 +38,6 @@ wn.module_page["Selling"] = [ title: wn._("Masters"), icon: "icon-book", items: [ - { - label: wn._("Customer"), - description: wn._("Customer database."), - doctype:"Customer" - }, { label: wn._("Contact"), description: wn._("All Contacts."),