Spaces:
Sleeping
Sleeping
Update src/app.py
Browse files- src/app.py +14 -54
src/app.py
CHANGED
|
@@ -16,8 +16,6 @@ from docx.shared import Inches, Pt, Cm
|
|
| 16 |
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
| 17 |
from io import BytesIO
|
| 18 |
import os
|
| 19 |
-
from datetime import date
|
| 20 |
-
|
| 21 |
|
| 22 |
# =================================================================================
|
| 23 |
# FUNÇÃO DE GERAÇÃO DE PDF (MODIFICADA PARA ACEITAR DADOS E RETORNAR BYTES)
|
|
@@ -170,8 +168,10 @@ def create_pdf_report(user_data):
|
|
| 170 |
def create_docx_report(user_data):
|
| 171 |
doc = Document()
|
| 172 |
|
| 173 |
-
# ---
|
| 174 |
-
|
|
|
|
|
|
|
| 175 |
table.autofit = False
|
| 176 |
widths = [Inches(2), Inches(2), Inches(4)] # Ajustar larguras das colunas
|
| 177 |
for i, width in enumerate(widths):
|
|
@@ -202,19 +202,18 @@ def create_docx_report(user_data):
|
|
| 202 |
font.bold = True
|
| 203 |
paragraph.alignment = WD_ALIGN_PARAGRAPH.RIGHT
|
| 204 |
|
| 205 |
-
# ---
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
p_proc = doc.add_paragraph(f"PROCESSO {user_data.get('processo_numero','')}")
|
| 210 |
-
p_proc.alignment = WD_ALIGN_PARAGRAPH.RIGHT
|
| 211 |
-
run_proc = p_proc.runs[0]
|
| 212 |
run_proc.font.size = Pt(10)
|
| 213 |
run_proc.font.bold = True
|
|
|
|
| 214 |
|
| 215 |
-
|
|
|
|
| 216 |
|
| 217 |
-
#
|
| 218 |
def add_table_from_data(data, col_widths_cm=[4.5, 10]):
|
| 219 |
table = doc.add_table(rows=0, cols=2)
|
| 220 |
table.style = 'Table Grid'
|
|
@@ -239,9 +238,7 @@ def create_docx_report(user_data):
|
|
| 239 |
doc.add_paragraph() # espaço depois da tabela
|
| 240 |
return table
|
| 241 |
|
| 242 |
-
|
| 243 |
-
|
| 244 |
-
# --- Conteúdo do relatório ---
|
| 245 |
|
| 246 |
# Título principal centralizado
|
| 247 |
title = doc.add_paragraph(f"INFORMAÇÃO TÉCNICA\nIT_{user_data.get('it_numero','')}")
|
|
@@ -257,44 +254,7 @@ def create_docx_report(user_data):
|
|
| 257 |
]
|
| 258 |
add_table_from_data(solicitacao_data)
|
| 259 |
|
| 260 |
-
#
|
| 261 |
-
doc.add_heading("• IMÓVEL OBJETO", level=2)
|
| 262 |
-
imovel_data = [
|
| 263 |
-
('Endereço - SMF:', user_data.get('endereco_smf','')),
|
| 264 |
-
('Bairro (Setor/Quarteirão) - SMF:', user_data.get('bairro_smf','')),
|
| 265 |
-
('Lote Fiscal / Inscrição - SMF:', user_data.get('lote_fiscal','')),
|
| 266 |
-
('Registro imóvel nº - SMF:', user_data.get('registro_imovel','')),
|
| 267 |
-
('Finalidade Imóvel - SMF:', user_data.get('finalidade_imovel','')),
|
| 268 |
-
('Área Territorial - SMF:', user_data.get('area_territorial','')),
|
| 269 |
-
('Área construída – SMF:', user_data.get('area_construida','')),
|
| 270 |
-
('Exercícios em análise:', user_data.get('exercicios_analise','')),
|
| 271 |
-
('Valores Venais Guias IPTU (Exercícios):', user_data.get('valores_venais',''))
|
| 272 |
-
]
|
| 273 |
-
add_table_from_data(imovel_data)
|
| 274 |
-
|
| 275 |
-
# Página 2 - Análise técnica preliminar
|
| 276 |
-
doc.add_heading("• ANÁLISE TÉCNICA PRELIMINAR", level=2)
|
| 277 |
-
analise_data = [
|
| 278 |
-
('Unidade responsável:', user_data.get('unidade_responsavel','')),
|
| 279 |
-
('Técnico responsável:', user_data.get('tecnico_responsavel','')),
|
| 280 |
-
('Método de Avaliação (ABNT NBR 14.653-2):', user_data.get('metodo_avaliacao',''))
|
| 281 |
-
]
|
| 282 |
-
add_table_from_data(analise_data)
|
| 283 |
-
|
| 284 |
-
# Conclusão técnica
|
| 285 |
-
doc.add_heading("• CONCLUSÃO TÉCNICA", level=2)
|
| 286 |
-
conclusao_data = [
|
| 287 |
-
('Características particularmente\ndesvalorizantes:', user_data.get('caracteristicas_desvalorizantes','')),
|
| 288 |
-
('Conclusão:', user_data.get('conclusao_preliminar',''))
|
| 289 |
-
]
|
| 290 |
-
add_table_from_data(conclusao_data)
|
| 291 |
-
|
| 292 |
-
# Textos longos
|
| 293 |
-
doc.add_heading("1. CONSIDERAÇÕES INICIAIS", level=2)
|
| 294 |
-
doc.add_paragraph(user_data.get('texto_consideracoes',''))
|
| 295 |
-
|
| 296 |
-
doc.add_heading("2. ANÁLISE TÉCNICA PRELIMINAR", level=2)
|
| 297 |
-
doc.add_paragraph(user_data.get('texto_analise',''))
|
| 298 |
|
| 299 |
# Data final
|
| 300 |
today = date.today()
|
|
|
|
| 16 |
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
| 17 |
from io import BytesIO
|
| 18 |
import os
|
|
|
|
|
|
|
| 19 |
|
| 20 |
# =================================================================================
|
| 21 |
# FUNÇÃO DE GERAÇÃO DE PDF (MODIFICADA PARA ACEITAR DADOS E RETORNAR BYTES)
|
|
|
|
| 168 |
def create_docx_report(user_data):
|
| 169 |
doc = Document()
|
| 170 |
|
| 171 |
+
# --- Adicionar o cabeçalho que se repetirá em cada página ---
|
| 172 |
+
section = doc.sections[0]
|
| 173 |
+
header = section.header
|
| 174 |
+
table = header.add_table(rows=1, cols=3)
|
| 175 |
table.autofit = False
|
| 176 |
widths = [Inches(2), Inches(2), Inches(4)] # Ajustar larguras das colunas
|
| 177 |
for i, width in enumerate(widths):
|
|
|
|
| 202 |
font.bold = True
|
| 203 |
paragraph.alignment = WD_ALIGN_PARAGRAPH.RIGHT
|
| 204 |
|
| 205 |
+
# --- Número do processo no cabeçalho ---
|
| 206 |
+
cell_proc = table.cell(0, 2) # Número do processo na terceira coluna
|
| 207 |
+
paragraph_proc = cell_proc.paragraphs[0]
|
| 208 |
+
run_proc = paragraph_proc.add_run(f"PROCESSO {user_data.get('processo_numero', '')}")
|
|
|
|
|
|
|
|
|
|
| 209 |
run_proc.font.size = Pt(10)
|
| 210 |
run_proc.font.bold = True
|
| 211 |
+
paragraph_proc.alignment = WD_ALIGN_PARAGRAPH.RIGHT
|
| 212 |
|
| 213 |
+
# --- Adicionar um parágrafo vazio para dar espaço após os logos e o cabeçalho ---
|
| 214 |
+
doc.add_paragraph()
|
| 215 |
|
| 216 |
+
# Função auxiliar para criar tabelas simples
|
| 217 |
def add_table_from_data(data, col_widths_cm=[4.5, 10]):
|
| 218 |
table = doc.add_table(rows=0, cols=2)
|
| 219 |
table.style = 'Table Grid'
|
|
|
|
| 238 |
doc.add_paragraph() # espaço depois da tabela
|
| 239 |
return table
|
| 240 |
|
| 241 |
+
# --- Continue com o resto do conteúdo do relatório ---
|
|
|
|
|
|
|
| 242 |
|
| 243 |
# Título principal centralizado
|
| 244 |
title = doc.add_paragraph(f"INFORMAÇÃO TÉCNICA\nIT_{user_data.get('it_numero','')}")
|
|
|
|
| 254 |
]
|
| 255 |
add_table_from_data(solicitacao_data)
|
| 256 |
|
| 257 |
+
# Continue com as outras páginas conforme sua necessidade...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 258 |
|
| 259 |
# Data final
|
| 260 |
today = date.today()
|