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:13:17 +0000 (18:13 -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 e62e1b2..c85ffbc 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">
                         <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>
                     </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 4b74018..76e637a 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;
             }
                 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();
 
     $scope.$watch('defaults.statcat_filter', function() {
         $scope.saveDefaults();
@@ -1471,7 +1485,7 @@ function($scope , $q , $window , $routeParams , $location , $timeout , egCore ,
         }
 
         $scope.circTypeValue = function (x) {
         }
 
         $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;
             });
             var s = $scope.circ_type_list.filter(function(y) {
                 return y.code() == x;
             });
@@ -1480,7 +1494,7 @@ function($scope , $q , $window , $routeParams , $location , $timeout , egCore ,
         }
 
         $scope.ageprotectName = function (x) {
         }
 
         $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;
             });
             var s = $scope.age_protect_list.filter(function(y) {
                 return y.id() == x;
             });
@@ -1489,7 +1503,7 @@ function($scope , $q , $window , $routeParams , $location , $timeout , egCore ,
         }
 
         $scope.floatingName = function (x) {
         }
 
         $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;
             });
             var s = $scope.floating_list.filter(function(y) {
                 return y.id() == x;
             });
@@ -1498,7 +1512,7 @@ function($scope , $q , $window , $routeParams , $location , $timeout , egCore ,
         }
 
         $scope.circmodName = function (x) {
         }
 
         $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;
             });
             var s = $scope.circ_modifier_list.filter(function(y) {
                 return y.code() == x;
             });
@@ -1521,6 +1535,9 @@ function($scope , $q , $window , $routeParams , $location , $timeout , egCore ,
 
                 $scope.record_id = data.record_id;
 
 
                 $scope.record_id = data.record_id;
 
+                // Fetch defaults 
+                $scope.fetchDefaults();
+
                 function fetchRaw () {
                     if (!$scope.only_vols) $scope.dirty = true;
                     $scope.add_vols_copies = true;
                 function fetchRaw () {
                     if (!$scope.only_vols) $scope.dirty = true;
                     $scope.add_vols_copies = true;