Persano commited on
Commit
23e60da
·
verified ·
1 Parent(s): 022a2c8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -45
app.py CHANGED
@@ -7,19 +7,12 @@ from weasyprint import HTML
7
 
8
  app = Flask(__name__)
9
 
 
10
  def gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret, renda_fixa, inflacao=0, anos=10):
11
  anos_lista = list(range(1, anos + 1))
12
- studio = []
13
- imovel = []
14
- franquia = []
15
- acoes = []
16
- renda_fixa_arr = []
17
-
18
- cap_studio = capital
19
- cap_imovel = capital
20
- cap_franquia = capital
21
- cap_acoes = capital
22
- cap_renda_fixa = capital
23
 
24
  for ano in anos_lista:
25
  inf_cum = (1 + inflacao / 100) ** ano
@@ -44,13 +37,16 @@ def gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret, r
44
  'Renda Fixa': renda_fixa_arr
45
  })
46
 
 
47
  def plotar_grafico(df):
48
  plt.style.use('ggplot')
49
  fig, ax = plt.subplots(figsize=(10, 6))
50
  cores = ['#2c3e50', '#16a085', '#2980b9', '#8e44ad', '#d35400']
 
51
  for i, col in enumerate(df.columns[1:]):
52
  estilo = '--' if col.lower() == 'acoes' else '-'
53
  ax.plot(df['Ano'], df[col], label=col, color=cores[i], linewidth=2, linestyle=estilo)
 
54
  ax.set_title('Comparação de Investimentos (valores corrigidos pela inflação)', fontsize=14, fontweight='bold')
55
  ax.set_xlabel('Ano')
56
  ax.set_ylabel('Valor (R$)')
@@ -64,70 +60,63 @@ def plotar_grafico(df):
64
  img.seek(0)
65
  return base64.b64encode(img.read()).decode()
66
 
 
67
  @app.route('/', methods=['GET', 'POST'])
68
  def index():
69
  if request.method == 'POST':
70
  try:
71
- capital = float(request.form['capital'])
72
- studio_ret = float(request.form['studio_ret'])
73
- valorizacao = float(request.form['valorizacao'])
74
- franquia_ret = float(request.form['franquia_ret'])
75
- acoes_ret = float(request.form['acoes_ret'])
76
- renda_fixa = float(request.form['renda_fixa'])
77
- inflacao = float(request.form['inflacao'])
78
-
79
- df = gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret, renda_fixa, inflacao)
80
  grafico = plotar_grafico(df)
81
  tabela = df.to_html(classes="table table-striped table-hover", index=False)
82
- return render_template("index.html", grafico=grafico, tabela=tabela,
83
- capital=capital, studio_ret=studio_ret,
84
- valorizacao=valorizacao, franquia_ret=franquia_ret,
85
- acoes_ret=acoes_ret, renda_fixa=renda_fixa, inflacao=inflacao)
86
  except Exception as e:
87
  return f"Erro: {e}"
 
88
  return render_template("index.html")
89
 
 
90
  @app.route('/download_pdf', methods=['POST'])
91
  def download_pdf():
92
  try:
93
- capital = float(request.form['capital'])
94
- studio_ret = float(request.form['studio_ret'])
95
- valorizacao = float(request.form['valorizacao'])
96
- franquia_ret = float(request.form['franquia_ret'])
97
- acoes_ret = float(request.form['acoes_ret'])
98
- renda_fixa = float(request.form['renda_fixa'])
99
- inflacao = float(request.form['inflacao'])
100
-
101
- df = gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret, renda_fixa, inflacao)
102
  grafico = plotar_grafico(df)
103
 
104
- ultimo_ano = df['Ano'].iloc[-1]
105
  valores_finais = df.iloc[-1, 1:]
106
- nome_mais_alto = valores_finais.idxmax()
107
  valor_mais_alto = valores_finais.max()
108
  valor_mais_alto_str = f"{valor_mais_alto:,.2f}".replace(',', 'X').replace('.', ',').replace('X', '.')
109
 
110
  html = render_template("relatorio.html",
111
  grafico=grafico,
112
  tabela=df.to_html(classes="table table-striped table-hover", index=False),
113
- capital=capital,
114
- studio_ret=studio_ret,
115
- valorizacao=valorizacao,
116
- franquia_ret=franquia_ret,
117
- acoes_ret=acoes_ret,
118
- renda_fixa=renda_fixa,
119
- inflacao=inflacao,
120
- investimento_mais_valorizado=nome_mais_alto,
121
  valor_mais_alto=valor_mais_alto_str,
122
- df=df)
 
123
 
124
  pdf = HTML(string=html).write_pdf()
125
  response = make_response(pdf)
126
  response.headers['Content-Type'] = 'application/pdf'
127
  response.headers['Content-Disposition'] = 'attachment; filename=relatorio_simulacao.pdf'
128
  return response
 
129
  except Exception as e:
130
- return f"Erro: {e}"
131
 
 
132
  if __name__ == '__main__':
133
  app.run(debug=True, port=7860)
 
 
7
 
8
  app = Flask(__name__)
9
 
10
+ # Função principal de simulação
11
  def gerar_simulacao(capital, studio_ret, valorizacao, franquia_ret, acoes_ret, renda_fixa, inflacao=0, anos=10):
12
  anos_lista = list(range(1, anos + 1))
13
+ studio, imovel, franquia, acoes, renda_fixa_arr = [], [], [], [], []
14
+
15
+ cap_studio = cap_imovel = cap_franquia = cap_acoes = cap_renda_fixa = capital
 
 
 
 
 
 
 
 
16
 
17
  for ano in anos_lista:
18
  inf_cum = (1 + inflacao / 100) ** ano
 
37
  'Renda Fixa': renda_fixa_arr
38
  })
39
 
40
+ # Geração do gráfico como imagem base64
41
  def plotar_grafico(df):
42
  plt.style.use('ggplot')
43
  fig, ax = plt.subplots(figsize=(10, 6))
44
  cores = ['#2c3e50', '#16a085', '#2980b9', '#8e44ad', '#d35400']
45
+
46
  for i, col in enumerate(df.columns[1:]):
47
  estilo = '--' if col.lower() == 'acoes' else '-'
48
  ax.plot(df['Ano'], df[col], label=col, color=cores[i], linewidth=2, linestyle=estilo)
49
+
50
  ax.set_title('Comparação de Investimentos (valores corrigidos pela inflação)', fontsize=14, fontweight='bold')
51
  ax.set_xlabel('Ano')
52
  ax.set_ylabel('Valor (R$)')
 
60
  img.seek(0)
61
  return base64.b64encode(img.read()).decode()
62
 
63
+ # Página inicial com formulário e simulação
64
  @app.route('/', methods=['GET', 'POST'])
65
  def index():
66
  if request.method == 'POST':
67
  try:
68
+ # Coleta dos dados do formulário
69
+ dados = {k: float(request.form[k]) for k in [
70
+ 'capital', 'studio_ret', 'valorizacao',
71
+ 'franquia_ret', 'acoes_ret', 'renda_fixa', 'inflacao'
72
+ ]}
73
+
74
+ df = gerar_simulacao(**dados)
 
 
75
  grafico = plotar_grafico(df)
76
  tabela = df.to_html(classes="table table-striped table-hover", index=False)
77
+
78
+ return render_template("index.html", grafico=grafico, tabela=tabela, **dados)
79
+
 
80
  except Exception as e:
81
  return f"Erro: {e}"
82
+
83
  return render_template("index.html")
84
 
85
+ # Geração e download do PDF
86
  @app.route('/download_pdf', methods=['POST'])
87
  def download_pdf():
88
  try:
89
+ dados = {k: float(request.form[k]) for k in [
90
+ 'capital', 'studio_ret', 'valorizacao',
91
+ 'franquia_ret', 'acoes_ret', 'renda_fixa', 'inflacao'
92
+ ]}
93
+
94
+ df = gerar_simulacao(**dados)
 
 
 
95
  grafico = plotar_grafico(df)
96
 
 
97
  valores_finais = df.iloc[-1, 1:]
98
+ nome_mais_valorizado = valores_finais.idxmax()
99
  valor_mais_alto = valores_finais.max()
100
  valor_mais_alto_str = f"{valor_mais_alto:,.2f}".replace(',', 'X').replace('.', ',').replace('X', '.')
101
 
102
  html = render_template("relatorio.html",
103
  grafico=grafico,
104
  tabela=df.to_html(classes="table table-striped table-hover", index=False),
105
+ investimento_mais_valorizado=nome_mais_valorizado,
 
 
 
 
 
 
 
106
  valor_mais_alto=valor_mais_alto_str,
107
+ df=df,
108
+ **dados)
109
 
110
  pdf = HTML(string=html).write_pdf()
111
  response = make_response(pdf)
112
  response.headers['Content-Type'] = 'application/pdf'
113
  response.headers['Content-Disposition'] = 'attachment; filename=relatorio_simulacao.pdf'
114
  return response
115
+
116
  except Exception as e:
117
+ return f"Erro ao gerar PDF: {e}"
118
 
119
+ # Execução local
120
  if __name__ == '__main__':
121
  app.run(debug=True, port=7860)
122
+