Free and open source ticket system written in python
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}]"