""" Author: Michel Peltriaux Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany Contact: ksp-servicestelle@sgdnord.rlp.de Created on: 18.08.22 """ from django import forms from django.urls import reverse, reverse_lazy from django.utils.translation import gettext_lazy as _ from api.models import APIUserToken from intervention.inputs import GenerateInput from konova.forms import BaseForm from user.models import User, UserNotification class UserNotificationForm(BaseForm): """ Form for changing the notification settings of a user """ notifications = forms.MultipleChoiceField( label_suffix="", label=_("Notifications"), required=False, # allow total disabling of all notifications help_text=_("Select the situations when you want to receive a notification"), widget=forms.CheckboxSelectMultiple( attrs={ "class": "list-unstyled", } ), choices=[] ) def __init__(self, user: User, *args, **kwargs): super().__init__(*args, **kwargs) self.user = user self.form_title = _("Edit notifications") self.form_caption = _("") self.action_url = reverse("user:notifications") self.cancel_redirect = reverse("user:index") # Insert all notifications into form field by creating choices as tuples notifications = UserNotification.objects.filter( is_active=True, ) choices = [] for n in notifications: choices.append( (n.id, _(n.name)) ) self.fields["notifications"].choices = choices users_current_notifications = self.user.notifications.all() users_current_notifications = [str(n.id) for n in users_current_notifications] self.fields["notifications"].initial = users_current_notifications def save(self): """ Stores the changes in the user konova_extension Returns: """ selected_notification_ids = self.cleaned_data.get("notifications", []) notifications = UserNotification.objects.filter( id__in=selected_notification_ids, ) self.user.notifications.set(notifications)