LP#1950468: make Replace Barcode from Item Status detect duplicate barcodes
authorGalen Charlton <gmc@equinoxOLI.org>
Wed, 10 Nov 2021 15:06:36 +0000 (10:06 -0500)
committerJane Sandberg <sandbergja@gmail.com>
Wed, 20 Apr 2022 03:37:38 +0000 (20:37 -0700)
This patch makes the Replace Barcode action when invoked from
Item Status properly detect and warn if the replacement barcode
is a duplicate of one already found in the system. This is a complement
to the fix for bug 1890498.

To test
-------

[1] Enter an item barcode into Item Status.
[2] Try 'Replace Barcode' from detail view and set the
    replacement barcode to one that is already active in
    Evergreen. Note that the dialog closes without
    updating the barcode or warning about the duplicate and
    that a error is logged in the browser console.
[3] Repeat step 2, but this time from list view. Note
    the problem remains the same.
[4] Apply the patch and repeat steps 2 and 3. Note that
    now the dialog will remain open and will display an
    error message complaining about the duplicate barcode.

Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
Signed-off-by: Erica Rohlfs <erica.rohlfs@equinoxOLI.org>
Signed-off-by: Jane Sandberg <sandbergja@gmail.com>
Open-ILS/src/templates/staff/cat/share/t_replace_barcode.tt2
Open-ILS/web/js/ui/default/staff/circ/services/item.js

index 7e859fa..36fbb02 100644 (file)
@@ -31,6 +31,7 @@
 </div>
 
 <div class="row pad-vert">
+  <div class="col-md-1"></div>
   <div class="col-md-6">
     <div class="alert alert-danger" ng-if="copyNotFound">
       [% l('Item Not Found') %]
index 8070346..df7a6c9 100644 (file)
@@ -819,17 +819,27 @@ function(egCore , egOrg , egCirc , $uibModal , $q , $timeout , $window , ngToast
                                     return;
                                 }
 
-                                $scope.copyId = copy.id();
-                                copy.barcode($scope.barcode2);
-
-                                egCore.pcrud.update(copy).then(function(stat) {
-                                    $scope.updateOK = stat;
-                                    $scope.focusBarcode = true;
-                                    if (stat) service.add_barcode_to_list(copy.barcode());
+                                egCore.pcrud.search('acp',
+                                    {deleted : 'f', barcode : $scope.barcode2})
+                                .then(function(newBarcodeCopy) {
+
+                                    if (newBarcodeCopy) {
+                                        $scope.duplicateBarcode = true;
+                                        return;
+                                    }
+
+                                    $scope.copyId = copy.id();
+                                    copy.barcode($scope.barcode2);
+
+                                    egCore.pcrud.update(copy).then(function(stat) {
+                                        $scope.updateOK = stat;
+                                        $scope.focusBarcode = true;
+                                        if (stat) service.add_barcode_to_list(copy.barcode());
+                                        $uibModalInstance.close();
+                                    });
                                 });
 
                             });
-                            $uibModalInstance.close();
                         }
 
                         $scope.cancel = function($event) {