+
+ );
+};
+
+export default EditarSolicitud;
diff --git a/cosiap_frontend/src/components/solicitudes/HistorialSolicitudes.jsx b/cosiap_frontend/src/components/solicitudes/HistorialSolicitudes.jsx
index 3753cdabd1deb2c8fe56a594408068b92de0c060..ed9afbfcab752dbcc948c7cb01c98a89003fbbca 100644
--- a/cosiap_frontend/src/components/solicitudes/HistorialSolicitudes.jsx
+++ b/cosiap_frontend/src/components/solicitudes/HistorialSolicitudes.jsx
@@ -3,25 +3,54 @@ import api from '../../api';
import Tabla from "../common/utility/ReusableTable"; // Importa la tabla reutilizable
import MainContainer from "../common/utility/MainContainer";
import '@/components/solicitudes/HistorialSolicitudes.css'; // Importa los estilos
+import { useNavigate} from 'react-router-dom';
+
// Componente para devolver la lista de las solicitudes de un solicitante
const ListaSolicitudes = () => {
const [solicitudes, setSolicitudes] = useState([]);
+ const [modalidades, setModalidades] = useState([]);
+ const navigate = useNavigate();
// Obtenemos las solicitudes del usuario
useEffect(() => {
const fetchSolicitudes = async () => {
try {
const response = await api.solicitudes.historial.get();
- setSolicitudes(Object.values(response.data) || []);
+ const solicitudesData = Object.values(response.data) || [];
+
+ // Guardamos las solicitudes
+ setSolicitudes(solicitudesData);
+
+ // Creamos un objeto para almacenar los nombres de las modalidades por ID de solicitud
+ const modalidadNombres = {};
+
+ // Realizamos las solicitudes a la API para obtener el nombre de cada modalidad
+ await Promise.all(solicitudesData.map(async (solicitud) => {
+ const modalidadId = solicitud.modalidad;
+ try {
+ const modalidadResponse = await api.modalidades.getById(modalidadId);
+ // Asignamos el nombre de la modalidad en el objeto usando el ID de la solicitud como clave
+ modalidadNombres[solicitud.id] = modalidadResponse.data.data.nombre;
+ } catch (error) {
+ console.error(`Error al obtener el nombre de la modalidad con id ${modalidadId}`, error);
+ modalidadNombres[solicitud.id] = 'Desconocido';
+ }
+ }));
+
+ // Actualizamos el estado con los nombres de las modalidades, almacenados por ID
+ setModalidades(modalidadNombres);
+
} catch (error) {
console.error("Error al obtener la lista de solicitudes", error);
setSolicitudes([]);
}
};
+
fetchSolicitudes();
}, []);
+
// Función para aplicar estilos al estado
const getStatusClass = (status) => {
switch (status) {
@@ -39,8 +68,8 @@ const ListaSolicitudes = () => {
// Definimos las columnas a mostrar en la tabla
const columnas = [
{
- label: "Nº de Solicitud",
- render: (fila) => fila.solicitud_n
+ label: "Modalidad",
+ render: (fila) => modalidades[fila.id] || 'Cargando...'
},
{
label: "Estatus",
@@ -69,12 +98,12 @@ const ListaSolicitudes = () => {
label: "Acciones",
render: (fila) => (
- navigate(`/ver-solicitud/${fila.solicitud_n}`)}
>
Ver
{fila.status === 'Pendiente' && (
- navigate(`/editar-solicitud/${fila.solicitud_n}`)}
>
Editar
diff --git a/cosiap_frontend/src/components/solicitudes/VerSolicitud.jsx b/cosiap_frontend/src/components/solicitudes/VerSolicitud.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..e91fd037e3c52fc485c86262fa8485578e455d89
--- /dev/null
+++ b/cosiap_frontend/src/components/solicitudes/VerSolicitud.jsx
@@ -0,0 +1,101 @@
+import { useState, useEffect } from "react";
+import api from '../../api';
+import MainContainer from "../common/utility/MainContainer";
+import { useParams, useNavigate } from 'react-router-dom';
+import { renderElemento } from "@/components/common/utility/RenderElementView";
+import '@/components/modalidades/Modalidad.css';
+
+const VisualizarSolicitud = () => {
+ const { id } = useParams();
+ const [secciones, setSecciones] = useState({});
+ const [solicitud, setSolicitud] = useState(null);
+ const [modalidad, setModalidad] = useState('');
+ const [respuesta, setRespuesta] = useState([]);
+ const navigate = useNavigate();
+
+ // Obtenemos los datos de la solicitud
+ useEffect(() => {
+ const fetchSolicitud = async () => {
+ try {
+ const response = await api.solicitudes.getById(id);
+ setModalidad(response.data.modalidad);
+ setSolicitud(response.data);
+ setSecciones(response.data.formulario.secciones || {});
+ const respuestasProcesadas = [];
+ // Recorrer todas las secciones
+ Object.values(response.data.formulario.secciones).forEach((seccion) => {
+ Object.values(seccion.elementos).forEach((elemento) => {
+ const respuesta = elemento.respuesta || {}; // Verificar si existe la respuesta
+
+ respuestasProcesadas.push({
+ elemento_id: elemento.id,
+ seccion_id: seccion.id,
+ valor: respuesta.valor || "", // Precargar valor si existe, o dejar vacío
+ status: respuesta.status || "",
+ observacion: respuesta.observacion || ""
+ });
+ });
+ });
+ setRespuesta(respuestasProcesadas);
+ } catch (error) {
+ console.error("Error al obtener la solicitud", error);
+ setSecciones({});
+ }
+ };
+ fetchSolicitud();
+ }, [id]);
+
+ // Renderiza las secciones y sus elementos en modo solo lectura
+ const renderSecciones = () => {
+ return Object.values(secciones).map((seccion) => (
+