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