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 @@ + + + +
+|
+
+
+ {% 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 %} + |
+