diff --git a/selling/doctype/lead/lead.js b/selling/doctype/lead/lead.js index b3c200de02..40cf454f01 100644 --- a/selling/doctype/lead/lead.js +++ b/selling/doctype/lead/lead.js @@ -55,8 +55,8 @@ erpnext.LeadController = wn.ui.form.Controller.extend({ this.frm.__is_customer = this.frm.__is_customer || this.frm.doc.__is_customer; if(!this.frm.doc.__islocal && !this.frm.__is_customer) { - this.frm.add_custom_button("Create Customer", this.frm.cscript['Create Customer']); - this.frm.add_custom_button("Create Opportunity", this.frm.cscript['Create Opportunity']); + this.frm.add_custom_button("Create Customer", this.create_customer); + this.frm.add_custom_button("Create Opportunity", this.create_opportunity); this.frm.add_custom_button("Send SMS", this.frm.cscript.send_sms); } @@ -93,21 +93,21 @@ erpnext.LeadController = wn.ui.form.Controller.extend({ // note: render_address_row is defined in contact_control.js } this.frm.address_list.run(); + }, + + create_customer: function() { + wn.model.open_mapped_doc({ + method: "selling.doctype.lead.lead.make_customer", + source_name: cur_frm.doc.name + }) + }, + + create_opportunity: function() { + wn.model.open_mapped_doc({ + method: "selling.doctype.lead.lead.make_opportunity", + source_name: cur_frm.doc.name + }) } }); -$.extend(cur_frm.cscript, new erpnext.LeadController({frm: cur_frm})); - -cur_frm.cscript['Create Customer'] = function(){ - wn.model.open_mapped_doc({ - method: "selling.doctype.lead.lead.make_customer", - source_name: cur_frm.doc.name - }) -} - -cur_frm.cscript['Create Opportunity'] = function(){ - wn.model.open_mapped_doc({ - method: "selling.doctype.lead.lead.make_opportunity", - source_name: cur_frm.doc.name - }) -} \ No newline at end of file +$.extend(cur_frm.cscript, new erpnext.LeadController({frm: cur_frm})); \ No newline at end of file diff --git a/selling/doctype/opportunity/opportunity.js b/selling/doctype/opportunity/opportunity.js index c3843cf466..bc10c9b0bb 100644 --- a/selling/doctype/opportunity/opportunity.js +++ b/selling/doctype/opportunity/opportunity.js @@ -35,6 +35,13 @@ erpnext.selling.Opportunity = wn.ui.form.Controller.extend({ 'address_display', 'contact_display', 'contact_mobile', 'contact_email', 'territory', 'customer_group']); } + }, + + create_quotation: function() { + wn.model.open_mapped_doc({ + method: "selling.doctype.opportunity.opportunity.make_quotation", + source_name: cur_frm.doc.name + }) } }); @@ -54,7 +61,7 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn){ cur_frm.clear_custom_buttons(); if(doc.docstatus === 1 && doc.status!=="Opportunity Lost") { - cur_frm.add_custom_button('Create Quotation', cur_frm.cscript['Create Quotation']); + cur_frm.add_custom_button('Create Quotation', cur_frm.cscript.create_quotation); cur_frm.add_custom_button('Opportunity Lost', cur_frm.cscript['Declare Opportunity Lost']); cur_frm.add_custom_button('Send SMS', cur_frm.cscript.send_sms); } @@ -168,24 +175,15 @@ cur_frm.fields_dict['lead'].get_query = function(doc,cdt,cdn){ cur_frm.cscript.lead = function(doc, cdt, cdn) { cur_frm.toggle_display("contact_info", doc.customer || doc.lead); - if(doc.lead) { - cur_frm.call({ - doc: cur_frm.doc, - method: "set_lead_defaults", - callback: function(r) { - if(!r.exc) { - cur_frm.refresh_fields(); - } - } - }); - unhide_field(['customer_name', 'address_display','contact_mobile', 'contact_email', - 'territory']); - } + wn.model.map_current_doc({ + method: "selling.doctype.lead.lead.make_opportunity", + source_name: cur_frm.doc.lead + }) + + unhide_field(['customer_name', 'address_display','contact_mobile', + 'contact_email', 'territory']); } - -//item getquery -//======================================= cur_frm.fields_dict['enquiry_details'].grid.get_field('item_code').get_query = function(doc, cdt, cdn) { if (doc.enquiry_type == 'Maintenance') return erpnext.queries.item({ @@ -197,25 +195,6 @@ cur_frm.fields_dict['enquiry_details'].grid.get_field('item_code').get_query = f }); } -// Create New Quotation -cur_frm.cscript['Create Quotation'] = function(){ - n = wn.model.make_new_doc_and_get_name("Quotation"); - $c('dt_map', args={ - 'docs':wn.model.compress([locals["Quotation"][n]]), - 'from_doctype':'Opportunity', - 'to_doctype':'Quotation', - 'from_docname':cur_frm.docname, - 'from_to_list':"[['Opportunity', 'Quotation'],['Opportunity Item','Quotation Item']]" - } - , function(r,rt) { - loaddoc("Quotation", n); - } - ); -} - - -// declare enquiry lost -//------------------------- cur_frm.cscript['Declare Opportunity Lost'] = function(){ var dialog = new wn.ui.Dialog({ title: "Set as Lost", diff --git a/selling/doctype/opportunity/opportunity.py b/selling/doctype/opportunity/opportunity.py index c56915754f..cced9abfa8 100644 --- a/selling/doctype/opportunity/opportunity.py +++ b/selling/doctype/opportunity/opportunity.py @@ -66,7 +66,6 @@ class DocType(TransactionBase): contact_det = sql("select contact_name, contact_no, email_id from `tabContact` where customer = '%s' and is_customer = 1 and is_primary_contact = 'Yes' and docstatus != 2" %(name), as_dict = 1) - ret['contact_person'] = contact_det and contact_det[0]['contact_name'] or '' ret['contact_no'] = contact_det and contact_det[0]['contact_no'] or '' ret['email_id'] = contact_det and contact_det[0]['email_id'] or '' @@ -175,4 +174,32 @@ class DocType(TransactionBase): return 'true' def on_trash(self): - self.delete_events() \ No newline at end of file + self.delete_events() + +@webnotes.whitelist() +def make_quotation(source_name, target_doclist=None): + from webnotes.model.mapper import get_mapped_doclist + + doclist = get_mapped_doclist("Opportunity", source_name, { + "Opportunity": { + "doctype": "Quotation", + "field_map": { + "enquiry_from": "quotation_to", + "enquiry_type": "order_type", + "name": "enq_no", + }, + "validation": { + "docstatus": ["=", 1] + } + }, + "Opportunity Item": { + "doctype": "Quotation Item", + "field_map": { + "parent": "prevdoc_docname", + "parenttype": "prevdoc_doctype", + "uom": "stock_uom" + } + } + }, target_doclist) + + return [d.fields for d in doclist] \ No newline at end of file