Skip to content
Snippets Groups Projects
models.py 1.71 KiB
Newer Older
from django import template
from django.conf import settings
from django.db import models
from django.utils.translation import gettext_lazy
from greg.models import BaseModel, Person, Sponsor

class GregUserProfile(BaseModel):
    """Link the django user to a Person or Sponsor."""

    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    person = models.ForeignKey(
        Person,
        on_delete=models.CASCADE,
        related_name="user_profiles",
        null=True,
    )
    sponsor = models.ForeignKey(
        Sponsor,
        on_delete=models.CASCADE,
        related_name="user_profiles",
        null=True,
    )
    userid_feide = models.CharField(gettext_lazy("userid-feide"), max_length=150)


class EmailTemplate(BaseModel):
    """
    Stores templates for emails.

    Only one template of each type is allowed. To introduce new ones, simply add a new
    EmailType.
    """

    class EmailType(models.TextChoices):
        """Types of Emails"""

        GUEST_REGISTRATION = "guest_registration"
        SPONSOR_CONFIRMATION = "sponsor_confirmation"

    template_key = models.CharField(
        max_length=64, choices=EmailType.choices, unique=True
    )
    subject = models.CharField(max_length=255, blank=True, null=True)
    from_email = models.CharField(max_length=255, blank=True, null=True)
    body = models.TextField(blank=True, null=True)

    def get_rendered_template(self, tpl, context):
        return template.Template(tpl).render(context)

    def get_subject(self, context):
        return self.get_rendered_template(self.subject, context)

    def get_body(self, context):
        return self.get_rendered_template(self.body, context)