luthor/luthor/luthor/routers/cause_list.py

111 lines
4.9 KiB
Python

from datetime import date, datetime
import luthor.schemas.case as schemas
import luthor.schemas.cause_list as cl_schemas
from fastapi import APIRouter, Depends, Request, 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=cl_schemas.CauseList)
def report_blank(
request: Request,
s: str = None,
f: str = None,
db: Session = Depends(get_db),
user: UserToken = Security(get_user, scopes=["cases"]),
) -> cl_schemas.CauseList:
s = date.today() if s is None else datetime.strptime(s, "%d-%b-%Y").date()
f = date.today() if f is None else datetime.strptime(f, "%d-%b-%Y").date()
return cl_schemas.CauseList(
startDate=s,
finishDate=f,
cases=[
case_info(item)
for item in db.query(Case)
.join(Case.hearings)
.filter(Hearing.next_hearing_date >= s, Hearing.next_hearing_date <= f)
.order_by(Hearing.next_hearing_date)
.all()
],
)
def case_info(item: Case) -> schemas.Case:
return schemas.Case(
id=item.id,
caseSource=schemas.CaseSourceLink(
id=item.case_source.id, name=item.case_source.name, prefix=item.case_source.prefix
),
officeFileNumber=item.office_file_number if item.office_file_number is not None else "",
courtCaseNumber=item.court_case_number if item.court_case_number is not None else "",
year=item.year,
title=item.title if item.title is not None else "",
docketNumber=item.docket_number if item.docket_number is not None else "",
receiptDate=item.receipt_date,
limitation_date=item.limitation_date,
filingDate=item.filing_date,
appearOnBehalfOf=item.appear_on_behalf_of if item.appear_on_behalf_of is not None else "",
questionOfLaw=item.question_of_law if item.question_of_law is not None else "",
aorName=item.aor_name if item.aor_name is not None else "",
opposingCouncilAor=item.opposing_council_aor if item.opposing_council_aor is not None else "",
opposingCouncilDetail=item.opposing_council_detail if item.opposing_council_detail is not None else "",
lowerCourtCaseNumber=item.lower_court_case_number if item.lower_court_case_number is not None else "",
dateOfImpugnedJudgement=item.date_of_impugned_judgement,
briefDescription=item.brief_description if item.brief_description is not None else "",
remarks=item.remarks if item.remarks is not None else "",
slpCounter=item.slp_counter if item.slp_counter is not None else "",
contactDetail=item.contact_detail if item.contact_detail is not None else "",
caseConnectedWith=item.case_connected_with if item.case_connected_with is not None else "",
bunchCases=item.bunch_cases if item.bunch_cases is not None else "",
court=schemas.CourtLink(id=item.court.id, name=item.court.name) if item.court is not None else None,
department=schemas.DepartmentLink(id=item.department.id, name=item.department.name)
if item.department is not None
else None,
office=schemas.OfficeLink(id=item.office.id, name=item.office.name) if item.office is not None else None,
caseType=schemas.CaseTypeLink(id=item.case_type.id, name=item.case_type.name)
if item.case_type is not None
else None,
act=schemas.ActLink(id=item.act.id, name=item.act.name) if item.act is not None else None,
nature=schemas.NatureLink(id=item.nature.id, name=item.nature.name) if item.nature is not None else None,
officeStatus=schemas.OfficeStatusLink(id=item.office_status.id, name=item.office_status.name)
if item.office_status is not None
else None,
courtStatus=schemas.CourtStatusLink(id=item.court_status.id, name=item.court_status.name)
if item.court_status is not None
else None,
hearings=[
schemas.Hearing(
id=h.id,
courtNumber=h.court_number if h.court_number is not None else "",
itemNumber=h.item_number if h.item_number is not None else "",
bench=h.bench if h.bench is not None else "",
proceedings=h.proceedings if h.proceedings is not None else "",
complianceDate=h.compliance_date,
nextHearingDate=h.next_hearing_date,
courtStatus=schemas.CourtStatusLink(id=h.court_status.id, name=h.court_status.name)
if h.court_status is not None
else None,
)
for h in item.hearings
],
)