فهرست منبع

Acerca de. Arreglo movimientos frecuentes

Celestino Rey 1 سال پیش
والد
کامیت
ef9d219c00

+ 1 - 1
K8S/Makefile

@@ -1,6 +1,6 @@
 export ARQUITECTURA := $(shell lscpu |grep itectur | tr -d ' '| cut -f2 -d':')
 export REGISTRY=registry.reymota.es
-export IMG_VERSION = 0.11
+export IMG_VERSION = 0.17
 export IMG_NGINX_VERSION = 1.0
 
 # limpia todo

+ 2 - 1
src/finanzas/admin.py

@@ -1,8 +1,9 @@
 # budget/admin.py
 
 from django.contrib import admin
-from .models import Movimiento, Cuenta, MovimientoFrecuente
+from .models import Movimiento, Cuenta, MovimientoFrecuente, Categoria
 
 admin.site.register(Movimiento)
 admin.site.register(Cuenta)
 admin.site.register(MovimientoFrecuente)
+admin.site.register(Categoria)

+ 2 - 1
src/finanzas/forms.py

@@ -8,13 +8,14 @@ class MovimientoForm(forms.ModelForm):
 
     class Meta:
         model = Movimiento
-        fields = ['cuenta_origen', 'cuenta_destino', 'monto', 'fecha', 'descripcion']
+        fields = ['cuenta_origen', 'cuenta_destino', 'monto', 'fecha', 'descripcion', 'categoria']
         widgets = {
             'cuenta_origen': forms.Select(attrs={'class': 'form-control'}),
             'cuenta_destino': forms.Select(attrs={'class': 'form-control'}),
             'monto': forms.TextInput(attrs={'class': 'form-control'}),
             'descripcion': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
             'fecha': forms.DateTimeInput(attrs={'type': 'datetime-local', 'class': 'form-control', 'placeholder': 'MM-DD-YYYY'}, format='%d-%m-%YT%H:%M'),
+            'categoria': forms.Select(attrs={'class': 'form-control'}),
         }
 
     def clean(self):

+ 10 - 0
src/finanzas/models.py

@@ -17,6 +17,13 @@ class Cuenta(models.Model):
         return f"{self.nombre} ({self.tipo})"
 
 
+class Categoria(models.Model):
+    nombre = models.CharField(max_length=100)
+
+    def __str__(self):
+        return self.nombre
+
+
 class Movimiento(models.Model):
     usuario = models.ForeignKey(ReyMotaUser, on_delete=models.CASCADE)
     cuenta_origen = models.ForeignKey(Cuenta, on_delete=models.CASCADE, related_name='movimientos_salida', default=1)
@@ -24,6 +31,7 @@ class Movimiento(models.Model):
     monto = models.DecimalField(max_digits=10, decimal_places=2)
     fecha = models.DateTimeField()
     descripcion = models.TextField(blank=True, null=True)
+    categoria = models.ForeignKey(Categoria, on_delete=models.SET_NULL, null=True, blank=True)
 
     def __str__(self):
         return f"{self.cuenta_origen.nombre} → {self.cuenta_destino.nombre} - {self.monto} ({self.fecha})"
@@ -34,6 +42,8 @@ class MovimientoFrecuente(models.Model):
     usuario = models.ForeignKey(ReyMotaUser, on_delete=models.CASCADE)
     cuenta_origen = models.ForeignKey(Cuenta, on_delete=models.CASCADE, related_name='frecuente_origen')
     cuenta_destino = models.ForeignKey(Cuenta, on_delete=models.CASCADE, related_name='frecuente_destino')
+    categoria = models.ForeignKey(Categoria, on_delete=models.SET_NULL, null=True, blank=True)
+    descripcion = models.TextField(blank=True, null=True)
     monto = models.DecimalField(max_digits=10, decimal_places=2)
 
     def __str__(self):

+ 13 - 1
src/finanzas/views.py

@@ -5,7 +5,7 @@ import re
 from django.db import models as db_models
 
 from accounts import models
-from .models import Movimiento, Cuenta, MovimientoFrecuente
+from .models import Movimiento, Cuenta, MovimientoFrecuente, Categoria
 from .forms import MovimientoForm, FiltroForm, CuentaForm
 from django.contrib.auth.decorators import login_required
 from django.contrib import messages
@@ -74,13 +74,25 @@ def agregar_movimiento(request):
         datos_iniciales = {}
         origen = request.GET.get('origen')
         destino = request.GET.get('destino')
+        categoria = request.GET.get('categoria')
+        descripcion = request.GET.get('descripcion')
         monto_raw = request.GET.get('monto')
 
+        logger.warning(f"origen: {origen}")
+        logger.warning(f"destino: {destino}")
+        logger.warning(f"categoria: {categoria}")
+        logger.warning(f"descripcion: {descripcion}")
+        logger.warning(f"monto_raw: {monto_raw}")
+
         try:
             if origen:
                 datos_iniciales['cuenta_origen'] = Cuenta.objects.get(nombre=request.GET['origen'], usuario=request.user)
             if destino:
                 datos_iniciales['cuenta_destino'] = Cuenta.objects.get(nombre=request.GET['destino'], usuario=request.user)
+            if categoria:
+                datos_iniciales['categoria'] = Categoria.objects.get(nombre=request.GET['categoria'])
+            if descripcion:
+                datos_iniciales['descripcion'] = descripcion
             if monto_raw:
                 # Reemplaza coma por punto, elimina símbolos y espacios
                 monto_normalizado = re.sub(r'[^\d,.-]', '', monto_raw).replace(',', '.')

+ 5 - 0
src/misfinanzas/urls.py

@@ -19,6 +19,8 @@ from django.urls import path, include
 from django.conf import settings
 from django.conf.urls.static import static
 
+from . import views
+
 urlpatterns = [
     path('marcelo/', admin.site.urls),
 
@@ -26,4 +28,7 @@ urlpatterns = [
     path("accounts/", include("django.contrib.auth.urls")),
 
     path('', include('finanzas.urls')),
+
+    path("acerca-de/", views.acerca_de, name="acerca_de"),
+
 ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

+ 1 - 1
src/reymotausers/admin.py

@@ -36,7 +36,7 @@ class ReyMotaUserAdmin(UserAdmin):
         ("Personal", {"fields": ("nombre",)}),
         ("Varios", {"fields": ("foto",)}),
     )
-    search_fields = ("email",)
+    search_fields = ("email", "nombre",)
     ordering = ("email",)
 
 

+ 2 - 2
src/templates/_menu.html

@@ -29,7 +29,7 @@
 
       <li>
          <i class="bi bi-question-circle-fill"></i>           
-          <a href="#">Acerca de ...</a></i>
+          <a href="{% url 'acerca_de' %}">Acerca de ...</a></i>
       </li>
     </div>
-</section>
+</section>

+ 47 - 0
src/templates/acerca_de.html

@@ -0,0 +1,47 @@
+{% extends "base.html" %}
+
+{% load filtros_de_entorno %}
+
+{% block interface  %}
+<section id="interface">
+    {% include "_navigation.html" %}
+
+    <h3 class="i-name">
+        Acerca de...
+    </h3>
+
+    <div class="board">
+        <table width="100%">
+            <thead>
+                <tr>
+                    <td>Aplicación</td>
+                    <td>Versión</td>
+                    <td>Versión de la imagen</td>
+                </tr>
+            </thead>
+            <tbody>
+                <tr class="{% cycle 'fila-impar' 'fila-par' %}">
+                    <td>
+                        <h5>{{ app_name }}</h5>
+                    </td>
+
+                    <td>
+                        <h5>{{ app_version }}</h5>
+                    </td>
+
+                    <td>
+                    {% if 'OPENSHIFT'|muestra_version == 'True' %}
+                        <h5>openshift</h5>
+                    {% else %}
+                        <h5>{{ img_version }}</h5>
+                    {% endif %}
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+        <div class="botones">
+                <a href="{% url 'dashboard' %}"><button class="btn btn-secondary" type="button">Volver al Dashboard</button></a>
+        </div>
+    </div>
+</section>
+{% endblock %}

+ 2 - 2
src/templates/dashboard.html

@@ -24,7 +24,7 @@
         {% for f in frecuentes %}
         <div class="val-favoritos">
             <div>
-                <a href="{% url 'agregar_movimiento' %}?origen={{ f.cuenta_origen.nombre|urlencode }}&destino={{ f.cuenta_destino.nombre|urlencode }}&monto={{ f.monto }}">
+                <a href="{% url 'agregar_movimiento' %}?origen={{ f.cuenta_origen.nombre|urlencode }}&destino={{ f.cuenta_destino.nombre|urlencode }}&monto={{ f.monto }}&categoria={{ f.categoria.nombre|urlencode }}&descripcion={{ f.descripcion }}">
                     {{ f.nombre }} ({{ f.monto }} €)
                 </a>                
             </div>
@@ -87,4 +87,4 @@
         </table>
     </div>
 </section>
-{% endblock %}
+{% endblock %}

+ 3 - 5
src/templates/listar_cuentas.html

@@ -25,12 +25,10 @@
             {% for cuenta in cuentas %}
                 <tr class="{% cycle 'fila-impar' 'fila-par' %}">
                     <td class="people">
-                        <div class="people-de">
-                            <h5>{{ cuenta.nombre }}</h5>
-                        </div>
+                        <h5>{{ cuenta.nombre }}</h5>
                     </td>
 
-                    <td class="people-des">
+                    <td class="people">
                         <h5>{{ cuenta.get_tipo_display }}</h5>
                     </td>
                     
@@ -60,4 +58,4 @@
         </div>
     </div>
 </section>
-{% endblock %}
+{% endblock %}