Merge branch 'master' of github.com:webnotes/erpnext into custom_script_defer
diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.py b/accounts/doctype/purchase_invoice/purchase_invoice.py
index 539cef5..141811d 100644
--- a/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -71,7 +71,8 @@
 		self.validate_write_off_account()
 		self.update_raw_material_cost()
 		self.update_valuation_rate("entries")
-		self.validate_multiple_billing("Purchase Receipt", "pr_detail", "import_amount")
+		self.validate_multiple_billing("Purchase Receipt", "pr_detail", "import_amount", 
+			"purchase_receipt_details")
 
 	def get_credit_to(self):
 		acc_head = sql("""select name, credit_days from `tabAccount` 
diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py
index 8f33eb3..ca93786 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/accounts/doctype/sales_invoice/sales_invoice.py
@@ -93,7 +93,8 @@
 		self.validate_c_form()
 		self.validate_time_logs_are_submitted()
 		self.validate_recurring_invoice()
-		self.validate_multiple_billing("Delivery Note", "dn_detail", "export_amount")
+		self.validate_multiple_billing("Delivery Note", "dn_detail", "export_amount", 
+			"delivery_note_details")
 
 	def on_submit(self):
 		if cint(self.doc.update_stock) == 1:
@@ -173,8 +174,8 @@
 		self.convert_to_recurring()
 		
 	def set_missing_values(self, for_validate=False):
-		super(DocType, self).set_missing_values(for_validate)
 		self.set_pos_fields(for_validate)
+		super(DocType, self).set_missing_values(for_validate)
 		
 	def set_customer_defaults(self):
 		# TODO cleanup these methods
@@ -215,6 +216,12 @@
 					"docstatus": ["!=", 2]
 				}) or pos.customer_account
 				
+			if self.doc.debit_to and not self.doc.customer:
+				self.doc.customer = webnotes.conn.get_value("Account", {
+					"name": self.doc.debit_to,
+					"master_type": "Customer"
+				}, "master_name")
+				
 			for fieldname in ('territory', 'naming_series', 'currency', 'charge', 'letter_head', 'tc_name',
 				'price_list_name', 'company', 'select_print_heading', 'cash_bank_account'):
 					if (not for_validate) or (for_validate and not self.doc.fields.get(fieldname)):
diff --git a/controllers/accounts_controller.py b/controllers/accounts_controller.py
index 822717b..725fdb3 100644
--- a/controllers/accounts_controller.py
+++ b/controllers/accounts_controller.py
@@ -382,18 +382,21 @@
 				"allocate_amount": 0
 			})
 			
-	def validate_multiple_billing(self, ref_dt, item_ref_dn, based_on):
+	def validate_multiple_billing(self, ref_dt, item_ref_dn, based_on, parentfield):
 		for item in self.doclist.get({"parentfield": "entries"}):
 			if item.fields.get(item_ref_dn):
 				already_billed = webnotes.conn.sql("""select sum(%s) from `tab%s` 
 					where %s=%s and docstatus=1""" % (based_on, self.tname, item_ref_dn, '%s'), 
 					item.fields[item_ref_dn])[0][0]
-
-				max_allowed_amt = flt(webnotes.conn.get_value(ref_dt + " Item", 
-					item.fields[item_ref_dn], based_on))
 				
-				if max_allowed_amt and \
-						flt(already_billed) + flt(item.fields[based_on]) > max_allowed_amt:
+				max_allowed_amt = flt(webnotes.conn.get_value(ref_dt + " Item", 
+					item.fields[item_ref_dn], based_on), self.precision(based_on, item))
+				
+				total_billed_amt = flt(flt(already_billed) + flt(item.fields[based_on]), 
+					self.precision(based_on, item))
+				webnotes.errprint([max_allowed_amt, total_billed_amt])
+				
+				if max_allowed_amt and total_billed_amt - max_allowed_amt > 0.02:
 					webnotes.msgprint(_("Row ")+ cstr(item.idx) + ": " + cstr(item.item_code) + 
 						_(" will be over-billed against mentioned ") + cstr(ref_dt) +  
 						_(". Max allowed " + cstr(based_on) + ": " + cstr(max_allowed_amt)), 
diff --git a/public/js/transaction.js b/public/js/transaction.js
index f1f0e87..2062fe5 100644
--- a/public/js/transaction.js
+++ b/public/js/transaction.js
@@ -49,7 +49,7 @@
 		erpnext.hide_naming_series();
 		erpnext.hide_company();
 		this.show_item_wise_taxes();
-		this.frm.fields_dict.currency ? this.currency() : this.set_dynamic_labels();
+		this.set_dynamic_labels();
 	},
 	
 	onload_post_render: function() {
diff --git a/selling/utils.py b/selling/utils.py
index bf4f081..d24a350 100644
--- a/selling/utils.py
+++ b/selling/utils.py
@@ -190,7 +190,7 @@
 	if not pos_settings:
 		pos_settings = webnotes.conn.sql("""select * from `tabPOS Setting` 
 			where ifnull(user,'') = '' and company = %s""", company, as_dict=1)
-
+			
 	return pos_settings and pos_settings[0] or None
 	
 def apply_pos_settings(pos_settings, opts):
diff --git a/stock/doctype/delivery_note/delivery_note.py b/stock/doctype/delivery_note/delivery_note.py
index 3f8a438..7ea512d 100644
--- a/stock/doctype/delivery_note/delivery_note.py
+++ b/stock/doctype/delivery_note/delivery_note.py
@@ -114,7 +114,8 @@
 		
 	def validate_with_previous_doc(self):
 		prev_doctype = [d.prevdoc_doctype for d in self.doclist.get({
-			"parentfield": "delivery_note_details", "prevdoc_doctype": ["!=", ""]})]
+			"parentfield": "delivery_note_details"}) if cstr(d.prevdoc_doctype) != ""]
+			
 		if prev_doctype:
 			super(DocType, self).validate_with_previous_doc(self.tname, {
 				prev_doctype[0]: {