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 ], )