From 427446699f905e91d0f0b74fa94890f63060b667 Mon Sep 17 00:00:00 2001 From: RafaUC <35164744@uaz.edu.mx> Date: Tue, 23 Apr 2024 14:50:56 -0600 Subject: [PATCH] =?UTF-8?q?optimizado=20el=20obtener=20los=20ciclos=20exis?= =?UTF-8?q?tentes=20en=20orden=20y=20mejorado=20el=20tama=C3=B1o=20y=20dis?= =?UTF-8?q?tribucion=20de=20la=20graficas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modalidades/models.py | 7 +++++++ solicitudes/forms.py | 23 +++++++++++++++-------- solicitudes/viewsAdmin.py | 18 +++++++++--------- 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/modalidades/models.py b/modalidades/models.py index 50c022d..51e8c3b 100644 --- a/modalidades/models.py +++ b/modalidades/models.py @@ -18,6 +18,13 @@ def ciclo_actual(offset=0): ciclo = "Enero - Junio" return f"{ciclo} {año}" +def obtener_mes_numero(mes): + meses = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"] + return meses.index(mes) + 1 + +def ordenar_lista_ciclos(registros): + return sorted(registros, key=lambda x: (int(x.split()[-1]), obtener_mes_numero(x.split()[0]))) + def modalidadMediaPath(instance, filename): ext = filename.split('.')[-1] # Obtiene la extensión del archivo filename = f"{uuid4().hex}.{ext}" # Genera un nombre único utilizando UUID diff --git a/solicitudes/forms.py b/solicitudes/forms.py index 7fe2174..6effff8 100644 --- a/solicitudes/forms.py +++ b/solicitudes/forms.py @@ -5,6 +5,7 @@ from django.forms import ModelForm from django.db.models import Subquery from .models import * +from modalidades.models import ordenar_lista_ciclos # class ConvocatoriaForm(ModelForm): @@ -83,14 +84,20 @@ class EstadInfoSelectForm(forms.Form): super().__init__(*args, **kwargs) if modelo_filtro and campo_filtro and campo_estadistica_modelo: - # Obtener los valores únicos basados en los parámetros de la consulta GET - valores = modelo_filtro.objects.all().values_list(campo_filtro, flat=True) - valores_unicos = [] - conjunto_vistos = set() - for elemento in valores: - if elemento not in conjunto_vistos: - valores_unicos.append(elemento) - conjunto_vistos.add(elemento) + #Generar las choices del estadistica_filtro + if campo_filtro == 'ciclo' and modelo_filtro == Solicitud: + valores_unicos = modelo_filtro.objects.all().order_by().values_list('ciclo', flat=True).distinct() + valores_unicos = ordenar_lista_ciclos(valores_unicos) + valores_unicos.reverse() + else: + # Obtener los valores únicos basados en los parámetros de la consulta GET + valores = modelo_filtro.objects.all().values_list(campo_filtro, flat=True) + valores_unicos = [] + conjunto_vistos = set() + for elemento in valores: + if elemento not in conjunto_vistos: + valores_unicos.append(elemento) + conjunto_vistos.add(elemento) self.fields['estadistica_filtro'].choices = [(valor, valor) for valor in valores_unicos] self.fields['estadistica_filtro'].choices.insert(0, ('Todos', 'Todos')) self.fields['estadistica_filtro'].label = campo_filtro diff --git a/solicitudes/viewsAdmin.py b/solicitudes/viewsAdmin.py index 6605f53..c6f90a4 100644 --- a/solicitudes/viewsAdmin.py +++ b/solicitudes/viewsAdmin.py @@ -21,7 +21,7 @@ from collections import Counter from usuarios.views import verificarRedirect from usuarios.viewsAdmin import BusquedaEnCamposQuerySet from usuarios.models import Usuario, Institucion, Carrera, Municipio -from modalidades.models import ciclo_actual +from modalidades.models import ciclo_actual, ordenar_lista_ciclos from .forms import FiltroForm, EstadInfoSelectForm from modalidades.models import Modalidad, Convocatoria from .models import * @@ -177,13 +177,17 @@ def crearDictGrafica(labels=[], dataLabel='', data=[], listaColores=[],type='bar }] }, 'options': { + 'responsive': True, + 'maintainAspectRatio': False, 'plugins': { 'legend': { 'display': False }, }, 'layout': { - 'padding': 10 + 'padding': { + 'bottom': 0 + } }, 'scales': { 'x': { @@ -270,13 +274,9 @@ def estadisticaSolicitudes(request): if campo_estadistica == 'ciclo': valores = queryset.values_list(campo_estadistica, flat=True) frecuencias = dict(Counter(valores)) - valores = queryset.values_list(campo_estadistica, flat=True) - valores_unicos = [] - conjunto_vistos = set() - for elemento in valores: - if elemento not in conjunto_vistos: - valores_unicos.append(elemento) - conjunto_vistos.add(elemento) + valores_unicos = queryset.order_by().values_list('ciclo', flat=True).distinct() + valores_unicos = ordenar_lista_ciclos(valores_unicos) + valores_unicos.reverse() valoresFrecuencias = [] for val in valores_unicos: valoresFrecuencias.append({campo_estadistica: val, 'frecuencia': frecuencias[val]}) -- GitLab