[minor] sales invoice to delivery note mapping and prevdoc validation
diff --git a/accounts/doctype/sales_invoice/sales_invoice.js b/accounts/doctype/sales_invoice/sales_invoice.js
index a4bbb2a..35ea831 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/accounts/doctype/sales_invoice/sales_invoice.js
@@ -60,7 +60,7 @@
 
 			cur_frm.add_custom_button('Send SMS', cur_frm.cscript.send_sms);
 
-			if(doc.is_pos==1 && doc.update_stock!=1)
+			if(cint(doc.update_stock)!=1)
 				cur_frm.add_custom_button('Make Delivery', cur_frm.cscript['Make Delivery Note']);
 
 			if(doc.outstanding_amount!=0)
diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py
index ceab40a..d875247 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/accounts/doctype/sales_invoice/sales_invoice.py
@@ -983,3 +983,49 @@
 				and tabAccount.%(key)s LIKE '%(txt)s'
 				%(mcond)s""" % {'company': filters['company'], 'key': searchfield, 
 			'txt': "%%%s%%" % txt, 'mcond':get_match_cond(doctype, searchfield)})
+
+
+@webnotes.whitelist()
+def make_delivery_note(source_name, target_doclist=None):
+	from webnotes.model.mapper import get_mapped_doclist
+	
+	def set_missing_values(source, target):
+		bean = webnotes.bean(target)
+		bean.run_method("onload_post_render")
+		
+	def update_item(obj, target, source_parent):
+		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 Invoice", source_name, 	{
+		"Sales Invoice": {
+			"doctype": "Delivery Note", 
+			"validation": {
+				"docstatus": ["=", 1]
+			}
+		}, 
+		"Sales Invoice Item": {
+			"doctype": "Delivery Note Item", 
+			"field_map": {
+				"name": "prevdoc_detail_docname", 
+				"parent": "prevdoc_docname", 
+				"parenttype": "prevdoc_doctype",
+				"serial_no": "serial_no"
+			},
+			"postprocess": update_item
+		}, 
+		"Sales Taxes and Charges": {
+			"doctype": "Sales Taxes and Charges", 
+			"add_if_empty": True
+		}, 
+		"Sales Team": {
+			"doctype": "Sales Team", 
+			"field_map": {
+				"incentives": "incentives"
+			},
+			"add_if_empty": True
+		}
+	}, target_doclist, set_missing_values)
+	
+	return [d.fields for d in doclist]
\ No newline at end of file
diff --git a/patches/patch_list.py b/patches/patch_list.py
index 9b6bb0f..dc9f34d 100644
--- a/patches/patch_list.py
+++ b/patches/patch_list.py
@@ -262,4 +262,5 @@
 	"patches.july_2013.p08_custom_print_format_net_total_export",
 	"patches.july_2013.p09_remove_website_pyc",
 	"patches.july_2013.p10_change_partner_user_to_website_user",
+	"execute:webnotes.bean('Selling Settings').save()",
 ]
\ No newline at end of file
diff --git a/selling/doctype/selling_settings/selling_settings.py b/selling/doctype/selling_settings/selling_settings.py
index 4716228..febf375 100644
--- a/selling/doctype/selling_settings/selling_settings.py
+++ b/selling/doctype/selling_settings/selling_settings.py
@@ -8,5 +8,5 @@
 		self.doc, self.doclist = d, dl
 		
 	def validate(self):
-		for key in ["cust_master_name", "customer_group", "territory", "allow_same_sales_rate"]:
+		for key in ["cust_master_name", "customer_group", "territory", "maintain_same_sales_rate"]:
 			webnotes.conn.set_default(key, self.doc.fields.get(key, ""))
diff --git a/stock/doctype/delivery_note/delivery_note.py b/stock/doctype/delivery_note/delivery_note.py
index f7283eb..3f8a438 100644
--- a/stock/doctype/delivery_note/delivery_note.py
+++ b/stock/doctype/delivery_note/delivery_note.py
@@ -113,21 +113,24 @@
 		if not self.doc.installation_status: self.doc.installation_status = 'Not Installed'	
 		
 	def validate_with_previous_doc(self):
-		super(DocType, self).validate_with_previous_doc(self.tname, {
-			"Sales Order": {
-				"ref_dn_field": "prevdoc_docname",
-				"compare_fields": [["customer", "="], ["company", "="], ["project_name", "="],
-					["currency", "="]],
-			},
-		})
-		if cint(webnotes.defaults.get_global_default('maintain_same_sales_rate')):
+		prev_doctype = [d.prevdoc_doctype for d in self.doclist.get({
+			"parentfield": "delivery_note_details", "prevdoc_doctype": ["!=", ""]})]
+		if prev_doctype:
 			super(DocType, self).validate_with_previous_doc(self.tname, {
-				"Sales Order Item": {
-					"ref_dn_field": "prevdoc_detail_docname",
-					"compare_fields": [["export_rate", "="]],
-					"is_child_table": True
-				}
+				prev_doctype[0]: {
+					"ref_dn_field": "prevdoc_docname",
+					"compare_fields": [["customer", "="], ["company", "="], ["project_name", "="],
+						["currency", "="]],
+				},
 			})
+			if cint(webnotes.defaults.get_global_default('maintain_same_sales_rate')):
+				super(DocType, self).validate_with_previous_doc(self.tname, {
+					prev_doctype[0] + " Item": {
+						"ref_dn_field": "prevdoc_detail_docname",
+						"compare_fields": [["export_rate", "="]],
+						"is_child_table": True
+					}
+				})
 			
 		
 	def validate_proj_cust(self):