[fixes] leave approver selection and cleaned up layout
diff --git a/erpnext/hr/doctype/employee/employee.py b/erpnext/hr/doctype/employee/employee.py
index 5e857f8..72a2686 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, today
 from frappe.model.naming import make_autoname
-from frappe import throw, _, msgprint
+from frappe import throw, _
 import frappe.permissions
 from frappe.model.document import Document
 from frappe.model.mapper import get_mapped_doc
@@ -139,8 +139,8 @@
 	def validate_employee_leave_approver(self):
 		for l in self.get("leave_approvers")[:]:
 			if "Leave Approver" not in frappe.get_roles(l.leave_approver):
-				self.get("leave_approvers").remove(l)
-				msgprint(_("{0} is not a valid Leave Approver. Removing row #{1}.").format(l.leave_approver, l.idx))
+				frappe.get_doc("User", l.leave_approver).add_roles("Leave Approver")
+
 
 	def validate_reports_to(self):
 		if self.reports_to == self.name:
diff --git a/erpnext/hr/doctype/leave_application/leave_application.js b/erpnext/hr/doctype/leave_application/leave_application.js
index 2b4bbbd..7e72064 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.js
+++ b/erpnext/hr/doctype/leave_application/leave_application.js
@@ -3,6 +3,10 @@
 
 cur_frm.add_fetch('employee','employee_name','employee_name');
 
+frappe.ui.form.on("Leave Application", "leave_approver", function(frm) {
+	frm.set_value("leave_approver_name", frappe.user.full_name(frm.doc.leave_approver));
+});
+
 cur_frm.cscript.onload = function(doc, dt, dn) {
 	if(!doc.posting_date)
 		set_multiple(dt,dn,{posting_date:get_today()});
@@ -13,7 +17,10 @@
 
 	cur_frm.set_query("leave_approver", function() {
 		return {
-			filters: [["UserRole", "role", "=", "Leave Approver"]]
+			query: "erpnext.hr.doctype.leave_application.leave_application.get_approvers",
+			filters: {
+				employee: cur_frm.doc.employee
+			}
 		};
 	});
 
@@ -106,18 +113,3 @@
 }
 
 cur_frm.fields_dict.employee.get_query = erpnext.queries.employee;
-
-frappe.ui.form.on("Leave Application", "leave_approver", function(frm) {
-	frappe.call({
-		"method": "frappe.client.get",
-		args: {
-			doctype: "User",
-			name: frm.doc.leave_approver
-		},
-		callback: function (data) {
-			frappe.model.set_value(frm.doctype, frm.docname, "leave_approver_name",
-				data.message.first_name
-				+ (data.message.last_name ? (" " + data.message.last_name) : ""))
-		}
-	})
-})
diff --git a/erpnext/hr/doctype/leave_application/leave_application.json b/erpnext/hr/doctype/leave_application/leave_application.json
index cb15d42..cd32b9c 100644
--- a/erpnext/hr/doctype/leave_application/leave_application.json
+++ b/erpnext/hr/doctype/leave_application/leave_application.json
@@ -17,17 +17,8 @@
    "permlevel": 1
   }, 
   {
-   "description": "Leave can be approved by users with Role, \"Leave Approver\"", 
-   "fieldname": "leave_approver", 
-   "fieldtype": "Link", 
-   "label": "Leave Approver", 
-   "options": "User", 
-   "permlevel": 0
-  }, 
-  {
-   "fieldname": "leave_approver_name", 
-   "fieldtype": "Read Only", 
-   "label": "Leave Approver Name", 
+   "fieldname": "column_break_12", 
+   "fieldtype": "Column Break", 
    "permlevel": 0, 
    "precision": ""
   }, 
@@ -44,6 +35,20 @@
    "search_index": 1
   }, 
   {
+   "fieldname": "leave_balance", 
+   "fieldtype": "Float", 
+   "label": "Leave Balance Before Application", 
+   "no_copy": 1, 
+   "permlevel": 0, 
+   "read_only": 1
+  }, 
+  {
+   "fieldname": "section_break_5", 
+   "fieldtype": "Section Break", 
+   "permlevel": 0, 
+   "precision": ""
+  }, 
+  {
    "fieldname": "from_date", 
    "fieldtype": "Date", 
    "in_list_view": 1, 
@@ -68,6 +73,15 @@
    "permlevel": 0
   }, 
   {
+   "fieldname": "total_leave_days", 
+   "fieldtype": "Float", 
+   "in_list_view": 1, 
+   "label": "Total Leave Days", 
+   "no_copy": 1, 
+   "permlevel": 0, 
+   "read_only": 1
+  }, 
+  {
    "fieldname": "column_break1", 
    "fieldtype": "Column Break", 
    "permlevel": 0, 
@@ -81,6 +95,12 @@
    "permlevel": 0
   }, 
   {
+   "fieldname": "section_break_7", 
+   "fieldtype": "Section Break", 
+   "permlevel": 0, 
+   "precision": ""
+  }, 
+  {
    "fieldname": "employee", 
    "fieldtype": "Link", 
    "in_filter": 1, 
@@ -101,38 +121,33 @@
    "search_index": 0
   }, 
   {
-   "fieldname": "leave_balance", 
-   "fieldtype": "Float", 
-   "label": "Leave Balance Before Application", 
-   "no_copy": 1, 
+   "fieldname": "column_break_15", 
+   "fieldtype": "Column Break", 
    "permlevel": 0, 
-   "read_only": 1
+   "precision": ""
   }, 
   {
-   "fieldname": "total_leave_days", 
-   "fieldtype": "Float", 
-   "in_list_view": 1, 
-   "label": "Total Leave Days", 
-   "no_copy": 1, 
+   "description": "", 
+   "fieldname": "leave_approver", 
+   "fieldtype": "Link", 
+   "label": "Leave Approver", 
+   "options": "User", 
+   "permlevel": 0
+  }, 
+  {
+   "fieldname": "leave_approver_name", 
+   "fieldtype": "Read Only", 
+   "label": "Leave Approver Name", 
    "permlevel": 0, 
-   "read_only": 1
+   "precision": ""
   }, 
   {
    "fieldname": "sb10", 
    "fieldtype": "Section Break", 
-   "label": "More Info", 
+   "label": "", 
    "permlevel": 0
   }, 
   {
-   "allow_on_submit": 1, 
-   "default": "1", 
-   "fieldname": "follow_via_email", 
-   "fieldtype": "Check", 
-   "label": "Follow via Email", 
-   "permlevel": 0, 
-   "print_hide": 1
-  }, 
-  {
    "default": "Today", 
    "fieldname": "posting_date", 
    "fieldtype": "Date", 
@@ -153,6 +168,15 @@
    "search_index": 0
   }, 
   {
+   "allow_on_submit": 1, 
+   "default": "1", 
+   "fieldname": "follow_via_email", 
+   "fieldtype": "Check", 
+   "label": "Follow via Email", 
+   "permlevel": 0, 
+   "print_hide": 1
+  }, 
+  {
    "fieldname": "column_break_17", 
    "fieldtype": "Column Break", 
    "permlevel": 0
@@ -192,7 +216,7 @@
  "idx": 1, 
  "is_submittable": 1, 
  "max_attachments": 3, 
- "modified": "2015-02-05 05:11:40.611487", 
+ "modified": "2015-04-30 02:19:39.330689", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Leave Application", 
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
index d3bf358..c75c2bd 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ b/erpnext/hr/doctype/leave_application/leave_application.py
@@ -204,6 +204,17 @@
 		post(**{"txt": args.message, "contact": args.message_to, "subject": args.subject,
 			"notify": cint(self.follow_via_email)})
 
+@frappe.whitelist()
+def get_approvers(doctype, txt, searchfield, start, page_len, filters):
+	if not filters.get("employee"):
+		frappe.throw(_("Please select Employee Record first."))
+
+	return frappe.db.sql("""select user.name, user.first_name, user.last_name from
+		tabUser user, `tabEmployee Leave Approver` approver where
+		approver.parent = %s
+		and user.name like %s
+		and approver.leave_approver=user.name""", (filters.get("employee"), "%" + txt + "%"))
+
 def get_holidays(leave_app):
 	tot_hol = frappe.db.sql("""select count(*) from `tabHoliday` h1, `tabHoliday List` h2, `tabEmployee` e1
 		where e1.name = %s and h1.parent = h2.name and e1.holiday_list = h2.name
diff --git a/erpnext/hr/doctype/leave_application/leave_application_list.js b/erpnext/hr/doctype/leave_application/leave_application_list.js
index e0558a7..f82dfb2 100644
--- a/erpnext/hr/doctype/leave_application/leave_application_list.js
+++ b/erpnext/hr/doctype/leave_application/leave_application_list.js
@@ -1,6 +1,6 @@
 frappe.listview_settings['Leave Application'] = {
 	add_fields: ["status", "leave_type", "employee", "employee_name", "total_leave_days", "from_date"],
-	filters:[["status","!=", "Rejected"], ["to_date", ">=", frappe.datetime.get_today()]],
+	filters:[["status","!=", "Rejected"]],
 	get_indicator: function(doc) {
 		return [__(doc.status), frappe.utils.guess_colour(doc.status),
 			"status,=," + doc.status];