Source code for fsi.forms.notification
from functools import cached_property
from onegov.form import Form
from onegov.form.fields import MultiCheckboxField
from onegov.fsi import _
from wtforms.fields import StringField, TextAreaField
from wtforms.validators import InputRequired
from uuid import UUID
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from onegov.fsi.models import CourseAttendee, CourseNotificationTemplate
from wtforms.fields.choices import _Choice
[docs]
class NotificationForm(Form):
[docs]
subject = StringField(
label=_('Email Subject'),
render_kw={'size': 6, 'clear': True},
validators=[
InputRequired()
],
)
[docs]
def apply_model(self, model: 'CourseNotificationTemplate') -> None:
self.subject.data = model.subject
self.text.data = model.text
[docs]
def update_model(self, model: 'CourseNotificationTemplate') -> None:
model.subject = self.subject.data
model.text = self.text.data
[docs]
class NotificationTemplateSendForm(Form):
[docs]
recipients = MultiCheckboxField(
label=_('Recipients'),
coerce=lambda x: x if isinstance(x, UUID) else UUID(x)
)
@property
@cached_property
[docs]
def attendees(self) -> list['CourseAttendee']:
return [a for a in self.model.course_event.attendees if a.active]
@cached_property
[docs]
def recipients_choices(self) -> list['_Choice']:
return [(a.id, a.email) for a in self.attendees]
[docs]
def on_request(self) -> None:
choices = self.recipients_choices
self.recipients.choices = choices
self.recipients.data = [c[0] for c in choices]