21
21
From ,
22
22
Mail ,
23
23
)
24
+ from sqlalchemy import asc , desc , func
24
25
25
26
from app .api .chat .rocket_chat import rename_rocketchat_room
26
27
from app .api .exports import event_export_task_base
28
+ from app .api .helpers .csv_jobs_util import export_attendees_csv
27
29
from app .api .helpers .db import safe_query , save_to_db
28
30
from app .api .helpers .files import (
29
31
create_save_image_sizes ,
39
41
from app .api .imports import import_event_task_base
40
42
from app .instance import create_app
41
43
from app .models import db
42
- from app .models .custom_form import CustomForms , ATTENDEE_CUSTOM_FORM
44
+ from app .models .custom_form import ATTENDEE_CUSTOM_FORM , CustomForms
43
45
from app .models .discount_code import DiscountCode
44
46
from app .models .event import Event
45
47
from app .models .exhibitor import Exhibitor
52
54
from app .models .user import User
53
55
from app .models .user_follow_group import UserFollowGroup
54
56
from app .settings import get_settings
57
+
55
58
from .import_helpers import update_import_job
56
- from app .api .helpers .csv_jobs_util import export_attendees_csv
57
59
58
60
"""
59
61
Define all API v2 celery tasks here
@@ -537,9 +539,15 @@ def export_order_pdf_task(self, event_id):
537
539
538
540
@celery .task (base = RequestContextTask , name = 'export.attendees.csv' , bind = True )
539
541
def export_attendees_csv_task (self , event_id ):
540
- attendees = db .session .query (TicketHolder ).filter_by (event_id = event_id )
541
- custom_forms = db .session .query (CustomForms ).filter_by (
542
- event_id = event_id , form = CustomForms .TYPE .ATTENDEE , is_included = True
542
+ attendees = (
543
+ db .session .query (TicketHolder )
544
+ .filter_by (event_id = event_id )
545
+ .order_by (desc (func .date (TicketHolder .created_at )))
546
+ )
547
+ custom_forms = (
548
+ db .session .query (CustomForms )
549
+ .filter_by (event_id = event_id , form = CustomForms .TYPE .ATTENDEE , is_included = True )
550
+ .order_by (asc ("position" ))
543
551
)
544
552
545
553
field_headers = list (ATTENDEE_CUSTOM_FORM .keys ())
@@ -548,14 +556,14 @@ def custom_form_validation(cf_orm, field_headers):
548
556
# set() is O(1) in membership testing
549
557
field_headers_set = set (field_headers )
550
558
forms_result = [None ] * len (field_headers_set )
559
+ index_append = 0
551
560
552
561
for row in cf_orm :
553
562
if row .field_identifier in field_headers_set :
554
-
555
563
field_headers_set .discard (row .field_identifier )
556
- index_append = field_headers .index (row .field_identifier )
557
564
# forms_result.append(row)
558
- forms_result .insert (index_append , row )
565
+ forms_result .insert (index_append , row )
566
+ index_append += 1
559
567
560
568
forms_result = [e for e in forms_result if e is not None ]
561
569
return forms_result
@@ -569,7 +577,11 @@ def custom_form_validation(cf_orm, field_headers):
569
577
file_path = os .path .join (filedir , filename )
570
578
571
579
dict_list = export_attendees_csv (attendees , custom_forms , ATTENDEE_CUSTOM_FORM )
572
- csv_headers = list (dict_list [0 ].keys ())
580
+ csv_headers = []
581
+ for row in dict_list :
582
+ for key in row .keys ():
583
+ if key is not None and key not in csv_headers :
584
+ csv_headers .append (key )
573
585
574
586
with open (file_path , "w" ) as temp_file :
575
587
writer = csv .DictWriter (temp_file , fieldnames = csv_headers )
0 commit comments