diff --git a/FrontAdmin/src/API/Montos.ts b/FrontAdmin/src/API/Montos.ts index 0cba830..34db3bc 100644 --- a/FrontAdmin/src/API/Montos.ts +++ b/FrontAdmin/src/API/Montos.ts @@ -84,3 +84,28 @@ export const loadPDF = async (id :string,file: File) => { throw new Error('Network error: ' + JSON.stringify(error)); } }; + +export const deleteCompromiso = async (id: number) => { + try { + const token = Cookies.get('tokennn'); + + const response = await fetch(`http://localhost:8000/api/compromisos/${id}/`, { + method: 'DELETE', + headers: { + Authorization: `Bearer ${token}`, + }, + }); + + if (response.ok) { + const data = await response.json(); + return data; + } else { + const errorResponse = await response.json(); + throw new Error( + 'Error en la respuesta del servidor: ' + JSON.stringify(errorResponse) + ); + } + } catch (error) { + throw new Error('Network error: ' + error); + } +} \ No newline at end of file diff --git a/FrontAdmin/src/components/Pages/Configuracion/Configuracion.tsx b/FrontAdmin/src/components/Pages/Configuracion/Configuracion.tsx index 9622b22..ec1413b 100644 --- a/FrontAdmin/src/components/Pages/Configuracion/Configuracion.tsx +++ b/FrontAdmin/src/components/Pages/Configuracion/Configuracion.tsx @@ -1,4 +1,4 @@ -import { Grid, GridItem, Flex, Button, Text, Box } from '@chakra-ui/react'; +import { Grid, GridItem, Flex, Button, Text, Box, Spinner } from '@chakra-ui/react'; import Montos from './Montos/Montos'; import { FetchMontos } from '../../../API/Montos'; import { useEffect, useState } from 'react'; @@ -13,8 +13,10 @@ function Configuracion() { const [totalCount, setTotalCount] = useState(0); const fetchMontos = async (offset: number, limit: number) => { + setLoading(true); try { const data = await FetchMontos(offset, limit); + setMontos(data.results); setTotalCount(data.count); } catch (error) { @@ -46,11 +48,17 @@ function Configuracion() { return ( - - fetchMontos(offset, limit)} /> - - - + + {loading ? ( + + + + ) : ( + <> + fetchMontos(offset, limit)} /> + fetchMontos(offset, limit)} /> + + )} diff --git a/FrontAdmin/src/components/Pages/Configuracion/Montos/NewInterfaz.tsx b/FrontAdmin/src/components/Pages/Configuracion/Montos/NewInterfaz.tsx index 949d282..efb1be4 100644 --- a/FrontAdmin/src/components/Pages/Configuracion/Montos/NewInterfaz.tsx +++ b/FrontAdmin/src/components/Pages/Configuracion/Montos/NewInterfaz.tsx @@ -18,10 +18,12 @@ import { ModalBody, ModalCloseButton, useDisclosure, + Spinner, } from '@chakra-ui/react'; import Cookies from 'js-cookie'; import { useEffect, useState } from 'react'; - +import { deleteCompromiso } from '../../../../API/Montos'; +import ModalComponent from '../../../Modal/ModalConfirmarCambios'; interface Compromiso { anio: string | number | Date; fecha_carga_comp_pdf: string; @@ -38,17 +40,19 @@ interface Compromiso { fecha_vencimiento_1: number; fecha_vencimiento_2: number; fecha_vencimiento_3: number; - } interface CardCargaProps { compromisos: Compromiso[]; + fetchMontos: () => void; } -const NewInterfaz = ({ compromisos }: CardCargaProps) => { +const NewInterfaz = ({ compromisos, fetchMontos }: CardCargaProps) => { const [montos, setMontos] = useState([]); const [pdfUrl, setPdfUrl] = useState(null); const { isOpen, onOpen, onClose } = useDisclosure(); + const { isOpen: isConfirmOpen, onOpen: onConfirmOpen, onClose: onConfirmClose } = useDisclosure(); // Estado para el modal de confirmación + const [isDeleting, setIsDeleting] = useState(false); // Estado de carga para la eliminación useEffect(() => { const sortedMontos = [...compromisos].sort((a, b) => { @@ -56,6 +60,7 @@ const NewInterfaz = ({ compromisos }: CardCargaProps) => { const dateB = new Date(b.fecha_carga_comp_pdf); return dateB.getTime() - dateA.getTime(); }); + console.log('Montos ordenados:', sortedMontos); setMontos(sortedMontos); }, [compromisos]); @@ -82,6 +87,24 @@ const NewInterfaz = ({ compromisos }: CardCargaProps) => { onClose(); }; + const handleDeleteLastCompromiso = async () => { + if (montos.length === 0) return; + + const lastCompromiso = montos[0]; + try { + setIsDeleting(true); + await deleteCompromiso(lastCompromiso.id_comp_pago); + fetchMontos(); + onConfirmClose(); + } catch (error) { + console.error('Error al eliminar el compromiso:', error); + } finally { + fetchMontos(); + onConfirmClose(); + setIsDeleting(false); + } + }; + return ( { Año/ Cuatrimestre Matrícula - Montos + Montos Dia de vencimiento Fecha Ult Modif. Acciones @@ -116,8 +139,6 @@ const NewInterfaz = ({ compromisos }: CardCargaProps) => { monto.cuatrimestre} {' $ ' + monto.matricula} - - Monto Completo: {' $ ' + monto.monto_completo} @@ -129,31 +150,36 @@ const NewInterfaz = ({ compromisos }: CardCargaProps) => { - + 1er Vencimiento: {monto.fecha_vencimiento_1} - + 2do Vencimiento: {monto.fecha_vencimiento_2} - + 3er Vencimiento: {monto.fecha_vencimiento_3} - {new Date(monto.fecha_carga_comp_pdf).toLocaleString( 'es-ES', { dateStyle: 'short', timeStyle: 'short' } )} - - + + + {index === 0 && ( + + )} + ))} @@ -178,9 +204,14 @@ const NewInterfaz = ({ compromisos }: CardCargaProps) => { + ); }; export default NewInterfaz; -