Browse Source

Iniciando a geração do pdf

Co-authored-by: Vinícius Cantuária <cantuariavc@gmail.com>
pull/2816/head
ulyssesBML 7 years ago
parent
commit
b83549829d
  1. 34
      sapl/protocoloadm/forms.py
  2. 14
      sapl/protocoloadm/views.py
  3. 26
      sapl/relatorios/views.py
  4. 89
      sapl/templates/relatorios/relatorio_doc_administrativos.html

34
sapl/protocoloadm/forms.py

@ -1,9 +1,9 @@
import logging
from crispy_forms.bootstrap import InlineRadios, Alert
from crispy_forms.bootstrap import InlineRadios, Alert, FormActions
from sapl.crispy_layout_mixin import SaplFormHelper
from crispy_forms.layout import HTML, Button, Column, Fieldset, Layout, Div
from crispy_forms.layout import HTML, Button, Column, Fieldset, Layout, Div, Submit
from django import forms
from django.core.exceptions import (MultipleObjectsReturned,
ObjectDoesNotExist, ValidationError)
@ -170,11 +170,6 @@ class DocumentoAdministrativoFilterSet(django_filters.FilterSet):
o = AnoNumeroOrderingFilter(help_text='')
relatorio_pdf = django_filters.ChoiceFilter(
label=_('Relatório PDF'),
choices=YES_NO_CHOICES,
initial=False
)
class Meta(FilterOverridesMetaMixin):
model = DocumentoAdministrativo
@ -213,18 +208,33 @@ class DocumentoAdministrativoFilterSet(django_filters.FilterSet):
row4 = to_row(
[
('tramitacao', 2),
('tramitacaoadministrativo__status', 2),
('relatorio_pdf', 2),
('tramitacaoadministrativo__status', 4),
('tramitacaoadministrativo__unidade_tramitacao_destino', 6),
])
buttons = FormActions(
*[
HTML('''
<div class="form-check">
<input name="relatorio" type="checkbox" class="form-check-input" id="relatorio">
<label class="form-check-label" for="relatorio">Relatorio</label>
</div>
''' )
],
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(_('Pesquisar Documento'),
row1, row2,
row3, row4,
form_actions(label='Pesquisar'))
row1, row2,
row3, row4,
buttons,)
)

14
sapl/protocoloadm/views.py

@ -36,6 +36,7 @@ from sapl.protocoloadm.models import Protocolo
from sapl.utils import (create_barcode, get_base_url, get_client_ip,
get_mime_type_from_file_extension, lista_anexados,
show_results_filter_set, mail_service_configured)
from sapl.relatorios.views import relatorio_doc_administrativos
from .forms import (AcompanhamentoDocumentoForm, AnularProtocoloAdmForm,
DocumentoAcessorioAdministrativoForm,
@ -911,7 +912,6 @@ class PesquisarDocumentoAdministrativoView(DocumentoAdministrativoMixin,
def get(self, request, *args, **kwargs):
super(PesquisarDocumentoAdministrativoView, 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
@ -924,9 +924,7 @@ class PesquisarDocumentoAdministrativoView(DocumentoAdministrativoMixin,
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
@ -934,17 +932,17 @@ class PesquisarDocumentoAdministrativoView(DocumentoAdministrativoMixin,
length = self.object_list.filter(restrito=False).count()
else:
length = self.object_list.count()
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())
return self.render_to_response(context)
if url!='' and request.GET.get('relatorio',None):
return relatorio_doc_administrativos(request,context)
else:
return self.render_to_response(context)
class AnexadoCrud(MasterDetailCrud):
model = Anexado

26
sapl/relatorios/views.py

@ -1325,4 +1325,28 @@ def resumo_ata_pdf(request,pk):
response['Content-Transfer-Encoding'] = 'binary'
response.write(pdf_file)
return response
return response
def relatorio_doc_administrativos(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}
html_template = render_to_string('relatorios/relatorio_doc_administrativos.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

89
sapl/templates/relatorios/relatorio_doc_administrativos.html

@ -0,0 +1,89 @@
{% load i18n %}
{% load crispy_forms_tags %}
{% load common_tags %}
<head>
<style>
@page{
margin-top: 4.5cm;
size: A4 portrait;
@bottom-right {
content: "Página" counter(page);
height: 3cm;
font-size: 8pt;
}
@bottom-center {
border-top: 1px solid black;
font-size: 8pt;
height: 1cm;
content: "{{rodape|safe}}";
font-style:italic;
}
@bottom-left {
content: "{{data}}";
height: 3cm;
font-size: 8pt;
}
@top-center {
content: string(title);
}
header {
width: 0;
height: 0;
visibility: hidden;
string-set: title content();
}
}
</style>
</head>
<body>
<table class="table table-striped table-bordered">
<thead class="thead-default"><tr><td><h3>Resultados</h3></td></tr></thead>
{% if page_obj|length %}
{% for d in page_obj %}
{% if request.user.is_anonymous and not d.restrito or not request.user.is_anonymous%}
<tr>
<td>
<strong><a href="{% url 'sapl.protocoloadm:documentoadministrativo_detail' d.id %}">{{d.tipo.sigla}} {{d.numero}}/{{d.ano}} - {{d.tipo}}</strong></a></br>
<strong>Interessado:</strong>&nbsp;{{ d.interessado|default_if_none:"Não informado"}}
</br>
<strong>Assunto:</strong>&nbsp;{{ d.assunto|safe }}
</br>
{% if d.protocolo %}
<strong>Protocolo:</strong>&nbsp;<a href="{% url 'sapl.protocoloadm:protocolo_mostrar' d.protocolo.id %}">{{ d.protocolo}}</a></br>
{% endif %}
{% define d.tramitacaoadministrativo_set.last as tram %}
{% if tram.unidade_tramitacao_destino %}
<strong>Localização Atual:</strong> &nbsp;{{tram.unidade_tramitacao_destino}}
</br>
<strong>Status:</strong> {{tram.status}}
</br>
{% endif %}
{% define d.documentoacessorioadministrativo_set.all as acess %}
{% if d.documentoacessorioadministrativo_set.all.exists %}
<strong>Documentos Acessórios:</strong>
<a href="{% url 'sapl.protocoloadm:documentoacessorioadministrativo_list' d.id %}">
{{ d.documentoacessorioadministrativo_set.all.count }}
</a>
</br>
{% endif %}
{% if d.texto_integral %}
<strong><a href="{{ d.texto_integral.url }}">Texto Integral</a></strong></br>
{% endif %}
{% if d.tramitacao and mail_service_configured %}
<a href="{% url 'sapl.protocoloadm:acompanhar_documento' d.id %}">Acompanhar Documento</a>
{% endif %}
</td>
</tr>
{% endif %}
{% endfor %}
{% else %}
<tr><td><h3>Nenhum documento encontrado com essas especificações</h3></tr>
{% endif %}
</table>
</body>
Loading…
Cancel
Save