Browse Source

target event for csv upload

Davide Alberani 9 years ago
parent
commit
1b20dccade
3 changed files with 33 additions and 9 deletions
  1. 10 1
      angular_app/import-persons.html
  2. 5 3
      angular_app/js/controllers.js
  3. 18 5
      eventman_server.py

+ 10 - 1
angular_app/import-persons.html

@@ -10,10 +10,19 @@
                     <input name="file" ng-file-select ng-model="file" type="file" id="eb-csv-import" ng-required="true">
                     <p class="help-block">{{'CSV exported from eventbrite' | translate}}</p>
                 </div>
+                
+                <div class="form-group">
+                    <label for="forEvent">{{'Associate users to this event' | translate}}</label>
+                    <select class="form-control" id="forEvent" ng-model="targetEvent">
+                        <option ng-repeat="event in events" value="{{event._id}}">{{event.title}}</option>
+                    </select>
+                </div>
 
                 <input type="submit" value="{{'Import' | translate}}" ng-click="upload(file, '/ebcsvpersons')" />
 
-                Result: total: <span>{{reply.total}}</span> valid: <span>{{reply.valid}}</span>
+                <div class="form-group top5">
+                    Result: total: <span>{{reply.total}}</span> valid: <span>{{reply.valid}}</span>
+                </div>
             </form>
         </div>
     </div>

+ 5 - 3
angular_app/js/controllers.js

@@ -101,15 +101,17 @@ eventManControllers.controller('ImportPersonsCtrl', ['$scope', '$log',
 );
 
 
-eventManControllers.controller('FileUploadCtrl', ['$scope', '$log', '$upload',
-    function ($scope, $log, $upload) {
+eventManControllers.controller('FileUploadCtrl', ['$scope', '$log', '$upload', 'Event',
+    function ($scope, $log, $upload, Event) {
             $scope.file = null;
             $scope.reply = {};
+            $scope.events = Event.all();
             $scope.upload = function(file, url) {
                 $log.info("FileUploadCtrl.upload");
                 $upload.upload({
                     url: url,
-                    file: file
+                    file: file,
+                    fields: {targetEvent: $scope.targetEvent}
                 }).progress(function(evt) {
                     var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
                     $log.debug('progress: ' + progressPercentage + '%');

+ 18 - 5
eventman_server.py

@@ -114,6 +114,7 @@ class EventsHandler(CollectionHandler):
 class ImportPersonsHandler(BaseHandler):
     pass
 
+
 def csvParse(csvStr, remap=None):
     fd = StringIO.StringIO(csvStr)
     reader = csv.reader(fd)
@@ -123,21 +124,25 @@ def csvParse(csvStr, remap=None):
     try:
         headers = reader.next()
         fields = len(headers)
-    except StopIteration:
+    except (StopIteration, csv.Error):
         return reply, {}
     if remap:
         for idx, header in enumerate(headers):
             if header in remap:
                 headers[idx] = remap[header]
     for row in reader:
-        reply['total'] += 1
-        if len(row) != fields:
+        try:
+            reply['total'] += 1
+            if len(row) != fields:
+                continue
+            results.append(dict(map(None, headers, row)))
+            reply['valid'] += 1
+        except csv.Error:
             continue
-        results.append(dict(map(None, headers, row)))
-        reply['valid'] += 1
     fd.close()
     return reply, results
 
+
 class EbCSVImportPersonsHandler(ImportPersonsHandler):
     csvRemap = {
         'Nome evento': 'event_title',
@@ -156,9 +161,17 @@ class EbCSVImportPersonsHandler(ImportPersonsHandler):
     }
     @gen.coroutine
     def post(self, **kwargs):
+        print kwargs
+        targetEvent = None
+        try:
+            targetEvent = self.get_body_argument('targetEvent')
+        except:
+            pass
         reply = dict(total=0, valid=0, merged=0)
         for fieldname, contents in self.request.files.iteritems():
+            print fieldname
             for content in contents:
+                print content.keys()
                 filename = content['filename']
                 parseStats, result = csvParse(content['body'], remap=self.csvRemap)
                 reply['total'] += parseStats['total']