From fa5f2e3053e2972de22b869e34044f9ec5283deb Mon Sep 17 00:00:00 2001 From: Facundo Melgarejo Date: Mon, 18 Nov 2024 17:39:40 -0300 Subject: [PATCH 1/2] feat: se agrego "Alumnos pendiente de firmas" en estadisticas --- ...Alumnos-que-fimaron-compromiso-de-pago.tsx | 103 +++++++++++++++--- .../Estadisticas/SubPages/PendientesFirma.tsx | 22 ++++ .../src/components/SubMenu/LinksSubMenu.tsx | 18 ++- FrontAdmin/src/routes.tsx | 6 + 4 files changed, 121 insertions(+), 28 deletions(-) create mode 100644 FrontAdmin/src/components/Pages/Estadisticas/SubPages/PendientesFirma.tsx diff --git a/FrontAdmin/src/components/Pages/Estadisticas/SubPages/Alumnos-que-fimaron-compromiso-de-pago.tsx b/FrontAdmin/src/components/Pages/Estadisticas/SubPages/Alumnos-que-fimaron-compromiso-de-pago.tsx index 4ec2259..b7f9dde 100644 --- a/FrontAdmin/src/components/Pages/Estadisticas/SubPages/Alumnos-que-fimaron-compromiso-de-pago.tsx +++ b/FrontAdmin/src/components/Pages/Estadisticas/SubPages/Alumnos-que-fimaron-compromiso-de-pago.tsx @@ -1,13 +1,17 @@ import React, { useState } from 'react'; -import { Tabs, TabList, TabPanels, TabPanel, Button, Box, Text, Select } from '@chakra-ui/react'; +import { Tabs, TabList, Tab, TabPanels, TabPanel, Button, Box, Text, Select, Flex, Tag, Alert, AlertIcon, } from '@chakra-ui/react'; +import {AttachmentIcon, ArrowLeftIcon, ArrowRightIcon} from '@chakra-ui/icons'; import TablaAlumnos from './TablaAlumnos'; -import { FetchFirmantes } from '../../../../API/AlumnosCompromisoPago'; +import { FetchFirmantes,FetchNoFirmantes } from '../../../../API/AlumnosCompromisoPago'; +import { useNavigate } from 'react-router-dom'; +import { blueGrey } from '@mui/material/colors'; const AlumnosCompromisoPago: React.FC = () => { const [index, setIndex] = useState(0); // Estado para manejar la pestaña seleccionada const [cuatrimestre, setCuatrimestre] = useState(''); // Estado para el cuatrimestre const [anio, setAnio] = useState(''); // Estado para el año const [formSubmitted, setFormSubmitted] = useState(false); + const navigate = useNavigate(); // Verificar si el formulario está completo (ambos campos seleccionados) const isFormValid = cuatrimestre !== '' && anio !== ''; @@ -16,25 +20,18 @@ const AlumnosCompromisoPago: React.FC = () => { setFormSubmitted(true); }; + const handleBackClick = () => { + setFormSubmitted(false); + }; return (
{!formSubmitted ? ( - Seleccione un cuatrimestre y un año + Seleccione un año y un cuatrimestre - + + + ) : ( - + + + + Periodo Seleccionado: {anio} - {cuatrimestre == '1C' ? 'Primer Cuatrimestre' : 'Segundo Cuatrimestre'} + + + + + Compromiso firmado + + + Compromiso pendiente de firma + + + FetchFirmantes(cuatrimestre, parseInt(anio))} - title="Alumnos que abonaron matrícula" + title="Alumnos que firmaron compromiso" /> + + + + FetchNoFirmantes(cuatrimestre, parseInt(anio))} + title="Alumnos que no firmaron compromiso" + /> + + + - )} + + ) + }
); }; diff --git a/FrontAdmin/src/components/Pages/Estadisticas/SubPages/PendientesFirma.tsx b/FrontAdmin/src/components/Pages/Estadisticas/SubPages/PendientesFirma.tsx new file mode 100644 index 0000000..431f148 --- /dev/null +++ b/FrontAdmin/src/components/Pages/Estadisticas/SubPages/PendientesFirma.tsx @@ -0,0 +1,22 @@ +import {Box, Flex, Alert, AlertIcon} from '@chakra-ui/react'; +import TablaAlumnos from './TablaAlumnos'; +import { FetchNoFirmantes } from '../../../../API/AlumnosCompromisoPago'; +import { obtenerFechaDeHoy } from '../../../../utils/general'; + +const PendientesFirma = () => { + const fechaHoy = obtenerFechaDeHoy(); + const anio = fechaHoy.split('/')[2]; + const cuatrimestre = parseInt(fechaHoy.split('/')[1]) <= 7 ? '1C' : '2C'; + + return ( + + Alumnos que cursan una matería del cuatrimestre actual y no firmaron el compromiso de pago + FetchNoFirmantes(cuatrimestre, parseInt(anio))} //Aca tengo que cambiar al nuevo endpoint que devuelve solo los que cursan materia y no firmaron el compromiso de pago + title="Alumnos que no firmaron compromiso actual" + /> + + ); +} + +export default PendientesFirma; \ No newline at end of file diff --git a/FrontAdmin/src/components/SubMenu/LinksSubMenu.tsx b/FrontAdmin/src/components/SubMenu/LinksSubMenu.tsx index 2033698..0681ed7 100644 --- a/FrontAdmin/src/components/SubMenu/LinksSubMenu.tsx +++ b/FrontAdmin/src/components/SubMenu/LinksSubMenu.tsx @@ -1,15 +1,13 @@ import { title } from "process"; export const ITEMS_SUBMENU = [ - { url: 'inhabilitaciones', title: 'Inhabilitaciones' }, - { url: 'baja-provisoria', title: 'Baja Provisoria' }, + { url: 'inhabilitaciones', title: 'Inhabilitaciones', tooltip: 'Alumnos que se encuentran inhabilitados' }, + { url: 'baja-provisoria', title: 'Baja Provisoria', tooltip: 'Alumnos que solicitaron la baja' }, { url: 'cuotas', title: 'Cuotas' , tooltip: 'Alumnos que abonaron/no abonaron una respectiva cuota' }, - { url: 'matricula', title: 'Matricula' }, - { url: 'alumnos-que-firmaron-compromiso-de-pago', title: 'Compromiso de Pago'}, - { url: 'pagos', title: 'Pagos' }, - { url: 'deudas', title: 'Deudas' }, - { - url: 'alumnos-que-cursan-materia', - title: 'Alumnos que cursan una materia', - }, + { url: 'matricula', title: 'Matricula', tooltip: 'Alumnos que abonaron la matricula' }, + { url: 'alumnos-que-firmaron-compromiso-de-pago', title: 'Compromiso de Pago', tooltip: 'Alumnos que firmaron el compromiso de pago' }, + { url: 'pagos', title: 'Pagos', tooltip: 'Alumnos que abonaron/no abonaron una respectiva cuota' }, + { url: 'deudas', title: 'Deudas', tooltipo: 'Alumnos que adeudan una cuota' }, + {url: 'alumnos-que-cursan-materia',title: 'Alumnos que cursan una materia', tooltip: 'Alumnos que cursan una materia'}, + { url: 'pendientes-firma-compromiso', title: 'Alumnos pendiente de firma', tooltip: 'Alumnos que cursan una materia y no firmaron el último compromiso de pago' }, ]; diff --git a/FrontAdmin/src/routes.tsx b/FrontAdmin/src/routes.tsx index ea12012..46b311f 100644 --- a/FrontAdmin/src/routes.tsx +++ b/FrontAdmin/src/routes.tsx @@ -37,6 +37,7 @@ import Inhabilitados from './components/Pages/Estadisticas/SubPages/Inhabilitaci import AlumnosBaja from './components/Pages/Estadisticas/AlumnosBaja'; import DarseBaja from './components/Pages-Alumnos/DarseBaja/DarseBaja'; import Deuda from './components/Pages/Estadisticas/SubPages/Pagos/Deuda'; +import PendientesFirma from './components/Pages/Estadisticas/SubPages/PendientesFirma'; const routes = [ { @@ -113,7 +114,12 @@ const routes = [ element: , rol: 'admin', }, + { + path: 'pendientes-firma-compromiso', + element: , + rol: 'admin', + }, ], }, { From fadd0b8f548ae6d297e28c46fbbb1af2a5af5da4 Mon Sep 17 00:00:00 2001 From: Facundo Melgarejo Date: Mon, 25 Nov 2024 19:32:40 -0300 Subject: [PATCH 2/2] feat: implement fetch for pending signatures and update student table --- FrontAdmin/src/API/AlumnosPendienteFirma.ts | 30 ++++++++++++++++ .../Estadisticas/SubPages/PendientesFirma.tsx | 35 +++++++++++++++---- .../Estadisticas/SubPages/TablaAlumnos.tsx | 4 ++- 3 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 FrontAdmin/src/API/AlumnosPendienteFirma.ts diff --git a/FrontAdmin/src/API/AlumnosPendienteFirma.ts b/FrontAdmin/src/API/AlumnosPendienteFirma.ts new file mode 100644 index 0000000..58b28a7 --- /dev/null +++ b/FrontAdmin/src/API/AlumnosPendienteFirma.ts @@ -0,0 +1,30 @@ +import Cookies from 'js-cookie'; + +export const FetchPendientesFirma = async () => { + try { + const token = Cookies.get('tokennn'); + + const response = await fetch( + `http://localhost:8000/api/estadisticas/firmas_pendientes/`, + { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}`, + }, + } + ); + + if (response.ok) { + const data = await response.json(); + return { + results: data.results, // Lista de resultados + count: data.count, // Total de elementos + }; + } else { + throw new Error('Error en la respuesta del servidor'); + } + } catch (error) { + throw new Error('Network error: ' + error); + } +}; \ No newline at end of file diff --git a/FrontAdmin/src/components/Pages/Estadisticas/SubPages/PendientesFirma.tsx b/FrontAdmin/src/components/Pages/Estadisticas/SubPages/PendientesFirma.tsx index 431f148..a1911f7 100644 --- a/FrontAdmin/src/components/Pages/Estadisticas/SubPages/PendientesFirma.tsx +++ b/FrontAdmin/src/components/Pages/Estadisticas/SubPages/PendientesFirma.tsx @@ -1,20 +1,41 @@ -import {Box, Flex, Alert, AlertIcon} from '@chakra-ui/react'; +import {Box, Flex, Alert, AlertIcon, Center} from '@chakra-ui/react'; import TablaAlumnos from './TablaAlumnos'; -import { FetchNoFirmantes } from '../../../../API/AlumnosCompromisoPago'; +import { FetchPendientesFirma } from '../../../../API/AlumnosPendienteFirma'; import { obtenerFechaDeHoy } from '../../../../utils/general'; +import { useState, useEffect } from 'react'; +import { InfoIcon } from '@chakra-ui/icons'; const PendientesFirma = () => { const fechaHoy = obtenerFechaDeHoy(); const anio = fechaHoy.split('/')[2]; const cuatrimestre = parseInt(fechaHoy.split('/')[1]) <= 7 ? '1C' : '2C'; + const [results, setResults] = useState([]); + const [count, setCount] = useState(0); + + const fetchAndSetValues = async (setResults: any, setCount: any) => { + try { + const { results, count } = await FetchPendientesFirma(); // Llama al endpoint y obtiene ambos valores + setResults(results); // Asigna los resultados a la variable de estado o callback + setCount(count); // Asigna el conteo a la variable de estado o callback + } catch (error) { + console.error('Error al obtener los datos:', error); + } + }; + useEffect(() => { + fetchAndSetValues(setResults, setCount); // Llama la función para obtener y setear los valores + }, []); + return ( - Alumnos que cursan una matería del cuatrimestre actual y no firmaron el compromiso de pago - FetchNoFirmantes(cuatrimestre, parseInt(anio))} //Aca tengo que cambiar al nuevo endpoint que devuelve solo los que cursan materia y no firmaron el compromiso de pago - title="Alumnos que no firmaron compromiso actual" - /> + Alumnos que cursan una matería del cuatrimestre actual y no firmaron el compromiso de pago (Total: {count}). +{/* Total: {count} alumnos. */} + { + return results; // Retorna solo los resultados al componente + }} + title="Alumnos que no firmaron compromiso actual" + /> ); } diff --git a/FrontAdmin/src/components/Pages/Estadisticas/SubPages/TablaAlumnos.tsx b/FrontAdmin/src/components/Pages/Estadisticas/SubPages/TablaAlumnos.tsx index 6b7a3eb..e35f23e 100644 --- a/FrontAdmin/src/components/Pages/Estadisticas/SubPages/TablaAlumnos.tsx +++ b/FrontAdmin/src/components/Pages/Estadisticas/SubPages/TablaAlumnos.tsx @@ -104,6 +104,8 @@ const TablaAlumnos: React.FC = ({ fetchFunction, title }) => {['APELLIDO Y NOMBRE', 'LEGAJO', 'DNI', 'ESTADO FINANCIERO', 'AÑO INGRESO'].map((field) => ( {field.toUpperCase()} + {/* + quite xq no andaba : } size="xs" @@ -116,7 +118,7 @@ const TablaAlumnos: React.FC = ({ fetchFunction, title }) => bg="transparent" _hover={{ bg: 'gray.200' }} _active={{ bg: 'gray.300' }} - /> + /> */} ))}