This commit is contained in:
@@ -328,6 +328,68 @@ class ServiceVisitRead(ServiceVisitCreate):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class WorkOrderCatalogItemCreate(BaseModel):
|
||||
service_center_id: int | None = None
|
||||
item_type: str = Field(pattern="^(work|product)$")
|
||||
title: str = Field(min_length=2, max_length=180)
|
||||
category: str | None = None
|
||||
description: str | None = None
|
||||
work_type: str | None = None
|
||||
product_type: str | None = None
|
||||
brand: str | None = None
|
||||
sku: str | None = None
|
||||
unit: str = "pcs"
|
||||
default_quantity: Decimal = Decimal("1")
|
||||
default_unit_price: Decimal = Decimal("0")
|
||||
volume: Decimal | None = None
|
||||
viscosity: str | None = None
|
||||
specification: str | None = None
|
||||
metadata_json: dict | None = None
|
||||
is_active: bool = True
|
||||
|
||||
@model_validator(mode="after")
|
||||
def validate_catalog_item(self) -> "WorkOrderCatalogItemCreate":
|
||||
if self.default_quantity <= 0:
|
||||
raise ValueError("default_quantity must be positive")
|
||||
if self.default_unit_price < 0:
|
||||
raise ValueError("default_unit_price must be non-negative")
|
||||
return self
|
||||
|
||||
|
||||
class WorkOrderCatalogItemRead(WorkOrderCatalogItemCreate):
|
||||
id: int
|
||||
created_at: datetime
|
||||
updated_at: datetime | None = None
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class WorkOrderCatalogSuggestion(BaseModel):
|
||||
source: str = "vehicle_profile"
|
||||
item_type: str = "product"
|
||||
title: str
|
||||
category: str | None = None
|
||||
product_type: str | None = None
|
||||
unit: str = "pcs"
|
||||
default_quantity: Decimal = Decimal("1")
|
||||
default_unit_price: Decimal = Decimal("0")
|
||||
volume: Decimal | None = None
|
||||
viscosity: str | None = None
|
||||
specification: str | None = None
|
||||
metadata_json: dict | None = None
|
||||
|
||||
|
||||
class WorkOrderCatalogRead(BaseModel):
|
||||
items: list[WorkOrderCatalogItemRead]
|
||||
vehicle_suggestions: list[WorkOrderCatalogSuggestion] = []
|
||||
missing_vehicle_fields: list[str] = []
|
||||
|
||||
|
||||
class VehicleProfileRequest(BaseModel):
|
||||
missing_fields: list[str] | None = None
|
||||
comment: str | None = None
|
||||
|
||||
|
||||
class ServiceWorkItemCreate(BaseModel):
|
||||
work_type: str = "other"
|
||||
title: str
|
||||
@@ -402,6 +464,15 @@ class ServiceProductItemRead(ServiceProductItemCreate):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class WorkOrderDetailRead(BaseModel):
|
||||
visit: ServiceVisitRead
|
||||
vehicle: VehicleRead
|
||||
service_center: ServiceCenterPublicRead
|
||||
work_items: list[ServiceWorkItemRead] = []
|
||||
product_items: list[ServiceProductItemRead] = []
|
||||
catalog: WorkOrderCatalogRead
|
||||
|
||||
|
||||
class WorkOrderUpdate(BaseModel):
|
||||
odometer: int | None = None
|
||||
assigned_employee_id: int | None = None
|
||||
|
||||
Reference in New Issue
Block a user