| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- 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')
- ingresos = sum(m.monto for m in movimientos if m.cuenta_destino.tipo == 'ingreso')
- gastos = sum(m.monto for m in movimientos if m.cuenta_origen.tipo == 'gasto')
- balance = ingresos - gastos
- return render(request, 'dashboard.html', {
- 'movimientos': movimientos,
- 'ingresos': ingresos,
- 'gastos': gastos,
- 'balance': balance,
- 'user': request.user,
- })
- @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 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,
- })
|