Gegenstands-Verwaltung (Non-Food) neben Lebensmitteln
Die Kategorie bestimmt die Verwaltungsart (food/object). Gegenstaende: Menge je Lagerort statt Chargen/MHD, Umlagern (ohne Grund) und Entfernen mit Pflicht-Grund samt Entnahme-Statistik. Beliebig viele eigene Felder je Kategorie (vererbt an Unterkategorien), "gekauft bei" ueber eine verwaltbare Shop-Liste und ein Produktlink. Barcode-Lookup zusaetzlich ueber Open Products Facts. Der Lebensmittel-Teil (Chargen/MHD/FEFO) bleibt unveraendert. Umgesetzt in Backend (FastAPI, +Tests gruen), Web (React) und iOS (SwiftUI). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -12,12 +12,14 @@ from .routers import (
|
||||
branding,
|
||||
categories,
|
||||
dashboard,
|
||||
field_definitions,
|
||||
groups,
|
||||
locations,
|
||||
maintenance,
|
||||
package_types,
|
||||
products,
|
||||
settings as settings_router,
|
||||
shops,
|
||||
stock,
|
||||
transfer,
|
||||
units,
|
||||
@@ -28,6 +30,7 @@ from .seed import (
|
||||
ensure_builtin_categories,
|
||||
ensure_builtin_package_types,
|
||||
ensure_builtin_units,
|
||||
ensure_example_object_categories,
|
||||
ensure_first_admin,
|
||||
)
|
||||
from .services.group_codes import backfill as backfill_group_codes
|
||||
@@ -66,6 +69,18 @@ def _ensure_schema() -> None:
|
||||
"NOT NULL DEFAULT 'Übersicht'",
|
||||
"ALTER TABLE dashboard_layouts ADD COLUMN IF NOT EXISTS position INTEGER "
|
||||
"NOT NULL DEFAULT 0",
|
||||
# Gegenstands-Verwaltung: Verwaltungsart je Kategorie. Bestehende
|
||||
# (reine Lebensmittel-)Kategorien werden dabei auf "food" gesetzt.
|
||||
"ALTER TABLE categories ADD COLUMN IF NOT EXISTS tracking VARCHAR(16) "
|
||||
"NOT NULL DEFAULT 'food'",
|
||||
# Bezugsquelle und Onlineshop-Link am Artikel (nur für Gegenstände genutzt).
|
||||
"ALTER TABLE products ADD COLUMN IF NOT EXISTS shop_id INTEGER "
|
||||
"REFERENCES shops(id) ON DELETE SET NULL",
|
||||
"ALTER TABLE products ADD COLUMN IF NOT EXISTS product_url VARCHAR(1024)",
|
||||
# Bewegungen: Lagerort (Gegenstands-Buchungen) und Entnahmegrund.
|
||||
"ALTER TABLE movements ADD COLUMN IF NOT EXISTS location_id INTEGER "
|
||||
"REFERENCES locations(id) ON DELETE SET NULL",
|
||||
"ALTER TABLE movements ADD COLUMN IF NOT EXISTS reason VARCHAR(16)",
|
||||
]
|
||||
with engine.begin() as conn:
|
||||
for stmt in stmts:
|
||||
@@ -93,6 +108,7 @@ async def lifespan(app: FastAPI):
|
||||
ensure_builtin_units(db)
|
||||
ensure_builtin_package_types(db)
|
||||
ensure_builtin_categories(db)
|
||||
ensure_example_object_categories(db)
|
||||
ensure_first_admin(db)
|
||||
# Codes bestehender Gruppen-Zuordnungen nachziehen.
|
||||
backfill_group_codes(db)
|
||||
@@ -136,3 +152,5 @@ app.include_router(branding.router)
|
||||
app.include_router(categories.router)
|
||||
app.include_router(maintenance.router)
|
||||
app.include_router(dashboard.router)
|
||||
app.include_router(shops.router)
|
||||
app.include_router(field_definitions.router)
|
||||
|
||||
Reference in New Issue
Block a user