ff : initial bib upload form
authorBill Erickson <berick@esilibrary.com>
Fri, 25 Oct 2013 21:49:39 +0000 (17:49 -0400)
committerBill Erickson <berick@esilibrary.com>
Fri, 25 Oct 2013 21:49:39 +0000 (17:49 -0400)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Open-ILS/src/templates/staff/fulfillment/index.tt2
Open-ILS/src/templates/staff/fulfillment/t_records.tt2 [new file with mode: 0644]
Open-ILS/web/js/ui/default/staff/fulfillment/app.js

index 67bfd89..be86b3f 100644 (file)
@@ -70,8 +70,8 @@
 
       <div id="subhead" style='width:100%'> 
         <div style='float:left'>
-          <a href="" class="thispage mainNav">Manage ILL</a> 
-          <a href="" class="thispage mainNav">Manage Bibliographic Records</a> 
+          <a href="./fulfillment/pending" class="thispage mainNav">Manage ILL</a> 
+          <a href="./fulfillment/records" class="thispage mainNav">Manage Bibliographic Records</a> 
         </div>
         <div style='float:left'>
           <div class="dropdown" ng-cloak>
diff --git a/Open-ILS/src/templates/staff/fulfillment/t_records.tt2 b/Open-ILS/src/templates/staff/fulfillment/t_records.tt2
new file mode 100644 (file)
index 0000000..357c513
--- /dev/null
@@ -0,0 +1,26 @@
+<div class="container">
+  <div class="row">
+    <div class="col-lg-3"></div><!-- offset? -->
+      <div class="col-lg-6">
+        <fieldset>
+          <legend>[% l('Upload Bib Records for {{ffService.currentOrg().shortname()}}') %]</legend>
+          <form ng-submit="uploadRecords(this.myinput.files[0])" >
+            <div class="form-group row">
+              <label class="col-lg-4 control-label">[% l('Record File') %]</label>
+              <div class="col-lg-8">
+                <!-- ng-model doesn't support type=file; TODO: create a service for file uploads -->
+                <input type="file" id="record-file" ng-class="{disabled : in_flight}"/>
+              </div>
+            </div>
+            <div class="form-group row">
+              <div class="col-lg-12">
+                <button type="submit" class="btn" ng-class="{disabled : in_flight}">[% l('Go!') %]</button>
+              </div>
+            </div>
+          </form>
+        </fieldset>
+      </div>
+    </div>
+  </div>
+</div>
+
index 8c84300..6b687c2 100644 (file)
@@ -17,12 +17,11 @@ angular.module('ffMain', ['ngRoute', 'egCoreMod', 'egUiMod'])
     var resolver = {delay : function(egStartup) {return egStartup.go()}};
 
     // record management UI
-    /*$routeProvider.when('/fulfillment/records', {
+    $routeProvider.when('/fulfillment/records', {
         templateUrl: './fulfillment/t_records',
-        controller: 'ILLCtrl',
+        controller: 'RecordsCtrl',
         resolve : resolver
     });
-    */
     
     // Default to ILL management tabs
     $routeProvider.when('/fulfillment/status/:barcode', {
@@ -794,6 +793,57 @@ function ($scope, $q, $route, egNet, egAuth, egPCRUD, egOrg, ffService) {
     $scope.drawTable();
 }])
 
+// http://stackoverflow.com/questions/17629126/how-to-upload-a-file-using-angularjs-like-the-traditional-way
+.factory('formDataObject', function() {
+    return function(data) {
+        var fd = new FormData();
+        angular.forEach(data, function(value, key) {
+            fd.append(key, value);
+        });
+        return fd;
+    };
+})
+
+.controller('RecordsCtrl', 
+['$scope', '$q', '$http', 'ffService', 'formDataObject', 'egAuth',
+function($scope, $q, $http, ffService, formDataObject, egAuth) {
 
+    $scope.uploadRecords = function(file) {
+        $scope.in_flight = true;
+        var deferred = $q.defer();
 
+        var args = {
+            ses : egAuth.token(),
+            //  ng-model doesn't support type=file; 
+            //  TODO: create a service for file uploads
+            //  http://stackoverflow.com/questions/17063000/ng-model-for-input-type-file
+            loadFile : $('#record-file')[0].files[0],
+            uploadLocation : ffService.currentOrg().id()
+        }
+
+        if (!args.loadFile) return;
+
+        console.log('uploading file ' + args.loadFile);
+
+        $http({
+            method: 'POST',
+            url: '/ff/fast_import',
+            data: args,
+            transformRequest: formDataObject,
+            headers: {'Content-Type': 'multipart/form-data'}
+        })
+        .success(function(data, status, headers, config) {
+            console.log("upload finished");
+            $scope.in_flight = false;
+            deferred.resolve(data);
+        })
+        .error(function(data, status, headers, config){
+            console.warn("upload failed");
+            $scope.in_flight = false;
+            deferred.reject(status);
+        });
+
+        return deferred.promise;
+    };
+}])