[mapper] sales order-delivery note, added postprocess function in each doc for mapper.py
diff --git a/selling/doctype/sales_order/sales_order.js b/selling/doctype/sales_order/sales_order.js
index 6ed5f1c..daedfab 100644
--- a/selling/doctype/sales_order/sales_order.js
+++ b/selling/doctype/sales_order/sales_order.js
@@ -203,21 +203,10 @@
 
 
 cur_frm.cscript['Make Delivery Note'] = function() {
-	var doc = cur_frm.doc;
-	if (doc.docstatus == 1) { 
-	n = wn.model.make_new_doc_and_get_name("Delivery Note");
-	$c('dt_map', args={
-					'docs':wn.model.compress([locals["Delivery Note"][n]]),
-					'from_doctype':'Sales Order',
-					'to_doctype':'Delivery Note',
-					'from_docname':doc.name,
-		'from_to_list':"[['Sales Order', 'Delivery Note'], ['Sales Order Item', 'Delivery Note Item'],['Sales Taxes and Charges','Sales Taxes and Charges'],['Sales Team','Sales Team']]"
-	}
-	, function(r,rt) {
-		loaddoc("Delivery Note", n);
-		}
-		);
-	}
+	wn.model.open_mapped_doc({
+		method: "selling.doctype.sales_order.sales_order.make_delivery_note",
+		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 0c9237a..019b699 100644
--- a/selling/doctype/sales_order/sales_order.py
+++ b/selling/doctype/sales_order/sales_order.py
@@ -405,4 +405,45 @@
 	}, target_doclist, postprocess)
 	
 	return [d.fields for d in doclist]
-	
\ No newline at end of file
+
+@webnotes.whitelist()
+def make_delivery_note(source_name, target_doclist=None):
+	from webnotes.model.mapper import get_mapped_doclist
+	
+	def update_item(obj, target):
+		target.amount = (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.basic_rate)
+		target.export_amount = (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.export_rate)
+		target.qty = flt(obj.qty) - flt(obj.delivered_qty)
+	
+	doclist = get_mapped_doclist("Sales Order", source_name, {
+		"Sales Order": {
+			"doctype": "Delivery Note", 
+			"field_map": {
+				"name": "sales_order_no", 
+				"shipping_address": "address_display", 
+				"shipping_address_name": "customer_address", 
+			},
+			"validation": {
+				"docstatus": ["=", 1]
+			}
+		}, 
+		"Sales Order Item": {
+			"doctype": "Delivery Note Item", 
+			"field_map": {
+				"export_rate": "export_rate", 
+				"name": "prevdoc_detail_docname", 
+				"parent": "prevdoc_docname", 
+				"parenttype": "prevdoc_doctype", 
+				"reserved_warehouse": "warehouse"
+			},
+			"postprocess": update_item
+		}, 
+		"Sales Taxes and Charges": {
+			"doctype": "Sales Taxes and Charges", 
+		}, 
+		"Sales Team": {
+			"doctype": "Sales Team", 
+		}
+	}, target_doclist)
+	
+	return [d.fields for d in doclist]
diff --git a/selling/doctype/sales_order/test_sales_order.py b/selling/doctype/sales_order/test_sales_order.py
index 7678f37..00af81f 100644
--- a/selling/doctype/sales_order/test_sales_order.py
+++ b/selling/doctype/sales_order/test_sales_order.py
@@ -6,16 +6,33 @@
 	def test_make_material_request(self):
 		from selling.doctype.sales_order.sales_order import make_material_request
 		
+		so = webnotes.bean(copy=test_records[0]).insert()
+		
 		self.assertRaises(webnotes.ValidationError, make_material_request, 
-			"_T-Sales Order-00001")
+			so.doc.name)
 
-		sales_order = webnotes.bean("Sales Order", "_T-Sales Order-00001")
+		sales_order = webnotes.bean("Sales Order", so.doc.name)
 		sales_order.submit()
-		mr = make_material_request("_T-Sales Order-00001")
+		mr = make_material_request(so.doc.name)
 		
 		self.assertEquals(mr[0]["material_request_type"], "Purchase")
 		self.assertEquals(len(mr), len(sales_order.doclist))
-				
+
+	def test_make_delivery_note(self):
+		from selling.doctype.sales_order.sales_order import make_delivery_note
+
+		so = webnotes.bean(copy=test_records[0]).insert()
+
+		self.assertRaises(webnotes.ValidationError, make_delivery_note, 
+			so.doc.name)
+
+		sales_order = webnotes.bean("Sales Order", so.doc.name)
+		sales_order.submit()
+		dn = make_delivery_note(so.doc.name)
+		
+		self.assertEquals(dn[0]["doctype"], "Delivery Note")
+		self.assertEquals(len(dn), len(sales_order.doclist))
+
 	def create_so(self, so_doclist = None):
 		if not so_doclist:
 			so_doclist =test_records[0]
diff --git a/stock/doctype/delivery_note/delivery_note.js b/stock/doctype/delivery_note/delivery_note.js
index ac2c4e9..a0560cf 100644
--- a/stock/doctype/delivery_note/delivery_note.js
+++ b/stock/doctype/delivery_note/delivery_note.js
@@ -57,17 +57,10 @@
 
 
 cur_frm.cscript.get_items = function(doc,dt,dn) {
-	var callback = function(r,rt){
-		var doc = locals[cur_frm.doctype][cur_frm.docname];					
-		if(r.message){							
-			doc.sales_order_no = r.message;			
-			if(doc.sales_order_no) {					
-				unhide_field(['customer_address','contact_person','territory','customer_group']);														
-			}			
-			cur_frm.refresh_fields();
-		}
-	} 
- $c_obj(make_doclist(doc.doctype, doc.name),'pull_sales_order_details','',callback); 
+	wn.model.map_current_doc({
+		method: "selling.doctype.sales_order.sales_order.make_delivery_note",
+		source_name: cur_frm.doc.sales_order_no,
+	})
 }
 
 
diff --git a/stock/doctype/delivery_note/delivery_note.py b/stock/doctype/delivery_note/delivery_note.py
index 30647a1..38cf7bc 100644
--- a/stock/doctype/delivery_note/delivery_note.py
+++ b/stock/doctype/delivery_note/delivery_note.py
@@ -63,19 +63,6 @@
 		"""Get Commission rate of Sales Partner"""
 		return get_obj('Sales Common').get_comm_rate(sales_partner, self)
 
-
-	def pull_sales_order_details(self):
-		self.validate_prev_docname()
-		self.doclist = self.doc.clear_table(self.doclist,'other_charges')
-
-		if self.doc.sales_order_no:
-			get_obj('DocType Mapper', 'Sales Order-Delivery Note').dt_map('Sales Order', 'Delivery Note', self.doc.sales_order_no, self.doc, self.doclist, "[['Sales Order', 'Delivery Note'],['Sales Order Item', 'Delivery Note Item'],['Sales Taxes and Charges','Sales Taxes and Charges'],['Sales Team','Sales Team']]")
-		else:
-			msgprint("Please select Sales Order No. whose details need to be pulled")
-
-		return cstr(self.doc.sales_order_no)
-
-
 	def validate_prev_docname(self):
 		"""Validates that Sales Order is not pulled twice"""
 		for d in getlist(self.doclist, 'delivery_note_details'):
diff --git a/stock/doctype/material_request/material_request.js b/stock/doctype/material_request/material_request.js
index 5c2eed5..025f7b5 100644
--- a/stock/doctype/material_request/material_request.js
+++ b/stock/doctype/material_request/material_request.js
@@ -102,13 +102,19 @@
 };
 
 cur_frm.cscript['Make Purchase Order'] = function() {
-	cur_frm.map([["Material Request", "Purchase Order"], ["Material Request Item", "Purchase Order Item"]]);
+	cur_frm.map([
+		["Material Request", "Purchase Order"], 
+		["Material Request Item", "Purchase Order Item"]]);
 };
 
 cur_frm.cscript.make_supplier_quotation = function() {
-	cur_frm.map([["Material Request", "Supplier Quotation"], ["Material Request Item", "Supplier Quotation Item"]]);
+	cur_frm.map([
+		["Material Request", "Supplier Quotation"], 
+		["Material Request Item", "Supplier Quotation Item"]]);
 };
 
 cur_frm.cscript.make_stock_entry = function() {
-	cur_frm.map([["Material Request", "Stock Entry"], ["Material Request Item", "Stock Entry Detail"]]);
+	cur_frm.map([
+		["Material Request", "Stock Entry"], 
+		["Material Request Item", "Stock Entry Detail"]]);
 };