mirror of https://github.com/interlegis/sapl.git
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.
514 lines
17 KiB
514 lines
17 KiB
from crispy_forms.helper import FormHelper
|
|
from crispy_forms.layout import HTML, Field, Fieldset, Layout, Submit
|
|
from django import forms
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
from django.forms import ModelForm
|
|
from django.utils.safestring import mark_safe
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
import crispy_layout_mixin
|
|
from crispy_layout_mixin import form_actions
|
|
from materia.models import TipoMateriaLegislativa
|
|
from sapl.utils import RANGE_ANOS
|
|
|
|
from .models import (Autor, DocumentoAcessorioAdministrativo,
|
|
DocumentoAdministrativo, Protocolo,
|
|
TipoDocumentoAdministrativo, TramitacaoAdministrativo)
|
|
|
|
TIPOS_PROTOCOLO = [('0', 'Enviado'), ('1', 'Recebido')]
|
|
|
|
NATUREZA_PROCESSO = [('0', 'Administrativo'),
|
|
('1', 'Legislativo'),
|
|
('', 'Ambos')]
|
|
|
|
|
|
class HorizontalRadioRenderer(forms.RadioSelect.renderer):
|
|
|
|
def render(self):
|
|
return mark_safe(u' '.join([u'%s ' % w for w in self]))
|
|
|
|
|
|
class ProtocoloForm(forms.Form):
|
|
|
|
tipo_protocolo = forms.ChoiceField(required=False,
|
|
label=_('Tipo de Protocolo'),
|
|
choices=TIPOS_PROTOCOLO,
|
|
widget=forms.Select(
|
|
attrs={'class': 'selector'}))
|
|
|
|
numero_protocolo = forms.CharField(
|
|
label=_('Número de Protocolo'), required=False)
|
|
ano = forms.ChoiceField(required=False,
|
|
label='Ano',
|
|
choices=RANGE_ANOS,
|
|
widget=forms.Select(
|
|
attrs={'class': 'selector'}))
|
|
|
|
inicial = forms.DateField(label=_('Data Inicial'),
|
|
required=False,
|
|
widget=forms.TextInput(
|
|
attrs={'class': 'dateinput'}))
|
|
|
|
final = forms.DateField(label=_('Data Final'), required=False,
|
|
widget=forms.TextInput(
|
|
attrs={'class': 'dateinput'}))
|
|
|
|
natureza_processo = forms.ChoiceField(required=False,
|
|
label=_('Natureza Processo'),
|
|
choices=NATUREZA_PROCESSO,
|
|
# widget=forms.RadioSelect(
|
|
# renderer=HorizontalRadioRenderer)
|
|
|
|
)
|
|
|
|
tipo_documento = forms.ModelChoiceField(
|
|
label=_('Tipo de Documento'),
|
|
required=False,
|
|
queryset=TipoDocumentoAdministrativo.objects.all(),
|
|
empty_label='Selecione',
|
|
)
|
|
|
|
interessado = forms.CharField(label='Interessado', required=False)
|
|
|
|
tipo_materia = forms.ModelChoiceField(
|
|
label=_('Tipo de Matéria'),
|
|
required=False,
|
|
queryset=TipoMateriaLegislativa.objects.all(),
|
|
empty_label='Selecione',
|
|
)
|
|
|
|
autor = forms.ModelChoiceField(
|
|
label='Autor',
|
|
required=False,
|
|
queryset=Autor.objects.all().order_by('tipo'),
|
|
empty_label='Selecione',
|
|
)
|
|
|
|
assunto = forms.CharField(label='Assunto', required=False)
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
row1 = crispy_layout_mixin.to_row(
|
|
[('numero_protocolo', 6),
|
|
('ano', 6)])
|
|
|
|
row2 = crispy_layout_mixin.to_row(
|
|
[('inicial', 6),
|
|
('final', 6)])
|
|
|
|
row3 = crispy_layout_mixin.to_row(
|
|
[('tipo_documento', 4),
|
|
('tipo_protocolo', 4),
|
|
('tipo_materia', 4)])
|
|
|
|
row4 = crispy_layout_mixin.to_row(
|
|
[('interessado', 4),
|
|
('autor', 4),
|
|
('assunto', 4)])
|
|
|
|
row5 = crispy_layout_mixin.to_row(
|
|
[('natureza_processo', 12)])
|
|
|
|
self.helper = FormHelper()
|
|
self.helper.layout = Layout(row1, row2,
|
|
row3, row4,
|
|
row5, form_actions(save_label='Pesquisar'))
|
|
super(ProtocoloForm, self).__init__(
|
|
*args, **kwargs)
|
|
|
|
|
|
class AnularProcoloAdmForm(ModelForm):
|
|
|
|
numero = forms.CharField(required=True,
|
|
label=Protocolo._meta.
|
|
get_field('numero').verbose_name
|
|
)
|
|
ano = forms.ChoiceField(required=True,
|
|
label=Protocolo._meta.
|
|
get_field('ano').verbose_name,
|
|
choices=RANGE_ANOS,
|
|
widget=forms.Select(attrs={'class': 'selector'}))
|
|
justificativa_anulacao = forms.CharField(
|
|
required=True,
|
|
label=Protocolo._meta.get_field('justificativa_anulacao').verbose_name,
|
|
widget=forms.Textarea)
|
|
|
|
def clean(self):
|
|
cleaned_data = super(AnularProcoloAdmForm, self).clean()
|
|
|
|
numero = cleaned_data.get("numero")
|
|
ano = cleaned_data.get("ano")
|
|
|
|
# se não inserido numero ou ano não prosseguir
|
|
# (e ele vai falhar pq numero e ano são obrigatórios)
|
|
if not numero or not ano:
|
|
return
|
|
|
|
try:
|
|
protocolo = Protocolo.objects.get(numero=numero, ano=ano)
|
|
|
|
if protocolo.anulado:
|
|
raise forms.ValidationError(
|
|
_("Protocolo %s/%s já encontra-se anulado")
|
|
% (numero, ano))
|
|
except ObjectDoesNotExist:
|
|
raise forms.ValidationError(
|
|
_("Protocolo %s/%s não existe" % (numero, ano)))
|
|
|
|
class Meta:
|
|
model = Protocolo
|
|
fields = ['numero',
|
|
'ano',
|
|
'justificativa_anulacao',
|
|
'anulado',
|
|
'user_anulacao',
|
|
'ip_anulacao',
|
|
]
|
|
widgets = {'anulado': forms.HiddenInput(),
|
|
'user_anulacao': forms.HiddenInput(),
|
|
'ip_anulacao': forms.HiddenInput(),
|
|
}
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
row1 = crispy_layout_mixin.to_row(
|
|
[('numero', 6),
|
|
('ano', 6)])
|
|
row2 = crispy_layout_mixin.to_row(
|
|
[('justificativa_anulacao', 12)])
|
|
|
|
self.helper = FormHelper()
|
|
self.helper.layout = Layout(
|
|
Fieldset(_('Identificação do Protocolo'),
|
|
row1,
|
|
row2,
|
|
HTML(" "),
|
|
form_actions(save_label='Anular')
|
|
)
|
|
)
|
|
super(AnularProcoloAdmForm, self).__init__(
|
|
*args, **kwargs)
|
|
|
|
|
|
class ProtocoloDocumentForm(ModelForm):
|
|
|
|
NUMERACAO_CHOICES = [('1', _('Sequencial por Ano')),
|
|
('2', _('Sequencial Único'))]
|
|
|
|
numeracao = forms.ChoiceField(required=True,
|
|
choices=NUMERACAO_CHOICES,
|
|
widget=forms.RadioSelect(
|
|
renderer=HorizontalRadioRenderer),
|
|
label='')
|
|
|
|
tipo_protocolo = forms.ChoiceField(required=True,
|
|
label=_('Tipo de Protocolo'),
|
|
choices=TIPOS_PROTOCOLO[1:],
|
|
widget=forms.RadioSelect(
|
|
renderer=HorizontalRadioRenderer))
|
|
|
|
tipo_documento = forms.ModelChoiceField(
|
|
label=_('Tipo de Documento'),
|
|
required=False,
|
|
queryset=TipoDocumentoAdministrativo.objects.all(),
|
|
empty_label='Selecione',
|
|
)
|
|
|
|
num_paginas = forms.CharField(label=_('Núm. Páginas'), required=True)
|
|
assunto = forms.CharField(
|
|
widget=forms.Textarea, label='Assunto', required=True)
|
|
|
|
interessado = forms.CharField(required=True,
|
|
label='Interessado')
|
|
|
|
observacao = forms.CharField(required=True,
|
|
widget=forms.Textarea, label='Observação')
|
|
|
|
class Meta:
|
|
model = Protocolo
|
|
fields = ['numeracao',
|
|
'tipo_protocolo',
|
|
'tipo_documento',
|
|
'num_paginas',
|
|
'assunto',
|
|
'interessado',
|
|
'observacao',
|
|
]
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
row1 = crispy_layout_mixin.to_row(
|
|
[('numeracao', 12)])
|
|
row2 = crispy_layout_mixin.to_row(
|
|
[('tipo_protocolo', 12)])
|
|
row3 = crispy_layout_mixin.to_row(
|
|
[('tipo_documento', 6),
|
|
('num_paginas', 6)])
|
|
row4 = crispy_layout_mixin.to_row(
|
|
[('assunto', 12)])
|
|
row5 = crispy_layout_mixin.to_row(
|
|
[('interessado', 12)])
|
|
row6 = crispy_layout_mixin.to_row(
|
|
[('observacao', 12)])
|
|
|
|
self.helper = FormHelper()
|
|
self.helper.layout = Layout(
|
|
Fieldset(_('Protocolo - Opção de Numeração'), row1),
|
|
Fieldset(_('Identificação de Documento'),
|
|
row2,
|
|
row3,
|
|
row4,
|
|
row5,
|
|
row6,
|
|
HTML(" "),
|
|
form_actions(save_label=_('Protocolar Documento'))
|
|
)
|
|
)
|
|
super(ProtocoloDocumentForm, self).__init__(
|
|
*args, **kwargs)
|
|
|
|
|
|
class ProtocoloMateriaForm(ModelForm):
|
|
|
|
NUMERACAO_CHOICES = [('1', _('Sequencial por Ano')),
|
|
('2', _('Sequencial Único'))]
|
|
|
|
numeracao = forms.ChoiceField(required=True,
|
|
choices=NUMERACAO_CHOICES,
|
|
widget=forms.RadioSelect(
|
|
renderer=HorizontalRadioRenderer),
|
|
label='')
|
|
|
|
tipo_protocolo = forms.ChoiceField(required=True,
|
|
label=_('Tipo de Protocolo'),
|
|
choices=TIPOS_PROTOCOLO[1:],
|
|
widget=forms.RadioSelect(
|
|
renderer=HorizontalRadioRenderer))
|
|
|
|
tipo_materia = forms.ModelChoiceField(
|
|
label=_('Tipo de Matéria'),
|
|
required=False,
|
|
queryset=TipoMateriaLegislativa.objects.all(),
|
|
empty_label='Selecione',
|
|
)
|
|
|
|
num_paginas = forms.CharField(label=_('Núm. Páginas'), required=True)
|
|
ementa = forms.CharField(
|
|
widget=forms.Textarea, label='Ementa', required=True)
|
|
|
|
autor = forms.ModelChoiceField(
|
|
label='Autor',
|
|
required=False,
|
|
queryset=Autor.objects.all().order_by('tipo'),
|
|
empty_label='Selecione',
|
|
)
|
|
|
|
observacao = forms.CharField(required=True,
|
|
widget=forms.Textarea,
|
|
label='Observação')
|
|
|
|
class Meta:
|
|
model = Protocolo
|
|
fields = ['numeracao',
|
|
'tipo_protocolo',
|
|
'tipo_materia',
|
|
'num_paginas',
|
|
'ementa',
|
|
'autor',
|
|
'observacao',
|
|
]
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
row1 = crispy_layout_mixin.to_row(
|
|
[('numeracao', 12)])
|
|
row2 = crispy_layout_mixin.to_row(
|
|
[('tipo_materia', 4),
|
|
('tipo_protocolo', 4),
|
|
('num_paginas', 4)])
|
|
row3 = crispy_layout_mixin.to_row(
|
|
[('ementa', 12)])
|
|
row4 = crispy_layout_mixin.to_row(
|
|
[('autor', 12)])
|
|
row5 = crispy_layout_mixin.to_row(
|
|
[('observacao', 12)])
|
|
|
|
self.helper = FormHelper()
|
|
self.helper.layout = Layout(
|
|
Fieldset(_('Protocolo - Opção de Numeração'), row1),
|
|
Fieldset(_('Identificação da Matéria'),
|
|
row2,
|
|
row3,
|
|
row4,
|
|
row5,
|
|
HTML(" "),
|
|
form_actions(save_label=_('Protocolar Matéria'))
|
|
)
|
|
)
|
|
|
|
super(ProtocoloMateriaForm, self).__init__(
|
|
*args, **kwargs)
|
|
|
|
|
|
class ProposicaoSimpleForm(forms.Form):
|
|
|
|
tipo = forms.CharField(label='Tipo',
|
|
widget=forms.TextInput(
|
|
attrs={'readonly': 'readonly'}))
|
|
materia = forms.CharField(label='Matéria',
|
|
widget=forms.TextInput(
|
|
attrs={'readonly': 'readonly'}))
|
|
data_envio = forms.DateField(label=_('Data Envio'),
|
|
widget=forms.DateInput(
|
|
format='%d/%m/%Y',
|
|
attrs={'readonly': 'readonly'}))
|
|
data_recebimento = forms.DateField(label=_('Data Recebimento'),
|
|
widget=forms.DateInput(
|
|
format='%d/%m/%Y',
|
|
attrs={'readonly': 'readonly'}))
|
|
|
|
descricao = forms.CharField(label='Descrição',
|
|
widget=forms.TextInput(
|
|
attrs={'readonly': 'readonly'}))
|
|
|
|
numero_proposicao = forms.CharField(label='Número',
|
|
widget=forms.TextInput(
|
|
attrs={'readonly': 'readonly'}))
|
|
# ano = forms.CharField(label='Ano',
|
|
# widget = forms.TextInput(
|
|
# attrs={'readonly':'readonly'}))
|
|
|
|
|
|
class DocumentoAcessorioAdministrativoForm(ModelForm):
|
|
|
|
class Meta:
|
|
model = DocumentoAcessorioAdministrativo
|
|
fields = ['tipo',
|
|
'nome',
|
|
'data',
|
|
'autor',
|
|
'arquivo',
|
|
'assunto']
|
|
|
|
widgets = {
|
|
'data': forms.DateInput(format='%d/%m/%Y')
|
|
}
|
|
|
|
def __init__(self, excluir=False, *args, **kwargs):
|
|
|
|
row1 = crispy_layout_mixin.to_row(
|
|
[('tipo', 4),
|
|
('nome', 4),
|
|
('data', 4)])
|
|
row2 = crispy_layout_mixin.to_row(
|
|
[('autor', 12)])
|
|
row3 = crispy_layout_mixin.to_row(
|
|
[('arquivo', 12)])
|
|
row4 = crispy_layout_mixin.to_row(
|
|
[('assunto', 12)])
|
|
|
|
more = []
|
|
if excluir:
|
|
more = [Submit('Excluir', 'Excluir')]
|
|
|
|
self.helper = FormHelper()
|
|
self.helper.layout = Layout(
|
|
Fieldset(
|
|
_('Incluir Documento Acessório'),
|
|
row1, row2, row3, row4,
|
|
form_actions(more=more)
|
|
)
|
|
)
|
|
super(DocumentoAcessorioAdministrativoForm, self).__init__(
|
|
*args, **kwargs)
|
|
|
|
|
|
class TramitacaoAdmForm(ModelForm):
|
|
|
|
class Meta:
|
|
model = TramitacaoAdministrativo
|
|
fields = ['data_tramitacao',
|
|
'unidade_tramitacao_local',
|
|
'status',
|
|
'unidade_tramitacao_destino',
|
|
'data_encaminhamento',
|
|
'data_fim_prazo',
|
|
'texto',
|
|
'documento',
|
|
]
|
|
|
|
widgets = {
|
|
'data_tramitacao': forms.DateInput(format='%d/%m/%Y'),
|
|
'data_encaminhamento': forms.DateInput(format='%d/%m/%Y'),
|
|
'data_fim_prazo': forms.DateInput(format='%d/%m/%Y'),
|
|
}
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.helper = FormHelper()
|
|
self.helper.layout = Layout(
|
|
Fieldset(_('Incluir Tramitação'),
|
|
'data_tramitacao',
|
|
'unidade_tramitacao_local',
|
|
'status',
|
|
'unidade_tramitacao_destino',
|
|
'data_encaminhamento',
|
|
'data_fim_prazo',
|
|
'texto'),
|
|
Field('documento', type="hidden"),
|
|
form_actions()
|
|
)
|
|
super(TramitacaoAdmForm, self).__init__(
|
|
*args, **kwargs)
|
|
|
|
|
|
class DocumentoAdministrativoForm(ModelForm):
|
|
|
|
class Meta:
|
|
model = DocumentoAdministrativo
|
|
fields = ['tipo',
|
|
'numero',
|
|
'ano',
|
|
'data',
|
|
'numero_protocolo',
|
|
'assunto',
|
|
'interessado',
|
|
'tramitacao',
|
|
'dias_prazo',
|
|
'data_fim_prazo',
|
|
'observacao',
|
|
'texto_integral',
|
|
]
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
row1 = crispy_layout_mixin.to_row(
|
|
[('tipo', 4), ('numero', 4), ('ano', 4)])
|
|
|
|
row2 = crispy_layout_mixin.to_row(
|
|
[('data', 6), ('numero_protocolo', 6)])
|
|
|
|
row3 = crispy_layout_mixin.to_row(
|
|
[('assunto', 12)])
|
|
|
|
row4 = crispy_layout_mixin.to_row(
|
|
[('interessado', 9), ('tramitacao', 3)])
|
|
|
|
row5 = crispy_layout_mixin.to_row(
|
|
[('texto_integral', 12)])
|
|
|
|
row6 = crispy_layout_mixin.to_row(
|
|
[('dias_prazo', 6), ('data_fim_prazo', 6)])
|
|
|
|
row7 = crispy_layout_mixin.to_row(
|
|
[('observacao', 12)])
|
|
|
|
self.helper = FormHelper()
|
|
self.helper.layout = Layout(
|
|
Fieldset(_('Identificação Básica'),
|
|
row1, row2, row3, row4, row5),
|
|
Fieldset(_('Outras Informações'),
|
|
row6, row7),
|
|
form_actions(more=[Submit('Excluir', 'Excluir')]),
|
|
)
|
|
super(DocumentoAdministrativoForm, self).__init__(
|
|
*args, **kwargs)
|
|
|