Fixes in patches for migration
diff --git a/erpnext/hr/doctype/employee/employee.py b/erpnext/hr/doctype/employee/employee.py
index 4e0c268..01ab91d 100644
--- a/erpnext/hr/doctype/employee/employee.py
+++ b/erpnext/hr/doctype/employee/employee.py
@@ -6,7 +6,7 @@
 
 from frappe.utils import getdate, validate_email_add, cint
 from frappe.model.naming import make_autoname
-from frappe import throw, _
+from frappe import throw, _, msgprint
 import frappe.permissions
 from frappe.model.document import Document
 from frappe.model.mapper import get_mapped_doc
@@ -144,12 +144,12 @@
 			throw(_("User {0} is already assigned to Employee {1}").format(self.user_id, employee[0]))
 
 	def validate_employee_leave_approver(self):
-		from frappe.utils.user import User
 		from erpnext.hr.doctype.leave_application.leave_application import InvalidLeaveApproverError
 
-		for l in self.get("employee_leave_approvers"):
-			if "Leave Approver" not in User(l.leave_approver).get_roles():
-				throw(_("{0} is not a valid Leave Approver").format(l.leave_approver), InvalidLeaveApproverError)
+		for l in self.get("employee_leave_approvers")[:]:
+			if "Leave Approver" not in frappe.get_roles(l.leave_approver):
+				self.get("employee_leave_approvers").remove(l)
+				msgprint(_("{0} is not a valid Leave Approver. Removing row #{1}.").format(l.leave_approver, l.idx))
 
 	def update_dob_event(self):
 		if self.status == "Active" and self.date_of_birth \
diff --git a/erpnext/patches/v4_0/apply_user_permissions.py b/erpnext/patches/v4_0/apply_user_permissions.py
index e32e3e1..36c7781 100644
--- a/erpnext/patches/v4_0/apply_user_permissions.py
+++ b/erpnext/patches/v4_0/apply_user_permissions.py
@@ -25,7 +25,7 @@
 	frappe.clear_cache()
 
 	# save employees to run on_update events
-	for employee in frappe.db.sql_list("""select name from `tabEmployee`"""):
+	for employee in frappe.db.sql_list("""select name from `tabEmployee` where docstatus < 2"""):
 		try:
 			frappe.get_doc("Employee", employee).save()
 		except EmployeeUserDisabledError:
diff --git a/erpnext/patches/v4_0/remove_employee_role_if_no_employee.py b/erpnext/patches/v4_0/remove_employee_role_if_no_employee.py
index 76ec1a7..c1f3689 100644
--- a/erpnext/patches/v4_0/remove_employee_role_if_no_employee.py
+++ b/erpnext/patches/v4_0/remove_employee_role_if_no_employee.py
@@ -9,7 +9,10 @@
 	for user in frappe.db.sql_list("select distinct parent from `tabUserRole` where role='Employee'"):
 		# if employee record does not exists, remove employee role!
 		if not frappe.db.get_value("Employee", {"user_id": user}):
-			user = frappe.get_doc("User", user)
-			for role in user.get("user_roles", {"role": "Employee"}):
-				user.get("user_roles").remove(role)
-			user.save()
+			try:
+				user = frappe.get_doc("User", user)
+				for role in user.get("user_roles", {"role": "Employee"}):
+					user.get("user_roles").remove(role)
+				user.save()
+			except frappe.DoesNotExistError:
+				pass