From 4e8be6a68435b29a9d7bed6c7402a233168b5677 Mon Sep 17 00:00:00 2001 From: Misaka Date: Thu, 21 May 2026 21:39:44 +0800 Subject: [PATCH] feat: allow on_shelf items in transit batch transfer Transit shelf registration is effectively an off-shelf operation. Allow not_shelved, on_shelf, and their mix when target is a transit shelf. Only transferred items are blocked since they are already in transit. Also fix conflict color logic: transferred items now correctly show as red (conflict) for both transit and normal shelf targets. Co-Authored-By: Claude Opus 4.6 --- .../parts/registration_submit_part.dart | 10 +++++----- .../registration/registration_calculations.dart | 14 ++++++++------ 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/pages/registration/parts/registration_submit_part.dart b/lib/pages/registration/parts/registration_submit_part.dart index 58c99ee..7068fe7 100644 --- a/lib/pages/registration/parts/registration_submit_part.dart +++ b/lib/pages/registration/parts/registration_submit_part.dart @@ -19,15 +19,15 @@ extension _RegistrationSubmitPart on _RegistrationPageState { setState(() => _isSubmitting = true); - // For transit target: block if any scanned item already has a location + // For transit target: block if any scanned item is already transferred + // (on_shelf items are allowed — transit registration acts as off-shelf) if (_isTransitTarget) { - if (_hasAnyLocatedInScanned()) { - final onShelfItems = _findOnShelfItemsInScanned(); - final transferredItems = _findTransferredItemsInScanned(); + final transferredItems = _findTransferredItemsInScanned(); + if (transferredItems.isNotEmpty) { setState(() => _isSubmitting = false); _feedbackService.trigger(FeedbackEvent.submitFailure); _showLocationConflictDialog( - onShelfItems: onShelfItems, + onShelfItems: [], transferredItems: transferredItems, ); return; diff --git a/lib/pages/registration/registration_calculations.dart b/lib/pages/registration/registration_calculations.dart index fe2042c..f7476e2 100644 --- a/lib/pages/registration/registration_calculations.dart +++ b/lib/pages/registration/registration_calculations.dart @@ -110,9 +110,10 @@ Color registrationBarColor({ required bool isTransitTarget, }) { if (isScanned) { - return status == 'on_shelf' && !isTransitTarget - ? Colors.red - : const Color(0xFF43A047); + final isConflict = isTransitTarget + ? status == 'transferred' + : (status == 'on_shelf' || status == 'transferred'); + return isConflict ? Colors.red : const Color(0xFF43A047); } switch (status) { @@ -131,9 +132,10 @@ Color registrationRowBgColor({ required bool isTransitTarget, }) { if (isScanned) { - return status == 'on_shelf' && !isTransitTarget - ? Colors.red.shade50 - : const Color(0xFFF1F8E9); + final isConflict = isTransitTarget + ? status == 'transferred' + : (status == 'on_shelf' || status == 'transferred'); + return isConflict ? Colors.red.shade50 : const Color(0xFFF1F8E9); } switch (status) {