From 1f3f18534b5e8126be014d95870359ed4830a88d Mon Sep 17 00:00:00 2001 From: Zarrar Date: Sun, 20 May 2018 10:45:14 +0530 Subject: [PATCH] [Fix] Leave Application & Expense Claim query fix | Leave Balance Report fix (#14149) * move set_query to setup function * rectify leave balance report according to deparmtent changes --- .../hr/doctype/expense_claim/expense_claim.js | 18 ++++++------- .../leave_application/leave_application.js | 24 ++++++++++-------- .../employee_leave_balance.py | 25 ++++++++++++++++--- 3 files changed, 43 insertions(+), 24 deletions(-) diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.js b/erpnext/hr/doctype/expense_claim/expense_claim.js index f9d1c43d63..0da8ac2335 100644 --- a/erpnext/hr/doctype/expense_claim/expense_claim.js +++ b/erpnext/hr/doctype/expense_claim/expense_claim.js @@ -147,6 +147,15 @@ frappe.ui.form.on("Expense Claim", { ] }; }); + frm.set_query("expense_approver", function() { + return { + query: "erpnext.hr.doctype.department_approver.department_approver.get_approvers", + filters: { + employee: frm.doc.employee, + doctype: frm.doc.doctype + } + }; + }); }, onload: function(frm) { @@ -163,15 +172,6 @@ frappe.ui.form.on("Expense Claim", { } }); } - frm.set_query("expense_approver", function() { - return { - query: "erpnext.hr.doctype.department_approver.department_approver.get_approvers", - filters: { - employee: frm.doc.employee, - doctype: frm.doc.doctype - } - }; - }); }, refresh: function(frm) { diff --git a/erpnext/hr/doctype/leave_application/leave_application.js b/erpnext/hr/doctype/leave_application/leave_application.js index 7a6b24658b..0b48706fd8 100755 --- a/erpnext/hr/doctype/leave_application/leave_application.js +++ b/erpnext/hr/doctype/leave_application/leave_application.js @@ -5,6 +5,19 @@ cur_frm.add_fetch('employee','employee_name','employee_name'); cur_frm.add_fetch('employee','company','company'); frappe.ui.form.on("Leave Application", { + setup: function(frm) { + frm.set_query("leave_approver", function() { + return { + query: "erpnext.hr.doctype.department_approver.department_approver.get_approvers", + filters: { + employee: frm.doc.employee, + doctype: frm.doc.doctype + } + }; + }); + + frm.set_query("employee", erpnext.queries.employee); + }, onload: function(frm) { if (!frm.doc.posting_date) { frm.set_value("posting_date", frappe.datetime.get_today()); @@ -22,17 +35,6 @@ frappe.ui.form.on("Leave Application", { } }); } - frm.set_query("leave_approver", function() { - return { - query: "erpnext.hr.doctype.department_approver.department_approver.get_approvers", - filters: { - employee: frm.doc.employee, - doctype: frm.doc.doctype - } - }; - }); - - frm.set_query("employee", erpnext.queries.employee); }, validate: function(frm) { diff --git a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py index 8105e1a963..a603015657 100644 --- a/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py +++ b/erpnext/hr/report/employee_leave_balance/employee_leave_balance.py @@ -39,8 +39,7 @@ def get_data(filters, leave_types): data = [] for employee in active_employees: - leave_approvers = [l.leave_approver for l in frappe.db.sql("""select leave_approver from `tabEmployee Leave Approver` where parent = %s""", - (employee.name),as_dict=True)] + leave_approvers = get_approvers(employee.department) if (len(leave_approvers) and user in leave_approvers) or (user in ["Administrator", employee.user_id]) or ("HR Manager" in frappe.get_roles(user)): row = [employee.name, employee.employee_name, employee.department] @@ -54,7 +53,25 @@ def get_data(filters, leave_types): allocation_records_based_on_to_date.get(employee.name, frappe._dict())) row += [leaves_taken, closing] - + data.append(row) - return data \ No newline at end of file + return data + +def get_approvers(department): + if not department: + return [] + + approvers = [] + # get current department and all its child + department_details = frappe.db.get_value("Department", {"name": department}, ["lft", "rgt"], as_dict=True) + department_list = frappe.db.sql("""select name from `tabDepartment` + where lft >= %s and rgt <= %s order by lft desc + """, (department_details.lft, department_details.rgt), as_list = True) + + # retrieve approvers list from current department and from its subsequent child departments + for d in department_list: + approvers.extend([l.leave_approver for l in frappe.db.sql("""select approver from `tabDepartment Approver` \ + where parent = %s and parentfield = 'leave_approver'""", (d), as_dict=True)]) + + return approvers