diff --git a/sapl/base/forms.py b/sapl/base/forms.py index d51e0e321..7d9a9e59e 100644 --- a/sapl/base/forms.py +++ b/sapl/base/forms.py @@ -1,8 +1,9 @@ import logging import os -from crispy_forms.bootstrap import FieldWithButtons, InlineRadios, StrictButton -from crispy_forms.layout import HTML, Button, Div, Field, Fieldset, Layout, Row + +from crispy_forms.bootstrap import FieldWithButtons, InlineRadios, StrictButton, FormActions +from crispy_forms.layout import HTML, Button, Div, Field, Fieldset, Layout, Row, Submit from django import forms from django.conf import settings from django.contrib.auth import get_user_model @@ -38,7 +39,7 @@ from sapl.utils import (RANGE_ANOS, YES_NO_CHOICES, RangeWidgetOverride, autor_label, autor_modal, models_with_gr_for_model, qs_override_django_filter, choice_anos_com_normas, choice_anos_com_materias, - FilterOverridesMetaMixin, FileFieldCheckMixin) + FilterOverridesMetaMixin, FileFieldCheckMixin, AnoNumeroOrderingFilter) from .models import AppConfig, CasaLegislativa @@ -1099,6 +1100,8 @@ class RelatorioMateriasTramitacaoilterSet(django_filters.FilterSet): queryset=StatusTramitacao.objects.all(), label=_('Status Atual')) + o = AnoNumeroOrderingFilter(help_text='') + @property def qs(self): parent = super(RelatorioMateriasTramitacaoilterSet, self).qs @@ -1120,12 +1123,27 @@ class RelatorioMateriasTramitacaoilterSet(django_filters.FilterSet): row3 = to_row([('tramitacao__unidade_tramitacao_destino', 12)]) row4 = to_row([('tramitacao__status', 12)]) + buttons = FormActions( + *[ + HTML(''' +
+ + +
+ ''') + ], + Submit('pesquisar', _('Pesquisar'), css_class='float-right', + onclick='return true;'), + css_class='form-group row justify-content-between' + , + ) + self.form.helper = SaplFormHelper() self.form.helper.form_method = 'GET' self.form.helper.layout = Layout( Fieldset(_('Pesquisa de Matéria em Tramitação'), row1, row2, row3, row4, - form_actions(label='Pesquisar')) + buttons,) ) diff --git a/sapl/base/views.py b/sapl/base/views.py index 8fec1a305..9d7f281b3 100644 --- a/sapl/base/views.py +++ b/sapl/base/views.py @@ -29,6 +29,8 @@ from django_filters.views import FilterView from haystack.views import SearchView from haystack.query import SearchQuerySet +from sapl.relatorios.views import relatorio_materia_em_tramitacao + from sapl import settings from sapl.audiencia.models import AudienciaPublica, TipoAudienciaPublica from sapl.base.forms import AutorForm, AutorFormForAdmin, TipoAutorForm @@ -760,6 +762,43 @@ class RelatorioMateriasTramitacaoView(FilterView): return context + def get(self, request, *args, **kwargs): + super(RelatorioMateriasTramitacaoView, self).get(request) + # Se a pesquisa estiver quebrando com a paginação + # Olhe esta função abaixo + # Provavelmente você criou um novo campo no Form/FilterSet + # Então a ordem da URL está diferente + data = self.filterset.data + if data and data.get('tipo') is not None: + url = "&" + str(self.request.environ['QUERY_STRING']) + if url.startswith("&page"): + ponto_comeco = url.find('tipo=') - 1 + url = url[ponto_comeco:] + else: + url = '' + self.filterset.form.fields['o'].label = _('Ordenação') + # é usada essa verificação anônima para quando os documentos administrativos + # estão no modo ostensivo, mas podem existir documentos administrativos + # restritos + if request.user.is_anonymous(): + length = self.object_list.filter(restrito=False).count() + else: + length = self.object_list.count() + + is_relatorio = url != '' and request.GET.get('relatorio', None) + self.paginate_by = None if is_relatorio else self.paginate_by + context = self.get_context_data(filter=self.filterset, + filter_url=url, + numero_res=length + ) + context['show_results'] = show_results_filter_set( + self.request.GET.copy()) + + if is_relatorio: + return relatorio_materia_em_tramitacao(request, context) + else: + return self.render_to_response(context) + class RelatorioMateriasPorAnoAutorTipoView(FilterView): model = MateriaLegislativa diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py index 7f7608d67..1f537047e 100755 --- a/sapl/relatorios/views.py +++ b/sapl/relatorios/views.py @@ -1367,6 +1367,30 @@ def relatorio_doc_administrativos(request, context): return response + +def relatorio_materia_em_tramitacao(request, context): + base_url = request.build_absolute_uri() + casa = CasaLegislativa.objects.first() + rodape = ' '.join(get_rodape(casa)) + + context.update({'data': dt.today().strftime('%d/%m/%Y')}) + context.update({'rodape': rodape}) + + header_context = {"casa": casa, 'logotipo': casa.logotipo, 'MEDIA_URL': MEDIA_URL} + + #import ipdb; ipdb.set_trace(); + html_template = render_to_string('relatorios/relatorio_materias_em_tramitacao.html', context) + html_header = render_to_string('relatorios/header_ata.html', header_context) + + pdf_file = make_pdf(base_url=base_url, main_template=html_template, header_template=html_header) + + response = HttpResponse(content_type='application/pdf;') + response['Content-Disposition'] = 'inline; filename=relatorio.pdf' + response['Content-Transfer-Encoding'] = 'binary' + response.write(pdf_file) + + return response + def relatorio_sessao_plenaria_pdf(request, pk): base_url=request.build_absolute_uri() logger = logging.getLogger(__name__) diff --git a/sapl/templates/relatorios/relatorio_materias_em_tramitacao.html b/sapl/templates/relatorios/relatorio_materias_em_tramitacao.html new file mode 100644 index 000000000..29e4a7513 --- /dev/null +++ b/sapl/templates/relatorios/relatorio_materias_em_tramitacao.html @@ -0,0 +1,105 @@ +{% load i18n %} +{% load common_tags %} +{% load static %} + + + + + + + +

Matérias em Tramitação

+ {% if object_list|length %} + + + + + + + + + + + {% for key, value in qtdes.items %} + + + + + {% endfor %} + +
QUADRO GERAL
Tipo MatériaQuantidade
{{key.sigla}} - {{key}}{{value}}
+
+
+ + {% for materia in object_list %} +
+ {% if request.user.is_anonymous and not d.restrito or not request.user.is_anonymous%} + Matéria: {{materia.tipo.descricao}} {{materia.numero}}/{{materia.ano}} +
+ Local Atual:  {{materia.tramitacao_set.last.unidade_tramitacao_destino}} +
+ Status:  {{materia.tramitacao_set.last.status}} +
+ {% if d.protocolo %} + Protocolo: {{ d.protocolo}}
+ {% endif %} + {% define d.tramitacaoadministrativo_set.last as tram %} + {% if tram.unidade_tramitacao_destino %} + Localização Atual:  {{tram.unidade_tramitacao_destino}} +
+ Status: {{tram.status}} +
+ {% endif %} + {% define d.documentoacessorioadministrativo_set.all as acess %} + {% if d.documentoacessorioadministrativo_set.all.exists %} + Documentos Acessórios: + + {{ d.documentoacessorioadministrativo_set.all.count }} + +
+ {% endif %} + {% if d.tramitacao and mail_service_configured %} + Acompanhar Documento + {% endif %} + {% endif %} +
+ + {% endfor %} + {% else %} +

Nenhum documento encontrado com essas especificações

+ {% endif %} + \ No newline at end of file