Merge branch 'latest' of github.com:webnotes/erpnext into latest
diff --git a/erpnext/selling/doctype/sales_common/sales_common.js b/erpnext/selling/doctype/sales_common/sales_common.js
index ebe2836..603a7b2 100644
--- a/erpnext/selling/doctype/sales_common/sales_common.js
+++ b/erpnext/selling/doctype/sales_common/sales_common.js
@@ -310,34 +310,21 @@
       
 			//enter item_wise_tax_detail i.e. tax rate on each item
 			var item_wise_tax_detail = cur_frm.cscript.get_item_wise_tax_detail(doc, rate, cl, i, tax, t);
-      
-			// this is calculation part for all types
-			if(tax[t].charge_type != "Actual") {
-				tax[t].item_wise_tax_detail += item_wise_tax_detail;
-			}
-			//console.log(tax[t]);
-			//console.log(tax_amount);
-			//console.log(total);
-
-			tax[t].total_amount = flt(tax_amount.toFixed(2));     //stores actual tax amount in virtual field
+			if(tax[t].charge_type != "Actual") tax[t].item_wise_tax_detail += item_wise_tax_detail;
+			tax[t].total_amount = flt(tax_amount);     //stores actual tax amount in virtual field
 			tax[t].total_tax_amount = flt(prev_total);      //stores total amount in virtual field
 			tax[t].tax_amount += flt(tax_amount);       
-
-			//var total_amount = flt(tax_amount.toFixed(2));
-			//total_tax_amount = flt(tax[t].total_tax_amount) + flt(total_amount);
-			
-			set_multiple('RV Tax Detail', tax[t].name, { 'item_wise_tax_detail':tax[t].item_wise_tax_detail, 'amount':flt(tax[t].total_amount), 'total':flt((flt(total)+flt(tax[t].tax_amount)).toFixed(2))/*_tax_amount)*/}, other_fname);
-			
-			//console.log("Total: " + (flt(total)+flt(tax[t].tax_amount)));
-			
+			var total_amount = flt(tax[t].tax_amount);
+			total_tax_amount = flt(tax[t].total_tax_amount) + flt(total_amount);
+			set_multiple('RV Tax Detail', tax[t].name, { 'item_wise_tax_detail':tax[t].item_wise_tax_detail, 'amount':flt(total_amount.toFixed(2)), 'total':(flt(total)+flt(tax[t].tax_amount)).toFixed(2)/*_tax_amount)*/}, other_fname);
 			prev_total += flt(tax[t].total_amount);   // for previous row total
-			total += flt(tax_amount);     // for adding total to previous amount
+			total += flt(tax[t].tax_amount);     // for adding total to previous amount
 
 			if(tax[t].charge_type == 'Actual')
 				$td(otc,i+1,t+1).innerHTML = fmt_money(tax[t].total_amount);
 			else
 				$td(otc,i+1,t+1).innerHTML = '('+fmt_money(rate) + '%) ' +fmt_money(tax[t].total_amount);
-      
+
 		}
 	}
 }
diff --git a/erpnext/selling/doctype/sales_common/sales_common.py b/erpnext/selling/doctype/sales_common/sales_common.py
index 47a3483..b2b0c14 100644
--- a/erpnext/selling/doctype/sales_common/sales_common.py
+++ b/erpnext/selling/doctype/sales_common/sales_common.py
@@ -593,7 +593,9 @@
 				
 				If you want to increase your overflow tolerance, please increase tolerance %% in Global Defaults or Item master. 
 				
-				Or, you must reduce the %(compare_ref_field)s by %(reduce_by)s""" % item, raise_exception=1)
+				Or, you must reduce the %(compare_ref_field)s by %(reduce_by)s
+				
+				Also, please check if the order item has already been billed in the Sales Order""" % item, raise_exception=1)
 
 	def validate_qty(self, args, no_tolerance=None):
 		"""
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index 944fa8a..0572592 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -92,6 +92,17 @@
         raise Exception
 
 
+  def validate_challan_no(self):
+    "Validate if same challan no exists for same supplier in a purchase receipt"
+    if self.doc.challan_no:
+      exists = webnotes.conn.sql("""
+	    SELECT name FROM `tabPurchase Receipt`
+	    WHERE name!=%s AND supplier=%s AND challan_no=%s""", (self.doc.name, self.doc.supplier, self.doc.challan_no))
+      if exists:
+	    webnotes.msgprint("Another Purchase Receipt using the same Challan No. already exists.\
+		  Please enter a valid Challan No.", raise_exception=1)
+
+
   # update valuation rate
   def update_valuation_rate(self):
     total_b_cost = flt(self.doc.buying_cost_transport) + flt(self.doc.buying_cost_taxes) + flt(self.doc.buying_cost_other)
@@ -127,6 +138,7 @@
     self.validate_accepted_rejected_qty()
     self.validate_inspection()             # Validate Inspection
     get_obj('Stock Ledger').validate_serial_no(self, 'purchase_receipt_details')
+    self.validate_challan_no()
 
     pc_obj = get_obj(dt='Purchase Common')
     pc_obj.validate_for_items(self)