From 45d60d87ec0699c37f799ff81e56ef58ec642f18 Mon Sep 17 00:00:00 2001 From: IO <320154041@pcpuma.acatlan.unam.mx> Date: Tue, 17 Feb 2026 17:14:27 -0600 Subject: [PATCH] fixed get alumno-sancion --- .../AsignacionEquipo/PlaticaGate.tsx | 11 ++- app/Components/AsignacionMesas.tsx | 12 ++- .../BitacoraSanciones/ApplySanction.tsx | 75 +++++++++++-------- .../BitacoraSanciones/TableSanction.tsx | 6 +- .../QuitarSancion/QuitarSancion.tsx | 34 ++++----- 5 files changed, 78 insertions(+), 60 deletions(-) diff --git a/app/(private)/AsignacionEquipo/PlaticaGate.tsx b/app/(private)/AsignacionEquipo/PlaticaGate.tsx index 8542a8b..0a06bd2 100644 --- a/app/(private)/AsignacionEquipo/PlaticaGate.tsx +++ b/app/(private)/AsignacionEquipo/PlaticaGate.tsx @@ -23,6 +23,7 @@ export default function PlaticaGate({ inscripcion, numAcount }: Props) { const [open, setOpen] = useState(false); const [tiempo, setTiempo] = useState(15); const [bitacora, setBitacora] = useState<[] | null>([]); + const [error, setError] = useState(); const fetchByCuenta = async (idCuenta: number) => { const [result, resultMesa] = await Promise.all([ @@ -34,8 +35,8 @@ export default function PlaticaGate({ inscripcion, numAcount }: Props) { setBitacora(null); } else { setBitacora([]); - if (!result?.error) toast.error("Ya cuentas con un equipo asignado"); - if (!resultMesa?.error) toast.error("Ya cuentas con una mesa asignada"); + if (!result?.error) setError("Equipo"); + if (!resultMesa?.error) setError("Mesa"); } }; @@ -136,7 +137,11 @@ export default function PlaticaGate({ inscripcion, numAcount }: Props) { }; if (bitacora) { - return <>; + return error === "Mesa" + ?

Ya cuentas con una mesa asignada

+ : error === "Equipo" + ?

Ya cuentas con un equipo asignado

+ : null; } return ( diff --git a/app/Components/AsignacionMesas.tsx b/app/Components/AsignacionMesas.tsx index f68c015..0caf504 100644 --- a/app/Components/AsignacionMesas.tsx +++ b/app/Components/AsignacionMesas.tsx @@ -19,6 +19,7 @@ export default function AsignacionMesas({ idCuenta, inscripcion }: Props) { const [mesaSeleccionada, setMesaSeleccionada] = useState(null); const [tiempo, setTiempo] = useState(15); const [bitacora, setBitacora] = useState<[] | null>([]); + const [error, setError] = useState(); const fetchByCuenta = async (idCuenta: number) => { const [result, resultMesa] = await Promise.all([ @@ -30,8 +31,8 @@ export default function AsignacionMesas({ idCuenta, inscripcion }: Props) { setBitacora(null); } else { setBitacora([]); - if (!result?.error) toast.error("Ya cuentas con un equipo asignado"); - if (!resultMesa?.error) toast.error("Ya cuentas con una mesa asignada"); + if (!result?.error) setError("Equipo"); + if (!resultMesa?.error) setError("Mesa"); } }; @@ -128,8 +129,13 @@ export default function AsignacionMesas({ idCuenta, inscripcion }: Props) { if (!puedeContinuar) return null; if (bitacora) { - return <>; + return error === "Mesa" + ?

Ya cuentas con una mesa asignada

+ : error === "Equipo" + ?

Ya cuentas con un equipo asignado

+ : null; } + return (
diff --git a/app/Components/BitacoraSanciones/ApplySanction.tsx b/app/Components/BitacoraSanciones/ApplySanction.tsx index d2f1d29..deaa3ba 100644 --- a/app/Components/BitacoraSanciones/ApplySanction.tsx +++ b/app/Components/BitacoraSanciones/ApplySanction.tsx @@ -2,7 +2,6 @@ import { useEffect, useState } from "react"; import { envConfig } from "@/app/lib/config"; -import { useRouter } from "next/navigation"; import { Alumno, AlumnoSancion, Sancion } from "@/app/types/sanction"; import TableSanction from "./TableSanction"; import axios from "axios"; @@ -14,58 +13,67 @@ if (!envConfig.apiUrl) { export default function ApplySanction({ idCuenta }: { idCuenta: number }) { const [sanciones, setSanciones] = useState([]); - const [alumno, setAlumno] = useState(); + const [alumno, setAlumno] = useState(); const [alumnoSanciones, setAlumnoSanciones] = useState([]); const [selectedSancion, setSelectedSancion] = useState(""); + const [loading, setLoading] = useState(false); - const router = useRouter(); + const fetchAlumnoSanciones = async () => { + try { + const res = await axios.get( + `${envConfig.apiUrl}/alumno-sancion/${idCuenta}` + ); + + setAlumno(res.data.student ?? null); + setAlumnoSanciones(res.data.alusancion ?? []); + } catch { + } + }; useEffect(() => { if (!idCuenta) return; - axios - .get(`${envConfig.apiUrl}/alumno-sancion/${idCuenta}`) - .then((res) => { - setAlumno(res.data.student); - setAlumnoSanciones( - res.data.alusancion?.length ? res.data.alusancion : [], - ); - }) - .catch((err) => { - const mensaje = - err.response?.data?.message || - "Error al obtener las sanciones del alumno"; - - }); + fetchAlumnoSanciones(); axios .get(`${envConfig.apiUrl}/sancion`) .then((res) => setSanciones(res.data)) - .catch((err) => - toast.error("Error al obtener el catálogo de sanciones:", err), + .catch(() => + toast.error("Error al obtener el catálogo de sanciones") ); }, [idCuenta]); - const calcularFechaFin = (fechaInicio: string, duracionSemanas: number) => { - const fecha = new Date(fechaInicio); - fecha.setDate(fecha.getDate() + duracionSemanas * 7); - return fecha.toLocaleDateString(); - }; - - const handleButton = (e: React.MouseEvent) => { + const handleButton = async (e: React.MouseEvent) => { e.preventDefault(); if (!selectedSancion) { - toast.error("selecciona una sancion") + toast.error("Selecciona una sanción"); + return; } - axios.post(`${envConfig.apiUrl}/alumno-sancion/`, { id_sancion: Number(selectedSancion), id_cuenta: idCuenta }) - router.refresh(); - } + + try { + setLoading(true); + + await axios.post(`${envConfig.apiUrl}/alumno-sancion/`, { + id_sancion: Number(selectedSancion), + id_cuenta: idCuenta, + }); + + await fetchAlumnoSanciones(); + setSelectedSancion(""); + toast.success("Sanción aplicada correctamente"); + } catch { + toast.error("Error al aplicar la sanción"); + } finally { + setLoading(false); + } + }; return ( <> - {!(alumnoSanciones?.length > 0) && + + {alumnoSanciones.length === 0 && ( <>
@@ -87,11 +95,12 @@ export default function ApplySanction({ idCuenta }: { idCuenta: number }) { className="button buttonSearch" style={{ margin: "1rem 0" }} onClick={handleButton} + disabled={loading} > - Aplicar sanción + {loading ? "Aplicando..." : "Aplicar sanción"} - } + )} ); } diff --git a/app/Components/BitacoraSanciones/TableSanction.tsx b/app/Components/BitacoraSanciones/TableSanction.tsx index 134b25d..99808da 100644 --- a/app/Components/BitacoraSanciones/TableSanction.tsx +++ b/app/Components/BitacoraSanciones/TableSanction.tsx @@ -1,7 +1,7 @@ import { Alumno, AlumnoSancion } from "@/app/types/sanction"; interface Props { - alumnoSanciones: AlumnoSancion[], + alumnoSanciones?: AlumnoSancion[] | null, alumno?: Alumno } @@ -26,8 +26,8 @@ export default function TableSanction({ alumnoSanciones, alumno }: Props) { - {alumnoSanciones.length > 0 ? ( - alumnoSanciones.map((item) => ( + {!(alumnoSanciones?.length === 0) ? ( + alumnoSanciones?.map((item) => ( {alumno?.id_cuenta} {item.sancion.sancion} diff --git a/app/Components/QuitarSancion/QuitarSancion.tsx b/app/Components/QuitarSancion/QuitarSancion.tsx index f1d68d8..5d0718a 100644 --- a/app/Components/QuitarSancion/QuitarSancion.tsx +++ b/app/Components/QuitarSancion/QuitarSancion.tsx @@ -1,7 +1,6 @@ "use client"; import { envConfig } from "@/app/lib/config"; -import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; import TableSanction from "../BitacoraSanciones/TableSanction"; import { Alumno, AlumnoSancion } from "@/app/types/sanction"; @@ -10,32 +9,31 @@ import axios from "axios"; function QuitarSancion({ id_cuenta }: { id_cuenta: number }) { const [alumno, setAlumno] = useState(); const [alumnoSanciones, setAlumnoSanciones] = useState([]); - const router = useRouter(); + + const fetchAlumnoSanciones = async () => { + try { + const res = await axios.get( + `${envConfig.apiUrl}/alumno-sancion/${id_cuenta}` + ); + + setAlumno(res.data.student ?? null); + setAlumnoSanciones(res.data.alusancion ?? []); + } catch { + } + }; useEffect(() => { if (!id_cuenta) return; - axios - .get(`${envConfig.apiUrl}/alumno-sancion/${id_cuenta}`) - .then((res) => { - setAlumno(res.data.student); - setAlumnoSanciones( - res.data.alusancion?.length ? res.data.alusancion : [], - ); - }) - .catch((err) => { - const mensaje = - err.response?.data?.message || - "Error al obtener las sanciones del alumno"; + fetchAlumnoSanciones(); - }); }, [id_cuenta]); - const handleButton = (e: React.MouseEvent) => { + const handleButton = async (e: React.MouseEvent) => { e.preventDefault(); - axios.delete(`${envConfig.apiUrl}/alumno-sancion/${id_cuenta}`) - router.refresh(); + await axios.delete(`${envConfig.apiUrl}/alumno-sancion/${id_cuenta}`) + fetchAlumnoSanciones(); } return (