webstaff: browser client: age to lost UI
authorBill Erickson <berickxx@gmail.com>
Mon, 20 Jul 2015 01:38:07 +0000 (21:38 -0400)
committerKathy Lussier <klussier@masslnc.org>
Tue, 2 Feb 2016 19:58:52 +0000 (14:58 -0500)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Open-ILS/src/templates/staff/admin/circ/index.tt2 [new file with mode: 0644]
Open-ILS/src/templates/staff/admin/circ/t_age_to_lost.tt2 [new file with mode: 0644]
Open-ILS/src/templates/staff/css/admin.css.tt2 [new file with mode: 0644]
Open-ILS/web/js/ui/default/staff/admin/circ/app.js [new file with mode: 0644]

diff --git a/Open-ILS/src/templates/staff/admin/circ/index.tt2 b/Open-ILS/src/templates/staff/admin/circ/index.tt2
new file mode 100644 (file)
index 0000000..50c52b8
--- /dev/null
@@ -0,0 +1,15 @@
+[%
+  WRAPPER "staff/base.tt2";
+  ctx.page_title = l("Evergreen Configuration"); 
+  ctx.page_app = "egAdminCirc";
+%]
+
+[% BLOCK APP_JS %]
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/services/eframe.js"></script>
+<script src="[% ctx.media_prefix %]/js/ui/default/staff/admin/circ/app.js"></script>
+<link rel="stylesheet" href="[% ctx.base_path %]/staff/css/admin.css" />
+[% END %]
+
+<div ng-view></div>
+
+[% END %]
diff --git a/Open-ILS/src/templates/staff/admin/circ/t_age_to_lost.tt2 b/Open-ILS/src/templates/staff/admin/circ/t_age_to_lost.tt2
new file mode 100644 (file)
index 0000000..c1e28dd
--- /dev/null
@@ -0,0 +1,80 @@
+<div class="container-fluid" style="text-align:center">
+  <div class="alert alert-info alert-less-pad strong-text-2">
+    [% l('Age Circulations to Lost') %]
+  </div>
+</div>
+
+<span>
+[% | l %]
+Choose the user profile and circulation library for the overdue circulations
+you wish to age to a Lost status.  Note the descendants of these values 
+(sub-groups, sub-libraries) will also be affected.
+[% END %]
+</span>
+
+<div id='age-to-lost-container'>
+  <div xclass="form-inline">
+    <div class="form-group">
+      <label class="col-md-2">[% l('User Profile') %]</label>
+      <div class="btn-group" dropdown>
+        <button type="button" class="btn btn-default dropdown-toggle">
+          <span style="padding-right: 5px;">{{selected_profile.name()}}</span>
+          <span class="caret"></span>
+        </button>
+        <ul class="dropdown-menu">
+          <li ng-repeat="grp in profiles">
+            <a href
+              style="padding-left: {{pgt_depth(grp) * 10 + 5}}px"
+              ng-click="set_profile(grp)">{{grp.name()}}</a>
+          </li>
+        </ul>
+      </div>
+    </div>
+    <div class="form-group">
+      <label class="col-md-2">[% l('Circulation Library') %]</label>
+      <eg-org-selector selected="context_org"></eg-org-selector>
+    </div>
+    <div class="form-group">
+      <label class="col-md-2">[% l('Are you sure?') %]</label>
+      <input type="checkbox" ng-model="i_am_sure"/>
+    </div>
+  </div>
+    <div class="form-group">
+      <button class="btn btn-default" 
+        ng-class="{disabled : !i_am_sure}" ng-click="age_to_lost()">
+        [% l('Queue for Aging') %]</button>
+    </div>
+  </div>
+
+  <div class="row" ng-show="in_progress">
+    <div class="col-md-3"></div>
+    <div class="progress progress-striped active col-md-6">
+      <div class="progress-bar" role="progressbar" aria-valuenow="100" 
+        aria-valuemin="0" aria-valuemax="100" style="width: 100%">
+        <span class="sr-only">[% l('Processing...') %]</span>
+      </div>
+    </div>
+  </div>
+
+  <div class="row" ng-show="in_progress || all_done">
+    <div class="col-md-3"></div>
+    <div class="col-md-3">
+      [% l('Chunks Processed: [_1]', '{{chunks_processed}}') %]</div>
+    <div class="col-md-3">
+      [% l('Events Created: [_1]', '{{events_created}}') %]</div>
+    </div>
+  </div>
+
+  <div class="row" ng-show="all_done">
+    <div class="col-md-3"></div>
+    <div class="col-md-6">
+     <div class="alert alert-success" role="alert">
+      [% l('Processing Complete') %]</div>
+    </div>
+  </div>
+
+</div>
+   
+
+
+
diff --git a/Open-ILS/src/templates/staff/css/admin.css.tt2 b/Open-ILS/src/templates/staff/css/admin.css.tt2
new file mode 100644 (file)
index 0000000..f418546
--- /dev/null
@@ -0,0 +1,12 @@
+
+#age-to-lost-container {
+  margin-top: 20px;
+}
+
+#age-to-lost-container .row {
+  margin-top: 20px;
+}
+
+#age-to-lost-container .form-group {
+  padding-right: 10px;
+}
diff --git a/Open-ILS/web/js/ui/default/staff/admin/circ/app.js b/Open-ILS/web/js/ui/default/staff/admin/circ/app.js
new file mode 100644 (file)
index 0000000..24d3aad
--- /dev/null
@@ -0,0 +1,86 @@
+/**
+ * App to drive the base page. 
+ * Login Form
+ * Splash Page
+ */
+
+angular.module('egAdminCirc',
+    ['ngRoute', 'ui.bootstrap', 'egCoreMod','egUiMod'])
+
+.config(['$routeProvider','$locationProvider','$compileProvider', 
+ function($routeProvider , $locationProvider , $compileProvider) {
+
+    $locationProvider.html5Mode(true);
+    $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|blob):/); 
+    var resolver = {delay : function(egStartup) {return egStartup.go()}};
+
+    $routeProvider.when('/admin/circ/age_to_lost', {
+        templateUrl: './admin/circ/t_age_to_lost',
+        controller: 'AgeToLostCtl',
+        resolve : resolver
+    });
+
+    // default page 
+    /*
+    $routeProvider.otherwise({
+        templateUrl : 'user-perms-template',
+        controller: 'UserPermsCtrl',
+        resolve : resolver
+    });
+    */
+}])
+
+.controller('AgeToLostCtl',
+       ['$scope','egCore',
+function($scope , egCore) {
+    $scope.i_am_sure = false;
+    $scope.chunks_processed = 0;
+    $scope.events_created = 0;
+
+    egCore.pcrud.search('pgt', {parent : null}, 
+        {flesh : -1, flesh_fields : {pgt : ['children']}}
+    ).then(
+        function(tree) {
+            egCore.env.absorbTree(tree, 'pgt')
+            $scope.profiles = egCore.env.pgt.list;
+            $scope.selected_profile = tree;
+        }
+    );
+
+    $scope.set_profile = function(g) {$scope.selected_profile = g}
+
+    // determine the tree depth of the profile group
+    $scope.pgt_depth = function(grp) {
+        var d = 0;
+        while (grp = egCore.env.pgt.map[grp.parent()]) d++;
+        return d;
+    }
+
+    $scope.age_to_lost = function() {
+        $scope.in_progress = true;
+        $scope.i_am_sure = false; // reset
+        $scope.all_done = false;
+
+        egCore.net.request(
+            'open-ils.circ',
+            'open-ils.circ.circulation.age_to_lost',
+            egCore.auth.token(), {
+                user_profile : $scope.selected_profile.id(),
+                circ_lib : $scope.context_org.id()
+            }
+        ).then(
+            function() {
+                $scope.in_progress = false;
+                $scope.all_done = true;
+            },
+            null, // on-error
+            function(response) {
+                if (!response) return;
+                if (response.progress)
+                    $scope.chunks_processed = response.progress;
+                if (response.created)
+                    $scope.events_created = response.created;
+            }
+        );
+    }
+}])