feat: add full/empty weight fields to Product and last_weighed_at to ProductInventory

Adds full_weight_g and empty_weight_g to ProductBase (inherited by Product
and response models) so per-product package weight specs are captured.
Adds last_weighed_at to ProductInventory to record when a package was last
weighed. Wires up all fields through API schemas, frontend types, forms, and
the product detail page (add/edit/display).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Piotr Oleszczyk 2026-02-27 16:35:08 +01:00
parent 2b73dc63ac
commit 43fcba4de6
8 changed files with 255 additions and 16 deletions

View file

@ -101,6 +101,7 @@ class InventoryCreate(SQLModel):
finished_at: Optional[date] = None
expiry_date: Optional[date] = None
current_weight_g: Optional[float] = None
last_weighed_at: Optional[date] = None
notes: Optional[str] = None
@ -110,6 +111,7 @@ class InventoryUpdate(SQLModel):
finished_at: Optional[date] = None
expiry_date: Optional[date] = None
current_weight_g: Optional[float] = None
last_weighed_at: Optional[date] = None
notes: Optional[str] = None

View file

@ -103,6 +103,8 @@ class ProductBase(SQLModel):
price_tier: PriceTier | None = None
size_ml: float | None = Field(default=None, gt=0)
full_weight_g: float | None = Field(default=None, gt=0)
empty_weight_g: float | None = Field(default=None, gt=0)
pao_months: int | None = Field(default=None, ge=1, le=60)
inci: list[str] = Field(default_factory=list)
@ -383,6 +385,7 @@ class ProductInventory(SQLModel, table=True):
finished_at: date | None = Field(default=None)
expiry_date: date | None = Field(default=None)
current_weight_g: float | None = Field(default=None, gt=0)
last_weighed_at: date | None = Field(default=None)
notes: str | None = None
created_at: datetime = Field(default_factory=utc_now, nullable=False)