Merge pull request #972 from akhileshdarjee/master

[fix] [minor] conversion rater
diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.py b/accounts/doctype/purchase_invoice/purchase_invoice.py
index 3c3bcb7..c1e92b9 100644
--- a/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -359,6 +359,7 @@
 		# item gl entries
 		stock_item_and_auto_accounting_for_stock = False
 		stock_items = self.get_stock_items()
+		rounding_diff = 0.0
 		for item in self.doclist.get({"parentfield": "entries"}):
 			if auto_accounting_for_stock and item.item_code in stock_items:
 				if flt(item.valuation_rate):
@@ -367,9 +368,13 @@
 					# expense will be booked in sales invoice
 					stock_item_and_auto_accounting_for_stock = True
 					
-					valuation_amt = (flt(item.amount, self.precision("amount", item)) + 
+					valuation_amt = flt(flt(item.valuation_rate) * flt(item.qty) * \
+						flt(item.conversion_factor), self.precision("valuation_rate", item))
+					
+					rounding_diff += (flt(item.amount, self.precision("amount", item)) + 
 						flt(item.item_tax_amount, self.precision("item_tax_amount", item)) + 
-						flt(item.rm_supp_cost, self.precision("rm_supp_cost", item)))
+						flt(item.rm_supp_cost, self.precision("rm_supp_cost", item)) - 
+						valuation_amt)
 					
 					gl_entries.append(
 						self.get_gl_dict({
@@ -398,6 +403,12 @@
 			expenses_included_in_valuation = \
 				self.get_company_default("expenses_included_in_valuation")
 				
+			if rounding_diff:
+				import operator
+				cost_center_with_max_value = max(valuation_tax.iteritems(), 
+					key=operator.itemgetter(1))[0]
+				valuation_tax[cost_center_with_max_value] -= flt(rounding_diff)
+			
 			for cost_center, amount in valuation_tax.items():
 				gl_entries.append(
 					self.get_gl_dict({
diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py
index daf01ab..3ae74e4 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/accounts/doctype/sales_invoice/sales_invoice.py
@@ -52,7 +52,6 @@
 		sales_com_obj = get_obj('Sales Common')
 		sales_com_obj.check_stop_sales_order(self)
 		sales_com_obj.check_active_sales_items(self)
-		sales_com_obj.check_conversion_rate(self)
 		sales_com_obj.validate_max_discount(self, 'entries')
 		self.validate_customer_account()
 		self.validate_debit_acc()
diff --git a/install_erpnext.py b/install_erpnext.py
index 79f79d7..7f3b8c3 100644
--- a/install_erpnext.py
+++ b/install_erpnext.py
@@ -332,9 +332,11 @@
 
 			stdout.seek(0)
 			out = stdout.read()
+			if out: out = out.decode('utf-8')
 
 			stderr.seek(0)
 			err = stderr.read()
+			if err: err = err.decode('utf-8')
 
 	if err and any((kw in err.lower() for kw in ["traceback", "error", "exception"])):
 		print out
@@ -345,4 +347,4 @@
 	return out
 
 if __name__ == "__main__":
-	install()
\ No newline at end of file
+	install()
diff --git a/public/js/transaction.js b/public/js/transaction.js
index c1b8370..1c8f681 100644
--- a/public/js/transaction.js
+++ b/public/js/transaction.js
@@ -175,8 +175,7 @@
 			this.frm.doc.plc_conversion_rate !== this.frm.doc.conversion_rate) {
 				this.frm.set_value("plc_conversion_rate", this.frm.doc.conversion_rate);
 		}
-
-		this.calculate_taxes_and_totals();
+		if(flt(this.frm.doc.conversion_rate)>0.0) this.calculate_taxes_and_totals();
 	},
 	
 	get_price_list_currency: function(buying_or_selling) {
diff --git a/selling/doctype/quotation/quotation.py b/selling/doctype/quotation/quotation.py
index 8eb3654..8209548 100644
--- a/selling/doctype/quotation/quotation.py
+++ b/selling/doctype/quotation/quotation.py
@@ -111,8 +111,6 @@
 		sales_com_obj = get_obj('Sales Common')
 		sales_com_obj.check_active_sales_items(self)
 		sales_com_obj.validate_max_discount(self,'quotation_details')
-		sales_com_obj.check_conversion_rate(self)
-		
 
 	def on_update(self):
 		# Set Quotation Status
diff --git a/selling/doctype/sales_common/sales_common.py b/selling/doctype/sales_common/sales_common.py
index 8271c82..ad626da 100644
--- a/selling/doctype/sales_common/sales_common.py
+++ b/selling/doctype/sales_common/sales_common.py
@@ -74,21 +74,6 @@
 				msgprint("You cannot give more than " + cstr(discount[0]['max_discount']) + " % discount on Item Code : "+cstr(d.item_code))
 				raise Exception
 			
-	# Check Conversion Rate (i.e. it will not allow conversion rate to be 1 for Currency other than default currency set in Global Defaults)
-	# ===========================================================================
-	def check_conversion_rate(self, obj):
-		default_currency = get_company_currency(obj.doc.company)
-		if not default_currency:
-			msgprint('Message: Please enter default currency in Company Master')
-			raise Exception		
-		if (obj.doc.currency == default_currency and flt(obj.doc.conversion_rate) != 1.00) or not obj.doc.conversion_rate or (obj.doc.currency != default_currency and flt(obj.doc.conversion_rate) == 1.00):
-			msgprint("Please Enter Appropriate Conversion Rate for Customer's Currency to Base Currency (%s --> %s)" % (obj.doc.currency, default_currency), raise_exception = 1)
-	
-		if (obj.doc.price_list_currency == default_currency and flt(obj.doc.plc_conversion_rate) != 1.00) or not obj.doc.plc_conversion_rate or (obj.doc.price_list_currency != default_currency and flt(obj.doc.plc_conversion_rate) == 1.00):
-			msgprint("Please Enter Appropriate Conversion Rate for Price List Currency to Base Currency (%s --> %s)" % (obj.doc.price_list_currency, default_currency), raise_exception = 1)
-	
-
-
 	# Get Tax rate if account type is TAX
 	# =========================================================================
 	def get_rate(self, arg):
diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py
index 435a976..66b487e 100644
--- a/selling/doctype/sales_order/sales_order.py
+++ b/selling/doctype/sales_order/sales_order.py
@@ -130,7 +130,7 @@
 		self.validate_warehouse()
 		sales_com_obj = get_obj(dt = 'Sales Common')
 		sales_com_obj.check_active_sales_items(self)
-		sales_com_obj.check_conversion_rate(self)
+		
 
 		sales_com_obj.validate_max_discount(self,'sales_order_details')
 		self.doclist = sales_com_obj.make_packing_list(self,'sales_order_details')
diff --git a/stock/doctype/delivery_note/delivery_note.py b/stock/doctype/delivery_note/delivery_note.py
index 2d1a3be..eb2b204 100644
--- a/stock/doctype/delivery_note/delivery_note.py
+++ b/stock/doctype/delivery_note/delivery_note.py
@@ -95,7 +95,7 @@
 		self.validate_uom_is_integer("stock_uom", "qty")
 		
 		sales_com_obj.validate_max_discount(self, 'delivery_note_details')
-		sales_com_obj.check_conversion_rate(self)
+		
 
 		# Set actual qty for each item in selected warehouse
 		self.update_current_stock()