54 lines
1.3 KiB
Python
54 lines
1.3 KiB
Python
from datetime import date, datetime
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
class RawMaterialPriceVersionCreate(BaseModel):
|
|
market_value: float = Field(gt=0)
|
|
waste_percentage: float = Field(ge=0, default=0.0)
|
|
effective_date: date
|
|
status: str = "active"
|
|
notes: str | None = None
|
|
|
|
|
|
class RawMaterialPriceVersionRead(RawMaterialPriceVersionCreate):
|
|
id: int
|
|
created_at: datetime
|
|
loss_cost: float
|
|
cost_per_unit: float
|
|
cost_per_kg: float
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
|
|
class RawMaterialCreate(BaseModel):
|
|
name: str
|
|
supplier: str | None = None
|
|
unit_of_measure: str
|
|
kg_per_unit: float = Field(gt=0)
|
|
status: str = "active"
|
|
notes: str | None = None
|
|
initial_price: RawMaterialPriceVersionCreate
|
|
|
|
|
|
class RawMaterialUpdate(BaseModel):
|
|
supplier: str | None = None
|
|
unit_of_measure: str | None = None
|
|
kg_per_unit: float | None = Field(default=None, gt=0)
|
|
status: str | None = None
|
|
notes: str | None = None
|
|
|
|
|
|
class RawMaterialRead(BaseModel):
|
|
id: int
|
|
tenant_id: str
|
|
name: str
|
|
supplier: str | None
|
|
unit_of_measure: str
|
|
kg_per_unit: float
|
|
status: str
|
|
notes: str | None
|
|
created_at: datetime
|
|
current_price: RawMaterialPriceVersionRead | None
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|