[mapper] material request to purchase order
diff --git a/accounts/doctype/accounts_settings/accounts_settings.py b/accounts/doctype/accounts_settings/accounts_settings.py
index 4b58048..b548936 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 1adce20..7e4ebe0 100644
--- a/selling/doctype/quotation/quotation.py
+++ b/selling/doctype/quotation/quotation.py
@@ -254,9 +254,6 @@
@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 025f7b5..3446b02 100644
--- a/stock/doctype/material_request/material_request.js
+++ b/stock/doctype/material_request/material_request.js
@@ -102,10 +102,11 @@
};
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 dfed6c4..269c4c5 100644
--- a/stock/doctype/material_request/material_request.py
+++ b/stock/doctype/material_request/material_request.py
@@ -240,3 +240,35 @@
"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 f5dbb52..f26773b 100644
--- a/stock/doctype/material_request/test_material_request.py
+++ b/stock/doctype/material_request/test_material_request.py
@@ -6,6 +6,21 @@
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():