LP1721109: Update item status when holdings are edited
authorJane Sandberg <sandbej@linnbenton.edu>
Sat, 2 Mar 2019 01:03:31 +0000 (17:03 -0800)
committerChris Sharp <csharp@georgialibraries.org>
Thu, 7 Mar 2019 19:39:22 +0000 (14:39 -0500)
To test:
1) Go to Item Status List View, select an item, and go to Actions >
Edit > Items (or Call Numbers, or both).
2) Make a change to one of the columns you have active in
the Item Status list view. Click Save and Exit.
3) Note that the list view of Item Status has not updated.
4) Load this commit.
5) Repeat steps 1-2.
6) Note that the columns are updated this time.  Note that
there is a new status column, and that an icon appears for
all the rows that you have changed.  Also, note that there
is a toast message in the bottom right hand corner of the
screen confirming that you have successfully made your change.

Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
Signed-off-by: Chris Sharp <csharp@georgialibraries.org>

Open-ILS/src/templates/staff/cat/item/index.tt2
Open-ILS/src/templates/staff/cat/item/t_list.tt2
Open-ILS/web/js/ui/default/staff/cat/item/app.js

index 8373049..53cf23f 100644 (file)
     s.SUCCESS_UPDATE_INVENTORY =
       "[% l('Updated most recent inventory data for selected items.') %]";
     s.FAIL_UPDATE_INVENTORY =
-      "[% l('Failed to update recent inventory data for selected items.')%]"
+      "[% l('Failed to update recent inventory data for selected items.')%]";
+    s.ITEM_SUCCESSFULLY_MODIFIED =
+      "[% l('Item successfully modified') %]";
+    s.ITEMS_SUCCESSFULLY_MODIFIED =
+      "[% l('Item(s) successfully modified') %]";
+
   }])
 </script>
 [% END %]
index acf90e4..c0ac0c2 100644 (file)
@@ -7,6 +7,7 @@
   items-provider="gridDataProvider"
   grid-controls="gridControls"
   persist-key="cat.items"
+  status-column="statusIconColumn"
   dateformat="{{$root.egDateAndTimeFormat}}">
 
   <eg-grid-action handler="add_copies_to_bucket"
index 26f21ba..2e98c38 100644 (file)
@@ -290,6 +290,8 @@ function($scope , $q , $window , $location , $timeout , egCore , egNet , egGridD
         copyId = cp_list.split(',');
     }
 
+    var modified_items = new Set();
+
     $scope.context.page = 'list';
 
     /*
@@ -423,6 +425,21 @@ function($scope , $q , $window , $location , $timeout , egCore , egNet , egGridD
         return cp_id_list;
     }
 
+    $scope.refreshGridData = function() {
+        var chain = $q.when();
+        var all_items = itemSvc.copies.map((item) => {return item.id});
+        angular.forEach(all_items.reverse(), function(i) {
+            itemSvc.copies.shift();
+            chain = chain.then(function() {
+                return itemSvc.fetch(null, i);
+            });
+        });
+        return chain.then(function() {
+            copyGrid.refresh();
+        });
+    }
+
+
     $scope.add_copies_to_bucket = function() {
         var copy_list = gatherSelectedHoldingsIds();
         itemSvc.add_copies_to_bucket(copy_list);
@@ -613,6 +630,34 @@ function($scope , $q , $window , $location , $timeout , egCore , egNet , egGridD
         );
     }
 
+    $scope.statusIconColumn = {
+        isEnabled: true,
+        template:  function(item) {
+            var icon = '';
+            if (modified_items.has(item['id'])) {
+                icon = '<span class="glyphicon glyphicon-floppy-saved"' +
+                    'title="' + egCore.strings.ITEM_SUCCESSFULLY_MODIFIED + '" ' +
+                    'aria-label="' + egCore.strings.ITEM_SUCCESSFULLY_MODIFIED + '">' +
+                    '</span>';
+            }
+            return icon
+        }
+    }
+
+    if (typeof BroadcastChannel != 'undefined') {
+        var holdings_bChannel = new BroadcastChannel("eg.holdings.update");
+        holdings_bChannel.onmessage = function(e) {
+            angular.forEach(e.data.copies, function(i) {
+                modified_items.add(i);
+            });
+            ngToast.create(egCore.strings.ITEMS_SUCCESSFULLY_MODIFIED);
+            $scope.refreshGridData();
+        }
+        $scope.$on('$destroy', function() {
+            holdings_bChannel.close();
+        });
+    }
+
 }])
 
 /**