Merge branch 'master' into edge
diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.py b/accounts/doctype/purchase_invoice/purchase_invoice.py
index 50d5d43..c53b6d9 100644
--- a/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -464,15 +464,17 @@
 					# if auto inventory accounting enabled and stock item, 
 					# then do stock related gl entries
 					# expense will be booked in sales invoice
-					
 					stock_item_and_auto_inventory_accounting = True
 					
+					valuation_amt = (flt(item.amount, self.precision.item.amount) + 
+						flt(item.item_tax_amount, self.precision.item.item_tax_amount) + 
+						flt(item.rm_supp_cost, self.precision.item.rm_supp_cost))
+					
 					gl_entries.append(
 						self.get_gl_dict({
 							"account": stock_account,
 							"against": self.doc.credit_to,
-							"debit": flt(item.valuation_rate) * flt(item.conversion_factor) \
-								*  flt(item.qty),
+							"debit": valuation_amt,
 							"remarks": self.doc.remarks or "Accounting Entry for Stock"
 						})
 					)
diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py
index b643007..d18b967 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/accounts/doctype/sales_invoice/sales_invoice.py
@@ -191,11 +191,11 @@
 						self.doc.fields[fieldname] = pos.get(fieldname)
 
 			# set pos values in items
-			for doc in self.doclist.get({"parentfield": "entries"}):
-				if doc.fields.get('item_code'):
-					for fieldname, val in self.apply_pos_settings(doc.fields).items():
-						if (not for_validate) or (for_validate and not self.doc.fields.get(fieldname)):
-							doc.fields[fieldname] = val
+			for item in self.doclist.get({"parentfield": "entries"}):
+				if item.fields.get('item_code'):
+					for fieldname, val in self.apply_pos_settings(item.fields).items():
+						if (not for_validate) or (for_validate and not item.fields.get(fieldname)):
+							item.fields[fieldname] = val
 
 			# fetch terms	
 			if self.doc.tc_name and not self.doc.terms:
diff --git a/controllers/buying_controller.py b/controllers/buying_controller.py
index 9e181bc..28d2db6 100644
--- a/controllers/buying_controller.py
+++ b/controllers/buying_controller.py
@@ -367,9 +367,13 @@
 			if d.item_code and d.qty:
 				# if no item code, which is sometimes the case in purchase invoice, 
 				# then it is not possible to track valuation against it
-				d.valuation_rate = (flt(d.purchase_rate or d.rate)
-					+ (flt(d.item_tax_amount) + flt(d.rm_supp_cost)) / flt(d.qty)
-					) / flt(d.conversion_factor)
+				d.valuation_rate = flt((flt(d.purchase_rate, self.precision.item.purchase_rate) or 
+					flt(d.rate, self.precision.item.rate) + 
+					(flt(d.item_tax_amount, self.precision.item.item_tax_amount) + 
+					flt(d.rm_supp_cost, self.precision.item.rm_supp_cost)) / 
+					flt(d.qty, self.precision.item.qty)) / 
+					flt(d.conversion_factor, self.precision.item.conversion_factor), 
+					self.precision.item.valuation_rate)					
 			else:
 				d.valuation_rate = 0.0
 				
diff --git a/manufacturing/doctype/bom/bom.py b/manufacturing/doctype/bom/bom.py
index 5f42f4d..5a1d47f 100644
--- a/manufacturing/doctype/bom/bom.py
+++ b/manufacturing/doctype/bom/bom.py
@@ -34,7 +34,8 @@
 		last_name = sql("""select max(name) from `tabBOM` 
 			where name like "BOM/%s/%%" """ % cstr(self.doc.item).replace('"', '\\"'))
 		if last_name:
-			idx = cint(cstr(last_name[0][0]).split('/')[-1]) + 1
+			idx = cint(cstr(last_name[0][0]).split('/')[-1].split('-')[0]) + 1
+			
 		else:
 			idx = 1
 		self.doc.name = 'BOM/' + self.doc.item + ('/%.3i' % idx)