Implement supermarket walking path (Laufwege & Regale), presets, and 1-tap shelf reassignment
This commit is contained in:
+11
-5
@@ -59,7 +59,8 @@ from .database import (
|
||||
reorder_shopping_categories,
|
||||
reset_default_shopping_categories,
|
||||
update_shopping_item_category,
|
||||
update_shopping_item
|
||||
update_shopping_item,
|
||||
SHELF_TYPES
|
||||
)
|
||||
|
||||
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
@@ -218,11 +219,13 @@ class ShoppingBulkCreate(BaseModel):
|
||||
class ShoppingCategoryCreate(BaseModel):
|
||||
name: str
|
||||
icon: Optional[str] = "🛒"
|
||||
shelf_type: Optional[str] = "other"
|
||||
sort_order: Optional[int] = None
|
||||
|
||||
class ShoppingCategoryUpdate(BaseModel):
|
||||
name: str
|
||||
icon: Optional[str] = "🛒"
|
||||
shelf_type: Optional[str] = "other"
|
||||
sort_order: Optional[int] = None
|
||||
|
||||
class ShoppingReorderRequest(BaseModel):
|
||||
@@ -360,6 +363,7 @@ async def shopping_list_view(request: Request):
|
||||
|
||||
items_json = json.dumps(items, default=json_serial)
|
||||
categories_json = json.dumps(categories, default=json_serial)
|
||||
shelf_types_json = json.dumps(SHELF_TYPES, default=json_serial)
|
||||
|
||||
return templates.TemplateResponse(
|
||||
request=request,
|
||||
@@ -367,8 +371,10 @@ async def shopping_list_view(request: Request):
|
||||
context={
|
||||
"items": items,
|
||||
"categories": categories,
|
||||
"shelf_types": SHELF_TYPES,
|
||||
"items_json": items_json,
|
||||
"categories_json": categories_json,
|
||||
"shelf_types_json": shelf_types_json,
|
||||
"current_year": iso_year,
|
||||
"current_week": iso_week
|
||||
}
|
||||
@@ -1154,7 +1160,7 @@ def api_get_shopping_categories():
|
||||
@app.post("/api/shopping-categories")
|
||||
async def api_add_shopping_category(payload: ShoppingCategoryCreate):
|
||||
try:
|
||||
cat = add_shopping_category(payload.name, payload.icon or "🛒", payload.sort_order)
|
||||
cat = add_shopping_category(payload.name, payload.icon or "🛒", payload.shelf_type or "other", payload.sort_order)
|
||||
await shopping_ws_manager.broadcast({
|
||||
"action": "categories_updated",
|
||||
"categories": get_shopping_categories(),
|
||||
@@ -1167,7 +1173,7 @@ async def api_add_shopping_category(payload: ShoppingCategoryCreate):
|
||||
|
||||
@app.put("/api/shopping-categories/{cat_id}")
|
||||
async def api_update_shopping_category(cat_id: int, payload: ShoppingCategoryUpdate):
|
||||
cat = update_shopping_category(cat_id, payload.name, payload.icon or "🛒", payload.sort_order)
|
||||
cat = update_shopping_category(cat_id, payload.name, payload.icon or "🛒", payload.shelf_type or "other", payload.sort_order)
|
||||
if not cat:
|
||||
raise HTTPException(status_code=404, detail="Bereich nicht gefunden.")
|
||||
await shopping_ws_manager.broadcast({
|
||||
@@ -1202,8 +1208,8 @@ async def api_reorder_shopping_categories(payload: ShoppingReorderRequest):
|
||||
|
||||
|
||||
@app.post("/api/shopping-categories/reset-defaults")
|
||||
async def api_reset_default_shopping_categories():
|
||||
cats = reset_default_shopping_categories()
|
||||
async def api_reset_default_shopping_categories(preset: str = Query("standard")):
|
||||
cats = reset_default_shopping_categories(preset=preset)
|
||||
await shopping_ws_manager.broadcast({
|
||||
"action": "categories_updated",
|
||||
"categories": cats,
|
||||
|
||||
Reference in New Issue
Block a user