views.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. from django.shortcuts import render, redirect, get_object_or_404
  2. from accounts import models
  3. from .models import Movimiento, Cuenta
  4. from .forms import MovimientoForm, FiltroForm, CuentaForm
  5. from django.contrib.auth.decorators import login_required
  6. @login_required
  7. def dashboard(request):
  8. movimientos = Movimiento.objects.filter(usuario=request.user).order_by('-fecha')
  9. favoritas = Cuenta.objects.filter(favorita='True')
  10. return render(request, 'dashboard.html', {
  11. 'movimientos': movimientos,
  12. 'user': request.user,
  13. 'favoritas': favoritas,
  14. })
  15. @login_required
  16. def agregar_movimiento(request):
  17. if request.method == 'POST':
  18. form = MovimientoForm(request.POST)
  19. form.fields['cuenta_origen'].queryset = Cuenta.objects.filter(usuario=request.user)
  20. form.fields['cuenta_destino'].queryset = Cuenta.objects.filter(usuario=request.user)
  21. if form.is_valid():
  22. movimiento = form.save(commit=False)
  23. movimiento.usuario = request.user
  24. movimiento.save()
  25. # Ajustar saldos de cuentas
  26. movimiento.cuenta_origen.saldo -= movimiento.monto
  27. movimiento.cuenta_origen.save()
  28. movimiento.cuenta_destino.saldo += movimiento.monto
  29. movimiento.cuenta_destino.save()
  30. return redirect('dashboard')
  31. else:
  32. form = MovimientoForm()
  33. form.fields['cuenta_origen'].queryset = Cuenta.objects.filter(usuario=request.user)
  34. form.fields['cuenta_destino'].queryset = Cuenta.objects.filter(usuario=request.user)
  35. return render(request, 'agregar_movimiento.html', {'form': form})
  36. @login_required
  37. def agregar_cuenta(request):
  38. if request.method == 'POST':
  39. form = CuentaForm(request.POST)
  40. if form.is_valid():
  41. cuenta = form.save(commit=False)
  42. cuenta.usuario = request.user
  43. cuenta.save()
  44. return redirect('dashboard')
  45. else:
  46. form = CuentaForm()
  47. return render(request, 'agregar_cuenta.html', {'form': form})
  48. @login_required
  49. def listar_cuentas(request):
  50. cuentas = Cuenta.objects.filter(usuario=request.user)
  51. return render(request, 'listar_cuentas.html', {'cuentas': cuentas})
  52. @login_required
  53. def editar_cuenta(request, cuenta_id):
  54. cuenta = get_object_or_404(Cuenta, id=cuenta_id, usuario=request.user)
  55. if request.method == 'POST':
  56. form = CuentaForm(request.POST, instance=cuenta)
  57. if form.is_valid():
  58. form.save()
  59. return redirect('listar_cuentas')
  60. else:
  61. form = CuentaForm(instance=cuenta)
  62. return render(request, 'editar_cuenta.html', {'form': form})
  63. @login_required
  64. def eliminar_cuenta(request, cuenta_id):
  65. cuenta = get_object_or_404(Cuenta, id=cuenta_id, usuario=request.user)
  66. tiene_movimientos = cuenta.movimientos_salida.exists() or cuenta.movimientos_entrada.exists()
  67. if request.method == 'POST' and not tiene_movimientos:
  68. cuenta.delete()
  69. return redirect('listar_cuentas')
  70. return render(request, 'eliminar_cuenta.html', {
  71. 'cuenta': cuenta,
  72. 'tiene_movimientos': tiene_movimientos,
  73. })