LP1721109: Update item status when holdings are edited user/sandbergja/lp1721109_update_item_status_after_holdings_changed
authorJane Sandberg <sandbej@linnbenton.edu>
Sat, 2 Mar 2019 01:03:31 +0000 (17:03 -0800)
committerJane Sandberg <sandbej@linnbenton.edu>
Tue, 5 Mar 2019 05:47:37 +0000 (21:47 -0800)
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>
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 0a78281..fd5f1c1 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 7f67e46..b376489 100644 (file)
@@ -6,6 +6,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 19e45f9..0e282e8 100644 (file)
@@ -254,6 +254,8 @@ function($scope , $q , $routeParams , $location , $timeout , $window , egCore ,
         copyId = cp_list.split(',');
     }
 
+    var modified_items = new Set();
+
     $scope.context.page = 'list';
 
     /*
@@ -387,6 +389,21 @@ function($scope , $q , $routeParams , $location , $timeout , $window , egCore ,
         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);
@@ -566,6 +583,34 @@ function($scope , $q , $routeParams , $location , $timeout , $window , egCore ,
         );
     }
 
+    $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();
+        });
+    }
+
 }])
 
 /**