clearance_sys / src /utils.py
Testys's picture
All changes commit
b7ed26f
from typing import List, Dict, Any
from sqlalchemy.orm import Session as SQLAlchemySessionType
from fastapi.concurrency import run_in_threadpool
from src import crud, models
async def format_student_clearance_details(
db: SQLAlchemySessionType,
student_orm: models.Student
) -> models.ClearanceDetail:
"""
Formats clearance details for a student.
Args:
db (SQLAlchemySessionType): Database session.
student_orm (models.Student): ORM model of the student.
Returns:
models.ClearanceDetail: Formatted clearance details.
"""
statuses_orm_list = await run_in_threadpool(crud.get_clearance_statuses_by_student_id, db, student_orm.student_id)
clearance_items_models: List[models.ClearanceStatusItem] = []
overall_status_val = models.OverallClearanceStatusEnum.COMPLETED
if not statuses_orm_list:
overall_status_val = models.OverallClearanceStatusEnum.PENDING
for status_orm in statuses_orm_list:
item = models.ClearanceStatusItem(
department=status_orm.department,
status=status_orm.status,
remarks=status_orm.remarks,
updated_at=status_orm.updated_at
)
clearance_items_models.append(item)
if item.status != models.ClearanceStatusEnum.COMPLETED:
overall_status_val = models.OverallClearanceStatusEnum.PENDING
if not statuses_orm_list and overall_status_val == models.OverallClearanceStatusEnum.COMPLETED:
overall_status_val = models.OverallClearanceStatusEnum.PENDING
return models.ClearanceDetail(
student_id=student_orm.student_id,
name=student_orm.name,
department=student_orm.department,
clearance_items=clearance_items_models,
overall_status=overall_status_val
)