Skip to content

Commit

Permalink
refactor: remove unnecessary approver queries
Browse files Browse the repository at this point in the history
(cherry picked from commit 874a07a)
  • Loading branch information
ruchamahabal authored and mergify[bot] committed Nov 17, 2023
1 parent d37756d commit e008dad
Showing 1 changed file with 22 additions and 56 deletions.
78 changes: 22 additions & 56 deletions hrms/hr/report/employee_leave_balance/employee_leave_balance.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,16 +86,7 @@ def get_columns() -> List[Dict]:

def get_data(filters: Filters) -> List:
leave_types = frappe.get_all("Leave Type", pluck="name", order_by="name")
conditions = get_conditions(filters)

user = frappe.session.user
department_approver_map = get_department_leave_approver_map(filters.department)

active_employees = frappe.get_all(
"Employee",
filters=conditions,
fields=["name", "employee_name", "department", "user_id", "leave_approver"],
)
active_employees = get_employees(filters)

precision = cint(frappe.db.get_single_value("System Settings", "float_precision"))
consolidate_leave_types = len(active_employees) > 1 and filters.consolidate_leave_types
Expand All @@ -110,10 +101,6 @@ def get_data(filters: Filters) -> List:
row = frappe._dict({"leave_type": leave_type})

for employee in active_employees:
leave_approvers = department_approver_map.get(employee.department_name, []).append(
employee.leave_approver
)

if consolidate_leave_types:
row = frappe._dict()
else:
Expand Down Expand Up @@ -144,6 +131,27 @@ def get_data(filters: Filters) -> List:
return data


def get_employees(filters: Filters) -> list[dict]:
Employee = frappe.qb.DocType("Employee")
query = frappe.qb.from_(Employee).select(
Employee.name,
Employee.employee_name,
Employee.department,
)

for field in ["company", "department"]:
if filters.get(field):
query = query.where((getattr(Employee, field) == filters.get(field)))

if filters.get("employee"):
query = query.where(Employee.name == filters.get("employee"))

if filters.get("employee_status"):
query = query.where(Employee.status == filters.get("employee_status"))

return query.run(as_dict=True)


def get_opening_balance(
employee: str, leave_type: str, filters: Filters, carry_forwarded_leaves: float
) -> float:
Expand All @@ -168,48 +176,6 @@ def get_opening_balance(
return opening_balance


def get_conditions(filters: Filters) -> Dict:
conditions = {}

if filters.employee:
conditions["name"] = filters.employee

if filters.company:
conditions["company"] = filters.company

if filters.department:
conditions["department"] = filters.department

if filters.employee_status:
conditions["status"] = filters.employee_status

return conditions


def get_department_leave_approver_map(department: Optional[str] = None):
# get current department and all its child
department_list = frappe.get_all(
"Department",
filters={"disabled": 0},
or_filters={"name": department, "parent_department": department},
pluck="name",
)
# retrieve approvers list from current department and from its subsequent child departments
approver_list = frappe.get_all(
"Department Approver",
filters={"parentfield": "leave_approvers", "parent": ("in", department_list)},
fields=["parent", "approver"],
as_list=True,
)

approvers = {}

for k, v in approver_list:
approvers.setdefault(k, []).append(v)

return approvers


def get_allocated_and_expired_leaves(
from_date: str, to_date: str, employee: str, leave_type: str
) -> Tuple[float, float, float]:
Expand Down

0 comments on commit e008dad

Please sign in to comment.