From 7fac10241ec71cbe9081f605998339d9175b6b21 Mon Sep 17 00:00:00 2001 From: Joel Addison Date: Fri, 10 Jan 2020 22:49:17 +1000 Subject: [PATCH] Improve attendee reports Display attendee profile data in normal table without DataTables so sorting is not applied, causing data to be confusing to read. Include item quantity in attendee data report for accurate schwag packing. --- pinaxcon/registrasion/models.py | 6 +++- pinaxcon/templates/registrasion/report.html | 36 +++++++++---------- .../registrasion/reporting/views.py | 9 +++-- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/pinaxcon/registrasion/models.py b/pinaxcon/registrasion/models.py index e1fa45de..4f53651d 100644 --- a/pinaxcon/registrasion/models.py +++ b/pinaxcon/registrasion/models.py @@ -81,6 +81,7 @@ class AttendeeProfile(rego.AttendeeProfileBase): help_text="Your name, as you'd like it to appear on your badge. ", ) company = models.CharField( + verbose_name="Company", max_length=64, help_text="The name of your company, as you'd like it on your badge", blank=True, @@ -133,6 +134,7 @@ class AttendeeProfile(rego.AttendeeProfileBase): blank=True, ) country = CountryField( + verbose_name="Country", default="AU", ) state = models.CharField( @@ -159,12 +161,14 @@ class AttendeeProfile(rego.AttendeeProfileBase): blank=True, ) gender = models.CharField( + verbose_name="Gender", help_text="Gender data will only be used for demographic purposes.", max_length=64, blank=True, ) children = models.CharField( + verbose_name="Child Ages and Information", max_length=256, help_text="Linux.conf.au is a family friendly conference and provides " "free child-care for pre-school children from 6 months up to 5 years. We " @@ -217,4 +221,4 @@ class AttendeeProfile(rego.AttendeeProfileBase): def last_name(self): names = wrap(self.name, 15, break_long_words=False) - return names[1] if len(names) > 1 else '' \ No newline at end of file + return names[1] if len(names) > 1 else '' diff --git a/pinaxcon/templates/registrasion/report.html b/pinaxcon/templates/registrasion/report.html index 7a4dcda0..0747cf2f 100644 --- a/pinaxcon/templates/registrasion/report.html +++ b/pinaxcon/templates/registrasion/report.html @@ -24,28 +24,26 @@

{{ report.title }}

{% if report.headings %} + + + {% for heading in report.headings %} + + {% endfor %} + + {% else %}
{{ heading }}
{% endif %} - - - {% for heading in report.headings %} - - {% endfor %} - - - - {% for line in report.rows %} - - {% for item in line %} - - {% endfor %} - - {% endfor %} - -
{{ heading }}
- {{ item|safe }} -
+ + {% for line in report.rows %} + + {% for item in line %} + {{ item|safe }} + {% endfor %} + + {% endfor %} + +
{% endfor %} diff --git a/vendor/registrasion/registrasion/reporting/views.py b/vendor/registrasion/registrasion/reporting/views.py index 88e8cbbc..54a2e268 100644 --- a/vendor/registrasion/registrasion/reporting/views.py +++ b/vendor/registrasion/registrasion/reporting/views.py @@ -598,6 +598,8 @@ def attendee(request, form, user_id=None): profile_data.append((field.verbose_name, value)) + profile_data.insert(1, ("Email", attendee.user.email)) + cart = CartController.for_user(attendee.user) try: reservation = cart.cart.reservation_duration + cart.cart.time_last_updated @@ -606,7 +608,9 @@ def attendee(request, form, user_id=None): profile_data.append(("Current cart reserved until", reservation)) - reports.append(ListReport("Profile", ["", ""], profile_data)) + # No column headings, as this has row headings instead and sorting makes + # everything confusing. + reports.append(ListReport("Profile", None, profile_data)) links = [] links.append(( @@ -887,7 +891,7 @@ def attendee_data(request, form, user_id=None): except TypeError: return "Bad value found for %s" % attr - headings = ["User ID", "Name", "Email", "Product", "Item Status"] + headings = ["User ID", "Name", "Email", "Product", "Quantity", "Item Status"] headings.extend(field_names) data = [] for item in items: @@ -897,6 +901,7 @@ def attendee_data(request, form, user_id=None): getattr(profile, name_field), profile.attendee.user.email, item.product, + item.quantity, status_display[item.cart.status], ] + [ display_field(profile, field) for field in fields