Browse Source

Refatora pesquisa de materia

pull/258/head
Eduardo Edson Batista Cordeiro Alves 9 years ago
parent
commit
c602c76db5
  1. 167
      materia/forms.py
  2. 216
      materia/views.py

167
materia/forms.py

@ -1,9 +1,9 @@
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Column, Fieldset, Layout, Submit
from crispy_forms.layout import Column, Fieldset, Layout, Submit, Button, HTML
from django import forms
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
import sapl
import crispy_layout_mixin
from crispy_layout_mixin import form_actions
from norma.models import LegislacaoCitada, TipoNormaJuridica
@ -15,14 +15,16 @@ from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria,
StatusTramitacao, TipoAutor, TipoMateriaLegislativa,
Tramitacao, UnidadeTramitacao)
EM_TRAMITACAO = [('', _('Tanto Faz')),
(True, 'Sim'),
(False, 'Não')]
ORDENACAO_MATERIAIS = [(1, 'Crescente'),
(2, 'Decrescente')]
def em_tramitacao():
return [('', 'Tanto Faz'),
(True, 'Sim'),
(False, 'Não')]
class ProposicaoForm(ModelForm):
tipo_materia = forms.ModelChoiceField(
@ -545,57 +547,12 @@ class AutoriaForm(ModelForm):
*args, **kwargs)
class MateriaLegislativaPesquisaForm(forms.Form):
autor = forms.ModelChoiceField(
label='Autor',
required=False,
queryset=Autor.objects.all().order_by('tipo'),
empty_label='Selecione',
)
# relatores são os parlamentares ativos?
relator = forms.ModelChoiceField(
label='Relator',
required=False,
queryset=Parlamentar.objects.all().order_by('nome_parlamentar'),
empty_label='Selecione',
)
tipo = forms.ModelChoiceField(
label=_('Tipo de Matéria'),
required=False,
queryset=TipoMateriaLegislativa.objects.all(),
empty_label='Selecione',
)
data_apresentacao = forms.DateField(label=u'Data de Apresentação',
input_formats=['%d/%m/%Y'],
required=False,
widget=forms.DateInput(
format='%d/%m/%Y',
attrs={'class': 'dateinput'}))
data_publicacao = forms.DateField(label=u'Data da Publicação',
input_formats=['%d/%m/%Y'],
required=False,
widget=forms.DateInput(
format='%d/%m/%Y',
attrs={'class': 'dateinput'}))
numero = forms.CharField(required=False, label=u'Número da Matéria')
numero_protocolo = forms.CharField(required=False, label=u'Núm. Protocolo')
ano = forms.CharField(required=False, label=u'Ano da Matéria')
assunto = forms.CharField(required=False, label=u'Assunto')
class MateriaLegislativaPesquisaForm(ModelForm):
ordem = forms.ChoiceField(required=False,
label='Ordenação',
choices=ORDENACAO_MATERIAIS,
widget=forms.Select(
attrs={'class': 'selector'}))
autor = forms.CharField(widget=forms.HiddenInput(), required=False)
localizacao = forms.ModelChoiceField(
label=_('Localização Atual'),
label='Localização Atual',
required=False,
queryset=UnidadeTramitacao.objects.all(),
empty_label='Selecione',
@ -608,36 +565,55 @@ class MateriaLegislativaPesquisaForm(forms.Form):
empty_label='Selecione',
)
tramitacao = forms.ChoiceField(required=False,
label='Tramitando',
choices=EM_TRAMITACAO,
widget=forms.Select(
attrs={'class': 'selector'}))
em_tramitacao = forms.ChoiceField(required=False,
label='Tramitando',
choices=em_tramitacao(),
widget=forms.Select(
attrs={'class': 'selector'}))
tipo_autor = forms.ModelChoiceField(
label=_('Tipo Autor'),
required=False,
queryset=TipoAutor.objects.all(),
empty_label='Selecione',
)
publicacao_inicial = forms.DateField(label=u'Data Publicação Inicial',
input_formats=['%d/%m/%Y'],
required=False,
widget=forms.DateInput(
format='%d/%m/%Y',
attrs={'class': 'dateinput'}))
partido_autor = forms.ModelChoiceField(
label=_('Partido (Autor)'),
required=False,
queryset=Partido.objects.all(),
empty_label='Selecione')
publicacao_final = forms.DateField(label=u'Data Publicação Final',
input_formats=['%d/%m/%Y'],
required=False,
widget=forms.DateInput(
format='%d/%m/%Y',
attrs={'class': 'dateinput'}))
local_origem_externa = forms.ModelChoiceField(
label=_('Localização de Origem'),
required=False,
queryset=Origem.objects.all(),
empty_label='Selecione')
apresentacao_inicial = forms.DateField(label=u'Data Apresentação Inicial',
input_formats=['%d/%m/%Y'],
required=False,
widget=forms.DateInput(
format='%d/%m/%Y',
attrs={'class': 'dateinput'}))
apresentacao_final = forms.DateField(label=u'Data Apresentação Final',
input_formats=['%d/%m/%Y'],
required=False,
widget=forms.DateInput(
format='%d/%m/%Y',
attrs={'class': 'dateinput'}))
# TODO: Verificar se esses campos estão corretos
# assunto? # -> usado 'ementa' em 'assunto'
# localizacao atual? #
# situacao? #
# tramitando? #
class Meta:
model = MateriaLegislativa
fields = ['tipo',
'numero',
'ano',
'numero_protocolo',
'apresentacao_inicial',
'apresentacao_final',
'publicacao_inicial',
'publicacao_final',
'autor',
'local_origem_externa',
'localizacao',
'em_tramitacao',
'situacao']
def __init__(self, *args, **kwargs):
@ -648,29 +624,34 @@ class MateriaLegislativaPesquisaForm(forms.Form):
('ano', 4),
('numero_protocolo', 4)])
row3 = crispy_layout_mixin.to_row(
[('data_apresentacao', 6),
('data_publicacao', 6)])
[('apresentacao_inicial', 6),
('apresentacao_final', 6)])
row4 = crispy_layout_mixin.to_row(
[('autor', 6),
('partido_autor', 6)])
[('publicacao_inicial', 6),
('publicacao_final', 6)])
row5 = crispy_layout_mixin.to_row(
[('tipo_autor', 6),
('relator', 6)])
[('autor', 0),
(Button('pesquisar',
'Pesquisar Autor',
css_class='btn btn-primary btn-sm'), 2),
(Button('limpar',
'limpar Autor',
css_class='btn btn-primary btn-sm'), 10)])
row6 = crispy_layout_mixin.to_row(
[('local_origem_externa', 6),
('localizacao', 6)])
row7 = crispy_layout_mixin.to_row(
[('tramitacao', 4),
('situacao', 4),
('ordem', 4)])
row8 = crispy_layout_mixin.to_row(
[('assunto', 12)])
[('em_tramitacao', 6),
('situacao', 6)])
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(_('Pesquisa Básica'),
row1, row2, row3, row4, row5, row6, row7, row8),
form_actions(save_label='Pesquisar')
row1, row2, row3, row4,
HTML(sapl.utils.autor_label),
HTML(sapl.utils.autor_modal),
row5, row6, row7,
form_actions(save_label='Pesquisar'))
)
super(MateriaLegislativaPesquisaForm, self).__init__(
*args, **kwargs)

216
materia/views.py

@ -1220,108 +1220,44 @@ class MateriaLegislativaPesquisaView(FormView):
def post(self, request, *args, **kwargs):
kwargs = {}
form = MateriaLegislativaPesquisaForm()
# TODO: Autor, Relator, Localização, Origem
form = MateriaLegislativaPesquisaForm(request.POST)
if request.POST['tipo']:
kwargs['tipo'] = request.POST['tipo']
if form.data['tipo']:
kwargs['tipo'] = form.data['tipo']
if request.POST['numero']:
try:
int(request.POST['numero'])
except ValueError:
mensagem = _("Insira um número inteiro em matéria!")
messages.add_message(request, messages.INFO, mensagem)
return self.render_to_response(
{'form': form})
else:
kwargs['numero'] = request.POST['numero']
if form.data['numero']:
kwargs['numero'] = form.data['numero']
if request.POST['ano']:
try:
int(request.POST['ano'])
except ValueError:
mensagem = _("Insira uma data válida em Ano da Matéria!")
messages.add_message(request, messages.INFO, mensagem)
return self.render_to_response(
{'form': form})
else:
kwargs['ano'] = request.POST['ano']
if form.data['ano']:
kwargs['ano'] = form.data['ano']
if request.POST['numero_protocolo']:
try:
int(request.POST['numero_protocolo'])
except ValueError:
mensagem = _("Insira um Número de Protocolo válido!")
messages.add_message(request, messages.INFO, mensagem)
return self.render_to_response(
{'form': form})
else:
kwargs['numero_protocolo'] = request.POST['numero_protocolo']
if request.POST['data_apresentacao']:
try:
datetime.strptime(
request.POST['data_apresentacao'],
'%d/%m/%Y').strftime('%Y-%m-%d')
except ValueError:
mensagem = _("Insira uma Data de Apresentação válida!")
messages.add_message(request, messages.INFO, mensagem)
return self.render_to_response(
{'form': form})
else:
kwargs['data_apresentacao'] = datetime.strptime(
request.POST['data_apresentacao'],
'%d/%m/%Y').strftime('%Y-%m-%d')
if form.data['numero_protocolo']:
kwargs['numero_protocolo'] = form.data['numero_protocolo']
if request.POST['data_publicacao']:
try:
datetime.strptime(
request.POST['data_publicacao'],
'%d/%m/%Y').strftime('%Y-%m-%d')
except ValueError:
mensagem = _("Insira uma Data de Publicação válida!")
messages.add_message(request, messages.INFO, mensagem)
return self.render_to_response(
{'form': form})
else:
kwargs['data_publicacao'] = datetime.strptime(
request.POST['data_publicacao'],
'%d/%m/%Y').strftime('%Y-%m-%d')
if (form.data['apresentacao_inicial'] and
form.data['apresentacao_final']):
kwargs['apresentacao_inicial'] = form.data['apresentacao_inicial']
kwargs['apresentacao_final'] = form.data['apresentacao_final']
if request.POST['tramitacao']:
kwargs['em_tramitacao'] = request.POST['tramitacao']
if (form.data['publicacao_inicial'] and
form.data['publicacao_final']):
kwargs['publicacao_inicial'] = form.data['publicacao_inicial']
kwargs['publicacao_final'] = form.data['publicacao_final']
# Pega "palavras-chaves" que podem ter na ementa, icontains NÃO é
# case-sensitive
if request.POST['assunto']:
kwargs['ementa__icontains'] = request.POST['assunto']
if form.data['local_origem_externa']:
kwargs['local_origem_externa'] = form.data['local_origem_externa']
if request.POST['autor']:
kwargs['autoria__autor__id'] = request.POST['autor']
if form.data['autor']:
kwargs['autor'] = form.data['autor']
if request.POST['relator']:
kwargs['relatoria__parlamentar__id'] = request.POST['relator']
if form.data['localizacao']:
kwargs['localizacao'] = form.data['localizacao']
if request.POST['localizacao']:
local = request.POST['localizacao']
kwargs['tramitacao__unidade_tramitacao_destino'] = local
if form.data['em_tramitacao']:
kwargs['em_tramitacao'] = form.data['em_tramitacao']
if request.POST['situacao']:
kwargs['tramitacao__status'] = request.POST['situacao']
if request.POST['tipo_autor']:
kwargs['autoria__autor__tipo'] = request.POST['tipo_autor']
if request.POST['partido_autor']:
kwargs['autoria__partido'] = request.POST['partido_autor']
if request.POST['ordem']:
kwargs['ordem'] = request.POST['ordem']
if request.POST['local_origem_externa']:
kwargs['local_origem_externa'] = request.POST[
'local_origem_externa']
if form.data['situacao']:
kwargs['situacao'] = form.data['situacao']
request.session['kwargs'] = kwargs
return redirect('pesquisar_materia_list')
@ -1336,57 +1272,53 @@ class PesquisaMateriaListView(ListView):
def get_queryset(self):
kwargs = self.request.session['kwargs']
ordem = int(kwargs.pop('ordem'))
if ordem == 1:
lista_materias = MateriaLegislativa.objects.filter(
**kwargs).order_by('ano', 'numero').distinct()
else:
lista_materias = MateriaLegislativa.objects.filter(
**kwargs).order_by('-ano', '-numero').distinct()
materias = []
# Garante que a pesquisa retornará a última tramitação
if (kwargs.get('tramitacao__unidade_tramitacao_destino') and
kwargs.get('tramitacao__status')):
local = int(kwargs['tramitacao__unidade_tramitacao_destino'])
status = int(kwargs['tramitacao__status'])
for m in lista_materias:
l = m.tramitacao_set.last().unidade_tramitacao_destino_id
s = m.tramitacao_set.last().status_id
if l == local and s == status:
materias.append(m)
return materias
if kwargs.get('tramitacao__unidade_tramitacao_destino'):
local = int(kwargs['tramitacao__unidade_tramitacao_destino'])
for m in lista_materias:
l = m.tramitacao_set.last().unidade_tramitacao_destino_id
if l == local:
materias.append(m)
return materias
if kwargs.get('tramitacao__status'):
status = int(kwargs['tramitacao__status'])
for m in lista_materias:
s = m.tramitacao_set.last().status_id
if s == status:
materias.append(m)
return materias
else:
return lista_materias
def get_context_data(self, **kwargs):
context = super(PesquisaMateriaListView, self).get_context_data(
**kwargs)
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
return context
materias = MateriaLegislativa.objects.all().order_by(
'-numero', '-ano')
if 'apresentacao_inicial' in kwargs:
inicial = datetime.strptime(
kwargs['apresentacao_inicial'],
'%d/%m/%Y').strftime('%Y-%m-%d')
final = datetime.strptime(
kwargs['apresentacao_final'],
'%d/%m/%Y').strftime('%Y-%m-%d')
materias = materias.filter(
data_apresentacao__range=(inicial, final))
if 'publicacao_inicial' in kwargs:
inicial = datetime.strptime(
kwargs['publicacao_inicial'],
'%d/%m/%Y').strftime('%Y-%m-%d')
final = datetime.strptime(
kwargs['publicacao_final'],
'%d/%m/%Y').strftime('%Y-%m-%d')
materias = materias.filter(
data_publicacao__range=(inicial, final))
if 'tipo' in kwargs:
materias = materias.filter(tipo_id=kwargs['tipo'])
if 'numero' in kwargs:
materias = materias.filter(numero=kwargs['numero'])
if 'ano' in kwargs:
materias = materias.filter(ano=kwargs['ano'])
if 'numero_protocolo' in kwargs:
materias = materias.filter(numero=kwargs['numero_protocolo'])
if 'em_tramitacao' in kwargs:
materias = materias.filter(em_tramitacao=kwargs['em_tramitacao'])
if 'local_origem_externa' in kwargs:
materias = materias.filter(
local_origem_externa=kwargs['local_origem_externa'])
# autor
# localizao atual
# situacao
return materias
class ProposicaoView(CreateView):

Loading…
Cancel
Save