Chargen: mehrere auf einmal ausbuchen, teilweise abbuchen oder loeschen

Die Mehrfachauswahl gab es schon, sie konnte aber nur den Lagerort setzen.
Jetzt kommen drei Aktionen dazu: komplett ausbuchen, von jeder Charge
dieselbe Teilmenge abbuchen, und loeschen als Korrektur.

Anders als bulk-location kein Sammel-UPDATE: Je Charge muss eine Bewegung
entstehen, sonst fehlte der Vorgang im Verlauf und in der
Verbrauchsstatistik. Schlaegt eine Charge fehl, weil sie zu wenig enthaelt,
wird alles zurueckgerollt - ein halb gebuchter Stand waere schlimmer als
gar keiner, dieselbe Haltung wie beim Stapel-Einlagern.

Die gemeinsame Teilmenge gibt es nur, wenn alle ausgewaehlten Chargen zum
selben Artikel gehoeren. "1 Packung" bedeutet bei Milch und Broetchen
Verschiedenes; der Server lehnt es ab, und die Oberflaeche sperrt das Feld
gleich mit einem Hinweis, statt den Fehler erst nach dem Klick zu zeigen.

Loeschen schreibt wie das einzelne Loeschen eine Korrektur-Bewegung
(adjust, negative Menge) statt einer Entnahme - es ist eine Fehleingabe,
kein Verbrauch, und darf die Verbrauchsstatistik nicht verfaelschen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-02 12:41:23 +02:00
co-authored by Claude Opus 5
parent a182037153
commit c66bd0b09e
5 changed files with 408 additions and 4 deletions
+19
View File
@@ -636,6 +636,25 @@ class BulkLotLocation(BaseModel):
location_id: str | None = None
class BulkLotCheckout(BaseModel):
"""Mehrere Chargen auf einmal ausbuchen.
``quantity`` leer = jede Charge komplett. Mit Menge wird je Charge
dieselbe Menge abgebucht – das ergibt nur Sinn, wenn alle zum selben
Artikel gehören, sonst wäre die Einheit mehrdeutig (der Server lehnt es
dann ab).
"""
lot_ids: list[int]
quantity: float | None = Field(default=None, gt=0)
unit: str | None = None
note: str | None = Field(default=None, max_length=255)
class BulkLotDelete(BaseModel):
"""Mehrere Chargen als Korrektur entfernen (ohne sie als Verbrauch zu buchen)."""
lot_ids: list[int]
class LotSplit(BaseModel):
"""Eine Charge aufteilen: `quantity` (in Basiseinheiten) wird abgezweigt und
als neue Charge mit gleichem MHD an `location_id` gelegt; der Rest bleibt."""