From 17ece5e1b4d18dec3001be0a1ca3f93680e43d45 Mon Sep 17 00:00:00 2001 From: rangelbruno Date: Mon, 2 Feb 2026 22:13:25 -0300 Subject: [PATCH] =?UTF-8?q?Fix(Template):=20Mant=C3=A9m=20corpo=20do=20tem?= =?UTF-8?q?plate=20ao=20criar=20documentos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Antes: o corpo do template era removido e substituído por texto padrão Agora: mantém todo o conteúdo do template e substitui apenas placeholders Placeholders suportados: {titulo}, {ementa}, {descricao}, {tipo}, {data} Signed-off-by: rangelbruno --- sapl/utils_template.py | 60 ++++++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/sapl/utils_template.py b/sapl/utils_template.py index 37e63b3fd..49d60486b 100644 --- a/sapl/utils_template.py +++ b/sapl/utils_template.py @@ -51,38 +51,48 @@ def criar_documento_com_template(tipo_conteudo, tipo_especifico, dados): logger.error(f"Erro ao carregar template {template.pk}: {e}") return None - # Limpa o corpo do documento mantendo cabeçalho e rodapé - # Remove todos os parágrafos existentes - for paragraph in doc.paragraphs: - p = paragraph._element - p.getparent().remove(p) - - # Remove todas as tabelas existentes - for table in doc.tables: - t = table._element - t.getparent().remove(t) - - # Adiciona o conteúdo inicial do novo documento + # Substitui placeholders no corpo do documento + # Placeholders suportados: {titulo}, {ementa}, {descricao}, {tipo}, {data} titulo = dados.get('titulo', 'Documento') descricao = dados.get('descricao', '') tipo_display = dados.get('tipo_display', tipo_conteudo.title()) - # Adiciona título - doc.add_heading(titulo, level=0) + from datetime import date + data_atual = date.today().strftime('%d/%m/%Y') - # Adiciona informações do documento - if descricao: - if tipo_conteudo in ['proposicao', 'materia', 'norma']: - doc.add_paragraph(f'Ementa: {descricao}') - else: - doc.add_paragraph(f'Assunto: {descricao}') + placeholders = { + '{titulo}': titulo, + '{ementa}': descricao, + '{descricao}': descricao, + '{tipo}': tipo_display, + '{data}': data_atual, + } - doc.add_paragraph('') + # Substitui placeholders nos parágrafos + for paragraph in doc.paragraphs: + for placeholder, valor in placeholders.items(): + if placeholder in paragraph.text: + paragraph.text = paragraph.text.replace(placeholder, valor) - # Texto orientativo - doc.add_paragraph(f'Digite o texto do documento abaixo:') - doc.add_paragraph('') - doc.add_paragraph('') + # Substitui placeholders nas tabelas + for table in doc.tables: + for row in table.rows: + for cell in row.cells: + for paragraph in cell.paragraphs: + for placeholder, valor in placeholders.items(): + if placeholder in paragraph.text: + paragraph.text = paragraph.text.replace(placeholder, valor) + + # Substitui placeholders no cabeçalho e rodapé + for section in doc.sections: + for header_para in section.header.paragraphs: + for placeholder, valor in placeholders.items(): + if placeholder in header_para.text: + header_para.text = header_para.text.replace(placeholder, valor) + for footer_para in section.footer.paragraphs: + for placeholder, valor in placeholders.items(): + if placeholder in footer_para.text: + footer_para.text = footer_para.text.replace(placeholder, valor) # Salva em memória file_stream = BytesIO()