diff --git a/FrontAdmin/src/API-Alumnos/Compromiso.ts b/FrontAdmin/src/API-Alumnos/Compromiso.ts new file mode 100644 index 0000000..7c9ec67 --- /dev/null +++ b/FrontAdmin/src/API-Alumnos/Compromiso.ts @@ -0,0 +1,69 @@ +import Cookies from 'js-cookie' +// los dni son la mama de lo hardcodeado + +export const FetchCompromisos = async () => { + try { + const token = Cookies.get('tokennn'); + // const dni = Cookies.get('dni) + const dni = 36562786; + const response = await fetch(`http://localhost:8000/api/firmas/firmas-de-alumno/${dni}/`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}`, + }, + }); + if (response.ok) { + const data = await response.json(); + return data; + } else { + throw new Error('Error en la respuesta del servidor'); + } + } catch (error) { + throw new Error('Network error: ' + error); + } +}; + +export const FetchUltimoCompromiso = async () => { + try { + const token = Cookies.get('tokennn'); + const response = await fetch(`http://localhost:8000/api/ultimo-compromiso-de-pago/`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}`, + }, + }); + if (response.ok) { + const data = await response.json(); + return data; + } else { + throw new Error('Error en la respuesta del servidor'); + } + } catch (error) { + throw new Error('Network error: ' + error); + } +}; + +export const FirmarCompromiso = async () => { + try { + const token = Cookies.get('tokennn'); + // const dni = Cookies.get('dni') + const dni = 36562786; + const response = await fetch(`http://localhost:8000/api/firmas/firmar-compromiso/${dni}/`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}`, + }, + }); + if (response.ok) { + return; + } else { + throw new Error('Error en la respuesta del servidor'); + } + } catch (error) { + throw new Error('Network error: ' + error); + } +}; + diff --git a/FrontAdmin/src/API-Alumnos/Pagos.ts b/FrontAdmin/src/API-Alumnos/Pagos.ts index cc1ade2..a333e16 100644 --- a/FrontAdmin/src/API-Alumnos/Pagos.ts +++ b/FrontAdmin/src/API-Alumnos/Pagos.ts @@ -1,64 +1,126 @@ +import Cookies from 'js-cookie'; +export const FetchPostPago = async ( + cuotas: any, + montoInformado: number, + archivo: File | null, // Archivo a enviar + comentario: string, + nro_transferencia: number +) => { + try { + const token = Cookies.get('tokennn'); + //const dni = Cookies.get('dni'); + const dni = 36562786; // Puedes obtener esto desde las cookies también + + // Crea un nuevo objeto FormData + const formData = new FormData(); + formData.append('alumno', dni); + formData.append('cuotas', cuotas); + formData.append('monto_informado', montoInformado); + formData.append('ticket', archivo); // El archivo + formData.append('comentario', comentario); + formData.append('nro_transferencia', nro_transferencia); + + console.log('FormData:', formData); + console.log('Archivo:', archivo); + console.log('Cuotas:', cuotas); + console.log('Monto informado:', montoInformado); + console.log('Comentario:', comentario); + console.log('Nro transferencia:', nro_transferencia); + + // Realiza la solicitud fetch + const response = await fetch(`http://localhost:8000/api/pagos/alumno/${dni}/`, { + method: 'POST', + headers: { + Authorization: `Bearer ${token}`, + }, + body: formData, + }); + + if (response.ok) { + return await response.json(); + } else { + const errorData = await response.json(); + throw new Error(`Error en la respuesta del servidor: ${errorData.message}`); + } + } catch (error) { + console.error('Network error:', error); + } +}; + + +export const FetchGetCuotas = async () => { + try { + const token = Cookies.get('tokennn'); + //const dni = Cookies.get('dni'); + const dni = 36562786; + + const response = await fetch(`http://localhost:8000/api/cuotas/alumno/${dni}/?limit=6&offset=0/`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}`, + }, + }); + + if (response.ok) { + const data = await response.json(); + return data; + } else { + throw new Error('Error en la respuesta del servidor'); + } + } catch (error) { + throw new Error('Network error: ' + error); + } +}; const cuotas = [ { numero: 0, - monto1erVencimiento: 10000, - monto2doVencimiento: 0, - monto3erVencimiento: 0, - valortotal: 10000, - valorpagado: 10000, - valoradeudado: 0, + montoactual: 0, + fechaVencimiento: '2024-03-10', + valorpagado: 10000, + valorinformado: 0, estado: "PAGADO", }, { numero: 1, - monto1erVencimiento: 10000, - monto2doVencimiento: 15000, - monto3erVencimiento: 20000, - valortotal: 10000, - valorpagado: 0, - valoradeudado: 10000, + montoactual: 10000, + fechaVencimiento: '2024-03-10', + valorpagado: 0, + valorinformado: 5000, estado: "INFORMADO", }, { numero: 2, - monto1erVencimiento: 10000, - monto2doVencimiento: 15000, - monto3erVencimiento: 20000, - valortotal: 10000, + montoactual: 10000, + fechaVencimiento: '2024-04-10', valorpagado: 0, - valoradeudado: 10000, + valorinformado: 0, estado: "ADEUDADO", }, { numero: 3, - monto1erVencimiento: 10000, - monto2doVencimiento: 15000, - monto3erVencimiento: 20000, - valortotal: 10000, + montoactual: 10000, + fechaVencimiento: '2024-05-10', valorpagado: 0, - valoradeudado: 10000, + valorinformado: 0, estado: "ADEUDADO", }, { numero: 4, - monto1erVencimiento: 10000, - monto2doVencimiento: 15000, - monto3erVencimiento: 20000, - valortotal: 10000, + montoactual: 10000, + fechaVencimiento: '2024-06-10', valorpagado: 0, - valoradeudado: 10000, + valorinformado: 0, estado: "ADEUDADO", }, { numero: 5, - monto1erVencimiento: 10000, - monto2doVencimiento: 15000, - monto3erVencimiento: 20000, - valortotal: 10000, + montoactual: 10000, + fechaVencimiento: '2024-07-10', valorpagado: 0, - valoradeudado: 10000, + valorinformado: 0, estado: "ADEUDADO", } ]; diff --git a/FrontAdmin/src/API/Login.ts b/FrontAdmin/src/API/Login.ts index 47d2f6e..fffa1ae 100644 --- a/FrontAdmin/src/API/Login.ts +++ b/FrontAdmin/src/API/Login.ts @@ -10,7 +10,7 @@ export const FetchLogin = async (password: string, account: string) => { headers: { 'Content-Type': 'application/json', }, - body: JSON.stringify({ password, account }), + body: JSON.stringify({ email: account ,password }), }); if (response.ok) { @@ -20,6 +20,7 @@ export const FetchLogin = async (password: string, account: string) => { localStorage.setItem('userRol', JSON.stringify(roles)); Cookies.set('tokennn', data.access); + Cookies.set('dni', data.user.dni); Cookies.set('refresh_token', data.refresh); Cookies.set('access_expiration', data.access_expiration); Cookies.set('refresh_expiration', data.refresh_expiration); diff --git a/FrontAdmin/src/Context.tsx b/FrontAdmin/src/Context.tsx index 8b4b9c1..2c6d273 100644 --- a/FrontAdmin/src/Context.tsx +++ b/FrontAdmin/src/Context.tsx @@ -79,6 +79,7 @@ const AuthProvider = ({ children }: { children: ReactNode }) => { Cookies.remove('access_expiration'); Cookies.remove('refresh_expiration'); Cookies.remove('username'); + Cookies.remove('dni'); localStorage.removeItem('userRol'); console.log('logout'); setIsAuthenticated(false); diff --git a/FrontAdmin/src/components/Pages-Alumnos/CompromisoDePago.tsx b/FrontAdmin/src/components/Pages-Alumnos/CompromisoDePago.tsx index d4fc779..67bde6e 100644 --- a/FrontAdmin/src/components/Pages-Alumnos/CompromisoDePago.tsx +++ b/FrontAdmin/src/components/Pages-Alumnos/CompromisoDePago.tsx @@ -18,226 +18,152 @@ import { Button } from '@chakra-ui/react'; import { DownloadIcon, ViewIcon } from '@chakra-ui/icons'; -import { MdPerson } from 'react-icons/md'; // Importa el ícono de usuario +import { FetchCompromisos, FetchUltimoCompromiso, FirmarCompromiso } from "../../API-Alumnos/Compromiso"; +import {useEffect, useState} from 'react'; +import {formatoFechaISOaDDMMAAAA} from "../../utils/general"; +import { useToast } from "../Toast/useToast"; +import Cookies from 'js-cookie'; export default function CompromisoDePago() { - return ( - - {/* Navbar superior centrado */} - - Estado de Cuenta - Informar Pago/s - Compromiso de Pago - Darse de Baja - - - {/* Información en la parte izquierda */} - - - - {/* Icono de usuario */} - Nombre del alumno - - - Cuota: - Completa - - - Compromiso de Pago: - Firmado (15/02/2024 14:52 hs) - - - Situación: - Habilitado - - - Deuda: - $- - - - Próximo Vencimiento: - 10/06/2024 - - +const [compromisos, setCompromisos] = useState([]); +const [ultimoCompromiso, setUltimoCompromiso] = useState(false); +const [ultimo, setUltimo] = useState([]); +const [refresh, setRefresh] = useState(false); +const [pdfUrl, setPdfUrl] = useState(null); +const showToast = useToast(); + +const handleViewPdf = async (url: string) => { + try { + const token = Cookies.get('tokennn'); + const response = await fetch(url, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + console.log('Buscando PDF en: ', url); + const blob = await response.blob(); + const pdfUrl = URL.createObjectURL(blob); + setPdfUrl(pdfUrl); + } catch (error) { + console.error('Error al obtener el PDF:', error); + } + }; + +useEffect(() => { + const fetchCompromisos = async () => { + try{ + const data = await FetchCompromisos(); + setCompromisos(data); + console.log(data); + } catch (error) { + console.log(error) + } + }; + fetchCompromisos(); + + const fetchUltimoCompromiso = async () => { + try { + const data = await FetchUltimoCompromiso(); + handleViewPdf(data.archivo_pdf_url); + } catch (error) { + console.log(error); + } + } + fetchUltimoCompromiso(); + +}, [refresh]); + + +useEffect(() => { + if (compromisos.length > 0) { + setUltimo(compromisos[compromisos.length - 1]); + } +}, [compromisos]); + +useEffect(() => { + if (ultimo) { + console.log(ultimo); + if (ultimo.firmo_ultimo_compromiso === true) { + setUltimoCompromiso(true); + } + } +}, [ultimo]); + + + +const handleFirmar = async () => { + try { + await FirmarCompromiso(); + setRefresh(!refresh); + showToast('Exito', 'Compromiso de pago firmado con exito', 'success'); + } + catch (error) { + console.log(error); + } +}; + + +return ( + + + {ultimoCompromiso && + + El compromiso de pago del periodo actual ya se encuentra firmado ({formatoFechaISOaDDMMAAAA(ultimo.fecha_firmado)}). + + + } + + + + + {pdfUrl &&