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}") logger.error(f"Erro ao carregar template {template.pk}: {e}")
return None return None
# Limpa o corpo do documento mantendo cabeçalho e rodapé # Substitui placeholders no corpo do documento
# Remove todos os parágrafos existentes # Placeholders suportados: {titulo}, {ementa}, {descricao}, {tipo}, {data}
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
titulo = dados.get('titulo', 'Documento') titulo = dados.get('titulo', 'Documento')
descricao = dados.get('descricao', '') descricao = dados.get('descricao', '')
tipo_display = dados.get('tipo_display', tipo_conteudo.title()) tipo_display = dados.get('tipo_display', tipo_conteudo.title())
# Adiciona título from datetime import date
doc.add_heading(titulo, level=0) data_atual = date.today().strftime('%d/%m/%Y')
# Adiciona informações do documento placeholders = {
if descricao: '{titulo}': titulo,
if tipo_conteudo in ['proposicao', 'materia', 'norma']: '{ementa}': descricao,
doc.add_paragraph(f'Ementa: {descricao}') '{descricao}': descricao,
else: '{tipo}': tipo_display,
doc.add_paragraph(f'Assunto: {descricao}') '{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 # Substitui placeholders nas tabelas
doc.add_paragraph(f'Digite o texto do documento abaixo:') for table in doc.tables:
doc.add_paragraph('') for row in table.rows:
doc.add_paragraph('') 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 # Salva em memória
file_stream = BytesIO() file_stream = BytesIO()

Loading…
Cancel
Save