Source code for org.forms.userprofile
from onegov.form import Form
from onegov.org import _
from wtforms.fields import RadioField
from wtforms.fields import SelectChoice
from wtforms.validators import InputRequired
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from onegov.org.request import OrgRequest
from onegov.user import User
[docs]
class UserProfileForm(Form):
""" Defines the settings form for user profiles. """
if TYPE_CHECKING:
[docs]
ticket_statistics = RadioField(
label=_('Send a periodic status e-mail.'),
fieldset=_('General'),
default='weekly',
validators=[InputRequired()],
choices=(
SelectChoice(
'daily',
_('Daily (exluding the weekend)')
),
SelectChoice(
'weekly',
_('Weekly (on mondays)')
),
SelectChoice(
'monthly',
_('Monthly (on first monday of the month)')
),
SelectChoice(
'never',
_('Never')
),
)
)
@property
[docs]
def enable_ticket_statistics(self) -> bool:
if not self.request.app.send_ticket_statistics:
# no point in showing it if we don't send it.
return False
roles = self.request.app.settings.org.status_mail_roles
return self.request.current_role in roles
[docs]
def on_request(self) -> None:
if not self.enable_ticket_statistics:
self.delete_field('ticket_statistics')
[docs]
def populate_obj(self, obj: User) -> None: # type:ignore
super().populate_obj(obj, exclude={
'ticket_statistics',
})
if self.enable_ticket_statistics:
obj.data = obj.data or {}
obj.data['ticket_statistics'] = self.ticket_statistics.data
[docs]
def process_obj(self, obj: User) -> None: # type:ignore
super().process_obj(obj)
if self.enable_ticket_statistics:
self.ticket_statistics.data = (
obj.data or {}).get('ticket_statistics', 'weekly')