Web: Mindestbestand je Lagerort im Formular in echter Einheit

Der je-Lagerort-Editor (foodLike) zeigt und speichert jetzt in der Anzeigeeinheit
(Gramm/Milliliter/Stueck) statt in Packungen - konsistent zur Mindestbestaende-
Seite. Umrechnung Artikeleinheit<->Anzeigeeinheit an der Formular-Grenze.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-07-28 09:02:10 +02:00
parent 49a96d7fdb
commit 3ff7d2a35a

View File

@@ -34,6 +34,13 @@ const CANONICAL_NAME = { piece: "Stück", gram: "Gramm", milliliter: "Milliliter
const KIND_LABEL = { count: "Anzahl", weight: "Gewicht", volume: "Volumen" }; const KIND_LABEL = { count: "Anzahl", weight: "Gewicht", volume: "Volumen" };
const KIND_ORDER = ["count", "weight", "volume"]; const KIND_ORDER = ["count", "weight", "volume"];
// Faktor Artikeleinheit → Anzeigeeinheit: die je-Lagerort-Mindestbestände sind in
// Artikeleinheiten (Packungen) gespeichert, angezeigt wird aber die echte Einheit
// (Gramm/Milliliter/Stück), damit „Packung" nicht nichtssagend dasteht.
const artToDisp = (p) => (
(p.package_size > 0 ? p.package_size : (p.unit_factor || 1)) / (p.unit_factor || 1)
);
// Foto vor dem Hochladen verkleinern: kleiner in der DB, schneller im Upload und // Foto vor dem Hochladen verkleinern: kleiner in der DB, schneller im Upload und
// zuverlässig unter dem Server-Limit. Bei Problemen fällt es aufs Original zurück. // zuverlässig unter dem Server-Limit. Bei Problemen fällt es aufs Original zurück.
function verkleinereBild(datei, maxDim = 1600, quality = 0.85) { function verkleinereBild(datei, maxDim = 1600, quality = 0.85) {
@@ -812,16 +819,19 @@ export default function ProductForm() {
</div> </div>
<p className="muted small mt-0"> <p className="muted small mt-0">
Zusätzlich zum Gesamt-Mindestbestand: eigener Bedarf je Lagerort (z.B. Zusätzlich zum Gesamt-Mindestbestand: eigener Bedarf je Lagerort (z.B.
Ferienhaus, Zuhause). Menge in {product.package_label || product.unit_name || "Stück"}. Ferienhaus, Zuhause). Menge in {product.unit_name || "Stück"}.
Wird separat gespeichert. Wird separat gespeichert.
</p> </p>
<LocationMinStock <LocationMinStock
locations={locations} locations={locations}
initial={product.location_min_stocks || []} initial={(product.location_min_stocks || []).map(
unitLabel={product.package_label || product.unit_name || "Stück"} (e) => ({ ...e, min_stock: e.min_stock * artToDisp(product) }))}
unitLabel={product.unit_name || "Stück"}
onError={(m) => toast(m, "warn")} onError={(m) => toast(m, "warn")}
onSave={async (list) => { onSave={async (list) => {
const updated = await api.setProductLocationMinStock(product.id, list); const f = artToDisp(product);
const artList = list.map((e) => ({ ...e, min_stock: e.min_stock / f }));
const updated = await api.setProductLocationMinStock(product.id, artList);
setProduct(updated); setProduct(updated);
toast("Bedarfe je Lagerort gespeichert."); toast("Bedarfe je Lagerort gespeichert.");
}} }}