diff --git a/FrontAdmin/src/API-Alumnos/DarseBaja.ts b/FrontAdmin/src/API-Alumnos/DarseBaja.ts new file mode 100644 index 0000000..8a5e414 --- /dev/null +++ b/FrontAdmin/src/API-Alumnos/DarseBaja.ts @@ -0,0 +1,28 @@ +import Cookies from 'js-cookie'; + +export const solicitarBajaAlumno = async (dni: number, motivo: string) => { + try { + const response = await fetch(`http://localhost:8000/api/alumnos/baja/${dni}/`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${Cookies.get('tokennn')}`, + }, + body: JSON.stringify({ + dni: dni, + motivo: motivo, + }), + }); + + if (response.ok) { + + return true; + } else { + console.error('Error al solicitar la baja'); + return false; + } + } catch (error) { + console.error('Error al solicitar la baja:', error); + return false; + } +}; diff --git a/FrontAdmin/src/components/Pages-Alumnos/DarseBaja/DarseBaja.tsx b/FrontAdmin/src/components/Pages-Alumnos/DarseBaja/DarseBaja.tsx index 705ba63..a61adea 100644 --- a/FrontAdmin/src/components/Pages-Alumnos/DarseBaja/DarseBaja.tsx +++ b/FrontAdmin/src/components/Pages-Alumnos/DarseBaja/DarseBaja.tsx @@ -1,8 +1,10 @@ import React, { useState, useEffect } from 'react'; -import { Flex, Box, Tag, Text, Button, Alert, AlertIcon } from '@chakra-ui/react'; +import { Flex, Box, Tag, Text, Button, Alert, AlertIcon, useDisclosure } from '@chakra-ui/react'; import { FetchCompromisos } from '../../../API-Alumnos/Compromiso'; -import {FetchDetalleAlumno} from '../../../API/DetalleAlumno' +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; @@ -39,9 +41,10 @@ const DarseBaja = () => { }); const [alumno, setAlumno] = useState(null); const [compromisoFirmado, setCompromiso] = useState(null); + const { isOpen, onOpen, onClose } = useDisclosure(); const handleDarseBaja = () => { - console.log("Solicitud de baja enviada"); + onOpen(); }; const fetchCompromiso = async () => { @@ -57,12 +60,22 @@ const DarseBaja = () => { const fetchDetalleAlumno = async (dni: any) => { try { const data = await FetchDetalleAlumno(dni); + console.log('alumno:', data); setAlumno(data); } catch (error) { console.error('Error al obtener los datos del alumno', error); } }; + 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); + } + } + }; + useEffect(() => { const dni = Cookies.get('dni'); fetchDetalleAlumno(dni); @@ -70,9 +83,9 @@ const DarseBaja = () => { }, []); return ( - + - {(compromisoFirmado && compromisoFirmado.results[0]?.firmo_ultimo_compromiso) && + {(compromisoFirmado && compromisoFirmado.results[0]?.firmo_ultimo_compromiso && alumno?.estado_academico !== 'Dado de Baja') && Si se da de baja, aún deberá abonar la cuota del mes en curso. @@ -86,13 +99,19 @@ const DarseBaja = () => { - + {alumno?.estado_academico !== 'Dado de Baja' && Solicitud de Baja al {fechaDeHoy} - + } + + {alumno?.estado_academico === 'Dado de Baja' && + + Baja solicitada el {fechaDeHoy} + + } - + Estado Actual: @@ -115,10 +134,11 @@ const DarseBaja = () => { + ); diff --git a/FrontAdmin/src/components/Pages-Alumnos/DarseBaja/ModalConfir.tsx b/FrontAdmin/src/components/Pages-Alumnos/DarseBaja/ModalConfir.tsx new file mode 100644 index 0000000..f14d14f --- /dev/null +++ b/FrontAdmin/src/components/Pages-Alumnos/DarseBaja/ModalConfir.tsx @@ -0,0 +1,65 @@ +import React, { useState } from 'react'; +import { + Modal, + ModalOverlay, + ModalContent, + ModalHeader, + ModalFooter, + ModalBody, + ModalCloseButton, + Text, + Button, + Input, + FormControl, + FormLabel, +} from '@chakra-ui/react'; + +interface ModalComponentProps { + isOpen: boolean; + onClose: () => void; + texto: string; + confirmar: (motivo: string) => void; +} + +export default function ModalConfirmar({ + isOpen, + onClose, + texto, + confirmar, +}: ModalComponentProps) { + const [motivo, setMotivo] = useState(''); + + const handleConfirmar = () => { + confirmar(motivo); + onClose(); + }; + + return ( + + + + Confirmar cambios + + + {texto} + + Motivo de la baja + setMotivo(e.target.value)} + placeholder="Escribe el motivo aquí" + /> + + + + + + + + + ); +} \ No newline at end of file