Repository: interlegis/sapl

Issue:
Converter PDF de Pauta da Sessão para Weasyprint
<!--- Forneça um resumo geral da _issue_ no título acima -->
Gerar o pdf da pauta da sessão élo Weasyprint, para melhorar a manutenibilidade do documento.

## Comportamento Esperado
<!--- Se você está descrevendo um _bug_, conte-nos o que deveria acontecer. -->
<!--- Se você está sugerindo uma mudança/melhoria, conte-nos como deve funcionar. -->

## Comportamento Atual
<!--- Se está descrevendo um bug, conte-nos o que acontece em vez do comportamento esperado. -->
<!--- Se está sugerindo uma mudança/melhoria, explique a diferença com o comportamento atual. -->
Ele é gerado por xml, o que pode gerar quebras dependendo do carácter cadastrado.

## Possível Solução
<!--- Não é obrigatório, mas sugira uma possível correção/razão para o bug -->
<!--- ou ideias de como implementar a adição/mudança. -->
Gerar pelo weasyprint.
## Passos para Reproduzir (para bugs)
<!--- Forneça um link para um exemplo, ou um conjunto de passos inequívocos -->
<!--- para reproduzir esse bug. Inclua código para reproduzir, se relevante. -->
1.
2.
3.
4.

## Contexto
<!--- Como esse problema o afeta? O que você está tentando realizar? -->
<!--- Fornecer o contexto nos ajuda a encontrar uma solução que seja mais útil no mundo real -->

## Imagens do Ocorrido
<!--- Representação visual em vídeo ou imagem do ocorrido -->
<!--- Se está descrevendo um bug poste imagens ou vídeos na repordução do bug citado, caso se aplique -->

## Seu Ambiente
<!--- Inclua detalhes relevantes sobre o ambiente em que você presenciou/experienciou o bug. -->
* Versão usada (_Release_):
* Nome e versão do navegador:
* Nome e versão do Sistema Operacional (desktop ou mobile):
* Link para o seu projeto (Caso de fork deste projeto):



Discussion:

Resolving patch:
diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py
--- a/sapl/relatorios/views.py
+++ b/sapl/relatorios/views.py
@@ -1344,7 +1344,7 @@ def resumo_ata_pdf(request,pk):
 
     return response
 
-def cria_relatorio(request, context, html_string):
+def cria_relatorio(request, context, html_string, header_info=""):
     base_url = request.build_absolute_uri()
     casa = CasaLegislativa.objects.first()
     rodape = ' '.join(get_rodape(casa))
@@ -1352,7 +1352,7 @@ def cria_relatorio(request, context, html_string):
     context.update({'data': dt.today().strftime('%d/%m/%Y')})
     context.update({'rodape': rodape})
 
-    header_context = {"casa": casa, 'logotipo': casa.logotipo, 'MEDIA_URL': MEDIA_URL}
+    header_context = {"casa": casa, 'logotipo': casa.logotipo, 'MEDIA_URL': MEDIA_URL, 'info': header_info}
 
     html_template = render_to_string(html_string, context)
     html_header = render_to_string('relatorios/header_ata.html', header_context)
@@ -1414,6 +1414,12 @@ def relatorio_documento_acessorio(obj, request, context):
 def relatorio_normas_por_autor(obj, request, context):
     return cria_relatorio(request, context, 'relatorios/relatorio_normas_por_autor.html')
 
+def relatorio_pauta_sessao_weasy(obj, request, context):
+    sessao = context['object']
+    info = "Pauta da {} ({} - {}) Legislatura".format(sessao,sessao.legislatura.data_inicio.year,sessao.legislatura.data_fim.year)
+    return cria_relatorio(request, context, 'relatorios/relatorio_pauta_sessao.html',info)
+
+
 def relatorio_sessao_plenaria_pdf(request, pk):  
     base_url=request.build_absolute_uri()
     logger = logging.getLogger(__name__)
diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py
--- a/sapl/sessao/urls.py
+++ b/sapl/sessao/urls.py
@@ -117,7 +117,7 @@
         PautaSessaoView.as_view(), name='pauta_sessao'),
     url(r'^sessao/pauta-sessao/pesquisar-pauta$',
         PesquisarPautaSessaoView.as_view(), name='pesquisar_pauta'),
-    url(r'^sessao/pauta-sessao/(?P<pk>\d+)$',
+    url(r'^sessao/pauta-sessao/(?P<pk>\d+)/(?:pdf)?$',
         PautaSessaoDetailView.as_view(), name='pauta_sessao_detail'),
 
     # Subnav sessão
diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py
--- a/sapl/sessao/views.py
+++ b/sapl/sessao/views.py
@@ -3230,6 +3230,8 @@ class PautaSessaoDetailView(DetailView):
     model = SessaoPlenaria
 
     def get(self, request, *args, **kwargs):
+        from sapl.relatorios.views import relatorio_pauta_sessao_weasy # Evitar import ciclico
+        
         self.object = self.get_object()
         context = self.get_context_data(object=self.object)
 
@@ -3352,7 +3354,12 @@ def get(self, request, *args, **kwargs):
         context.update({'materias_ordem': materias_ordem})
         context.update({'subnav_template_name': 'sessao/pauta_subnav.yaml'})
 
-        return self.render_to_response(context)
+        is_pdf = True if request.build_absolute_uri().split('/')[-1] == 'pdf' else False
+
+        if is_pdf:
+            return relatorio_pauta_sessao_weasy(self,request,context)
+        else:
+            return self.render_to_response(context)
 
 
 class PesquisarSessaoPlenariaView(FilterView):


Test patch: