[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];