From 85ac3dfa5005d9e9ca88e6b8c437a90038381c60 Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Thu, 23 Jul 2026 21:14:50 +0200 Subject: [PATCH] Schnellbuchungs-Karten: gueltige Einheit statt "article" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Ein-/Auslagern-Karten schickten unit: "article" - eine Einheit, die der Server nicht kennt (services/units.py akzeptiert nur package/packung bzw. die Basiseinheiten g/ml/stück). Jede Buchung ueber die Karte scheiterte damit an "Unbekannte Einheit: article", in der Web-Oberflaeche wie in der App. Jetzt wird die Menge in Artikeleinheiten gebucht: gibt es ein Gebinde, ist das eine Packung, sonst die Basiseinheit des Produkts. Gegen ein laufendes Backend geprueft (package und Basiseinheit je 200). Aufgefallen beim Testen der Ablauf-Benachrichtigungen. Co-Authored-By: Claude Opus 4.8 --- ios/Sources/DashboardCards.swift | 9 +++++---- web/src/dashboard/cards.jsx | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/ios/Sources/DashboardCards.swift b/ios/Sources/DashboardCards.swift index 2e4d2a7..f46cb94 100644 --- a/ios/Sources/DashboardCards.swift +++ b/ios/Sources/DashboardCards.swift @@ -108,17 +108,18 @@ struct QuickBookingCard: View { fehler = nil meldung = nil do { - // "article" ist die Einheit, in der der Artikel gefuehrt wird - - // genau die, die in der Karte steht. + // Menge in Artikeleinheiten: Gebinde -> Packung, sonst Basiseinheit. + // Der Server kennt kein "article". + let unit = (artikel.packageSize ?? 0) > 0 ? "package" : artikel.baseUnit if einlagern { let zeile = CheckInLine(quantity: wert, bestBefore: nil, bestBeforePrecision: "day", locationId: nil) _ = try await APIClient.shared.checkInBatch( - BatchCheckInRequest(productId: artikel.id, unit: "article", lines: [zeile])) + BatchCheckInRequest(productId: artikel.id, unit: unit, lines: [zeile])) } else { _ = try await APIClient.shared.checkOut( CheckOutRequest(productId: artikel.id, quantity: wert, - unit: "article", lotId: nil)) + unit: unit, lotId: nil)) } meldung = "\(formatAmount(wert)) \(einlagern ? "eingelagert" : "ausgelagert")." menge = "1" diff --git a/web/src/dashboard/cards.jsx b/web/src/dashboard/cards.jsx index 5db47d8..7d188cb 100644 --- a/web/src/dashboard/cards.jsx +++ b/web/src/dashboard/cards.jsx @@ -127,14 +127,15 @@ function KarteSchnellbuchung({ richtung }) { setFehler(null); setMeldung(null); try { - // "article" ist die Einheit, in der der Artikel gefuehrt wird (Gebinde - // oder Basiseinheit) - genau das, was in der Karte steht. + // Die Menge zaehlt in Artikeleinheiten: Gibt es ein Gebinde, ist das eine + // Packung, sonst die Basiseinheit. Der Server kennt kein "article". + const unit = artikel.package_size > 0 ? "package" : artikel.base_unit; if (einlagern) { await api.checkInBatch({ - product_id: artikel.id, unit: "article", lines: [{ quantity: zahl }], + product_id: artikel.id, unit, lines: [{ quantity: zahl }], }); } else { - await api.checkOut({ product_id: artikel.id, quantity: zahl, unit: "article" }); + await api.checkOut({ product_id: artikel.id, quantity: zahl, unit }); } setMeldung(`${fmt(zahl)} ${einlagern ? "eingelagert" : "ausgelagert"}.`); setMenge("1");