diff --git a/src/pretix/base/email.py b/src/pretix/base/email.py index 5b252dc9d2..ee5a19caf0 100644 --- a/src/pretix/base/email.py +++ b/src/pretix/base/email.py @@ -2,10 +2,12 @@ import inspect import logging from datetime import timedelta from decimal import Decimal +from itertools import groupby from smtplib import SMTPResponseException from django.conf import settings from django.core.mail.backends.smtp import EmailBackend +from django.db.models import Count from django.dispatch import receiver from django.template.loader import get_template from django.utils.timezone import now @@ -128,9 +130,21 @@ class TemplateBasedMailRenderer(BaseHTMLMailRenderer): if order: htmlctx['order'] = order + positions = list(order.positions.select_related( + 'item', 'variation', 'subevent', 'addon_to' + ).annotate( + has_addons=Count('addons') + )) + htmlctx['cart'] = [(k, list(v)) for k, v in groupby( + positions, key=lambda op: ( + op.item, op.variation, op.subevent, op.attendee_name, + (op.pk if op.addon_to_id else None), (op.pk if op.has_addons else None) + ) + )] if position: htmlctx['position'] = position + htmlctx['ev'] = position.subevent or self.event tpl = get_template(self.template_name) body_html = inline_css(tpl.render(htmlctx)) diff --git a/src/pretix/base/templates/pretixbase/email/base.html b/src/pretix/base/templates/pretixbase/email/base.html index ff17e64891..4f622691ca 100644 --- a/src/pretix/base/templates/pretixbase/email/base.html +++ b/src/pretix/base/templates/pretixbase/email/base.html @@ -136,6 +136,31 @@ text-decoration: none; color: {{ color }}; } + + .order-button { + padding-top: 5px + } + .order-button a.button { + font-size: 12px; + } + .order-info { + padding-bottom: 5px + } + + .order { + font-size: 12px; + } + + .cart-table > tr > td:first-child { + width: 40px; + } + .order-details > tr > td:first-child { + width: 20%; + } + .order-details td { + font-size: 12px; + } + {% if rtl %} body { direction: rtl; diff --git a/src/pretix/base/templates/pretixbase/email/order_details.html b/src/pretix/base/templates/pretixbase/email/order_details.html new file mode 100644 index 0000000000..1f672e7819 --- /dev/null +++ b/src/pretix/base/templates/pretixbase/email/order_details.html @@ -0,0 +1,158 @@ +{% load eventurl %} +{% load i18n %} + +{% if position %} +
| + {% trans "Event:" %} + | +
+ {{ event.name }}
+ + {% if event.has_subevents and ev.name|upper != event.name|upper %}{{ ev.name }} {% endif %} + {{ ev.get_date_range_display }} + {% if event.settings.show_times %} + {{ ev.date_from|date:"TIME_FORMAT" }} + {% endif %} + |
+
| + {% trans "Order code:" %} + | +
+ {{ order.code }} ({{ order.datetime|date:"SHORT_DATE_FORMAT" }}) + {% if order.email %} + {% trans "created by" %} {{ order.email }} + {% endif %} + |
+
| + {% trans "Order status:" %} + | ++ {% include "pretixpresale/event/fragment_order_status.html" with order=order %} + | +
| + {% trans "Organizer:" %} + | +
+ {{ event.organizer }}
+ {% if event.settings.contact_mail %}
+ + + {{ event.settings.contact_mail }} + + {% endif %} + |
+
| + {% trans "Event:" %} + | +
+ {{ event.name }}
+ {% if not event.has_subevents and event.settings.show_dates_on_frontpage %}
+ + {{ event.get_date_range_display }} + {% if event.settings.show_times %} + {{ event.date_from|date:"TIME_FORMAT" }} + {% endif %} + {% endif %} + |
+ ||
| + {% trans "Order code:" %} + | ++ {{ order.code }} ({{ order.datetime|date:"SHORT_DATE_FORMAT" }}) + | +||
| + {% trans "Order status:" %} + | ++ {% include "pretixpresale/event/fragment_order_status.html" with order=order %} + | +||
| + {% trans "Details:" %} + | +
+
|
+ ||
| + {% trans "Organizer:" %} + | +
+ {{ event.organizer }}
+ {% if event.settings.contact_mail %}
+ + + {{ event.settings.contact_mail }} + + {% endif %} + |
+
|
- {% if position %}
- {% trans "You are receiving this email because someone signed you up for the following event:" %}
- {% trans "Event:" %} {{ event.name }} - {% trans "Order code:" %} {{ order.code }} - {% trans "Order date:" %} {{ order.datetime|date:"SHORT_DATE_FORMAT" }} - - {% trans "View registration details" %} - - {% else %} - {% trans "You are receiving this email because you placed an order for the following event:" %} - {% trans "Event:" %} {{ event.name }} - {% trans "Order code:" %} {{ order.code }} - {% trans "Order date:" %} {{ order.datetime|date:"SHORT_DATE_FORMAT" }} - - {% trans "View order details" %} - - {% endif %} + {% include "pretixbase/email/order_details.html" %}
- {% if position %}
- {% trans "You are receiving this email because someone signed you up for the following event:" %}
- {% trans "Event:" %} {{ event.name }} - {% trans "Order code:" %} {{ order.code }} - {% trans "Order date:" %} {{ order.datetime|date:"SHORT_DATE_FORMAT" }} - - {% trans "View registration details" %} - - {% else %} - {% trans "You are receiving this email because you placed an order for the following event:" %} - {% trans "Event:" %} {{ event.name }} - {% trans "Order code:" %} {{ order.code }} - {% trans "Order date:" %} {{ order.datetime|date:"SHORT_DATE_FORMAT" }} - - {% trans "View order details" %} - - {% endif %} + {% include "pretixbase/email/order_details.html" %} |