webstaff: Booking Admininstration
authorJason Etheridge <jason@esilibrary.com>
Fri, 2 Dec 2016 21:24:26 +0000 (16:24 -0500)
committerKathy Lussier <klussier@masslnc.org>
Mon, 9 Jan 2017 15:58:59 +0000 (10:58 -0500)
  * Resource Attribute Maps
  * Resource Attribute Values
  * Resource Attributes
  * Resource Types
  * Resources

and a xulG load timing issue workaround

Signed-off-by: Jason Etheridge <jason@esilibrary.com>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>

Open-ILS/src/templates/conify/global/booking/resource.tt2
Open-ILS/src/templates/staff/admin/booking/index.tt2 [new file with mode: 0644]
Open-ILS/src/templates/staff/admin/booking/t_splash.tt2 [new file with mode: 0644]
Open-ILS/src/templates/staff/navbar.tt2
Open-ILS/web/js/ui/default/staff/admin/booking/app.js [new file with mode: 0644]

index 946a39c..66f92bf 100644 (file)
 
             var search = {'owner':list};
 
-            if (xulG && xulG.resultant_brsrc)
-                search = {id: xulG.resultant_brsrc};
+            setTimeout(
+                function() {
+                    if (xulG && xulG.resultant_brsrc)
+                        search = {id: xulG.resultant_brsrc};
 
-            brsrcGrid.overrideEditWidgets.type =
-                new openils.widget.PCrudAutocompleteBox({
-                    "fmclass": "brt", "searchAttr": "name"
-                });
-            brsrcGrid.overrideEditWidgets.type.shove = {"create": ""};
-            brsrcGrid.loadAll({order_by:{brsrc : 'barcode'}}, search);
+                    brsrcGrid.overrideEditWidgets.type =
+                        new openils.widget.PCrudAutocompleteBox({
+                            "fmclass": "brt", "searchAttr": "name"
+                        });
+                    brsrcGrid.overrideEditWidgets.type.shove = {"create": ""};
+                    brsrcGrid.loadAll({order_by:{brsrc : 'barcode'}}, search);
+                }, 0
+            );
         }
     );
 </script>
diff --git a/Open-ILS/src/templates/staff/admin/booking/index.tt2 b/Open-ILS/src/templates/staff/admin/booking/index.tt2
new file mode 100644 (file)
index 0000000..4c8b5da
--- /dev/null
@@ -0,0 +1,15 @@
+[%
+  WRAPPER "staff/base.tt2";
+  ctx.page_title = l("Booking Administration"); 
+  ctx.page_app = "egBookingAdmin";
+%]
+
+[% 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/booking/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/booking/t_splash.tt2 b/Open-ILS/src/templates/staff/admin/booking/t_splash.tt2
new file mode 100644 (file)
index 0000000..fcd79e8
--- /dev/null
@@ -0,0 +1,39 @@
+
+<div class="container-fluid" style="text-align:center">
+  <div class="alert alert-info alert-less-pad strong-text-2">
+    <span>[% l('Booking Administration') %]</span>
+  </div>
+</div>
+
+<div class="container admin-splash-container">
+
+[%
+    interfaces = [
+     [ l('Resource Attribute Maps'), "./admin/booking/conify/resource_attr_map" ]
+    ,[ l('Resource Attribute Values'), "./admin/booking/conify/resource_attr_value" ]
+    ,[ l('Resource Attributes'), "./admin/booking/conify/resource_attr" ]
+    ,[ l('Resource Types'), "./admin/booking/conify/resource_type" ]
+    ,[ l('Resources'), "./admin/booking/conify/resource" ]
+   ];
+
+   USE table(interfaces, cols=3);
+%]
+
+<div class="row">
+[% FOREACH col = table.cols %]
+    <div class="col-md-4">
+    [% FOREACH item = col %][% IF item.1 %]
+        <div class="row new-entry">
+            <div class="col-md-12">
+            <span class="glyphicon glyphicon-pencil"></span>
+            <a target="_self" href="[% item.1 %]">
+                [% item.0 %]
+            </a>
+            </div>
+        </div>
+    [% END %][% END %]
+    </div>
+[% END %]
+</div>
+
+</div>
index 23db624..e989fcf 100644 (file)
             </a>
           </li>
           <li>
+            <a href="./admin/booking/index" target="_self">
+              <span class="glyphicon glyphicon-calendar"></span>
+              [% l('Booking Administration') %]
+            </a>
+          </li>
+          <li>
             <a href="./reporter/legacy/main" target="_self">
               <span class="glyphicon glyphicon-object-align-bottom"></span>
               [% l('Reports') %]
diff --git a/Open-ILS/web/js/ui/default/staff/admin/booking/app.js b/Open-ILS/web/js/ui/default/staff/admin/booking/app.js
new file mode 100644 (file)
index 0000000..6f12e09
--- /dev/null
@@ -0,0 +1,60 @@
+angular.module('egBookingAdmin',
+    ['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()}};
+
+    var eframe_template = 
+        '<eg-embed-frame url="booking_admin_url" handlers="funcs"></eg-embed-frame>';
+
+    $routeProvider.when('/admin/booking/:noun/:verb/:extra?', {
+        template: eframe_template,
+        controller: 'EmbedBookingCtl',
+        resolve : resolver
+    });
+
+    // default page 
+    $routeProvider.otherwise({
+        templateUrl : './admin/booking/t_splash',
+        resolve : resolver
+    });
+}])
+
+.controller('EmbedBookingCtl',
+       ['$scope','$routeParams','$location','egCore',
+function($scope , $routeParams , $location , egCore) {
+
+    $scope.funcs = {
+        ses : egCore.auth.token(),
+    }
+
+    var booking_path = '/eg/';
+
+    if ($routeParams.noun == 'conify') {
+        booking_path += 'conify/global/booking/' + $routeParams.verb
+            + (typeof $routeParams.extra != 'undefined'
+                ? '/' + $routeParams.extra
+                : '')
+            + location.search;
+    } else {
+        booking_path += 'booking/'
+            + $routeParams.noun + '/' + $routeParams.verb
+            + (typeof $routeParams.extra != 'undefined'
+                ? '/' + $routeParams.extra
+                : '')
+            + location.search;
+    }
+
+    // embed URL must include protocol/domain or it will be loaded via
+    // push-state, resulting in an infinitely nested pages.
+    $scope.booking_admin_url =
+        $location.absUrl().replace(/\/eg\/staff.*/, booking_path);
+
+    console.log('Loading Admin Booking URL: ' + $scope.booking_admin_url);
+
+}])
+