pending patrons, initial
authorBill Erickson <berick@esilibrary.com>
Fri, 11 Jul 2014 18:41:56 +0000 (14:41 -0400)
committerBill Erickson <berick@esilibrary.com>
Fri, 11 Jul 2014 18:41:56 +0000 (14:41 -0400)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Open-ILS/src/templates/staff/circ/pending_patrons/index.tt2 [new file with mode: 0644]
Open-ILS/src/templates/staff/circ/pending_patrons/t_list.tt2 [new file with mode: 0644]
Open-ILS/src/templates/staff/navbar.tt2
Open-ILS/web/js/ui/default/staff/circ/pending_patrons/app.js [new file with mode: 0644]

diff --git a/Open-ILS/src/templates/staff/circ/pending_patrons/index.tt2 b/Open-ILS/src/templates/staff/circ/pending_patrons/index.tt2
new file mode 100644 (file)
index 0000000..99539e5
--- /dev/null
@@ -0,0 +1,17 @@
+[%
+  WRAPPER "staff/base.tt2";
+  ctx.page_title = l("Pending Patrons"); 
+  ctx.page_app = "egPendingPatronsApp";
+%]
+
+[% BLOCK APP_JS %]
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/services/grid.js"></script>
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/services/ui.js"></script>
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/services/user.js"></script>
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/pending_patrons/app.js"></script>
+<link rel="stylesheet" href="[% ctx.base_path %]/staff/css/circ.css" />
+[% END %]
+
+<div ng-view></div>
+
+[% END %]
diff --git a/Open-ILS/src/templates/staff/circ/pending_patrons/t_list.tt2 b/Open-ILS/src/templates/staff/circ/pending_patrons/t_list.tt2
new file mode 100644 (file)
index 0000000..3809d12
--- /dev/null
@@ -0,0 +1,34 @@
+<div class="container-fluid" style="text-align:center">
+  <div class="alert alert-info alert-less-pad strong-text-2">
+    <span>[% l('Pending Patrons') %]</span>
+  </div>
+</div>
+
+<span>[% l('Home Library: ' ) %]</span>
+<span><eg-org-selector selected="context_org"></eg-org-selector></span>
+<hr/>
+
+<eg-grid
+  id-field="id"
+  features="-sort,-multisort"
+  items-provider="grid_data_provider"
+  grid-controls="grid_controls"
+  persist-key="circ.pending_patrons.list">
+
+  <eg-grid-menu-item handler="load_patron" 
+    label="[% l('Load Patron') %]"></eg-grid-menu-item>
+
+  <eg-grid-field path='user.row_date' label="[% l('Create Date') %]"></eg-grid-field>
+  <eg-grid-field path='user.first_given_name' label="[% l('First Name') %]"></eg-grid-field>
+  <eg-grid-field path='user.second_given_name' label="[% l('Middle Name') %]"></eg-grid-field>
+  <eg-grid-field path='user.family_name' label="[% l('Last Name') %]"></eg-grid-field>
+  <eg-grid-field path='user.email' label="[% l('Email') %]"></eg-grid-field>
+  <eg-grid-field path='user.home_ou.shortname' label="[% l('Home Library') %]"></eg-grid-field>
+  <eg-grid-field path='mailing_address.street1' label="[% l('Street 1') %]"></eg-grid-field>
+  <eg-grid-field path='mailing_address.city' label="[% l('City') %]"></eg-grid-field>
+  <eg-grid-field path='mailing_address.post_code' label="[% l('Post Code') %]"></eg-grid-field>
+  <eg-grid-field path='user.usrname' label="[% l('Requested Username') %]"></eg-grid-field>
+  <eg-grid-field path='user.*' parent-idl-class="stgu" hidden></eg-grid-field>
+  <eg-grid-field path='mailing_address.*' parent-idl-class="stgma" hidden></eg-grid-field>
+</eg-grid>
+
index 3ce1a65..036dc40 100644 (file)
             <a href="./circ/patron/search" target="_self"
               eg-accesskey="[% l('alt+s') %]" 
               eg-accesskey-desc="[% l('Patron search by name, address, etc.') %]">
-              <span class="glyphicon glyphicon-search"></span>
+              <span class="glyphicon glyphicon-user"></span>
               <span eg-accesskey-label>[% l('Search for Patrons') %]</span>
             </a>
           </li>
           <li>
             <a href="./cat/item/search" target="_self">
-              <span class="glyphicon glyphicon-search"></span>
+              <span class="glyphicon glyphicon-barcode"></span>
               <span>[% l('Search for Copies by Barcode') %]</span>
             </a>
           </li>
               [% l('Retrieve Last Patron') %]
             </a>
           </li>
+          <li>
+            <a href="./circ/pending_patrons/list" target="_self">
+              <span class="glyphicon glyphicon-thumbs-up"></span>
+              [% l('Pending Patrons') %]
+            </a>
+          </li>
           <li class="divider"></li>
           <li>
             <a href="./circ/patron/credentials" target="_self">
diff --git a/Open-ILS/web/js/ui/default/staff/circ/pending_patrons/app.js b/Open-ILS/web/js/ui/default/staff/circ/pending_patrons/app.js
new file mode 100644 (file)
index 0000000..7a1b4e3
--- /dev/null
@@ -0,0 +1,74 @@
+angular.module('egPendingPatronsApp', 
+    ['ngRoute', 'ui.bootstrap', 'egCoreMod', 'egUiMod', 'egGridMod'])
+
+.config(function($routeProvider, $locationProvider, $compileProvider) {
+    $locationProvider.html5Mode(true);
+    $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|blob):/); // grid export
+
+    var resolver = {delay : 
+        ['egStartup', function(egStartup) {return egStartup.go()}]}
+
+    $routeProvider.when('/circ/pending_patrons/list', {
+        templateUrl: './circ/pending_patrons/t_list',
+        controller: 'PendingPatronsCtrl',
+        resolve : resolver
+    });
+
+    $routeProvider.otherwise({redirectTo : '/circ/pending_patrons/list'});
+})
+
+.controller('PendingPatronsCtrl',
+       ['$scope','$q','$routeParams','$window','$location','egCore','egGridDataProvider',
+function($scope , $q , $routeParams , $window , $location , egCore , egGridDataProvider) {
+
+    var pending_patrons = [];
+    var provider = egGridDataProvider.instance({});
+    $scope.grid_data_provider = provider;
+
+    function load_patron(item) {
+        if (angular.isArray(item)) item = item[0];
+        if (!item) return;
+        // TODO: where does patron editor w/ no context patron live?
+    }
+
+    $scope.grid_controls = {
+        activateItem : load_patron
+    }
+
+    function refresh_page() {
+        pending_patrons = [];
+        provider.refresh();
+    }
+
+    provider.get = function(offset, count) {
+        var deferred = $q.defer();
+        var recv_index = 0;
+
+        egCore.net.request(
+            'open-ils.actor',
+            'open-ils.actor.user.stage.retrieve.by_org',
+            egCore.auth.token(), $scope.context_org.id()
+
+        ).then(
+            deferred.resolve, null, 
+            function(user) {
+                user.id = user.user.row_id();
+                user.user.home_ou(egCore.org.get(user.user.home_ou()));
+
+                // only one (mailing) address is captured during patron
+                // self-registration
+                user.mailing_address = user.mailing_addresses[0];
+                pending_patrons[offset + recv_index++] = user;
+                deferred.notify(user);
+            }
+        );
+
+        return deferred.promise;
+    }
+
+    $scope.context_org = egCore.org.get(egCore.auth.user().ws_ou())
+    $scope.$watch('context_org', function(newVal, oldVal) {
+        if (newVal && newVal != oldVal) refresh_page();
+    });
+}])
+