diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 678264194..2cc0cad6a 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -1678,3 +1678,59 @@ class EtiquetaPesquisaForm(forms.Form): 'O processo final não pode ser menor que o inicial')) return cleaned_data + +class FichaPesquisaForm(forms.Form): + tipo_materia = forms.ModelChoiceField( + label=TipoMateriaLegislativa._meta.verbose_name, + queryset=TipoMateriaLegislativa.objects.all(), + required=False, + empty_label='Selecione') + + data_inicial = forms.DateField( + label='Data Inicial', + required=False, + widget=forms.DateInput(format='%d/%m/%Y') + ) + + data_final = forms.DateField( + label='Data Final', + required=False, + widget=forms.DateInput(format='%d/%m/%Y') + ) + + def __init__(self, *args, **kwargs): + super(FichaPesquisaForm, self).__init__(*args, **kwargs) + + row1 = to_row( + [('tipo_materia', 6), + ('data_inicial', 3), + ('data_final', 3)]) + + self.helper = FormHelper() + self.helper.layout = Layout( + Fieldset( + ('Formulário de Ficha'), + row1, + form_actions(save_label='Pesquisar') + ) + ) + + def clean(self): + cleaned_data = self.cleaned_data + + # Verifica se algum campo de data foi preenchido + if cleaned_data['data_inicial'] or cleaned_data['data_final']: + # Então verifica se o usuário preencheu o Incial e mas não + # preencheu o Final, ou vice-versa + if (not cleaned_data['data_inicial'] or + not cleaned_data['data_final']): + raise ValidationError(_( + 'Caso pesquise por data, os campos de Data Incial e ' + + 'Data Final devem ser preenchidos obrigatoriamente')) + # Caso tenha preenchido, verifica se a data final é maior que + # a inicial + elif cleaned_data['data_final'] < cleaned_data['data_inicial']: + raise ValidationError(_( + 'A Data Final não pode ser menor que a Data Inicial')) + + return cleaned_data diff --git a/sapl/materia/urls.py b/sapl/materia/urls.py index e0a056011..907994022 100644 --- a/sapl/materia/urls.py +++ b/sapl/materia/urls.py @@ -8,7 +8,8 @@ from sapl.materia.views import (AcompanhamentoConfirmarView, CriarProtocoloMateriaView, DespachoInicialCrud, DocumentoAcessorioCrud, DocumentoAcessorioEmLoteView, - EtiquetaPesquisaView, ImpressosView, + ImpressosView, EtiquetaPesquisaView, + FichaPesquisaView, LegislacaoCitadaCrud, MateriaAssuntoCrud, MateriaLegislativaCrud, MateriaLegislativaPesquisaView, MateriaTaView, @@ -35,6 +36,9 @@ urlpatterns_impressos = [ url(r'^materia/impressos/etiqueta-pesquisa/$', EtiquetaPesquisaView.as_view(), name='impressos_etiqueta'), + url(r'^materia/impressos/ficha-pesquisa/$', + FichaPesquisaView.as_view(), + name='impressos_ficha'), ] urlpatterns_materia = [ diff --git a/sapl/materia/views.py b/sapl/materia/views.py index aa5aff472..32caa06b8 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -47,10 +47,11 @@ from .email_utils import do_envia_email_confirmacao from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm, AdicionarVariasAutoriasFilterSet, DespachoInicialForm, DocumentoAcessorioForm, EtiquetaPesquisaForm, - MateriaAssuntoForm, MateriaLegislativaFilterSet, - MateriaSimplificadaForm, PrimeiraTramitacaoEmLoteFilterSet, - ReceberProposicaoForm, RelatoriaForm, - TramitacaoEmLoteFilterSet, filtra_tramitacao_destino, + FichaPesquisaForm, MateriaAssuntoForm, + MateriaLegislativaFilterSet, MateriaSimplificadaForm, + PrimeiraTramitacaoEmLoteFilterSet, ReceberProposicaoForm, + RelatoriaForm, TramitacaoEmLoteFilterSet, + filtra_tramitacao_destino, filtra_tramitacao_destino_and_status, filtra_tramitacao_status) from .models import (AcompanhamentoMateria, Anexada, AssuntoMateria, Autoria, @@ -1751,7 +1752,8 @@ class ImpressosView(PermissionRequiredMixin, TemplateView): def gerar_pdf_impressos(request, context): - template = loader.get_template('materia/impressos/pdf.html') + template = loader.get_template('materia/impressos/pdf.html', + 'materia/impressos/ficha_pdf.html') html = template.render(RequestContext(request, context)) response = HttpResponse(content_type="application/pdf") weasyprint.HTML( @@ -1796,3 +1798,31 @@ class EtiquetaPesquisaView(PermissionRequiredMixin, FormView): context['materias'] = materias return gerar_pdf_impressos(self.request, context) + +class FichaPesquisaView(PermissionRequiredMixin, FormView): + form_class = FichaPesquisaForm + template_name = 'materia/impressos/ficha.html' + permission_required = ('materia.can_access_impressos', ) + + def form_valid(self, form): + context = {} + + materias = MateriaLegislativa.objects.all().order_by( + '-data_apresentacao') + + if form.cleaned_data['tipo_materia']: + materias = materias.filter(tipo=form.cleaned_data['tipo_materia']) + + if form.cleaned_data['data_inicial']: + materias = materias.filter( + data_apresentacao__gte=form.cleaned_data['data_inicial'], + data_apresentacao__lte=form.cleaned_data['data_final']) + + context['quantidade'] = len(materias) + + if context['quantidade'] > 20: + materias = materias[:20] + + context['materias'] = materias + + return gerar_pdf_impressos(self.request, context) diff --git a/sapl/templates/materia/impressos/ficha.html b/sapl/templates/materia/impressos/ficha.html new file mode 100644 index 000000000..03d1c8580 --- /dev/null +++ b/sapl/templates/materia/impressos/ficha.html @@ -0,0 +1,7 @@ +{% extends "crud/form.html" %} +{% load i18n crispy_forms_tags %} + +{% block base_content %} +