patron alerts panel; todo: menu access
authorBill Erickson <berick@esilibrary.com>
Mon, 12 May 2014 21:15:46 +0000 (17:15 -0400)
committerBill Erickson <berick@esilibrary.com>
Mon, 12 May 2014 21:15:46 +0000 (17:15 -0400)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Open-ILS/src/templates/staff/circ/patron/index.tt2
Open-ILS/src/templates/staff/circ/patron/t_alerts.tt2 [new file with mode: 0644]
Open-ILS/src/templates/staff/circ/patron/t_summary.tt2
Open-ILS/web/js/ui/default/staff/circ/patron/app.js
Open-ILS/web/js/ui/default/staff/circ/patron/checkout.js

index e8996c6..b7fdbc2 100644 (file)
@@ -42,7 +42,7 @@ angular.module('egCoreMod').run(['egStrings', function(s) {
   <div class="col-md-9">
     <ul class="nav nav-pills nav-pills-like-tabs">
       <li ng-class="{active : tab == 'checkout', disabled : !patron()}">
-        <a href="./circ/patron/{{patron().id()}}/checkout">[% l('Checkout') %]</a>
+        <a href="./circ/patron/{{patron().id()}}/checkout">[% l('Check Out') %]</a>
       </li>
       <li ng-class="{active : tab == 'items_out', disabled : !patron()}">
         <a href="./circ/patron/{{patron().id()}}/items_out">[% l('Items Out') %]</a>
diff --git a/Open-ILS/src/templates/staff/circ/patron/t_alerts.tt2 b/Open-ILS/src/templates/staff/circ/patron/t_alerts.tt2
new file mode 100644 (file)
index 0000000..324c56a
--- /dev/null
@@ -0,0 +1,49 @@
+<div>
+
+  <!-- FIXME: move image file -->
+  <img src='/xul/server/skin/media/images/stop_sign.png'>
+
+  <div class="row" ng-if="patron().alert_message()">
+    <div class="col-md-12">
+      <div class="panel panel-warning">
+        <div class="panel-heading">
+          <div class="panel-title text-center">[% l('Alert Message') %]</div>
+        </div>
+        <div class="panel-body">
+          {{patron().alert_message()}}
+        </div>
+      </div>
+    </div>
+  </div>
+
+  <div class="row" ng-if="patron().standing_penalties().length">
+    <div class="col-md-12">
+      <div class="panel panel-warning">
+        <div class="panel-heading">
+          <div class="panel-title text-center">[% l('Penalties') %]</div>
+        </div>
+        <div class="panel-body">
+          <div class="row" 
+            ng-repeat="penalty in patron().standing_penalties()">
+            <div class="col-md-2">
+              {{penalty.org_unit().shortname()}}
+            </div>
+            <div class="col-md-8"
+              title="{{penalty.standing_penalty().name()}}">
+              {{penalty.standing_penalty().label()}}
+              <div>{{penalty.note()}}</div><!-- force newline -->
+            </div>
+            <div class="col-md-2">
+              {{penalty.set_date() | date:'shortDate'}}
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+
+  <br/>
+  <div class="well">
+[% l('Press a navigation button above (for example, Check Out) to clear this alert.') %]
+  </div>
+</div>
index 4da37ae..493ebc0 100644 (file)
     <div class="row" 
       ng-class="{'patron-summary-divider' : !$index}"
       ng-repeat="penalty in patron().standing_penalties()">
-      <div class="col-md-9 patron-summary-alert"
+      <div 
+        ng-if="penalty.standing_penalty().block_list()"
+        class="col-md-9 patron-summary-alert"
         title="{{penalty.standing_penalty().name()}}">
         {{penalty.note() || penalty.standing_penalty().label()}}
       </div>
-      <div class="col-md-3">
+      <div class="col-md-3"
+        ng-if="penalty.standing_penalty().block_list()">
         {{penalty.set_date() | date:'shortDate'}}
       </div>
     </div>
index bca5e76..7140993 100644 (file)
@@ -62,9 +62,11 @@ angular.module('egPatronApp', ['ngRoute', 'ui.bootstrap',
         resolve : resolver
     });
 
-    $routeProvider.when('/circ/patron/:id/credentials', {
-        templateUrl: './circ/patron/t_credentials',
-        controller: 'PatronVerifyCredentialsCtrl',
+    // the following require a patron ID
+
+    $routeProvider.when('/circ/patron/:id/alerts', {
+        templateUrl: './circ/patron/t_alerts',
+        controller: 'PatronAlertsCtrl',
         resolve : resolver
     });
 
@@ -104,8 +106,12 @@ angular.module('egPatronApp', ['ngRoute', 'ui.bootstrap',
         resolve : resolver
     });
 
+    $routeProvider.when('/circ/patron/:id/credentials', {
+        templateUrl: './circ/patron/t_credentials',
+        controller: 'PatronVerifyCredentialsCtrl',
+        resolve : resolver
+    });
 
-    // default page / bucket view
     $routeProvider.otherwise({redirectTo : '/circ/patron/search'});
 })
 
@@ -141,6 +147,7 @@ function($q , $timeout , egCore,  egUser) {
         service.holds = [];
         service.hold_ids = [];
         service.checkout_overrides = {};
+        service.alertsShown = false;
     }
     service.resetPatronLists();  // initialize
 
@@ -661,6 +668,7 @@ function($scope,  $routeParams , $location , egCore) {
             egCore.auth.token(),
             $scope.barcode,
             $scope.username
+
         ).then(function(resp) {
 
             if (Number(resp)) {
@@ -687,4 +695,17 @@ function($scope,  $routeParams , $location , egCore) {
     }
 }])
 
+.controller('PatronAlertsCtrl',
+       ['$scope','$routeParams','$location','egCore','patronSvc',
+function($scope,  $routeParams , $location , egCore , patronSvc) {
+    patronSvc.alertsShown = true;
+
+    // called with a patron, pre-populate the form args
+    $scope.initTab('other', $routeParams.id).then(
+        function() {
+        }
+    );
+}])
+
+
 
index fcbc4a8..2ae0301 100644 (file)
@@ -5,12 +5,20 @@
 angular.module('egPatronApp').controller('PatronCheckoutCtrl',
 
        ['$scope','$q','$modal','$routeParams','egCore','egUser','patronSvc',
-        'egGridDataProvider',
+        'egGridDataProvider','$location',
 
-function($scope,  $q,  $modal,  $routeParams,  egCore, egUser,  patronSvc , 
-         egGridDataProvider) {
+function($scope , $q , $modal , $routeParams , egCore , egUser , patronSvc , 
+         egGridDataProvider , $location) {
 
-    $scope.initTab('checkout', $routeParams.id);
+    $scope.initTab('checkout', $routeParams.id).then(
+        function() {
+            var p = $scope.patron();
+            if (!patronSvc.alertsShown &&
+                (p.standing_penalties().length || p.alert_message())) {
+                $location.path('/circ/patron/' + p.id() + '/alerts');
+            }
+        }
+    );
 
     $scope.focusMe = true;
     $scope.checkouts = patronSvc.checkouts;