diff --git a/modalidades/models.py b/modalidades/models.py index 50c022d9374fdf29a49b93f58e14e33e521a9511..51e8c3b17cccf909e4458a315a9300957923783f 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 7fe217479d39d5f6b1976860658c4582739c823a..6effff8dc21f57691a1a11cdfe814576a85af2bc 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 6605f5398326e7ccfb20923891d7d48bc3963843..c6f90a460aa301a11cc33f61f8bb445950247b3b 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]})