From 9e2aeaa400d18b137350046662b88e9160a6e4da Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Wed, 20 Nov 2024 12:20:04 +0100 Subject: [PATCH] move to individual pages with own paged querysets --- .../organizers/customer_addresses.html | 36 ++++++ .../organizers/customer_base.html | 60 ++++++++++ .../organizers/customer_memberships.html | 112 ++++++++++++++++++ .../organizers/customer_profiles.html | 36 ++++++ src/pretix/presale/views/customer.py | 30 +++-- 5 files changed, 258 insertions(+), 16 deletions(-) create mode 100644 src/pretix/presale/templates/pretixpresale/organizers/customer_addresses.html create mode 100644 src/pretix/presale/templates/pretixpresale/organizers/customer_base.html create mode 100644 src/pretix/presale/templates/pretixpresale/organizers/customer_memberships.html create mode 100644 src/pretix/presale/templates/pretixpresale/organizers/customer_profiles.html diff --git a/src/pretix/presale/templates/pretixpresale/organizers/customer_addresses.html b/src/pretix/presale/templates/pretixpresale/organizers/customer_addresses.html new file mode 100644 index 0000000000..4ae0b913a8 --- /dev/null +++ b/src/pretix/presale/templates/pretixpresale/organizers/customer_addresses.html @@ -0,0 +1,36 @@ +{% extends "pretixpresale/organizers/customer_base.html" %} +{% load i18n %} +{% load eventurl %} +{% load urlreplace %} +{% load money %} +{% load bootstrap3 %} +{% block title %}{% trans "Your account" %}{% endblock %} +{% block inner %} +
+
+

+ {% trans "Orders" %} ({{ page_obj.paginator.count }}) +

+
+
+ {% if invoice_addresses %} +
    + {% for ia in invoice_addresses %} +
  1. + {{ ia.describe|linebreaksbr }} + + + + {% trans "Delete" %} + +
  2. + {% endfor %} +
+ {% else %} +

{% trans "You don’t have any addresses in your account yet." %}

+ {% endif %} +
+
+ {% include "pretixcontrol/pagination.html" %} +{% endblock %} diff --git a/src/pretix/presale/templates/pretixpresale/organizers/customer_base.html b/src/pretix/presale/templates/pretixpresale/organizers/customer_base.html new file mode 100644 index 0000000000..7a0bc1973c --- /dev/null +++ b/src/pretix/presale/templates/pretixpresale/organizers/customer_base.html @@ -0,0 +1,60 @@ +{% extends "pretixpresale/organizers/base.html" %} +{% load i18n %} +{% load eventurl %} +{% load bootstrap3 %} +{% block content %} +

+ {% trans "Your account" %} +

+
+
+
+
{{ customer.name }}
+
{{ customer.email }}
+ {% if customer.phone %} +
+ {% endif %} +
+ +
+
+
+
+
+
{% trans "Customer ID" %}
+
#{{ customer.identifier }}
+
+
+ +
+ {% block inner %} + {% endblock %} +{% endblock %} diff --git a/src/pretix/presale/templates/pretixpresale/organizers/customer_memberships.html b/src/pretix/presale/templates/pretixpresale/organizers/customer_memberships.html new file mode 100644 index 0000000000..41a98b52b3 --- /dev/null +++ b/src/pretix/presale/templates/pretixpresale/organizers/customer_memberships.html @@ -0,0 +1,112 @@ +{% extends "pretixpresale/organizers/customer_base.html" %} +{% load i18n %} +{% load eventurl %} +{% load urlreplace %} +{% load money %} +{% load bootstrap3 %} +{% block title %}{% trans "Your account" %}{% endblock %} +{% block inner %} +
+
+

+ {% trans "Memberships" %} ({{ page_obj.paginator.count }}) +

+
+
+ {% if memberships %} +
    + {% for m in memberships %} +
  1. +
    +
    {% trans "Membership type" %}
    +
    + {% if m.canceled %}{% endif %} + {{ m.membership_type.name }} + {% if m.canceled %}{% endif %} + {% if m.testmode %}{% trans "TEST MODE" %}{% endif %} +
    +
    {% trans "Valid from" %}
    +
    {{ m.date_start|date:"SHORT_DATETIME_FORMAT" }}
    +
    {% trans "Valid until" %}
    +
    {{ m.date_end|date:"SHORT_DATETIME_FORMAT" }}
    +
    {% trans "Attendee name" %}
    +
    {{ m.attendee_name }}
    +
    {% trans "Usages" %}
    +
    +
    +
    +
    +
    +
    +
    + {{ m.usages }} / + {{ m.membership_type.max_usages|default_if_none:"∞" }} +
    +
    +
    +
    {% trans "Actions" %}
    +
    + + + {% trans "Details" %} +
    +
    + +
    +
    +
    {% trans "Order" %}
    +
    + + + {{ o.code }} + + {% if o.customer_id != customer.pk %} + + {% endif %} + {% include "pretixpresale/event/fragment_order_status.html" with order=o event=o.event %} +
    +
    + {% if o.testmode and False %} +
    {% trans "TEST MODE" %}
    + {% endif %} +
    +
    +
    {% trans "Order total" %}
    +
    {{ o.total|money:o.event.currency }}
    +
    {% trans "Positions" %}
    +
    {% blocktranslate count counter=o.count_positions|default_if_none:0 %}{{ counter }} item{% plural %}{{ counter }} items{% endblocktranslate %} +
    +
    +
    +
    {% trans "Event" %}
    +
    + {{ o.event }} + {% if not o.event.has_subevents and o.event.settings.show_dates_on_frontpage %} +
    {{ o.event.get_date_range_display }} + {% endif %} +
    +
    +
    +
    {% trans "Actions" %}
    +
    + + + {% trans "Details" %} +
    +
    +
    +
  2. + {% endfor %} +
+ {% else %} +

{% trans "You don’t have any memberships in your account yet." %}

+ {% endif %} +
+
+ {% include "pretixcontrol/pagination.html" %} +{% endblock %} diff --git a/src/pretix/presale/templates/pretixpresale/organizers/customer_profiles.html b/src/pretix/presale/templates/pretixpresale/organizers/customer_profiles.html new file mode 100644 index 0000000000..82444c5fc5 --- /dev/null +++ b/src/pretix/presale/templates/pretixpresale/organizers/customer_profiles.html @@ -0,0 +1,36 @@ +{% extends "pretixpresale/organizers/customer_base.html" %} +{% load i18n %} +{% load eventurl %} +{% load urlreplace %} +{% load money %} +{% load bootstrap3 %} +{% block title %}{% trans "Your account" %}{% endblock %} +{% block inner %} +
+
+

+ {% trans "Orders" %} ({{ page_obj.paginator.count }}) +

+
+
+ {% if attendee_profiles %} +
    + {% for ap in attendee_profiles %} +
  1. + {{ ap.describe|linebreaksbr }} + + + + {% trans "Delete" %} + +
  2. + {% endfor %} +
+ {% else %} +

{% trans "You don’t have any attendee profiles in your account yet." %}

+ {% endif %} +
+
+ {% include "pretixcontrol/pagination.html" %} +{% endblock %} diff --git a/src/pretix/presale/views/customer.py b/src/pretix/presale/views/customer.py index 57826a05f2..830d4bd4e1 100644 --- a/src/pretix/presale/views/customer.py +++ b/src/pretix/presale/views/customer.py @@ -369,19 +369,6 @@ class OrderView(CustomerRequiredMixin, ListView): def get_context_data(self, **kwargs): ctx = super().get_context_data(**kwargs) - ctx['customer'] = self.request.customer - ctx['memberships'] = self.request.customer.memberships.with_usages().select_related( - 'membership_type', 'granted_in', 'granted_in__order', 'granted_in__order__event' - ) - ctx['invoice_addresses'] = InvoiceAddress.profiles.filter(customer=self.request.customer) - ctx['attendee_profiles'] = self.request.customer.attendee_profiles.all() - ctx['is_paginated'] = True - - for m in ctx['memberships']: - if m.membership_type.max_usages: - m.percent = int(m.usages / m.membership_type.max_usages * 100) - else: - m.percent = 0 s = OrderPosition.objects.filter( order=OuterRef('pk') @@ -407,9 +394,14 @@ class OrderView(CustomerRequiredMixin, ListView): class MembershipView(CustomerRequiredMixin, ListView): template_name = 'pretixpresale/organizers/customer_memberships.html' - context_object_name = 'membership' + context_object_name = 'memberships' paginate_by = 20 + def get_queryset(self): + return self.request.customer.memberships.with_usages().select_related( + 'membership_type', 'granted_in', 'granted_in__order', 'granted_in__order__event' + ) + class MembershipUsageView(CustomerRequiredMixin, ListView): template_name = 'pretixpresale/organizers/customer_membership.html' @@ -437,9 +429,12 @@ class MembershipUsageView(CustomerRequiredMixin, ListView): class AddressView(CustomerRequiredMixin, ListView): template_name = 'pretixpresale/organizers/customer_addresses.html' - context_object_name = 'address' + context_object_name = 'invoice_addresses' paginate_by = 20 + def get_queryset(self): + return InvoiceAddress.profiles.filter(customer=self.request.customer) + class AddressDeleteView(CustomerRequiredMixin, CompatDeleteView): template_name = 'pretixpresale/organizers/customer_address_delete.html' @@ -454,9 +449,12 @@ class AddressDeleteView(CustomerRequiredMixin, CompatDeleteView): class ProfileView(CustomerRequiredMixin, ListView): template_name = 'pretixpresale/organizers/customer_profiles.html' - context_object_name = 'profile' + context_object_name = 'attendee_profiles' paginate_by = 20 + def get_queryset(self): + return self.request.customer.attendee_profiles.all() + class ProfileDeleteView(CustomerRequiredMixin, CompatDeleteView): template_name = 'pretixpresale/organizers/customer_profile_delete.html'