From fcaf94133ddc301312f04c78cdada36084166ce0 Mon Sep 17 00:00:00 2001 From: Mariana Mendes Date: Fri, 8 Sep 2017 14:33:54 -0300 Subject: [PATCH] Fix #1436 --- sapl/materia/forms.py | 26 +++- sapl/materia/urls.py | 7 +- sapl/materia/views.py | 89 ++++++++--- .../materia/impressos/etiqueta_pdf.html | 82 ++++++++++ .../materia/impressos/ficha_pdf.html | 144 ++++++++++++++++++ .../materia/impressos/ficha_seleciona.html | 6 + .../materia/impressos/impressos.html | 2 +- 7 files changed, 331 insertions(+), 25 deletions(-) create mode 100644 sapl/templates/materia/impressos/etiqueta_pdf.html create mode 100644 sapl/templates/materia/impressos/ficha_seleciona.html diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 2cc0cad6a..06c93dfeb 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -1679,22 +1679,20 @@ class EtiquetaPesquisaForm(forms.Form): 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') ) @@ -1734,3 +1732,25 @@ class FichaPesquisaForm(forms.Form): 'A Data Final não pode ser menor que a Data Inicial')) return cleaned_data + + +class FichaSelecionaForm(forms.Form): + materia = forms.ChoiceField( + widget=forms.RadioSelect, + choices=[(m.id, m.__str__()) for m in MateriaLegislativa.objects.all()], + label='') + + def __init__(self, *args, **kwargs): + super(FichaSelecionaForm, self).__init__(*args, **kwargs) + + row1 = to_row( + [('materia', 12)]) + + self.helper = FormHelper() + self.helper.layout = Layout( + Fieldset( + ('Selecione a ficha que deseja imprimir'), + row1, + form_actions(save_label='Gerar Impresso') + ) + ) diff --git a/sapl/materia/urls.py b/sapl/materia/urls.py index 907994022..a59dc8592 100644 --- a/sapl/materia/urls.py +++ b/sapl/materia/urls.py @@ -9,7 +9,7 @@ from sapl.materia.views import (AcompanhamentoConfirmarView, DocumentoAcessorioCrud, DocumentoAcessorioEmLoteView, ImpressosView, EtiquetaPesquisaView, - FichaPesquisaView, + FichaPesquisaView, FichaSelecionaView, LegislacaoCitadaCrud, MateriaAssuntoCrud, MateriaLegislativaCrud, MateriaLegislativaPesquisaView, MateriaTaView, @@ -38,7 +38,10 @@ urlpatterns_impressos = [ name='impressos_etiqueta'), url(r'^materia/impressos/ficha-pesquisa/$', FichaPesquisaView.as_view(), - name='impressos_ficha'), + name='impressos_ficha_pesquisa'), + url(r'^materia/impressos/ficha-seleciona/$', + FichaSelecionaView.as_view(), + name='impressos_ficha_seleciona'), ] urlpatterns_materia = [ diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 32caa06b8..370f0126a 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1,3 +1,4 @@ +import datetime as dt_generator from datetime import datetime from random import choice from string import ascii_letters, digits @@ -13,7 +14,7 @@ from django.core.urlresolvers import reverse from django.http import HttpResponse, JsonResponse from django.http.response import Http404, HttpResponseRedirect from django.shortcuts import get_object_or_404, redirect -from django.template import RequestContext, loader +from django.template import loader, RequestContext from django.utils import formats from django.utils.translation import ugettext_lazy as _ from django.views.generic import CreateView, ListView, TemplateView, UpdateView @@ -47,7 +48,7 @@ from .email_utils import do_envia_email_confirmacao from .forms import (AcessorioEmLoteFilterSet, AcompanhamentoMateriaForm, AdicionarVariasAutoriasFilterSet, DespachoInicialForm, DocumentoAcessorioForm, EtiquetaPesquisaForm, - FichaPesquisaForm, MateriaAssuntoForm, + FichaPesquisaForm, FichaSelecionaForm, MateriaAssuntoForm, MateriaLegislativaFilterSet, MateriaSimplificadaForm, PrimeiraTramitacaoEmLoteFilterSet, ReceberProposicaoForm, RelatoriaForm, TramitacaoEmLoteFilterSet, @@ -1751,9 +1752,8 @@ class ImpressosView(PermissionRequiredMixin, TemplateView): permission_required = ('materia.can_access_impressos', ) -def gerar_pdf_impressos(request, context): - template = loader.get_template('materia/impressos/pdf.html', - 'materia/impressos/ficha_pdf.html') +def gerar_pdf_impressos(request, context, template_name): + template = loader.get_template(template_name) html = template.render(RequestContext(request, context)) response = HttpResponse(content_type="application/pdf") weasyprint.HTML( @@ -1797,7 +1797,9 @@ class EtiquetaPesquisaView(PermissionRequiredMixin, FormView): context['materias'] = materias - return gerar_pdf_impressos(self.request, context) + return gerar_pdf_impressos(self.request, context, + 'materia/impressos/etiqueta_pdf.html') + class FichaPesquisaView(PermissionRequiredMixin, FormView): form_class = FichaPesquisaForm @@ -1805,24 +1807,73 @@ class FichaPesquisaView(PermissionRequiredMixin, FormView): permission_required = ('materia.can_access_impressos', ) def form_valid(self, form): - context = {} + tipo_materia = form.data['tipo_materia'] + data_inicial = form.data['data_inicial'] + data_final = form.data['data_final'] - materias = MateriaLegislativa.objects.all().order_by( - '-data_apresentacao') + url = reverse('sapl.materia:impressos_ficha_seleciona') + url = url + '?tipo=%s&data_inicial=%s&data_final=%s' % ( + tipo_materia, data_inicial, data_final) - if form.cleaned_data['tipo_materia']: - materias = materias.filter(tipo=form.cleaned_data['tipo_materia']) + return HttpResponseRedirect(url) - 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']) +class FichaSelecionaView(PermissionRequiredMixin, FormView): + form_class = FichaSelecionaForm + template_name = 'materia/impressos/ficha_seleciona.html' + permission_required = ('materia.can_access_impressos', ) - context['quantidade'] = len(materias) + def string_to_datetime(self, date): + return dt_generator.date( + day=int(date[0]), + month=int(date[1]), + year=int(date[2])) + + def get_context_data(self, **kwargs): + if ('tipo' not in self.request.GET or + 'data_inicial' not in self.request.GET or + 'data_final' not in self.request.GET): + return HttpResponseRedirect(reverse( + 'sapl.materia:impressos_ficha_pesquisa')) + + context = super(FichaSelecionaView, self).get_context_data( + **kwargs) + + tipo = self.request.GET['tipo'] + data_inicial = self.request.GET['data_inicial'] + data_final = self.request.GET['data_final'] + + data_inicial = self.string_to_datetime( + data_inicial.split('/')) + data_final = self.string_to_datetime( + data_final.split('/')) + + materia_list = MateriaLegislativa.objects.filter( + tipo=tipo, + data_apresentacao__range=(data_inicial, data_final)) + context['quantidade'] = len(materia_list) + materia_list = materia_list[:20] + + context['form'].fields['materia'].choices = [(m.id, m.__str__()) for m in materia_list] if context['quantidade'] > 20: - materias = materias[:20] + messages.info(self.request, _('Sua pesquisa retornou mais do que ' + '20 impressos. Por questões de performance, foram retornados ' + 'apenas os 20 primeiros. Caso queira outros, tente fazer uma ' + 'pesquisa mais específica')) - context['materias'] = materias + return context + + def form_valid(self, form): + context = {} + + try: + materia = MateriaLegislativa.objects.get( + id=form.data['materia']) + except ObjectDoesNotExist: + pass + + context['materia'] = materia + context['despachos'] = materia.despachoinicial_set.all().values_list( + 'comissao__nome', flat=True) - return gerar_pdf_impressos(self.request, context) + return gerar_pdf_impressos(self.request, context, 'materia/impressos/ficha_pdf.html') diff --git a/sapl/templates/materia/impressos/etiqueta_pdf.html b/sapl/templates/materia/impressos/etiqueta_pdf.html new file mode 100644 index 000000000..2f4ea2270 --- /dev/null +++ b/sapl/templates/materia/impressos/etiqueta_pdf.html @@ -0,0 +1,82 @@ + + + + + Impressos + + + + + + + +{% if quantidade > 30 %} +

Sua pesquisa retornou mais do que 20 impressos.

Por questões de performance, foram retornados apenas os 20 primeiros. Caso queira outros, tente fazer uma pesquisa mais específica

+


+{% endif %} + +{% for m in materias %} +
+ + + {% if m.numeracao_set.first %} + PROCESSO: {{ m.numeracao_set.first.numero_materia }} +   + {% else %} + PROCESSO: {{ m.numero }} +   + {% endif %} + + + {{m.tipo.sigla}}: {{m.numero}}/{{m.ano}}   + + + Pref: + {% if m.numeracao_set.first %} + {{ m.numeracao_set.first.numero_materia }} + {% endif %}
+ DATA DE ENTRADA: {{m.data_apresentacao}}
+ + + {% if m.autoria_set.all %} + Autores: + {% for a in m.autoria_set.all %} + {% if not forloop.first %} + ,    {{a.autor}} + {% else %} +  {{a.autor}} + {% endif %} + {% endfor %} +
+ {% endif %} + + + EMENTA: {{m.ementa}} + +
+ +
+
+
+
+
+ +{% endfor %} + + diff --git a/sapl/templates/materia/impressos/ficha_pdf.html b/sapl/templates/materia/impressos/ficha_pdf.html index e69de29bb..405d9a2f5 100644 --- a/sapl/templates/materia/impressos/ficha_pdf.html +++ b/sapl/templates/materia/impressos/ficha_pdf.html @@ -0,0 +1,144 @@ + + + + + + + + + + +
+ +
+ + {% if materia.numeracao_set.first %} + PROCESSO Nº: {{ materia.numeracao_set.first.numero_materia }}

+   + {% else %} + PROCESSO Nº: {{ materia.numero }}

+   + {% endif %} +
+ + + {{materia.tipo}}: {{materia.numero}}/{{materia.ano}}
+ + + Data de entrada: {{materia.data_apresentacao}}
+ + + +
+
+ + {% if materia.autoria_set.all %} + Autor: + {% for a in materia.autoria_set.all %} + {% if not forloop.first %} + {{a.autor}}
+ {% else %} + {{a.autor}}
+ {% endif %} + {% endfor %} +
+ {% endif %} +
+
+ + +


+ + + +
+
+ Ementa: {{materia.ementa}} +
+
+ +


+ + +
+
+ Despacho Inicial: + {% for despacho in despachos %} +
{{despacho}} + {% endfor %} +
+
+
+
+ ________________NORMA JURIDICA_________________

+ _________________________________________________ + +
+ + + diff --git a/sapl/templates/materia/impressos/ficha_seleciona.html b/sapl/templates/materia/impressos/ficha_seleciona.html new file mode 100644 index 000000000..818b7c3a3 --- /dev/null +++ b/sapl/templates/materia/impressos/ficha_seleciona.html @@ -0,0 +1,6 @@ +{% extends "crud/form.html" %} +{% load i18n crispy_forms_tags %} + +{% block base_content %} + {% crispy form %} +{% endblock base_content %} diff --git a/sapl/templates/materia/impressos/impressos.html b/sapl/templates/materia/impressos/impressos.html index ef658ba21..beb92862c 100644 --- a/sapl/templates/materia/impressos/impressos.html +++ b/sapl/templates/materia/impressos/impressos.html @@ -17,7 +17,7 @@

Ficha

{#

Guia de Remessa

#}