diff --git a/cosiap_api/solicitudes/views.py b/cosiap_api/solicitudes/views.py index f87171255f6424dd88698802273ab25211817ab1..ae63911480f7f320ba9b7f9a7e908708fa364be8 100644 --- a/cosiap_api/solicitudes/views.py +++ b/cosiap_api/solicitudes/views.py @@ -47,37 +47,49 @@ class SolicitudAPIView(DynamicTableAPIView): non_editable_fields = ["id"] dynamic_form_exist = True + class SolicitarAPIView(BasePermissionAPIView): ''' Clase para manejar la lógica de la creación y edición de solicitudes ''' - + permission_classes_create = [IsAuthenticated, primer_login] permission_classes_update = [IsAuthenticated, primer_login] permission_classes_list = [IsAuthenticated] - def get(self, request, *args, **kwargs): ''' Metodo GET para obtener el formulario a contestar de la modalidad ''' - data = {} try: + # Obtener el solicitante asociado al usuario autenticado solicitante = Solicitante.objects.get(id=request.user.id) + + # Obtener el id de la modalidad desde los parámetros de la solicitud modalidad_id = request.query_params.get('modalidad_id', None) + if not modalidad_id: + Mensaje.error(data, 'El parámetro modalidad_id es requerido.') + return Response(data, status=status.HTTP_400_BAD_REQUEST) + + # Buscar la modalidad por su id modalidad = Modalidad.objects.get(id=modalidad_id) - # Crear una solicitud temporal + # Crear una instancia temporal de Solicitud (sin guardarla en la base de datos) solicitud_temporal = Solicitud( solicitante=solicitante, modalidad=modalidad, + # Otros campos pueden inicializarse aquí si es necesario ) - # Serializar el formulario basado en la modalidad + solicitud_temporal.id = -1 + + # Serializar el formulario basado en la modalidad dinámica form = RespuestaFormularioSerializer(solicitud_temporal, dynamic_form_source='modalidad__dynamic_form') form_data = form.data + + # Devolver el formulario serializado return Response(form_data, status=status.HTTP_200_OK) except Modalidad.DoesNotExist: @@ -89,6 +101,7 @@ class SolicitarAPIView(BasePermissionAPIView): return Response(data, status=status.HTTP_404_NOT_FOUND) except Exception as e: + # Captura de otros errores Mensaje.error(data, str(e)) return Response(data, status=status.HTTP_400_BAD_REQUEST)