|
|
@@ -1,25 +1,28 @@
|
|
|
from django.shortcuts import render, redirect
|
|
|
-from .models import Movimiento, Categoria
|
|
|
+
|
|
|
+from accounts import models
|
|
|
+from .models import Movimiento, Cuenta
|
|
|
from .forms import MovimientoForm, FiltroForm
|
|
|
from django.contrib.auth.decorators import login_required
|
|
|
-from datetime import datetime
|
|
|
|
|
|
@login_required
|
|
|
def dashboard(request):
|
|
|
movimientos = Movimiento.objects.filter(usuario=request.user).order_by('-fecha')
|
|
|
|
|
|
form = FiltroForm(request.GET or None)
|
|
|
+ form.fields['cuenta'].queryset = Cuenta.objects.filter(usuario=request.user)
|
|
|
|
|
|
if form.is_valid():
|
|
|
if form.cleaned_data['fecha_inicio']:
|
|
|
movimientos = movimientos.filter(fecha__gte=form.cleaned_data['fecha_inicio'])
|
|
|
if form.cleaned_data['fecha_fin']:
|
|
|
movimientos = movimientos.filter(fecha__lte=form.cleaned_data['fecha_fin'])
|
|
|
- if form.cleaned_data['categoria']:
|
|
|
- movimientos = movimientos.filter(categoria=form.cleaned_data['categoria'])
|
|
|
+ if form.cleaned_data['cuenta']:
|
|
|
+ cuenta = form.cleaned_data['cuenta']
|
|
|
+ movimientos = movimientos.filter(models.Q(cuenta_origen=cuenta) | models.Q(cuenta_destino=cuenta))
|
|
|
|
|
|
- ingresos = sum(m.monto for m in movimientos if m.categoria.tipo == 'ingreso')
|
|
|
- gastos = sum(m.monto for m in movimientos if m.categoria.tipo == 'gasto')
|
|
|
+ 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,
|
|
|
@@ -27,17 +30,27 @@ def dashboard(request):
|
|
|
'gastos': gastos,
|
|
|
'balance': balance,
|
|
|
'form': form,
|
|
|
+ '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()
|
|
|
- return render(request, 'agregar_movimiento.html', {'form': form})
|
|
|
+ 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})
|