Gruppen-Codes: Dublette behoben und Altbestand nachgezogen
Zwei Fehler in der EAN-Liste einer Gruppe, beide gemeldet und nachgestellt. Derselbe Code stand zweimal in der Liste: einmal schreibgeschuetzt mit der Kennzeichnung "Artikel", einmal darunter mit Notizfeld. Grund war, dass _group_to_out die Codes der Artikel unabhaengig von den Gruppen-Codes zusammengestellt hat - seit die Zuordnung automatisch einen Gruppen-Code anlegt, trifft beides auf denselben Code zu. Die schreibgeschuetzte Zeile stand oben, deshalb war das Notizfeld darunter leicht zu uebersehen. Jetzt gibt es eine Zeile je Code. Der Gruppen-Code fuehrt den Artikel mit, ueber den er dazugehoert (neues Feld product_name in BarcodeOut), zeigt weiterhin die Kennzeichnung "Artikel" - und hat trotzdem ein Notizfeld. Der Muelleimer entfaellt bei diesen Codes, denn sie kaemen beim naechsten Speichern des Artikels sofort zurueck; dafuer muss der Artikel die Gruppe wechseln. Zweitens fehlte fuer bestehende Daten der Code ganz. Die automatische Pflege greift nur beim Anlegen und Aendern eines Artikels; Zuordnungen, die es vorher schon gab, hatten nie einen Gruppen-Code bekommen. In der Verwaltung stand der Code deshalb ausschliesslich als schreibgeschuetzte Artikel-Zeile - genau die Stelle, an der sich keine Notiz hinterlegen liess. Neu holt backfill() das beim Start nach: fuer jeden Artikel mit Gruppe und Barcode wird der Gruppen-Code angelegt, sofern er fehlt. Gefahrlos wiederholbar. Getestet: 58 pytest-Tests gruen, einer neu (Backfill legt den fehlenden Code an und beim zweiten Lauf nichts doppelt). Der gemeldete Fall wurde vorher gegen die laufende API nachgestellt - Altbestand ohne Gruppen-Code und ein doppelt gelisteter Code nach einer Neuanlage - und danach als behoben bestaetigt: eine Zeile je Code, mit Artikelnamen und Notizfeld. Web-Build laeuft durch. Die Oberflaeche habe ich nicht selbst bedient. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -47,8 +47,14 @@ export default function BarcodeList({
|
||||
<li key={b.id ?? b.code}>
|
||||
<span style={{ display: "flex", alignItems: "center", gap: 8, minWidth: 0, flex: 1 }}>
|
||||
<code className="strong">{b.code}</code>
|
||||
{/* Notiz auch nachtraeglich aenderbar - automatisch angelegte Codes
|
||||
hatten sonst nie eine Gelegenheit, eine zu bekommen. */}
|
||||
{/* Gehört der Code über einen Artikel zur Gruppe, steht das dabei –
|
||||
eine Notiz ist trotzdem möglich. */}
|
||||
{b.product_name && (
|
||||
<>
|
||||
<span className="badge">Artikel</span>
|
||||
<span className="muted small">{b.product_name}</span>
|
||||
</>
|
||||
)}
|
||||
{onEditNote && !disabled ? (
|
||||
<input defaultValue={b.note || ""} placeholder="Notiz…"
|
||||
style={{ marginTop: 0, maxWidth: 220 }}
|
||||
@@ -60,7 +66,10 @@ export default function BarcodeList({
|
||||
b.note && <span className="muted small">{b.note}</span>
|
||||
)}
|
||||
</span>
|
||||
{!disabled && (
|
||||
{/* Codes, die über einen Artikel hier stehen, lassen sich nicht
|
||||
entfernen – sie kämen beim nächsten Speichern sofort zurück.
|
||||
Dafür muss der Artikel die Gruppe wechseln. */}
|
||||
{!disabled && !b.product_name && (
|
||||
<button className="btn-icon danger" title="Code entfernen"
|
||||
onClick={() => onDelete(b.code)}>
|
||||
<Icon name="trash" size={16} />
|
||||
|
||||
Reference in New Issue
Block a user