90 lines
4.1 KiB
Python
90 lines
4.1 KiB
Python
from django.db import models
|
|
from django.utils.translation import get_language, gettext_lazy as _
|
|
|
|
|
|
class NotificationTemplate(models.Model):
|
|
TEMPLATE_CHOICES = [
|
|
('onboarding_it', _('Onboarding: IT')),
|
|
('onboarding_general_info', _('Onboarding: Allgemeine Info')),
|
|
('onboarding_business_card', _('Onboarding: Visitenkarte')),
|
|
('onboarding_hr_works', _('Onboarding: HR Works')),
|
|
('onboarding_key', _('Onboarding: Schlüssel')),
|
|
('onboarding_reference', _('Onboarding: Referenz Anfordernde Person')),
|
|
('onboarding_welcome', _('Onboarding: Welcome E-Mail')),
|
|
('offboarding_it', _('Offboarding: IT')),
|
|
('offboarding_general_info', _('Offboarding: Allgemeine Info')),
|
|
('offboarding_hr_works_disable', _('Offboarding: HR Works Deaktivierung')),
|
|
('offboarding_reference', _('Offboarding: Referenz Anfordernde Person')),
|
|
]
|
|
|
|
key = models.CharField(max_length=60, choices=TEMPLATE_CHOICES, unique=True)
|
|
subject_template = models.CharField(max_length=255)
|
|
subject_template_en = models.CharField(max_length=255, blank=True)
|
|
body_template = models.TextField()
|
|
body_template_en = models.TextField(blank=True)
|
|
is_active = models.BooleanField(default=True)
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
class Meta:
|
|
ordering = ['key']
|
|
|
|
def __str__(self) -> str:
|
|
return self.get_key_display()
|
|
|
|
def translated_subject_template(self, language_code: str | None = None) -> str:
|
|
lang = (language_code or get_language() or 'de').split('-')[0]
|
|
if lang == 'en' and self.subject_template_en.strip():
|
|
return self.subject_template_en.strip()
|
|
return self.subject_template.strip()
|
|
|
|
def translated_body_template(self, language_code: str | None = None) -> str:
|
|
lang = (language_code or get_language() or 'de').split('-')[0]
|
|
if lang == 'en' and self.body_template_en.strip():
|
|
return self.body_template_en.strip()
|
|
return self.body_template.strip()
|
|
|
|
|
|
class NotificationRule(models.Model):
|
|
EVENT_CHOICES = [('onboarding', _('Onboarding')), ('offboarding', _('Offboarding'))]
|
|
OPERATOR_CHOICES = [
|
|
('always', _('Immer')),
|
|
('contains', _('Enthält')),
|
|
('equals', _('Ist gleich')),
|
|
('is_true', _('Ist aktiv/Ja')),
|
|
('is_false', _('Ist inaktiv/Nein')),
|
|
]
|
|
|
|
name = models.CharField(max_length=120)
|
|
is_active = models.BooleanField(default=True)
|
|
event_type = models.CharField(max_length=20, choices=EVENT_CHOICES)
|
|
field_name = models.CharField(max_length=80, blank=True)
|
|
operator = models.CharField(max_length=20, choices=OPERATOR_CHOICES, default='always')
|
|
expected_value = models.CharField(max_length=255, blank=True)
|
|
recipients = models.TextField(help_text='Mehrere E-Mail-Adressen mit Komma, Semikolon oder Zeilenumbruch trennen.')
|
|
template_key = models.CharField(max_length=60, blank=True)
|
|
custom_subject = models.CharField(max_length=255, blank=True)
|
|
custom_subject_en = models.CharField(max_length=255, blank=True)
|
|
custom_body = models.TextField(blank=True)
|
|
custom_body_en = models.TextField(blank=True)
|
|
include_pdf_attachment = models.BooleanField(default=False)
|
|
sort_order = models.PositiveIntegerField(default=0)
|
|
|
|
class Meta:
|
|
ordering = ['event_type', 'sort_order', 'id']
|
|
|
|
def __str__(self) -> str:
|
|
state = 'aktiv' if self.is_active else 'inaktiv'
|
|
return f'{self.get_event_type_display()} | {self.name} ({state})'
|
|
|
|
def translated_custom_subject(self, language_code: str | None = None) -> str:
|
|
lang = (language_code or get_language() or 'de').split('-')[0]
|
|
if lang == 'en' and self.custom_subject_en.strip():
|
|
return self.custom_subject_en.strip()
|
|
return self.custom_subject.strip()
|
|
|
|
def translated_custom_body(self, language_code: str | None = None) -> str:
|
|
lang = (language_code or get_language() or 'de').split('-')[0]
|
|
if lang == 'en' and self.custom_body_en.strip():
|
|
return self.custom_body_en.strip()
|
|
return self.custom_body.strip()
|