Dashboard zaehlt Einzelstuecke mit; Baum-Dropdown scrollbar
Auswertungen (by_category, expiry_split, stats) iterierten nur Lots. Gegenstaende mit Menge-je-Lagerort liegen als Lots und tauchten auf – Einzelstuecke liegen aber als Items und fehlten dadurch komplett (Dashboard zeigte z.B. nur die Powerbank, nicht Kamera/Kabel). Neuer Helfer _bestand_beitraege deckt beide Speicherformen ab: jedes Item zaehlt als ein Stueck ohne MHD. Regressionstest ergaenzt; volle Suite gruen (120). CategorySelect: Scrollen IM aufklappbaren Menue schloss es, weil jeder Scroll als Seiten-Scroll gewertet wurde. Jetzt schliesst nur ein Scroll ausserhalb des Menues; die lange Liste laesst sich scrollen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -2,9 +2,10 @@ from datetime import date, timedelta # noqa: F401 (date fuer die Zustands-Test
|
||||
|
||||
import pytest
|
||||
|
||||
from app.models import BaseUnit, Category, Product, Role, User
|
||||
from app.models import BaseUnit, Category, Item, Product, Role, User
|
||||
from app.routers import dashboard
|
||||
from app.services.conversion import article_unit, article_units
|
||||
from app.services.items import generate_uid
|
||||
from app.services.stock import check_in, check_out
|
||||
|
||||
|
||||
@@ -89,6 +90,31 @@ def test_by_category_bündelt_und_sortiert(db, user):
|
||||
assert anteile[1].article_units == 2
|
||||
|
||||
|
||||
def test_einzelstuecke_zaehlen_in_auswertungen(db, user):
|
||||
"""Regression: Einzelstueck-Produkte liegen als Items, nicht als Lots. Sie
|
||||
muessen trotzdem in Kategorie-, Ablauf- und Bestandsauswertung erscheinen –
|
||||
sonst zeigte das Dashboard nur die Mengen-Gegenstaende (Bug: nur Powerbank)."""
|
||||
kamera_kat = Category(name="Kamera", tracking="object")
|
||||
db.add(kamera_kat)
|
||||
db.commit()
|
||||
kamera = Product(name="Alpha 7 IV", category_id=kamera_kat.id, individual=True)
|
||||
db.add(kamera)
|
||||
db.commit()
|
||||
for _ in range(2):
|
||||
db.add(Item(uid=generate_uid(db), product_id=kamera.id))
|
||||
db.commit()
|
||||
|
||||
anteil = next(a for a in dashboard.by_category(db=db, _=user) if a.name == "Kamera")
|
||||
assert anteil.article_units == 2
|
||||
assert anteil.no_date == 2 # Einzelstuecke haben kein MHD
|
||||
|
||||
assert dashboard.expiry_split(db=db, _=user).no_date == 2
|
||||
|
||||
st = dashboard.stats(db=db, _=user)
|
||||
assert st.article_units == 2
|
||||
assert st.products_in_stock == 1
|
||||
|
||||
|
||||
# ----------------------------------------------------------------- Verlauf
|
||||
def test_schrittweite_haengt_am_zeitraum():
|
||||
"""Kurze Zeitraeume werden fein abgetastet, lange grob."""
|
||||
|
||||
Reference in New Issue
Block a user