From 5c161e8d01e67544fe1a0d4750f267e5ba9796f6 Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 19 Apr 2016 13:05:43 -0300 Subject: [PATCH] Comeca a refatoracao --- protocoloadm/forms.py | 234 +++++++++++++++++++++++++++--------------- protocoloadm/views.py | 6 -- 2 files changed, 154 insertions(+), 86 deletions(-) diff --git a/protocoloadm/forms.py b/protocoloadm/forms.py index 256e06788..dbaecf63f 100644 --- a/protocoloadm/forms.py +++ b/protocoloadm/forms.py @@ -5,11 +5,14 @@ from crispy_forms.helper import FormHelper from crispy_forms.layout import HTML, Button, Field, Fieldset, Layout, Submit from django import forms from django.core.exceptions import ObjectDoesNotExist +from django.db import models from django.forms import ModelForm from django.utils.translation import ugettext_lazy as _ import crispy_layout_mixin import sapl +import django_filters + from crispy_layout_mixin import form_actions from materia.models import Autor, TipoMateriaLegislativa from sapl.utils import RANGE_ANOS @@ -25,108 +28,179 @@ NATUREZA_PROCESSO = [('0', 'Administrativo'), ('', 'Ambos')] -def get_range_anos(): - return [('', 'Selecione')] \ - + [(year, year) for year in range(date.today().year, 1960, -1)] +ANO_CHOICES = [('', '---------')] + RANGE_ANOS -class ProtocoloForm(forms.Form): +# class ProtocoloForm(forms.Form): - YEARS = get_range_anos() +# YEARS = get_range_anos() - tipo_protocolo = forms.ChoiceField(required=False, - label='Tipo de Protocolo', - choices=TIPOS_PROTOCOLO, - widget=forms.Select( - attrs={'class': 'selector'})) +# 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) +# numero_protocolo = forms.CharField( +# label='Número de Protocolo', required=False) - ano = forms.ChoiceField(required=False, - label='Ano', - choices=YEARS, - widget=forms.Select( - attrs={'class': 'selector'})) +# ano = forms.ChoiceField(required=False, +# label='Ano', +# choices=YEARS, +# widget=forms.Select( +# attrs={'class': 'selector'})) - inicial = forms.DateField(label='Data Inicial', - required=False, - widget=forms.TextInput( - attrs={'class': 'dateinput'})) +# 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'})) +# final = forms.DateField(label='Data Final', required=False, +# widget=forms.TextInput( +# attrs={'class': 'dateinput'})) - natureza_processo = forms.ChoiceField(required=False, - label='Natureza Processo', - choices=[ - ('0', 'Administrativo'), - ('1', 'Legislativo'), - ('', 'Ambos')]) +# natureza_processo = forms.ChoiceField(required=False, +# label='Natureza Processo', +# choices=[ +# ('0', 'Administrativo'), +# ('1', 'Legislativo'), +# ('', 'Ambos')]) - tipo_documento = forms.ModelChoiceField( - label='Tipo de Documento', - required=False, - queryset=TipoDocumentoAdministrativo.objects.all(), - empty_label='Selecione', - ) +# tipo_documento = forms.ModelChoiceField( +# label='Tipo de Documento', +# required=False, +# queryset=TipoDocumentoAdministrativo.objects.all(), +# empty_label='Selecione', +# ) - interessado = forms.CharField(label='Interessado', required=False) +# 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', - ) +# tipo_materia = forms.ModelChoiceField( +# label='Tipo de Matéria', +# required=False, +# queryset=TipoMateriaLegislativa.objects.all(), +# empty_label='Selecione', +# ) - autor = forms.CharField(widget=forms.HiddenInput(), required=False) +# autor = forms.CharField(widget=forms.HiddenInput(), required=False) - assunto = forms.CharField(label='Assunto', required=False) +# assunto = forms.CharField(label='Assunto', required=False) - def __init__(self, *args, **kwargs): +# def __init__(self, *args, **kwargs): - row1 = crispy_layout_mixin.to_row( - [('numero_protocolo', 6), - ('ano', 6)]) +# super(ProtocoloForm, self).__init__( +# *args, **kwargs) - 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)]) +# Importar essa classe de materias.views quando for feito o Merge do branch 217 +class RangeWidgetOverride(forms.MultiWidget): - row4 = crispy_layout_mixin.to_row( - [('interessado', 6), - ('assunto', 6)]) + def __init__(self, attrs=None): + widgets = (forms.DateInput(format='%d/%m/%Y', + attrs={'class': 'dateinput', + 'placeholder': 'Inicial'}), + forms.DateInput(format='%d/%m/%Y', + attrs={'class': 'dateinput', + 'placeholder': 'Final'})) + super(RangeWidgetOverride, self).__init__(widgets, attrs) - row5 = crispy_layout_mixin.to_row( - [('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)]) + def decompress(self, value): + if value: + return [value.start, value.stop] + return [None, None] - row6 = crispy_layout_mixin.to_row( - [('natureza_processo', 12)]) + def format_output(self, rendered_widgets): + return ''.join(rendered_widgets) - self.helper = FormHelper() - self.helper.layout = Layout(Fieldset(_('Pesquisar Protocolo'), - row1, row2, - row3, row4, - HTML(sapl.utils.autor_label), - HTML(sapl.utils.autor_modal), - row5, - row6, - form_actions(save_label='Pesquisar'))) - super(ProtocoloForm, self).__init__( - *args, **kwargs) + +class ProtocoloFilterSet(django_filters.FilterSet): + + filter_overrides = {models.DateField: { + 'filter_class': django_filters.DateFromToRangeFilter, + 'extra': lambda f: { + 'label': '%s (%s)' % (f.verbose_name, _('Inicial - Final')), + 'widget': RangeWidgetOverride} + }} + + ano = django_filters.ChoiceFilter(required=False, + label=u'Ano da Matéria', + choices=ANO_CHOICES, + help_text="") + + assunto_ementa = django_filters.CharFilter(lookup_expr='icontains') + + interessado = django_filters.CharFilter(lookup_expr='icontains') + + class Meta: + model = Protocolo + fields = ['tipo_protocolo', + 'numero', + 'tipo_documento', + 'data_publicacao', + 'tipo_materia', + 'autor' + ] + + order_by = ( + ('', 'Selecione'), + ('CRE', 'Ordem Crescente'), + ('DEC', 'Ordem Decrescente'), + ) + + order_by_mapping = { + '': [], + 'CRE': ['ano', 'numero'], + 'DEC': ['-ano', '-numero'], + } + + def get_order_by(self, order_value): + if order_value in self.order_by_mapping: + return self.order_by_mapping[order_value] + else: + return super(ProtocoloFilterSet, + self).get_order_by(order_value) + + def __init__(self, *args, **kwargs): + super(ProtocoloFilterSet, self).__init__(*args, **kwargs) + + self.filters['autor'].label = 'Tipo de Matéria' + self.filters['assunto_ementa'].label = 'Assunto' + + row1 = crispy_layout_mixin.to_row( + [('numero', 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', 6), + ('assunto_ementa', 6)]) + + row5 = crispy_layout_mixin.to_row( + [('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)]) + + self.helper = FormHelper() + self.form.helper.form_method = 'GET' + self.helper.layout = Layout(Fieldset(_('Pesquisar Protocolo'), + row1, row2, + row3, row4, + HTML(sapl.utils.autor_label), + HTML(sapl.utils.autor_modal), + row5, + form_actions(save_label='Pesquisar'))) class AnularProcoloAdmForm(ModelForm): diff --git a/protocoloadm/views.py b/protocoloadm/views.py index c4b3e8b2a..ba73e1783 100644 --- a/protocoloadm/views.py +++ b/protocoloadm/views.py @@ -63,12 +63,6 @@ class ProtocoloPesquisaView(FormView): request.POST['inicial'], '%d/%m/%Y').strftime('%Y-%m-%d') - # if request.POST['final']: - # kwargs['final'] = request.POST['final'] - - if request.POST['natureza_processo']: - kwargs['tipo_protocolo'] = request.POST['natureza_processo'] - if request.POST['tipo_documento']: kwargs['tipo_documento'] = request.POST['tipo_documento']