Schnellbuchungs-Karten: gueltige Einheit statt "article"

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 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-07-23 21:14:50 +02:00
parent 2ad197df42
commit 85ac3dfa50
2 changed files with 10 additions and 8 deletions

View File

@@ -108,17 +108,18 @@ struct QuickBookingCard: View {
fehler = nil fehler = nil
meldung = nil meldung = nil
do { do {
// "article" ist die Einheit, in der der Artikel gefuehrt wird - // Menge in Artikeleinheiten: Gebinde -> Packung, sonst Basiseinheit.
// genau die, die in der Karte steht. // Der Server kennt kein "article".
let unit = (artikel.packageSize ?? 0) > 0 ? "package" : artikel.baseUnit
if einlagern { if einlagern {
let zeile = CheckInLine(quantity: wert, bestBefore: nil, let zeile = CheckInLine(quantity: wert, bestBefore: nil,
bestBeforePrecision: "day", locationId: nil) bestBeforePrecision: "day", locationId: nil)
_ = try await APIClient.shared.checkInBatch( _ = try await APIClient.shared.checkInBatch(
BatchCheckInRequest(productId: artikel.id, unit: "article", lines: [zeile])) BatchCheckInRequest(productId: artikel.id, unit: unit, lines: [zeile]))
} else { } else {
_ = try await APIClient.shared.checkOut( _ = try await APIClient.shared.checkOut(
CheckOutRequest(productId: artikel.id, quantity: wert, CheckOutRequest(productId: artikel.id, quantity: wert,
unit: "article", lotId: nil)) unit: unit, lotId: nil))
} }
meldung = "\(formatAmount(wert)) \(einlagern ? "eingelagert" : "ausgelagert")." meldung = "\(formatAmount(wert)) \(einlagern ? "eingelagert" : "ausgelagert")."
menge = "1" menge = "1"

View File

@@ -127,14 +127,15 @@ function KarteSchnellbuchung({ richtung }) {
setFehler(null); setFehler(null);
setMeldung(null); setMeldung(null);
try { try {
// "article" ist die Einheit, in der der Artikel gefuehrt wird (Gebinde // Die Menge zaehlt in Artikeleinheiten: Gibt es ein Gebinde, ist das eine
// oder Basiseinheit) - genau das, was in der Karte steht. // Packung, sonst die Basiseinheit. Der Server kennt kein "article".
const unit = artikel.package_size > 0 ? "package" : artikel.base_unit;
if (einlagern) { if (einlagern) {
await api.checkInBatch({ await api.checkInBatch({
product_id: artikel.id, unit: "article", lines: [{ quantity: zahl }], product_id: artikel.id, unit, lines: [{ quantity: zahl }],
}); });
} else { } 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"}.`); setMeldung(`${fmt(zahl)} ${einlagern ? "eingelagert" : "ausgelagert"}.`);
setMenge("1"); setMenge("1");