From: Josh Stompro <stompro@stompro.org>
Date: Wed, 27 Feb 2019 21:07:43 +0000 (-0600)
Subject: LP#1798187 - Support CRLF and LF format for item status import files
X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=25d9c5ddc03f673b87f1aaff788a79dff92ba075;p=contrib%2FConifer.git

LP#1798187 - Support CRLF and LF format for item status import files

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>
---

diff --git a/Open-ILS/src/templates/staff/cat/item/index.tt2 b/Open-ILS/src/templates/staff/cat/item/index.tt2
index 53cf23f778..c77ced848a 100644
--- a/Open-ILS/src/templates/staff/cat/item/index.tt2
+++ b/Open-ILS/src/templates/staff/cat/item/index.tt2
@@ -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 -->
diff --git a/Open-ILS/web/js/ui/default/staff/cat/item/app.js b/Open-ILS/web/js/ui/default/staff/cat/item/app.js
index fc3e823dfa..af59baf45b 100644
--- a/Open-ILS/web/js/ui/default/staff/cat/item/app.js
+++ b/Open-ILS/web/js/ui/default/staff/cat/item/app.js
@@ -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;
                 }