Coverage for app.py: 38%
88 statements
« prev ^ index » next coverage.py v7.6.8, created at 2024-11-30 23:18 +0000
« prev ^ index » next coverage.py v7.6.8, created at 2024-11-30 23:18 +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
8app = Flask(__name__)
9app.secret_key = 'your_secret_key'
11@app.route('/')
12def index():
13 if 'user_id' in session:
14 return redirect(url_for('dashboard'))
15 return render_template('login.html')
17@app.route('/login', methods=['POST'])
18def login():
19 if request.method == 'POST':
20 username = request.form['username']
21 password = request.form['password']
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.')
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'))
51@app.route('/logout')
52def logout():
53 session.pop('user_id', None)
54 return redirect(url_for('index'))
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']
64 tasa_conversion, monto_convertido = CurrencyManager.convert_currency(
65 monto, divisa_origen, divisa_destino)
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.')
80 return render_template('cotizar.html')
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']
90 tasa_conversion, monto_convertido = CurrencyManager.convert_currency(
91 monto, divisa_origen, divisa_destino)
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.')
97 # Actualizar saldos
98 if AccountManager.update_balances(
99 session['user_id'], divisa_origen, divisa_destino, monto, monto_convertido):
101 # Registrar transacción
102 TransactionManager.register_transaction(
103 session['user_id'], divisa_origen, divisa_destino,
104 monto, tasa_conversion, monto_convertido)
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)
112 return render_template('conversion.html',
113 error='Saldo insuficiente para realizar la conversión.')
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.')
120 return render_template('conversion.html')
122@app.route('/historial')
123def historial():
124 if 'user_id' not in session:
125 return redirect(url_for('index'))
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.')
135if __name__ == '__main__':
136 app.run(debug=True)