File size: 1,837 Bytes
b7ed26f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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
    )