feat(validation): add editing versioning revalidation and aligned reports
This commit is contained in:
parent
f73a24df13
commit
302e542fda
28 changed files with 2691 additions and 406 deletions
|
|
@ -0,0 +1,64 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
|
||||
from fastapi import HTTPException, status
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.models.contact import Contact
|
||||
from app.models.customer import Customer
|
||||
from app.models.device import Device
|
||||
from app.models.equipment import Equipment
|
||||
from app.models.location import Location
|
||||
from app.models.validation import Validation
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class ReportContext:
|
||||
validation: Validation
|
||||
customer: Customer
|
||||
location: Location | None
|
||||
contact: Contact | None
|
||||
device: Device | None
|
||||
equipment: list[Equipment]
|
||||
generated_dir: Path
|
||||
|
||||
|
||||
class OrionContextBuilder:
|
||||
def __init__(self, session: Session, generated_dir: Path) -> None:
|
||||
self.session = session
|
||||
self.generated_dir = generated_dir
|
||||
|
||||
def build(self, validation_id: str) -> ReportContext:
|
||||
validation = self.session.get(Validation, validation_id)
|
||||
if validation is None:
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Validation not found")
|
||||
|
||||
customer = self.session.get(Customer, validation.customer_id)
|
||||
if customer is None:
|
||||
raise HTTPException(status_code=status.HTTP_409_CONFLICT, detail="Validation has no customer")
|
||||
|
||||
location = self.session.get(Location, validation.location_id) if validation.location_id else None
|
||||
contact = self.session.get(Contact, validation.contact_id) if validation.contact_id else None
|
||||
device = self.session.get(Device, validation.device_id) if validation.device_id else None
|
||||
equipment = []
|
||||
if validation.equipment_ids:
|
||||
equipment = list(
|
||||
self.session.scalars(
|
||||
select(Equipment).where(Equipment.id.in_(validation.equipment_ids))
|
||||
)
|
||||
)
|
||||
|
||||
self.generated_dir.mkdir(parents=True, exist_ok=True)
|
||||
return ReportContext(
|
||||
validation=validation,
|
||||
customer=customer,
|
||||
location=location,
|
||||
contact=contact,
|
||||
device=device,
|
||||
equipment=equipment,
|
||||
generated_dir=self.generated_dir,
|
||||
)
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue