diff --git a/erpnext/hr/report/employee_leave_balance_summary/__init__.py b/erpnext/hr/report/employee_leave_balance_summary/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.js b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.js new file mode 100644 index 00000000000..838f4ad1476 --- /dev/null +++ b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.js @@ -0,0 +1,36 @@ +// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt +/* eslint-disable */ + +frappe.query_reports['Employee Leave Balance Summary'] = { + filters: [ + { + fieldname:'company', + label: __('Company'), + fieldtype: 'Link', + options: 'Company', + reqd: 1, + default: frappe.defaults.get_user_default('Company') + }, + { + fieldname:'employee', + label: __('Employee'), + fieldtype: 'Link', + options: 'Employee', + }, + { + fieldname:'from_date', + label: __('From Date'), + fieldtype: 'Date', + reqd: 1, + default: frappe.defaults.get_default('year_start_date') + }, + { + fieldname:'to_date', + label: __('To Date'), + fieldtype: 'Date', + reqd: 1, + default: frappe.defaults.get_default('year_end_date') + } + ] +}; diff --git a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.json b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.json new file mode 100644 index 00000000000..60fe1ae25ce --- /dev/null +++ b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.json @@ -0,0 +1,34 @@ +{ + "add_total_row": 0, + "creation": "2019-09-05 11:18:06.209397", + "disable_prepared_report": 0, + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "idx": 0, + "is_standard": "Yes", + "letter_head": "sapcon-old", + "modified": "2019-09-05 11:18:06.209397", + "modified_by": "Administrator", + "module": "HR", + "name": "Employee Leave Balance Summary", + "owner": "Administrator", + "prepared_report": 0, + "ref_doctype": "Employee", + "report_name": "Employee Leave Balance Summary", + "report_type": "Script Report", + "roles": [ + { + "role": "Employee" + }, + { + "role": "HR Manager" + }, + { + "role": "HR User" + }, + { + "role": "Leave Approver" + } + ] +} \ No newline at end of file diff --git a/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py new file mode 100644 index 00000000000..64a5c1c13ac --- /dev/null +++ b/erpnext/hr/report/employee_leave_balance_summary/employee_leave_balance_summary.py @@ -0,0 +1,96 @@ +# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.utils import flt +from frappe import _ +from erpnext.hr.doctype.leave_application.leave_application import get_leaves_for_period + +from erpnext.hr.report.employee_leave_balance.employee_leave_balance import get_total_allocated_leaves + +def execute(filters=None): + if filters.to_date <= filters.from_date: + frappe.throw(_('From date can not be greater than than To date')) + + columns = get_columns() + data = get_data(filters) + + return columns, data + +def get_columns(): + columns = [{ + 'label': _('Leave Type'), + 'fieldtype': 'Link', + 'fieldname': 'leave_type', + 'width': 300, + 'options': 'Leave Type' + }, { + 'label': _('Employee'), + 'fieldtype': 'Link', + 'fieldname': 'employee', + 'width': 100, + 'options': 'Employee' + }, { + 'label': _('Employee Name'), + 'fieldtype': 'Data', + 'fieldname': 'employee_name', + 'width': 100, + }, { + 'label': _('Opening Balance'), + 'fieldtype': 'float', + 'fieldname': 'opening_balance', + 'width': 160, + }, { + 'label': _('Leaves Taken'), + 'fieldtype': 'float', + 'fieldname': 'leaves_taken', + 'width': 160, + }, { + 'label': _('Closing Balance'), + 'fieldtype': 'float', + 'fieldname': 'closing_balance', + 'width': 160, + }] + + return columns + +def get_data(filters): + leave_types = frappe.db.sql_list("SELECT `name` FROM `tabLeave Type` ORDER BY `name` ASC") + + conditions = { + 'status': 'Active', + } + + if filters.get('employee'): + conditions['name'] = filters.get('employee') + + active_employees = frappe.get_all('Employee', + filters=conditions, + fields=['name', 'employee_name', 'department', 'user_id']) + + data = [] + + for leave_type in leave_types: + data.append({ + 'leave_type': leave_type + }) + for employee in active_employees: + row = frappe._dict({ + 'employee': employee.name, + 'employee_name': employee.employee_name + }) + + leaves_taken = get_leaves_for_period(employee.name, leave_type, + filters.from_date, filters.to_date) * -1 + + opening = get_total_allocated_leaves(employee.name, leave_type, filters.from_date, filters.to_date) + closing = flt(opening) - flt(leaves_taken) + + row.opening_balance = opening + row.leaves_taken = leaves_taken + row.closing_balance = closing + row.indent = 1 + data.append(row) + + return data