Skip to content

Commit

Permalink
Tup 121 fix agregar alumnos que estan inscriptos a materias y no firm…
Browse files Browse the repository at this point in the history
…aron el compromiso de pago (#162)
  • Loading branch information
facundomelgarejo authored Nov 25, 2024
2 parents 927b583 + fadd0b8 commit 7c99018
Show file tree
Hide file tree
Showing 6 changed files with 175 additions and 29 deletions.
30 changes: 30 additions & 0 deletions FrontAdmin/src/API/AlumnosPendienteFirma.ts
Original file line number Diff line number Diff line change
@@ -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);
}
};
Original file line number Diff line number Diff line change
@@ -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<string>(''); // Estado para el cuatrimestre
const [anio, setAnio] = useState<string>(''); // Estado para el año
const [formSubmitted, setFormSubmitted] = useState<boolean>(false);
const navigate = useNavigate();

// Verificar si el formulario está completo (ambos campos seleccionados)
const isFormValid = cuatrimestre !== '' && anio !== '';
Expand All @@ -16,25 +20,18 @@ const AlumnosCompromisoPago: React.FC = () => {
setFormSubmitted(true);
};

const handleBackClick = () => {
setFormSubmitted(false);
};
return (
<div>
{!formSubmitted ? (
<Box display="flex" flexDirection="column" justifyContent="flex-start" alignItems="center" height="100vh" p={4} py={12}>
<Text fontSize="3xl" fontWeight="bold" mb={6}>
Seleccione un cuatrimestre y un año
Seleccione un año y un cuatrimestre
</Text>

<Select
placeholder="Seleccione un cuatrimestre"
value={cuatrimestre}
onChange={(e) => setCuatrimestre(e.target.value)}
mb={4}
width="100%"
maxWidth="400px"
>
<option value="1C">Primer Cuatrimestre</option>
<option value="2C">Segundo Cuatrimestre</option>
</Select>


<Select
placeholder="Seleccione un año"
Expand All @@ -44,8 +41,23 @@ const AlumnosCompromisoPago: React.FC = () => {
width="100%"
maxWidth="400px"
>
<option value="2023">2023</option>
<option value="2024">2024</option>
<option value="2023">2023</option>
<option value="2023">2022</option>

</Select>

<Select
placeholder="Seleccione un cuatrimestre"
value={cuatrimestre}
onChange={(e) => setCuatrimestre(e.target.value)}
mb={4}
width="100%"
maxWidth="400px"
>
<option value="2C">Segundo Cuatrimestre</option>
<option value="1C">Primer Cuatrimestre</option>

</Select>

<Button
Expand All @@ -61,17 +73,72 @@ const AlumnosCompromisoPago: React.FC = () => {
</Button>
</Box>
) : (
<Tabs variant="enclosed" index={index} onChange={setIndex} isLazy>
<Box>
<Button
position="absolute"
left="25%"
color="white"
size="sm"
onClick={handleBackClick}
m={4}
>
<ArrowLeftIcon mr="10px" /> Volver{' '}
</Button>
<Flex pt="60px" >
<Alert status='info'> <AlertIcon /> Periodo Seleccionado: {anio} - {cuatrimestre == '1C' ? 'Primer Cuatrimestre' : 'Segundo Cuatrimestre'}</Alert>
</Flex>
<Tabs w={"100%"}>
<TabList display="flex" justifyContent="center" alignItems="center" borderBottom="2px solid" borderColor="gray.200">
<Tab
_selected={{
borderBottom: "2px solid",
borderColor: "blue.500",
color: "blue.500",
borderTop: "none",
borderLeft: "none",
borderRight: "none"
}}
_focus={{ boxShadow: "none" }}
>
Compromiso firmado
</Tab>
<Tab
_selected={{
borderBottom: "2px solid",
borderColor: "blue.500",
color: "blue.500",
borderTop: "none",
borderLeft: "none",
borderRight: "none"
}}
_focus={{ boxShadow: "none" }}
>
Compromiso pendiente de firma
</Tab>
</TabList>
<TabPanels>
<TabPanel>

<TablaAlumnos
fetchFunction={() => FetchFirmantes(cuatrimestre, parseInt(anio))}
title="Alumnos que abonaron matrícula"
title="Alumnos que firmaron compromiso"
/>
</TabPanel>

<TabPanel>

<TablaAlumnos
fetchFunction={() => FetchNoFirmantes(cuatrimestre, parseInt(anio))}
title="Alumnos que no firmaron compromiso"
/>
</TabPanel>


</TabPanels>
</Tabs>
)}
</Box>
)
}
</div>
);
};
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import {Box, Flex, Alert, AlertIcon, Center} from '@chakra-ui/react';
import TablaAlumnos from './TablaAlumnos';
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 (
<Box>
<Alert status='warning' m={4}> <AlertIcon /> Alumnos que cursan una matería del cuatrimestre actual y no firmaron el compromiso de pago (Total: {count}).</Alert>
{/* <Alert status='info' alignItems={'center'} maxW={'20%'} p={'10px'} m={4}> <AlertIcon /> Total: {count} alumnos.</Alert> */}
<TablaAlumnos
fetchFunction={async () => {
return results; // Retorna solo los resultados al componente
}}
title="Alumnos que no firmaron compromiso actual"
/>
</Box>
);
}

export default PendientesFirma;
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ const TablaAlumnos: React.FC<TablaAlumnosProps> = ({ fetchFunction, title }) =>
{['APELLIDO Y NOMBRE', 'LEGAJO', 'DNI', 'ESTADO FINANCIERO', 'AÑO INGRESO'].map((field) => (
<Th key={field} fontFamily="Helvetica" fontWeight="900">
{field.toUpperCase()}
{/*
quite xq no andaba
<IconButton
icon={sortOrder === 'asc' ? <ChevronUpIcon /> : <ChevronDownIcon />}
size="xs"
Expand All @@ -117,7 +119,7 @@ const TablaAlumnos: React.FC<TablaAlumnosProps> = ({ fetchFunction, title }) =>
bg="transparent"
_hover={{ bg: 'gray.200' }}
_active={{ bg: 'gray.300' }}
/>
/> */}
</Th>
))}
</Tr>
Expand Down
18 changes: 8 additions & 10 deletions FrontAdmin/src/components/SubMenu/LinksSubMenu.tsx
Original file line number Diff line number Diff line change
@@ -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' },
];
6 changes: 6 additions & 0 deletions FrontAdmin/src/routes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 = [
{
Expand Down Expand Up @@ -113,7 +114,12 @@ const routes = [
element: <Inhabilitados />,
rol: 'admin',
},
{
path: 'pendientes-firma-compromiso',
element: <PendientesFirma />,
rol: 'admin',

},
],
},
{
Expand Down

0 comments on commit 7c99018

Please sign in to comment.