From df1fca9f658f20ccb355e10c2241b836ae466804 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 4 Jul 2013 17:50:06 +0530 Subject: [PATCH] [mapper] material request to purchase order --- .../accounts_settings/accounts_settings.py | 1 + selling/doctype/quotation/quotation.py | 3 -- .../material_request/material_request.js | 9 +++--- .../material_request/material_request.py | 32 +++++++++++++++++++ .../material_request/test_material_request.py | 15 +++++++++ 5 files changed, 53 insertions(+), 7 deletions(-) diff --git a/accounts/doctype/accounts_settings/accounts_settings.py b/accounts/doctype/accounts_settings/accounts_settings.py index 4b580488bb..b5489369d4 100644 --- a/accounts/doctype/accounts_settings/accounts_settings.py +++ b/accounts/doctype/accounts_settings/accounts_settings.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals import webnotes +from webnotes.utils import cint class DocType: def __init__(self, d, dl): diff --git a/selling/doctype/quotation/quotation.py b/selling/doctype/quotation/quotation.py index 1adce2028e..7e4ebe0b4d 100644 --- a/selling/doctype/quotation/quotation.py +++ b/selling/doctype/quotation/quotation.py @@ -254,9 +254,6 @@ class DocType(SellingController): @webnotes.whitelist() def make_sales_order(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("Quotation", source_name, { "Quotation": { diff --git a/stock/doctype/material_request/material_request.js b/stock/doctype/material_request/material_request.js index 025f7b5688..3446b02ad4 100644 --- a/stock/doctype/material_request/material_request.js +++ b/stock/doctype/material_request/material_request.js @@ -102,10 +102,11 @@ cur_frm.cscript['Unstop Material Request'] = function(){ }; cur_frm.cscript['Make Purchase Order'] = function() { - cur_frm.map([ - ["Material Request", "Purchase Order"], - ["Material Request Item", "Purchase Order Item"]]); -}; + wn.model.open_mapped_doc({ + method: "stock.doctype.material_request.material_request.make_purchase_order", + source_name: cur_frm.doc.name + }) +} cur_frm.cscript.make_supplier_quotation = function() { cur_frm.map([ diff --git a/stock/doctype/material_request/material_request.py b/stock/doctype/material_request/material_request.py index dfed6c4941..269c4c54d7 100644 --- a/stock/doctype/material_request/material_request.py +++ b/stock/doctype/material_request/material_request.py @@ -240,3 +240,35 @@ def _update_requested_qty(controller, mr_obj, mr_items): "indented_qty": (se_detail.docstatus==2 and 1 or -1) * add_indented_qty, "posting_date": controller.doc.posting_date, }) + + + +@webnotes.whitelist() +def make_purchase_order(source_name, target_doclist=None): + from webnotes.model.mapper import get_mapped_doclist + + def update_item(obj, target): + target.conversion_factor = 1 + target.qty = flt(obj.qty) - flt(obj.ordered_qty) + + doclist = get_mapped_doclist("Material Request", source_name, { + "Material Request": { + "doctype": "Purchase Order", + "validation": { + "docstatus": ["=", 1], + "material_request_type": ["=", "Purchase"] + } + }, + "Material Request Item": { + "doctype": "Purchase Order Item", + "field_map": { + "name": "prevdoc_detail_docname", + "parent": "prevdoc_docname", + "parenttype": "prevdoc_doctype", + "uom": "stock_uom" + }, + "postprocess": update_item + } + }, target_doclist) + + return [d.fields for d in doclist] \ No newline at end of file diff --git a/stock/doctype/material_request/test_material_request.py b/stock/doctype/material_request/test_material_request.py index f5dbb52bbe..f26773b0c8 100644 --- a/stock/doctype/material_request/test_material_request.py +++ b/stock/doctype/material_request/test_material_request.py @@ -6,6 +6,21 @@ import webnotes, unittest from webnotes.utils import flt class TestMaterialRequest(unittest.TestCase): + def test_make_purchase_order(self): + from stock.doctype.material_request.material_request import make_purchase_order + + mr = webnotes.bean(copy=test_records[0]).insert() + + self.assertRaises(webnotes.ValidationError, make_purchase_order, + mr.doc.name) + + mr = webnotes.bean("Material Request", mr.doc.name) + mr.submit() + po = make_purchase_order(mr.doc.name) + + self.assertEquals(po[0]["doctype"], "Purchase Order") + self.assertEquals(len(po), len(mr.doclist)) + def _test_expected(self, doclist, expected_values): for i, expected in enumerate(expected_values): for fieldname, val in expected.items():