browser client experiment w/ idl/pcrud-based pull list; in progress user/berick/browser-staff-pull-list-from-idl
authorBill Erickson <berick@esilibrary.com>
Wed, 20 Aug 2014 20:45:47 +0000 (16:45 -0400)
committerBill Erickson <berick@esilibrary.com>
Wed, 20 Aug 2014 20:45:47 +0000 (16:45 -0400)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Open-ILS/examples/fm_IDL.xml
Open-ILS/src/templates/staff/circ/holds/t_pull_list.tt2
Open-ILS/web/js/ui/default/staff/circ/holds/app.js
Open-ILS/web/js/ui/default/staff/services/grid.js

index c418c58..1dc2084 100644 (file)
@@ -5355,7 +5355,7 @@ SELECT  usr,
                        <field reporter:label="Status" name="status" oils_persist:virtual="true" />
                        <field reporter:label="Transit" name="transit" oils_persist:virtual="true" />
                        <field reporter:label="Capture Date/Time" name="capture_time" reporter:datatype="timestamp"/>
-                       <field reporter:label="Currently Targeted Copy" name="current_copy" />
+                       <field reporter:label="Currently Targeted Copy" name="current_copy" reporter:datatype="link"/>
                        <field reporter:label="Notify by Email?" name="email_notify" reporter:datatype="bool"/>
                        <field reporter:label="Hold Expire Date/Time" name="expire_time" reporter:datatype="timestamp"/>
                        <field reporter:label="Fulfilling Library" name="fulfillment_lib" reporter:datatype="org_unit"/>
@@ -5502,7 +5502,7 @@ SELECT  usr,
                        <field reporter:label="Status" name="status" oils_persist:virtual="true" />
                        <field reporter:label="Transit" name="transit" oils_persist:virtual="true" />
                        <field reporter:label="Capture Date/Time" name="capture_time" reporter:datatype="timestamp"/>
-                       <field reporter:label="Currently Targeted Copy" name="current_copy" />
+                       <field reporter:label="Currently Targeted Copy" name="current_copy" reporter:datatype="link"/>
                        <field reporter:label="Notify by Email?" name="email_notify" reporter:datatype="bool"/>
                        <field reporter:label="Hold Expire Date/Time" name="expire_time" reporter:datatype="timestamp"/>
                        <field reporter:label="Fulfilling Library" name="fulfillment_lib" reporter:datatype="org_unit"/>
@@ -5587,7 +5587,7 @@ SELECT  usr,
                        <field reporter:label="Status" name="status" oils_persist:virtual="true" />
                        <field reporter:label="Transit" name="transit" oils_persist:virtual="true" />
                        <field reporter:label="Capture Date/Time" name="capture_time" reporter:datatype="timestamp"/>
-                       <field reporter:label="Currently Targeted Copy" name="current_copy" />
+                       <field reporter:label="Currently Targeted Copy" name="current_copy" reporter:datatype="link"/>
                        <field reporter:label="Notify by Email?" name="email_notify" reporter:datatype="bool"/>
                        <field reporter:label="Hold Expire Date/Time" name="expire_time" reporter:datatype="timestamp"/>
                        <field reporter:label="Fulfilling Library" name="fulfillment_lib" reporter:datatype="org_unit"/>
@@ -5669,7 +5669,7 @@ SELECT  usr,
                <fields oils_persist:primary="id" oils_persist:sequence="action.hold_request_id_seq">
                        <field reporter:label="Status" name="status" oils_persist:virtual="true" />
                        <field reporter:label="Capture Date/Time" name="capture_time" reporter:datatype="timestamp"/>
-                       <field reporter:label="Currently Targeted Copy" name="current_copy" />
+                       <field reporter:label="Currently Targeted Copy" name="current_copy" reporter:datatype="link"/>
                        <field reporter:label="Notify by Email?" name="email_notify" reporter:datatype="bool"/>
                        <field reporter:label="Hold Expire Date/Time" name="expire_time" reporter:datatype="timestamp"/>
                        <field reporter:label="Fulfilling Library" name="fulfillment_lib" reporter:datatype="org_unit"/>
@@ -5728,7 +5728,7 @@ SELECT  usr,
                <fields oils_persist:primary="id" oils_persist:sequence="action.hold_request_id_seq">
                        <field reporter:label="Status" name="status" oils_persist:virtual="true" />
                        <field reporter:label="Capture Date/Time" name="capture_time" reporter:datatype="timestamp"/>
-                       <field reporter:label="Currently Targeted Copy" name="current_copy" />
+                       <field reporter:label="Currently Targeted Copy" name="current_copy" reporter:datatype="link"/>
                        <field reporter:label="Notify by Email?" name="email_notify" reporter:datatype="bool"/>
                        <field reporter:label="Hold Expire Date/Time" name="expire_time" reporter:datatype="timestamp"/>
                        <field reporter:label="Fulfilling Library" name="fulfillment_lib" reporter:datatype="org_unit"/>
index 8cea1d1..6f3fac6 100644 (file)
@@ -4,8 +4,8 @@
 
 <eg-grid
   id-field="id"
-  features="-sort,-multisort"
-  items-provider="gridDataProvider"
+  idl-class="ahopl"
+  grid-controls="gridControls"
   persist-key="circ.holds.pull">
 
   <eg-grid-menu-item handler="detail_view" 
   <eg-grid-action handler="grid_actions.cancel_hold"
     label="[% l('Cancel Hold') %]"></eg-grid-action>
 
-  <eg-grid-field label="[% l('Hold ID') %]" path='hold.id'></eg-grid-field>
+  <eg-grid-field name="shelving_loc" path="current_copy.location.name" 
+    label="[% l('Shelving Location') %]"></eg-grid-field>
+  <eg-grid-field name="call_number_label_foo" path="call_number_label" 
+    label="[% l('Call Number') %]"></eg-grid-field>
+  <eg-grid-field name="author" 
+    path="current_copy.call_number.record.simple_record.author" 
+    label="[% l('Author') %]"></eg-grid-field>
+  <eg-grid-field name="title" 
+    path="current_copy.call_number.record.simple_record.title" 
+    label="[% l('Title') %]"></eg-grid-field>
+  <eg-grid-field name="barcode" path="current_copy.barcode" 
+    label="[% l('Current Copy') %]"></eg-grid-field>
+  <eg-grid-field name="parts" path="current_copy.parts.label" 
+    label="[% l('Parts') %]"></eg-grid-field>
+  <eg-grid-field name="copy_status" path="current_copy.status.name" 
+    label="[% l('Copy Status') %]"></eg-grid-field>
+  <eg-grid-field name="notes" path="notes.body" 
+    hidden label="[% l('Hold Notes') %]"></eg-grid-field>
+  <eg-grid-field name="patron_barcode" path="usr.card.barcode" 
+    hidden label="[% l('Patron Barcode') %]"></eg-grid-field>
+  <eg-grid-field name="pickup_lib_name" path="pickup_lib.name" 
+    hidden label="[% l('Pickup Library') %]"></eg-grid-field>
+  <eg-grid-field name="pickup_lib_shortname" path="pickup_lib.shortname" 
+    hidden label="[% l('Pickup Library (Shortname)') %]"></eg-grid-field>
+  <eg-grid-field name="request_lib_name" path="request_lib.name" 
+    hidden label="[% l('Request Library') %]"></eg-grid-field>
+  <eg-grid-field name="request_lib_shortname" path="request_lib.shortname" 
+    hidden label="[% l('Request Library (Shortname)') %]"></eg-grid-field>
+  <eg-grid-field name="selection_ou" path="selection_ou.shortname" 
+    hidden label="[% l('Selection Locus') %]"></eg-grid-field>
+  <eg-grid-field name="sms_carrier_name" path="sms_carrier.name" 
+    hidden label="[% l('SMS Carrier') %]"></eg-grid-field>
+  <eg-grid-field name="cn_prefix" path="current_copy.call_number.prefix.label" 
+    hidden label="[% l('Call Number Prefix') %]"></eg-grid-field>
+  <eg-grid-field name="cn_suffix" path="current_copy.call_number.suffix.label"
+    hidden label="[% l('Call Number Suffix') %]"></eg-grid-field>
+  <eg-grid-field name="copy_location_order_position"
+    hidden label="[% l('Copy Location Order Position') %]"></eg-grid-field>
+  <eg-grid-field name="call_number_sort_key"
+    hidden label="[% l('Call Number Sort Key') %]"></eg-grid-field>
+  <eg-grid-field label="[% l('Potential Copies') %]" 
+    path='potential_copies'></eg-grid-field>
+
+<!--
+  <eg-grid-field label="[% l('Hold ID') %]" path='id'></eg-grid-field>
   <eg-grid-field label="[% l('Current Copy') %]" 
     path='hold.current_copy.barcode'>
-    <a href="./cat/item/{{item.hold.current_copy().id()}}/summary" target="_self">
+    <a href="./cat/item/{{'item['current_copy.id']}}/summary" target="_self">
       {{item.hold.current_copy().barcode()}}
     </a>
   </eg-grid-field>
   <eg-grid-field path='copy.*' parent-idl-class="acp" hidden></eg-grid-field>
   <eg-grid-field path='volume.*' parent-idl-class="acn" hidden></eg-grid-field>
   <eg-grid-field path='mvr.*' parent-idl-class="mvr" hidden></eg-grid-field>
+-->
+
 </eg-grid>
 
index 21e9ffc..1b5bf5c 100644 (file)
@@ -35,11 +35,6 @@ angular.module('egHoldsApp',
     $routeProvider.otherwise({redirectTo : '/circ/holds/shelf'});
 })
 
-.factory('holdUiSvc', function() {
-    return {
-        holds : [] // cache
-    }
-})
 
 .controller('HoldsShelfCtrl',
        ['$scope','$q','$routeParams','$window','$location','egCore','egHolds','egHoldGridActions','egCirc','egGridDataProvider',
@@ -206,44 +201,25 @@ function($scope , $q , $routeParams , $window , $location , egCore , egHolds , e
 }])
 
 .controller('HoldsPullListCtrl',
-       ['$scope','$q','$routeParams','$window','$location','egCore','egHolds','egCirc','egGridDataProvider','egHoldGridActions','holdUiSvc',
-function($scope , $q , $routeParams , $window , $location , egCore , egHolds , egCirc , egGridDataProvider , egHoldGridActions , holdUiSvc)  {
+       ['$scope','$q','$routeParams','$window','$location','egCore','egHolds','egCirc','egHoldGridActions',
+function($scope , $q , $routeParams , $window , $location , egCore , egHolds , egCirc , egHoldGridActions) {
     $scope.detail_hold_id = $routeParams.hold_id;
 
-    var provider = egGridDataProvider.instance({});
-    $scope.gridDataProvider = provider;
+    $scope.gridControls = {
+        setQuery : function() {
+            return {pickup_lib : egCore.auth.user().ws_ou()}
+        },
+        setSort : function() {
+            return ['copy_location_order_position','call_number_sort_key']
+        }
+    }
 
     $scope.grid_actions = egHoldGridActions;
     $scope.grid_actions.refresh = function() {
-        holdUiSvc.holds = [];
-        provider.refresh();
+        $scope.gridControls.refresh();
     }
 
-    provider.get = function(offset, count) {
-
-        if (holdUiSvc.holds[offset]) {
-            return provider.arrayNotifier(holdUiSvc.holds, offset, count);
-        }
-
-        var deferred = $q.defer();
-        var recv_index = 0;
-
-        // fetch the IDs
-        egCore.net.request(
-            'open-ils.circ',
-            'open-ils.circ.hold_pull_list.fleshed.stream',
-            egCore.auth.token(), count, offset
-        ).then(
-            deferred.resolve, null, 
-            function(hold_data) {
-                egHolds.local_flesh(hold_data);
-                holdUiSvc.holds[offset + recv_index++] = hold_data;
-                deferred.notify(hold_data);
-            }
-        );
-
-        return deferred.promise;
-    }
+    // TODO: update the rest of the func for ahopl
 
     $scope.detail_view = function(action, user_data, items) {
         if (h = items[0]) {
index a554e93..ee38e1a 100644 (file)
@@ -1150,16 +1150,17 @@ angular.module('egGridMod',
                 var part = path_parts[path_idx];
                 idl_field = class_obj.field_map[part];
 
-                if (idl_field && idl_field['class'] && (
-                    idl_field.datatype == 'link' || 
-                    idl_field.datatype == 'org_unit')) {
-                    class_obj = egCore.idl.classes[idl_field['class']];
+                if (idl_field) {
+                    if (idl_field['class'] && (
+                        idl_field.datatype == 'link' || 
+                        idl_field.datatype == 'org_unit')) {
+                        class_obj = egCore.idl.classes[idl_field['class']];
+                    }
+                } else {
+                    return null;
                 }
-                // else, path is not in the IDL, which is fine
             }
 
-            if (!idl_field) return null;
-
             return {
                 idl_field :idl_field,
                 idl_class : class_obj