From 212de6a08499b043950cc8801bff9a44a3231147 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 4 Jul 2013 16:29:03 +0530 Subject: [PATCH] [mapper] added sales order > material request, added postprocess function --- selling/doctype/lead/lead.js | 28 +++--------------- selling/doctype/lead/lead.py | 21 +++++++++++--- selling/doctype/sales_order/sales_order.js | 19 +++--------- selling/doctype/sales_order/sales_order.py | 29 ++++++++++++++++++- .../doctype/sales_order/test_sales_order.py | 13 +++++++++ 5 files changed, 66 insertions(+), 44 deletions(-) diff --git a/selling/doctype/lead/lead.js b/selling/doctype/lead/lead.js index 1b515053b6..b3c200de02 100644 --- a/selling/doctype/lead/lead.js +++ b/selling/doctype/lead/lead.js @@ -105,29 +105,9 @@ cur_frm.cscript['Create Customer'] = function(){ }) } -// Create New Opportunity -// =============================================================== cur_frm.cscript['Create Opportunity'] = function(){ - var doc = cur_frm.doc; - $c('runserverobj',args={ 'method':'check_status', 'docs':wn.model.compress(make_doclist(doc.doctype, doc.name))}, - function(r,rt){ - if(r.message == 'Converted'){ - msgprint("This lead is now converted to customer. Please create enquiry on behalf of customer"); - } - else{ - n = wn.model.make_new_doc_and_get_name("Opportunity"); - $c('dt_map', args={ - 'docs':wn.model.compress([locals["Opportunity"][n]]), - 'from_doctype':'Lead', - 'to_doctype':'Opportunity', - 'from_docname':doc.name, - 'from_to_list':"[['Lead', 'Opportunity']]" - } - , function(r,rt) { - loaddoc("Opportunity", n); - } - ); - } - } - ); + wn.model.open_mapped_doc({ + method: "selling.doctype.lead.lead.make_opportunity", + source_name: cur_frm.doc.name + }) } \ No newline at end of file diff --git a/selling/doctype/lead/lead.py b/selling/doctype/lead/lead.py index 3a3d8e504f..4dde84a579 100644 --- a/selling/doctype/lead/lead.py +++ b/selling/doctype/lead/lead.py @@ -100,10 +100,7 @@ class DocType(SellingController): @webnotes.whitelist() def make_customer(source_name, target_doclist=None): from webnotes.model.mapper import get_mapped_doclist - - if target_doclist: - target_doclist = json.loads(target_doclist) - + doclist = get_mapped_doclist("Lead", source_name, {"Lead": { "doctype": "Customer", @@ -115,4 +112,20 @@ def make_customer(source_name, target_doclist=None): } }}, target_doclist) + return [d.fields for d in doclist] + +@webnotes.whitelist() +def make_opportunity(source_name, target_doclist=None): + from webnotes.model.mapper import get_mapped_doclist + + doclist = get_mapped_doclist("Lead", source_name, + {"Lead": { + "doctype": "Opportunity", + "field_map": { + "campaign_name": "campaign", + "doctype": "enquiry_from", + "name": "lead", + } + }}, target_doclist) + return [d.fields for d in doclist] \ No newline at end of file diff --git a/selling/doctype/sales_order/sales_order.js b/selling/doctype/sales_order/sales_order.js index c4d50cc045..6ed5f1cbed 100644 --- a/selling/doctype/sales_order/sales_order.js +++ b/selling/doctype/sales_order/sales_order.js @@ -195,21 +195,10 @@ cur_frm.cscript.make_maintenance_visit = function() { } cur_frm.cscript['Make Material Request'] = function() { - var doc = cur_frm.doc; - if (doc.docstatus == 1) { - n = wn.model.make_new_doc_and_get_name("Material Request"); - $c('dt_map', args={ - 'docs':wn.model.compress([locals["Material Request"][n]]), - 'from_doctype':'Sales Order', - 'to_doctype':'Material Request', - 'from_docname':doc.name, - 'from_to_list':"[['Sales Order', 'Material Request'], ['Sales Order Item', 'Material Request Item']]" - } - , function(r,rt) { - loaddoc("Material Request", n); - } - ); - } + wn.model.open_mapped_doc({ + method: "selling.doctype.sales_order.sales_order.make_material_request", + source_name: cur_frm.doc.name + }) } diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py index ec365a290c..0c9237a465 100644 --- a/selling/doctype/sales_order/sales_order.py +++ b/selling/doctype/sales_order/sales_order.py @@ -378,4 +378,31 @@ def get_currency_and_number_format(): "currency": webnotes.conn.get_default("currency"), "currency_symbols": json.dumps(dict(webnotes.conn.sql("""select name, symbol from tabCurrency where ifnull(enabled,0)=1"""))) - } \ No newline at end of file + } + +@webnotes.whitelist() +def make_material_request(source_name, target_doclist=None): + from webnotes.model.mapper import get_mapped_doclist + + def postprocess(source, doclist): + doclist[0].material_request_type = "Purchase" + + doclist = get_mapped_doclist("Sales Order", source_name, { + "Sales Order": { + "doctype": "Material Request", + "validation": { + "docstatus": ["=", 1] + } + }, + "Sales Order Item": { + "doctype": "Material Request Item", + "field_map": { + "parent": "sales_order_no", + "reserved_warehouse": "warehouse", + "stock_uom": "uom" + } + } + }, target_doclist, postprocess) + + return [d.fields for d in doclist] + \ No newline at end of file diff --git a/selling/doctype/sales_order/test_sales_order.py b/selling/doctype/sales_order/test_sales_order.py index 40a10b439c..7678f37c4c 100644 --- a/selling/doctype/sales_order/test_sales_order.py +++ b/selling/doctype/sales_order/test_sales_order.py @@ -3,6 +3,19 @@ from webnotes.utils import flt import unittest class TestSalesOrder(unittest.TestCase): + def test_make_material_request(self): + from selling.doctype.sales_order.sales_order import make_material_request + + self.assertRaises(webnotes.ValidationError, make_material_request, + "_T-Sales Order-00001") + + sales_order = webnotes.bean("Sales Order", "_T-Sales Order-00001") + sales_order.submit() + mr = make_material_request("_T-Sales Order-00001") + + self.assertEquals(mr[0]["material_request_type"], "Purchase") + self.assertEquals(len(mr), len(sales_order.doclist)) + def create_so(self, so_doclist = None): if not so_doclist: so_doclist =test_records[0]