Merge pull request #161 from alberanid/master
avoid duplicates importing CSV files
This commit is contained in:
commit
fb9b66f67b
2 changed files with 18 additions and 7 deletions
|
@ -22,7 +22,7 @@
|
||||||
<input type="submit" value="{{'Import' | translate}}" ng-click="upload(file, '/ebcsvpersons')" />
|
<input type="submit" value="{{'Import' | translate}}" ng-click="upload(file, '/ebcsvpersons')" />
|
||||||
|
|
||||||
<div class="form-group top5">
|
<div class="form-group top5">
|
||||||
Result: total: <span>{{reply.total}}</span> valid: <span>{{reply.valid}}</span> merged: <span>{{reply.merged}}</span> new: <span>{{reply.valid - reply.merged}}</span>
|
Result: total: <span>{{reply.total}}</span> valid: <span>{{reply.valid}}</span> new: <span>{{reply.new_in_event}}</span>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -550,6 +550,8 @@ class CollectionHandler(BaseHandler):
|
||||||
:param env: environment of the process
|
:param env: environment of the process
|
||||||
:type stdin_data: dict
|
:type stdin_data: dict
|
||||||
"""
|
"""
|
||||||
|
if not hasattr(self, 'data_dir'):
|
||||||
|
return
|
||||||
logging.debug('running triggers for action "%s"' % action)
|
logging.debug('running triggers for action "%s"' % action)
|
||||||
stdin_data = stdin_data or {}
|
stdin_data = stdin_data or {}
|
||||||
try:
|
try:
|
||||||
|
@ -930,16 +932,16 @@ class EbCSVImportPersonsHandler(BaseHandler):
|
||||||
'Data check-in': 'checkin_datetime',
|
'Data check-in': 'checkin_datetime',
|
||||||
'Ordine n.': 'order_nr',
|
'Ordine n.': 'order_nr',
|
||||||
'ID ordine': 'order_nr',
|
'ID ordine': 'order_nr',
|
||||||
'Titolo professionale': 'job_title',
|
'Titolo professionale': 'job title',
|
||||||
'Azienda': 'company',
|
'Azienda': 'company',
|
||||||
'Prefisso': 'name_title',
|
'Prefisso': 'name_title',
|
||||||
'Prefisso (Sig., Sig.ra, ecc.)': 'name_title',
|
'Prefisso (Sig., Sig.ra, ecc.)': 'name title',
|
||||||
|
|
||||||
'Order #': 'order_nr',
|
'Order #': 'order_nr',
|
||||||
'Prefix': 'name_title',
|
'Prefix': 'name title',
|
||||||
'First Name': 'name',
|
'First Name': 'name',
|
||||||
'Last Name': 'surname',
|
'Last Name': 'surname',
|
||||||
'Suffix': 'name_suffix',
|
'Suffix': 'name suffix',
|
||||||
'Email': 'email',
|
'Email': 'email',
|
||||||
'Attendee #': 'attendee_nr',
|
'Attendee #': 'attendee_nr',
|
||||||
'Barcode #': 'ebqrcode',
|
'Barcode #': 'ebqrcode',
|
||||||
|
@ -952,6 +954,7 @@ class EbCSVImportPersonsHandler(BaseHandler):
|
||||||
# import a CSV list of persons
|
# import a CSV list of persons
|
||||||
event_handler = EventsHandler(self.application, self.request)
|
event_handler = EventsHandler(self.application, self.request)
|
||||||
event_handler.db = self.db
|
event_handler.db = self.db
|
||||||
|
event_handler.logger = self.logger
|
||||||
event_id = None
|
event_id = None
|
||||||
try:
|
try:
|
||||||
event_id = self.get_body_argument('targetEvent')
|
event_id = self.get_body_argument('targetEvent')
|
||||||
|
@ -960,16 +963,24 @@ class EbCSVImportPersonsHandler(BaseHandler):
|
||||||
if event_id is None:
|
if event_id is None:
|
||||||
return self.build_error('invalid event')
|
return self.build_error('invalid event')
|
||||||
reply = dict(total=0, valid=0, merged=0, new_in_event=0)
|
reply = dict(total=0, valid=0, merged=0, new_in_event=0)
|
||||||
|
event_details = event_handler.db.query('events', {'_id': event_id})
|
||||||
|
if not event_details:
|
||||||
|
return self.build_error('invalid event')
|
||||||
|
all_emails = set([x.get('email') for x in (event_details[0].get('tickets') or []) if x.get('email')])
|
||||||
for fieldname, contents in self.request.files.iteritems():
|
for fieldname, contents in self.request.files.iteritems():
|
||||||
for content in contents:
|
for content in contents:
|
||||||
filename = content['filename']
|
filename = content['filename']
|
||||||
parseStats, persons = utils.csvParse(content['body'], remap=self.csvRemap)
|
parseStats, persons = utils.csvParse(content['body'], remap=self.csvRemap)
|
||||||
reply['total'] += parseStats['total']
|
reply['total'] += parseStats['total']
|
||||||
reply['valid'] += parseStats['valid']
|
|
||||||
for person in persons:
|
for person in persons:
|
||||||
|
if not person:
|
||||||
|
continue
|
||||||
|
reply['valid'] += 1
|
||||||
person['attended'] = False
|
person['attended'] = False
|
||||||
person['from_file'] = filename
|
person['from_file'] = filename
|
||||||
event_handler.handle_post_persons(event_id, None, person)
|
if 'email' in person and person['email'] in all_emails:
|
||||||
|
continue
|
||||||
|
event_handler.handle_post_tickets(event_id, None, person)
|
||||||
reply['new_in_event'] += 1
|
reply['new_in_event'] += 1
|
||||||
self.write(reply)
|
self.write(reply)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue