refactor: remove unnecessary approver queries
This commit is contained in:
@@ -86,16 +86,7 @@ def get_columns() -> List[Dict]:
|
|||||||
|
|
||||||
def get_data(filters: Filters) -> List:
|
def get_data(filters: Filters) -> List:
|
||||||
leave_types = frappe.get_all("Leave Type", pluck="name", order_by="name")
|
leave_types = frappe.get_all("Leave Type", pluck="name", order_by="name")
|
||||||
conditions = get_conditions(filters)
|
active_employees = get_employees(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"],
|
|
||||||
)
|
|
||||||
|
|
||||||
precision = cint(frappe.db.get_single_value("System Settings", "float_precision"))
|
precision = cint(frappe.db.get_single_value("System Settings", "float_precision"))
|
||||||
consolidate_leave_types = len(active_employees) > 1 and filters.consolidate_leave_types
|
consolidate_leave_types = len(active_employees) > 1 and filters.consolidate_leave_types
|
||||||
@@ -110,10 +101,6 @@ def get_data(filters: Filters) -> List:
|
|||||||
row = frappe._dict({"leave_type": leave_type})
|
row = frappe._dict({"leave_type": leave_type})
|
||||||
|
|
||||||
for employee in active_employees:
|
for employee in active_employees:
|
||||||
leave_approvers = department_approver_map.get(employee.department_name, []).append(
|
|
||||||
employee.leave_approver
|
|
||||||
)
|
|
||||||
|
|
||||||
if consolidate_leave_types:
|
if consolidate_leave_types:
|
||||||
row = frappe._dict()
|
row = frappe._dict()
|
||||||
else:
|
else:
|
||||||
@@ -144,6 +131,27 @@ def get_data(filters: Filters) -> List:
|
|||||||
return data
|
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(
|
def get_opening_balance(
|
||||||
employee: str, leave_type: str, filters: Filters, carry_forwarded_leaves: float
|
employee: str, leave_type: str, filters: Filters, carry_forwarded_leaves: float
|
||||||
) -> float:
|
) -> float:
|
||||||
@@ -168,48 +176,6 @@ def get_opening_balance(
|
|||||||
return 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(
|
def get_allocated_and_expired_leaves(
|
||||||
from_date: str, to_date: str, employee: str, leave_type: str
|
from_date: str, to_date: str, employee: str, leave_type: str
|
||||||
) -> Tuple[float, float, float]:
|
) -> Tuple[float, float, float]:
|
||||||
|
|||||||
Reference in New Issue
Block a user