luthor/luthor/luthor/routers/compliance_list.py

62 lines
1.8 KiB
Python

from typing import List
import luthor.schemas.compliance_list as schemas
from fastapi import APIRouter, Depends, Security
from luthor.models.hearing import Hearing
from sqlalchemy.orm import Session
from ..core.security import get_current_active_user as get_user
from ..db.session import SessionLocal
from ..models.case import Case
from ..schemas.user_token import UserToken
router = APIRouter()
# Dependency
def get_db():
try:
db = SessionLocal()
yield db
finally:
db.close()
@router.get("", response_model=List[schemas.ComplianceList])
def report_blank(
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["cases"]),
) -> List[schemas.ComplianceList]:
return get_items(db)
def get_items(db: Session) -> List[schemas.ComplianceList]:
items = [
case_info(item)
for item in db.query(Case)
.join(Case.hearings)
.filter(Hearing.compliance_date != None, Hearing.compliance_done == False) # noqa: E712, E711
.order_by(Hearing.compliance_date)
.all()
]
return [item for sublist in items for item in sublist]
def case_info(item: Case) -> List[schemas.ComplianceList]:
return [
schemas.ComplianceList(
id=item.id,
officeFileNumber=f"{item.case_source.prefix}-{item.office_file_number}",
courtNumber=h.court_number if h.court_number is not None else "",
itemNumber=h.item_number if h.item_number is not None else "",
title=item.title,
proceedings=h.proceedings if h.proceedings is not None else "",
complianceDate=h.compliance_date,
nextHearingDate=item.hearings[0].next_hearing_date,
)
for h in item.hearings
if h.compliance_date is not None and h.compliance_done is False
]