From 82c1aacc5500249fa7c75791b45d4f5f09894bfb Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Wed, 22 Jul 2026 12:50:28 +0200 Subject: [PATCH] Chargen: Packung als massgebliche Einheit, Basiseinheit als Untermenge Ist eine Packungsgroesse hinterlegt, sind Anzeige UND Bearbeitung der Chargen in Packungen; die Basiseinheit (z.B. Gramm) steht nur noch als Untermenge darunter. Ohne Packungsgroesse bleibt die Produkteinheit massgeblich. Produktkopf nennt ebenfalls zuerst die Packungen. Co-Authored-By: Claude Opus 4.8 --- web/src/pages/ProductForm.jsx | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/web/src/pages/ProductForm.jsx b/web/src/pages/ProductForm.jsx index 9253a9f..f7d5379 100644 --- a/web/src/pages/ProductForm.jsx +++ b/web/src/pages/ProductForm.jsx @@ -205,8 +205,10 @@ export default function ProductForm() {

{isNew ? "Neues Produkt" : form.name || "Produkt"}

{!isNew && product && (
- Bestand: {fmt(product.stock / (product.unit_factor || 1))} {product.unit_name} - {product.package_size ? ` · ${fmt(product.stock / product.package_size)} Pkg` : ""} + Bestand:{" "} + {product.package_size + ? `${fmt(product.stock / product.package_size)} Pkg · ${fmt(product.stock / (product.unit_factor || 1))} ${product.unit_name}` + : `${fmt(product.stock / (product.unit_factor || 1))} ${product.unit_name}`}
)} @@ -311,26 +313,29 @@ function LotsCard({ product, lots, baseShort, warnDays, isAdmin, imageUrl, onCha const [editId, setEditId] = useState(null); const [draft, setDraft] = useState({ quantity: "", best_before: "" }); - const factor = product?.unit_factor || 1; + const unitFactor = product?.unit_factor || 1; const unitName = product?.unit_name || baseShort; const pkgSize = product?.package_size || 0; - // Zweitangabe: Basiseinheit (falls abweichend) und/oder Packungen. + + // Maßgebliche Einheit: Packung, sobald eine Packungsgröße hinterlegt ist – + // sonst die Produkteinheit. Die Basiseinheit ist nur die Untermenge. + const primaryFactor = pkgSize > 0 ? pkgSize : unitFactor; + const primaryLabel = pkgSize > 0 ? "Pkg" : unitName; + + // Untermenge: Menge in der Basiseinheit (nur wenn sie sich unterscheidet). function secondary(qty) { - const parts = []; - if (factor !== 1) parts.push(`${fmt(qty)} ${baseShort}`); - if (pkgSize > 0) parts.push(`${fmt(qty / pkgSize)} Pkg`); - return parts.join(" · "); + return primaryFactor !== 1 ? `${fmt(qty)} ${baseShort}` : ""; } function startEdit(l) { setEditId(l.id); - setDraft({ quantity: l.quantity / factor, best_before: l.best_before || "" }); + setDraft({ quantity: l.quantity / primaryFactor, best_before: l.best_before || "" }); } async function saveEdit(l) { try { await api.updateLot(l.id, { - quantity: Number(draft.quantity) * factor, + quantity: Number(draft.quantity) * primaryFactor, best_before: draft.best_before || null, }); setEditId(null); @@ -377,11 +382,11 @@ function LotsCard({ product, lots, baseShort, warnDays, isAdmin, imageUrl, onCha setDraft({ ...draft, quantity: e.target.value })} style={{ maxWidth: 90, marginTop: 0 }} /> - {unitName} + {primaryLabel} ) : ( <> - {fmt(l.quantity / factor)} {unitName} + {fmt(l.quantity / primaryFactor)} {primaryLabel} {secondary(l.quantity) && (
{secondary(l.quantity)}
)} @@ -427,8 +432,8 @@ function LotsCard({ product, lots, baseShort, warnDays, isAdmin, imageUrl, onCha

- Mengen in {unitName} - {pkgSize > 0 ? `; 1 Packung = ${fmt(pkgSize)} ${baseShort}` : ""}. + Mengen in {pkgSize > 0 ? "Packungen" : unitName} + {pkgSize > 0 ? ` (1 Packung = ${fmt(pkgSize)} ${baseShort})` : ""}.

);