views.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from django.shortcuts import render, redirect
  2. from .models import Movimiento, Categoria
  3. from .forms import MovimientoForm, FiltroForm
  4. from django.contrib.auth.decorators import login_required
  5. from datetime import datetime
  6. @login_required
  7. def dashboard(request):
  8. movimientos = Movimiento.objects.filter(usuario=request.user).order_by('-fecha')
  9. form = FiltroForm(request.GET or None)
  10. if form.is_valid():
  11. if form.cleaned_data['fecha_inicio']:
  12. movimientos = movimientos.filter(fecha__gte=form.cleaned_data['fecha_inicio'])
  13. if form.cleaned_data['fecha_fin']:
  14. movimientos = movimientos.filter(fecha__lte=form.cleaned_data['fecha_fin'])
  15. if form.cleaned_data['categoria']:
  16. movimientos = movimientos.filter(categoria=form.cleaned_data['categoria'])
  17. ingresos = sum(m.monto for m in movimientos if m.categoria.tipo == 'ingreso')
  18. gastos = sum(m.monto for m in movimientos if m.categoria.tipo == 'gasto')
  19. balance = ingresos - gastos
  20. return render(request, 'dashboard.html', {
  21. 'movimientos': movimientos,
  22. 'ingresos': ingresos,
  23. 'gastos': gastos,
  24. 'balance': balance,
  25. 'form': form,
  26. })
  27. @login_required
  28. def agregar_movimiento(request):
  29. if request.method == 'POST':
  30. form = MovimientoForm(request.POST)
  31. if form.is_valid():
  32. movimiento = form.save(commit=False)
  33. movimiento.usuario = request.user
  34. movimiento.save()
  35. return redirect('dashboard')
  36. else:
  37. form = MovimientoForm()
  38. return render(request, 'agregar_movimiento.html', {'form': form})