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 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-07-27 21:30:09 +02:00
parent 24ea55c396
commit 10a948df15
2 changed files with 24 additions and 0 deletions

View File

@@ -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)

View File

@@ -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