Free and open source ticket system written in python

๐Ÿ‘Œ IMPROVE: Add functionality to opt-out of mail notifications

+38 -6
+3 -1
core/forms.py
··· 14 14 'class': 'grow', 'placeholder': 'Telegram Username'})) 15 15 use_darkmode = forms.BooleanField( 16 16 required=False, widget=forms.CheckboxInput(attrs={'class': 'toggle toggle-secondary'})) 17 + receive_email_notifications = forms.BooleanField( 18 + required=False, widget=forms.CheckboxInput(attrs={'class': 'toggle toggle-secondary'})) 17 19 18 20 class Meta: 19 21 model = PawUser 20 22 fields = ('email', 'profile_picture', 21 - 'language', 'telegram_username', 'use_darkmode') 23 + 'language', 'telegram_username', 'use_darkmode', 'receive_email_notifications') 22 24 23 25 USERNAME_REGEX_FIELD = forms.RegexField( 24 26 required=True,
+18
core/migrations/0008_pawuser_receive_email_notifications.py
··· 1 + # Generated by Django 5.0.3 on 2024-03-23 23:59 2 + 3 + from django.db import migrations, models 4 + 5 + 6 + class Migration(migrations.Migration): 7 + 8 + dependencies = [ 9 + ("core", "0007_seed_mailtemplates"), 10 + ] 11 + 12 + operations = [ 13 + migrations.AddField( 14 + model_name="pawuser", 15 + name="receive_email_notifications", 16 + field=models.BooleanField(default=True), 17 + ), 18 + ]
+2 -1
core/models.py
··· 11 11 language = models.CharField(max_length=2, default='en') 12 12 telegram_username = models.CharField(max_length=50, null=True, blank=True) 13 13 use_darkmode = models.BooleanField(default=False) 14 + receive_email_notifications = models.BooleanField(default=True) 14 15 15 16 def __str__(self): 16 17 return self.username ··· 52 53 fail_silently=False, 53 54 ) 54 55 except Exception as e: 55 - print(e) 56 + print(f"Error sending email with type {type(e)}: {e}") 56 57 57 58 def __str__(self): 58 59 return f"{self.name} - [{self.event}]"
+2
core/views.py
··· 125 125 request.user.language = form.cleaned_data["language"] 126 126 request.user.telegram_username = form.cleaned_data["telegram_username"] 127 127 request.user.use_darkmode = form.cleaned_data["use_darkmode"] 128 + request.user.receive_email_notifications = form.cleaned_data["receive_email_notifications"] 128 129 if form.cleaned_data["profile_picture"]: 129 130 request.user.profile_picture = form.cleaned_data["profile_picture"] 130 131 request.user.save() ··· 134 135 "language": request.user.language, 135 136 "telegram_username": request.user.telegram_username, 136 137 "use_darkmode": request.user.use_darkmode, 138 + "receive_email_notifications": request.user.receive_email_notifications 137 139 }) 138 140 139 141 res = render(request, "core/settings.html", {"form": form})
+1 -1
paw/__init__.py
··· 1 1 from django import get_version 2 2 3 - VERSION = (0, 3, 0, "beta", 3) 3 + VERSION = (0, 4, 0, "beta", 1) 4 4 5 5 __version__ = get_version(VERSION)
+8 -1
paw/templates/core/settings.html
··· 30 30 <span class="label-text font-semibold text-base-content" for="{{ form.use_darkmode.id_for_label }}">{% trans 'Use Darkmode' %}</span> 31 31 {{ form.use_darkmode }} 32 32 </label> 33 - </div> 33 + </div> 34 + 35 + <div class="form-control w-full mb-2"> 36 + <label class="label cursor-pointer"> 37 + <span class="label-text font-semibold text-base-content" for="{{ form.receive_email_notifications.id_for_label }}">{% trans 'Receive Email Notifications' %}</span> 38 + {{ form.receive_email_notifications }} 39 + </label> 40 + </div> 34 41 35 42 <label class="form-control w-full mb-2"> 36 43 <div class="label">
+4 -2
ticketing/models.py
··· 116 116 117 117 @receiver(post_save, sender=Ticket, dispatch_uid="mail_notification") 118 118 def send_mail_notification(sender, instance, created, **kwargs): 119 - if created: 119 + if created and instance.user.receive_email_notifications: 120 120 mail_template = MailTemplate.get_template('new_ticket', instance.user.language) 121 121 if not mail_template: 122 122 return None ··· 126 126 127 127 @receiver(pre_save, sender=Ticket, dispatch_uid="mail_change_notification") 128 128 def send_mail_change_notification(sender, instance, update_fields=None, **kwargs): 129 + if not instance.user.receive_email_notifications: 130 + return None 129 131 try: 130 132 old_instance = Ticket.objects.get(id=instance.id) 131 133 except Ticket.DoesNotExist: ··· 159 161 160 162 @receiver(post_save, sender=Comment, dispatch_uid="mail_comment_notification") 161 163 def send_mail_comment_notification(sender, instance, created, **kwargs): 162 - if created: 164 + if created and instance.ticket.user.receive_email_notifications: 163 165 mail_template = MailTemplate.get_template('new_comment', instance.user.language) 164 166 if not mail_template: 165 167 return None