|
|
@@ -1,22 +1,34 @@
|
|
|
from django.shortcuts import render, redirect, get_object_or_404
|
|
|
+from decimal import Decimal, InvalidOperation
|
|
|
+import logging
|
|
|
+import re
|
|
|
|
|
|
from accounts import models
|
|
|
-from .models import Movimiento, Cuenta
|
|
|
+from .models import Movimiento, Cuenta, MovimientoFrecuente
|
|
|
from .forms import MovimientoForm, FiltroForm, CuentaForm
|
|
|
from django.contrib.auth.decorators import login_required
|
|
|
from django.contrib import messages
|
|
|
from django.utils.timezone import now
|
|
|
|
|
|
+logger = logging.getLogger(__name__)
|
|
|
+
|
|
|
@login_required
|
|
|
def dashboard(request):
|
|
|
movimientos = Movimiento.objects.filter(usuario=request.user).order_by('-fecha')
|
|
|
|
|
|
favoritas = Cuenta.objects.filter(favorita='True')
|
|
|
|
|
|
+ frecuentes = MovimientoFrecuente.objects.filter(usuario=request.user)
|
|
|
+
|
|
|
+ logger.warning(f"Frecuentes: {frecuentes}")
|
|
|
+ logger.warning(f"Monto: {frecuentes[0].monto}")
|
|
|
+ # Aplicar filtros si se han proporcionado
|
|
|
+
|
|
|
return render(request, 'dashboard.html', {
|
|
|
'movimientos': movimientos,
|
|
|
'user': request.user,
|
|
|
'favoritas': favoritas,
|
|
|
+ 'frecuentes': frecuentes,
|
|
|
})
|
|
|
|
|
|
# Movimientos
|
|
|
@@ -36,9 +48,34 @@ def agregar_movimiento(request):
|
|
|
movimiento.cuenta_origen.save()
|
|
|
movimiento.cuenta_destino.saldo += movimiento.monto
|
|
|
movimiento.cuenta_destino.save()
|
|
|
+ messages.success(request, 'Movimiento registrado con éxito.')
|
|
|
+
|
|
|
return redirect('dashboard')
|
|
|
else:
|
|
|
- form = MovimientoForm()
|
|
|
+ datos_iniciales = {}
|
|
|
+ origen = request.GET.get('origen')
|
|
|
+ destino = request.GET.get('destino')
|
|
|
+ monto_raw = request.GET.get('monto')
|
|
|
+
|
|
|
+ try:
|
|
|
+ if origen:
|
|
|
+ datos_iniciales['cuenta_origen'] = Cuenta.objects.get(nombre=request.GET['origen'], usuario=request.user)
|
|
|
+ if destino:
|
|
|
+ datos_iniciales['cuenta_destino'] = Cuenta.objects.get(nombre=request.GET['destino'], usuario=request.user)
|
|
|
+ if monto_raw:
|
|
|
+ # Reemplaza coma por punto, elimina símbolos y espacios
|
|
|
+ monto_normalizado = re.sub(r'[^\d,.-]', '', monto_raw).replace(',', '.')
|
|
|
+ try:
|
|
|
+ datos_iniciales['monto'] = str(Decimal(monto_normalizado).quantize(Decimal('0.01')))
|
|
|
+ except InvalidOperation:
|
|
|
+ pass # Ignorar monto malformado
|
|
|
+ logger.warning(f"monto: {datos_iniciales['monto']}")
|
|
|
+ except (Cuenta.DoesNotExist, InvalidOperation):
|
|
|
+ pass
|
|
|
+
|
|
|
+ logger.warning(f"datos iniciales: {datos_iniciales}")
|
|
|
+
|
|
|
+ form = MovimientoForm(initial=datos_iniciales)
|
|
|
form.fields['cuenta_origen'].queryset = Cuenta.objects.filter(usuario=request.user)
|
|
|
form.fields['cuenta_destino'].queryset = Cuenta.objects.filter(usuario=request.user)
|
|
|
return render(request, 'agregar_movimiento.html', {'form': form})
|