271 lines
11 KiB
Python
271 lines
11 KiB
Python
import uuid
|
|
|
|
from datetime import date
|
|
from typing import List
|
|
|
|
import luthor.schemas.case as schemas
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, Security, status
|
|
from luthor.models.case_source import CaseSource
|
|
from sqlalchemy import desc, func
|
|
from sqlalchemy.exc import SQLAlchemyError
|
|
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.post("", response_model=schemas.Case)
|
|
def save(
|
|
data: schemas.CaseIn,
|
|
db: Session = Depends(get_db),
|
|
user: UserToken = Security(get_user, scopes=["cases"]),
|
|
) -> schemas.Case:
|
|
try:
|
|
item = Case(
|
|
office_file_number=data.office_file_number,
|
|
court_case_number=data.court_case_number,
|
|
year=data.year,
|
|
title=data.title,
|
|
docket_number=data.docket_number,
|
|
receipt_date=data.receipt_date,
|
|
limitation_date=data.limitation_date,
|
|
filing_date=data.filing_date,
|
|
appear_on_behalf_of=data.appear_on_behalf_of,
|
|
question_of_law=data.question_of_law,
|
|
aor_name=data.aor_name,
|
|
opposing_council_aor=data.opposing_council_aor,
|
|
opposing_council_detail=data.opposing_council_detail,
|
|
lower_court_case_number=data.lower_court_case_number,
|
|
date_of_impugned_judgement=data.date_of_impugned_judgement,
|
|
brief_description=data.brief_description,
|
|
remarks=data.remarks,
|
|
slp_counter=data.slp_counter,
|
|
contact_detail=data.contact_detail,
|
|
case_connected_with=data.case_connected_with,
|
|
bunch_cases=data.bunch_cases,
|
|
court_id=data.court.id_ if data.court is not None else None,
|
|
department_id=data.department.id_ if data.department is not None else None,
|
|
office_id=data.office.id_ if data.office is not None else None,
|
|
case_type_id=data.case_type.id_ if data.case_type is not None else None,
|
|
act_id=data.act.id_ if data.act is not None else None,
|
|
nature_id=data.nature.id_ if data.nature is not None else None,
|
|
office_status_id=data.office_status.id_ if data.office_status is not None else None,
|
|
court_status_id=data.court_status.id_ if data.court_status is not None else None,
|
|
)
|
|
db.add(item)
|
|
db.commit()
|
|
return case_info(item)
|
|
except SQLAlchemyError as e:
|
|
db.rollback()
|
|
raise HTTPException(
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
detail=str(e),
|
|
)
|
|
except Exception:
|
|
db.rollback()
|
|
raise
|
|
|
|
|
|
@router.put("/{id_}", response_model=schemas.Case)
|
|
def update(
|
|
id_: uuid.UUID,
|
|
data: schemas.CaseIn,
|
|
db: Session = Depends(get_db),
|
|
user: UserToken = Security(get_user, scopes=["cases"]),
|
|
) -> schemas.Case:
|
|
try:
|
|
item: Case = db.query(Case).filter(Case.id == id_).first()
|
|
item.office_file_number = data.office_file_number
|
|
item.court_case_number = data.court_case_number
|
|
item.year = data.year
|
|
item.title = data.title
|
|
item.docket_number = data.docket_number
|
|
item.receipt_date = data.receipt_date
|
|
item.limitation_date = data.limitation_date
|
|
item.filing_date = data.filing_date
|
|
item.appear_on_behalf_of = data.appear_on_behalf_of
|
|
item.question_of_law = data.question_of_law
|
|
item.aor_name = data.aor_name
|
|
item.opposing_council_aor = data.opposing_council_aor
|
|
item.opposing_council_detail = data.opposing_council_detail
|
|
item.lower_court_case_number = data.lower_court_case_number
|
|
item.date_of_impugned_judgement = data.date_of_impugned_judgement
|
|
item.brief_description = data.brief_description
|
|
item.remarks = data.remarks
|
|
item.slp_counter = data.slp_counter
|
|
item.contact_detail = data.contact_detail
|
|
item.case_connected_with = data.case_connected_with
|
|
item.bunch_cases = data.bunch_cases
|
|
item.court_id = data.court.id_ if data.court is not None else None
|
|
item.department_id = data.department.id_ if data.department is not None else None
|
|
item.office_id = data.office.id_ if data.office is not None else None
|
|
item.case_type_id = data.case_type.id_ if data.case_type is not None else None
|
|
item.act_id = data.act.id_ if data.act is not None else None
|
|
item.nature_id = data.nature.id_ if data.nature is not None else None
|
|
item.office_status_id = data.office_status.id_ if data.office_status is not None else None
|
|
item.court_status_id = data.court_status.id_ if data.court_status is not None else None
|
|
db.commit()
|
|
return case_info(item)
|
|
except SQLAlchemyError as e:
|
|
db.rollback()
|
|
raise HTTPException(
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
detail=str(e),
|
|
)
|
|
except Exception:
|
|
db.rollback()
|
|
raise
|
|
|
|
|
|
@router.delete("/{id_}", response_model=schemas.CaseBlank)
|
|
def delete(
|
|
id_: uuid.UUID,
|
|
db: Session = Depends(get_db),
|
|
user: UserToken = Security(get_user, scopes=["cases"]),
|
|
) -> schemas.CaseBlank:
|
|
try:
|
|
item: Case = db.query(Case).filter(Case.id == id_).first()
|
|
if item is None:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail="Sale Category not found",
|
|
)
|
|
item.is_deleted = True
|
|
db.commit()
|
|
return case_blank()
|
|
except Exception:
|
|
db.rollback()
|
|
raise
|
|
|
|
|
|
@router.get("", response_model=schemas.CaseBlank)
|
|
def show_blank(
|
|
db: Session = Depends(get_db),
|
|
user: UserToken = Security(get_user, scopes=["cases"]),
|
|
) -> schemas.CaseBlank:
|
|
return case_blank()
|
|
|
|
|
|
@router.get("/list", response_model=List[schemas.Case])
|
|
def show_list(db: Session = Depends(get_db), user: UserToken = Depends(get_user)) -> List[schemas.Case]:
|
|
return [case_info(item) for item in db.query(Case).order_by(desc(Case.receipt_date)).all()]
|
|
|
|
|
|
@router.get("/id/{case_type_id}", response_model=int)
|
|
def show_case_type_id(
|
|
case_type_id: uuid.UUID,
|
|
db: Session = Depends(get_db),
|
|
user: UserToken = Security(get_user, scopes=["cases"]),
|
|
) -> int:
|
|
code = db.query(func.max(Case.office_file_number)).filter(Case.case_source_id == case_type_id).one()[0]
|
|
code = 1 if code is None else code + 1
|
|
return code
|
|
|
|
|
|
@router.get("/list/{source_id}", response_model=List[schemas.Case])
|
|
def show_list_of_source(
|
|
source_id: uuid.UUID, db: Session = Depends(get_db), user: UserToken = Depends(get_user)
|
|
) -> List[schemas.Case]:
|
|
return [
|
|
case_info(item)
|
|
for item in db.query(Case)
|
|
.filter(Case.case_source_id == source_id)
|
|
.order_by(desc(Case.office_file_number))
|
|
.all()
|
|
]
|
|
|
|
|
|
@router.get("/{id_}", response_model=schemas.Case)
|
|
def show_id(
|
|
id_: uuid.UUID,
|
|
db: Session = Depends(get_db),
|
|
user: UserToken = Security(get_user, scopes=["cases"]),
|
|
) -> schemas.Case:
|
|
item: Case = db.query(Case).filter(Case.id == id_).first()
|
|
return case_info(item)
|
|
|
|
|
|
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,
|
|
)
|
|
|
|
|
|
def case_blank() -> schemas.CaseBlank:
|
|
return schemas.CaseBlank(
|
|
caseSource=schemas.CaseSourceLink(id=CaseSource.private(), name="Private Cases"),
|
|
officeFileNumber="",
|
|
receiptDate=date.today(),
|
|
courtCaseNumber="",
|
|
year="",
|
|
title="",
|
|
docketNumber="",
|
|
appearOnBehalfOf="",
|
|
questionOfLaw="",
|
|
aorName="",
|
|
opposingCouncilAor="",
|
|
opposingCouncilDetail="",
|
|
lowerCourtCaseNumber="",
|
|
briefDescription="",
|
|
remarks="",
|
|
slpCounter="",
|
|
contactDetail="",
|
|
caseConnectedWith="",
|
|
bunchCases="",
|
|
)
|