diff --git a/lib/feature/loading/presentation/loading_customer_page.dart b/lib/feature/loading/presentation/loading_customer_page.dart index 37727a3..425de61 100644 --- a/lib/feature/loading/presentation/loading_customer_page.dart +++ b/lib/feature/loading/presentation/loading_customer_page.dart @@ -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() + .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 = >{}; @@ -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(), ],