| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- from django.shortcuts import render, redirect, get_object_or_404
- from accounts import models
- from .models import Movimiento, Cuenta
- from .forms import MovimientoForm, FiltroForm, CuentaForm
- from django.contrib.auth.decorators import login_required
- @login_required
- def dashboard(request):
- movimientos = Movimiento.objects.filter(usuario=request.user).order_by('fecha')
- favoritas = Cuenta.objects.filter(favorita='True')
- return render(request, 'dashboard.html', {
- 'movimientos': movimientos,
- 'user': request.user,
- 'favoritas': favoritas,
- })
- # Movimientos
- @login_required
- def agregar_movimiento(request):
- if request.method == 'POST':
- form = MovimientoForm(request.POST)
- form.fields['cuenta_origen'].queryset = Cuenta.objects.filter(usuario=request.user)
- form.fields['cuenta_destino'].queryset = Cuenta.objects.filter(usuario=request.user)
- if form.is_valid():
- movimiento = form.save(commit=False)
- movimiento.usuario = request.user
- movimiento.save()
- # Ajustar saldos de cuentas
- movimiento.cuenta_origen.saldo -= movimiento.monto
- movimiento.cuenta_origen.save()
- movimiento.cuenta_destino.saldo += movimiento.monto
- movimiento.cuenta_destino.save()
- return redirect('dashboard')
- else:
- form = MovimientoForm()
- 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})
- @login_required
- def editar_movimiento(request, movimiento_id):
- movimiento = get_object_or_404(Movimiento, id=movimiento_id, usuario=request.user)
- saldo_original_origen = movimiento.cuenta_origen
- saldo_original_destino = movimiento.cuenta_destino
- monto_original = movimiento.monto
- if request.method == 'POST':
- form = MovimientoForm(request.POST, instance=movimiento)
- form.fields['cuenta_origen'].queryset = Cuenta.objects.filter(usuario=request.user)
- form.fields['cuenta_destino'].queryset = Cuenta.objects.filter(usuario=request.user)
- if form.is_valid():
- movimiento_nuevo = form.save(commit=False)
- # Revertir efecto anterior
- saldo_original_origen.saldo += monto_original
- saldo_original_origen.save()
- saldo_original_destino.saldo -= monto_original
- saldo_original_destino.save()
- # Aplicar nuevo efecto
- movimiento_nuevo.usuario = request.user
- movimiento_nuevo.save()
- movimiento_nuevo.cuenta_origen.saldo -= movimiento_nuevo.monto
- movimiento_nuevo.cuenta_origen.save()
- movimiento_nuevo.cuenta_destino.saldo += movimiento_nuevo.monto
- movimiento_nuevo.cuenta_destino.save()
- return redirect('dashboard')
- else:
- form = MovimientoForm(instance=movimiento)
- 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, 'editar_movimiento.html', {'form': form})
- @login_required
- def eliminar_movimiento(request, movimiento_id):
- movimiento = get_object_or_404(Movimiento, id=movimiento_id, usuario=request.user)
- if request.method == 'POST':
- # Revertir efecto del movimiento antes de borrarlo
- movimiento.cuenta_origen.saldo += movimiento.monto
- movimiento.cuenta_origen.save()
- movimiento.cuenta_destino.saldo -= movimiento.monto
- movimiento.cuenta_destino.save()
- movimiento.delete()
- return redirect('dashboard')
- return render(request, 'eliminar_movimiento.html', {'movimiento': movimiento})
- # Cuentas
- @login_required
- def agregar_cuenta(request):
- if request.method == 'POST':
- form = CuentaForm(request.POST)
- if form.is_valid():
- cuenta = form.save(commit=False)
- cuenta.usuario = request.user
- cuenta.save()
- return redirect('dashboard')
- else:
- form = CuentaForm()
- return render(request, 'agregar_cuenta.html', {'form': form})
- @login_required
- def listar_cuentas(request):
- cuentas = Cuenta.objects.filter(usuario=request.user)
- return render(request, 'listar_cuentas.html', {'cuentas': cuentas})
- @login_required
- def editar_cuenta(request, cuenta_id):
- cuenta = get_object_or_404(Cuenta, id=cuenta_id, usuario=request.user)
- if request.method == 'POST':
- form = CuentaForm(request.POST, instance=cuenta)
- if form.is_valid():
- form.save()
- return redirect('listar_cuentas')
- else:
- form = CuentaForm(instance=cuenta)
- return render(request, 'editar_cuenta.html', {'form': form})
- @login_required
- def eliminar_cuenta(request, cuenta_id):
- cuenta = get_object_or_404(Cuenta, id=cuenta_id, usuario=request.user)
- tiene_movimientos = cuenta.movimientos_salida.exists() or cuenta.movimientos_entrada.exists()
- if request.method == 'POST' and not tiene_movimientos:
- cuenta.delete()
- return redirect('listar_cuentas')
- return render(request, 'eliminar_cuenta.html', {
- 'cuenta': cuenta,
- 'tiene_movimientos': tiene_movimientos,
- })
|