diff --git a/cosiap_api/solicitudes/models.py b/cosiap_api/solicitudes/models.py index d3a085dc6b5b2bfb1fdae4e9c9bd8d6e55c409a7..2e43cdc6e2972b395b3b38921d5109273c79932f 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 3d9bb8dcb267a4eea978987c9b99eaed192426c8..005a71aedb881dec5d55c728408e73c849f6940c 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."