Einlagern: - Barcode-Erkennung dreiteilig: bekannt -> direkt Menge; unbekannt aber in OFF -> "Anlegen & einlagern" inline; gar nicht gefunden -> manuell anlegen. - Mehrere Chargen pro Vorgang: je Zeile eigene Menge + eigenes MHD (z.B. 5 Glaeser mit unterschiedlichen Daten). Neuer Endpoint /stock/checkin/batch. Produkte/OFF: - OFF-Fuellmenge (quantity) wird in Basiseinheit + Packungsgroesse geparst (kg->g, l->ml, cl/dl); parse_quantity + Tests. - Produktformular uebernimmt Barcode aus ?barcode= und schlaegt automatisch nach, fuellt Packungsgroesse; gemeinsame offUtils (guessGroup/suggestionToProduct). Lagerorte: - Baum jetzt rekursiv ueber beliebig viele Ebenen (Schrank->Fach->Kiste->...). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
25 lines
756 B
Python
25 lines
756 B
Python
from app.off import parse_quantity
|
|
|
|
|
|
def test_grams():
|
|
assert parse_quantity("500 g") == ("gram", 500)
|
|
assert parse_quantity("500g") == ("gram", 500)
|
|
|
|
|
|
def test_kilograms_to_grams():
|
|
assert parse_quantity("1 kg") == ("gram", 1000)
|
|
assert parse_quantity("1,5 kg") == ("gram", 1500)
|
|
|
|
|
|
def test_liters_to_milliliters():
|
|
assert parse_quantity("1 l") == ("milliliter", 1000)
|
|
assert parse_quantity("0,5 l") == ("milliliter", 500)
|
|
assert parse_quantity("33 cl") == ("milliliter", 330)
|
|
assert parse_quantity("330 ml") == ("milliliter", 330)
|
|
|
|
|
|
def test_unparsable_is_piece():
|
|
assert parse_quantity(None) == ("piece", None)
|
|
assert parse_quantity("6 Stück") == ("piece", None)
|
|
assert parse_quantity("") == ("piece", None)
|