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
|
|
@ -1,8 +1,9 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from datetime import date
|
||||
from uuid import UUID
|
||||
|
||||
from pydantic import EmailStr, Field
|
||||
from pydantic import EmailStr, Field, field_validator
|
||||
|
||||
from app.models.customer import CustomerType
|
||||
from app.models.equipment import EquipmentKind, EquipmentStatus
|
||||
|
|
@ -108,12 +109,12 @@ class EquipmentUpdate(EquipmentCreate):
|
|||
|
||||
|
||||
class ValidationCreate(ORMModel):
|
||||
report_number: str
|
||||
customer_id: str
|
||||
location_id: str | None = None
|
||||
contact_id: str | None = None
|
||||
device_id: str | None = None
|
||||
validation_type: str
|
||||
report_number: str | None = None
|
||||
customer_id: UUID | None = None
|
||||
location_id: UUID | None = None
|
||||
contact_id: UUID | None = None
|
||||
device_id: UUID | None = None
|
||||
validation_type: str | None = None
|
||||
project: str | None = None
|
||||
test_location: str | None = None
|
||||
examiner_name: str | None = None
|
||||
|
|
@ -122,8 +123,12 @@ class ValidationCreate(ORMModel):
|
|||
scheduled_on: date | None = None
|
||||
performed_on: date | None = None
|
||||
next_validation_on: date | None = None
|
||||
examiner_id: str | None = None
|
||||
status: ValidationStatus = ValidationStatus.draft
|
||||
revalidation_interval_months: int = 24
|
||||
next_validation_manually_overridden: bool = False
|
||||
version: int = 1
|
||||
previous_validation_id: UUID | None = None
|
||||
examiner_id: UUID | None = None
|
||||
status: ValidationStatus | str = ValidationStatus.draft
|
||||
result: str | None = None
|
||||
notes: str | None = None
|
||||
equipment_ids: list[str] = Field(default_factory=list)
|
||||
|
|
@ -137,6 +142,21 @@ class ValidationCreate(ORMModel):
|
|||
recommendations: list[dict] = Field(default_factory=list)
|
||||
attachments: list[dict] = Field(default_factory=list)
|
||||
|
||||
@field_validator(
|
||||
"customer_id",
|
||||
"location_id",
|
||||
"contact_id",
|
||||
"device_id",
|
||||
"examiner_id",
|
||||
"previous_validation_id",
|
||||
mode="before",
|
||||
)
|
||||
@classmethod
|
||||
def empty_string_to_none(cls, value):
|
||||
if value == "":
|
||||
return None
|
||||
return value
|
||||
|
||||
|
||||
class ValidationRead(ValidationCreate, EntityRead):
|
||||
pass
|
||||
|
|
@ -144,3 +164,45 @@ class ValidationRead(ValidationCreate, EntityRead):
|
|||
|
||||
class ValidationUpdate(ValidationCreate):
|
||||
pass
|
||||
|
||||
|
||||
class ValidationIssue(ORMModel):
|
||||
field: str
|
||||
message: str
|
||||
section: str
|
||||
|
||||
|
||||
class ValidationReview(ORMModel):
|
||||
status: str
|
||||
errors: list[ValidationIssue]
|
||||
warnings: list[ValidationIssue]
|
||||
complete_sections: list[str]
|
||||
|
||||
|
||||
class ValidationImportPreviewRow(ORMModel):
|
||||
row_number: int
|
||||
data: dict
|
||||
errors: list[str]
|
||||
duplicate: bool
|
||||
resolved_customer_id: str | None = None
|
||||
resolved_location_id: str | None = None
|
||||
resolved_device_id: str | None = None
|
||||
|
||||
|
||||
class ValidationImportPreview(ORMModel):
|
||||
rows: list[ValidationImportPreviewRow]
|
||||
valid_rows: int
|
||||
invalid_rows: int
|
||||
duplicates: int
|
||||
|
||||
|
||||
class ValidationImportRequest(ORMModel):
|
||||
rows: list[dict]
|
||||
duplicate_strategy: str = "skip"
|
||||
|
||||
|
||||
class ValidationImportSummary(ORMModel):
|
||||
successful: int
|
||||
skipped: int
|
||||
failed: int
|
||||
errors: list[str] = Field(default_factory=list)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue