feat: per-order-line material override — override materials for individual renders

- Add `material_override` nullable column on OrderLine (DB migration)
- Line override takes priority over OutputType override
- PATCH /orders/{id}/lines/{id} endpoint to update material_override
- Inline dropdown on each order line in the OrderDetail page
- Amber background when override is active
- Same output type, different material per line — no need to create a new output type

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-14 14:33:00 +01:00
parent 7e57dba085
commit 9d6def84c1
7 changed files with 115 additions and 7 deletions
+1
View File
@@ -150,6 +150,7 @@ class OrderLine(Base):
ForeignKey("global_render_positions.id", ondelete="SET NULL"),
nullable=True,
)
material_override: Mapped[str | None] = mapped_column(String(200), nullable=True, default=None)
notes: Mapped[str | None] = mapped_column(Text, nullable=True)
tenant_id: Mapped[uuid.UUID | None] = mapped_column(
UUID(as_uuid=True), ForeignKey("tenants.id"), nullable=True, index=True
+2
View File
@@ -66,6 +66,7 @@ class OrderLineCreate(BaseModel):
render_position_id: uuid.UUID | None = None
global_render_position_id: uuid.UUID | None = None
gewuenschte_bildnummer: str | None = None
material_override: str | None = None
notes: str | None = None
@@ -91,6 +92,7 @@ class OrderLineOut(BaseModel):
render_log: dict | None = None
render_started_at: datetime | None = None
render_completed_at: datetime | None = None
material_override: str | None = None
notes: str | None
created_at: datetime
updated_at: datetime