diff --git a/erpnext/hr/doctype/employee/employee.js b/erpnext/hr/doctype/employee/employee.js old mode 100644 new mode 100755 index 55bc7aa16c..0fedfd6e61 --- a/erpnext/hr/doctype/employee/employee.js +++ b/erpnext/hr/doctype/employee/employee.js @@ -11,9 +11,12 @@ erpnext.hr.EmployeeController = frappe.ui.form.Controller.extend({ }, onload: function() { - this.frm.set_query("leave_approver", "leave_approvers", function() { + this.frm.set_query("leave_approver", "leave_approvers", function(doc) { return { - filters: [["UserRole", "role", "=", "Leave Approver"]] + query:"erpnext.hr.doctype.employee_leave_approver.employee_leave_approver.get_approvers", + filters:{ + user: doc.user_id + } } }); }, diff --git a/erpnext/hr/doctype/employee_leave_approver/employee_leave_approver.py b/erpnext/hr/doctype/employee_leave_approver/employee_leave_approver.py old mode 100644 new mode 100755 index 4d0178fee8..061f606156 --- a/erpnext/hr/doctype/employee_leave_approver/employee_leave_approver.py +++ b/erpnext/hr/doctype/employee_leave_approver/employee_leave_approver.py @@ -9,4 +9,16 @@ import frappe from frappe.model.document import Document class EmployeeLeaveApprover(Document): - pass \ No newline at end of file + pass + +def get_approvers(doctype, txt, searchfield, start, page_len, filters): + return get_approver_list(filters.get("user")) + + +def get_approver_list(name): + return frappe.db.sql("""select user.name, user.first_name, user.last_name from + tabUser user, tabUserRole user_role where + user_role.role = "Leave Approver" + and user_role.parent = user.name and + user.name != %s + """, name) \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_application/leave_application.js b/erpnext/hr/doctype/leave_application/leave_application.js index 9d440179d6..79c6d959c0 100755 --- a/erpnext/hr/doctype/leave_application/leave_application.js +++ b/erpnext/hr/doctype/leave_application/leave_application.js @@ -31,7 +31,9 @@ frappe.ui.form.on("Leave Application", { }, leave_approver: function(frm) { - frm.set_value("leave_approver_name", frappe.user.full_name(frm.doc.leave_approver)); + if(frm.doc.leave_approver){ + frm.set_value("leave_approver_name", frappe.user.full_name(frm.doc.leave_approver)); + } }, employee: function(frm) { diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py index 950400df44..5bf7e9ddfa 100755 --- a/erpnext/hr/doctype/leave_application/leave_application.py +++ b/erpnext/hr/doctype/leave_application/leave_application.py @@ -9,6 +9,7 @@ from frappe.utils import cint, cstr, date_diff, flt, formatdate, getdate, get_li from erpnext.hr.utils import set_employee_name from erpnext.hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee +from erpnext.hr.doctype.employee_leave_approver.employee_leave_approver import get_approver_list class LeaveDayBlockedError(frappe.ValidationError): pass @@ -247,12 +248,18 @@ 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 + employee_user = frappe.get_value("Employee", filters.get("employee"), "user_id") + + approvers_list = 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 + "%")) + if not approvers_list: + approvers_list = get_approver_list(employee_user) + return approvers_list + @frappe.whitelist() def get_number_of_leave_days(employee, leave_type, from_date, to_date, half_day=None): if half_day: