From 603120fdf8ef728148fa042994d39c301e4dd38b Mon Sep 17 00:00:00 2001 From: AdalbertoCV <34152734@uaz.edu.mx> Date: Wed, 6 Nov 2024 19:06:26 -0600 Subject: [PATCH] Validaciones extras en backend --- cosiap_api/solicitudes/models.py | 3 +++ cosiap_api/solicitudes/views.py | 30 ++++++++++++++++++++++++------ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/cosiap_api/solicitudes/models.py b/cosiap_api/solicitudes/models.py index d3a085d..2e43cdc 100644 --- a/cosiap_api/solicitudes/models.py +++ b/cosiap_api/solicitudes/models.py @@ -157,6 +157,9 @@ class Solicitud(models.Model): registro_formulario = models.OneToOneField(RegistroFormulario, on_delete=models.SET_NULL, null=True, blank=True) def save(self, *args, **kwargs): + # Validación para que el monto_aprobado no exceda el monto máximo de la modalidad + if self.modalidad and self.monto_aprobado > self.modalidad.monto_maximo: + raise ValueError("El monto aprobado no puede exceder el monto máximo permitido por la modalidad asociada.") # Si no tiene un registro_formulario asignado, lo creamos if not self.registro_formulario: self.registro_formulario = RegistroFormulario.objects.create() diff --git a/cosiap_api/solicitudes/views.py b/cosiap_api/solicitudes/views.py index 3d9bb8d..005a71a 100644 --- a/cosiap_api/solicitudes/views.py +++ b/cosiap_api/solicitudes/views.py @@ -72,12 +72,27 @@ class SolicitarAPIView(BasePermissionAPIView): monto_solicitado = request.data.get("monto_solicitado") modalidad = Modalidad.objects.get(id=request.data.get('modalidad_id')) - año_actual = timezone.now().year - # Contar cuántas solicitudes ha hecho el solicitante en el año actual - solicitudes_del_año = Solicitud.objects.filter(solicitante=solicitante, timestamp__year=año_actual).count() + # Obtener el año y mes actual + fecha_actual = timezone.now() + año_actual = fecha_actual.year + mes_actual = fecha_actual.month + + # Determinar el semestre en curso + if mes_actual <= 6: + semestre_inicio = datetime(año_actual, 1, 1) # Primer semestre + semestre_fin = datetime(año_actual, 6, 30) + else: + semestre_inicio = datetime(año_actual, 7, 1) # Segundo semestre + semestre_fin = datetime(año_actual, 12, 31) + + # Contar cuántas solicitudes ha hecho el solicitante en el semestre actual + solicitudes_del_semestre = Solicitud.objects.filter( + solicitante=solicitante, + timestamp__range=(semestre_inicio, semestre_fin) + ).count() - if solicitudes_del_año >= 2: - Mensaje.error(data, 'No puedes registrar más de dos solicitudes en el mismo año.') + if solicitudes_del_semestre >= 2: + Mensaje.error(data, 'No puedes registrar más de dos solicitudes en el mismo semestre.') return Response(data, status=status.HTTP_400_BAD_REQUEST) with transaction.atomic(): @@ -328,7 +343,7 @@ class CalificarDocumento(BasePermissionAPIView): ''' Método para calificar uno o varios documentos a la vez de una solicitud. - Espera una lista de dicts en el formato check_documents = [{"id_respuesta":"n","nuevo_status":"status" }] + Espera una lista de dicts en el formato check_documents = [{"id_respuesta":"n","nuevo_status":"status", "nueva_observacion": "observacion" }] ''' data = {} @@ -345,6 +360,7 @@ class CalificarDocumento(BasePermissionAPIView): for respuesta_data in respuestas_calificar: id_respuesta = respuesta_data.get("id_respuesta") nuevo_status = respuesta_data.get("nuevo_status") + nueva_observacion = respuesta_data.get("nueva_observacion") # Verificar que los datos necesarios están presentes if not id_respuesta or not nuevo_status: @@ -363,6 +379,8 @@ class CalificarDocumento(BasePermissionAPIView): # Actualizar el status del documento respuesta.status = nuevo_status + if nueva_observacion: + respuesta.observacion = nueva_observacion respuesta.save() data['mensaje'] = "Documentos calificados correctamente." -- GitLab