From e4face24bbe2a37675307ffeacbed9cd21ceae08 Mon Sep 17 00:00:00 2001 From: Galen Charlton Date: Fri, 5 Jun 2020 18:11:27 -0400 Subject: [PATCH] take steps to block checking out to patrons with certain conditions To wit: - patron is inactive - patron is barred - patron is expired - patron has active standing penalties that block CIRC Signed-off-by: Galen Charlton --- .../src/perlmods/lib/OpenILS/Application/Curbside.pm | 6 +++--- .../staff/circ/curbside/t_arrived_manager.tt2 | 7 +++++-- .../staff/circ/curbside/t_staged_manager.tt2 | 9 ++++++--- .../staff/circ/curbside/t_to_be_staged_manager.tt2 | 7 +++++-- .../staff/circ/curbside/directives/arrived_manager.js | 3 +++ .../staff/circ/curbside/directives/staged_manager.js | 3 +++ .../circ/curbside/directives/to_be_staged_manager.js | 4 +++- .../ui/default/staff/circ/curbside/services/core.js | 19 +++++++++++++++++++ 8 files changed, 47 insertions(+), 11 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Curbside.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Curbside.pm index 606a917156..8379bf3f0b 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Curbside.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Curbside.pm @@ -237,7 +237,7 @@ sub fetch_arrived { },{ ($limit ? (limit => $limit) : ()), ($offset ? (offset => $offset) : ()), - flesh => 2, flesh_fields => {acsp => ['patron'], au => ['card','standing_penalties']}, + flesh => 3, flesh_fields => {acsp => ['patron'], au => ['card','standing_penalties'], ausp => ['standing_penalty']}, order_by => { acsp => 'arrival' } }]); @@ -324,7 +324,7 @@ sub fetch_staged { },{ ($limit ? (limit => $limit) : ()), ($offset ? (offset => $offset) : ()), - flesh => 2, flesh_fields => {acsp => ['patron'], au => ['card','standing_penalties']}, + flesh => 3, flesh_fields => {acsp => ['patron'], au => ['card','standing_penalties'], ausp => ['standing_penalty']}, order_by => { acsp => 'slot' } }]); @@ -419,7 +419,7 @@ sub fetch_to_be_staged { },{ ($limit ? (limit => $limit) : ()), ($offset ? (offset => $offset) : ()), - flesh => 2, flesh_fields => {acsp => ['patron'], au => ['card','standing_penalties']}, + flesh => 3, flesh_fields => {acsp => ['patron'], au => ['card','standing_penalties'], ausp => ['standing_penalty']}, order_by => { acsp => 'slot' } }]); diff --git a/Open-ILS/src/templates/staff/circ/curbside/t_arrived_manager.tt2 b/Open-ILS/src/templates/staff/circ/curbside/t_arrived_manager.tt2 index 6123028863..bdc350bdb1 100644 --- a/Open-ILS/src/templates/staff/circ/curbside/t_arrived_manager.tt2 +++ b/Open-ILS/src/templates/staff/circ/curbside/t_arrived_manager.tt2 @@ -13,7 +13,7 @@ label="[% l('Refresh List')%]"> - + {{item.slot.patron().family_name()}} / {{item.slot.patron().card().barcode()}} @@ -22,11 +22,14 @@ [% l('Notes:') %] {{item.slot.notes()}} +
+ [% l('Patron is blocked from checkouts.') %] +
diff --git a/Open-ILS/src/templates/staff/circ/curbside/t_staged_manager.tt2 b/Open-ILS/src/templates/staff/circ/curbside/t_staged_manager.tt2 index c2a6023b93..9d3c580bdd 100644 --- a/Open-ILS/src/templates/staff/circ/curbside/t_staged_manager.tt2 +++ b/Open-ILS/src/templates/staff/circ/curbside/t_staged_manager.tt2 @@ -13,7 +13,7 @@ label="[% l('Refresh List')%]"> - + {{item.slot.patron().family_name()}} / {{item.slot.patron().card().barcode()}} @@ -22,13 +22,16 @@ [% l('Notes:') %] {{item.slot.notes()}} +
+ [% l('Patron is blocked from checkouts.') %] +
@@ -37,7 +40,7 @@
diff --git a/Open-ILS/src/templates/staff/circ/curbside/t_to_be_staged_manager.tt2 b/Open-ILS/src/templates/staff/circ/curbside/t_to_be_staged_manager.tt2 index a4f504fc38..ffe98df944 100644 --- a/Open-ILS/src/templates/staff/circ/curbside/t_to_be_staged_manager.tt2 +++ b/Open-ILS/src/templates/staff/circ/curbside/t_to_be_staged_manager.tt2 @@ -13,7 +13,7 @@ label="[% l('Refresh List')%]"> - + {{item.slot.patron().family_name()}} / {{item.slot.patron().card().barcode()}} @@ -22,6 +22,9 @@ [% l('Notes:') %] {{item.slot.notes()}} +
+ [% l('Patron is blocked from checkouts.') %] +
@@ -29,7 +32,7 @@ diff --git a/Open-ILS/web/js/ui/default/staff/circ/curbside/directives/arrived_manager.js b/Open-ILS/web/js/ui/default/staff/circ/curbside/directives/arrived_manager.js index 5c24ff4dfb..16132791aa 100644 --- a/Open-ILS/web/js/ui/default/staff/circ/curbside/directives/arrived_manager.js +++ b/Open-ILS/web/js/ui/default/staff/circ/curbside/directives/arrived_manager.js @@ -90,5 +90,8 @@ function($scope , $q , egCurbsideCoreSvc , egCore , egGridDataProvider , egProgr $scope.gridCellHandlers.wasHandled = function(id) { return $scope.wasHandled[id]; } + $scope.gridCellHandlers.patronIsBlocked = function(usr) { + return egCurbsideCoreSvc.patron_blocked(usr); + } }]}}); diff --git a/Open-ILS/web/js/ui/default/staff/circ/curbside/directives/staged_manager.js b/Open-ILS/web/js/ui/default/staff/circ/curbside/directives/staged_manager.js index 915582da76..2f0050cfbf 100644 --- a/Open-ILS/web/js/ui/default/staff/circ/curbside/directives/staged_manager.js +++ b/Open-ILS/web/js/ui/default/staff/circ/curbside/directives/staged_manager.js @@ -138,5 +138,8 @@ function($scope , $q , egCurbsideCoreSvc , egCore , egGridDataProvider , egProgr $scope.gridCellHandlers.wasHandled = function(id) { return $scope.wasHandled[id]; } + $scope.gridCellHandlers.patronIsBlocked = function(usr) { + return egCurbsideCoreSvc.patron_blocked(usr); + } }]}}); diff --git a/Open-ILS/web/js/ui/default/staff/circ/curbside/directives/to_be_staged_manager.js b/Open-ILS/web/js/ui/default/staff/circ/curbside/directives/to_be_staged_manager.js index e99e319c95..b3c7efcd1b 100644 --- a/Open-ILS/web/js/ui/default/staff/circ/curbside/directives/to_be_staged_manager.js +++ b/Open-ILS/web/js/ui/default/staff/circ/curbside/directives/to_be_staged_manager.js @@ -11,7 +11,6 @@ angular.module('egCurbsideAppDep') '$uibModal','$timeout','$location','egConfirmDialog','ngToast','$interval', function($scope , $q , egCurbsideCoreSvc , egCore , egGridDataProvider , $uibModal , $timeout , $location , egConfirmDialog , ngToast , $interval) { -console.debug('GMC'); $scope.gridControls = {}; @@ -89,5 +88,8 @@ console.debug('GMC'); $scope.gridCellHandlers.wasHandled = function(id) { return $scope.wasHandled[id]; } + $scope.gridCellHandlers.patronIsBlocked = function(usr) { + return egCurbsideCoreSvc.patron_blocked(usr); + } }]}}); diff --git a/Open-ILS/web/js/ui/default/staff/circ/curbside/services/core.js b/Open-ILS/web/js/ui/default/staff/circ/curbside/services/core.js index dc5faa1ef5..1dcd3b04fa 100644 --- a/Open-ILS/web/js/ui/default/staff/circ/curbside/services/core.js +++ b/Open-ILS/web/js/ui/default/staff/circ/curbside/services/core.js @@ -133,6 +133,25 @@ function(egCore , orderByFilter , $q , $filter , $uibModal , ngToast , egConfirm ); } + service.patron_blocked = function(usr) { + if (usr.barred() == 't' || + usr.active() == 'f') { + return true; + } + var expire = Date.parse(usr.expire_date()); + if (expire < new Date()) { + return true; + } + var blocked_by_penalty = false; + angular.forEach(usr.standing_penalties(), function(penalty) { + if (blocked_by_penalty) return; + if (penalty.stop_date()) return; + if (!penalty.standing_penalty().block_list()) return; + if (penalty.standing_penalty().block_list().match(/CIRC/)) + blocked_by_penalty = true; + }); + return blocked_by_penalty; + } return service; }]) -- 2.11.0