diff --git a/solicitudes/models.py b/solicitudes/models.py index 0dce1b597859ff171fa230f7d1ac80b5a46c727d..db1e4a1b0397a627b8312f775d419f330d4b9f16 100644 --- a/solicitudes/models.py +++ b/solicitudes/models.py @@ -17,7 +17,8 @@ from estudio_socio_economico.models import Elemento, RNumerico class Solicitud(models.Model): ESTADO_CHOICES = [ - ('docPendiente', 'Doc. pendiente'), + ('docRevicion', 'Doc. en revisón'), + ('docError', 'Errores doc.'), ('docAprobada', 'Doc. aprobada'), ('aceptado', 'Aceptado'), ('rechazado', 'Rechazado'), @@ -39,7 +40,7 @@ class Solicitud(models.Model): ordering = ['-puntaje','id'] verbose_name = 'Solicitud' verbose_name_plural = 'Solicitudes' - unique_together = ('modalidad', 'solicitante') + unique_together = ('modalidad', 'ciclo','solicitante') def __str__(self): return f'Solicitud object ({self.id}) p:{self.puntaje}' @@ -83,7 +84,7 @@ def calcular_puntaje(sender, instance, **kwargs): print(f"Se produjo una excepción calculando el puntaje de Ingresos : {e}") #tipo de solicitud try: - existe_solicitud = Solicitud.objects.filter(solicitante=solicitante, estado=Solicitud.ESTADO_CHOICES[2][0]).filter(~Q(ciclo=ciclo_actual())).exists() + existe_solicitud = Solicitud.objects.filter(solicitante=solicitante, estado=Solicitud.ESTADO_CHOICES[3][0]).filter(~Q(ciclo=ciclo_actual())).exists() if existe_solicitud: puntaje = PuntajeGeneral.objects.get(tipo = seccionChoices[2][0], nombre='Renovación') instance.tipo = Solicitud.TIPO_CHOICES[0][0] @@ -168,8 +169,8 @@ class RespuestaDocumento(models.Model): #cumple con las condiciones para pasar a estado docAprobada o no @receiver(post_save, sender=RespuestaDocumento) def actualizar_estado_solicitud(sender, instance, **kwargs): - # Verificar condiciones y actualizar estado de la solicitud - aprobado = False + # Verificar condiciones y actualizar estado de la solicitud + opc = -1 solicitud = instance.solicitud if instance.estado == RespuestaDocumento.ESTADO_CHOICES[1][0]: #'aprobado' # Verificar que existan todas las instancias necesarias de RespuestaDocumento @@ -181,10 +182,19 @@ def actualizar_estado_solicitud(sender, instance, **kwargs): # Verificar que todas las instancias de RespuestaDocumento de la solicitud estén aprobadas if respuestas_documentos_solicitud.filter(estado='aprobado').count() == respuestas_documentos_solicitud.count(): # Todas las instancias de RespuestaDocumento de la solicitud están aprobadas - aprobado = True - if aprobado: - solicitud.estado = Solicitud.ESTADO_CHOICES[1][0] #'docAprobada' + opc = 0 + elif instance.estado == RespuestaDocumento.ESTADO_CHOICES[2][0]: #'denegado' + opc = 1 + + + if opc == 0: + solicitud.estado = Solicitud.ESTADO_CHOICES[2][0] #'docAprobada' + elif opc == 1: + solicitud.estado = Solicitud.ESTADO_CHOICES[1][0] #'docError' else: - solicitud.estado = Solicitud.ESTADO_CHOICES[0][0] #'docPendiente' + respuestas_documentos_solicitud = RespuestaDocumento.objects.filter(solicitud=solicitud) + #Si no hay ninguna respuestaDocumento denegada setear a docRevicion + if respuestas_documentos_solicitud.filter(estado='denegado').count() <= 0: + solicitud.estado = Solicitud.ESTADO_CHOICES[0][0] #'docRevicion' solicitud.save() \ No newline at end of file diff --git a/solicitudes/templates/admin/solicitudes.html b/solicitudes/templates/admin/solicitudes.html index 7d49523c70f344aef77467039a2bbd557515ba6a..dc630d11e89f2217aa69db0354456b26dd3b4fe9 100644 --- a/solicitudes/templates/admin/solicitudes.html +++ b/solicitudes/templates/admin/solicitudes.html @@ -129,18 +129,15 @@ Administrar solicitudes - + - {% if not solicitud.estado == 'docPendiente' %} + {% if not solicitud.estado == 'docRevicion' %} + {% if not solicitud.estado == 'docError' %} {% endif %} + {% endif %} {% endwith %} diff --git a/solicitudes/templates/solicitante/historial.html b/solicitudes/templates/solicitante/historial.html new file mode 100644 index 0000000000000000000000000000000000000000..2413f2bc566818856b842013637953e907299a65 --- /dev/null +++ b/solicitudes/templates/solicitante/historial.html @@ -0,0 +1,89 @@ +{% extends 'base.html' %} + +{% block titulo %} + Historial de solicitudes +{% endblock titulo %} + +{% block body %} + + {% block nombreUsuario %} +
+

Mis solicitudes

+

Folio: {{ solicitante.folio }}

+
+ {% endblock nombreUsuario %} + + + + +
+
+
+

Solicitudes

+
+
+ + + + + + + + + + + + + {% for solicitud in solicitudes %} + + {% with solicitud.solicitante as solicitante %} + + + + + + + + + {% endwith %} + + {% endfor %} + +
Estado Modalidad Convocatoria Tipo
{{ solicitud.get_estado_display }}{{ solicitud.modalidad.nombre }}{{ solicitud.ciclo }}{{ solicitud.tipo }} + {% if perms.usuarios.permiso_administrador and request.user.is_superuser == 1 %} + + {% endif %} +
+
+ +{% endblock body %} \ No newline at end of file diff --git a/solicitudes/urls.py b/solicitudes/urls.py index ea769cf14a3cec7a6e40d0efa8d97e4362699ee4..d8b223de2833a67c0c0706691b3409441b0f501d 100644 --- a/solicitudes/urls.py +++ b/solicitudes/urls.py @@ -22,6 +22,7 @@ urlpatterns = [ path('convocatorias/', views.documentos_convocatorias, name='documentos_convocatoria'), path('documento_respuesta/',views.documentoRespuesta, name='documento-respuesta'), path('documento//',views.verPDF, name='verPdf'), + path('historial/',views.historial, name='historial'), path('administracion/solicitudes', viewsAdmin.listaSolicitudes, name='ASolicitudes'), ] \ No newline at end of file diff --git a/solicitudes/views.py b/solicitudes/views.py index 64a741542a1c73cdfd42df1db5b6b8bccd262d98..c8e096b7a0e821345032b8ce4c23bc608c0ac95b 100644 --- a/solicitudes/views.py +++ b/solicitudes/views.py @@ -115,4 +115,21 @@ def documentos_convocatorias(request, modalidad_id): def documentoRespuesta(request, pk=None): documento = Documento.objects.get(id=pk) print("id_documento:", documento) - return redirect('documentos_convocatoria') \ No newline at end of file + return redirect('documentos_convocatoria') + +@login_required +def historial(request): + solicitante = get_object_or_404(Usuario, pk=request.user.id) + url = verificarRedirect(solicitante) + if url: #Verifica si el usuario ha llenaodo su informacion personal por primera vez y tiene los permisos necesarios + return redirect(url) + + solicitante = get_object_or_404(Solicitante, pk=request.user.id) + solicitudes = Solicitud.objects.filter(solicitante = solicitante) + + context = { + 'solicitudes': solicitudes, + 'solicitante': solicitante + } + + return render(request, 'solicitante/historial.html', context) \ No newline at end of file diff --git a/solicitudes/viewsAdmin.py b/solicitudes/viewsAdmin.py index cf38463bc36d1d7da9d970ba18d1cd3294801e88..a5bf685ca83b3b02a0b81fa24d1e7f80a70bc437 100644 --- a/solicitudes/viewsAdmin.py +++ b/solicitudes/viewsAdmin.py @@ -73,19 +73,20 @@ def listaSolicitudes(request): if accion and seleccion: if todo: soliToUpdate = soliToUpdate.exclude(estado=Solicitud.ESTADO_CHOICES[0][0]) + soliToUpdate = soliToUpdate.exclude(estado=Solicitud.ESTADO_CHOICES[1][0]) if accion == 'aceptar': - soliToUpdate.update(estado=Solicitud.ESTADO_CHOICES[2][0]) + soliToUpdate.update(estado=Solicitud.ESTADO_CHOICES[3][0]) messages.success(request, f'Se aceptaron todas las {soliToUpdate.count()} solicitudes filtradas con éxito') elif accion == 'rechazar': - soliToUpdate.update(estado=Solicitud.ESTADO_CHOICES[3][0]) + soliToUpdate.update(estado=Solicitud.ESTADO_CHOICES[4][0]) messages.success(request, f'Se rechazaron todas las {soliToUpdate.count()} solicitudes filtradas con éxito') else: soliToUpdate = soliToUpdate.filter(id__in=seleccion) if accion == 'aceptar': - soliToUpdate.update(estado=Solicitud.ESTADO_CHOICES[2][0]) + soliToUpdate.update(estado=Solicitud.ESTADO_CHOICES[3][0]) messages.success(request, f'Se aceptaron las {soliToUpdate.count()} solicitudes seleccionadas con éxito') elif accion == 'rechazar': - soliToUpdate.update(estado=Solicitud.ESTADO_CHOICES[3][0]) + soliToUpdate.update(estado=Solicitud.ESTADO_CHOICES[4][0]) messages.success(request, f'Se rechazaron las {soliToUpdate.count()} solicitudes seleccionadas con éxito') else: messages.error(request, 'No se seleccionaron solicitudes') diff --git a/static/css/main.css b/static/css/main.css index 425547312dfa2525d3d6c059713a37a06bf191fa..c435fc58309b5ec2cb1ce36ad4ebdccf6672b173 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -15,8 +15,10 @@ --pagina-gris: #b9b4b4; --soli-doc-aprovada: #dfeafc; + --soli-doc-error: #f6face; --soli-aceptada: #def8e3; --soli-rechazada: #ffe1df; + --icon-solicitudes: rgba(27, 2, 37, 0.35); --gris-0: #f8f8f8; /* Blanco apagado */ --gris-1: #efefef; /* Blanco apagado */ @@ -539,6 +541,10 @@ a { .font-xxl { font-size: 1.857rem; /* 26px / 14px */ } + +.font-sl { + font-size: 4rem; /* 26px / 14px */ +} /* .font-xs { font-size: 12px; @@ -716,8 +722,12 @@ th { } /* Estilos para Solicitudes */ -.docPendiente { - background-color: var(--pagina-blanco); /* Color de respaldo predeterminado si la variable no está definida */ +.docRevicion { + background-color: var(--pagina-blanco); +} + +.docError { + background-color: var(--soli-doc-error); } .docAprobada { @@ -732,6 +742,32 @@ th { background-color: var(--soli-rechazada); } +i.docRevicion:before { + content: "\f251"; + color: var(--icon-solicitudes) +} + +i.docError:before { + content: "\f071"; + color: var(--icon-solicitudes) + +} + +i.docAprobada:before { + content: "\f250"; + color: var(--icon-solicitudes) +} + +i.aceptado:before { + content: "\f05d"; + color: var(--icon-solicitudes) +} + +i.rechazado:before { + content: "\f05c"; + color: var(--icon-solicitudes) +} + .bold-legends legend { font-weight: bold; font-size: 1.143rem; /* 16px / 14px */ diff --git a/usuarios/templates/Solicitante/historial.html b/usuarios/templates/Solicitante/historial.html deleted file mode 100644 index d5f8b4b62d6e224cf286d8dd97c8023b9e4b9076..0000000000000000000000000000000000000000 --- a/usuarios/templates/Solicitante/historial.html +++ /dev/null @@ -1,5 +0,0 @@ -{% extends 'base.html' %} - -{% block body %} -

Pagina Historial (implementacion pendiente)

-{% endblock body %} \ No newline at end of file diff --git a/usuarios/templates/base.html b/usuarios/templates/base.html index bf176ae67458f8bd5206900758a4bf1c069b8b8b..9ac24ede4be9acde47e39badaafee13377334a68 100644 --- a/usuarios/templates/base.html +++ b/usuarios/templates/base.html @@ -123,7 +123,7 @@