snapshot: modularize workflow model layer by responsibility
This commit is contained in:
89
backend/workflows/model_notifications.py
Normal file
89
backend/workflows/model_notifications.py
Normal file
@@ -0,0 +1,89 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user