105 lines
3.1 KiB
Python
105 lines
3.1 KiB
Python
from datetime import datetime
|
|
from decimal import Decimal
|
|
from typing import List, Optional
|
|
from pydantic import BaseModel, Field
|
|
|
|
# --- DTO DE CREACIÓN ---
|
|
class PartCreateDTO(BaseModel):
|
|
client_id: int
|
|
part_number: str = Field(..., max_length=50)
|
|
|
|
# Campos Generales
|
|
description_spanish: Optional[str] = None
|
|
description_english: Optional[str] = None
|
|
part_class: Optional[str] = None
|
|
unit_of_measure: Optional[str] = "PZ"
|
|
commercial_part_number: Optional[str] = None
|
|
country_of_origin: Optional[str] = "MEX"
|
|
|
|
# Costos y Pesos
|
|
unit_cost: Optional[Decimal] = Decimal("0.0")
|
|
currency_key: Optional[str] = "USD"
|
|
unit_weight: Optional[Decimal] = Decimal("0.0")
|
|
weight_type: Optional[str] = "KG"
|
|
|
|
# --- LOS QUE FALTABAN Y AHORA SE GUARDARÁN ---
|
|
added_value: Optional[Decimal] = None
|
|
part_photo: Optional[str] = None
|
|
alternate_unit_measure: Optional[str] = None
|
|
license_code: Optional[str] = None
|
|
export_code: Optional[str] = None
|
|
exclusion_symbol: Optional[str] = None
|
|
|
|
# Regulatorios
|
|
fraction: Optional[str] = None
|
|
us_fraction: Optional[str] = None
|
|
supplier: Optional[str] = None
|
|
fda_key: Optional[str] = None
|
|
fcc_key: Optional[str] = None
|
|
eccn: Optional[str] = None
|
|
|
|
# Estatus
|
|
is_active: Optional[bool] = True
|
|
|
|
# --- DTO DE ACTUALIZACIÓN ---
|
|
class PartUpdateDTO(BaseModel):
|
|
description_spanish: Optional[str] = None
|
|
description_english: Optional[str] = None
|
|
part_class: Optional[str] = None
|
|
unit_of_measure: Optional[str] = None
|
|
commercial_part_number: Optional[str] = None
|
|
country_of_origin: Optional[str] = None
|
|
|
|
unit_cost: Optional[Decimal] = None
|
|
currency_key: Optional[str] = None
|
|
unit_weight: Optional[Decimal] = None
|
|
weight_type: Optional[str] = None
|
|
added_value: Optional[Decimal] = None
|
|
part_photo: Optional[str] = None
|
|
alternate_unit_measure: Optional[str] = None
|
|
license_code: Optional[str] = None
|
|
export_code: Optional[str] = None
|
|
exclusion_symbol: Optional[str] = None
|
|
|
|
fraction: Optional[str] = None
|
|
us_fraction: Optional[str] = None
|
|
supplier: Optional[str] = None
|
|
fda_key: Optional[str] = None
|
|
fcc_key: Optional[str] = None
|
|
eccn: Optional[str] = None
|
|
is_active: Optional[bool] = None
|
|
|
|
|
|
class PartResponseDTO(PartCreateDTO):
|
|
id: int
|
|
tenant_id: int
|
|
company_id: int
|
|
creation_date: Optional[int] = None
|
|
modification_date_iso: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
class PartBasicDTO(BaseModel):
|
|
id: int
|
|
client_id: int
|
|
part_number: str
|
|
description_spanish: Optional[str] = None
|
|
is_active: Optional[bool] = True
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
class PartListDTO(BaseModel):
|
|
parts: List[PartBasicDTO]
|
|
total: int
|
|
page: int
|
|
size: int
|
|
|
|
class PartSearchDTO(BaseModel):
|
|
client_id: Optional[int] = None
|
|
part_number: Optional[str] = None
|
|
description: Optional[str] = None
|
|
fraction: Optional[str] = None
|
|
supplier: Optional[str] = None
|
|
enabled_only: bool = False |