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:
Scarriffle
2026-07-22 21:41:43 +02:00
parent dfbc62398d
commit 5293810529
8 changed files with 102 additions and 14 deletions

View File

@@ -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} />