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()