Browse Source

Fix(Template): Mantém corpo do template ao criar documentos

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 <brunojp.rangel@gmail.com>
pull/3858/head
rangelbruno 8 months ago
parent
commit
17ece5e1b4
  1. 60
      sapl/utils_template.py

60
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()

Loading…
Cancel
Save