LP1793196 Volume batch editor offers MARC call numbers
authorBill Erickson <berickxx@gmail.com>
Tue, 5 Feb 2019 17:28:15 +0000 (12:28 -0500)
committerDan Wells <dbw2@calvin.edu>
Fri, 8 Mar 2019 23:15:17 +0000 (18:15 -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>
Signed-off-by: Dan Wells <dbw2@calvin.edu>
Open-ILS/src/templates/staff/cat/volcopy/t_edit.tt2
Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js

index 48a8cad..084bb80 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;