LP#1798187 - Support CRLF and LF format for item status import files
authorJosh Stompro <stompro@stompro.org>
Wed, 27 Feb 2019 21:07:43 +0000 (15:07 -0600)
committerJane Sandberg <sandbej@linnbenton.edu>
Tue, 30 Jul 2019 23:32:41 +0000 (16:32 -0700)
Testing Plan:

Before patch, try to import a file in CRLF end of line format that includes
leading and trailing spaces, empty lines, lines of just spaces or
barcodes with spaces.  The import will fail to load those items and will
stop processing when it hits certain situations.

After patch, try to import a file in CRLF EOL format that includes barcodes
with trailing spaces, leading spaces, barcodes with spaces, and/or
empty lines.  The import will load all barcodes.

Signed-off-by: Josh Stompro <stompro@stompro.org>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>

Open-ILS/src/templates/staff/cat/item/index.tt2
Open-ILS/web/js/ui/default/staff/cat/item/app.js

index 53cf23f..c77ced8 100644 (file)
@@ -76,6 +76,7 @@
           <input type="file" eg-file-reader 
             container="barcodesFromFile" value="[% l('Upload from File') %]">
         </div>
+        <eg-help-popover help-text="[% l('File Format: One barcode per line. All whitespace and commas will be removed before processing.') %]">
       </div>
     </div>
     <div class="flex-cell"></div><!-- force the final divs to the right -->
index fc3e823..af59baf 100644 (file)
@@ -325,10 +325,14 @@ function($scope , $q , $window , $location , $timeout , egCore , egNet , egGridD
             $scope.args.barcode = '';
             var barcodes = [];
 
-            angular.forEach(newVal.split(/\n/), function(line) {
+            angular.forEach(newVal.split(/\r?\n/), function(line) {
+                //remove all whitespace and commas
+                line = line.replace(/[\s,]+/g,'');
+
+                //Or remove leading/trailing whitespace
+                //line = line.replace(/(^[\s,]+|[\s,]+$/g,'');
+
                 if (!line) return;
-                // scrub any trailing spaces or commas from the barcode
-                line = line.replace(/(.*?)($|\s.*|,.*)/,'$1');
                 barcodes.push(line);
             });
 
@@ -337,10 +341,12 @@ function($scope , $q , $window , $location , $timeout , egCore , egNet , egGridD
                 var barcode = barcodes.pop();
                 egProgressDialog.increment();
 
-                if (!barcode) { // All done here.
+                if (barcode == undefined) { // All done here.
                     egProgressDialog.close();
                     copyGrid.refresh();
-                    copyGrid.selectItems([itemSvc.copies[0].index]);
+                    if(itemSvc.copies[0]){  // Were any copies actually retrieved
+                        copyGrid.selectItems([itemSvc.copies[0].index]);
+                    }
                     return;
                 }