snapshot: preserve bilingual email template phase

This commit is contained in:
Md Bayazid Bostame
2026-03-24 12:37:35 +01:00
parent 4d3c7bdf6e
commit ec00ae8b2e
9 changed files with 275 additions and 18 deletions

View File

@@ -80,6 +80,7 @@ class OnboardingRequest(models.Model):
generated_pdf_path = models.CharField(max_length=500, blank=True)
intro_pdf_path = models.CharField(max_length=500, blank=True)
preferred_language = models.CharField(max_length=10, blank=True, default='de')
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self) -> str:
@@ -181,7 +182,9 @@ class NotificationTemplate(models.Model):
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)
@@ -191,6 +194,18 @@ class NotificationTemplate(models.Model):
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 = [
@@ -216,7 +231,9 @@ class NotificationRule(models.Model):
)
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)
@@ -227,6 +244,18 @@ class NotificationRule(models.Model):
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()
class ScheduledWelcomeEmail(models.Model):
STATUS_CHOICES = [
@@ -393,6 +422,7 @@ class OffboardingRequest(models.Model):
signature = models.CharField(max_length=255, blank=True, verbose_name='Unterschrift (Name)')
requested_by_email = models.EmailField(verbose_name='E-Mail der anfordernden Person')
requested_by_name = models.CharField(max_length=255, blank=True, verbose_name='Name der anfordernden Person')
preferred_language = models.CharField(max_length=10, blank=True, default='de')
generated_pdf_path = models.CharField(max_length=500, blank=True)
created_at = models.DateTimeField(auto_now_add=True)