mirror of
https://github.com/pretix/pretix.git
synced 2026-08-26 13:14:40 +00:00
Scheduled mails: Allow subevent-dependent placeholders (Z#23171818) (#4629)
This commit is contained in:
@@ -215,7 +215,11 @@ def base_placeholders(sender, **kwargs):
|
|||||||
),
|
),
|
||||||
SimpleFunctionalTextPlaceholder(
|
SimpleFunctionalTextPlaceholder(
|
||||||
'event', ['event_or_subevent'], lambda event_or_subevent: event_or_subevent.name,
|
'event', ['event_or_subevent'], lambda event_or_subevent: event_or_subevent.name,
|
||||||
lambda event_or_subevent: event_or_subevent.name
|
lambda event: event.subevents.first().name if event.has_subevents else event.name,
|
||||||
|
),
|
||||||
|
SimpleFunctionalTextPlaceholder(
|
||||||
|
'event_series_name', ['event', 'event_or_subevent'], lambda event, event_or_subevent: event.name,
|
||||||
|
lambda event: event.name
|
||||||
),
|
),
|
||||||
SimpleFunctionalTextPlaceholder(
|
SimpleFunctionalTextPlaceholder(
|
||||||
'event_slug', ['event'], lambda event: event.slug, lambda event: event.slug
|
'event_slug', ['event'], lambda event: event.slug, lambda event: event.slug
|
||||||
|
|||||||
@@ -381,8 +381,8 @@ class RuleForm(FormPlaceholderMixin, I18nModelForm):
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
self._set_field_placeholders('subject', ['event', 'order'])
|
self._set_field_placeholders('subject', ['event', 'order', 'event_or_subevent'])
|
||||||
self._set_field_placeholders('template', ['event', 'order'])
|
self._set_field_placeholders('template', ['event', 'order', 'event_or_subevent'])
|
||||||
|
|
||||||
choices = [(e, l) for e, l in Order.STATUS_CHOICE if e != 'n']
|
choices = [(e, l) for e, l in Order.STATUS_CHOICE if e != 'n']
|
||||||
choices.insert(0, ('n__valid_if_pending', _('payment pending but already confirmed')))
|
choices.insert(0, ('n__valid_if_pending', _('payment pending but already confirmed')))
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
# Generated by Django 4.2.16 on 2024-11-13 13:43
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
from django.db.models import Q
|
||||||
|
from i18nfield.strings import LazyI18nString
|
||||||
|
|
||||||
|
|
||||||
|
def migrate_placeholders(apps, schema_editor):
|
||||||
|
Rule = apps.get_model("sendmail", "Rule")
|
||||||
|
for r in Rule.objects.filter(
|
||||||
|
Q(template__contains="{event}") | Q(subject__contains="{event}"),
|
||||||
|
event__has_subevents=True
|
||||||
|
):
|
||||||
|
r.template = LazyI18nString({
|
||||||
|
k: v.replace("{event}", "{event_series_name}") for k, v in r.template.data.items()
|
||||||
|
})
|
||||||
|
r.subject = LazyI18nString({
|
||||||
|
k: v.replace("{event}", "{event_series_name}") for k, v in r.subject.data.items()
|
||||||
|
})
|
||||||
|
r.save(update_fields=["template", "subject"])
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
("sendmail", "008_remove_scheduled_mails"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RunPython(
|
||||||
|
migrate_placeholders,
|
||||||
|
migrations.RunPython.noop,
|
||||||
|
)
|
||||||
|
]
|
||||||
@@ -174,7 +174,12 @@ class ScheduledMail(models.Model):
|
|||||||
ia = InvoiceAddress(order=o)
|
ia = InvoiceAddress(order=o)
|
||||||
|
|
||||||
if send_to_orders and o.email:
|
if send_to_orders and o.email:
|
||||||
email_ctx = get_email_context(event=e, order=o, invoice_address=ia)
|
email_ctx = get_email_context(
|
||||||
|
event=e,
|
||||||
|
order=o,
|
||||||
|
invoice_address=ia,
|
||||||
|
event_or_subevent=self.subevent or e,
|
||||||
|
)
|
||||||
try:
|
try:
|
||||||
o.send_mail(self.rule.subject, self.rule.template, email_ctx,
|
o.send_mail(self.rule.subject, self.rule.template, email_ctx,
|
||||||
attach_ical=self.rule.attach_ical,
|
attach_ical=self.rule.attach_ical,
|
||||||
@@ -192,12 +197,23 @@ class ScheduledMail(models.Model):
|
|||||||
for p in positions:
|
for p in positions:
|
||||||
try:
|
try:
|
||||||
if p.attendee_email and (p.attendee_email != o.email or not o_sent):
|
if p.attendee_email and (p.attendee_email != o.email or not o_sent):
|
||||||
email_ctx = get_email_context(event=e, order=o, invoice_address=ia, position=p)
|
email_ctx = get_email_context(
|
||||||
|
event=e,
|
||||||
|
order=o,
|
||||||
|
invoice_address=ia,
|
||||||
|
position=p,
|
||||||
|
event_or_subevent=self.subevent or e,
|
||||||
|
)
|
||||||
p.send_mail(self.rule.subject, self.rule.template, email_ctx,
|
p.send_mail(self.rule.subject, self.rule.template, email_ctx,
|
||||||
attach_ical=self.rule.attach_ical,
|
attach_ical=self.rule.attach_ical,
|
||||||
log_entry_type='pretix.plugins.sendmail.rule.order.position.email.sent')
|
log_entry_type='pretix.plugins.sendmail.rule.order.position.email.sent')
|
||||||
elif not o_sent and o.email:
|
elif not o_sent and o.email:
|
||||||
email_ctx = get_email_context(event=e, order=o, invoice_address=ia)
|
email_ctx = get_email_context(
|
||||||
|
event=e,
|
||||||
|
order=o,
|
||||||
|
invoice_address=ia,
|
||||||
|
event_or_subevent=self.subevent or e,
|
||||||
|
)
|
||||||
o.send_mail(self.rule.subject, self.rule.template, email_ctx,
|
o.send_mail(self.rule.subject, self.rule.template, email_ctx,
|
||||||
attach_ical=self.rule.attach_ical,
|
attach_ical=self.rule.attach_ical,
|
||||||
log_entry_type='pretix.plugins.sendmail.rule.order.email.sent')
|
log_entry_type='pretix.plugins.sendmail.rule.order.email.sent')
|
||||||
|
|||||||
Reference in New Issue
Block a user