2011-07-31 10:46:29 +02:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
openslides . application . forms
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Forms for the application app .
: copyright : 2011 by the OpenSlides team , see AUTHORS .
: license : GNU GPL , see LICENSE for more details .
"""
2012-03-16 14:31:59 +01:00
from django . forms import ModelForm , Form , CharField , Textarea , TextInput , ModelMultipleChoiceField , ModelChoiceField , BooleanField , FileField , FileInput , IntegerField , ChoiceField , Select
2011-11-01 06:47:10 +01:00
from django . contrib . auth . models import User
2011-07-31 10:46:29 +02:00
from django . utils . translation import ugettext as _
2012-02-20 18:44:02 +01:00
from utils . forms import CssClassMixin
from application . models import Application
2011-07-31 10:46:29 +02:00
2011-11-01 06:47:10 +01:00
class UserModelChoiceField ( ModelChoiceField ) :
"""
Extend ModelChoiceField for users so that the choices are
listed as ' first_name last_name ' instead of just ' username ' .
"""
def label_from_instance ( self , obj ) :
return obj . get_full_name ( )
2012-03-16 14:31:59 +01:00
2011-11-01 06:47:10 +01:00
class UserModelMultipleChoiceField ( ModelMultipleChoiceField ) :
"""
Extend ModelMultipleChoiceField for users so that the choices are
listed as ' first_name last_name ' instead of just ' username ' .
"""
def label_from_instance ( self , obj ) :
return obj . get_full_name ( )
2012-02-20 18:44:02 +01:00
class ApplicationForm ( Form , CssClassMixin ) :
2011-07-31 10:46:29 +02:00
title = CharField ( widget = TextInput ( ) , label = _ ( " Title " ) )
text = CharField ( widget = Textarea ( ) , label = _ ( " Text " ) )
reason = CharField ( widget = Textarea ( ) , required = False , label = _ ( " Reason " ) )
2011-11-09 22:53:10 +01:00
trivial_change = BooleanField ( required = False , label = _ ( " Trivial change " ) , help_text = _ ( " Trivial changes don ' t create a new version. " ) )
2011-07-31 10:46:29 +02:00
2012-03-16 14:31:59 +01:00
2012-02-20 18:44:02 +01:00
class ApplicationManagerForm ( ModelForm , CssClassMixin ) :
2011-11-01 06:47:10 +01:00
users = User . objects . all ( ) . exclude ( profile = None ) . order_by ( " first_name " )
submitter = UserModelChoiceField ( queryset = users , label = _ ( " Submitter " ) )
2011-11-01 14:35:58 +01:00
supporter = UserModelMultipleChoiceField ( queryset = users , required = False , label = _ ( " Supporters " ) )
2011-11-01 06:47:10 +01:00
2011-07-31 10:46:29 +02:00
class Meta :
model = Application
exclude = ( ' number ' , ' status ' , ' permitted ' , ' log ' )
2011-11-09 22:53:10 +01:00
2012-03-16 14:31:59 +01:00
2012-02-20 18:44:02 +01:00
class ApplicationImportForm ( Form , CssClassMixin ) :
2011-11-09 22:53:10 +01:00
csvfile = FileField ( widget = FileInput ( attrs = { ' size ' : ' 50 ' } ) , label = _ ( " CSV File " ) )
2012-04-13 21:55:13 +02:00
import_permitted = BooleanField ( required = False , label = _ ( " Import applications with status \" permitted \" " ) , help_text = _ ( " Set the initial status for each application to \" permitted \" " ) )
2012-03-16 14:31:59 +01:00
2012-04-17 17:35:50 +02:00
2012-03-16 14:31:59 +01:00
class ConfigForm ( Form , CssClassMixin ) :
application_min_supporters = IntegerField (
widget = TextInput ( attrs = { ' class ' : ' small-input ' } ) ,
label = _ ( " Number of (minimum) required supporters for a application " ) ,
initial = 4 ,
min_value = 0 ,
max_value = 8 ,
)
application_preamble = CharField (
widget = TextInput ( ) ,
required = False ,
label = _ ( " Application preamble " )
)
application_pdf_ballot_papers_selection = ChoiceField (
widget = Select ( ) ,
required = False ,
label = _ ( " Number of ballot papers (selection) " ) ,
choices = [
( " 1 " , _ ( " Number of all delegates " ) ) ,
( " 2 " , _ ( " Number of all participants " ) ) ,
( " 0 " , _ ( " Use the following custum number " ) ) ,
]
)
application_pdf_ballot_papers_number = IntegerField (
widget = TextInput ( attrs = { ' class ' : ' small-input ' } ) ,
required = False ,
min_value = 1 ,
label = _ ( " Custom number of ballot papers " )
)
application_pdf_title = CharField (
widget = TextInput ( ) ,
required = False ,
label = _ ( " Title for PDF document (all applications) " )
)
application_pdf_preamble = CharField (
widget = Textarea ( ) ,
required = False ,
label = _ ( " Preamble text for PDF document (all applications) " )
)