Update app.py
Browse files
app.py
CHANGED
@@ -9,9 +9,19 @@ from xhtml2pdf import pisa
|
|
9 |
from datetime import datetime
|
10 |
import openai
|
11 |
import logging
|
|
|
|
|
12 |
|
13 |
app = Flask(__name__)
|
14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
# Configuração de logger
|
16 |
logging.basicConfig(level=logging.DEBUG)
|
17 |
|
@@ -187,10 +197,22 @@ def index():
|
|
187 |
|
188 |
|
189 |
|
|
|
|
|
190 |
|
191 |
@app.route("/gerar-pdf", methods=["POST"])
|
192 |
def gerar_pdf():
|
193 |
try:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
194 |
# --- Coleta e conversão dos dados do formulário
|
195 |
capital = float(request.form["capital"])
|
196 |
studio_ret = float(request.form["studio_ret"])
|
@@ -206,7 +228,7 @@ def gerar_pdf():
|
|
206 |
patrimonio_studio = [capital * ((1 + valorizacao / 100) ** ano) for ano in anos]
|
207 |
renda_acumulada_studio = [capital * (((1 + studio_ret / 100) ** (12 * ano)) - 1) for ano in anos]
|
208 |
studio_total = [p + r for p, r in zip(patrimonio_studio, renda_acumulada_studio)]
|
209 |
-
patrimonio_final =
|
210 |
|
211 |
franquia = [capital + (franquia_ret * ano) for ano in anos]
|
212 |
acoes = [capital * ((1 + acoes_ret / 100) ** ano) for ano in anos]
|
@@ -248,23 +270,26 @@ def gerar_pdf():
|
|
248 |
buf.close()
|
249 |
plt.close()
|
250 |
|
251 |
-
# --- Formata a tabela
|
252 |
df_formatado = df.copy()
|
253 |
for col in df.columns:
|
254 |
if col != "Ano":
|
255 |
df_formatado[col] = df_formatado[col].apply(formatar_brl)
|
256 |
tabela_html = df_formatado.to_html(index=False, classes="tabela", border=0)
|
257 |
|
258 |
-
# --- Geração da análise com IA
|
259 |
analise_final_ia = gerar_analise_ia(investimentos_finais, capital, patrimonio_final)
|
260 |
|
|
|
|
|
|
|
261 |
# --- Contexto para o PDF
|
262 |
context = {
|
263 |
"capital": capital,
|
264 |
"grafico": grafico_base64,
|
265 |
"tabela": tabela_html,
|
266 |
"analise_final": analise_final_ia,
|
267 |
-
"data_hoje":
|
268 |
}
|
269 |
|
270 |
# --- Renderiza e retorna o PDF
|
@@ -279,6 +304,5 @@ def gerar_pdf():
|
|
279 |
return "Erro interno ao gerar o PDF", 500
|
280 |
|
281 |
|
282 |
-
|
283 |
if __name__ == "__main__":
|
284 |
app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 7860)), debug=True)
|
|
|
9 |
from datetime import datetime
|
10 |
import openai
|
11 |
import logging
|
12 |
+
import locale
|
13 |
+
from datetime import datetime
|
14 |
|
15 |
app = Flask(__name__)
|
16 |
|
17 |
+
# Setar locale para português do Brasil
|
18 |
+
try:
|
19 |
+
locale.setlocale(locale.LC_TIME, "pt_BR.UTF-8")
|
20 |
+
except locale.Error:
|
21 |
+
# fallback caso o locale não esteja instalado no servidor
|
22 |
+
locale.setlocale(locale.LC_TIME, "pt_BR")
|
23 |
+
|
24 |
+
|
25 |
# Configuração de logger
|
26 |
logging.basicConfig(level=logging.DEBUG)
|
27 |
|
|
|
197 |
|
198 |
|
199 |
|
200 |
+
import locale
|
201 |
+
from datetime import datetime
|
202 |
|
203 |
@app.route("/gerar-pdf", methods=["POST"])
|
204 |
def gerar_pdf():
|
205 |
try:
|
206 |
+
# --- Configurar locale para português do Brasil (formatação de mês em pt)
|
207 |
+
try:
|
208 |
+
locale.setlocale(locale.LC_TIME, "pt_BR.UTF-8")
|
209 |
+
except locale.Error:
|
210 |
+
try:
|
211 |
+
locale.setlocale(locale.LC_TIME, "pt_BR")
|
212 |
+
except locale.Error:
|
213 |
+
# Se falhar, continua com o locale padrão (possivelmente inglês)
|
214 |
+
pass
|
215 |
+
|
216 |
# --- Coleta e conversão dos dados do formulário
|
217 |
capital = float(request.form["capital"])
|
218 |
studio_ret = float(request.form["studio_ret"])
|
|
|
228 |
patrimonio_studio = [capital * ((1 + valorizacao / 100) ** ano) for ano in anos]
|
229 |
renda_acumulada_studio = [capital * (((1 + studio_ret / 100) ** (12 * ano)) - 1) for ano in anos]
|
230 |
studio_total = [p + r for p, r in zip(patrimonio_studio, renda_acumulada_studio)]
|
231 |
+
patrimonio_final = studio_total[-1]
|
232 |
|
233 |
franquia = [capital + (franquia_ret * ano) for ano in anos]
|
234 |
acoes = [capital * ((1 + acoes_ret / 100) ** ano) for ano in anos]
|
|
|
270 |
buf.close()
|
271 |
plt.close()
|
272 |
|
273 |
+
# --- Formata a tabela (função formatar_brl deve estar definida)
|
274 |
df_formatado = df.copy()
|
275 |
for col in df.columns:
|
276 |
if col != "Ano":
|
277 |
df_formatado[col] = df_formatado[col].apply(formatar_brl)
|
278 |
tabela_html = df_formatado.to_html(index=False, classes="tabela", border=0)
|
279 |
|
280 |
+
# --- Geração da análise com IA (função gerar_analise_ia deve estar definida)
|
281 |
analise_final_ia = gerar_analise_ia(investimentos_finais, capital, patrimonio_final)
|
282 |
|
283 |
+
# --- Formatar data para português
|
284 |
+
data_hoje = datetime.now().strftime("São Paulo, %d de %B de %Y")
|
285 |
+
|
286 |
# --- Contexto para o PDF
|
287 |
context = {
|
288 |
"capital": capital,
|
289 |
"grafico": grafico_base64,
|
290 |
"tabela": tabela_html,
|
291 |
"analise_final": analise_final_ia,
|
292 |
+
"data_hoje": data_hoje
|
293 |
}
|
294 |
|
295 |
# --- Renderiza e retorna o PDF
|
|
|
304 |
return "Erro interno ao gerar o PDF", 500
|
305 |
|
306 |
|
|
|
307 |
if __name__ == "__main__":
|
308 |
app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 7860)), debug=True)
|