fix(loading): "Kein Scanvorgang notwendig"-Hinweis bei Set-Köpfen entfernen

Ein nicht-scanbarer Set-Kopf (Parent-Artikel) wird im Beladen-Screen über
seinen Komponenten gezeigt. Der Hinweis „Kein Scanvorgang notwendig" ist
dort irreführend, weil die (scanbaren) Komponenten darunter sehr wohl
gescannt werden. _ItemRow bekommt suppressScanHint; gesetzt nur für
Set-Köpfe (Artikelnummer wird von einer Komponente als parentArtikelNr
referenziert). Komponenten/echte Dienstleistungen behalten den Hinweis.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dennis Nemec
2026-06-24 11:05:35 +02:00
parent 7e345bd71b
commit 8b1b35b374

View File

@ -543,6 +543,21 @@ class _CustomerBody extends StatelessWidget {
// von einer Komponente als parentArtikelNr referenziert wird.
String? artNrOf(DeliveryItem it) =>
details.articleOf(it.articleId)?.articleNumber;
// Alle Set-Köpfe (Parent-Artikel): ein Item, dessen Artikelnummer von einer
// Komponente als parentArtikelNr referenziert wird. Für nicht-scanbare
// Set-Köpfe wird der „kein Scanvorgang notwendig"-Hinweis unterdrückt.
final componentParentNrs = delivery.items
.where((it) => it.isComponent)
.map((it) => it.parentArtikelNr)
.whereType<String>()
.toSet();
final setParentIds = delivery.items
.where((it) {
final nr = artNrOf(it);
return nr != null && componentParentNrs.contains(nr);
})
.map((it) => it.id)
.toSet();
// Set-Köpfe je Lagergruppe (warehouseId → einzuhängende Köpfe) +
// gesammelte IDs, um sie aus der Dienstleistungs-Sektion zu entfernen.
final injectedParentsByWarehouseId = <String, List<DeliveryItem>>{};
@ -670,6 +685,7 @@ class _CustomerBody extends StatelessWidget {
item: item,
details: details,
onAction: (action) => onItemAction(item, action),
suppressScanHint: setParentIds.contains(item.id),
),
],
// Gebuchte Dienstleistungen (nicht-scanbare Positionen ohne
@ -684,6 +700,7 @@ class _CustomerBody extends StatelessWidget {
item: item,
details: details,
onAction: (action) => onItemAction(item, action),
suppressScanHint: setParentIds.contains(item.id),
),
],
],
@ -1148,12 +1165,18 @@ class _ItemRow extends StatelessWidget {
required this.item,
required this.details,
required this.onAction,
this.suppressScanHint = false,
});
final DeliveryItem item;
final TourDetails details;
final void Function(_ItemAction action) onAction;
/// Unterdrückt den „Kein Scanvorgang notwendig"-Hinweis. Für nicht-scanbare
/// **Set-Köpfe** (Parent-Artikel): dort ist der Hinweis irreführend, weil die
/// (scanbaren) Komponenten darunter sehr wohl gescannt werden.
final bool suppressScanHint;
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
@ -1392,7 +1415,9 @@ class _ItemRow extends StatelessWidget {
],
// Dienstleistung (nicht-scanbar): Hinweis statt Scan/Manuell-
// Aktion. Steht an derselben Stelle wie der Manuell-Button.
if (scanNotRequired) ...[
// Bei Set-Köpfen (Parent-Artikel) bewusst unterdrückt — dort
// wäre „kein Scanvorgang notwendig" irreführend.
if (scanNotRequired && !suppressScanHint) ...[
const SizedBox(height: 8),
const _ScanNotRequiredHint(),
],