LP1793196 Volume batch editor offers MARC call numbers
authorBill Erickson <berickxx@gmail.com>
Tue, 5 Feb 2019 17:28:15 +0000 (12:28 -0500)
committerRemington Steed <rjs7@calvin.edu>
Fri, 8 Mar 2019 20:27:34 +0000 (15:27 -0500)
Provide call numbers extracted from the MARC record as options in the
volume batch editor.  Call numbers to extract are based on the load-time
classification scheme, defaulting to Generic ('1') if no default scheme
is applied.

Patch includes additional sanity checks on volume editor utility
functions to avoid console errors referencing undefined values.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Remington Steed <rjs7@calvin.edu>
Open-ILS/src/templates/staff/cat/volcopy/t_edit.tt2
Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js

index 7d32580..bb0537c 100644 (file)
@@ -25,7 +25,7 @@
                         <select class="form-control" ng-model="batch.prefix" ng-options="p.id() as p.label() for p in prefix_list"></select>
                     </div>
                     <div class="col-xs-2">
-                        <input class="form-control" type="text" ng-model="batch.label"/>
+                        <eg-basic-combo-box list="batch.marcCallNumbers" selected="batch.label"></eg-basic-combo-box>
                     </div>
                     <div class="col-xs-1">
                         <select class="form-control" ng-model="batch.suffix" ng-options="s.id() as s.label() for s in suffix_list"></select>
index 20c8257..87944d7 100644 (file)
@@ -1064,9 +1064,23 @@ function($scope , $q , $window , $routeParams , $location , $timeout , egCore ,
                 if ($scope.defaults.barcode_checkdigit) itemSvc.barcode_checkdigit = true;
                 if ($scope.defaults.auto_gen_barcode) itemSvc.auto_gen_barcode = true;
             }
+
+            // Fetch the list of bib-level callnumbers based on the applied
+            // classification scheme.  If none is defined, default to "1"
+            // (Generic) since it provides the most options.
+            egCore.net.request(
+                'open-ils.cat',
+                'open-ils.cat.biblio.record.marc_cn.retrieve',
+                $scope.record_id,
+                $scope.batch.classification || 1
+            ).then(function(list) {
+                $scope.batch.marcCallNumbers = [];
+                list.forEach(function(hash) {
+                    $scope.batch.marcCallNumbers.push(Object.values(hash)[0]);
+                });
+            });
         });
     }
-    $scope.fetchDefaults();
 
     $scope.$watch('defaults.statcat_filter', function() {
         $scope.saveDefaults();
@@ -1458,7 +1472,7 @@ function($scope , $q , $window , $routeParams , $location , $timeout , egCore ,
         }
 
         $scope.circTypeValue = function (x) {
-            if (x === null) return egCore.strings.UNSET;
+            if (x === null || x === undefined) return egCore.strings.UNSET;
             var s = $scope.circ_type_list.filter(function(y) {
                 return y.code() == x;
             });
@@ -1467,7 +1481,7 @@ function($scope , $q , $window , $routeParams , $location , $timeout , egCore ,
         }
 
         $scope.ageprotectName = function (x) {
-            if (x === null) return egCore.strings.UNSET;
+            if (x === null || x === undefined) return egCore.strings.UNSET;
             var s = $scope.age_protect_list.filter(function(y) {
                 return y.id() == x;
             });
@@ -1476,7 +1490,7 @@ function($scope , $q , $window , $routeParams , $location , $timeout , egCore ,
         }
 
         $scope.floatingName = function (x) {
-            if (x === null) return egCore.strings.UNSET;
+            if (x === null || x === undefined) return egCore.strings.UNSET;
             var s = $scope.floating_list.filter(function(y) {
                 return y.id() == x;
             });
@@ -1485,7 +1499,7 @@ function($scope , $q , $window , $routeParams , $location , $timeout , egCore ,
         }
 
         $scope.circmodName = function (x) {
-            if (x === null) return egCore.strings.UNSET;
+            if (x === null || x === undefined) return egCore.strings.UNSET;
             var s = $scope.circ_modifier_list.filter(function(y) {
                 return y.code() == x;
             });
@@ -1508,6 +1522,9 @@ function($scope , $q , $window , $routeParams , $location , $timeout , egCore ,
 
                 $scope.record_id = data.record_id;
 
+                // Fetch defaults 
+                $scope.fetchDefaults();
+
                 function fetchRaw () {
                     if (!$scope.only_vols) $scope.dirty = true;
                     $scope.add_vols_copies = true;