Sistema de Apoio ao Processo Legislativo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

296 lines
9.3 KiB

import sys
from crispy_forms.helper import FormHelper
from crispy_forms_foundation.layout import (HTML, Column, Div, Fieldset,
Layout, Row)
9 years ago
from crispy_forms_foundation.layout.buttons import Button
from crispy_forms_foundation.layout.fields import Field
from django import forms
from django.core.exceptions import NON_FIELD_ERRORS
from django.forms.models import ModelForm
from django.utils.translation import ugettext_lazy as _
9 years ago
from compilacao.models import (Dispositivo, Nota, TextoArticulado, TipoNota,
TipoTextoArticulado, TipoVide, Vide,
PARTICIPACAO_SOCIAL_CHOICES)
from compilacao.utils import to_column, to_row, FormLayout
class UpLoadImportFileForm(forms.Form):
import_file = forms.FileField(
required=True,
label=_('Arquivo formato ODF para Importanção'))
nota_error_messages = {
'required': _('Este campo é obrigatório'),
'invalid': _('URL inválida.')
}
ta_error_messages = {
'required': _('Este campo é obrigatório'),
}
class TaForm(ModelForm):
tipo_ta = forms.ModelChoiceField(
label=_('Tipo do Texto Articulado'),
queryset=TipoTextoArticulado.objects.all(),
required=True,
empty_label=None)
numero = forms.IntegerField(label=_('Número'), required=True)
ano = forms.IntegerField(label=_('Ano'), required=True)
data = forms.DateField(
label=_('Data'),
input_formats=['%d/%m/%Y'],
required=True,
widget=forms.DateInput(
format='%d/%m/%Y'),
error_messages=ta_error_messages
)
ementa = forms.CharField(
label='',
widget=forms.Textarea,
error_messages=ta_error_messages)
observacao = forms.CharField(
label='',
widget=forms.Textarea,
error_messages=ta_error_messages,
required=False)
participacao_social = forms.NullBooleanField(
label=_('Participação Social'),
widget=forms.Select(choices=PARTICIPACAO_SOCIAL_CHOICES),
required=False)
class Meta:
model = TextoArticulado
fields = ['tipo_ta',
'numero',
'ano',
'data',
'ementa',
'observacao',
'participacao_social',
]
def __init__(self, *args, **kwargs):
row1 = to_row([
('tipo_ta', 3),
('numero', 2),
('ano', 2),
('data', 2),
('participacao_social', 3),
])
self.helper = FormHelper()
self.helper.layout = FormLayout(
Fieldset(_('Identificação Básica'), row1, css_class="large-12"),
Fieldset(_('Ementa'), Column('ementa'), css_class="large-12"),
Fieldset(
_('Observações'), Column('observacao'), css_class="large-12"),
)
super(TaForm, self).__init__(*args, **kwargs)
class NotaForm(ModelForm):
NPRIV = 1
NINST = 2
NPUBL = 3
PUBLICIDADE_CHOICES = (
# Only the owner of the note has visibility.
(NPRIV, _('Nota Privada')),
# All authenticated users have visibility.
(NINST, _('Nota Institucional')),
# All users have visibility.
(NPUBL, _('Nota Pública')),
)
titulo = forms.CharField(label=' ', required=False)
texto = forms.CharField(
label='',
widget=forms.Textarea,
error_messages=nota_error_messages)
url_externa = forms.URLField(
label='',
required=False,
error_messages=nota_error_messages)
publicidade = forms.ChoiceField(
required=True,
label=_('Publicidade'),
choices=PUBLICIDADE_CHOICES,
widget=forms.Select(attrs={'class': 'selector'}))
tipo = forms.ModelChoiceField(
required=False,
label=_('Tipo da Nota'),
queryset=TipoNota.objects.all(),
empty_label=None)
publicacao = forms.DateField(
label=_('Publicação'),
input_formats=['%d/%m/%Y'],
required=True,
widget=forms.DateInput(
format='%d/%m/%Y'),
error_messages=nota_error_messages
)
efetividade = forms.DateField(
label=_('Efetividade'),
input_formats=['%d/%m/%Y'],
required=True,
widget=forms.DateInput(
format='%d/%m/%Y'),
error_messages=nota_error_messages)
dispositivo = forms.ModelChoiceField(queryset=Dispositivo.objects.all(),
widget=forms.HiddenInput())
pk = forms.IntegerField(widget=forms.HiddenInput(),
required=False)
class Meta:
model = Nota
fields = ['titulo',
'texto',
'url_externa',
'publicidade',
'publicacao',
'efetividade',
'tipo',
'dispositivo',
'pk'
]
def __init__(self, *args, **kwargs):
row1 = to_row([
('tipo', 4),
])
row1.append(
Column(
Field(
'titulo',
placeholder=_('Título da Nota (opcional)')
),
css_class='columns large-8'))
row3 = to_row([
('publicidade', 3),
('publicacao', 3),
('efetividade', 3),
(Button('submit', 'Salvar',
css_class='button primary radius'), 3)
])
self.helper = FormHelper()
self.helper.layout = Layout(
Div(HTML(_('Notas')), css_class='title_form'),
row1,
Field('texto', placeholder=_('Adicionar Nota')),
Field('url_externa', placeholder=_('URL Externa (opcional)')),
row3
)
super(NotaForm, self).__init__(*args, **kwargs)
class VideForm(ModelForm):
dispositivo_base = forms.ModelChoiceField(
queryset=Dispositivo.objects.all(),
widget=forms.HiddenInput())
dispositivo_ref = forms.ModelChoiceField(
queryset=Dispositivo.objects.all(),
widget=forms.HiddenInput())
tipo_ta = forms.ModelChoiceField(
label='Tipo do Texto Articulado',
queryset=TipoTextoArticulado.objects.all(),
required=False)
num_ta = forms.IntegerField(
label=_('Núm Texto Articulado'), required=False)
ano_ta = forms.IntegerField(
label=_('Ano Texto Articulado'), required=False)
texto = forms.CharField(
label='',
widget=forms.Textarea,
required=False)
tipo = forms.ModelChoiceField(
label=_('Tipo do Vide'),
queryset=TipoVide.objects.all(),
required=True,
error_messages=nota_error_messages)
busca_dispositivo = forms.CharField(
label=_('Buscar Dispositivo a Referenciar'),
required=False)
pk = forms.IntegerField(widget=forms.HiddenInput(),
required=False)
class Meta:
model = Vide
fields = ['dispositivo_base',
'dispositivo_ref',
'texto',
'tipo',
'pk']
error_messages = {
NON_FIELD_ERRORS: {
'unique_together':
"Ja existe um Vide deste tipo para o Dispositivo Referido ",
}
}
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.layout = Layout(
Div(HTML(_('Vides')), css_class='title_form'),
Row(
to_column((
Div(
Div(to_column((Field(
'tipo',
placeholder=_('Selecione um Tipo de Vide')), 12))),
Div(to_column((
Field(
'texto',
placeholder=_(
'Texto Adicional ao Vide')), 12))),
Div(to_column((
Button(
'submit',
'Salvar',
css_class='button primary radius'), 12)))
), 4)),
to_column((
Div(
Div(to_column(('tipo_ta', 6))),
Div(to_column(('num_ta', 3)),
to_column(('ano_ta', 3))),
Div(to_column(
(Field(
'busca_dispositivo',
placeholder=_('Digite palavras, letras, '
'números ou algo'
' que estejam '
'no rótulo ou no texto.')), 10)),
to_column((
Button(
'buscar',
'Buscar',
css_class='button btn-busca radius'), 2))
),
to_column(
(Div(css_class='container-busca'), 12))
), 8)
)
)
)
super(VideForm, self).__init__(*args, **kwargs)