diff --git a/aleksis/apps/paweljong/models.py b/aleksis/apps/paweljong/models.py index 1f55e56d23119b2a5f88b6ac0aa1dc8faca16c8c..980ca2f1c2babfd3d0293261c95cbd4bd55aa5b1 100644 --- a/aleksis/apps/paweljong/models.py +++ b/aleksis/apps/paweljong/models.py @@ -8,10 +8,11 @@ from django.utils.translation import gettext_lazy as _ from ckeditor.fields import RichTextField from django_iban.fields import IBANField +from templated_email import send_templated_mail from aleksis.core.mixins import ExtensibleModel from aleksis.core.models import Group, Person -from aleksis.core.util.core_helpers import generate_random_code +from aleksis.core.util.core_helpers import generate_random_code, get_site_preferences class Terms(ExtensibleModel): @@ -26,12 +27,45 @@ class Terms(ExtensibleModel): class InfoMailing(ExtensibleModel): subject = models.CharField(max_length=255, verbose_name=_("subject")) text = RichTextField(verbose_name=_("Text")) + reply_to = models.EmailField(verbose_name=_("Request replies to"), blank=True) + + send_to_person = models.BooleanField(verbose_name=_("Send to registered person"), default=True) + send_to_guardians = models.BooleanField(verbose_name=_("Send to guardians"), default=False) sent_to = models.ManyToManyField(Person, verbose_name=_("Sent to persons"), related_name="received_info_mailings", editable=False, blank=True) def __str__(self) -> str: return self.subject + def send(self): + sent_to = self.sent_to.all() + + for event in self.events.all(): + for registration in event.registrations: + if registration.person in sent_to: + continue + + subject = self.subject.format(event=event, registration=registration, person=registration.person) + body = self.text.format(event=event, registration=registration, person=registration.person) + + if self.send_to_person: + to = [registration.person.email] + if self.send_to_guardians: + cc = registration.person.guardians.values_list("email", flat=True).all() + else: + cc = [] + elif self.send_to_guardians: + to = registration.person.guardians.values_list("email", flat=True).all() + cc = [] + + sender = self.sender or get_site_preferences()["mail__address"] + reply_to = self.reply_to or sender + + context = {"subject": subject, "body": body} + send_templated_email(template_name="info_mailing", context=context, from_email=sender, recipient_list=to, cc=cc) + + self.sent_to.add(self.registration.person) + class Event(ExtensibleModel): # Event details @@ -153,7 +187,7 @@ class Voucher(ExtensibleModel): class EventRegistration(ExtensibleModel): - event = models.ForeignKey(Event, on_delete=models.CASCADE, verbose_name=_("Event")) + event = models.ForeignKey(Event, on_delete=models.CASCADE, verbose_name=_("Event"), related_name="registrations") person = models.ForeignKey(Person, on_delete=models.CASCADE, verbose_name=_("Person")) date_registered = models.DateTimeField(auto_now_add=True, verbose_name=_("Registration date")) diff --git a/aleksis/apps/paweljong/templates/templated_email/info_mailing.email b/aleksis/apps/paweljong/templates/templated_email/info_mailing.email new file mode 100644 index 0000000000000000000000000000000000000000..946f635afbdfca45318bf3dda4232cbdf11a3c6c --- /dev/null +++ b/aleksis/apps/paweljong/templates/templated_email/info_mailing.email @@ -0,0 +1,3 @@ +{% block subject %}{{ subject }}{% endblock %} + +{% block html %}{{ body|safe }}{% endblock %}