From 45adadca23e94f9f023764f68920507e6f888d76 Mon Sep 17 00:00:00 2001 From: Galen Charlton Date: Wed, 14 Jun 2017 12:33:07 -0400 Subject: [PATCH] webstaff: teach serials grid how to resort on status, date expected, and date received Signed-off-by: Galen Charlton --- .../templates/staff/serials/t_view_items_grid.tt2 | 6 +-- .../staff/serials/directives/view-items-grid.js | 47 +++++++++++++++++----- .../js/ui/default/staff/serials/services/core.js | 18 +++++++-- 3 files changed, 55 insertions(+), 16 deletions(-) diff --git a/Open-ILS/src/templates/staff/serials/t_view_items_grid.tt2 b/Open-ILS/src/templates/staff/serials/t_view_items_grid.tt2 index 36f6bb2c61..acbb8e0096 100644 --- a/Open-ILS/src/templates/staff/serials/t_view_items_grid.tt2 +++ b/Open-ILS/src/templates/staff/serials/t_view_items_grid.tt2 @@ -83,9 +83,9 @@ {{item.issuance.date_published|date:'shortDate'}} - - {{item.date_expected|date:'shortDate'}} - {{item.date_received|date:'shortDate'}} + + {{item.date_expected|date:'shortDate'}} + {{item.date_received|date:'shortDate'}} diff --git a/Open-ILS/web/js/ui/default/staff/serials/directives/view-items-grid.js b/Open-ILS/web/js/ui/default/staff/serials/directives/view-items-grid.js index 2f7e298fbe..a9f8d68672 100644 --- a/Open-ILS/web/js/ui/default/staff/serials/directives/view-items-grid.js +++ b/Open-ILS/web/js/ui/default/staff/serials/directives/view-items-grid.js @@ -38,20 +38,49 @@ function($scope , $q , egSerialsCoreSvc , egCore , egGridDataProvider , orderByF activateItem : function (item) { } // TODO }; + function compileSort(sort) { + if (sort && angular.isArray(sort) && sort.length == 1) { + if (angular.isObject(sort[0])) { + for (key in sort[0]) { + return { + 'class' : 'sitem', + field : key, + direction : sort[0][key] + }; + } + } else { + return { 'class': 'sitem', field: sort[0] }; + } + } + } + var current_sort = []; $scope.itemGridProvider = egGridDataProvider.instance({ get : function(offset, count) { var self = this; - if (egSerialsCoreSvc.itemList.length >= offset + count) { // if there's anything on the requested page, notify + if (angular.equals(current_sort, self.sort) && egSerialsCoreSvc.itemList.length >= offset + count) { // if there's anything on the requested page, notify return self.arrayNotifier(egSerialsCoreSvc.itemList, offset, count); } else { // else try to fetch another page - return egSerialsCoreSvc.fetchItemsForSubPaged( - $scope.ssubId, - _paging_filter, - egSerialsCoreSvc.itemList.length, - count + offset - egSerialsCoreSvc.itemList.length - ).then(function() { - return self.arrayNotifier(egSerialsCoreSvc.itemList, offset, count); - }); + if (angular.equals(current_sort, self.sort)) { + return egSerialsCoreSvc.fetchItemsForSubPaged( + $scope.ssubId, + _paging_filter, + egSerialsCoreSvc.itemList.length, + count + offset - egSerialsCoreSvc.itemList.length, + compileSort(self.sort) + ).then(function() { + return self.arrayNotifier(egSerialsCoreSvc.itemList, offset, count); + }); + } else { + current_sort = self.sort; + return egSerialsCoreSvc.fetchItemsForSub( + $scope.ssubId, + _paging_filter, + null, + compileSort(self.sort) + ).then(function() { + return self.arrayNotifier(egSerialsCoreSvc.itemList, offset, count); + }); + } } } }); diff --git a/Open-ILS/web/js/ui/default/staff/serials/services/core.js b/Open-ILS/web/js/ui/default/staff/serials/services/core.js index ec109397da..8ace6ab525 100644 --- a/Open-ILS/web/js/ui/default/staff/serials/services/core.js +++ b/Open-ILS/web/js/ui/default/staff/serials/services/core.js @@ -194,16 +194,17 @@ function(egCore , orderByFilter , $q , $filter , $uibModal , ngToast , egConfirm }); } - service.fetchItemsForSubPaged = function(subId,filter,offset,limit) { + service.fetchItemsForSubPaged = function(subId,filter,offset,limit,sort) { return service.fetchItemsForSub( subId, filter, - { limit : limit, offset : offset, paging : true } + { limit : limit, offset : offset, paging : true }, + sort ); } // Creates an inverted tree from item to sub - service.fetchItemsForSub = function(subId,filter,options) { + service.fetchItemsForSub = function(subId,filter,options,sort) { var deferred = $q.defer(); // side-effects only, otherwise the grid is wonky if (!filter) filter = {}; @@ -233,6 +234,11 @@ function(egCore , orderByFilter , $q , $filter , $uibModal , ngToast , egConfirm sitem : ['issuance','editor','creator','unit','url'] } }); + if (sort) { + angular.extend(options, { + order_by : [sort] + }); + } egCore.pcrud.search( 'sitem', filter, options, @@ -283,7 +289,11 @@ function(egCore , orderByFilter , $q , $filter , $uibModal , ngToast , egConfirm }); // ... then sort it - service.itemList = orderByFilter(hashList, ['"issuance.date_published"', '"stream.distribution.holding_lib.name"', '"id"']); + if (sort) { + service.itemList = hashList; + } else { + service.itemList = orderByFilter(hashList, ['"issuance.date_published"', '"stream.distribution.holding_lib.name"', '"id"']); + } deferred.resolve(); }); -- 2.11.0