diff --git a/Manual de Usuario.pdf b/Manual de Usuario.pdf new file mode 100644 index 00000000..ddb775a1 Binary files /dev/null and b/Manual de Usuario.pdf differ diff --git a/README.md b/README.md index 42b85fe0..fe16c39a 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,33 @@ -# React + Go Workspace +# SAGEC - Sistema de Administración de Eventos Científicos + +## Implicados del Proyecto + +### Integrantes del curso de Ingeniería de Software II (CI-4712) (Enero - Marzo 2026): + +#### Profesor: Jean Carlos Guzmán + +#### Equipo 1 (HexaCode): + +* Samuel Rodríguez (Team Lead) | 16-11022@usb.ve +* Sergio Carrillo | 14-11315@usb.ve +* Jesús Cuéllar | 15-10345@usb.ve +* Abel Zabaleta | 15-11574@usb.ve +* Blanyer Vielma | 16-11238@usb.ve +* Mauricio Fragachan | 20-10265@usb.ve + +#### Equipo 2 (Arcadian): + +* Anya Marcano (Team Lead) | 19-10336@usb.ve +* Rafael Valera | 16-11202@usb.ve +* Franco Murillo | 16-10782@usb.ve +* Laura León | 17-10307@usb.ve +* David Pereira | 18-10245@usb.ve +* Carlo Herrera | 18-10451@usb.ve +* Leonardo Dolande | 19-10181@usb.ve + +Universidad Simón Bolívar, Venezuela. + +## React + Go Workspace Este proyecto contiene: diff --git a/frontend/src/screens/inscriptions/InscriptionAdminScreen.tsx b/frontend/src/screens/inscriptions/InscriptionAdminScreen.tsx index 0fca34f9..faa17e8f 100644 --- a/frontend/src/screens/inscriptions/InscriptionAdminScreen.tsx +++ b/frontend/src/screens/inscriptions/InscriptionAdminScreen.tsx @@ -20,6 +20,8 @@ const statusOptions = [ { value: "Rechazado", label: "Rechazado" }, ]; +const statusFilterOptions = [{ value: "", label: "Todos" }, ...statusOptions]; + function getAuthUser() { const raw = localStorage.getItem("auth-user"); if (!raw) return null; @@ -60,6 +62,10 @@ export default function InscriptionAdminScreen(): JSX.Element { return events.map((ev) => ({ value: String(ev.id_evento), label: ev.nombre })); }, [events]); + const eventFilterOptions = useMemo(() => { + return [{ value: "", label: "Todos" }, ...eventOptions]; + }, [eventOptions]); + const loadData = async (opts?: { silent?: boolean }) => { const silent = opts?.silent ?? false; if (!silent && !initialLoaded) { @@ -162,170 +168,194 @@ export default function InscriptionAdminScreen(): JSX.Element { (newStatus !== selected.estado || note.trim().length > 0); return ( -
-
-

Gestión de inscripciones

-

Revisa y actualiza el estado de los usuarios inscritos.

-
+
+
+

+ Gestión de inscripciones +

+

+ Revisa y actualiza el estado de los usuarios inscritos. +

+
-
- setStatusFilter(Array.isArray(value) ? value[0] ?? "" : value)} - options={statusOptions} - inputLabel="Filtrar por estado" - placeholder="Todos" - allowCustom={false} - /> - setEventFilter(Array.isArray(value) ? value[0] ?? "" : value)} - options={eventOptions} - inputLabel="Filtrar por evento" - placeholder="Todos" - allowCustom={false} - /> -
- - setQuery(e.target.value)} - /> -
-
+
+ + setStatusFilter(Array.isArray(value) ? (value[0] ?? "") : value) + } + options={statusFilterOptions} + inputLabel="Filtrar por estado" + placeholder="Todos" + allowCustom={false} + /> + + setEventFilter(Array.isArray(value) ? (value[0] ?? "") : value) + } + options={eventFilterOptions} + inputLabel="Filtrar por evento" + placeholder="Todos" + allowCustom={false} + /> +
+ + setQuery(e.target.value)} + /> +
+
- {loading && !initialLoaded ? ( -
- -
- ) : error ? ( - - ) : ( -
- {refreshing && ( -
- - Actualizando filtros... -
- )} - - - - - - - - - - - - {pagedRows.length === 0 ? ( - - - - ) : ( - pagedRows.map((row) => ( - - - - - - - - )) - )} - -
EventoParticipanteCorreoEstadoFecha
- Sin inscripciones. -
{row.evento_nombre} - - {row.email}{row.estado}{row.fecha_inscripcion}
-
+ {loading && !initialLoaded ? ( +
+ +
+ ) : error ? ( + + ) : ( +
+ {refreshing && ( +
+ + Actualizando filtros... +
)} - - {!loading && rows.length > 0 ? ( -
- - Página {page} de {totalPages} - -
- + + + + + + + + + + + + {pagedRows.length === 0 ? ( + + + + ) : ( + pagedRows.map((row) => ( + + + + + + + + )) )} - - + +
EventoParticipanteCorreoEstadoFecha
+ Sin inscripciones. +
{row.evento_nombre} - - - ) : null} - - - {selected && ( -
-
-

{selected.nombre_participante}

-

{selected.email}

-

{selected.evento_nombre}

-

Estado actual: {selected.estado}

-

Fecha inscripción: {selected.fecha_inscripcion}

-
- setNewStatus(Array.isArray(value) ? value[0] ?? "" : value)} - options={statusOptions} - inputLabel="Nuevo estado" - placeholder="Selecciona" - allowCustom={false} - /> - setNote(e.target.value)} - /> -
- - -
-
+
{row.email}{row.estado}{row.fecha_inscripcion}
+
+ )} + + {!loading && rows.length > 0 ? ( +
+ + Página {page} de {totalPages} + +
+ + +
+
+ ) : null} + + + {selected && ( +
+
+

{selected.nombre_participante}

+

{selected.email}

+

{selected.evento_nombre}

+

+ Estado actual: {selected.estado} +

+

+ Fecha inscripción: {selected.fecha_inscripcion} +

+
+ + setNewStatus(Array.isArray(value) ? (value[0] ?? "") : value) + } + options={statusOptions} + inputLabel="Nuevo estado" + placeholder="Selecciona" + allowCustom={false} + /> + setNote(e.target.value)} + /> +
+ + +
+
+ )} +
+
); }