diff --git a/vendor/registrasion/registrasion/reporting/reports.py b/vendor/registrasion/registrasion/reporting/reports.py index 9c76d4df7de820f3a215d41c4b9de6a106985702..bff98605ddfa91bb67e30ad9f13dc377248a6e2c 100644 --- a/vendor/registrasion/registrasion/reporting/reports.py +++ b/vendor/registrasion/registrasion/reporting/reports.py @@ -1,6 +1,8 @@ import csv +import datetime -from django.contrib.auth.decorators import user_passes_test +from django.contrib.auth.decorators import login_required, user_passes_test +from django.db import connection from django.shortcuts import render from django.http import HttpResponse from django.urls import reverse @@ -365,3 +367,33 @@ def get_all_reports(): ''' Returns all the views that have been registered with @report ''' return list(_all_report_views) + + +@login_required +@user_passes_test(lambda u: u.is_staff) +def attendees_report(request): + query = """ +select prof.name, email, prod.name as ticket, company, free_text_1, free_text_2, country, of_legal_age, dietary_restrictions, accessibility_requirements, gender +from registrasion_invoice i +inner join registrasion_cart c on i.cart_id = c.id +inner join registrasion_productitem pi on c.id = pi.cart_id +inner join registrasion_product prod on pi.product_id = prod.id +inner join auth_user u on i.user_id = u.id +inner join registrasion_attendee a on a.user_id = u.id +inner join registrasion_attendeeprofilebase b on b.attendee_id = a.id +left outer join pinaxcon_registrasion_attendeeprofile prof on b.id = prof.attendeeprofilebase_ptr_id +where prod.category_id = 1 +and i.status = 2 + """ + response = HttpResponse(content_type='text/csv') + filename = 'attendees_report-{}.csv'.format( + datetime.datetime.now().strftime('%Y-%m-%d'), + ) + response['Content-Disposition'] = f'attachment; filename={filename}' + writer = csv.writer(response) + with connection.cursor() as cursor: + cursor.execute(query) + writer.writerow([i[0] for i in cursor.description]) + for row in cursor.fetchall(): + writer.writerow(row) + return response