Coverage for app.py: 38%

88 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2024-11-30 23:17 +0000

1from flask import Flask, render_template, request, redirect, url_for, session 

2from classes.user_manager import UserManager 

3from classes.account_manager import AccountManager 

4from classes.transaction_manager import TransactionManager 

5from classes.currency_manager import CurrencyManager 

6from decimal import Decimal 

7 

8app = Flask(__name__) 

9app.secret_key = 'your_secret_key' 

10 

11@app.route('/') 

12def index(): 

13 if 'user_id' in session: 

14 return redirect(url_for('dashboard')) 

15 return render_template('login.html') 

16 

17@app.route('/login', methods=['POST']) 

18def login(): 

19 if request.method == 'POST': 

20 username = request.form['username'] 

21 password = request.form['password'] 

22 

23 try: 

24 user = UserManager.verify_credentials(username, password) 

25 if user: 

26 session['user_id'] = user.UserId 

27 return redirect(url_for('dashboard')) 

28 return render_template('login.html', error='Credenciales incorrectas. Inténtelo de nuevo.') 

29 except Exception as e: 

30 print(e) 

31 return render_template('login.html', error='Error de conexión. Inténtelo de nuevo más tarde.') 

32 

33@app.route('/dashboard') 

34def dashboard(): 

35 if 'user_id' in session: 

36 try: 

37 account = AccountManager.get_account_balances(session['user_id']) 

38 if account: 

39 return render_template('dashboard.html', 

40 saldo_usd=account.BalanceUSD, 

41 saldo_eur=account.BalanceEUR, 

42 saldo_pen=account.BalancePEN) 

43 return render_template('dashboard.html', 

44 error='No se encontró información de cuenta para este usuario.') 

45 except Exception as e: 

46 print(e) 

47 return render_template('dashboard.html', 

48 error='Error al recuperar información de la cuenta.') 

49 return redirect(url_for('index')) 

50 

51@app.route('/logout') 

52def logout(): 

53 session.pop('user_id', None) 

54 return redirect(url_for('index')) 

55 

56@app.route('/cotizar', methods=['GET', 'POST']) 

57def cotizar(): 

58 if request.method == 'POST': 

59 try: 

60 monto = float(request.form['monto']) 

61 divisa_origen = request.form['divisa_origen'] 

62 divisa_destino = request.form['divisa_destino'] 

63 

64 tasa_conversion, monto_convertido = CurrencyManager.convert_currency( 

65 monto, divisa_origen, divisa_destino) 

66 

67 if tasa_conversion and monto_convertido: 

68 return render_template('cotizar_resultado.html', 

69 monto=monto, 

70 divisa_origen=divisa_origen, 

71 divisa_destino=divisa_destino, 

72 monto_convertido=monto_convertido) 

73 return render_template('cotizar.html', 

74 error='Las divisas seleccionadas no tienen una tasa de conversión definida.') 

75 except Exception as e: 

76 print(e) 

77 return render_template('cotizar.html', 

78 error='Error al realizar la cotización.') 

79 

80 return render_template('cotizar.html') 

81 

82@app.route('/conversion', methods=['GET', 'POST']) 

83def conversion(): 

84 if request.method == 'POST': 

85 try: 

86 monto = Decimal(request.form['monto']) 

87 divisa_origen = request.form['divisa_origen'] 

88 divisa_destino = request.form['divisa_destino'] 

89 

90 tasa_conversion, monto_convertido = CurrencyManager.convert_currency( 

91 monto, divisa_origen, divisa_destino) 

92 

93 if not (tasa_conversion and monto_convertido): 

94 return render_template('conversion.html', 

95 error='Las divisas seleccionadas no tienen una tasa de conversión definida.') 

96 

97 # Actualizar saldos 

98 if AccountManager.update_balances( 

99 session['user_id'], divisa_origen, divisa_destino, monto, monto_convertido): 

100 

101 # Registrar transacción 

102 TransactionManager.register_transaction( 

103 session['user_id'], divisa_origen, divisa_destino, 

104 monto, tasa_conversion, monto_convertido) 

105 

106 return render_template('conversion_resultado.html', 

107 monto=monto, 

108 divisa_origen=divisa_origen, 

109 divisa_destino=divisa_destino, 

110 monto_convertido=monto_convertido) 

111 

112 return render_template('conversion.html', 

113 error='Saldo insuficiente para realizar la conversión.') 

114 

115 except Exception as e: 

116 print(f"Error inesperado: {e}") 

117 return render_template('conversion.html', 

118 error='Error al realizar la conversión.') 

119 

120 return render_template('conversion.html') 

121 

122@app.route('/historial') 

123def historial(): 

124 if 'user_id' not in session: 

125 return redirect(url_for('index')) 

126 

127 try: 

128 transactions = TransactionManager.get_user_transactions(session['user_id']) 

129 return render_template('historial.html', transactions=transactions) 

130 except Exception as e: 

131 print(f"Error inesperado: {e}") 

132 return render_template('historial.html', 

133 error='Error al cargar el historial de transacciones.') 

134 

135if __name__ == '__main__': 

136 app.run(debug=True)