62 lines
1.8 KiB
Python
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=h.next_hearing_date,
|
|
)
|
|
for h in item.hearings
|
|
if h.compliance_date is not None and h.compliance_done is False
|
|
]
|