Scheduled mails: Allow subevent-dependent placeholders (Z#23171818) (#4629)

This commit is contained in:
Raphael Michel
2024-11-19 10:50:10 +01:00
committed by GitHub
parent 4b8416df8f
commit 76ecec8b98
4 changed files with 59 additions and 6 deletions

View File

@@ -215,7 +215,11 @@ def base_placeholders(sender, **kwargs):
),
SimpleFunctionalTextPlaceholder(
'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(
'event_slug', ['event'], lambda event: event.slug, lambda event: event.slug

View File

@@ -381,8 +381,8 @@ class RuleForm(FormPlaceholderMixin, I18nModelForm):
]
)
self._set_field_placeholders('subject', ['event', 'order'])
self._set_field_placeholders('template', ['event', 'order'])
self._set_field_placeholders('subject', ['event', 'order', 'event_or_subevent'])
self._set_field_placeholders('template', ['event', 'order', 'event_or_subevent'])
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')))

View File

@@ -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,
)
]

View File

@@ -174,7 +174,12 @@ class ScheduledMail(models.Model):
ia = InvoiceAddress(order=o)
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:
o.send_mail(self.rule.subject, self.rule.template, email_ctx,
attach_ical=self.rule.attach_ical,
@@ -192,12 +197,23 @@ class ScheduledMail(models.Model):
for p in positions:
try:
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,
attach_ical=self.rule.attach_ical,
log_entry_type='pretix.plugins.sendmail.rule.order.position.email.sent')
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,
attach_ical=self.rule.attach_ical,
log_entry_type='pretix.plugins.sendmail.rule.order.email.sent')