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 8a6a147d99fb5ebd921c6d861e514f3d4e2d1181 72 lines 2.6 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.dispatch import receiver 5from django.db.models.signals import post_save 6from django.conf import settings 7from django.core.mail import send_mail 8 9 10class PawUser(AbstractUser): 11 profile_picture = models.ImageField( 12 upload_to='profile_pics/', null=True, blank=True) 13 language = models.CharField(max_length=2, default='en') 14 telegram_username = models.CharField(max_length=50, null=True, blank=True) 15 use_darkmode = models.BooleanField(default=False) 16 receive_email_notifications = models.BooleanField(default=True) 17 18 def __str__(self): 19 return self.username 20 21 22class GoogleSSOUser(models.Model): 23 paw_user = models.OneToOneField( 24 PawUser, on_delete=models.CASCADE, primary_key=True) 25 google_id = models.CharField(max_length=255) 26 27 def __str__(self): 28 return self.paw_user.username 29 30 class Meta: 31 db_table = "google_sso_user" 32 verbose_name = _("Google SSO User") 33 34class MailTemplate(models.Model): 35 event = models.CharField(max_length=100) 36 language = models.CharField(max_length=2, default='en', choices=settings.LANGUAGES) 37 name = models.CharField(max_length=200) 38 subject = models.CharField(max_length=200) 39 content = models.TextField() 40 41 @classmethod 42 def get_template(cls, event, language='en'): 43 template = cls.objects.filter(event=event, language=language).first() 44 if not template: 45 template = cls.objects.filter(event=event, language='en').first() 46 return template 47 48 def send_mail(self, to_list: list[str], context): 49 try: 50 send_mail( 51 self.subject.format(**context), 52 self.content.format(**context), 53 settings.DEFAULT_FROM_EMAIL, 54 to_list, 55 fail_silently=False, 56 ) 57 except Exception as e: 58 print(f"Error sending email with type {type(e)}: {e}") 59 60 def __str__(self): 61 return f"{self.name} - [{self.event}]" 62 63@receiver(post_save, sender=PawUser, dispatch_uid="new_user_notification") 64def new_user_notification(sender, instance, created, **kwargs): 65 if not created or not instance.email: 66 return None 67 68 mail_template = MailTemplate.get_template('new_user', instance.language) 69 if not mail_template: 70 return None 71 mail_template.send_mail([instance.email], { 72 'username': instance.username, 'email': instance.email })