Celestino Rey 1 год назад
Родитель
Сommit
5736a6944a
3 измененных файлов с 38 добавлено и 19 удалено
  1. 15 18
      src/finanzas/views.py
  2. 22 1
      src/templates/informe_cuenta.html
  3. 1 0
      src/templates/listar_cuentas.html

+ 15 - 18
src/finanzas/views.py

@@ -17,6 +17,7 @@ from django.template.loader import get_template
 from django.http import HttpResponse
 from weasyprint import HTML
 import tempfile
+from django.utils.dateparse import parse_date
 
 import logging
 import re
@@ -462,37 +463,33 @@ def resumen_saldos_mensuales(request):
 
 
 @login_required
-def informe_cuenta(request, cuenta_id):
-    cuenta = get_object_or_404(Cuenta, id=cuenta_id, usuario=request.user)
+def informe_cuenta(request):
+    cuenta_id = request.GET.get('cuenta_id')
+    fecha_inicio = parse_date(request.GET.get('fecha_inicio')) or date.today().replace(day=1)
+    fecha_fin = parse_date(request.GET.get('fecha_fin')) or date.today()
 
+    cuenta = get_object_or_404(Cuenta, id=cuenta_id)
     movimientos = Movimiento.objects.filter(
-        Q(cuenta_origen=cuenta) | Q(cuenta_destino=cuenta)
+        Q(cuenta_origen=cuenta) | Q(cuenta_destino=cuenta),
+        fecha__date__range=(fecha_inicio, fecha_fin)
     ).order_by('fecha')
 
+    # Cálculo de saldos después de cada movimiento
     saldo = 0
-    historial = []
-
+    movimientos_con_saldo = []
     for mov in movimientos:
         if mov.cuenta_origen == cuenta:
             saldo -= mov.monto
-            tipo = 'Salida'
         elif mov.cuenta_destino == cuenta:
             saldo += mov.monto
-            tipo = 'Entrada'
-        else:
-            tipo = 'Otro'  # Por seguridad, aunque no debería ocurrir
-
-        historial.append({
-            'fecha': mov.fecha,
-            'descripcion': mov.descripcion,
-            'monto': mov.monto,
-            'tipo': tipo,
-            'saldo_despues': saldo,
-        })
+        movimientos_con_saldo.append((mov, saldo))
 
+    # Renderizado del PDF o del HTML como prefieras
     context = {
         'cuenta': cuenta,
-        'historial': historial,
+        'movimientos_con_saldo': movimientos_con_saldo,
+        'fecha_inicio': fecha_inicio,
+        'fecha_fin': fecha_fin,
     }
     return render(request, 'informe_cuenta.html', context)
 

+ 22 - 1
src/templates/informe_cuenta.html

@@ -7,8 +7,29 @@
     <h3 class="i-name">
         Informe de cuenta: {{ cuenta.nombre }}    
     </h3>
-    
+
     <div class="board"> 
+        <div class="form-group">
+            <form method="get" class="form-inline">
+                <div class="row g-2 align-items-end">
+                    <input type="hidden" name="cuenta_id" value="{{ cuenta.id }}">
+                    <div class="col-auto">
+                        <label>Desde:</label>
+                        <input type="date" name="fecha_inicio" value="{{ fecha_inicio|date:'Y-m-d' }}">
+                    </div>
+                    <div class="col-auto">
+                        <label>Hasta:</label>
+                        <input type="date" name="fecha_fin" value="{{ fecha_fin|date:'Y-m-d' }}">
+                    </div>
+                    <div class="col-auto ">
+                        <button type="submit" class="btn btn-primary">Filtrar</button>
+                    </div>
+                </div>
+            </form>
+        </div>
+
+
+
         <table class="table table-striped">
             <thead>
                 <tr>

+ 1 - 0
src/templates/listar_cuentas.html

@@ -44,6 +44,7 @@
                         <a href="{% url 'eliminar_cuenta' cuenta.id %}">
                             <i class="bi bi-trash3"></i>
                         </a>
+
                         <a href="{% url 'informe_cuenta' cuenta.id %}">
                             <i class="bi bi-file-earmark"></i>
                         </a>