diff --git a/erpnext/accounts/doctype/pos_setting/pos_setting.py b/erpnext/accounts/doctype/pos_setting/pos_setting.py
index a5a11e9..3198859 100755
--- a/erpnext/accounts/doctype/pos_setting/pos_setting.py
+++ b/erpnext/accounts/doctype/pos_setting/pos_setting.py
@@ -61,4 +61,4 @@
 				webnotes.defaults.set_global_default("is_pos", 1)
 
 	def on_trash(self):
-		self.on_update()
+		self.on_update()
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.txt b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.txt
index 7c249d7..1fa36f3 100755
--- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.txt
+++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-05-22 12:43:10", 
   "docstatus": 0, 
-  "modified": "2014-02-03 12:30:39", 
+  "modified": "2014-02-07 16:39:12", 
   "modified_by": "Administrator", 
   "owner": "Administrator"
  }, 
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index f57f6f0..ce0b59d 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -177,7 +177,7 @@
 		if cint(self.doc.is_pos) != 1:
 			return
 		
-		from erpnext.selling.utils import get_pos_settings, apply_pos_settings	
+		from erpnext.selling.utils import get_pos_settings_item_details, get_pos_settings	
 		pos = get_pos_settings(self.doc.company)
 			
 		if pos:
@@ -196,9 +196,9 @@
 			# set pos values in items
 			for item in self.doclist.get({"parentfield": "entries"}):
 				if item.fields.get('item_code'):
-					for fieldname, val in apply_pos_settings(pos, item.fields).items():
-						if (not for_validate) or (for_validate and not item.fields.get(fieldname)):
-							item.fields[fieldname] = val
+					for fname, val in get_pos_settings_item_details(pos, item.fields, pos).items():
+						if (not for_validate) or (for_validate and not item.fields.get(fname)):
+							item.fields[fname] = val
 
 			# fetch terms	
 			if self.doc.tc_name and not self.doc.terms:
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.py b/erpnext/buying/doctype/purchase_common/purchase_common.py
index 2ec67fd..72d86e9 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.py
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.py
@@ -8,7 +8,7 @@
 from webnotes.model.utils import getlist
 from webnotes import msgprint, _
 
-from erpnext.buying.utils import get_last_purchase_details
+from erpnext.stock.doctype.item.item import get_last_purchase_details
 from erpnext.controllers.buying_controller import BuyingController
 
 class DocType(BuyingController):
diff --git a/erpnext/buying/utils.py b/erpnext/buying/utils.py
deleted file mode 100644
index d686b71..0000000
--- a/erpnext/buying/utils.py
+++ /dev/null
@@ -1,204 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import webnotes
-from webnotes import msgprint, _, throw
-from webnotes.utils import getdate, flt, add_days, cstr
-import json
-
-@webnotes.whitelist()
-def get_item_details(args):
-	"""
-		args = {
-			"doctype": "",
-			"docname": "",
-			"item_code": "",
-			"warehouse": None,
-			"supplier": None,
-			"transaction_date": None,
-			"conversion_rate": 1.0,
-			"buying_price_list": None,
-			"price_list_currency": None,
-			"plc_conversion_rate": 1.0,
-			"is_subcontracted": "Yes" / "No"
-		}
-	"""
-	if isinstance(args, basestring):
-		args = json.loads(args)
-		
-	args = webnotes._dict(args)
-	
-	item_bean = webnotes.bean("Item", args.item_code)
-	item = item_bean.doc
-	
-	_validate_item_details(args, item)
-	
-	out = _get_basic_details(args, item_bean)
-	
-	out.supplier_part_no = _get_supplier_part_no(args, item_bean)
-	
-	if not out.warehouse:
-		out.warehouse = item_bean.doc.default_warehouse
-	
-	if out.warehouse:
-		out.projected_qty = get_projected_qty(item.name, out.warehouse)
-	
-	if args.transaction_date and item.lead_time_days:
-		out.schedule_date = out.lead_time_date = add_days(args.transaction_date,
-			item.lead_time_days)
-			
-	meta = webnotes.get_doctype(args.doctype)
-	
-	if meta.get_field("currency"):
-		out.purchase_ref_rate = out.discount_rate = out.purchase_rate = \
-			out.import_ref_rate = out.import_rate = 0.0
-		out.update(_get_price_list_rate(args, item_bean, meta))
-	
-	if args.doctype == "Material Request":
-		out.min_order_qty = flt(item.min_order_qty)
-	
-	return out
-	
-def _get_basic_details(args, item_bean):
-	item = item_bean.doc
-	
-	out = webnotes._dict({
-		"description": item.description_html or item.description,
-		"qty": 1.0,
-		"uom": item.stock_uom,
-		"conversion_factor": 1.0,
-		"warehouse": args.warehouse or item.default_warehouse,
-		"item_tax_rate": json.dumps(dict(([d.tax_type, d.tax_rate] for d in 
-			item_bean.doclist.get({"parentfield": "item_tax"})))),
-		"batch_no": None,
-		"expense_head": item.purchase_account \
-			or webnotes.conn.get_value("Company", args.company, "default_expense_account"),
-		"cost_center": item.cost_center
-	})
-	
-	for fieldname in ("item_name", "item_group", "brand", "stock_uom"):
-		out[fieldname] = item.fields.get(fieldname)
-	
-	return out
-	
-def _get_price_list_rate(args, item_bean, meta):
-	from erpnext.utilities.transaction_base import validate_currency
-	item = item_bean.doc
-	out = webnotes._dict()
-	
-	# try fetching from price list
-	if args.buying_price_list and args.price_list_currency:
-		price_list_rate = webnotes.conn.sql("""select ip.ref_rate from 
-			`tabItem Price` ip, `tabPrice List` pl 
-			where ip.price_list=pl.name and ip.price_list=%s and 
-			ip.item_code=%s and ip.buying=1 and pl.enabled=1""", 
-			(args.buying_price_list, args.item_code), as_dict=1)
-		
-		if price_list_rate:
-			validate_currency(args, item_bean.doc, meta)
-				
-			out.import_ref_rate = flt(price_list_rate[0].ref_rate) * \
-				flt(args.plc_conversion_rate) / flt(args.conversion_rate)
-		
-	# if not found, fetch from last purchase transaction
-	if not out.import_ref_rate:
-		last_purchase = get_last_purchase_details(item.name, args.docname, args.conversion_rate)
-		if last_purchase:
-			out.update(last_purchase)
-	
-	if out.import_ref_rate or out.import_rate:
-		validate_currency(args, item, meta)
-	
-	return out
-	
-def _get_supplier_part_no(args, item_bean):
-	item_supplier = item_bean.doclist.get({"parentfield": "item_supplier_details",
-		"supplier": args.supplier})
-	
-	return item_supplier and item_supplier[0].supplier_part_no or None
-
-def _validate_item_details(args, item):
-	# TODO
-	# from erpnext.utilities.transaction_base import validate_item_fetch
-	# validate_item_fetch(args, item)
-	
-	# validate if purchase item or subcontracted item
-	if item.is_purchase_item != "Yes":
-		throw(_("Item") + (" %s: " % item.name) + _("not a purchase item"))
-	
-	if args.is_subcontracted == "Yes" and item.is_sub_contracted_item != "Yes":
-		throw(_("Item") + (" %s: " % item.name) + 
-			_("not a sub-contracted item.") +
-			_("Please select a sub-contracted item or do not sub-contract the transaction."))
-
-def get_last_purchase_details(item_code, doc_name=None, conversion_rate=1.0):
-	"""returns last purchase details in stock uom"""
-	# get last purchase order item details
-	last_purchase_order = webnotes.conn.sql("""\
-		select po.name, po.transaction_date, po.conversion_rate,
-			po_item.conversion_factor, po_item.purchase_ref_rate, 
-			po_item.discount_rate, po_item.purchase_rate
-		from `tabPurchase Order` po, `tabPurchase Order Item` po_item
-		where po.docstatus = 1 and po_item.item_code = %s and po.name != %s and 
-			po.name = po_item.parent
-		order by po.transaction_date desc, po.name desc
-		limit 1""", (item_code, cstr(doc_name)), as_dict=1)
-
-	# get last purchase receipt item details		
-	last_purchase_receipt = webnotes.conn.sql("""\
-		select pr.name, pr.posting_date, pr.posting_time, pr.conversion_rate,
-			pr_item.conversion_factor, pr_item.purchase_ref_rate, pr_item.discount_rate,
-			pr_item.purchase_rate
-		from `tabPurchase Receipt` pr, `tabPurchase Receipt Item` pr_item
-		where pr.docstatus = 1 and pr_item.item_code = %s and pr.name != %s and
-			pr.name = pr_item.parent
-		order by pr.posting_date desc, pr.posting_time desc, pr.name desc
-		limit 1""", (item_code, cstr(doc_name)), as_dict=1)
-
-	purchase_order_date = getdate(last_purchase_order and last_purchase_order[0].transaction_date \
-		or "1900-01-01")
-	purchase_receipt_date = getdate(last_purchase_receipt and \
-		last_purchase_receipt[0].posting_date or "1900-01-01")
-
-	if (purchase_order_date > purchase_receipt_date) or \
-			(last_purchase_order and not last_purchase_receipt):
-		# use purchase order
-		last_purchase = last_purchase_order[0]
-		purchase_date = purchase_order_date
-		
-	elif (purchase_receipt_date > purchase_order_date) or \
-			(last_purchase_receipt and not last_purchase_order):
-		# use purchase receipt
-		last_purchase = last_purchase_receipt[0]
-		purchase_date = purchase_receipt_date
-		
-	else:
-		return webnotes._dict()
-	
-	conversion_factor = flt(last_purchase.conversion_factor)
-	out = webnotes._dict({
-		"purchase_ref_rate": flt(last_purchase.purchase_ref_rate) / conversion_factor,
-		"purchase_rate": flt(last_purchase.purchase_rate) / conversion_factor,
-		"discount_rate": flt(last_purchase.discount_rate),
-		"purchase_date": purchase_date
-	})
-
-	conversion_rate = flt(conversion_rate) or 1.0
-	out.update({
-		"import_ref_rate": out.purchase_ref_rate / conversion_rate,
-		"import_rate": out.purchase_rate / conversion_rate,
-		"rate": out.purchase_rate
-	})
-	
-	return out
-	
-@webnotes.whitelist()
-def get_conversion_factor(item_code, uom):
-	return {"conversion_factor": webnotes.conn.get_value("UOM Conversion Detail",
-		{"parent": item_code, "uom": uom}, "conversion_factor")}
-		
-@webnotes.whitelist()
-def get_projected_qty(item_code, warehouse):
-	return webnotes.conn.get_value("Bin", {"item_code": item_code, 
-			"warehouse": warehouse}, "projected_qty")
\ No newline at end of file
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 2e05903..bdbf8c6 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -8,7 +8,7 @@
 from webnotes.model.code import get_obj
 from erpnext.setup.utils import get_company_currency
 from erpnext.accounts.utils import get_fiscal_year, validate_fiscal_year
-from erpnext.utilities.transaction_base import TransactionBase, validate_conversion_rate
+from erpnext.utilities.transaction_base import TransactionBase
 import json
 
 class AccountsController(TransactionBase):
@@ -149,6 +149,7 @@
 			self.doc.currency = company_currency
 			self.doc.conversion_rate = 1.0
 		else:
+			from erpnext.setup.doctype.currency.currency import validate_conversion_rate
 			validate_conversion_rate(self.doc.currency, self.doc.conversion_rate,
 				self.meta.get_label("conversion_rate"), self.doc.company)
 
diff --git a/erpnext/hooks.txt b/erpnext/hooks.txt
index 23e0c0f..433fef7 100644
--- a/erpnext/hooks.txt
+++ b/erpnext/hooks.txt
@@ -36,7 +36,7 @@
 bean_event:Stock Entry:on_submit = erpnext.stock.doctype.material_request.material_request.update_completed_qty
 bean_event:Stock Entry:on_cancel = erpnext.stock.doctype.material_request.material_request.update_completed_qty
 
-standard_queries = Customer:erpnext.selling.utils.get_customer_list
+standard_queries = Customer:erpnext.selling.doctype.customer.customer.get_customer_list
 
 # Schedulers
 # -------------------------
diff --git a/erpnext/patches/4_0/fields_to_be_renamed.py b/erpnext/patches/4_0/fields_to_be_renamed.py
new file mode 100644
index 0000000..9adba72
--- /dev/null
+++ b/erpnext/patches/4_0/fields_to_be_renamed.py
@@ -0,0 +1,107 @@
+# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import webnotes
+
+def execute():
+	rename_map = {
+		"Quotation Item": [
+			["ref_rate", "price_list_rate"], 
+			["base_ref_rate", "base_price_list_rate"],
+			["adj_rate", "discount_percentage"], 
+			["export_rate", "rate"], 
+			["basic_rate", "base_rate"], 
+			["amount", "base_amount"], 
+			["export_amount", "amount"]
+		],
+		
+		"Sales Order Item": [
+			["ref_rate", "price_list_rate"], 
+			["base_ref_rate", "base_price_list_rate"],
+			["adj_rate", "discount_percentage"], 
+			["export_rate", "rate"], 
+			["basic_rate", "base_rate"], 
+			["amount", "base_amount"], 
+			["export_amount", "amount"], 
+			["reserved_warehouse", "warehouse"]
+		],
+		
+		"Delivery Note Item": [
+			["ref_rate", "price_list_rate"], 
+			["base_ref_rate", "base_price_list_rate"], 
+			["adj_rate", "discount_percentage"], 
+			["export_rate", "rate"], 
+			["basic_rate", "base_rate"], 
+			["amount", "base_amount"], 
+			["export_amount", "amount"]
+		],
+
+		"Sales Invoice Item": [
+			["ref_rate", "price_list_rate"], 
+			["base_ref_rate", "base_price_list_rate"], 
+			["adj_rate", "discount_percentage"], 
+			["export_rate", "rate"], 
+			["basic_rate", "base_rate"], 
+			["amount", "base_amount"], 
+			["export_amount", "amount"]
+		],
+
+		"Supplier Quotation Item": [
+			["import_ref_rate", "price_list_rate"], 
+			["purchase_ref_rate", "base_price_list_rate"], 
+			["discount_rate", "discount_percentage"], 
+			["import_rate", "rate"], 
+			["purchase_rate", "base_rate"], 
+			["amount", "base_amount"], 
+			["import_amount", "amount"]
+		],
+	
+		"Purchase Order Item": [
+			["import_ref_rate", "price_list_rate"], 
+			["purchase_ref_rate", "base_price_list_rate"], 
+			["discount_rate", "discount_percentage"], 
+			["import_rate", "rate"], 
+			["purchase_rate", "base_rate"], 
+			["amount", "base_amount"], 
+			["import_amount", "amount"]
+		],
+	
+		"Purchase Receipt Item": [
+			["import_ref_rate", "price_list_rate"], 
+			["purchase_ref_rate", "base_price_list_rate"], 
+			["discount_rate", "discount_percentage"], 
+			["import_rate", "rate"], 
+			["purchase_rate", "base_rate"], 
+			["amount", "base_amount"], 
+			["import_amount", "amount"]
+		],
+		
+		"Purchase Invoice Item": [
+			["import_ref_rate", "price_list_rate"], 
+			["purchase_ref_rate", "base_price_list_rate"], 
+			["discount_rate", "discount_percentage"], 
+			["import_rate", "rate"], 
+			["rate", "base_rate"], 
+			["amount", "base_amount"], 
+			["import_amount", "amount"], 
+			["expense_head", "expense_account"]
+		],
+		
+		"Item": [
+			["purchase_account", "expense_account"],
+			["default_sales_cost_center", "selling_cost_center"],
+			["cost_center", "buying_cost_center"]
+		],
+	}
+
+	from webnotes.model import rename_field
+	
+	for dt, field_list in rename_map.items():
+		# reload doctype
+		webnotes.reload_doc(webnotes.conn.get_value("DocType", dt, "module").lower(), 
+			"doctype", dt.lower().replace(" ", "_"))
+		
+		# rename field
+		for field in field_list:
+			rename_field(dt, field[0], field[1])
\ No newline at end of file
diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py
index df17689..d574fe7 100644
--- a/erpnext/selling/doctype/customer/customer.py
+++ b/erpnext/selling/doctype/customer/customer.py
@@ -160,3 +160,18 @@
 	out["total_unpaid"] = billing[0][1]
 	
 	return out
+
+
+def get_customer_list(doctype, txt, searchfield, start, page_len, filters):
+	if webnotes.conn.get_default("cust_master_name") == "Customer Name":
+		fields = ["name", "customer_group", "territory"]
+	else:
+		fields = ["name", "customer_name", "customer_group", "territory"]
+		
+	return webnotes.conn.sql("""select %s from `tabCustomer` where docstatus < 2 
+		and (%s like %s or customer_name like %s) order by 
+		case when name like %s then 0 else 1 end,
+		case when customer_name like %s then 0 else 1 end,
+		name, customer_name limit %s, %s""" % 
+		(", ".join(fields), searchfield, "%s", "%s", "%s", "%s", "%s", "%s"), 
+		("%%%s%%" % txt, "%%%s%%" % txt, "%%%s%%" % txt, "%%%s%%" % txt, start, page_len))
\ No newline at end of file
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index 718d8a6..bfc1ad1 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -127,7 +127,7 @@
 				cur_frm.fields_dict[me.frm.cscript.fname].grid.grid_rows[item.idx - 1].remove();
 			} else {
 				return this.frm.call({
-					method: "erpnext.selling.utils.get_item_details",
+					method: "erpnext.stock.get_item_details.get_item_details",
 					child: item,
 					args: {
 						args: {
@@ -140,12 +140,13 @@
 							customer: me.frm.doc.customer,
 							currency: me.frm.doc.currency,
 							conversion_rate: me.frm.doc.conversion_rate,
-							selling_price_list: me.frm.doc.selling_price_list,
+							price_list: me.frm.doc.selling_price_list,
 							price_list_currency: me.frm.doc.price_list_currency,
 							plc_conversion_rate: me.frm.doc.plc_conversion_rate,
 							company: me.frm.doc.company,
 							order_type: me.frm.doc.order_type,
 							is_pos: cint(me.frm.doc.is_pos),
+							"transaction_type": "selling"
 						}
 					},
 					callback: function(r) {
diff --git a/erpnext/selling/utils.py b/erpnext/selling/utils.py
deleted file mode 100644
index dbb691d..0000000
--- a/erpnext/selling/utils.py
+++ /dev/null
@@ -1,217 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import webnotes
-from webnotes import _, throw
-from webnotes.utils import flt, cint
-import json
-
-def get_customer_list(doctype, txt, searchfield, start, page_len, filters):
-	if webnotes.conn.get_default("cust_master_name") == "Customer Name":
-		fields = ["name", "customer_group", "territory"]
-	else:
-		fields = ["name", "customer_name", "customer_group", "territory"]
-		
-	return webnotes.conn.sql("""select %s from `tabCustomer` where docstatus < 2 
-		and (%s like %s or customer_name like %s) order by 
-		case when name like %s then 0 else 1 end,
-		case when customer_name like %s then 0 else 1 end,
-		name, customer_name limit %s, %s""" % 
-		(", ".join(fields), searchfield, "%s", "%s", "%s", "%s", "%s", "%s"), 
-		("%%%s%%" % txt, "%%%s%%" % txt, "%%%s%%" % txt, "%%%s%%" % txt, start, page_len))
-		
-@webnotes.whitelist()
-def get_item_details(args):
-	"""
-		args = {
-			"item_code": "",
-			"warehouse": None,
-			"customer": "",
-			"conversion_rate": 1.0,
-			"selling_price_list": None,
-			"price_list_currency": None,
-			"plc_conversion_rate": 1.0
-		}
-	"""
-
-	if isinstance(args, basestring):
-		args = json.loads(args)
-	args = webnotes._dict(args)
-	
-	if args.barcode:
-		args.item_code = _get_item_code(barcode=args.barcode)
-	elif not args.item_code and args.serial_no:
-		args.item_code = _get_item_code(serial_no=args.serial_no)
-	
-	item_bean = webnotes.bean("Item", args.item_code)
-	
-	_validate_item_details(args, item_bean.doc)
-	
-	meta = webnotes.get_doctype(args.doctype)
-
-	# hack! for Sales Order Item
-	warehouse_fieldname = "warehouse"
-	if meta.get_field("reserved_warehouse", parentfield=args.parentfield):
-		warehouse_fieldname = "reserved_warehouse"
-	
-	out = _get_basic_details(args, item_bean, warehouse_fieldname)
-	
-	if meta.get_field("currency"):
-		out.base_ref_rate = out.basic_rate = out.ref_rate = out.export_rate = 0.0
-		
-		if args.selling_price_list and args.price_list_currency:
-			out.update(_get_price_list_rate(args, item_bean, meta))
-		
-	out.update(_get_item_discount(out.item_group, args.customer))
-	
-	if out.get(warehouse_fieldname):
-		out.update(get_available_qty(args.item_code, out.get(warehouse_fieldname)))
-	
-	out.customer_item_code = _get_customer_item_code(args, item_bean)
-	
-	if cint(args.is_pos):
-		pos_settings = get_pos_settings(args.company)
-		if pos_settings:
-			out.update(apply_pos_settings(pos_settings, out))
-		
-	if args.doctype in ("Sales Invoice", "Delivery Note"):
-		if item_bean.doc.has_serial_no == "Yes" and not args.serial_no:
-			out.serial_no = _get_serial_nos_by_fifo(args, item_bean)
-		
-	return out
-
-def _get_serial_nos_by_fifo(args, item_bean):
-	return "\n".join(webnotes.conn.sql_list("""select name from `tabSerial No` 
-		where item_code=%(item_code)s and warehouse=%(warehouse)s and status='Available' 
-		order by timestamp(purchase_date, purchase_time) asc limit %(qty)s""", {
-			"item_code": args.item_code,
-			"warehouse": args.warehouse,
-			"qty": cint(args.qty)
-		}))
-
-def _get_item_code(barcode=None, serial_no=None):
-	if barcode:
-		input_type = "Barcode"
-		item_code = webnotes.conn.sql_list("""select name from `tabItem` where barcode=%s""", barcode)
-	elif serial_no:
-		input_type = "Serial No"
-		item_code = webnotes.conn.sql_list("""select item_code from `tabSerial No` 
-			where name=%s""", serial_no)
-			
-	if not item_code:
-		throw(_("No Item found with ") + input_type + ": %s" % (barcode or serial_no))
-	
-	return item_code[0]
-	
-def _validate_item_details(args, item):
-	# TODO
-	# from erpnext.utilities.transaction_base import validate_item_fetch
-	# validate_item_fetch(args, item)
-	
-	# validate if sales item or service item
-	if args.order_type == "Maintenance":
-		if item.is_service_item != "Yes":
-			throw(_("Item") + (" %s: " % item.name) + 
-				_("not a service item.") +
-				_("Please select a service item or change the order type to Sales."))
-		
-	elif item.is_sales_item != "Yes":
-		throw(_("Item") + (" %s: " % item.name) + _("not a sales item"))
-			
-def _get_basic_details(args, item_bean, warehouse_fieldname):
-	item = item_bean.doc
-	
-	from webnotes.defaults import get_user_default_as_list
-	user_default_warehouse_list = get_user_default_as_list('warehouse')
-	user_default_warehouse = user_default_warehouse_list[0] \
-		if len(user_default_warehouse_list)==1 else ""
-	
-	out = webnotes._dict({
-			"item_code": item.name,
-			"description": item.description_html or item.description,
-			warehouse_fieldname: user_default_warehouse or item.default_warehouse \
-				or args.get(warehouse_fieldname),
-			"income_account": item.default_income_account or args.income_account \
-				or webnotes.conn.get_value("Company", args.company, "default_income_account"),
-			"expense_account": item.purchase_account or args.expense_account \
-				or webnotes.conn.get_value("Company", args.company, "default_expense_account"),
-			"cost_center": item.default_sales_cost_center or args.cost_center,
-			"qty": 1.0,
-			"export_amount": 0.0,
-			"amount": 0.0,
-			"batch_no": None,
-			"item_tax_rate": json.dumps(dict(([d.tax_type, d.tax_rate] for d in 
-				item_bean.doclist.get({"parentfield": "item_tax"})))),
-		})
-	
-	for fieldname in ("item_name", "item_group", "barcode", "brand", "stock_uom"):
-		out[fieldname] = item.fields.get(fieldname)
-			
-	return out
-	
-def _get_price_list_rate(args, item_bean, meta):
-	ref_rate = webnotes.conn.sql("""select ip.ref_rate from 
-		`tabItem Price` ip, `tabPrice List` pl 
-		where ip.price_list=pl.name and ip.price_list=%s and 
-		ip.item_code=%s and ip.selling=1 and pl.enabled=1""", 
-		(args.selling_price_list, args.item_code), as_dict=1)
-
-	if not ref_rate:
-		return {}
-	
-	# found price list rate - now we can validate
-	from erpnext.utilities.transaction_base import validate_currency
-	validate_currency(args, item_bean.doc, meta)
-	
-	return {"ref_rate": flt(ref_rate[0].ref_rate) * flt(args.plc_conversion_rate) / flt(args.conversion_rate)}
-	
-def _get_item_discount(item_group, customer):
-	parent_item_groups = [x[0] for x in webnotes.conn.sql("""SELECT parent.name 
-		FROM `tabItem Group` AS node, `tabItem Group` AS parent 
-		WHERE parent.lft <= node.lft and parent.rgt >= node.rgt and node.name = %s
-		GROUP BY parent.name 
-		ORDER BY parent.lft desc""", (item_group,))]
-		
-	discount = 0
-	for d in parent_item_groups:
-		res = webnotes.conn.sql("""select discount, name from `tabCustomer Discount` 
-			where parent = %s and item_group = %s""", (customer, d))
-		if res:
-			discount = flt(res[0][0])
-			break
-			
-	return {"adj_rate": discount}
-
-@webnotes.whitelist()
-def get_available_qty(item_code, warehouse):
-	return webnotes.conn.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, 
-		["projected_qty", "actual_qty"], as_dict=True) or {}
-		
-def _get_customer_item_code(args, item_bean):
-	customer_item_code = item_bean.doclist.get({"parentfield": "item_customer_details",
-		"customer_name": args.customer})
-	
-	return customer_item_code and customer_item_code[0].ref_code or None
-	
-def get_pos_settings(company):
-	pos_settings = webnotes.conn.sql("""select * from `tabPOS Setting` where user = %s 
-		and company = %s""", (webnotes.session['user'], company), as_dict=1)
-	
-	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):
-	out = {}
-	
-	for fieldname in ("income_account", "cost_center", "warehouse", "expense_account"):
-		if not opts.get(fieldname):
-			out[fieldname] = pos_settings.get(fieldname)
-			
-	if out.get("warehouse"):
-		out["actual_qty"] = get_available_qty(opts.item_code, out.get("warehouse")).get("actual_qty")
-	
-	return out
diff --git a/erpnext/setup/doctype/currency/currency.py b/erpnext/setup/doctype/currency/currency.py
index cb6190f..8eb964b 100644
--- a/erpnext/setup/doctype/currency/currency.py
+++ b/erpnext/setup/doctype/currency/currency.py
@@ -3,7 +3,20 @@
 
 from __future__ import unicode_literals
 import webnotes
+from webnotes import throw, _
 
 class DocType:
 	def __init__(self, d, dl):
-		self.doc, self.doclist = d, dl
\ No newline at end of file
+		self.doc, self.doclist = d, dl
+		
+def validate_conversion_rate(currency, conversion_rate, conversion_rate_label, company):
+	"""common validation for currency and price list currency"""
+
+	company_currency = webnotes.conn.get_value("Company", company, "default_currency")
+
+	if not conversion_rate:
+		throw(_('%(conversion_rate_label)s is mandatory. Maybe Currency Exchange record is not created for %(from_currency)s to %(to_currency)s') % {
+			"conversion_rate_label": conversion_rate_label,
+			"from_currency": currency,
+			"to_currency": company_currency
+		})
\ No newline at end of file
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index dcb6c0f..b17ec4f 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -4,7 +4,7 @@
 from __future__ import unicode_literals
 import webnotes
 
-from webnotes.utils import cstr, flt
+from webnotes.utils import cstr, flt, getdate, now_datetime, formatdate
 from webnotes.model.doc import addchild
 from webnotes.model.bean import getlist
 from webnotes import msgprint, _
@@ -265,7 +265,6 @@
 	if not end_of_life:
 		end_of_life = webnotes.conn.get_value("Item", item_code, "end_of_life")
 	
-	from webnotes.utils import getdate, now_datetime, formatdate
 	if end_of_life and getdate(end_of_life) <= now_datetime().date():
 		msg = (_("Item") + " %(item_code)s: " + _("reached its end of life on") + \
 			" %(date)s. " + _("Please check") + ": %(end_of_life_label)s " + \
@@ -303,4 +302,66 @@
 	if verbose:
 		msgprint(msg, raise_exception=True)
 	else:
-		raise webnotes.ValidationError, msg
\ No newline at end of file
+		raise webnotes.ValidationError, msg
+		
+		
+def get_last_purchase_details(item_code, doc_name=None, conversion_rate=1.0):
+	"""returns last purchase details in stock uom"""
+	# get last purchase order item details
+	last_purchase_order = webnotes.conn.sql("""\
+		select po.name, po.transaction_date, po.conversion_rate,
+			po_item.conversion_factor, po_item.purchase_ref_rate, 
+			po_item.discount_rate, po_item.purchase_rate
+		from `tabPurchase Order` po, `tabPurchase Order Item` po_item
+		where po.docstatus = 1 and po_item.item_code = %s and po.name != %s and 
+			po.name = po_item.parent
+		order by po.transaction_date desc, po.name desc
+		limit 1""", (item_code, cstr(doc_name)), as_dict=1)
+
+	# get last purchase receipt item details		
+	last_purchase_receipt = webnotes.conn.sql("""\
+		select pr.name, pr.posting_date, pr.posting_time, pr.conversion_rate,
+			pr_item.conversion_factor, pr_item.purchase_ref_rate, pr_item.discount_rate,
+			pr_item.purchase_rate
+		from `tabPurchase Receipt` pr, `tabPurchase Receipt Item` pr_item
+		where pr.docstatus = 1 and pr_item.item_code = %s and pr.name != %s and
+			pr.name = pr_item.parent
+		order by pr.posting_date desc, pr.posting_time desc, pr.name desc
+		limit 1""", (item_code, cstr(doc_name)), as_dict=1)
+
+	purchase_order_date = getdate(last_purchase_order and last_purchase_order[0].transaction_date \
+		or "1900-01-01")
+	purchase_receipt_date = getdate(last_purchase_receipt and \
+		last_purchase_receipt[0].posting_date or "1900-01-01")
+
+	if (purchase_order_date > purchase_receipt_date) or \
+			(last_purchase_order and not last_purchase_receipt):
+		# use purchase order
+		last_purchase = last_purchase_order[0]
+		purchase_date = purchase_order_date
+		
+	elif (purchase_receipt_date > purchase_order_date) or \
+			(last_purchase_receipt and not last_purchase_order):
+		# use purchase receipt
+		last_purchase = last_purchase_receipt[0]
+		purchase_date = purchase_receipt_date
+		
+	else:
+		return webnotes._dict()
+	
+	conversion_factor = flt(last_purchase.conversion_factor)
+	out = webnotes._dict({
+		"purchase_ref_rate": flt(last_purchase.purchase_ref_rate) / conversion_factor,
+		"purchase_rate": flt(last_purchase.purchase_rate) / conversion_factor,
+		"discount_rate": flt(last_purchase.discount_rate),
+		"purchase_date": purchase_date
+	})
+
+	conversion_rate = flt(conversion_rate) or 1.0
+	out.update({
+		"import_ref_rate": out.purchase_ref_rate / conversion_rate,
+		"import_rate": out.purchase_rate / conversion_rate,
+		"rate": out.purchase_rate
+	})
+	
+	return out
\ No newline at end of file
diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py
index 00ce548..ad25ef8 100644
--- a/erpnext/stock/doctype/item/test_item.py
+++ b/erpnext/stock/doctype/item/test_item.py
@@ -5,6 +5,8 @@
 import unittest
 import webnotes
 
+from webnotes.test_runner import make_test_records
+
 test_ignore = ["BOM"]
 test_dependencies = ["Warehouse"]
 
@@ -15,6 +17,49 @@
 		item.doc.is_stock_item = "Yes"
 		item.doc.default_warehouse = None
 		self.assertRaises(WarehouseNotSet, item.insert)
+		
+	def test_get_item_details(self):
+		from erpnext.stock.get_item_details import get_item_details
+		to_check = {
+			"item_code": "_Test Item",
+			"item_name": "_Test Item",
+			"description": "_Test Item",
+			"warehouse": "_Test Warehouse - _TC",
+			"income_account": "Sales - _TC",
+			"expense_account": "_Test Account Cost for Goods Sold - _TC",
+			"cost_center": "_Test Cost Center - _TC",
+			"qty": 1.0,
+			"price_list_rate": 100.0,
+			"base_price_list_rate": 0.0,
+			"discount_percentage": 0.0,
+			"rate": 0.0,
+			"base_rate": 0.0,
+			"amount": 0.0,
+			"base_amount": 0.0,
+			"batch_no": None,
+			"item_tax_rate": {},
+			"uom": "_Test UOM",
+			"conversion_factor": 1.0,
+		}
+		
+		make_test_records("Item Price")
+		
+		details = get_item_details({
+			"item_code": "_Test Item",
+			"company": "_Test Company",
+			"price_list": "_Test Price List",
+			"currency": "_Test Currency",
+			"doctype": "Sales Order",
+			"conversion_rate": 1,
+			"price_list_currency": "_Test Currency",
+			"plc_conversion_rate": 1,
+			"order_type": "Sales",
+			"transaction_type": "selling"
+		})
+		
+		for key, value in to_check.iteritems():
+			print key
+			self.assertEquals(value, details.get(key))
 
 test_records = [
 	[{
@@ -36,7 +81,8 @@
 		"stock_uom": "_Test UOM",
 		"default_income_account": "Sales - _TC",
 		"default_warehouse": "_Test Warehouse - _TC",
-		"purchase_account": "_Test Account Cost for Goods Sold - _TC"
+		"purchase_account": "_Test Account Cost for Goods Sold - _TC",
+		"selling_cost_center": "_Test Cost Center - _TC",
 	}, {
 		"doctype": "Item Reorder",
 		"parentfield": "item_reorder",
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
new file mode 100644
index 0000000..7647bbf
--- /dev/null
+++ b/erpnext/stock/get_item_details.py
@@ -0,0 +1,279 @@
+# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import webnotes
+from webnotes import _, throw
+from webnotes.utils import flt, cint, add_days
+import json
+
+@webnotes.whitelist()
+def get_item_details(args):
+	"""
+		args = {
+			"item_code": "",
+			"warehouse": None,
+			"customer": "",
+			"conversion_rate": 1.0,
+			"selling_price_list": None,
+			"price_list_currency": None,
+			"plc_conversion_rate": 1.0
+			"doctype": "",
+			"docname": "",
+			"supplier": None,
+			"transaction_date": None,
+			"conversion_rate": 1.0,
+			"buying_price_list": None,
+			"is_subcontracted": "Yes" / "No",
+			"transaction_type": "selling"
+		}
+	"""
+
+	if isinstance(args, basestring):
+		args = json.loads(args)
+	args = webnotes._dict(args)
+	
+	if args.barcode:
+		args.item_code = get_item_code(barcode=args.barcode)
+	elif not args.item_code and args.serial_no:
+		args.item_code = get_item_code(serial_no=args.serial_no)
+	
+	item_bean = webnotes.bean("Item", args.item_code)
+	item = item_bean.doc
+
+	validate_item_details(args, item)
+		
+	out = get_basic_details(args, item_bean)
+	
+	get_party_item_code(args, item_bean, out)
+
+	if out.get("warehouse"):
+		out.update(get_available_qty(args.item_code, out.warehouse))
+		out.update(get_projected_qty(item.name, out.warehouse))
+	
+	if args.transaction_date and item.lead_time_days:
+		out.schedule_date = out.lead_time_date = add_days(args.transaction_date,
+			item.lead_time_days)
+	
+	get_price_list_rate(args, item_bean, out)
+	
+	# out.update(_get_item_discount(out.item_group, args.customer))
+
+	if args.transaction_type == "selling" and cint(args.is_pos):
+		out.update(get_pos_settings_item_details(args.company, args))
+		
+	if args.doctype in ("Sales Invoice", "Delivery Note"):
+		if item_bean.doc.has_serial_no == "Yes" and not args.serial_no:
+			out.serial_no = _get_serial_nos_by_fifo(args, item_bean)
+	
+	return out
+
+def _get_serial_nos_by_fifo(args, item_bean):
+	return "\n".join(webnotes.conn.sql_list("""select name from `tabSerial No` 
+		where item_code=%(item_code)s and warehouse=%(warehouse)s and status='Available' 
+		order by timestamp(purchase_date, purchase_time) asc limit %(qty)s""", {
+			"item_code": args.item_code,
+			"warehouse": args.warehouse,
+			"qty": cint(args.qty)
+		}))
+
+def get_item_code(barcode=None, serial_no=None):
+	if barcode:
+		item_code = webnotes.conn.get_value("Item", {"barcode": barcode})
+	elif serial_no:
+		item_code = webnotes.conn.get_value("Serial No", serial_no, "item_code")
+
+	if not item_code:
+		throw(_("No Item found with ") + _("Barcode") if barcode else _("Serial No") + 
+			": %s" % (barcode or serial_no))
+	
+	return item_code
+	
+def validate_item_details(args, item):
+	if not args.company:
+		throw(_("Please specify Company"))
+	
+	from erpnext.stock.doctype.item.item import validate_end_of_life
+	validate_end_of_life(item.name, item.end_of_life)
+	
+	if args.transaction_type == "selling":
+		# validate if sales item or service item
+		if args.order_type == "Maintenance":
+			if item.is_service_item != "Yes":
+				throw(_("Item") + (" %s: " % item.name) + 
+					_("not a service item.") +
+					_("Please select a service item or change the order type to Sales."))
+		
+		elif item.is_sales_item != "Yes":
+			throw(_("Item") + (" %s: " % item.name) + _("not a sales item"))
+
+	elif args.transaction_type == "buying":
+		# validate if purchase item or subcontracted item
+		if item.is_purchase_item != "Yes":
+			throw(_("Item") + (" %s: " % item.name) + _("not a purchase item"))
+	
+		if args.is_subcontracted == "Yes" and item.is_sub_contracted_item != "Yes":
+			throw(_("Item") + (" %s: " % item.name) + 
+				_("not a sub-contracted item.") +
+				_("Please select a sub-contracted item or do not sub-contract the transaction."))
+			
+def get_basic_details(args, item_bean):
+	item = item_bean.doc
+	
+	from webnotes.defaults import get_user_default_as_list
+	user_default_warehouse_list = get_user_default_as_list('warehouse')
+	user_default_warehouse = user_default_warehouse_list[0] \
+		if len(user_default_warehouse_list)==1 else ""
+	
+	out = webnotes._dict({
+			"item_code": item.name,
+			"item_name": item.item_name,
+			"description": item.description_html or item.description,
+			"warehouse": user_default_warehouse or args.warehouse or item.default_warehouse,
+			"income_account": item.default_income_account or args.income_account \
+				or webnotes.conn.get_value("Company", args.company, "default_income_account"),
+			"expense_account": item.purchase_account or args.expense_account \
+				or webnotes.conn.get_value("Company", args.company, "default_expense_account"),
+			"cost_center": item.selling_cost_center \
+				if args.transaction_type == "selling" else args.buying_cost_center,
+			"batch_no": None,
+			"item_tax_rate": json.dumps(dict(([d.tax_type, d.tax_rate] for d in 
+				item_bean.doclist.get({"parentfield": "item_tax"})))),
+			"uom": item.stock_uom,
+			"min_order_qty": flt(item.min_order_qty) if args.doctype == "Material Request" else "",
+			"conversion_factor": 1.0,
+			"qty": 1.0,
+			"price_list_rate": 0.0,
+			"base_price_list_rate": 0.0,
+			"rate": 0.0,
+			"base_rate": 0.0,
+			"amount": 0.0,
+			"base_amount": 0.0,
+			"discount_percentage": 0.0
+		})
+	
+	for fieldname in ("item_name", "item_group", "barcode", "brand", "stock_uom"):
+		out[fieldname] = item.fields.get(fieldname)
+			
+	return out
+	
+def get_price_list_rate(args, item_bean, out):
+	meta = webnotes.get_doctype(args.doctype)
+
+	if meta.get_field("currency"):
+		validate_price_list(args)
+		validate_conversion_rate(args, meta)
+
+		price_list_rate = webnotes.conn.get_value("Item Price", 
+			{"price_list": args.price_list, "item_code": args.item_code}, "ref_rate")
+			
+		if not price_list_rate: return {}
+		
+		out.price_list_rate = flt(price_list_rate) * flt(args.plc_conversion_rate) \
+			/ flt(args.conversion_rate)
+		
+		if not out.price_list_rate and args.transaction_type == "buying":
+			from erpnext.stock.doctype.item.item import get_last_purchase_details
+			out.update(get_last_purchase_details(item_bean.doc.name, 
+				args.docname, args.conversion_rate))
+			
+def validate_price_list(args):
+	if args.get("price_list"):
+		if not webnotes.conn.get_value("Price List", 
+			{"name": args.price_list, args.transaction_type: 1, "enabled": 1}):
+				throw(_("Price List is either disabled or for not ") + _(args.transaction_type))
+	else:
+		throw(_("Price List not selected"))
+		
+def validate_conversion_rate(args, meta):
+	from erpnext.setup.doctype.currency.currency import validate_conversion_rate
+	from webnotes.model.meta import get_field_precision
+	
+	# validate currency conversion rate
+	validate_conversion_rate(args.currency, args.conversion_rate, 
+		meta.get_label("conversion_rate"), args.company)
+	
+	args.conversion_rate = flt(args.conversion_rate, 
+		get_field_precision(meta.get_field("conversion_rate"), 
+			webnotes._dict({"fields": args})))
+	
+	# validate price list currency conversion rate
+	if not args.get("price_list_currency"):
+		throw(_("Price List Currency not selected"))
+	else:
+		validate_conversion_rate(args.price_list_currency, args.plc_conversion_rate, 
+			meta.get_label("plc_conversion_rate"), args.company)
+		
+		args.plc_conversion_rate = flt(args.plc_conversion_rate, 
+			get_field_precision(meta.get_field("plc_conversion_rate"), 
+			webnotes._dict({"fields": args})))
+
+# def _get_item_discount(item_group, customer):
+# 	parent_item_groups = [x[0] for x in webnotes.conn.sql("""SELECT parent.name 
+# 		FROM `tabItem Group` AS node, `tabItem Group` AS parent 
+# 		WHERE parent.lft <= node.lft and parent.rgt >= node.rgt and node.name = %s
+# 		GROUP BY parent.name 
+# 		ORDER BY parent.lft desc""", (item_group,))]
+# 		
+# 	discount = 0
+# 	for d in parent_item_groups:
+# 		res = webnotes.conn.sql("""select discount, name from `tabCustomer Discount` 
+# 			where parent = %s and item_group = %s""", (customer, d))
+# 		if res:
+# 			discount = flt(res[0][0])
+# 			break
+# 			
+# 	return {"adj_rate": discount}
+	
+def get_party_item_code(args, item_bean, out):
+	if args.transaction_type == "selling":
+		customer_item_code = item_bean.doclist.get({"parentfield": "item_customer_details",
+			"customer_name": args.customer})
+		out.customer_item_code = customer_item_code[0].ref_code if customer_item_code else None
+	else:
+		item_supplier = item_bean.doclist.get({"parentfield": "item_supplier_details",
+			"supplier": args.supplier})
+		out.supplier_part_no = item_supplier[0].supplier_part_no if item_supplier else None
+		
+
+def get_pos_settings_item_details(company, args, pos_settings=None):
+	res = webnotes._dict()
+	
+	if not pos_settings:
+		pos_settings = get_pos_settings(company)
+		
+	if pos_settings:
+		for fieldname in ("income_account", "cost_center", "warehouse", "expense_account"):
+			if not args.get(fieldname):
+				res[fieldname] = pos_settings.get(fieldname)
+			
+		if res.get("warehouse"):
+			res.actual_qty = get_available_qty(args.item_code, 
+				res.warehouse).get("actual_qty")
+				
+	return res
+
+def get_pos_settings(company):
+	pos_settings = webnotes.conn.sql("""select * from `tabPOS Setting` where user = %s 
+		and company = %s""", (webnotes.session['user'], company), as_dict=1)
+	
+	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
+		
+@webnotes.whitelist()
+def get_conversion_factor(item_code, uom):
+	return {"conversion_factor": webnotes.conn.get_value("UOM Conversion Detail",
+		{"parent": item_code, "uom": uom}, "conversion_factor")}
+		
+@webnotes.whitelist()
+def get_projected_qty(item_code, warehouse):
+	return {"projected_qty": webnotes.conn.get_value("Bin", 
+		{"item_code": item_code, "warehouse": warehouse}, "projected_qty")}
+		
+@webnotes.whitelist()
+def get_available_qty(item_code, warehouse):
+	return webnotes.conn.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, 
+		["projected_qty", "actual_qty"], as_dict=True) or {}
\ No newline at end of file
diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py
index 83a3857..b239fdc 100644
--- a/erpnext/utilities/transaction_base.py
+++ b/erpnext/utilities/transaction_base.py
@@ -190,44 +190,6 @@
 	
 	return territory
 	
-def validate_conversion_rate(currency, conversion_rate, conversion_rate_label, company):
-	"""common validation for currency and price list currency"""
-
-	company_currency = webnotes.conn.get_value("Company", company, "default_currency")
-
-	if not conversion_rate:
-		msgprint(_('%(conversion_rate_label)s is mandatory. Maybe Currency Exchange record is not created for %(from_currency)s to %(to_currency)s') % {
-				"conversion_rate_label": conversion_rate_label,
-				"from_currency": currency,
-				"to_currency": company_currency
-		}, raise_exception=True)
-	
-def validate_currency(args, item, meta=None):
-	from webnotes.model.meta import get_field_precision
-	if not meta:
-		meta = webnotes.get_doctype(args.doctype)
-		
-	# validate conversion rate
-	if meta.get_field("currency"):
-		validate_conversion_rate(args.currency, args.conversion_rate, 
-			meta.get_label("conversion_rate"), args.company)
-		
-		# round it
-		args.conversion_rate = flt(args.conversion_rate, 
-			get_field_precision(meta.get_field("conversion_rate"), 
-				webnotes._dict({"fields": args})))
-	
-	# validate price list conversion rate
-	if meta.get_field("price_list_currency") and (args.selling_price_list or args.buying_price_list) \
-		and args.price_list_currency:
-		validate_conversion_rate(args.price_list_currency, args.plc_conversion_rate, 
-			meta.get_label("plc_conversion_rate"), args.company)
-		
-		# round it
-		args.plc_conversion_rate = flt(args.plc_conversion_rate, 
-			get_field_precision(meta.get_field("plc_conversion_rate"), 
-				webnotes._dict({"fields": args})))
-	
 def delete_events(ref_type, ref_name):
 	webnotes.delete_doc("Event", webnotes.conn.sql_list("""select name from `tabEvent` 
 		where ref_type=%s and ref_name=%s""", (ref_type, ref_name)), for_reload=True)
