|
|
|
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': |
|
|
|
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() |
|
|
|
|
|
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(): |
|
|
|
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) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|