flowise1 / app.py
Persano's picture
Update app.py
4250b25 verified
raw
history blame
4.74 kB
import os
os.environ['FONTCONFIG_PATH'] = '/tmp/fontconfig'
os.makedirs('/tmp/fontconfig', exist_ok=True)
from flask import Flask, request, render_template, send_file
import io
from xhtml2pdf import pisa
import pandas as pd
import matplotlib.pyplot as plt
import base64
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
# Extrair dados do formulário
capital = float(request.form['capital'])
studio_ret = float(request.form['studio_ret'])
valorizacao = float(request.form['valorizacao'])
franquia_ret = float(request.form['franquia_ret'])
acoes_ret = float(request.form['acoes_ret'])
renda_fixa = float(request.form['renda_fixa'])
inflacao = float(request.form['inflacao'])
# Simulação fictícia
anos = list(range(1, 6))
resultados = {
"Studio": [capital * (1 + studio_ret/100)**(12 * ano/12) for ano in anos],
"Imóvel": [capital * (1 + valorizacao/100)**ano for ano in anos],
"Franquia": [capital + franquia_ret * ano for ano in anos],
"Ações": [capital * (1 + acoes_ret/100)**ano for ano in anos],
"Renda Fixa": [capital * (1 + renda_fixa/100)**ano for ano in anos]
}
df = pd.DataFrame(resultados, index=[f'{ano}º ano' for ano in anos])
tabela = df.to_html(classes='table', float_format='R$ {:,.2f}'.format)
investimento_mais_valorizado = df.iloc[-1].idxmax()
valor_mais_alto = df.iloc[-1].max()
# Gráfico
fig, ax = plt.subplots()
df.plot(ax=ax)
ax.set_ylabel("Valor (R$)")
ax.set_title("Comparativo de Investimentos")
img = io.BytesIO()
plt.tight_layout()
plt.savefig(img, format='png')
img.seek(0)
grafico = base64.b64encode(img.getvalue()).decode()
return render_template("index.html",
tabela=tabela,
grafico=grafico,
investimento_mais_valorizado=investimento_mais_valorizado,
valor_mais_alto=valor_mais_alto,
capital=capital,
studio_ret=studio_ret,
valorizacao=valorizacao,
franquia_ret=franquia_ret,
acoes_ret=acoes_ret,
renda_fixa=renda_fixa,
inflacao=inflacao,
gerar_pdf=False)
return render_template("index.html")
@app.route('/download_pdf', methods=['POST'])
def download_pdf():
# Reutilize os mesmos dados do formulário para refazer a simulação
capital = float(request.form['capital'])
studio_ret = float(request.form['studio_ret'])
valorizacao = float(request.form['valorizacao'])
franquia_ret = float(request.form['franquia_ret'])
acoes_ret = float(request.form['acoes_ret'])
renda_fixa = float(request.form['renda_fixa'])
inflacao = float(request.form['inflacao'])
anos = list(range(1, 6))
resultados = {
"Studio": [capital * (1 + studio_ret/100)**(12 * ano/12) for ano in anos],
"Imóvel": [capital * (1 + valorizacao/100)**ano for ano in anos],
"Franquia": [capital + franquia_ret * ano for ano in anos],
"Ações": [capital * (1 + acoes_ret/100)**ano for ano in anos],
"Renda Fixa": [capital * (1 + renda_fixa/100)**ano for ano in anos]
}
df = pd.DataFrame(resultados, index=[f'{ano}º ano' for ano in anos])
tabela = df.to_html(classes='table', float_format='R$ {:,.2f}'.format)
investimento_mais_valorizado = df.iloc[-1].idxmax()
valor_mais_alto = df.iloc[-1].max()
html = render_template("index.html",
tabela=tabela,
grafico="",
investimento_mais_valorizado=investimento_mais_valorizado,
valor_mais_alto=valor_mais_alto,
capital=capital,
studio_ret=studio_ret,
valorizacao=valorizacao,
franquia_ret=franquia_ret,
acoes_ret=acoes_ret,
renda_fixa=renda_fixa,
inflacao=inflacao,
gerar_pdf=True)
pdf = io.BytesIO()
pisa.CreatePDF(io.StringIO(html), dest=pdf)
pdf.seek(0)
return send_file(pdf, download_name="relatorio_simulacao.pdf", as_attachment=True)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860, debug=True)