Spaces:
Sleeping
Sleeping
Update src/app.py
Browse files- src/app.py +69 -1
src/app.py
CHANGED
|
@@ -11,6 +11,10 @@ from reportlab.lib.pagesizes import A4
|
|
| 11 |
from reportlab.lib import colors
|
| 12 |
from reportlab.lib.units import cm
|
| 13 |
from reportlab.lib.enums import TA_CENTER, TA_JUSTIFY, TA_LEFT, TA_RIGHT
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
|
| 15 |
# =================================================================================
|
| 16 |
# FUNÇÃO DE GERAÇÃO DE PDF (MODIFICADA PARA ACEITAR DADOS E RETORNAR BYTES)
|
|
@@ -160,6 +164,55 @@ def create_pdf_report(user_data):
|
|
| 160 |
buffer.close()
|
| 161 |
return pdf_bytes
|
| 162 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 163 |
# =================================================================================
|
| 164 |
# INTERFACE DO STREAMLIT
|
| 165 |
# =================================================================================
|
|
@@ -230,4 +283,19 @@ if 'pdf_bytes' in st.session_state and st.session_state.pdf_bytes:
|
|
| 230 |
data=st.session_state.pdf_bytes,
|
| 231 |
file_name=st.session_state.file_name,
|
| 232 |
mime="application/pdf"
|
| 233 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
from reportlab.lib import colors
|
| 12 |
from reportlab.lib.units import cm
|
| 13 |
from reportlab.lib.enums import TA_CENTER, TA_JUSTIFY, TA_LEFT, TA_RIGHT
|
| 14 |
+
from docx import Document
|
| 15 |
+
from docx.shared import Inches
|
| 16 |
+
from io import BytesIO
|
| 17 |
+
from datetime import date
|
| 18 |
|
| 19 |
# =================================================================================
|
| 20 |
# FUNÇÃO DE GERAÇÃO DE PDF (MODIFICADA PARA ACEITAR DADOS E RETORNAR BYTES)
|
|
|
|
| 164 |
buffer.close()
|
| 165 |
return pdf_bytes
|
| 166 |
|
| 167 |
+
def create_docx_report(user_data):
|
| 168 |
+
doc = Document()
|
| 169 |
+
|
| 170 |
+
# Título principal
|
| 171 |
+
doc.add_heading(f"INFORMAÇÃO TÉCNICA - IT_{user_data['it_numero']}", 0)
|
| 172 |
+
|
| 173 |
+
doc.add_heading("SOLICITAÇÃO", level=1)
|
| 174 |
+
doc.add_paragraph(f"Unidade demandante: {user_data['unidade_demandante']}")
|
| 175 |
+
doc.add_paragraph(f"Finalidade da Avaliação: {user_data['finalidade_avaliacao']}")
|
| 176 |
+
|
| 177 |
+
doc.add_heading("IMÓVEL OBJETO", level=1)
|
| 178 |
+
doc.add_paragraph(f"Endereço - SMF: {user_data['endereco_smf']}")
|
| 179 |
+
doc.add_paragraph(f"Bairro - SMF: {user_data['bairro_smf']}")
|
| 180 |
+
doc.add_paragraph(f"Lote Fiscal / Inscrição - SMF: {user_data['lote_fiscal']}")
|
| 181 |
+
doc.add_paragraph(f"Registro do Imóvel: {user_data['registro_imovel']}")
|
| 182 |
+
doc.add_paragraph(f"Finalidade Imóvel - SMF:\n{user_data['finalidade_imovel']}")
|
| 183 |
+
doc.add_paragraph(f"Área Territorial - SMF: {user_data['area_territorial']}")
|
| 184 |
+
doc.add_paragraph(f"Área construída – SMF:\n{user_data['area_construida']}")
|
| 185 |
+
doc.add_paragraph(f"Exercícios em análise:\n{user_data['exercicios_analise']}")
|
| 186 |
+
doc.add_paragraph(f"Valores Venais Guias IPTU (Exercícios): {user_data['valores_venais']}")
|
| 187 |
+
|
| 188 |
+
doc.add_heading("ANÁLISE TÉCNICA PRELIMINAR", level=1)
|
| 189 |
+
doc.add_paragraph(f"Unidade responsável: {user_data['unidade_responsavel']}")
|
| 190 |
+
doc.add_paragraph(f"Técnico responsável: {user_data['tecnico_responsavel']}")
|
| 191 |
+
doc.add_paragraph(f"Método de Avaliação:\n{user_data['metodo_avaliacao']}")
|
| 192 |
+
|
| 193 |
+
doc.add_heading("CONCLUSÃO TÉCNICA", level=1)
|
| 194 |
+
doc.add_paragraph(f"Características desvalorizantes: {user_data['caracteristicas_desvalorizantes']}")
|
| 195 |
+
doc.add_paragraph(f"Conclusão:\n{user_data['conclusao_preliminar']}")
|
| 196 |
+
|
| 197 |
+
doc.add_heading("1. CONSIDERAÇÕES INICIAIS", level=1)
|
| 198 |
+
doc.add_paragraph(user_data['texto_consideracoes'])
|
| 199 |
+
|
| 200 |
+
doc.add_heading("2. ANÁLISE TÉCNICA PRELIMINAR", level=1)
|
| 201 |
+
doc.add_paragraph(user_data['texto_analise'])
|
| 202 |
+
|
| 203 |
+
# Data final
|
| 204 |
+
today = date.today()
|
| 205 |
+
meses = ("janeiro", "fevereiro", "março", "abril", "maio", "junho",
|
| 206 |
+
"julho", "agosto", "setembro", "outubro", "novembro", "dezembro")
|
| 207 |
+
data_formatada = f"Porto Alegre, {today.day} de {meses[today.month - 1]} de {today.year}."
|
| 208 |
+
doc.add_paragraph("\n" + data_formatada)
|
| 209 |
+
|
| 210 |
+
# Salvar o DOCX em memória
|
| 211 |
+
doc_io = BytesIO()
|
| 212 |
+
doc.save(doc_io)
|
| 213 |
+
doc_io.seek(0)
|
| 214 |
+
return doc_io
|
| 215 |
+
|
| 216 |
# =================================================================================
|
| 217 |
# INTERFACE DO STREAMLIT
|
| 218 |
# =================================================================================
|
|
|
|
| 283 |
data=st.session_state.pdf_bytes,
|
| 284 |
file_name=st.session_state.file_name,
|
| 285 |
mime="application/pdf"
|
| 286 |
+
)
|
| 287 |
+
|
| 288 |
+
if st.button("Gerar Relatório em DOCX"):
|
| 289 |
+
with st.spinner("Gerando DOCX..."):
|
| 290 |
+
docx_buffer = create_docx_report(user_data)
|
| 291 |
+
st.session_state.docx_bytes = docx_buffer.read()
|
| 292 |
+
st.session_state.docx_file_name = f"IT_{user_data['it_numero'].replace('/', '_')}.docx"
|
| 293 |
+
|
| 294 |
+
if 'docx_bytes' in st.session_state and st.session_state.docx_bytes:
|
| 295 |
+
st.success("Seu relatório Word está pronto para download!")
|
| 296 |
+
st.download_button(
|
| 297 |
+
label="Baixar DOCX",
|
| 298 |
+
data=st.session_state.docx_bytes,
|
| 299 |
+
file_name=st.session_state.docx_file_name,
|
| 300 |
+
mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document"
|
| 301 |
+
)
|