OpenSlides/openslides/agenda/forms.py

77 lines
2.3 KiB
Python
Raw Normal View History

2011-07-31 10:46:29 +02:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
openslides.agenda.forms
~~~~~~~~~~~~~~~~~~~~~~~
Forms for the agenda app.
:copyright: 20112013 by OpenSlides team, see AUTHORS.
2011-07-31 10:46:29 +02:00
:license: GNU GPL, see LICENSE for more details.
"""
2013-02-16 10:41:22 +01:00
import re
2012-07-04 12:50:33 +02:00
from django import forms
from django.utils.translation import ugettext_lazy
from mptt.forms import TreeNodeChoiceField
2012-07-10 13:19:12 +02:00
from openslides.utils.forms import CssClassMixin
2013-03-18 12:34:47 +01:00
from openslides.utils.person.forms import PersonFormField
from .models import Item, Speaker
2011-07-31 10:46:29 +02:00
2012-02-09 02:29:38 +01:00
2012-07-04 12:50:33 +02:00
class ItemForm(forms.ModelForm, CssClassMixin):
"""
Form to create of update an item.
"""
parent = TreeNodeChoiceField(
queryset=Item.objects.all(), label=ugettext_lazy("Parent item"), required=False)
2012-07-04 12:50:33 +02:00
duration = forms.RegexField(
regex=re.compile('[0-99]:[0-5][0-9]'),
error_message=ugettext_lazy("Invalid format. Hours from 0 to 99 and minutes from 00 to 59"),
max_length=5,
2013-01-30 17:39:53 +01:00
required=False,
label=ugettext_lazy("Duration (hh:mm)"))
2013-01-29 14:28:42 +01:00
2011-07-31 10:46:29 +02:00
class Meta:
2012-02-06 22:22:16 +01:00
model = Item
2012-07-04 11:00:58 +02:00
exclude = ('closed', 'weight', 'related_sid')
2011-07-31 10:46:29 +02:00
class ItemOrderForm(forms.Form, CssClassMixin):
2012-07-04 12:50:33 +02:00
"""
Form to change the order of the items.
"""
weight = forms.IntegerField(
widget=forms.HiddenInput(attrs={'class': 'menu-weight'}))
2012-07-04 12:50:33 +02:00
self = forms.IntegerField(
2013-02-18 18:56:37 +01:00
widget=forms.HiddenInput(attrs={'class': 'menu-mlid'}))
2012-07-04 12:50:33 +02:00
parent = forms.IntegerField(
2013-02-18 18:56:37 +01:00
widget=forms.HiddenInput(attrs={'class': 'menu-plid'}))
2013-03-18 12:34:47 +01:00
class AppendSpeakerForm(CssClassMixin, forms.Form):
2013-03-18 12:34:47 +01:00
"""
Form to set an user to a list of speakers.
"""
2013-03-18 12:34:47 +01:00
speaker = PersonFormField(
widget=forms.Select(attrs={'class': 'medium-input'}),
label=ugettext_lazy("Add participant"))
2013-03-18 12:34:47 +01:00
def __init__(self, item, *args, **kwargs):
self.item = item
return super(AppendSpeakerForm, self).__init__(*args, **kwargs)
def clean_speaker(self):
2013-03-18 12:34:47 +01:00
"""
Checks, that the user is not already on the list.
"""
2013-03-18 12:34:47 +01:00
speaker = self.cleaned_data['speaker']
if Speaker.objects.filter(person=speaker, item=self.item, begin_time=None).exists():
2013-03-18 12:34:47 +01:00
raise forms.ValidationError(ugettext_lazy(
'%s is already on the list of speakers.'
% unicode(speaker)))
2013-03-18 12:34:47 +01:00
return speaker