Free and open source ticket system written in python
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 5edd527aaba4e33b526f04f58d0db2b8a4ef278e 59 lines 2.0 kB view raw
1from django.db import models 2from django.contrib.auth.models import AbstractUser 3from django.utils.translation import gettext_lazy as _ 4from django.conf import settings 5from django.core.mail import send_mail 6 7 8class PawUser(AbstractUser): 9 profile_picture = models.ImageField( 10 upload_to='profile_pics/', null=True, blank=True) 11 language = models.CharField(max_length=2, default='en') 12 telegram_username = models.CharField(max_length=50, null=True, blank=True) 13 use_darkmode = models.BooleanField(default=False) 14 receive_email_notifications = models.BooleanField(default=True) 15 16 def __str__(self): 17 return self.username 18 19 20class GoogleSSOUser(models.Model): 21 paw_user = models.OneToOneField( 22 PawUser, on_delete=models.CASCADE, primary_key=True) 23 google_id = models.CharField(max_length=255) 24 25 def __str__(self): 26 return self.paw_user.username 27 28 class Meta: 29 db_table = "google_sso_user" 30 verbose_name = _("Google SSO User") 31 32class MailTemplate(models.Model): 33 event = models.CharField(max_length=100) 34 language = models.CharField(max_length=2, default='en', choices=settings.LANGUAGES) 35 name = models.CharField(max_length=200) 36 subject = models.CharField(max_length=200) 37 content = models.TextField() 38 39 @classmethod 40 def get_template(cls, event, language='en'): 41 template = cls.objects.filter(event=event, language=language).first() 42 if not template: 43 template = cls.objects.filter(event=event, language='en').first() 44 return template 45 46 def send_mail(self, to, context): 47 try: 48 send_mail( 49 self.subject.format(**context), 50 self.content.format(**context), 51 settings.DEFAULT_FROM_EMAIL, 52 [to], 53 fail_silently=False, 54 ) 55 except Exception as e: 56 print(f"Error sending email with type {type(e)}: {e}") 57 58 def __str__(self): 59 return f"{self.name} - [{self.event}]"