Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/buying/doctype/purchase_common/purchase_common.js b/buying/doctype/purchase_common/purchase_common.js
index 3b72236..a815cba 100644
--- a/buying/doctype/purchase_common/purchase_common.js
+++ b/buying/doctype/purchase_common/purchase_common.js
@@ -199,23 +199,37 @@
 }
 
 //==================== UOM ======================================================================
-cur_frm.cscript.uom = function(doc, cdt, cdn) {
+cur_frm.cscript.uom = function(doc, cdt, cdn, args) {
+	if(!args) args = {};
+	
+	// args passed can contain conversion_factor
 	var d = locals[cdt][cdn];
-	if (d.item_code && d.uom) {
-		call_back = function(doc, cdt, cdn){
-			cur_frm.cscript.calc_amount(doc, 2);
-		}
-		str_arg = {'item_code':d.item_code, 'uom':d.uom, 'stock_qty':flt(d.stock_qty), 'qty': flt(d.qty), 'conversion_rate':doc.conversion_rate, 'doc_name': doc.name}
-		// Updates Conversion Factor, Qty and Purchase Rate
-		get_server_fields('get_uom_details',JSON.stringify(str_arg), fname, doc,cdt,cdn,1, call_back);
-		// don't make mistake of calling update_stock_qty() the get_uom_details returns stock_qty as per conversion factor properly
+	$.extend(args, {
+		item_code: d.item_code,
+		uom: d.uom,
+		stock_qty: flt(d.stock_qty),
+	});
+	
+	if(d.item_code && d.uom) {
+		wn.call({
+			method: "buying.doctype.purchase_common.purchase_common.get_uom_details",
+			args: { args: args },
+			callback: function(r) {
+				d = locals[cdt][cdn];
+				$.extend(d, r.message);
+				refresh_field(cur_frm.cscript.fname);
+				cur_frm.cscript.calc_amount(doc, 2);
+			}
+		});
 	}
 }
 
 
 //==================== Conversion factor =========================================================
 cur_frm.cscript.conversion_factor = function(doc, cdt, cdn) {
-	cur_frm.cscript.uom(doc, cdt, cdn);
+	var item = locals[cdt][cdn];
+	
+	cur_frm.cscript.uom(doc, cdt, cdn, { conversion_factor: item.conversion_factor });
 }
 
 //==================== stock qty ======================================================================
diff --git a/buying/doctype/purchase_common/purchase_common.py b/buying/doctype/purchase_common/purchase_common.py
index eb8ebef..9c1187d 100644
--- a/buying/doctype/purchase_common/purchase_common.py
+++ b/buying/doctype/purchase_common/purchase_common.py
@@ -182,39 +182,6 @@
 		ret = { 'projected_qty' : bin and flt(bin[0]['projected_qty']) or 0 }
 		return ret
 
-	def get_uom_details(self, arg = ''):
-		"""fetches details on change of UOM"""
-		import json
-		arg, ret = json.loads(arg), {}
-	
-		uom = webnotes.conn.sql("""\
-			select conversion_factor
-			from `tabUOM Conversion Detail`
-			where parent = %s and uom = %s""", (arg['item_code'],arg['uom']), as_dict = 1)
-		
-		if not uom: return ret
-		
-		last_purchase_details, last_purchase_date = self.get_last_purchase_details(arg['item_code'], arg['doc_name'])
-
-		conversion_factor = flt(uom[0]['conversion_factor'])
-		conversion_rate = flt(arg['conversion_rate'])
-		purchase_ref_rate = last_purchase_details and \
-							(last_purchase_details['purchase_ref_rate'] * conversion_factor) or 0
-		purchase_rate = last_purchase_details and \
-						(last_purchase_details['purchase_rate'] * conversion_factor) or 0
-
-		ret = {
-			'conversion_factor': conversion_factor,
-			'qty': flt(arg['stock_qty']) / conversion_factor,
-			'purchase_ref_rate': purchase_ref_rate,
-			'purchase_rate': purchase_rate,
-			'import_ref_rate': purchase_ref_rate / conversion_rate,
-			'import_rate': purchase_rate / conversion_rate,
-		}
-		
-		return ret
-	
-		
 	# --- Last Purchase Rate related methods ---
 	
 	def update_last_purchase_rate(self, obj, is_submit):
@@ -683,3 +650,27 @@
 			if d.prevdoc_doctype and d.prevdoc_docname:
 				dt = sql("select transaction_date from `tab%s` where name = '%s'" % (d.prevdoc_doctype, d.prevdoc_docname))
 				d.prevdoc_date = dt and dt[0][0].strftime('%Y-%m-%d') or ''
+
+@webnotes.whitelist()
+def get_uom_details(args=None):
+	"""fetches details on change of UOM"""
+	if not args:
+		return {}
+		
+	if isinstance(args, basestring):
+		import json
+		args = json.loads(args)
+
+	uom = webnotes.conn.sql("""select conversion_factor
+		from `tabUOM Conversion Detail` where parent = %s and uom = %s""", 
+		(args['item_code'], args['uom']), as_dict=1)
+
+	if not uom: return {}
+
+	conversion_factor = args.get("conversion_factor") or \
+		flt(uom[0]["conversion_factor"])
+	
+	return {
+		"conversion_factor": conversion_factor,
+		"qty": flt(args["stock_qty"]) / conversion_factor,
+	}
\ No newline at end of file
diff --git a/buying/doctype/purchase_order/purchase_order.py b/buying/doctype/purchase_order/purchase_order.py
index 4497bcd..e52499c 100644
--- a/buying/doctype/purchase_order/purchase_order.py
+++ b/buying/doctype/purchase_order/purchase_order.py
@@ -69,10 +69,6 @@
 
 
 
-	# Get UOM Details
-	def get_uom_details(self, arg = ''):
-		return get_obj('Purchase Common').get_uom_details(arg)
-
 	# get available qty at warehouse
 	def get_bin_details(self, arg = ''):
 		return get_obj(dt='Purchase Common').get_bin_details(arg)
diff --git a/buying/doctype/purchase_order/purchase_order_list.js b/buying/doctype/purchase_order/purchase_order_list.js
index 69f97f5..762c635 100644
--- a/buying/doctype/purchase_order/purchase_order_list.js
+++ b/buying/doctype/purchase_order/purchase_order_list.js
@@ -27,7 +27,7 @@
 			},
 			css: {'text-align':'right'}
 		},
-		{width: '8%', content: 'per_received', type:'bar-graph', label:'Delivered'},
+		{width: '8%', content: 'per_received', type:'bar-graph', label:'Received'},
 		{width: '8%', content: 'per_billed', type:'bar-graph', label:'Billed'},
 		{width: '12%', content:'transaction_date',
 			css: {'text-align': 'right', 'color':'#777'},
diff --git a/buying/doctype/purchase_request/purchase_request.py b/buying/doctype/purchase_request/purchase_request.py
index 79c7400..7d0e08e 100644
--- a/buying/doctype/purchase_request/purchase_request.py
+++ b/buying/doctype/purchase_request/purchase_request.py
@@ -121,11 +121,6 @@
 							doc.fields[r] = ret[r]
 
 
-	# Get UOM Details
-	# ---------------------------------
-	def get_uom_details(self, arg = ''):
-		return get_obj(dt='Purchase Common').get_uom_details(arg)
-
 	# GET TERMS & CONDITIONS
 	#-----------------------------
 	def get_tc_details(self):
@@ -219,4 +214,4 @@
 		self.update_bin(is_submit = 0, is_stopped = (cstr(self.doc.status) == 'Stopped') and 1 or 0)
 		
 		# Step 5:=> Set Status
-		webnotes.conn.set(self.doc,'status','Cancelled')
+		webnotes.conn.set(self.doc,'status','Cancelled')
\ No newline at end of file
diff --git a/controllers/tax_controller.py b/controllers/tax_controller.py
index 7aa8e23..d70ba3e 100644
--- a/controllers/tax_controller.py
+++ b/controllers/tax_controller.py
@@ -140,7 +140,7 @@
 		self.doc.net_total = flt(self.doc.net_total, self.precision.main.net_total)
 		self.doc.fields[self.fmap.net_total_print] = \
 			flt(self.doc.fields.get(self.fmap.net_total_print),
-			self.precision.main[self.fmap.net_total_print])
+			self.precision.main.get(self.fmap.net_total_print))
 			
 	def calculate_taxes(self):
 		for item in self.item_doclist:
diff --git a/stock/doctype/purchase_receipt/purchase_receipt.py b/stock/doctype/purchase_receipt/purchase_receipt.py
index 04ad4dc..9e23c27 100644
--- a/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -64,10 +64,6 @@
 							doc.fields[r] = ret[r]
 
 
-	# Get UOM Details
-	def get_uom_details(self, arg = ''):
-		return get_obj(dt='Purchase Common').get_uom_details(arg)
-
 	# GET TERMS & CONDITIONS
 	# =====================================================================================
 	def get_tc_details(self):