From 2bf14b29d1d4fa39d90c1294a2fd3a180fda5e87 Mon Sep 17 00:00:00 2001 From: samuop Date: Wed, 20 Nov 2024 11:57:19 -0300 Subject: [PATCH] mock Up de baja de alumno --- .../Pages-Alumnos/DarseBaja/DarseBaja.tsx | 75 ++++++++++++---- .../Pages/Estadisticas/AlumnosBaja.tsx | 85 +++++++++++++++++-- .../Estadisticas/SubPages/TablaAlumnos.tsx | 1 + 3 files changed, 138 insertions(+), 23 deletions(-) diff --git a/FrontAdmin/src/components/Pages-Alumnos/DarseBaja/DarseBaja.tsx b/FrontAdmin/src/components/Pages-Alumnos/DarseBaja/DarseBaja.tsx index a61adea..a6e9fdb 100644 --- a/FrontAdmin/src/components/Pages-Alumnos/DarseBaja/DarseBaja.tsx +++ b/FrontAdmin/src/components/Pages-Alumnos/DarseBaja/DarseBaja.tsx @@ -4,7 +4,6 @@ import { FetchCompromisos } from '../../../API-Alumnos/Compromiso'; import { FetchDetalleAlumno } from '../../../API/DetalleAlumno'; import Cookies from 'js-cookie'; import ModalConfirmar from './ModalConfir'; -import { solicitarBajaAlumno } from '../../../API-Alumnos/DarseBaja'; interface Alumno { full_name: string; @@ -41,6 +40,7 @@ const DarseBaja = () => { }); const [alumno, setAlumno] = useState(null); const [compromisoFirmado, setCompromiso] = useState(null); + const [motivoBaja, setMotivoBaja] = useState(null); const { isOpen, onOpen, onClose } = useDisclosure(); const handleDarseBaja = () => { @@ -60,8 +60,22 @@ const DarseBaja = () => { const fetchDetalleAlumno = async (dni: any) => { try { const data = await FetchDetalleAlumno(dni); - console.log('alumno:', data); - setAlumno(data); + const bajaInfo = localStorage.getItem('bajaAlumnos'); + if (bajaInfo) { + const parsedBajaInfo = JSON.parse(bajaInfo); + const alumnoBaja = parsedBajaInfo.find((baja: any) => baja.dni === parseInt(dni)); + if (alumnoBaja) { + setAlumno({ + ...data, + estado_academico: alumnoBaja.solicitud === 'solicitado' ? 'Baja solicitada' : alumnoBaja.solicitud === 'aceptado' ? 'Baja aceptada' : alumnoBaja.solicitud === 'rechazado' ? 'Baja rechazada' : data.estado_academico, + }); + setMotivoBaja(alumnoBaja.motivo); + } else { + setAlumno(data); + } + } else { + setAlumno(data); + } } catch (error) { console.error('Error al obtener los datos del alumno', error); } @@ -69,23 +83,49 @@ const DarseBaja = () => { const handleConfirmarBaja = async (motivo: string) => { if (alumno?.dni) { - const success = await solicitarBajaAlumno(alumno.dni, motivo); - if (success) { - setAlumno((prev) => prev ? { ...prev, estado_academico: 'Dado de Baja' } : null); - } + // Crear un objeto con la información del alumno y el motivo de la baja + const bajaInfo = { + dni: alumno.dni, + nombre: alumno.full_name, + motivo: motivo, + solicitud: "solicitado", + }; + + // Obtener el arreglo de solicitudes de baja del local storage + const bajaAlumnos = localStorage.getItem('bajaAlumnos'); + const parsedBajaAlumnos = bajaAlumnos ? JSON.parse(bajaAlumnos) : []; + + // Agregar la nueva solicitud de baja al arreglo + parsedBajaAlumnos.push(bajaInfo); + + // Guardar el arreglo actualizado en el local storage + localStorage.setItem('bajaAlumnos', JSON.stringify(parsedBajaAlumnos)); + + console.log('Información de baja guardada en el local storage:', bajaInfo); + + // Recargar los datos del alumno y los compromisos + const dni = Cookies.get('dni'); + if (dni) { + await fetchDetalleAlumno(dni); + await fetchCompromiso(); + } } }; useEffect(() => { const dni = Cookies.get('dni'); - fetchDetalleAlumno(dni); - fetchCompromiso(); + if (dni) { + fetchDetalleAlumno(dni); + fetchCompromiso(); + } else { + console.error('DNI no encontrado en las cookies'); + } }, []); return ( - {(compromisoFirmado && compromisoFirmado.results[0]?.firmo_ultimo_compromiso && alumno?.estado_academico !== 'Dado de Baja') && + {(compromisoFirmado && compromisoFirmado.results[0]?.firmo_ultimo_compromiso && alumno?.estado_academico !== 'Baja solicitada') && Si se da de baja, aún deberá abonar la cuota del mes en curso. @@ -97,18 +137,17 @@ const DarseBaja = () => { Compromiso de pago no firmado } - - - {alumno?.estado_academico !== 'Dado de Baja' && + {alumno?.estado_academico === 'Activo' && Solicitud de Baja al {fechaDeHoy} } - {alumno?.estado_academico === 'Dado de Baja' && + {alumno?.estado_academico === 'Baja solicitada' && Baja solicitada el {fechaDeHoy} + } @@ -129,12 +168,18 @@ const DarseBaja = () => { + {motivoBaja && ( + + Motivo de la baja: + {motivoBaja} + + )} diff --git a/FrontAdmin/src/components/Pages/Estadisticas/AlumnosBaja.tsx b/FrontAdmin/src/components/Pages/Estadisticas/AlumnosBaja.tsx index 8c71792..d13221e 100644 --- a/FrontAdmin/src/components/Pages/Estadisticas/AlumnosBaja.tsx +++ b/FrontAdmin/src/components/Pages/Estadisticas/AlumnosBaja.tsx @@ -1,11 +1,80 @@ -import React from 'react'; -import TablaAlumnos from './SubPages/TablaAlumnos'; -import { FetchFirmantes } from '../../../API/AlumnosCompromisoPago'; - -const AlumnosBaja = () => { - return ( - - ); +import React, { useState, useEffect } from 'react'; +import { Box, Button, Flex, Text } from '@chakra-ui/react'; +import ModalComponent from '../../Modal/ModalConfirmarCambios'; + +interface BajaInfo { + dni: number; + nombre: string; + motivo: string; + solicitud: string; +} + +const AlumnosBaja = () => { + const [bajas, setBajas] = useState([]); + const [isModalOpen, setIsModalOpen] = useState(false); + const [selectedBaja, setSelectedBaja] = useState(null); + const [accion, setAccion] = useState<'aceptar' | 'rechazar'>('aceptar'); + + useEffect(() => { + // Obtener las solicitudes de baja del local storage + const bajaAlumnos = localStorage.getItem('bajaAlumnos'); + if (bajaAlumnos) { + setBajas(JSON.parse(bajaAlumnos)); + } + }, []); + + const handleAceptar = (baja: BajaInfo) => { + setSelectedBaja(baja); + setAccion('aceptar'); + setIsModalOpen(true); + }; + + const handleRechazar = (baja: BajaInfo) => { + setSelectedBaja(baja); + setAccion('rechazar'); + setIsModalOpen(true); + }; + + const confirmarAccion = () => { + if (selectedBaja) { + const nuevasBajas = bajas.map(baja => + baja.dni === selectedBaja.dni ? { ...baja, solicitud: accion === 'aceptar' ? 'aceptado' : 'rechazado' } : baja + ); + localStorage.setItem('bajaAlumnos', JSON.stringify(nuevasBajas)); + setBajas(nuevasBajas); + console.log(`Solicitud de baja ${accion} para el alumno con DNI: ${selectedBaja.dni}`); + } + }; + + return ( +
+ + {bajas.length === 0 ? ( + No hay solicitudes de baja. + ) : ( + bajas.map(baja => ( + + Nombre: {baja.nombre} + DNI: {baja.dni} + Motivo: {baja.motivo} + Estado: {baja.solicitud.toUpperCase()} + + + + + + )) + )} + {selectedBaja && ( + setIsModalOpen(false)} + texto={`¿Está seguro que desea ${accion} la solicitud de baja del alumno ${selectedBaja.nombre}?`} + confirmar={confirmarAccion} + /> + )} +
+ ); }; export default AlumnosBaja; diff --git a/FrontAdmin/src/components/Pages/Estadisticas/SubPages/TablaAlumnos.tsx b/FrontAdmin/src/components/Pages/Estadisticas/SubPages/TablaAlumnos.tsx index 6b7a3eb..6961236 100644 --- a/FrontAdmin/src/components/Pages/Estadisticas/SubPages/TablaAlumnos.tsx +++ b/FrontAdmin/src/components/Pages/Estadisticas/SubPages/TablaAlumnos.tsx @@ -92,6 +92,7 @@ const TablaAlumnos: React.FC = ({ fetchFunction, title }) => return ( +