Lp 1735539: Fix Item Status ability to delete multiple copies. user/dyrcona/lp1735339-item-status-delete-multi
authorJason Stephenson <jason@sigio.com>
Thu, 12 Apr 2018 14:47:40 +0000 (10:47 -0400)
committerJason Stephenson <jason@sigio.com>
Thu, 12 Apr 2018 16:02:57 +0000 (12:02 -0400)
Set atomic to true for the PCRUD search in the item service's
selectedHoldingsCopyDelete method, and do an angular.forEach over the
results to properly fill the copy_objects array so that all copies end
up in it.  As it was only 1 copy was getting into the array.

To reproduce the bug:
   1. Open Item Status in the web staff client.
   2. Load multiple items, perhaps by uploading a file of barcodes.
   3. Select more than 1 item from the list.
   4. Choose "Delete Items" from the Actions menu.
   5. Note that the dialog indicates that you will delete 1 copy.
   6. Click the Cancel button in the dialog.

To test, after applying the fix branch:
   1. Open Item Status in the web staff client.
   2. Load multiple items, perhaps by uploading a file of barcodes.
   3. Select more than 1 item from the list.
   4. Choose "Delete Items" from the Actions menu.
   5. Note that that the dialog indicates you will delete X copies,
      where X is the number of items selected.
   6. Click OK and confirm that all copies were deleted.
   7. You can confirm 6 by reloading the interface and uploading the
      file of barcodes again.

Signed-off-by: Jason Stephenson <jason@sigio.com>
Open-ILS/web/js/ui/default/staff/circ/services/item.js

index 02a58d9..c908e53 100644 (file)
@@ -502,9 +502,12 @@ function(egCore , egCirc , $uibModal , $q , $timeout , $window , egConfirmDialog
         var copy_objects = [];
         egCore.pcrud.search('acp',
             {deleted : 'f', id : items.map(function(el){return el.id;}) },
-            { flesh : 1, flesh_fields : { acp : ['call_number'] } }
-        ).then(function(copy) {
-            copy_objects.push(copy);
+            { flesh : 1, flesh_fields : { acp : ['call_number'] } },
+            { atomic : true }
+        ).then(function(copies) {
+            angular.forEach(copies, function (copy) {
+                copy_objects.push(copy);
+            });
         }).then(function() {
 
             var cnHash = {};