diff --git a/accounts/page/voucher_import_tool/voucher_import_tool.py b/accounts/page/voucher_import_tool/voucher_import_tool.py
index 62cf7c6..0a2178a 100644
--- a/accounts/page/voucher_import_tool/voucher_import_tool.py
+++ b/accounts/page/voucher_import_tool/voucher_import_tool.py
@@ -1,5 +1,6 @@
 from __future__ import unicode_literals
 import webnotes
+from webnotes import _
 from webnotes.utils import flt, comma_and
 
 @webnotes.whitelist()
@@ -244,7 +245,10 @@
 				accounts = [c for c in rows[i+1] if c.endswith(" - " + company_abbr)]
 				
 				if accounts and (len(columns) != rows[i+1].index(accounts[0])):
-					raise Exception, """All account columns should be after standard columns and \
-						on the right. Please rectify it in the file and try again."""
+					raise Exception, _("""All account columns should be after \
+						standard columns and on the right.
+						If you entered it properly, next probable reason \
+						could be wrong account name.
+						Please rectify it in the file and try again.""")
 				
 	return data, start_row_idx
\ No newline at end of file
diff --git a/hr/doctype/attendance/attendance.py b/hr/doctype/attendance/attendance.py
index 289a14e..67af429 100644
--- a/hr/doctype/attendance/attendance.py
+++ b/hr/doctype/attendance/attendance.py
@@ -17,87 +17,70 @@
 from __future__ import unicode_literals
 import webnotes
 
-from webnotes.utils import add_days, getdate, now
-from webnotes.model import db_exists
+from webnotes.utils import getdate, nowdate
 from webnotes.model.doc import make_autoname
-from webnotes.model.bean import copy_doclist
-from webnotes import msgprint
+from webnotes import msgprint, _
 
 sql = webnotes.conn.sql
-	
-
 
 class DocType:
 	def __init__(self, doc, doclist=[]):
 		self.doc = doc
 		self.doclist = doclist
 		
-	#autoname function
 	def autoname(self):
 		self.doc.name = make_autoname(self.doc.naming_series+'.#####')
-	
-	#get employee name based on employee id selected 
+
 	def get_emp_name(self):
-		emp_nm = sql("select employee_name from `tabEmployee` where name=%s", self.doc.employee)
-
-		#this is done because sometimes user entered wrong employee name while uploading employee attendance
-		webnotes.conn.set(self.doc, 'employee_name', emp_nm and emp_nm[0][0] or '')
-
-		ret = { 'employee_name' : emp_nm and emp_nm[0][0] or ''}
-		return ret
+		return {
+			"employee_name": webnotes.conn.get_value("Employee", 
+				self.doc.employee_name, "employee_name")
+		}
 	
-	#validation for duplicate record
 	def validate_duplicate_record(self):	 
-		res = sql("select name from `tabAttendance` where employee = '%s' and att_date = '%s' and not name = '%s' and docstatus = 1"%(self.doc.employee,self.doc.att_date, self.doc.name))
+		res = sql("""select name from `tabAttendance` where employee = %s and att_date = %s 
+			and name != %s and docstatus = 1""", 
+			(self.doc.employee, self.doc.att_date, self.doc.name))
 		if res:
-			msgprint("Employee's attendance already marked.")
-			raise Exception
+			msgprint(_("Attendance for the employee: ") + self.doc.employee + 
+				_(" already marked"), raise_exception=1)
 			
-	
-	#check for already record present in leave transaction for same date
 	def check_leave_record(self):
 		if self.doc.status == 'Present':
-			chk = sql("select name from `tabLeave Application` where employee=%s and (from_date <= %s and to_date >= %s) and docstatus!=2", (self.doc.employee, self.doc.att_date, self.doc.att_date))
-			if chk:
-				msgprint("Leave Application created for employee "+self.doc.employee+" whom you are trying to mark as 'Present' ")
-				raise Exception
+			leave = sql("""select name from `tabLeave Application` 
+				where employee = %s and %s between from_date and to_date and status = 'Approved' 
+				and docstatus = 1""", (self.doc.employee, self.doc.att_date))
+			
+			if leave:
+				webnotes.msgprint(_("Employee: ") + self.doc.employee + _(" was on leave on ")
+					+ self.doc.att_date + _(". You can not mark his attendance as 'Present'"), 
+					raise_exception=1)
 	
-				 
 	def validate_fiscal_year(self):
 		from accounts.utils import validate_fiscal_year
 		validate_fiscal_year(self.doc.att_date, self.doc.fiscal_year)
 	
 	def validate_att_date(self):
-		import datetime
-		if getdate(self.doc.att_date)>getdate(datetime.datetime.now().date().strftime('%Y-%m-%d')):
-			msgprint("Attendance can not be marked for future dates")
-			raise Exception
+		if getdate(self.doc.att_date) > getdate(nowdate()):
+			msgprint(_("Attendance can not be marked for future dates"), raise_exception=1)
 
-	# Validate employee
-	#-------------------
 	def validate_employee(self):
-		emp = sql("select name, status from `tabEmployee` where name = '%s'" % self.doc.employee)
+		emp = sql("select name from `tabEmployee` where name = %s and status = 'Active'",
+		 	self.doc.employee)
 		if not emp:
-			msgprint("Employee: %s does not exists in the system" % self.doc.employee, raise_exception=1)
-		elif emp[0][1] != 'Active':
-			msgprint("Employee: %s is not Active" % self.doc.employee, raise_exception=1)
+			msgprint(_("Employee: ") + self.doc.employee + 
+				_(" not active or does not exists in the system"), raise_exception=1)
 			
 	def validate(self):
 		import utilities
 		utilities.validate_status(self.doc.status, ["Present", "Absent", "Half Day"])
-
 		self.validate_fiscal_year()
 		self.validate_att_date()
 		self.validate_duplicate_record()
 		self.check_leave_record()
 		
 	def on_update(self):
-		#self.validate()
-		
-		#this is done because sometimes user entered wrong employee name while uploading employee attendance
-		x=self.get_emp_name()
-
-	def on_submit(self):
-		#this is done because while uploading attendance chnage docstatus to 1 i.e. submit
-		webnotes.conn.set(self.doc,'docstatus',1)
-		pass
+		# this is done because sometimes user entered wrong employee name 
+		# while uploading employee attendance
+		employee_name = webnotes.conn.get_value("Employee", self.doc.employee, "employee_name")
+		webnotes.conn.set(self.doc, 'employee_name', employee_name)
\ No newline at end of file
