diff --git a/FrontAdmin/src/API-Alumnos/Pagos.ts b/FrontAdmin/src/API-Alumnos/Pagos.ts index 71b6718..399f036 100644 --- a/FrontAdmin/src/API-Alumnos/Pagos.ts +++ b/FrontAdmin/src/API-Alumnos/Pagos.ts @@ -36,11 +36,12 @@ export const FetchPostPago = async ( }; -export const FetchGetCuotas = async () => { +export const FetchGetCuotas = async (dni: number | undefined ) => { try { const token = Cookies.get('tokennn'); - const dni = Cookies.get('dni'); - + if (!dni) { + dni = parseInt(Cookies.get('dni') || '', 10); + } const response = await fetch(`http://localhost:8000/api/cuotas/alumno/${dni}/impagas/`, { method: 'GET', headers: { diff --git a/FrontAdmin/src/API/AbonaronCuota.ts b/FrontAdmin/src/API/AbonaronCuota.ts index 953187f..0c40b46 100644 --- a/FrontAdmin/src/API/AbonaronCuota.ts +++ b/FrontAdmin/src/API/AbonaronCuota.ts @@ -1,10 +1,13 @@ import Cookies from 'js-cookie'; -export const AbonaronCuota = async (fecha: string) => { +export const AbonaronCuota = async (fecha: string, limit:number, offset:number, valor?: string) => { try { const token = Cookies.get('tokennn'); - const response = await fetch(`http://localhost:8000/api/alumnos/pagaron-cuota/${fecha}/`, { + const url = valor + ? `http://localhost:8000/api/alumnos/pagaron-cuota/${fecha}/?limit=${limit}&offset=${offset}&valor=${valor}` + : `http://localhost:8000/api/alumnos/pagaron-cuota/${fecha}/?limit=${limit}&offset=${offset}`; + const response = await fetch(url, { method: 'GET', headers: { 'Content-Type': 'application/json', @@ -27,12 +30,15 @@ export const AbonaronCuota = async (fecha: string) => { } }; -export const NoAbonaronCuota = async (fecha: string, limit: number, offset:number) => { - try { - +export const NoAbonaronCuota = async (fecha: string, limit: number, offset: number, valor?: string) => { + try { const token = Cookies.get('tokennn'); - const response = await fetch(`http://localhost:8000/api/alumnos/no-pagaron-cuota/${fecha}/?limit=${limit}&offset=${offset}&ordering=full_name`, { - method: 'GET', + const url = valor + ? `http://localhost:8000/api/alumnos/no-pagaron-cuota/${fecha}/?limit=${limit}&offset=${offset}&valor=${valor}` + : `http://localhost:8000/api/alumnos/no-pagaron-cuota/${fecha}/?limit=${limit}&offset=${offset}`; + + const response = await fetch(url, { + method: 'GET', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}`, diff --git a/FrontAdmin/src/components/Header/HeaderContent.tsx b/FrontAdmin/src/components/Header/HeaderContent.tsx index 48c2069..43fb08b 100644 --- a/FrontAdmin/src/components/Header/HeaderContent.tsx +++ b/FrontAdmin/src/components/Header/HeaderContent.tsx @@ -10,6 +10,7 @@ import { Box, Text, useDisclosure, + Avatar, } from '@chakra-ui/react'; import imgLogo from '../icons/Logos TUP_Mesa de trabajo 1.png'; import logoUser from '../icons/logo-user.png'; @@ -70,10 +71,13 @@ export function HeaderContent({ onOpen }: { onOpen: any }) { display={{ base: 'flex', md: 'none' }} color="white" /> - + {user} - - + + Numero - Fecha Primer Vto. + Fecha Proximo Vto. Valor Actual Valor Pagado Valor Informado diff --git a/FrontAdmin/src/components/Pages-Alumnos/InformarPago/DrawerPago.tsx b/FrontAdmin/src/components/Pages-Alumnos/InformarPago/DrawerPago.tsx index 8e9ed6d..fb772c9 100644 --- a/FrontAdmin/src/components/Pages-Alumnos/InformarPago/DrawerPago.tsx +++ b/FrontAdmin/src/components/Pages-Alumnos/InformarPago/DrawerPago.tsx @@ -143,9 +143,9 @@ const DrawerInformar: React.FC = ({ isOpen, onClose, cuotas ))} Total a abonar: - {"$" + new Intl.NumberFormat('es-ES').format(total)} + {"$" + new Intl.NumberFormat('es-ES').format(total)} - + {/* Monto Abonado @@ -154,14 +154,14 @@ const DrawerInformar: React.FC = ({ isOpen, onClose, cuotas - + */} - Comentarios + Comentarios setComentarios(e.target.value)} /> - Al seleccionar Guardar se lo redirigira al google forms para que pueda continuar con el informe del pago + Al seleccionar Guardar se lo redirigira al google forms para que pueda continuar con el informe del pago. Revisar tener desactivado el bloqueo de ventanas emergentes diff --git a/FrontAdmin/src/components/Pages-Alumnos/InformarPago/TablaPagos.tsx b/FrontAdmin/src/components/Pages-Alumnos/InformarPago/TablaPagos.tsx index a1d68c5..d98cc18 100644 --- a/FrontAdmin/src/components/Pages-Alumnos/InformarPago/TablaPagos.tsx +++ b/FrontAdmin/src/components/Pages-Alumnos/InformarPago/TablaPagos.tsx @@ -39,7 +39,7 @@ function TablaCuotas({ refresh, setCuotasSeleccionadas, cuotasSeleccionadas }: T const getCuotas = async () => { setLoading(true); try { - const cuotas = await FetchGetCuotas(); + const cuotas = await FetchGetCuotas(undefined); const sortedCuotas = cuotas.sort((a: Cuota, b: Cuota) => parseInt(a.numero) - parseInt(b.numero)); // Si cambia el numero de cuota no olvidar cambiar aca setCuotas(sortedCuotas); } catch (error) { @@ -94,7 +94,7 @@ function TablaCuotas({ refresh, setCuotasSeleccionadas, cuotasSeleccionadas }: T Cuota - Fecha Primer VTO. + Fecha Proximo VTO. Valor Actual Valor Pagado Valor Informado diff --git a/FrontAdmin/src/components/Pages/Alumnos/SubPages/FichaAlumno.tsx b/FrontAdmin/src/components/Pages/Alumnos/SubPages/FichaAlumno.tsx index 1f33ced..1255893 100644 --- a/FrontAdmin/src/components/Pages/Alumnos/SubPages/FichaAlumno.tsx +++ b/FrontAdmin/src/components/Pages/Alumnos/SubPages/FichaAlumno.tsx @@ -32,6 +32,7 @@ import { FetchDetalleAlumno, FetchMateriasAlumno, } from '../../../../API/DetalleAlumno.ts'; +import { FetchGetCuotas } from '../../../../API-Alumnos/Pagos.ts'; import { FetchCompromisosAlumno } from '../../../../API-Alumnos/Compromiso.ts'; import React, { useState, useEffect, useMemo } from 'react'; import { ArrowLeftIcon, ChevronLeftIcon } from '@chakra-ui/icons'; @@ -75,6 +76,7 @@ function FichaAlumno() { const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [firmoCompromiso, setFirmoCompromiso] = useState(false); + const [deuda, setDeuda] = useState(0); const navigate = useNavigate(); const handleBackClick = () => { @@ -93,8 +95,6 @@ function FichaAlumno() { } catch (error) { setError(error); console.error('Error al obtener los datos', error); - } finally { - setLoading(false); } }; @@ -129,10 +129,36 @@ function FichaAlumno() { } } + const fetchImpagas = async () => { + try { + if (dni) { + const dniNumber = parseInt(dni, 10); + const data = await FetchGetCuotas(dniNumber); + if (data.length > 0) { + const today = new Date(); + const totalDeuda = data.reduce((acc: number, cuota: Cuota) => { + const fechaVencimiento = new Date(cuota.fechaVencimiento); + if (fechaVencimiento < today) { + return acc + cuota.montoActual; + } + return acc; + }, 0); + setDeuda(totalDeuda); + } + } + } catch (error) { + setError(error); + console.error('Error al obtener los datos', error); + } finally { + setLoading(false); + } + }; + if (dni) { fetchDetalleAlumno(dni); fetchEstadoCuentaAlumno(); fetchCompromiso(); + fetchImpagas(); } @@ -152,7 +178,7 @@ function FichaAlumno() { return ( - + - + Apellido y nombre @@ -219,33 +245,76 @@ function FichaAlumno() { - + - - - Estado de cuenta - Materias que cursa - + + + + Estado de Cuenta + + + Materias que cursa + + + Inhabilitaciones + + - - - Estado de cuenta al {(new Date().toLocaleDateString())} - + + + + Estado de cuenta al {(new Date().toLocaleDateString())} + + + Deuda total: {'$ ' + new Intl.NumberFormat('es-ES').format(deuda)} + + {cuotas.length > 1 ? ( diff --git a/FrontAdmin/src/components/Pages/Estadisticas/SubPages/Cuotas/Listado.tsx b/FrontAdmin/src/components/Pages/Estadisticas/SubPages/Cuotas/Listado.tsx index b9fe12e..4594a7d 100644 --- a/FrontAdmin/src/components/Pages/Estadisticas/SubPages/Cuotas/Listado.tsx +++ b/FrontAdmin/src/components/Pages/Estadisticas/SubPages/Cuotas/Listado.tsx @@ -1,9 +1,10 @@ import { useParams } from "react-router-dom"; import { useState, useEffect } from "react"; import { AbonaronCuota, NoAbonaronCuota } from "../../../../../API/AbonaronCuota"; -import { Box, Button, Flex, Tab, TabList, Text ,TabPanel, TabPanels, Tabs, Tag } from "@chakra-ui/react"; +import { Box, Button, Flex, Tab, TabList, Text ,TabPanel, TabPanels, Tabs, Tag, Spinner, Input } from "@chakra-ui/react"; import Tabla from "./Tabla"; import {ArrowRightIcon, ArrowLeftIcon} from '@chakra-ui/icons'; +import { isLastDayOfMonth } from "date-fns"; export default function Listado() { type Alumno = { @@ -15,12 +16,15 @@ export default function Listado() { const [abonaron, setAbonaron] = useState([]); const [totalabonaron, setTotalAbonaron] = useState(0); const [noAbonaron, setNoAbonaron] = useState([]); + const [loading, setLoading] = useState(true); + const [loading2, setLoading2] = useState(true); const [totalNoAbonaron, setTotalNoAbonaron] = useState(0); - const headers = ['Nombre', 'DNI', 'SituaciĆ³n']; + const headers = ['Apellido y Nombre', 'Legajo' , 'DNI', 'Estado financiero']; const [limit1] = useState(10); const [offset1, setOffset1] = useState(0); const [limit2] = useState(10); const [offset2, setOffset2] = useState(0); + const [filter, setFilter] = useState(''); const handleNextPage = () => { if (offset1 + limit1 < totalNoAbonaron) { @@ -48,40 +52,42 @@ export default function Listado() { useEffect(() => { - const fetchNoAbonaron = async (fecha: string) => { - const data = await NoAbonaronCuota(fecha, limit1, offset1); + const data = await NoAbonaronCuota(fecha, limit1, offset1, filter); if (data.results.length > 0) { setNoAbonaron(data.results); setTotalNoAbonaron(data.count); } + setLoading(false); } - if (fecha === undefined) { return; } fetchNoAbonaron(fecha); - }, [limit1, offset1]); + }, [limit1, offset1, fecha, filter]); useEffect(() => { - const fetchAbonaron = async (fecha: string) => { - const data = await AbonaronCuota(fecha); + const data = await AbonaronCuota(fecha, limit2, offset2, filter); if (data.results.length > 0) { setAbonaron(data.results); setTotalAbonaron(data.count); } - + setLoading2(false); } - if (fecha === undefined) { return; } fetchAbonaron(fecha); + }, [limit2, offset2, fecha, filter]); - }, [limit2, offset2]); + const handleFilterChange = (event: React.ChangeEvent) => { + setFilter(event.target.value); + }; + console.log(abonaron); + console.log(noAbonaron); return ( - - Abonaron - No abonaron + + + Abonaron + + + No abonaron + - {abonaron.length > 0 ? - - Total: {totalabonaron} - Periodo: {fecha} - + {loading2 ? : + abonaron.length > 0 ? + + Periodo: {fecha} + Total: {totalNoAbonaron} + + - +
- - +
+ + {headers.map((header) => ( - + ))} {data.map((row, rowIndex) => ( - + handleRowClick(row[keyMap['DNI']])} cursor="pointer"> {headers.map((header) => ( - ))}
{header}{header}
- {/* Usamos keyMap para obtener la propiedad correcta */} - {typeof row[keyMap[header]] === 'string' ? ( - row[keyMap[header]] - ) : typeof row[keyMap[header]] === 'number' ? ( - new Intl.NumberFormat('es-ES').format(row[keyMap[header]]) - ) : 'N/A'} + + {/* Usamos keyMap para obtener la propiedad correcta */} + {typeof row[keyMap[header]] === 'string' ? ( + row[keyMap[header]] + ) : typeof row[keyMap[header]] === 'number' ? ( + new Intl.NumberFormat('es-ES').format(row[keyMap[header]]) + ) : 'N/A'}