diff --git a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py
index f54a550..5c3e2a3 100644
--- a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py
+++ b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py
@@ -114,7 +114,7 @@
 		if self.cheque_no:
 			if self.cheque_date:
 				r.append(_('Reference #{0} dated {1}').format(self.cheque_no, formatdate(self.cheque_date)))
-			else :
+			else:
 				msgprint(_("Please enter Reference date"), raise_exception=1)
 
 		for d in self.get('entries'):
diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py
index 361f4fa..b0cb540 100644
--- a/erpnext/selling/doctype/customer/customer.py
+++ b/erpnext/selling/doctype/customer/customer.py
@@ -86,9 +86,7 @@
 
 	def validate_name_with_customer_group(self):
 		if frappe.db.exists("Customer Group", self.name):
-			frappe.msgprint("An Customer Group exists with same name (%s), \
-				please change the Customer name or rename the Customer Group" %
-				self.name, raise_exception=1)
+			frappe.throw("A Customer Group exists with same name please change the Customer name or rename the Customer Group")
 
 	def delete_customer_address(self):
 		addresses = frappe.db.sql("""select name, lead from `tabAddress`
@@ -140,7 +138,7 @@
 @frappe.whitelist()
 def get_dashboard_info(customer):
 	if not frappe.has_permission("Customer", "read", customer):
-		frappe.msgprint("No Permission", raise_exception=True)
+		frappe.msgprint(_("Not permitted"), raise_exception=True)
 
 	out = {}
 	for doctype in ["Opportunity", "Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]:
diff --git a/erpnext/stock/doctype/stock_ledger/stock_ledger.py b/erpnext/stock/doctype/stock_ledger/stock_ledger.py
index fca9cb0..f566e05 100644
--- a/erpnext/stock/doctype/stock_ledger/stock_ledger.py
+++ b/erpnext/stock/doctype/stock_ledger/stock_ledger.py
@@ -4,38 +4,33 @@
 from __future__ import unicode_literals
 import frappe
 
-from frappe.utils import add_days, cstr, flt, nowdate, cint, now
-
-from frappe import session, msgprint
-from erpnext.stock.utils import get_valid_serial_nos
-
-
+from frappe.utils import flt, now
 from frappe.model.document import Document
 
 class StockLedger(Document):
-		
+
 	def update_stock(self, values, is_amended = 'No'):
 		for v in values:
 			sle_id = ''
-			
+
 			# reverse quantities for cancel
 			if v.get('is_cancelled') == 'Yes':
 				v['actual_qty'] = -flt(v['actual_qty'])
 				# cancel matching entry
 				frappe.db.sql("""update `tabStock Ledger Entry` set is_cancelled='Yes',
 					modified=%s, modified_by=%s
-					where voucher_no=%s and voucher_type=%s""", 
+					where voucher_no=%s and voucher_type=%s""",
 					(now(), frappe.session.user, v['voucher_no'], v['voucher_type']))
 
 			if v.get("actual_qty"):
 				sle_id = self.make_entry(v)
-				
+
 			args = v.copy()
 			args.update({
 				"sle_id": sle_id,
 				"is_amended": is_amended
 			})
-			
+
 			frappe.get_doc('Warehouse', v["warehouse"]).update_bin(args)
 
 
@@ -45,7 +40,7 @@
 		sle.ignore_permissions = 1
 		sle.insert()
 		return sle.name
-	
+
 	def repost(self):
 		"""
 		Repost everything!
diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
index 17d683f..2336f22 100644
--- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
+++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
@@ -4,15 +4,14 @@
 
 from __future__ import unicode_literals
 import frappe
-from frappe import msgprint
-from frappe.utils import flt, getdate, add_days
+from frappe import _
+from frappe.utils import flt, getdate, add_days, formatdate
 from frappe.model.controller import DocListController
 from datetime import date
 
 class StockFreezeError(frappe.ValidationError): pass
 
 class StockLedgerEntry(DocListController):
-
 	def validate(self):
 		from erpnext.stock.utils import validate_warehouse_company
 		self.validate_mandatory()
@@ -55,11 +54,7 @@
 		mandatory = ['warehouse','posting_date','voucher_type','voucher_no','actual_qty','company']
 		for k in mandatory:
 			if not self.get(k):
-				msgprint("Stock Ledger Entry: '%s' is mandatory" % k, raise_exception = 1)
-			elif k == 'warehouse':
-				if not frappe.db.exists("Warehouse", self.get(k)):
-					msgprint("Warehouse: '%s' does not exist in the system. Please check." %
-						self.get(k), raise_exception = 1)
+				frappe.throw(_("{0} is required").format(k))
 
 	def validate_item(self):
 		item_det = frappe.db.sql("""select name, has_batch_no, docstatus,
@@ -89,15 +84,14 @@
 		if stock_frozen_upto:
 			stock_auth_role = frappe.db.get_value('Stock Settings', None,'stock_auth_role')
 			if getdate(self.posting_date) <= getdate(stock_frozen_upto) and not stock_auth_role in frappe.user.get_roles():
-				msgprint("You are not authorized to do / modify back dated stock entries before %s" % getdate(stock_frozen_upto).strftime('%d-%m-%Y'), raise_exception=StockFreezeError)
+				frappe.throw(_("Entries before {0} are frozen").format(formatdate(stock_frozen_upto)), StockFreezeError)
 
 		stock_frozen_upto_days = int(frappe.db.get_value('Stock Settings', None, 'stock_frozen_upto_days') or 0)
 		if stock_frozen_upto_days:
 			stock_auth_role = frappe.db.get_value('Stock Settings', None,'stock_auth_role')
 			older_than_x_days_ago = (add_days(getdate(self.posting_date), stock_frozen_upto_days) <= date.today())
 			if older_than_x_days_ago and not stock_auth_role in frappe.user.get_roles():
-				msgprint("You are not authorized to do / modify back dated stock entries older than %d days ago" %stock_frozen_upto_days, raise_exception=StockFreezeError)
-
+				frappe.throw(_("Not allowed to update entries older than {0}").format(stock_frozen_upto_days), StockFreezeError)
 
 	def scrub_posting_time(self):
 		if not self.posting_time or self.posting_time == '00:0':
diff --git a/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py b/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
index 80354ec..a14c21e 100644
--- a/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
+++ b/erpnext/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py
@@ -4,7 +4,7 @@
 from __future__ import unicode_literals
 import frappe
 from frappe.utils import cstr, flt, cint
-from frappe import msgprint, _
+from frappe import _
 
 
 from frappe.model.document import Document
@@ -12,71 +12,66 @@
 class StockUOMReplaceUtility(Document):
 	def validate_mandatory(self):
 		if not cstr(self.item_code):
-			msgprint("Please Enter an Item.")
-			raise Exception
-		
+			frappe.throw(_("Item is required"))
+
 		if not cstr(self.new_stock_uom):
-			msgprint("Please Enter New Stock UOM.")
-			raise Exception
+			frappe.throw(_("New Stock UOM is required"))
 
 		if cstr(self.current_stock_uom) == cstr(self.new_stock_uom):
-			msgprint("Current Stock UOM and Stock UOM are same.")
-			raise Exception 
-	
+			frappe.throw(_("New Stock UOM must be different from current stock UOM"))
+
 		# check conversion factor
 		if not flt(self.conversion_factor):
-			msgprint("Please Enter Conversion Factor.")
-			raise Exception
-		
+			frappe.throw(_("Conversion Factor is required"))
+
 		stock_uom = frappe.db.get_value("Item", self.item_code, "stock_uom")
 		if cstr(self.new_stock_uom) == cstr(stock_uom):
-			msgprint("Item Master is already updated with New Stock UOM " + cstr(self.new_stock_uom))
-			raise Exception
-			
+			frappe.throw(_("Item is updated"))
+
 	def update_item_master(self):
 		item_doc = frappe.get_doc("Item", self.item_code)
 		item_doc.stock_uom = self.new_stock_uom
 		item_doc.save()
-		
-		msgprint(_("Default UOM updated in item ") + self.item_code)
-		
+
+		frappe.msgprint(_("Stock UOM updatd for Item {0}").format(self.item_code))
+
 	def update_bin(self):
 		# update bin
 		if flt(self.conversion_factor) != flt(1):
-			frappe.db.sql("""update `tabBin` 
-				set stock_uom = %s, 
-					indented_qty = ifnull(indented_qty,0) * %s, 
-					ordered_qty = ifnull(ordered_qty,0) * %s, 
-					reserved_qty = ifnull(reserved_qty,0) * %s, 
-					planned_qty = ifnull(planned_qty,0) * %s, 
-					projected_qty = actual_qty + ordered_qty + indented_qty + 
-						planned_qty - reserved_qty 
-				where item_code = %s""", (self.new_stock_uom, self.conversion_factor, 
-					self.conversion_factor, self.conversion_factor, 
+			frappe.db.sql("""update `tabBin`
+				set stock_uom = %s,
+					indented_qty = ifnull(indented_qty,0) * %s,
+					ordered_qty = ifnull(ordered_qty,0) * %s,
+					reserved_qty = ifnull(reserved_qty,0) * %s,
+					planned_qty = ifnull(planned_qty,0) * %s,
+					projected_qty = actual_qty + ordered_qty + indented_qty +
+						planned_qty - reserved_qty
+				where item_code = %s""", (self.new_stock_uom, self.conversion_factor,
+					self.conversion_factor, self.conversion_factor,
 					self.conversion_factor, self.item_code))
 		else:
-			frappe.db.sql("update `tabBin` set stock_uom = %s where item_code = %s", 
+			frappe.db.sql("update `tabBin` set stock_uom = %s where item_code = %s",
 				 (self.new_stock_uom, self.item_code) )
 
 		# acknowledge user
-		msgprint(" All Bins Updated Successfully.")
-			
+		frappe.msgprint(_("Stock balances updated"))
+
 	def update_stock_ledger_entry(self):
 		# update stock ledger entry
 		from erpnext.stock.stock_ledger import update_entries_after
-		
+
 		if flt(self.conversion_factor) != flt(1):
-			frappe.db.sql("""update `tabStock Ledger Entry` 
-				set stock_uom = %s, actual_qty = ifnull(actual_qty,0) * %s 
-				where item_code = %s""", 
+			frappe.db.sql("""update `tabStock Ledger Entry`
+				set stock_uom = %s, actual_qty = ifnull(actual_qty,0) * %s
+				where item_code = %s""",
 				(self.new_stock_uom, self.conversion_factor, self.item_code))
 		else:
-			frappe.db.sql("""update `tabStock Ledger Entry` set stock_uom=%s 
+			frappe.db.sql("""update `tabStock Ledger Entry` set stock_uom=%s
 				where item_code=%s""", (self.new_stock_uom, self.item_code))
-		
+
 		# acknowledge user
-		msgprint("Stock Ledger Entries Updated Successfully.")
-		
+		frappe.msgprint(_("Stock Ledger entries balances updated"))
+
 		# update item valuation
 		if flt(self.conversion_factor) != flt(1):
 			wh = frappe.db.sql("select name from `tabWarehouse`")
@@ -84,34 +79,31 @@
 				update_entries_after({"item_code": self.item_code, "warehouse": w[0]})
 
 		# acknowledge user
-		msgprint("Item Valuation Updated Successfully.")
+		frappe.msgprint(_("Item valuation updated"))
 
-	# Update Stock UOM							
+	# Update Stock UOM
 	def update_stock_uom(self):
 		self.validate_mandatory()
 		self.validate_uom_integer_type()
-			
+
 		self.update_stock_ledger_entry()
-		
+
 		self.update_bin()
-		
+
 		self.update_item_master()
 
-		
+
 	def validate_uom_integer_type(self):
 		current_is_integer = frappe.db.get_value("UOM", self.current_stock_uom, "must_be_whole_number")
 		new_is_integer = frappe.db.get_value("UOM", self.new_stock_uom, "must_be_whole_number")
-		
-		if current_is_integer and not new_is_integer:
-			frappe.msgprint("New UOM must be of type Whole Number", raise_exception=True)
 
 		if not current_is_integer and new_is_integer:
-			frappe.msgprint("New UOM must NOT be of type Whole Number", raise_exception=True)
+			frappe.throw(_("New UOM must NOT be of type Whole Number"))
 
 		if current_is_integer and new_is_integer and cint(self.conversion_factor)!=self.conversion_factor:
-			frappe.msgprint("Conversion Factor cannot be fraction", raise_exception=True)
+			frappe.throw(_("Conversion factor cannot be in fractions"))
 
 @frappe.whitelist()
 def get_stock_uom(item_code):
 	return { 'current_stock_uom': cstr(frappe.db.get_value('Item', item_code, 'stock_uom')) }
-	
+
diff --git a/erpnext/stock/doctype/warehouse/warehouse.py b/erpnext/stock/doctype/warehouse/warehouse.py
index 3b159fc..9bb7109 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.py
+++ b/erpnext/stock/doctype/warehouse/warehouse.py
@@ -9,7 +9,7 @@
 from frappe.model.document import Document
 
 class Warehouse(Document):
-	
+
 	def autoname(self):
 		suffix = " - " + frappe.db.get_value("Company", self.company, "abbr")
 		if not self.warehouse_name.endswith(suffix):
@@ -18,78 +18,78 @@
 	def validate(self):
 		if self.email_id and not validate_email_add(self.email_id):
 				throw(_("Please enter valid Email Id"))
-				
+
 		self.update_parent_account()
-				
+
 	def update_parent_account(self):
-		if not getattr(self, "__islocal", None) and (self.create_account_under != 
+		if not getattr(self, "__islocal", None) and (self.create_account_under !=
 			frappe.db.get_value("Warehouse", self.name, "create_account_under")):
-				warehouse_account = frappe.db.get_value("Account", 
-					{"account_type": "Warehouse", "company": self.company, 
+				warehouse_account = frappe.db.get_value("Account",
+					{"account_type": "Warehouse", "company": self.company,
 					"master_name": self.name}, ["name", "parent_account"])
 				if warehouse_account and warehouse_account[1] != self.create_account_under:
 					acc_doc = frappe.get_doc("Account", warehouse_account[0])
 					acc_doc.parent_account = self.create_account_under
 					acc_doc.save()
-				
+
 	def on_update(self):
 		self.create_account_head()
-						
+
 	def create_account_head(self):
 		if cint(frappe.defaults.get_global_default("auto_accounting_for_stock")):
-			if not frappe.db.get_value("Account", {"account_type": "Warehouse", 
-					"master_name": self.name}) and not frappe.db.get_value("Account", 
+			if not frappe.db.get_value("Account", {"account_type": "Warehouse",
+					"master_name": self.name}) and not frappe.db.get_value("Account",
 					{"account_name": self.warehouse_name}):
 				if self.get("__islocal") or not frappe.db.get_value(
 						"Stock Ledger Entry", {"warehouse": self.name}):
 					self.validate_parent_account()
 					ac_doc = frappe.get_doc({
 						"doctype": "Account",
-						'account_name': self.warehouse_name, 
-						'parent_account': self.create_account_under, 
-						'group_or_ledger':'Ledger', 
-						'company':self.company, 
+						'account_name': self.warehouse_name,
+						'parent_account': self.create_account_under,
+						'group_or_ledger':'Ledger',
+						'company':self.company,
 						"account_type": "Warehouse",
 						"master_name": self.name,
 						"freeze_account": "No"
 					})
 					ac_doc.ignore_permissions = True
 					ac_doc.insert()
-					
-					msgprint(_("Account Head") + ": " + ac_doc.name + _(" created"))
-	
+
+					msgprint(_("Account head {0} created"))
+
 	def validate_parent_account(self):
 		if not self.create_account_under:
-			parent_account = frappe.db.get_value("Account", 
+			parent_account = frappe.db.get_value("Account",
 				{"account_name": "Stock Assets", "company": self.company})
 			if parent_account:
 				self.create_account_under = parent_account
 			else:
 				frappe.throw(_("Please enter account group under which account \
 					for warehouse ") + self.name +_(" will be created"))
-		
+
 	def on_trash(self):
 		# delete bin
-		bins = frappe.db.sql("select * from `tabBin` where warehouse = %s", 
+		bins = frappe.db.sql("select * from `tabBin` where warehouse = %s",
 			self.name, as_dict=1)
 		for d in bins:
 			if d['actual_qty'] or d['reserved_qty'] or d['ordered_qty'] or \
 					d['indented_qty'] or d['projected_qty'] or d['planned_qty']:
-				throw("""Warehouse: %s can not be deleted as qty exists for item: %s""" 
+				throw("""Warehouse: %s can not be deleted as qty exists for item: %s"""
 					% (self.name, d['item_code']))
 			else:
 				frappe.db.sql("delete from `tabBin` where name = %s", d['name'])
-				
-		warehouse_account = frappe.db.get_value("Account", 
+
+		warehouse_account = frappe.db.get_value("Account",
 			{"account_type": "Warehouse", "master_name": self.name})
 		if warehouse_account:
 			frappe.delete_doc("Account", warehouse_account)
-				
-		if frappe.db.sql("""select name from `tabStock Ledger Entry` 
+
+		if frappe.db.sql("""select name from `tabStock Ledger Entry`
 				where warehouse = %s""", self.name):
-			throw(_("""Warehouse can not be deleted as stock ledger entry 
+			throw(_("""Warehouse can not be deleted as stock ledger entry
 				exists for this warehouse."""))
-			
+
 	def before_rename(self, olddn, newdn, merge=False):
 		# Add company abbr if not provided
 		from erpnext.setup.doctype.company.company import get_name_with_abbr
@@ -98,12 +98,12 @@
 		if merge:
 			if not frappe.db.exists("Warehouse", new_warehouse):
 				frappe.throw(_("Warehouse ") + new_warehouse +_(" does not exists"))
-				
+
 			if self.company != frappe.db.get_value("Warehouse", new_warehouse, "company"):
 				frappe.throw(_("Both Warehouse must belong to same Company"))
-				
+
 			frappe.db.sql("delete from `tabBin` where warehouse=%s", olddn)
-			
+
 		from erpnext.accounts.utils import rename_account_for
 		rename_account_for("Warehouse", olddn, newdn, merge, self.company)
 
@@ -112,18 +112,18 @@
 	def after_rename(self, olddn, newdn, merge=False):
 		if merge:
 			self.recalculate_bin_qty(newdn)
-			
+
 	def recalculate_bin_qty(self, newdn):
 		from erpnext.utilities.repost_stock import repost_stock
 		frappe.db.auto_commit_on_many_writes = 1
 		frappe.db.set_default("allow_negative_stock", 1)
-		
+
 		for item in frappe.db.sql("""select distinct item_code from (
 			select name as item_code from `tabItem` where ifnull(is_stock_item, 'Yes')='Yes'
-			union 
+			union
 			select distinct item_code from tabBin) a"""):
 				repost_stock(item[0], newdn)
-			
-		frappe.db.set_default("allow_negative_stock", 
+
+		frappe.db.set_default("allow_negative_stock",
 			frappe.db.get_value("Stock Settings", None, "allow_negative_stock"))
-		frappe.db.auto_commit_on_many_writes = 0
\ No newline at end of file
+		frappe.db.auto_commit_on_many_writes = 0
diff --git a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py
index c88fd11..1de86be 100644
--- a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py
+++ b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py
@@ -3,31 +3,32 @@
 
 from __future__ import unicode_literals
 import frappe
+from frappe import _
 from frappe.utils import flt
 
 def execute(filters=None):
 	if not filters: filters = {}
-	
+
 	columns = get_columns(filters)
 	item_map = get_item_details(filters)
 	iwb_map = get_item_warehouse_batch_map(filters)
-	
+
 	data = []
 	for item in sorted(iwb_map):
 		for wh in sorted(iwb_map[item]):
 			for batch in sorted(iwb_map[item][wh]):
 				qty_dict = iwb_map[item][wh][batch]
-				data.append([item, item_map[item]["item_name"], 
-					item_map[item]["description"], wh, batch, 
-					qty_dict.opening_qty, qty_dict.in_qty, 
+				data.append([item, item_map[item]["item_name"],
+					item_map[item]["description"], wh, batch,
+					qty_dict.opening_qty, qty_dict.in_qty,
 					qty_dict.out_qty, qty_dict.bal_qty
 				])
-	
+
 	return columns, data
 
 def get_columns(filters):
 	"""return columns based on filters"""
-	
+
 	columns = ["Item:Link/Item:100"] + ["Item Name::150"] + ["Description::150"] + \
 	["Warehouse:Link/Warehouse:100"] + ["Batch:Link/Batch:100"] + ["Opening Qty::90"] + \
 	["In Qty::80"] + ["Out Qty::80"] + ["Balance Qty::90"]
@@ -37,21 +38,21 @@
 def get_conditions(filters):
 	conditions = ""
 	if not filters.get("from_date"):
-		frappe.msgprint("Please enter From Date", raise_exception=1)
+		frappe.throw(_("'From Date' is required"))
 
 	if filters.get("to_date"):
 		conditions += " and posting_date <= '%s'" % filters["to_date"]
 	else:
-		frappe.msgprint("Please enter To Date", raise_exception=1)
-		
+		frappe.throw(_("'To Date' is required"))
+
 	return conditions
 
 #get all details
 def get_stock_ledger_entries(filters):
 	conditions = get_conditions(filters)
-	return frappe.db.sql("""select item_code, batch_no, warehouse, 
-		posting_date, actual_qty 
-		from `tabStock Ledger Entry` 
+	return frappe.db.sql("""select item_code, batch_no, warehouse,
+		posting_date, actual_qty
+		from `tabStock Ledger Entry`
 		where docstatus < 2 %s order by item_code, warehouse""" %
 		conditions, as_dict=1)
 
@@ -82,4 +83,4 @@
 	for d in frappe.db.sql("select name, item_name, description from tabItem", as_dict=1):
 		item_map.setdefault(d.name, d)
 
-	return item_map
\ No newline at end of file
+	return item_map
diff --git a/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py b/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py
index 839a70f..9b4bb06 100644
--- a/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py
+++ b/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py
@@ -2,6 +2,7 @@
 # License: GNU General Public License v3. See license.txt
 
 import frappe
+from frappe import _
 from frappe.utils import getdate, flt
 
 def execute(filters=None):
@@ -13,7 +14,7 @@
 	avg_daily_outgoing = 0
 	diff = ((getdate(filters.get("to_date")) - getdate(filters.get("from_date"))).days)+1
 	if diff <= 0:
-		frappe.msgprint("To Date should not be less than eual to From Date",raise_exception=1)
+		frappe.throw(_("'From Date' must be after 'To Date'"))
 
 	columns = get_columns()
 	items = get_item_info()
@@ -27,8 +28,8 @@
 		avg_daily_outgoing = flt(total_outgoing/diff, float_preceision)
 		reorder_level = (avg_daily_outgoing * flt(item.lead_time_days)) + flt(item.min_order_qty)
 
-		data.append([item.name, item.item_name, item.description, item.min_order_qty, item.lead_time_days, 
-			consumed_item_map.get(item.name, 0), delivered_item_map.get(item.name,0), total_outgoing, 
+		data.append([item.name, item.item_name, item.description, item.min_order_qty, item.lead_time_days,
+			consumed_item_map.get(item.name, 0), delivered_item_map.get(item.name,0), total_outgoing,
 			avg_daily_outgoing, reorder_level])
 
 	return columns , data
@@ -36,7 +37,7 @@
 def get_columns():
 	return[
 			"Item:Link/Item:120", "Item name:Data:120", "Description::160",
-			"Minimum Inventory Level:Float:160", "Lead Time Days:Float:120", "Consumed:Float:120", 
+			"Minimum Inventory Level:Float:160", "Lead Time Days:Float:120", "Consumed:Float:120",
 			"Delivered:Float:120", "Total Outgoing:Float:120", "Avg Daily Outgoing:Float:160",
 			"Reorder Level:Float:120"
 	]
@@ -47,10 +48,10 @@
 
 def get_consumed_items(condition):
 
-	cn_items = frappe.db.sql("""select se_item.item_code, 
+	cn_items = frappe.db.sql("""select se_item.item_code,
 				sum(se_item.actual_qty) as 'consume_qty'
 		from `tabStock Entry` se, `tabStock Entry Detail` se_item
-		where se.name = se_item.parent and se.docstatus = 1 
+		where se.name = se_item.parent and se.docstatus = 1
 		and ifnull(se_item.t_warehouse, '') = '' %s
 		group by se_item.item_code""" % (condition), as_dict=1)
 
@@ -64,13 +65,13 @@
 
 	dn_items = frappe.db.sql("""select dn_item.item_code, sum(dn_item.qty) as dn_qty
 		from `tabDelivery Note` dn, `tabDelivery Note Item` dn_item
-		where dn.name = dn_item.parent and dn.docstatus = 1 %s 
+		where dn.name = dn_item.parent and dn.docstatus = 1 %s
 		group by dn_item.item_code""" % (condition), as_dict=1)
 
 	si_items = frappe.db.sql("""select si_item.item_name, sum(si_item.qty) as si_qty
 		from `tabSales Invoice` si, `tabSales Invoice Item` si_item
-		where si.name = si_item.parent and si.docstatus = 1 and 
-		ifnull(si.update_stock, 0) = 1 and ifnull(si.is_pos, 0) = 1 %s 
+		where si.name = si_item.parent and si.docstatus = 1 and
+		ifnull(si.update_stock, 0) = 1 and ifnull(si.is_pos, 0) = 1 %s
 		group by si_item.item_name""" % (condition), as_dict=1)
 
 	dn_item_map = {}
@@ -87,5 +88,5 @@
 	if filters.get("from_date") and filters.get("to_date"):
 		conditions += " and posting_date between '%s' and '%s'" % (filters["from_date"],filters["to_date"])
 	else:
-		frappe.msgprint("Please set date in from date field",raise_exception=1)
-	return conditions
\ No newline at end of file
+		frappe.throw(_("From and To dates required"))
+	return conditions
diff --git a/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py b/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py
index eb7df86..16fe3be 100644
--- a/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py
+++ b/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py
@@ -3,31 +3,32 @@
 
 from __future__ import unicode_literals
 import frappe
+from frappe import _
 from frappe.utils import flt
 
 def execute(filters=None):
 	if not filters: filters = {}
-	
+
 	columns = get_columns(filters)
 	item_map = get_item_details(filters)
 	iwb_map = get_item_warehouse_map(filters)
-	
+
 	data = []
 	for company in sorted(iwb_map):
 		for item in sorted(iwb_map[company]):
 			for wh in sorted(iwb_map[company][item]):
 				qty_dict = iwb_map[company][item][wh]
-				data.append([item, item_map[item]["item_name"], 
-					item_map[item]["description"], wh, 
-					qty_dict.opening_qty, qty_dict.in_qty, 
+				data.append([item, item_map[item]["item_name"],
+					item_map[item]["description"], wh,
+					qty_dict.opening_qty, qty_dict.in_qty,
 					qty_dict.out_qty, qty_dict.bal_qty, company
 				])
-	
+
 	return columns, data
 
 def get_columns(filters):
 	"""return columns based on filters"""
-	
+
 	columns = ["Item:Link/Item:100", "Item Name::150", "Description::150", \
 	"Warehouse:Link/Warehouse:100", "Opening Qty:Float:90", \
 	"In Qty:Float:80", "Out Qty:Float:80", "Balance Qty:Float:90", "Company:Link/Company:100"]
@@ -37,21 +38,21 @@
 def get_conditions(filters):
 	conditions = ""
 	if not filters.get("from_date"):
-		frappe.msgprint("Please enter From Date", raise_exception=1)
+		frappe.throw(_("'From Date' is required"))
 
 	if filters.get("to_date"):
 		conditions += " and posting_date <= '%s'" % filters["to_date"]
 	else:
-		frappe.msgprint("Please enter To Date", raise_exception=1)
-		
+		frappe.throw(_("'To Date' is required"))
+
 	return conditions
 
 #get all details
 def get_stock_ledger_entries(filters):
 	conditions = get_conditions(filters)
-	return frappe.db.sql("""select item_code, warehouse, 
-		posting_date, actual_qty, company 
-		from `tabStock Ledger Entry` 
+	return frappe.db.sql("""select item_code, warehouse,
+		posting_date, actual_qty, company
+		from `tabStock Ledger Entry`
 		where docstatus < 2 %s order by item_code, warehouse""" %
 		conditions, as_dict=1)
 
@@ -82,4 +83,4 @@
 	for d in frappe.db.sql("select name, item_name, description from tabItem", as_dict=1):
 		item_map.setdefault(d.name, d)
 
-	return item_map
\ No newline at end of file
+	return item_map
diff --git a/erpnext/support/doctype/customer_issue/customer_issue.py b/erpnext/support/doctype/customer_issue/customer_issue.py
index 7c6e1b2..290e74e 100644
--- a/erpnext/support/doctype/customer_issue/customer_issue.py
+++ b/erpnext/support/doctype/customer_issue/customer_issue.py
@@ -4,34 +4,32 @@
 
 from __future__ import unicode_literals
 import frappe
-from frappe import session, msgprint
+from frappe import session, _
 from frappe.utils import today
 
-	
+
 
 from erpnext.utilities.transaction_base import TransactionBase
 
 class CustomerIssue(TransactionBase):
-	
+
 	def validate(self):
 		if session['user'] != 'Guest' and not self.customer:
-			msgprint("Please select Customer from whom issue is raised",
-				raise_exception=True)
-				
+			frappe.throw(_("Customer is required"))
+
 		if self.status=="Closed" and \
 			frappe.db.get_value("Customer Issue", self.name, "status")!="Closed":
 			self.resolution_date = today()
 			self.resolved_by = frappe.session.user
-	
+
 	def on_cancel(self):
-		lst = frappe.db.sql("""select t1.name 
-			from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 
-			where t2.parent = t1.name and t2.prevdoc_docname = %s and	t1.docstatus!=2""", 
+		lst = frappe.db.sql("""select t1.name
+			from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2
+			where t2.parent = t1.name and t2.prevdoc_docname = %s and	t1.docstatus!=2""",
 			(self.name))
 		if lst:
 			lst1 = ','.join([x[0] for x in lst])
-			msgprint("Maintenance Visit No. "+lst1+" already created against this customer issue. So can not be Cancelled")
-			raise Exception
+			frappe.throw(_("Cancel Material Visit {0} before cancelling this Customer Issue").format(lst1))
 		else:
 			frappe.db.set(self, 'status', 'Cancelled')
 
@@ -41,22 +39,22 @@
 @frappe.whitelist()
 def make_maintenance_visit(source_name, target_doc=None):
 	from frappe.model.mapper import get_mapped_doc
-	
-	visit = frappe.db.sql("""select t1.name 
-		from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 
-		where t2.parent=t1.name and t2.prevdoc_docname=%s 
+
+	visit = frappe.db.sql("""select t1.name
+		from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2
+		where t2.parent=t1.name and t2.prevdoc_docname=%s
 		and t1.docstatus=1 and t1.completion_status='Fully Completed'""", source_name)
-		
+
 	if not visit:
 		doclist = get_mapped_doc("Customer Issue", source_name, {
 			"Customer Issue": {
-				"doctype": "Maintenance Visit", 
+				"doctype": "Maintenance Visit",
 				"field_map": {
-					"complaint": "description", 
-					"doctype": "prevdoc_doctype", 
+					"complaint": "description",
+					"doctype": "prevdoc_doctype",
 					"name": "prevdoc_docname"
 				}
 			}
 		}, target_doc)
-	
-		return doclist
\ No newline at end of file
+
+		return doclist
diff --git a/erpnext/support/doctype/maintenance_visit/maintenance_visit.json b/erpnext/support/doctype/maintenance_visit/maintenance_visit.json
index 7d93bba..64833e6 100644
--- a/erpnext/support/doctype/maintenance_visit/maintenance_visit.json
+++ b/erpnext/support/doctype/maintenance_visit/maintenance_visit.json
@@ -1,302 +1,303 @@
 {
- "autoname": "MV.#####", 
- "creation": "2013-01-10 16:34:31.000000", 
- "docstatus": 0, 
- "doctype": "DocType", 
+ "autoname": "MV.#####",
+ "creation": "2013-01-10 16:34:31.000000",
+ "docstatus": 0,
+ "doctype": "DocType",
  "fields": [
   {
-   "fieldname": "customer_details", 
-   "fieldtype": "Section Break", 
-   "label": "Customer Details", 
-   "oldfieldtype": "Section Break", 
-   "options": "icon-user", 
+   "fieldname": "customer_details",
+   "fieldtype": "Section Break",
+   "label": "Customer Details",
+   "oldfieldtype": "Section Break",
+   "options": "icon-user",
    "permlevel": 0
-  }, 
+  },
   {
-   "fieldname": "column_break0", 
-   "fieldtype": "Column Break", 
-   "oldfieldtype": "Column Break", 
+   "fieldname": "column_break0",
+   "fieldtype": "Column Break",
+   "oldfieldtype": "Column Break",
    "permlevel": 0
-  }, 
+  },
   {
-   "fieldname": "customer", 
-   "fieldtype": "Link", 
-   "in_filter": 1, 
-   "label": "Customer", 
-   "oldfieldname": "customer", 
-   "oldfieldtype": "Link", 
-   "options": "Customer", 
-   "permlevel": 0, 
-   "print_hide": 1, 
-   "reqd": 1, 
+   "fieldname": "customer",
+   "fieldtype": "Link",
+   "in_filter": 1,
+   "label": "Customer",
+   "oldfieldname": "customer",
+   "oldfieldtype": "Link",
+   "options": "Customer",
+   "permlevel": 0,
+   "print_hide": 1,
+   "reqd": 1,
    "search_index": 0
-  }, 
+  },
   {
-   "fieldname": "customer_name", 
-   "fieldtype": "Data", 
-   "hidden": 1, 
-   "in_list_view": 1, 
-   "label": "Customer Name", 
-   "permlevel": 0, 
+   "fieldname": "customer_name",
+   "fieldtype": "Data",
+   "hidden": 1,
+   "in_list_view": 1,
+   "label": "Customer Name",
+   "permlevel": 0,
    "read_only": 1
-  }, 
+  },
   {
-   "fieldname": "address_display", 
-   "fieldtype": "Small Text", 
-   "hidden": 1, 
-   "label": "Address", 
-   "permlevel": 0, 
+   "fieldname": "address_display",
+   "fieldtype": "Small Text",
+   "hidden": 1,
+   "label": "Address",
+   "permlevel": 0,
    "read_only": 1
-  }, 
+  },
   {
-   "fieldname": "contact_display", 
-   "fieldtype": "Small Text", 
-   "hidden": 1, 
-   "label": "Contact", 
-   "permlevel": 0, 
+   "fieldname": "contact_display",
+   "fieldtype": "Small Text",
+   "hidden": 1,
+   "label": "Contact",
+   "permlevel": 0,
    "read_only": 1
-  }, 
+  },
   {
-   "fieldname": "contact_mobile", 
-   "fieldtype": "Data", 
-   "hidden": 1, 
-   "label": "Mobile No", 
-   "permlevel": 0, 
+   "fieldname": "contact_mobile",
+   "fieldtype": "Data",
+   "hidden": 1,
+   "label": "Mobile No",
+   "permlevel": 0,
    "read_only": 1
-  }, 
+  },
   {
-   "fieldname": "contact_email", 
-   "fieldtype": "Data", 
-   "hidden": 1, 
-   "label": "Contact Email", 
-   "permlevel": 0, 
+   "fieldname": "contact_email",
+   "fieldtype": "Data",
+   "hidden": 1,
+   "label": "Contact Email",
+   "permlevel": 0,
    "read_only": 1
-  }, 
+  },
   {
-   "fieldname": "column_break1", 
-   "fieldtype": "Column Break", 
-   "oldfieldtype": "Column Break", 
-   "permlevel": 0, 
+   "fieldname": "column_break1",
+   "fieldtype": "Column Break",
+   "oldfieldtype": "Column Break",
+   "permlevel": 0,
    "width": "50%"
-  }, 
+  },
   {
-   "default": "Today", 
-   "fieldname": "mntc_date", 
-   "fieldtype": "Date", 
-   "label": "Maintenance Date", 
-   "no_copy": 1, 
-   "oldfieldname": "mntc_date", 
-   "oldfieldtype": "Date", 
-   "permlevel": 0, 
+   "default": "Today",
+   "fieldname": "mntc_date",
+   "fieldtype": "Date",
+   "label": "Maintenance Date",
+   "no_copy": 1,
+   "oldfieldname": "mntc_date",
+   "oldfieldtype": "Date",
+   "permlevel": 0,
    "reqd": 1
-  }, 
+  },
   {
-   "fieldname": "mntc_time", 
-   "fieldtype": "Time", 
-   "label": "Maintenance Time", 
-   "no_copy": 1, 
-   "oldfieldname": "mntc_time", 
-   "oldfieldtype": "Time", 
+   "fieldname": "mntc_time",
+   "fieldtype": "Time",
+   "label": "Maintenance Time",
+   "no_copy": 1,
+   "oldfieldname": "mntc_time",
+   "oldfieldtype": "Time",
    "permlevel": 0
-  }, 
+  },
   {
-   "fieldname": "maintenance_details", 
-   "fieldtype": "Section Break", 
-   "label": "Maintenance Details", 
-   "oldfieldtype": "Section Break", 
-   "options": "icon-wrench", 
+   "fieldname": "maintenance_details",
+   "fieldtype": "Section Break",
+   "label": "Maintenance Details",
+   "oldfieldtype": "Section Break",
+   "options": "icon-wrench",
    "permlevel": 0
-  }, 
+  },
   {
-   "fieldname": "completion_status", 
-   "fieldtype": "Select", 
-   "in_list_view": 1, 
-   "label": "Completion Status", 
-   "oldfieldname": "completion_status", 
-   "oldfieldtype": "Select", 
-   "options": "\nPartially Completed\nFully Completed", 
-   "permlevel": 0, 
+   "fieldname": "completion_status",
+   "fieldtype": "Select",
+   "in_list_view": 1,
+   "label": "Completion Status",
+   "oldfieldname": "completion_status",
+   "oldfieldtype": "Select",
+   "options": "\nPartially Completed\nFully Completed",
+   "permlevel": 0,
    "reqd": 1
-  }, 
+  },
   {
-   "fieldname": "column_break_14", 
-   "fieldtype": "Column Break", 
+   "fieldname": "column_break_14",
+   "fieldtype": "Column Break",
    "permlevel": 0
-  }, 
+  },
   {
-   "default": "Unscheduled", 
-   "fieldname": "maintenance_type", 
-   "fieldtype": "Select", 
-   "in_filter": 1, 
-   "in_list_view": 1, 
-   "label": "Maintenance Type", 
-   "oldfieldname": "maintenance_type", 
-   "oldfieldtype": "Select", 
-   "options": "\nScheduled\nUnscheduled\nBreakdown", 
-   "permlevel": 0, 
-   "reqd": 1, 
+   "default": "Unscheduled",
+   "fieldname": "maintenance_type",
+   "fieldtype": "Select",
+   "in_filter": 1,
+   "in_list_view": 1,
+   "label": "Maintenance Type",
+   "oldfieldname": "maintenance_type",
+   "oldfieldtype": "Select",
+   "options": "\nScheduled\nUnscheduled\nBreakdown",
+   "permlevel": 0,
+   "reqd": 1,
    "search_index": 0
-  }, 
+  },
   {
-   "fieldname": "section_break0", 
-   "fieldtype": "Section Break", 
-   "oldfieldtype": "Section Break", 
-   "options": "icon-wrench", 
+   "fieldname": "section_break0",
+   "fieldtype": "Section Break",
+   "oldfieldtype": "Section Break",
+   "options": "icon-wrench",
    "permlevel": 0
-  }, 
+  },
   {
-   "fieldname": "maintenance_visit_details", 
-   "fieldtype": "Table", 
-   "label": "Maintenance Visit Purpose", 
-   "oldfieldname": "maintenance_visit_details", 
-   "oldfieldtype": "Table", 
-   "options": "Maintenance Visit Purpose", 
-   "permlevel": 0
-  }, 
-  {
-   "fieldname": "more_info", 
-   "fieldtype": "Section Break", 
-   "label": "More Info", 
-   "oldfieldtype": "Section Break", 
-   "options": "icon-file-text", 
-   "permlevel": 0
-  }, 
-  {
-   "fieldname": "customer_feedback", 
-   "fieldtype": "Small Text", 
-   "label": "Customer Feedback", 
-   "oldfieldname": "customer_feedback", 
-   "oldfieldtype": "Small Text", 
-   "permlevel": 0
-  }, 
-  {
-   "fieldname": "col_break3", 
-   "fieldtype": "Column Break", 
-   "permlevel": 0
-  }, 
-  {
-   "default": "Draft", 
-   "fieldname": "status", 
-   "fieldtype": "Data", 
-   "label": "Status", 
-   "no_copy": 1, 
-   "oldfieldname": "status", 
-   "oldfieldtype": "Data", 
-   "options": "\nDraft\nCancelled\nSubmitted", 
-   "permlevel": 0, 
-   "read_only": 1, 
+   "fieldname": "maintenance_visit_details",
+   "fieldtype": "Table",
+   "label": "Maintenance Visit Purpose",
+   "oldfieldname": "maintenance_visit_details",
+   "oldfieldtype": "Table",
+   "options": "Maintenance Visit Purpose",
+   "permlevel": 0,
    "reqd": 1
-  }, 
+  },
   {
-   "fieldname": "amended_from", 
-   "fieldtype": "Data", 
-   "ignore_restrictions": 1, 
-   "label": "Amended From", 
-   "no_copy": 1, 
-   "oldfieldname": "amended_from", 
-   "oldfieldtype": "Data", 
-   "permlevel": 0, 
-   "print_hide": 1, 
-   "read_only": 1, 
+   "fieldname": "more_info",
+   "fieldtype": "Section Break",
+   "label": "More Info",
+   "oldfieldtype": "Section Break",
+   "options": "icon-file-text",
+   "permlevel": 0
+  },
+  {
+   "fieldname": "customer_feedback",
+   "fieldtype": "Small Text",
+   "label": "Customer Feedback",
+   "oldfieldname": "customer_feedback",
+   "oldfieldtype": "Small Text",
+   "permlevel": 0
+  },
+  {
+   "fieldname": "col_break3",
+   "fieldtype": "Column Break",
+   "permlevel": 0
+  },
+  {
+   "default": "Draft",
+   "fieldname": "status",
+   "fieldtype": "Data",
+   "label": "Status",
+   "no_copy": 1,
+   "oldfieldname": "status",
+   "oldfieldtype": "Data",
+   "options": "\nDraft\nCancelled\nSubmitted",
+   "permlevel": 0,
+   "read_only": 1,
+   "reqd": 1
+  },
+  {
+   "fieldname": "amended_from",
+   "fieldtype": "Data",
+   "ignore_restrictions": 1,
+   "label": "Amended From",
+   "no_copy": 1,
+   "oldfieldname": "amended_from",
+   "oldfieldtype": "Data",
+   "permlevel": 0,
+   "print_hide": 1,
+   "read_only": 1,
    "width": "150px"
-  }, 
+  },
   {
-   "fieldname": "company", 
-   "fieldtype": "Select", 
-   "in_filter": 1, 
-   "label": "Company", 
-   "oldfieldname": "company", 
-   "oldfieldtype": "Select", 
-   "options": "link:Company", 
-   "permlevel": 0, 
-   "print_hide": 1, 
-   "reqd": 1, 
+   "fieldname": "company",
+   "fieldtype": "Select",
+   "in_filter": 1,
+   "label": "Company",
+   "oldfieldname": "company",
+   "oldfieldtype": "Select",
+   "options": "link:Company",
+   "permlevel": 0,
+   "print_hide": 1,
+   "reqd": 1,
    "search_index": 0
-  }, 
+  },
   {
-   "fieldname": "fiscal_year", 
-   "fieldtype": "Select", 
-   "in_filter": 1, 
-   "label": "Fiscal Year", 
-   "oldfieldname": "fiscal_year", 
-   "oldfieldtype": "Select", 
-   "options": "link:Fiscal Year", 
-   "permlevel": 0, 
-   "print_hide": 1, 
-   "reqd": 1, 
+   "fieldname": "fiscal_year",
+   "fieldtype": "Select",
+   "in_filter": 1,
+   "label": "Fiscal Year",
+   "oldfieldname": "fiscal_year",
+   "oldfieldtype": "Select",
+   "options": "link:Fiscal Year",
+   "permlevel": 0,
+   "print_hide": 1,
+   "reqd": 1,
    "search_index": 0
-  }, 
+  },
   {
-   "depends_on": "customer", 
-   "fieldname": "contact_info_section", 
-   "fieldtype": "Section Break", 
-   "label": "Contact Info", 
-   "options": "icon-bullhorn", 
+   "depends_on": "customer",
+   "fieldname": "contact_info_section",
+   "fieldtype": "Section Break",
+   "label": "Contact Info",
+   "options": "icon-bullhorn",
    "permlevel": 0
-  }, 
+  },
   {
-   "fieldname": "customer_address", 
-   "fieldtype": "Link", 
-   "label": "Customer Address", 
-   "options": "Address", 
-   "permlevel": 0, 
+   "fieldname": "customer_address",
+   "fieldtype": "Link",
+   "label": "Customer Address",
+   "options": "Address",
+   "permlevel": 0,
    "print_hide": 1
-  }, 
+  },
   {
-   "fieldname": "contact_person", 
-   "fieldtype": "Link", 
-   "label": "Contact Person", 
-   "options": "Contact", 
-   "permlevel": 0, 
+   "fieldname": "contact_person",
+   "fieldtype": "Link",
+   "label": "Contact Person",
+   "options": "Contact",
+   "permlevel": 0,
    "print_hide": 1
-  }, 
+  },
   {
-   "fieldname": "col_break4", 
-   "fieldtype": "Column Break", 
+   "fieldname": "col_break4",
+   "fieldtype": "Column Break",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "<a href=\"#Sales Browser/Territory\">Add / Edit</a>", 
-   "fieldname": "territory", 
-   "fieldtype": "Link", 
-   "label": "Territory", 
-   "options": "Territory", 
-   "permlevel": 0, 
+   "description": "<a href=\"#Sales Browser/Territory\">Add / Edit</a>",
+   "fieldname": "territory",
+   "fieldtype": "Link",
+   "label": "Territory",
+   "options": "Territory",
+   "permlevel": 0,
    "print_hide": 1
-  }, 
+  },
   {
-   "description": "<a href=\"#Sales Browser/Customer Group\">Add / Edit</a>", 
-   "fieldname": "customer_group", 
-   "fieldtype": "Link", 
-   "label": "Customer Group", 
-   "options": "Customer Group", 
-   "permlevel": 0, 
+   "description": "<a href=\"#Sales Browser/Customer Group\">Add / Edit</a>",
+   "fieldname": "customer_group",
+   "fieldtype": "Link",
+   "label": "Customer Group",
+   "options": "Customer Group",
+   "permlevel": 0,
    "print_hide": 1
   }
- ], 
- "icon": "icon-file-text", 
- "idx": 1, 
- "is_submittable": 1, 
- "modified": "2014-01-20 17:48:57.000000", 
- "modified_by": "Administrator", 
- "module": "Support", 
- "name": "Maintenance Visit", 
- "owner": "ashwini@webnotestech.com", 
+ ],
+ "icon": "icon-file-text",
+ "idx": 1,
+ "is_submittable": 1,
+ "modified": "2014-01-20 17:48:57.000001",
+ "modified_by": "Administrator",
+ "module": "Support",
+ "name": "Maintenance Visit",
+ "owner": "ashwini@webnotestech.com",
  "permissions": [
   {
-   "amend": 1, 
-   "cancel": 1, 
-   "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "Maintenance User", 
-   "submit": 1, 
+   "amend": 1,
+   "cancel": 1,
+   "create": 1,
+   "delete": 1,
+   "email": 1,
+   "permlevel": 0,
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "Maintenance User",
+   "submit": 1,
    "write": 1
   }
- ], 
+ ],
  "search_fields": "status,maintenance_type,customer,customer_name, address,mntc_date,company,fiscal_year"
-}
\ No newline at end of file
+}
diff --git a/erpnext/support/doctype/maintenance_visit/maintenance_visit.py b/erpnext/support/doctype/maintenance_visit/maintenance_visit.py
index b11d656..625aa04 100644
--- a/erpnext/support/doctype/maintenance_visit/maintenance_visit.py
+++ b/erpnext/support/doctype/maintenance_visit/maintenance_visit.py
@@ -3,33 +3,24 @@
 
 from __future__ import unicode_literals
 import frappe
-
-from frappe.utils import cstr
-
-from frappe import msgprint
-
-	
+from frappe import _
 
 from erpnext.utilities.transaction_base import TransactionBase
 
 class MaintenanceVisit(TransactionBase):
-	
+
 	def get_item_details(self, item_code):
 		return frappe.db.get_value("Item", item_code, ["item_name", "description"], as_dict=1)
-			
+
 	def validate_serial_no(self):
 		for d in self.get('maintenance_visit_details'):
 			if d.serial_no and not frappe.db.exists("Serial No", d.serial_no):
 				frappe.throw("Serial No: "+ d.serial_no + " not exists in the system")
 
-	
-	def validate(self):
-		if not self.get('maintenance_visit_details'):
-			msgprint("Please enter maintenance details")
-			raise Exception
 
+	def validate(self):
 		self.validate_serial_no()
-	
+
 	def update_customer_issue(self, flag):
 		for d in self.get('maintenance_visit_details'):
 			if d.prevdoc_docname and d.prevdoc_doctype == 'Customer Issue' :
@@ -43,7 +34,7 @@
 						status = 'Work In Progress'
 				else:
 					nm = frappe.db.sql("select t1.name, t1.mntc_date, t2.service_person, t2.work_done from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 where t2.parent = t1.name and t1.completion_status = 'Partially Completed' and t2.prevdoc_docname = %s and t1.name!=%s and t1.docstatus = 1 order by t1.name desc limit 1", (d.prevdoc_docname, self.name))
-					
+
 					if nm:
 						status = 'Work In Progress'
 						mntc_date = nm and nm[0][1] or ''
@@ -54,9 +45,9 @@
 						mntc_date = ''
 						service_person = ''
 						work_done = ''
-				
+
 				frappe.db.sql("update `tabCustomer Issue` set resolution_date=%s, resolved_by=%s, resolution_details=%s, status=%s where name =%s",(mntc_date,service_person,work_done,status,d.prevdoc_docname))
-	
+
 
 	def check_if_last_visit(self):
 		"""check if last maintenance visit against same sales order/ customer issue"""
@@ -65,25 +56,25 @@
 			if d.prevdoc_docname:
 				check_for_docname = d.prevdoc_docname
 				check_for_doctype = d.prevdoc_doctype
-		
+
 		if check_for_docname:
 			check = frappe.db.sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 where t2.parent = t1.name and t1.name!=%s and t2.prevdoc_docname=%s and t1.docstatus = 1 and (t1.mntc_date > %s or (t1.mntc_date = %s and t1.mntc_time > %s))", (self.name, check_for_docname, self.mntc_date, self.mntc_date, self.mntc_time))
-			
+
 			if check:
 				check_lst = [x[0] for x in check]
 				check_lst =','.join(check_lst)
-				msgprint("To cancel this, you need to cancel Maintenance Visit(s) "+cstr(check_lst)+" created after this maintenance visit against same "+check_for_doctype)
+				frappe.throw(_("Cancel Material Visits {0} before cancelling this Maintenance Visit").format(check_lst))
 				raise Exception
 			else:
 				self.update_customer_issue(0)
-	
+
 	def on_submit(self):
-		self.update_customer_issue(1)		
+		self.update_customer_issue(1)
 		frappe.db.set(self, 'status', 'Submitted')
-	
+
 	def on_cancel(self):
-		self.check_if_last_visit()		
+		self.check_if_last_visit()
 		frappe.db.set(self, 'status', 'Cancelled')
 
 	def on_update(self):
-		pass
\ No newline at end of file
+		pass
diff --git a/erpnext/support/doctype/newsletter/newsletter.py b/erpnext/support/doctype/newsletter/newsletter.py
index 2dce58a..42f9f09 100644
--- a/erpnext/support/doctype/newsletter/newsletter.py
+++ b/erpnext/support/doctype/newsletter/newsletter.py
@@ -6,7 +6,7 @@
 import frappe
 import frappe.utils
 from frappe.utils import cstr
-from frappe import msgprint, throw, _
+from frappe import throw, _
 from frappe.model.document import Document
 
 class Newsletter(Document):
@@ -20,10 +20,7 @@
 		self.recipients = self.test_email_id.split(",")
 		self.send_to_doctype = "Lead"
 		self.send_bulk()
-		msgprint("{send} {email}".format**{
-			"send": _("Scheduled to send to"),
-			"email": self.test_email_id
-		})
+		frappe.msgprint(_("Scheduled to send to {0}").format(self.test_email_id))
 
 	def send_emails(self):
 		"""send emails to leads and customers"""
@@ -32,27 +29,23 @@
 
 		self.recipients = self.get_recipients()
 		self.send_bulk()
-		
-		msgprint("{send} {recipients} {doctype}(s)".format(**{
-			"send": _("Scheduled to send to"),
-			"recipients": len(self.recipients),
-			"doctype": self.send_to_doctype
-		}))
+
+		frappe.msgprint(_("Scheduled to send to {0} recipients").format(len(self.recipients)))
 
 		frappe.db.set(self, "email_sent", 1)
-	
+
 	def get_recipients(self):
 		self.email_field = None
 		if self.send_to_type=="Contact":
 			self.send_to_doctype = "Contact"
-			if self.contact_type == "Customer":		
-				return frappe.db.sql_list("""select email_id from tabContact 
+			if self.contact_type == "Customer":
+				return frappe.db.sql_list("""select email_id from tabContact
 					where ifnull(email_id, '') != '' and ifnull(customer, '') != ''""")
 
-			elif self.contact_type == "Supplier":		
-				return frappe.db.sql_list("""select email_id from tabContact 
+			elif self.contact_type == "Supplier":
+				return frappe.db.sql_list("""select email_id from tabContact
 					where ifnull(email_id, '') != '' and ifnull(supplier, '') != ''""")
-	
+
 		elif self.send_to_type=="Lead":
 			self.send_to_doctype = "Lead"
 			conditions = []
@@ -63,37 +56,37 @@
 
 			if conditions:
 				conditions = "".join(conditions)
-				
-			return frappe.db.sql_list("""select email_id from tabLead 
+
+			return frappe.db.sql_list("""select email_id from tabLead
 				where ifnull(email_id, '') != '' %s""" % (conditions or ""))
 
 		elif self.send_to_type=="Employee":
 			self.send_to_doctype = "Employee"
 			self.email_field = "company_email"
 
-			return frappe.db.sql_list("""select 
-				if(ifnull(company_email, '')!='', company_email, personal_email) as email_id 
+			return frappe.db.sql_list("""select
+				if(ifnull(company_email, '')!='', company_email, personal_email) as email_id
 				from `tabEmployee` where status='Active'""")
 
 		elif self.email_list:
 			email_list = [cstr(email).strip() for email in self.email_list.split(",")]
 			for email in email_list:
 				create_lead(email)
-					
+
 			self.send_to_doctype = "Lead"
 			return email_list
-	
+
 	def send_bulk(self):
 		self.validate_send()
 
 		sender = self.send_from or frappe.utils.get_formatted_email(self.owner)
-		
+
 		from frappe.utils.email_lib.bulk import send
-		
+
 		if not frappe.flags.in_test:
 			frappe.db.auto_commit_on_many_writes = True
 
-		send(recipients = self.recipients, sender = sender, 
+		send(recipients = self.recipients, sender = sender,
 			subject = self.subject, message = self.message,
 			doctype = self.send_to_doctype, email_field = self.email_field or "email_id",
 			ref_doctype = self.doctype, ref_docname = self.name)
@@ -103,19 +96,18 @@
 
 	def validate_send(self):
 		if self.get("__islocal"):
-			throw(_("Please save the Newsletter before sending."))
+			throw(_("Please save the Newsletter before sending"))
 
 		from frappe import conf
 		if (conf.get("status") or None) == "Trial":
-			throw(_("Sending newsletters is not allowed for Trial users, \
-				to prevent abuse of this feature."))
+			throw(_("Newsletters is not allowed for Trial users"))
 
 @frappe.whitelist()
 def get_lead_options():
 	return {
-		"sources": ["All"] + filter(None, 
+		"sources": ["All"] + filter(None,
 			frappe.db.sql_list("""select distinct source from tabLead""")),
-		"statuses": ["All"] + filter(None, 
+		"statuses": ["All"] + filter(None,
 			frappe.db.sql_list("""select distinct status from tabLead"""))
 	}
 
@@ -125,10 +117,10 @@
 	from email.utils import parseaddr
 	from frappe.model.naming import get_default_naming_series
 	real_name, email_id = parseaddr(email_id)
-	
+
 	if frappe.db.get_value("Lead", {"email_id": email_id}):
 		return
-	
+
 	lead = frappe.get_doc({
 		"doctype": "Lead",
 		"email_id": email_id,
@@ -138,4 +130,4 @@
 		"company": frappe.db.get_default("company"),
 		"source": "Email"
 	})
-	lead.insert()
\ No newline at end of file
+	lead.insert()
diff --git a/erpnext/support/doctype/support_email_settings/support_email_settings.py b/erpnext/support/doctype/support_email_settings/support_email_settings.py
index 1efa628..592c1a9 100644
--- a/erpnext/support/doctype/support_email_settings/support_email_settings.py
+++ b/erpnext/support/doctype/support_email_settings/support_email_settings.py
@@ -5,24 +5,24 @@
 
 from __future__ import unicode_literals
 import frappe
-
+from frappe import _
 from frappe.model.document import Document
 from frappe.utils.email_lib.receive import POP3Mailbox
 import _socket, poplib
 
 class SupportEmailSettings(Document):
-		
+
 	def validate(self):
 		"""
 			Checks support ticket email settings
 		"""
-		if self.sync_support_mails and self.mail_server:			
+		if self.sync_support_mails and self.mail_server:
 			inc_email = frappe.get_doc('Incoming Email Settings')
 			# inc_email.encode()
 			inc_email.host = self.mail_server
 			inc_email.use_ssl = self.use_ssl
 			try:
-				err_msg = 'User Name or Support Password missing. Please enter and try again.'
+				err_msg = _('User Name or Support Password missing. Please enter and try again.')
 				if not (self.mail_login and self.mail_password):
 					raise AttributeError, err_msg
 				inc_email.username = self.mail_login
@@ -32,14 +32,13 @@
 				raise
 
 			pop_mb = POP3Mailbox(inc_email)
-			
+
 			try:
 				pop_mb.connect()
 			except _socket.error, e:
 				# Invalid mail server -- due to refusing connection
-				frappe.msgprint('Invalid POP3 Mail Server. Please rectify and try again.')
+				frappe.msgprint(_('Invalid Mail Server. Please rectify and try again.'))
 				raise
 			except poplib.error_proto, e:
-				frappe.msgprint('Invalid User Name or Support Password. Please rectify and try again.')
+				frappe.msgprint(_('Invalid User Name or Support Password. Please rectify and try again.'))
 				raise
-		
\ No newline at end of file
diff --git a/erpnext/utilities/__init__.py b/erpnext/utilities/__init__.py
index e3a1e7f..e96ae83 100644
--- a/erpnext/utilities/__init__.py
+++ b/erpnext/utilities/__init__.py
@@ -1,27 +1,27 @@
 # ERPNext - web based ERP (http://erpnext.com)
 # Copyright (C) 2012 Web Notes Technologies Pvt Ltd
-# 
+#
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
-# 
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 from __future__ import unicode_literals
 import frappe
-from frappe import _, msgprint
+from frappe import _
 from frappe.utils import cint, comma_or
 
 def validate_status(status, options):
 	if status not in options:
-		msgprint(_("Status must be one of ") + comma_or(options), raise_exception=True)
+		frappe.throw(_("Status must be one of {0}").format(comma_or(options)))
 
 def build_filter_conditions(filters):
 	conditions, filter_values = [], []
@@ -30,4 +30,4 @@
 		filter_values.append(filters[key])
 
 	conditions = conditions and " and " + " and ".join(conditions) or ""
-	return conditions, filter_values
\ No newline at end of file
+	return conditions, filter_values
diff --git a/erpnext/utilities/doctype/address/address.py b/erpnext/utilities/doctype/address/address.py
index 04d54f2..0558574 100644
--- a/erpnext/utilities/doctype/address/address.py
+++ b/erpnext/utilities/doctype/address/address.py
@@ -4,8 +4,8 @@
 from __future__ import unicode_literals
 import frappe
 
-from frappe import msgprint, throw, _
-from frappe.utils import cstr, cint
+from frappe import throw, _
+from frappe.utils import cstr
 
 from frappe.model.document import Document
 
@@ -20,30 +20,30 @@
 			self.name = cstr(self.address_title).strip() + "-" + cstr(self.address_type).strip()
 		else:
 			throw(_("Address Title is mandatory."))
-		
+
 	def validate(self):
 		self.validate_primary_address()
 		self.validate_shipping_address()
-	
+
 	def validate_primary_address(self):
 		"""Validate that there can only be one primary address for particular customer, supplier"""
 		if self.is_primary_address == 1:
 			self._unset_other("is_primary_address")
-			
+
 		elif self.is_shipping_address != 1:
 			for fieldname in ["customer", "supplier", "sales_partner", "lead"]:
 				if self.get(fieldname):
 					if not frappe.db.sql("""select name from `tabAddress` where is_primary_address=1
-						and `%s`=%s and name!=%s""" % (fieldname, "%s", "%s"), 
+						and `%s`=%s and name!=%s""" % (fieldname, "%s", "%s"),
 						(self.get(fieldname), self.name)):
 							self.is_primary_address = 1
 					break
-				
+
 	def validate_shipping_address(self):
 		"""Validate that there can only be one shipping address for particular customer, supplier"""
 		if self.is_shipping_address == 1:
 			self._unset_other("is_shipping_address")
-			
+
 	def _unset_other(self, is_address_type):
 		for fieldname in ["customer", "supplier", "sales_partner", "lead"]:
 			if self.get(fieldname):
@@ -55,21 +55,21 @@
 def get_address_display(address_dict):
 	if not isinstance(address_dict, dict):
 		address_dict = frappe.db.get_value("Address", address_dict, "*", as_dict=True) or {}
-	
+
 	meta = frappe.get_meta("Address")
-	sequence = (("", "address_line1"), 
-		("\n", "address_line2"), 
+	sequence = (("", "address_line1"),
+		("\n", "address_line2"),
 		("\n", "city"),
-		("\n", "state"), 
-		("\n" + meta.get_label("pincode") + ": ", "pincode"), 
+		("\n", "state"),
+		("\n" + meta.get_label("pincode") + ": ", "pincode"),
 		("\n", "country"),
-		("\n" + meta.get_label("phone") + ": ", "phone"), 
+		("\n" + meta.get_label("phone") + ": ", "phone"),
 		("\n" + meta.get_label("fax") + ": ", "fax"))
-	
+
 	display = ""
 	for separator, fieldname in sequence:
 		if address_dict.get(fieldname):
 			display += separator + address_dict.get(fieldname)
-		
+
 	return display.strip()
 
diff --git a/erpnext/utilities/doctype/note/note.py b/erpnext/utilities/doctype/note/note.py
index f0c7f0e..280adf4 100644
--- a/erpnext/utilities/doctype/note/note.py
+++ b/erpnext/utilities/doctype/note/note.py
@@ -5,24 +5,24 @@
 
 from __future__ import unicode_literals
 import frappe
-
+from frappe import _
 from frappe.model.document import Document
 
 class Note(Document):
-		
+
 	def autoname(self):
 		# replace forbidden characters
 		import re
 		self.name = re.sub("[%'\"#*?`]", "", self.title.strip())
-		
+
 	def onload(self):
 		if not self.public and frappe.session.user != self.owner:
 			if frappe.session.user not in [d.user for d in self.get("share_with")]:
-				frappe.msgprint("You are not authorized to read this record.", raise_exception=True)
-	
+				frappe.throw(_("Not permitted"), frappe.PermissionError)
+
 	def validate(self):
 		if not self.get("__islocal"):
 			if frappe.session.user != self.owner:
-				if frappe.session.user not in frappe.db.sql_list("""select user from `tabNote User` 
+				if frappe.session.user not in frappe.db.sql_list("""select user from `tabNote User`
 					where parent=%s and permission='Edit'""", self.name):
-					frappe.msgprint("You are not authorized to edit this record.", raise_exception=True)
+					frappe.throw(_("Not permitted"), frappe.PermissionError)
diff --git a/erpnext/utilities/doctype/rename_tool/rename_tool.py b/erpnext/utilities/doctype/rename_tool/rename_tool.py
index 42c69f6..07d44c3 100644
--- a/erpnext/utilities/doctype/rename_tool/rename_tool.py
+++ b/erpnext/utilities/doctype/rename_tool/rename_tool.py
@@ -11,34 +11,32 @@
 
 class RenameTool(Document):
 	pass
-		
+
 @frappe.whitelist()
 def get_doctypes():
 	return frappe.db.sql_list("""select name from tabDocType
 		where ifnull(allow_rename,0)=1 and module!='Core' order by name""")
-		
+
 @frappe.whitelist()
 def upload(select_doctype=None, rows=None):
 	from frappe.utils.datautils import read_csv_content_from_uploaded_file
-	from frappe.modules import scrub
 	from frappe.model.rename_doc import rename_doc
 
 	if not select_doctype:
 		select_doctype = frappe.form_dict.select_doctype
-		
+
 	if not frappe.has_permission(select_doctype, "write"):
 		raise frappe.PermissionError
 
 	if not rows:
 		rows = read_csv_content_from_uploaded_file()
 	if not rows:
-		frappe.msgprint(_("Please select a valid csv file with data."))
-		raise Exception
-		
-	if len(rows) > 500:
-		frappe.msgprint(_("Max 500 rows only."))
-		raise Exception
-	
+		frappe.throw(_("Please select a valid csv file with data"))
+
+	max_rows = 500
+	if len(rows) > max_rows:
+		frappe.throw(_("Maximum {0} rows allowed").format(max_rows))
+
 	rename_log = []
 	for row in rows:
 		# if row has some content
@@ -53,5 +51,5 @@
 				rename_log.append("<span style='color: RED'>" + \
 					_("Failed: ") + row[0] + " -> " + row[1] + "</span>")
 				rename_log.append("<span style='margin-left: 20px;'>" + repr(e) + "</span>")
-	
-	return rename_log
\ No newline at end of file
+
+	return rename_log
diff --git a/erpnext/utilities/doctype/sms_control/sms_control.py b/erpnext/utilities/doctype/sms_control/sms_control.py
index ba858c6..e599eea 100644
--- a/erpnext/utilities/doctype/sms_control/sms_control.py
+++ b/erpnext/utilities/doctype/sms_control/sms_control.py
@@ -19,7 +19,7 @@
 			invalid_char_list = [' ', '+', '-', '(', ')']
 			for x in invalid_char_list:
 				d = d.replace(x, '')
-				
+
 			validated_receiver_list.append(d)
 
 		if not validated_receiver_list:
@@ -34,21 +34,18 @@
 			'ERPNXT'
 		if len(sender_name) > 6 and \
 				frappe.db.get_default("country") == "India":
-			throw(_("""
-				As per TRAI rule, sender name must be exactly 6 characters.
+			throw("""As per TRAI rule, sender name must be exactly 6 characters.
 				Kindly change sender name in Setup --> Global Defaults.
-				
-				Note: Hyphen, space, numeric digit, special characters are not allowed.
-			"""))
+				Note: Hyphen, space, numeric digit, special characters are not allowed.""")
 		return sender_name
-	
+
 	def get_contact_number(self, arg):
 		"returns mobile number of the contact"
 		args = json.loads(arg)
-		number = frappe.db.sql("""select mobile_no, phone from tabContact where name=%s and %s=%s""" % 
+		number = frappe.db.sql("""select mobile_no, phone from tabContact where name=%s and %s=%s""" %
 			('%s', args['key'], '%s'), (args['contact_name'], args['value']))
 		return number and (number[0][0] or number[0][1]) or ''
-	
+
 	def send_form_sms(self, arg):
 		"called from client side"
 		args = json.loads(arg)
@@ -72,7 +69,7 @@
 		args = {ss.message_parameter : arg.get('message')}
 		for d in ss.get("static_parameter_details"):
 			args[d.parameter] = d.value
-		
+
 		resp = []
 		for d in arg.get('receiver_list'):
 			args[ss.receiver_parameter] = d
diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py
index 1934f4c..f680bcb 100644
--- a/erpnext/utilities/transaction_base.py
+++ b/erpnext/utilities/transaction_base.py
@@ -15,26 +15,26 @@
 		if int(frappe.db.get_value("Notification Control", None, dt) or 0):
 			self.set("__notification_message",
 				frappe.db.get_value("Notification Control", None, dt + "_message"))
-							
+
 	def validate_posting_time(self):
 		if not self.posting_time:
 			self.posting_time = now_datetime().strftime('%H:%M:%S')
-			
+
 	def add_calendar_event(self, opts, force=False):
 		if self.contact_by != cstr(self._prev.contact_by) or \
 				self.contact_date != cstr(self._prev.contact_date) or force:
-			
+
 			self.delete_events()
 			self._add_calendar_event(opts)
-			
+
 	def delete_events(self):
-		frappe.delete_doc("Event", frappe.db.sql_list("""select name from `tabEvent` 
-			where ref_type=%s and ref_name=%s""", (self.doctype, self.name)), 
+		frappe.delete_doc("Event", frappe.db.sql_list("""select name from `tabEvent`
+			where ref_type=%s and ref_name=%s""", (self.doctype, self.name)),
 			ignore_permissions=True)
-			
+
 	def _add_calendar_event(self, opts):
 		opts = frappe._dict(opts)
-		
+
 		if self.contact_date:
 			event_doclist = frappe.get_doc({
 				"doctype": "Event",
@@ -46,18 +46,18 @@
 				"ref_type": self.doctype,
 				"ref_name": self.name
 			})
-			
+
 			if frappe.db.exists("User", self.contact_by):
 				event_doclist.append("event_individuals", {
 					"doctype": "Event User",
 					"person": self.contact_by
 				})
-			
+
 			event_doclist.insert()
-			
+
 	def validate_uom_is_integer(self, uom_field, qty_fields):
 		validate_uom_is_integer(self, uom_field, qty_fields)
-			
+
 	def validate_with_previous_doc(self, source_dt, ref):
 		for key, val in ref.items():
 			is_child = val.get("is_child_table")
@@ -71,27 +71,26 @@
 						if ref_dn not in item_ref_dn:
 							item_ref_dn.append(ref_dn)
 						elif not val.get("allow_duplicate_prev_row_id"):
-							frappe.msgprint(_("Row ") + cstr(d.idx + 1) + 
-								_(": Duplicate row from same ") + key, raise_exception=1)
+							frappe.throw(_("Duplicate row {0} with same {1}").format(d.idx, key))
 					elif ref_dn:
 						ref_doc.setdefault(key, [])
 						if ref_dn not in ref_doc[key]:
 							ref_doc[key].append(ref_dn)
 			if ref_doc:
 				self.compare_values(ref_doc, val["compare_fields"])
-	
+
 	def compare_values(self, ref_doc, fields, doc=None):
 		for ref_doctype, ref_dn_list in ref_doc.items():
 			for ref_docname in ref_dn_list:
-				prevdoc_values = frappe.db.get_value(ref_doctype, ref_docname, 
+				prevdoc_values = frappe.db.get_value(ref_doctype, ref_docname,
 					[d[0] for d in fields], as_dict=1)
 
 				for field, condition in fields:
 					if prevdoc_values[field] is not None:
 						self.validate_value(field, condition, prevdoc_values[field], doc)
-	
+
 def delete_events(ref_type, ref_name):
-	frappe.delete_doc("Event", frappe.db.sql_list("""select name from `tabEvent` 
+	frappe.delete_doc("Event", frappe.db.sql_list("""select name from `tabEvent`
 		where ref_type=%s and ref_name=%s""", (ref_type, ref_name)), for_reload=True)
 
 class UOMMustBeIntegerError(frappe.ValidationError): pass
@@ -99,11 +98,11 @@
 def validate_uom_is_integer(doc, uom_field, qty_fields):
 	if isinstance(qty_fields, basestring):
 		qty_fields = [qty_fields]
-	
+
 	distinct_uoms = list(set([d.get(uom_field) for d in doc.get_all_children()]))
-	integer_uoms = filter(lambda uom: frappe.db.get_value("UOM", uom, 
+	integer_uoms = filter(lambda uom: frappe.db.get_value("UOM", uom,
 		"must_be_whole_number") or None, distinct_uoms)
-		
+
 	if not integer_uoms:
 		return
 
@@ -112,7 +111,4 @@
 			for f in qty_fields:
 				if d.get(f):
 					if cint(d.get(f))!=d.get(f):
-						frappe.msgprint(_("For UOM") + " '" + d.get(uom_field) \
-							+ "': " + _("Quantity cannot be a fraction.") \
-							+ " " + _("In Row") + ": " + str(d.idx),
-							raise_exception=UOMMustBeIntegerError)
+						frappe.throw(_("Quantity cannot be a fraction in row {0}").format(d.idx), UOMMustBeIntegerError)
