From 10a948df1596d37d37b9e1b318fe61e38ea00b4d Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Mon, 27 Jul 2026 21:30:09 +0200 Subject: [PATCH] Backend: Verbrauchsgegenstand/Einzelstueck sind immer Gegenstaende product_tracking leitet die Art bisher nur aus der Kategorie ab. Beim Umstellen Lebensmittel -> Verbrauchsgegenstand faellt die (Lebensmittel-)Kategorie weg, sodass der Artikel faelschlich "food" blieb und in der Lebensmittelliste hing. individual/bulk implizieren jetzt "object", unabhaengig von der Kategorie. Co-Authored-By: Claude Opus 4.8 --- backend/app/crud.py | 7 +++++++ backend/tests/test_gegenstaende.py | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/backend/app/crud.py b/backend/app/crud.py index f6f4ec0..99f0aaf 100644 --- a/backend/app/crud.py +++ b/backend/app/crud.py @@ -19,7 +19,14 @@ def product_tracking(db: Session, product: Product) -> str: Ohne Kategorie gilt "food" – so bleibt das Verhalten bestehender (reiner Lebensmittel-)Installationen unverändert. Ein Artikel in einer Gegenstands-Kategorie wird als "object" geführt. + + Einzelstücke und Verbrauchsgegenstände sind immer Gegenstände: Diese Arten + gibt es nur bei Gegenständen, sie werden aber (anders als "Menge je Lagerort") + über ein Flag am Artikel geführt. So bleibt ein als Verbrauchsgegenstand + umgestellter Artikel auch ohne (Gegenstands-)Kategorie ein Gegenstand. """ + if product.individual or product.bulk: + return CategoryTracking.object.value if product.category_id is None: return CategoryTracking.food.value cat = product.category or db.get(Category, product.category_id) diff --git a/backend/tests/test_gegenstaende.py b/backend/tests/test_gegenstaende.py index 9cf336d..0585561 100644 --- a/backend/tests/test_gegenstaende.py +++ b/backend/tests/test_gegenstaende.py @@ -75,6 +75,23 @@ def test_gegenstandskategorie_macht_object(db): assert product_tracking(db, product) == "object" +def test_verbrauchsgegenstand_ohne_kategorie_ist_object(db): + # Nach dem Umstellen Lebensmittel -> Verbrauchsgegenstand hat der Artikel oft + # keine (Gegenstands-)Kategorie mehr. Das Flag muss ihn trotzdem als + # Gegenstand führen, sonst rutscht er zurück in die Lebensmittelliste. + product = Product(name="Sonnencreme", bulk=True) + db.add(product) + db.commit() + assert product_tracking(db, product) == "object" + + +def test_einzelstueck_ohne_kategorie_ist_object(db): + product = Product(name="Powerbank", individual=True) + db.add(product) + db.commit() + assert product_tracking(db, product) == "object" + + def test_neue_oberkategorie_ist_gegenstand(db): out = create_category(CategoryCreate(name="Werkzeug"), db, None) assert out.tracking == CategoryTracking.object