Compare commits

...

3 Commits

Author SHA1 Message Date
Soka_jplr f50deaf29d vista de administrador 2024-05-26 13:06:55 -06:00
Soka_jplr 41b16210f2 cambio de frameWork 2024-05-24 23:38:51 -06:00
Soka_jplr f0f6c8bf47 cambios de documentos 2024-05-24 23:34:59 -06:00
34 changed files with 3193 additions and 323 deletions

View File

@ -1,9 +1,7 @@
create database universidad;
drop database universidad;
CREATE USER 'UserRemoto' @'localhost' IDENTIFIED BY 'password123';
DROP USER 'UserRemoto'@'localhost';
GRANT ALL PRIVILEGES ON universidad.* TO 'UserRemoto'@'LOCALHOST';
FLUSH PRIVILEGES;
@ -36,9 +34,11 @@ create table tutor(
id integer auto_increment primary key,
nombre varchar(40),
apellido varchar(40),
numeroDeTelefono integer,
numeroDeTelefono double,
idUsuario integer references usuario
);
ALTER TABLE usuario
MODIFY COLUMN inscrito int;
create table documento(
id integer auto_increment primary key,
@ -63,6 +63,7 @@ INSERT INTO usuario (
) VALUES (
'Juan', 'Perez', 'SIU241001', 'password123', 'juan.perez@example.com', 'Mexicana', 'O+', '1990-05-15', 'JUAP900515HDFLRN03', 'estudiante', 1, 1
);
ALTER TABLE carrera
ADD COLUMN campus VARCHAR(40),
ADD COLUMN descripcion VARCHAR(600),
@ -126,6 +127,9 @@ SET campus = 'Xalapa',
objetivo = 'Nuestro objetivo es formar psicólogos con una sólida base científica y habilidades prácticas para evaluar, diagnosticar y tratar problemas psicológicos. Fomentamos el pensamiento crítico, la empatía y la ética profesional, preparando a los estudiantes para contribuir al bienestar mental y emocional de las personas y comunidades que atienden.'
WHERE id = 6;
UPDATE `tutor` SET `nombre` = ?, `apellido` = ?, `numeroDeTelefono` = ? WHERE `idUsuario` = ?;

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,38 @@
import mysql from 'mysql2/promise'; // Importa la versión de la biblioteca que soporta promesas
class Conexion {
constructor() {
this.conexion = null;
this.configuracion = {
host: 'localhost',
user: 'UserRemoto',
password: 'password123',
database: 'universidad'
};
}
async conectar() {
try {
this.conexion = await mysql.createConnection(this.configuracion);
console.log('Conexión exitosa a MySQL');
return this.conexion;
} catch (error) {
console.error('Error al conectar con la base de datos:', error.message);
return null;
}
}
cerrarConexion() {
if (this.conexion) {
this.conexion.end((err) => {
if (err) {
console.error('Error al cerrar la conexión con la base de datos:', err.message);
return;
}
console.log('Se desconectó de la base de datos');
});
}
}
}
export default Conexion;

218
Server/Controller/DAO.js Normal file
View File

@ -0,0 +1,218 @@
import Conexion from './Conexion.js'; // Asegúrate de tener la ruta correcta al archivo de conexión
import Usuario from '../Model/Usuario.js'; // Asegúrate de tener la ruta correcta al archivo de Usuario
import Mensaje from '../Model/Mensaje.js'; // Asegúrate de tener la ruta correcta al archivo de Mensaje
import DAORegistro from './DAORegistro.js';
class DAO {
static async matriculas() {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar();
try {
const sql = `SELECT id, matricula FROM usuario where inscrito = 1`;
const [rows] = await conexionEstablecida.query(sql);
const resultado = rows.map(row => {
return { id: row.id, matricula: row.matricula };
});
return resultado;
} catch (error) {
console.error(error); s
return [];
} finally {
conexion.cerrarConexion();
}
}
static async validarAlumno(alumno) {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar();
try {
const sql = `SELECT * FROM usuario WHERE matricula = ? AND contrasena = ?`;
const [rows] = await conexionEstablecida.query(sql, [alumno.getMatricula(), alumno.getContrasena()]);
return rows.length > 0;
} catch (error) {
console.error(error);
return false;
} finally {
conexion.cerrarConexion();
}
}
static async agregarAlumno(usuario) {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar();
try {
const ultimoID = await this.obtenerUltimoID();
const matricula = "SIU24" + (1000 + ultimoID);
const password = this.crearContrasena();
usuario.contrasena = password;
usuario.matricula = matricula;
const sql = `INSERT INTO usuario (nombre, apellido, nacionalidad, matricula, contrasena, correo, rol) VALUES (?, ?, ?, ?, ?, ?, ?)`;
const [result] = await conexionEstablecida.query(sql, [
usuario.nombre, usuario.apellido, usuario.nacionalidad,
usuario.matricula, usuario.contrasena, usuario.correo, usuario.rol
]);
return result.affectedRows > 0 ? new Mensaje(true, usuario.matricula, usuario.contrasena) : new Mensaje(false, null);
} catch (error) {
console.error(error);
return new Mensaje(false, null);
} finally {
conexion.cerrarConexion();
}
}
static async editarAlumno(usuario) {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar();
try {
const sql = `UPDATE usuario SET nombre = ?, apellido = ?, correo = ?, nacionalidad = ?, tipoSangre = ?, fecha_nacimiento = ?, curp = ?, idCarrera = ? WHERE id = ?`;
const [result] = await conexionEstablecida.query(sql, [
usuario.nombre, usuario.apellido, usuario.correo,
usuario.nacionalidad, usuario.tipoSangre, usuario.fecha_nacimiento,
usuario.curp, usuario.idCarrera, usuario.id
]);
return result.affectedRows > 0;
} catch (error) {
console.error(error);
return false;
} finally {
conexion.cerrarConexion();
}
}
static async alumnoIniciado(matricula, contrasena) {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar();
try {
const sql = `SELECT * FROM usuario WHERE matricula = ? AND contrasena = ?`;
const [rows] = await conexionEstablecida.query(sql, [matricula, contrasena]);
if (rows.length > 0) {
const row = rows[0];
const usuario = new Usuario(
row.id, row.nombre, row.apellido, row.matricula, row.contrasena,
row.correo, row.nacionalidad,
row.tipoSangre, row.fecha_nacimiento, row.curp,
row.rol, row.idCarrera, row.inscrito
);
await DAORegistro.registrar(usuario, "Inicio Sesión", new Date());
return usuario;
}
return null;
} catch (error) {
console.error(error);
return null;
} finally {
conexion.cerrarConexion();
}
}
static async obtenerUltimoID() {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar();
try {
const sql = `SELECT MAX(id) AS ultimo_id FROM usuario`;
const [rows] = await conexionEstablecida.query(sql);
return rows[0].ultimo_id || -1;
} catch (error) {
console.error(error);
return -1;
} finally {
conexion.cerrarConexion();
}
}
static crearContrasena() {
const CARACTERES_PERMITIDOS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@#";
let contrasena = '';
for (let i = 0; i < 10; i++) {
const index = Math.floor(Math.random() * CARACTERES_PERMITIDOS.length);
contrasena += CARACTERES_PERMITIDOS.charAt(index);
}
return contrasena;
}
static async traeUsuario(id) {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar();
let usuario = null;
try {
const sql = `SELECT id, nombre, apellido, matricula, correo, nacionalidad, tipoSangre, fecha_nacimiento, curp, rol, idCarrera, inscrito FROM usuario WHERE id = ?`;
const [rows] = await conexionEstablecida.query(sql, [id]);
if (rows.length > 0) {
const row = rows[0];
// Convertir la fecha al formato "yyyy-MM-dd"
const fechaNacimiento = new Date(row.fecha_nacimiento);
const formattedDate = fechaNacimiento.toISOString().split('T')[0]; // "yyyy-MM-dd"
usuario = new Usuario(
row.id, row.nombre, row.apellido, row.matricula, "", row.correo,
row.nacionalidad, row.tipoSangre, formattedDate, row.curp,
row.rol, row.idCarrera, row.inscrito
);
}
} catch (error) {
console.error(error);
} finally {
conexion.cerrarConexion();
}
return usuario;
}
static async editarAlumnoInscrito(data) {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar();
try {
const sql = `UPDATE usuario SET inscrito = ? WHERE id = ?`;
const [result] = await conexionEstablecida.query(sql, [
1, data.idUsuario
]);
return result.affectedRows > 0;
} catch (error) {
} finally {
conexion.cerrarConexion();
}
}
static async traeTodosLosDatosUsuario(id) {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar();
let usuario = null;
try {
const sql = `SELECT U.id,U.nombre,U.apellido,matricula,correo,nacionalidad,tipoSangre,fecha_nacimiento,curp,inscrito, T.nombre as tutorNombre, T.apellido as tutorApellido, T.numeroDeTelefono,C.nombre as carreraNombre FROM usuario U, tutor T, carrera C where C.id= U.idCarrera and U.id = T.idUsuario and inscrito =1 and U.id =?;`;
const [rows] = await conexionEstablecida.query(sql, [id]);
if (rows.length > 0) {
const row = rows[0];
// Convertir la fecha al formato "yyyy-MM-dd"
const fechaNacimiento = new Date(row.fecha_nacimiento);
const formattedDate = fechaNacimiento.toISOString().split('T')[0]; // "yyyy-MM-dd"
usuario = {
id: row.id,
nombre: row.nombre,
apellido: row.apellido,
matricula: row.matricula,
correo: row.correo,
nacionalidad: row.nacionalidad,
tipoSangre: row.tipoSangre,
fecha_nacimiento: formattedDate,
curp: row.curp,
inscrito: row.inscrito,
tutorNombre: row.tutorNombre,
tutorApellido: row.tutorApellido,
numeroDeTelefono: row.numeroDeTelefono,
carreraNombre: row.carreraNombre
}
}
} catch (error) {
console.error(error);
} finally {
conexion.cerrarConexion();
}
return usuario;
}
}
export default DAO;

View File

@ -0,0 +1,22 @@
import Conexion from './Conexion.js'; // Asegúrate de tener la ruta correcta al archivo de conexión
import Carrera from '../Model/Carrera.js'; // Asegúrate de tener la ruta correcta al archivo de Carrera
class DAOCarrera {
static async dameCarreras() {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar();
try {
const sql = "SELECT * FROM carrera";
const [rows] = await conexionEstablecida.query(sql);
const resultado = rows.map(row => new Carrera(row.id, row.nombre, row.area, row.campus, row.descripcion, row.mision, row.vision, row.objetivo));
return resultado;
} catch (error) {
console.error(error);
return [];
} finally {
conexion.cerrarConexion();
}
}
}
export default DAOCarrera;

View File

@ -0,0 +1,22 @@
import Conexion from './Conexion.js';
class DAODocumento {
static async agregarDocumento(req, file) {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar()
try {
const sql = "INSERT INTO `documento`(`titulo`,`archivo`,`idUsuario`,`valido`) VALUES(?,?,?,?);";
const [result] = await conexionEstablecida.query(sql, [
req.titulo, file, req.idUsuario, 0
]);
return result.affectedRows > 0;
} catch (error) {
console.log(error);
throw error;
} finally {
conexion.cerrarConexion();
}
}
}
export default DAODocumento;

View File

@ -0,0 +1,20 @@
import Conexion from './Conexion.js'; // Asegúrate de tener la ruta correcta al archivo de conexión
class DAORegistro {
static async registrar(usuario, descripcion, day) {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar();
try {
const sql = "INSERT INTO registro (matricula, descripcion) VALUES (?, ?)";
const stm = await conexionEstablecida.query(sql, [usuario.getMatricula(), descripcion + day]);
return stm.affectedRows > 0;
} catch (error) {
console.error(error);
return false;
} finally {
conexion.cerrarConexion();
}
}
}
export default DAORegistro;

View File

@ -0,0 +1,57 @@
import Conexion from './Conexion.js'; // Asegúrate de tener la ruta correcta al archivo de conexión
import Tutor from '../Model/Tutor.js'; // Asegúrate de tener la ruta correcta al archivo de Tutor
class DAOTutor {
static async agregarTutor(tutor) {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar();
try {
const sql = `INSERT INTO tutor (nombre,apellido,numeroDeTelefono,idUsuario)VALUES(?,?,?,?);`;
const [result] = await conexionEstablecida.query(sql, [tutor.nombre, tutor.apellido, tutor.numeroDeTelefono, tutor.idUsuario]);
return result.affectedRows > 0;
} catch (error) {
console.error(error);
return false;
} finally {
conexion.cerrarConexion();
}
}
static async editarTutor(tutor) {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar();
try {
const sql = `UPDATE tutor SET nombre = ?, apellido = ?, numeroDeTelefono = ? WHERE idUsuario = ?`;
const [result] = await conexionEstablecida.query(sql, [tutor.nombre, tutor.apellido, tutor.numeroDeTelefono, tutor.idUsuario]);
return result.affectedRows > 0;
} catch (error) {
console.error(error);
return false;
} finally {
conexion.cerrarConexion();
}
}
static async traerTutor(id) {
const conexion = new Conexion();
const conexionEstablecida = await conexion.conectar();
try {
const sql = `SELECT id, nombre, apellido, numeroDeTelefono, idUsuario FROM tutor WHERE idUsuario = ?`;
const [rows] = await conexionEstablecida.query(sql, [id]);
if (rows.length > 0) {
const row = rows[0];
const tutor = new Tutor(row.id, row.nombre, row.apellido, row.numeroDeTelefono, row.idUsuario);
return tutor;
}
return null;
} catch (error) {
console.error(error);
return null;
} finally {
conexion.cerrarConexion();
}
}
}
export default DAOTutor;

80
Server/Model/Carrera.js Normal file
View File

@ -0,0 +1,80 @@
class Carrera {
constructor(id, nombre, area, campus, descripcion, mision, vision, objetivo) {
this.id = id;
this.nombre = nombre;
this.area = area;
this.campus = campus;
this.descripcion = descripcion;
this.mision = mision;
this.vision = vision;
this.objetivo = objetivo;
}
// Getters
getId() {
return this.id;
}
getNombre() {
return this.nombre;
}
getArea() {
return this.area;
}
getCampus() {
return this.campus;
}
getDescripcion() {
return this.descripcion;
}
getMision() {
return this.mision;
}
getVision() {
return this.vision;
}
getObjetivo() {
return this.objetivo;
}
// Setters
setId(id) {
this.id = id;
}
setNombre(nombre) {
this.nombre = nombre;
}
setArea(area) {
this.area = area;
}
setCampus(campus) {
this.campus = campus;
}
setDescripcion(descripcion) {
this.descripcion = descripcion;
}
setMision(mision) {
this.mision = mision;
}
setVision(vision) {
this.vision = vision;
}
setObjetivo(objetivo) {
this.objetivo = objetivo;
}
}
export default Carrera;

29
Server/Model/Mensaje.js Normal file
View File

@ -0,0 +1,29 @@
class Mensaje {
constructor(verificacion, matricula, contrasena) {
this.verificacion = verificacion;
this.matricula = matricula;
this.contrasena = contrasena;
}
// Getter para la propiedad 'verificacion'
isVerificacion() {
return this.verificacion;
}
// Getter para la propiedad 'usuario'
getUsuario() {
return this.usuario;
}
// Setter para la propiedad 'verificacion'
setVerificacion(verificacion) {
this.verificacion = verificacion;
}
// Setter para la propiedad 'usuario'
setUsuario(usuario) {
this.usuario = usuario;
}
}
export default Mensaje;

39
Server/Model/Registro.js Normal file
View File

@ -0,0 +1,39 @@
class Registro {
constructor(id, matricula, descripcion) {
this.id = id;
this.matricula = matricula;
this.descripcion = descripcion;
}
// Getter para la propiedad 'id'
getId() {
return this.id;
}
// Getter para la propiedad 'matricula'
getMatricula() {
return this.matricula;
}
// Getter para la propiedad 'descripcion'
getDescripcion() {
return this.descripcion;
}
// Setter para la propiedad 'id'
setId(id) {
this.id = id;
}
// Setter para la propiedad 'matricula'
setMatricula(matricula) {
this.matricula = matricula;
}
// Setter para la propiedad 'descripcion'
setDescripcion(descripcion) {
this.descripcion = descripcion;
}
}
module.exports = Registro;

51
Server/Model/Tutor.js Normal file
View File

@ -0,0 +1,51 @@
class Tutor {
constructor(id, nombre, apellido, numeroDeTelefono, idUsuario) {
this.id = id;
this.nombre = nombre;
this.apellido = apellido;
this.numeroDeTelefono = numeroDeTelefono;
this.idUsuario = idUsuario;
}
getId() {
return this.id;
}
getNombre() {
return this.nombre;
}
getApellido() {
return this.apellido;
}
getNumeroDeTelefono() {
return this.numeroDeTelefono;
}
getIdUsuario() {
return this.idUsuario;
}
setId(id) {
this.id = id;
}
setNombre(nombre) {
this.nombre = nombre;
}
setApellido(apellido) {
this.apellido = apellido;
}
setNumeroDeTelefono(numeroDeTelefono) {
this.numeroDeTelefono = numeroDeTelefono;
}
setIdUsuario(idUsuario) {
this.idUsuario = idUsuario;
}
}
export default Tutor;

139
Server/Model/Usuario.js Normal file
View File

@ -0,0 +1,139 @@
class Usuario {
constructor(
id, nombre, apellido, matricula, contrasena, correo,
nacionalidad, tipoSangre, fecha_nacimiento, curp,
rol, idCarrera, inscrito
) {
this.id = id;
this.nombre = nombre;
this.apellido = apellido;
this.matricula = matricula;
this.contrasena = contrasena || ''; // Valor predeterminado para contrasena
this.correo = correo;
this.nacionalidad = nacionalidad;
this.tipoSangre = tipoSangre;
this.fecha_nacimiento = fecha_nacimiento;
this.curp = curp;
this.rol = rol;
this.idCarrera = idCarrera;
this.inscrito = inscrito;
}
// Getters
getId() {
return this.id;
}
getNombre() {
return this.nombre;
}
getApellido() {
return this.apellido;
}
getMatricula() {
return this.matricula;
}
getContrasena() {
return this.contrasena;
}
getCorreo() {
return this.correo;
}
getNacionalidad() {
return this.nacionalidad;
}
getTipoSangre() {
return this.tipoSangre;
}
getFecha_nacimiento() {
return this.fecha_nacimiento;
}
getCurp() {
return this.curp;
}
getRol() {
return this.rol;
}
getIdCarrera() {
return this.idCarrera;
}
getInscrito() {
return this.inscrito;
}
// Setters
setId(id) {
this.id = id;
}
setNombre(nombre) {
this.nombre = nombre;
}
setApellido(apellido) {
this.apellido = apellido;
}
setMatricula(matricula) {
this.matricula = matricula;
}
setContrasena(contrasena) {
this.contrasena = contrasena;
}
setCorreo(correo) {
this.correo = correo;
}
setNacionalidad(nacionalidad) {
this.nacionalidad = nacionalidad;
}
setTipoSangre(tipoSangre) {
this.tipoSangre = tipoSangre;
}
setFecha_nacimiento(fecha_nacimiento) {
this.fecha_nacimiento = fecha_nacimiento;
}
setCurp(curp) {
this.curp = curp;
}
setRol(rol) {
this.rol = rol;
}
setIdCarrera(idCarrera) {
this.idCarrera = idCarrera;
}
setInscrito(inscrito) {
this.inscrito = inscrito;
}
crearToken() {
const CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
let token = '';
for (let i = 0; i < 15; i++) {
const index = Math.floor(Math.random() * CHARACTERS.length);
token += CHARACTERS.charAt(index);
}
return token;
}
}
export default Usuario;

1663
Server/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

26
Server/package.json Normal file
View File

@ -0,0 +1,26 @@
{
"name": "server",
"version": "1.0.0",
"main": "index.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"body-parser": "^1.20.2",
"cors": "^2.8.5",
"express": "^4.19.2",
"jsonwebtoken": "^9.0.2",
"multer": "^1.4.5-lts.1",
"mysql": "^2.18.1",
"mysql2": "^3.9.7",
"winston": "^3.13.0"
},
"devDependencies": {
"nodemon": "^3.1.0"
}
}

29
Server/routes/routes.js Normal file
View File

@ -0,0 +1,29 @@
import express from 'express';
import DAO from '../Controller/dao.js';// Asegúrate de que la ruta sea correcta
const router = express.Router();
router.post('/alumnoIniciado', async (req, res) => {
const { matricula, contrasena } = req.body;
try {
// Verificar si el alumno está en la base de datos
const usuario = await DAO.alumnoIniciado(matricula, contrasena);
if (usuario) {
// El alumno está autenticado correctamente
const authToken = usuario.crearToken();
const authRol = usuario.getRol();
const authId = usuario.getId();
const message = `Bienvenido ${usuario.getNombre()}`;
res.json({ matricula, authToken, authRol, authId, message });
} else {
// El alumno no está autenticado
res.status(401).json({ error: "Credenciales inválidas" });
}
} catch (error) {
console.error('Error al iniciar sesión:', error);
res.status(500).json({ error: "Error al iniciar sesión" });
}
});
export default router;

196
Server/server.js Normal file
View File

@ -0,0 +1,196 @@
import express from 'express';
import bodyParser from 'body-parser';
import cors from 'cors';
import DAO from './Controller/DAO.js'; // Importa tus controladores DAO
import DAOTutor from './Controller/DAOTutor.js';
import DAOCarreras from './Controller/DAOCarrera.js';
import Usuario from './Model/Usuario.js'; // Importa tus modelos
import multer from 'multer';
import path from 'path';
import { fileURLToPath } from 'url';
import DAODocumento from './Controller/DAODocumento.js';
import fs from 'fs';
const app = express();
const port = 3000;
// Obtener el directorio actual
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const diskStorage = multer.diskStorage({
destination: path.join(__dirname, '/ActasNacimiento'),
filename: (req, file, cb) => {
cb(null, file.originalname);
}
});
const fileUpload = multer({
storage: diskStorage
}).single('archivo');
app.use(bodyParser.json());
// Configuración de CORS
app.use(cors({
origin: 'http://localhost:5173', // Especifica el origen permitido
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
allowedHeaders: ['Origin', 'X-Requested-With', 'Content-Type', 'Accept'],
credentials: true
}));
app.use(express.static(path.join(__dirname,'ActasNacimiento')))
// Rutas
app.get("/matriculas", async (req, res) => {
try {
const alumnos = await DAO.matriculas();
res.json(alumnos);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.post("/agregarAlumno", async (req, res) => {
try {
const usuario = req.body;
usuario.rol = "estudiante";
const msj = await DAO.agregarAlumno(usuario);
res.json(msj);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.put("/editarUsuario", async (req, res) => {
try {
const usuario = req.body;
const verificado = await DAO.editarAlumno(usuario);
res.json({ Editado: verificado });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.put("/editarTutor", async (req, res) => {
try {
const tutor = req.body;
const verificado = await DAOTutor.editarTutor(tutor);
res.json({ Editado: verificado });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.post("/agregarTutor", async (req, res) => {
try {
const tutor = req.body;
const agregado = await DAOTutor.agregarTutor(tutor);
res.json({ msj: agregado });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.post("/alumnoIniciado", async (req, res) => {
try {
const alumno = req.body;
const matricula = alumno.matricula;
if (!alumno.matricula || !alumno.contrasena) {
return res.status(400).json({ error: "Missing matricula or contrasena" });
}
const usuario = await DAO.alumnoIniciado(alumno.matricula, alumno.contrasena);
const user = new Usuario();
if (usuario) {
const authToken = user.crearToken();
const authRol = usuario.getRol();
const authId = usuario.getId();
const message = `Bienvenido ${usuario.getNombre()}`;
res.json({ matricula, authToken, authRol, authId, message });
} else {
res.status(401).json({ error: "Credenciales inválidas" });
}
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.post("/usuarioValido", async (req, res) => {
try {
const usuario = req.body;
const verificado = await DAO.validarAlumno(usuario);
res.json({ existe: verificado });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.post("/traerDatosAlumno", async (req, res) => {
try {
const usuario = req.body;
const datos = await DAO.traeUsuario(usuario.id);
res.json(datos);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.get("/carreras", async (req, res) => {
try {
const carreras = await DAOCarreras.dameCarreras();
res.json(carreras);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.post("/traerDatosTutor", async (req, res) => {
try {
const usuario = req.body;
const datos = await DAOTutor.traerTutor(usuario.id);
res.json(datos);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.post("/agregarDocumentoAN", fileUpload, async (req, res) => {
try {
const data = req.body;
const file = fs.readFileSync(path.join(__dirname, '/ActasNacimiento/' + req.file.filename))
const guardado = await DAODocumento.agregarDocumento(data, file);
if (guardado) {
const cambiar = await DAO.editarAlumnoInscrito(data);
if (cambiar) {
res.json({ message: true });
} else {
res.json({ message: false });
}
} else {
res.json({ message: false });
}
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Manejo de errores
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});
// Iniciar el servidor
app.listen(port, () => {
console.log(`App listening at http://localhost:${port}`);
});
app.post("/traerTodosDatosAlumno", async (req, res) => {
try {
const usuario = req.body;
const datos = await DAO.traeTodosLosDatosUsuario(usuario.id);
res.json(datos);
} catch (error) {
res.status(500).json({ error: error.message });
}
});

3
backend/.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"java.configuration.updateBuildConfiguration": "interactive"
}

View File

@ -4,11 +4,15 @@ import static spark.Spark.*;
import java.util.HashMap;
import com.google.gson.*;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import mx.uv.Controller.DAO;
import mx.uv.Controller.DAOTutor;
import mx.uv.Controller.DAO_Carrrera;
import mx.uv.Model.*;
import mx.uv.Model.Mensaje;
import mx.uv.Model.Tutor;
import mx.uv.Model.Usuario;
public class App {
static Gson gson = new Gson();
@ -51,7 +55,7 @@ public class App {
return respuesta;
});
put("/editarAlumno", (request, response) -> {
put("/editarUsuario", (request, response) -> {
String payload = request.body();
Usuario usuario = gson.fromJson(payload, Usuario.class);
boolean verificado = DAO.editarAlumno(usuario);
@ -60,12 +64,21 @@ public class App {
return respuesta;
});
delete("/eliminarAlumno", (request, response) -> {
put("/editarTutor", (request, response) -> {
String payload = request.body();
Usuario usuario = gson.fromJson(payload, Usuario.class);
boolean verificado = DAO.eliminarAlumno(usuario.getId());
Tutor tutor = gson.fromJson(payload, Tutor.class);
boolean verificado = DAOTutor.editarTutor(tutor);
JsonObject respuesta = new JsonObject();
respuesta.addProperty("existe", verificado);
respuesta.addProperty("Editado", verificado);
return respuesta;
});
post("/agregarTutor", (request, response) -> {
String payload = request.body();
Tutor tutor = gson.fromJson(payload, Tutor.class);
Boolean agregado = DAOTutor.agregarTutor(tutor);
JsonObject respuesta = new JsonObject();
respuesta.addProperty("msj", agregado);
return respuesta;
});
@ -82,6 +95,7 @@ public class App {
respuesta.addProperty("matricula", usuario.getMatricula());
respuesta.addProperty("authToken", usuario.crearToken());
respuesta.addProperty("authRol", usuario.getRol());
respuesta.addProperty("authId", usuario.getId());
respuesta.addProperty("message", "Binevenido " + usuario.getNombre());
return gson.toJson(respuesta);
});
@ -95,9 +109,24 @@ public class App {
return respuesta;
});
post("/traerDatosAlumno", (request, response) -> {
String payload = request.body();
response.type("application/json");
Usuario u = gson.fromJson(payload, Usuario.class);
return gson.toJson(DAO.traeUsuario(u.getId()));
});
get("/carreras", (request, response) -> {
response.type("application/json");
return gson.toJson(DAO_Carrrera.dameCarreras());
});
post("/traerDatosTutor", (request, response) -> {
String payload = request.body();
response.type("application/json");
Usuario u = gson.fromJson(payload, Usuario.class);
return gson.toJson(DAOTutor.tarerTutor(u.getId()));
});
}
}

View File

@ -6,6 +6,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import com.google.gson.JsonElement;
import mx.uv.Model.Usuario;
import mx.uv.Model.Mensaje;
import mx.uv.Model.Registro;
@ -52,7 +54,6 @@ public class DAO {
} catch (Exception e) {
System.out.println(e);
} finally {
cerrarConexiones(null, conn);
}
return resultado;
}
@ -78,7 +79,6 @@ public class DAO {
} catch (SQLException ex) {
System.err.println(ex);
} finally {
cerrarConexiones(stm, conn);
}
return verificacion;
}
@ -113,7 +113,6 @@ public class DAO {
} catch (Exception e) {
System.out.println(e);
} finally {
cerrarConexiones(stm, conn);
}
return mensaje;
}
@ -129,24 +128,6 @@ public class DAO {
return contrasena.toString();
}
private static void cerrarConexiones(PreparedStatement stm, Connection conn) {
if (stm != null) {
try {
stm.close();
} catch (Exception e) {
System.out.println(e);
}
}
try {
if (conn != null) {
conn.close();
cn.cerrarConexion();
}
} catch (Exception e) {
System.out.println(e);
}
}
public static boolean eliminarAlumno(int idAlumno) {
return false;
}
@ -157,23 +138,23 @@ public class DAO {
boolean verificacion = false;
conn = cn.conectar();
try {
String sql = "UPDATE " + nombreTabla + " SET " + colNombre + " = ?, " + colApellido + " = ?, "
+ colFechaNacimiento + " = ?, " + colNacionalidad + " = ?, " + colTipoSangre + " = ?, "
+ colContrasena + " = ? WHERE " + colId + " = ?";
String sql = "UPDATE `usuario` SET `nombre` = ?, `apellido` = ?, `correo` = ?, `nacionalidad` = ?, `tipoSangre` = ?, `fecha_nacimiento` = ?, `curp` = ?, `idCarrera` = ? WHERE `id` = ?;";
stm = conn.prepareStatement(sql);
stm.setString(1, usuario.getNombre());
stm.setString(2, usuario.getApellido());
stm.setString(3, usuario.getFecha_nacimiento());
stm.setString(3, usuario.getCorreo());
stm.setString(4, usuario.getNacionalidad());
stm.setString(5, usuario.getTipoSangre());
stm.setString(6, usuario.getContrasena());
stm.setInt(7, usuario.getId());
stm.executeUpdate();
stm.setString(6, usuario.getFecha_nacimiento());
stm.setString(7, usuario.getCurp());
stm.setInt(8, usuario.getIdCarrera());
stm.setInt(9, usuario.getId());
if (stm.executeUpdate() > 0) {
verificacion = true;
}
} catch (SQLException ex) {
System.err.println(ex);
} finally {
cerrarConexiones(stm, conn);
cn.cerrarConexion();
}
return verificacion;
@ -199,7 +180,6 @@ public class DAO {
} catch (Exception e) {
System.out.println(e);
} finally {
cerrarConexiones(null, conn);
}
return usuario;
}
@ -233,4 +213,31 @@ public class DAO {
}
return ultimoID;
}
public static Usuario traeUsuario(int id) {
PreparedStatement stm = null;
Connection conn = null;
Usuario user = null;
ResultSet rs = null;
conn = cn.conectar();
try {
String sql = "SELECT `id`,`nombre`,`apellido`,`matricula`,`correo`,`nacionalidad`,`tipoSangre`,`fecha_nacimiento`,`curp`,`idCarrera`,`inscrito`\n"
+ //
"FROM `usuario` where id = ? ;";
stm = conn.prepareStatement(sql);
stm.setInt(1, id);
rs = stm.executeQuery();
while (rs.next()) {
user = new Usuario(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5),
rs.getString(6), rs.getString(7), rs.getString(8), rs.getString(9), rs.getInt(10),
rs.getInt(11));
}
} catch (SQLException ex) {
System.err.println(ex);
} finally {
}
return user;
}
}

View File

@ -27,7 +27,7 @@ public class DAOTutor {
stm = conn.createStatement();
rs = stm.executeQuery(sql);
while (rs.next()) {
Tutor u = new Tutor(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getInt(5));
Tutor u = new Tutor(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getInt(4), rs.getInt(5));
resultado.add(u);
}
} catch (Exception e) {
@ -72,7 +72,7 @@ public class DAOTutor {
stm = (PreparedStatement) conn.prepareStatement(sql);
stm.setString(1, tutor.getNombre());
stm.setString(2, tutor.getApellido());
stm.setString(3, tutor.getNumeroDeTelefono());
stm.setInt(3, tutor.getNumeroDeTelefono());
stm.setInt(4, tutor.getIdUsuario());
} catch (Exception e) {
System.out.println(e);
@ -109,11 +109,15 @@ public class DAOTutor {
boolean verificacion = false;
conn = cn.conectar();
try {
String sql = "UPDATE `tutor` SET `nombre` = '" + tutor.getNombre() + "',`apellido` = '"
+ tutor.getApellido() + "';";
String sql = "UPDATE `tutor` SET `nombre` = ?, `apellido` = ?, `numeroDeTelefono` = ? WHERE `idUsuario` = ?;";
stm = conn.prepareStatement(sql);
stm.executeQuery();
stm.setString(1, tutor.getNombre());
stm.setString(2, tutor.getApellido());
stm.setInt(3, tutor.getNumeroDeTelefono());
stm.setInt(4, tutor.getIdUsuario());
if (stm.executeUpdate() > 0) {
verificacion = true;
}
} catch (SQLException ex) {
System.out.println(ex);
} finally {
@ -123,4 +127,30 @@ public class DAOTutor {
return verificacion;
}
public static Tutor tarerTutor(int id) {
PreparedStatement stm = null;
Connection conn = null;
Tutor tutor = null;
ResultSet rs = null;
conn = cn.conectar();
try {
String sql = "SELECT `id`,`nombre`,`apellido`,`numeroDeTelefono`,`idUsuario`\n"
+
"FROM `tutor` where idUsuario = ? ;";
stm = conn.prepareStatement(sql);
stm.setInt(1, id);
rs = stm.executeQuery();
if (rs.next()) {
tutor = new Tutor(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getInt(4), rs.getInt(5));
}
} catch (SQLException ex) {
System.err.println(ex);
} finally {
cerrarConexiones(stm, conn);
cn.cerrarConexion();
}
return tutor;
}
}

View File

@ -15,7 +15,7 @@ public class DAO_Carrrera {
ResultSet rs = null;
Connection conn = null;
List<Carrera> resultado = new ArrayList<>();
System.out.println("Aqui");
conn = cn.conectar();
try {
@ -30,86 +30,9 @@ public class DAO_Carrrera {
} catch (Exception e) {
System.out.println(e);
} finally {
cerrarConexiones(null, conn);
}
return resultado;
}
/*
* public static boolean agregarCarrera(Carrera carrera) {
* PreparedStatement stm = null;
* Connection conn = null;
* boolean msj = false;
*
* conn = cn.conectar();
*
* try {
* String sql =
* "INSERT INTO `carrera` (`area`,`nombre`, `modalidad`, `campus`, `costo`) VALUES(?,?,?,?,?);"
* ;
* stm = (PreparedStatement) conn.prepareStatement(sql);
* stm.setString(1, carrera.getArea());
* stm.setString(2, carrera.getNombre());
* stm.setString(3, carrera.getModalidad());
* stm.setString(4, carrera.getCampus());
* stm.setDouble(5, carrera.getCosto());
*
* } catch (Exception e) {
* System.out.println(e);
* } finally {
* cerrarConexiones(stm, conn);
* }
* return msj;
* }
*/
private static void cerrarConexiones(PreparedStatement stm, Connection conn) {
if (stm != null) {
try {
stm.close();
} catch (Exception e) {
System.out.println(e);
}
stm = null;
}
try {
conn.close();
cn.cerrarConexion();
} catch (Exception e) {
System.out.println(e);
}
}
public static boolean eliminarCarrera(int idCarrera) {
return false;
}
/*
* public static boolean editarCarrera(Carrera carrera) {
* PreparedStatement stm = null;
* Connection conn = null;
* boolean verificacion = false;
* conn = cn.conectar();
*
* try {
* String sql = "UPDATE `alumno` SET `area` = '" + carrera.getArea() +
* "',`nombre` = '" + carrera.getNombre()
* + "',`modalidad` = '" + carrera.getModalidad() + "',`campus` = '"
* + carrera.getCampus() + "', `costo` = '" + carrera.getCosto() +
* "' WHERE `id` = '"
* + carrera.getId() + "';";
* stm = conn.prepareStatement(sql);
* stm.executeUpdate();
* verificacion = true;
* } catch (SQLException ex) {
* System.err.println(ex);
* } finally {
* cerrarConexiones(stm, conn);
* cn.cerrarConexion();
* }
* return verificacion;
* }
*/
}

View File

@ -81,37 +81,27 @@ public class DAO_Documentacion {
return false;
}
public static boolean editarDocumentacion(Documento documentacion) {
public static boolean agregarDocumento(Documento doc) {
PreparedStatement stm = null;
Connection conn = null;
boolean verificacion = false;
conn = cn.conectar();
boolean msj = false;
conn = cn.conectar();
String sql = "INSERT INTO documento (titulo, archivo, idUsuario, valido) VALUES (?, ?, ?, ?)";
try {
/*
* String sql = "UPDATE `documentacion` SET `acta_nacimiento` = '" +
* documentacion.getActaNacimiento()
* + "',`certificado_bachillerato` = '" +
* documentacion.getCertificadoBachillerato() + "',`curp` = '"
* + documentacion.getCurp() + "',`ine` = '" + documentacion.getIne() +
* "', `ine_tutor` = '"
* + documentacion.getIneTutor() + "',`certificado_medico` = '" +
* documentacion.getCertificadoMedico()
* + "',`comprobante` = '" + documentacion.getComprobante() +
* "',`fotografia` = '"
* + documentacion.getFotografia() + "',`constancia` = '" +
* documentacion.getConstancia()
* + "' WHERE `id` = '" + documentacion.getId() + "';";
*/
stm = conn.prepareStatement("");
stm.executeUpdate();
verificacion = true;
} catch (SQLException ex) {
System.err.println(ex);
} finally {
cerrarConexiones(stm, conn);
cn.cerrarConexion();
stm = conn.prepareStatement(sql);
stm.setString(1, doc.getTitulo());
stm.setBlob(2, doc.getArchivo());
stm.setInt(3, doc.getIdUsuario());
stm.setInt(4, doc.getValido());
if (stm.executeUpdate() > 0) {
msj = true;
}
return verificacion;
} catch (SQLException e) {
e.printStackTrace();
// Manejar cualquier excepción y retornar falso en caso de error
}
return msj;
}
}

View File

@ -1,14 +1,16 @@
package mx.uv.Model;
import java.io.InputStream;
public class Documento {
private int id;
private String titulo;
private byte[] archivo;
private InputStream archivo;
private int idUsuario;
private int valido;
public Documento(int id, String titulo, byte[] archivo, int idUsuario, int valido) {
this.id = id;
public Documento(String titulo, InputStream archivo, int idUsuario, int valido) {
this.titulo = titulo;
this.archivo = archivo;
this.idUsuario = idUsuario;
@ -23,7 +25,7 @@ public class Documento {
return titulo;
}
public byte[] getArchivo() {
public InputStream getArchivo() {
return archivo;
}
@ -43,7 +45,7 @@ public class Documento {
this.titulo = titulo;
}
public void setArchivo(byte[] archivo) {
public void setArchivo(InputStream archivo) {
this.archivo = archivo;
}

View File

@ -4,10 +4,10 @@ public class Tutor {
private int id;
private String nombre;
private String apellido;
private String numeroDeTelefono;
private int numeroDeTelefono;
private int idUsuario;
public Tutor(int id, String nombre, String apellido, String numeroDeTelefono, int idUsuario) {
public Tutor(int id, String nombre, String apellido, int numeroDeTelefono, int idUsuario) {
this.id = id;
this.nombre = nombre;
this.apellido = apellido;
@ -27,7 +27,7 @@ public class Tutor {
return apellido;
}
public String getNumeroDeTelefono() {
public int getNumeroDeTelefono() {
return numeroDeTelefono;
}
@ -47,7 +47,7 @@ public class Tutor {
this.apellido = apellido;
}
public void setNumeroDeTelefono(String numeroDeTelefono) {
public void setNumeroDeTelefono(int numeroDeTelefono) {
this.numeroDeTelefono = numeroDeTelefono;
}

View File

@ -35,7 +35,6 @@ public class Usuario {
this.inscrito = inscrito;
}
public Usuario(int id, String nombre, String apellido, String matricula) {
this.id = id;
this.nombre = nombre;
@ -43,8 +42,6 @@ public class Usuario {
this.matricula = matricula;
}
public Usuario(int id, String nombre, String apellido, String matricula, String rol) {
this.id = id;
this.nombre = nombre;
@ -53,6 +50,20 @@ public class Usuario {
this.rol = rol;
}
public Usuario(int id, String nombre, String apellido, String matricula, String correo, String nacionalidad,
String tipoSangre, String fecha_nacimiento, String curp, int idCarrera, int inscrito) {
this.id = id;
this.nombre = nombre;
this.apellido = apellido;
this.matricula = matricula;
this.correo = correo;
this.nacionalidad = nacionalidad;
this.tipoSangre = tipoSangre;
this.fecha_nacimiento = fecha_nacimiento;
this.curp = curp;
this.idCarrera = idCarrera;
this.inscrito = inscrito;
}
public Usuario(String matricula, String contrasena) {
this.matricula = matricula;

View File

@ -17,11 +17,13 @@ function App() {
<BrowserRouter>
<Nav />
<Routes>
<Route path="/login" element={<Login />} />
<Route path="/registro" element={<Registro />} />
<Route element={<ProtectorDeRutas />}>
<Route path="/home" element={<OfertaEducativa />} />
<Route path="/info" element={<Informacion />} />
<Route path="/" />
<Route element={<ProtectorAdmin />}>
<Route path="/inscripcion" element={<Inscripcion />} />
</Route>

View File

@ -7,6 +7,7 @@ const Nav = () => {
storage.remove("authToken");
storage.remove("authUser");
storage.remove("authRol");
storage.remove("authId");
go("/login");
};
return (

View File

@ -4,7 +4,7 @@ import storage from "../Storage/storage";
export const ProtectorDeRutas = ({ children }) => {
const authUser = storage.get("authToken");
if (!authUser) {
if (!authUser ) {
return <Navigate to="/login" />;
}
return <Outlet />;

View File

@ -1,134 +1,321 @@
import React from 'react';
import { useNavigate, NavLink } from "react-router-dom";
import { sendRequest } from "../funciones";
import React, { useEffect, useState } from 'react';
import axios from 'axios';
import DivInput from "../Components/divInput";
import storage from "../Storage/storage";
import { useNavigate } from 'react-router-dom';
const Inscripcion = () => {
const go = useNavigate();
const [user] = useState({ id: storage.get('authId') });
const [carreraSeleccionada, setCarreraSeleccionada] = useState('');
const [usuario, setUsuario] = useState({
id: 0,
nombre: "",
apellido: "",
matricula: "",
correo: "",
nacionalidad: "",
tipoSangre: "",
fecha_nacimiento: "",
curp: "",
idCarrera: 0,
inscrito:0
});
const [tutor, setTutor] = useState({
id: 0,
nombre: "",
apellido: "",
numeroDeTelefono: "",
idUsuario: storage.get('authId')
});
const [carrera, setCarrera] = useState([]);
const [actaN, setActaN] = useState({
id: 0,
titulo: "",
archivo: null,
idUsuario: 0,
valido: null
});
useEffect(() => {
const fetchData = async () => {
try {
const resUsuario = await axios.post("/traerDatosAlumno", user);
if (resUsuario.status === 200) {
setUsuario((prevUsuario) => ({
...prevUsuario,
id: resUsuario.data.id || 0,
nombre: resUsuario.data.nombre || "",
apellido: resUsuario.data.apellido || "",
matricula: resUsuario.data.matricula || "",
correo: resUsuario.data.correo || "",
nacionalidad: resUsuario.data.nacionalidad || "",
tipoSangre: resUsuario.data.tipoSangre || "",
fecha_nacimiento: resUsuario.data.fecha_nacimiento || "",
curp: resUsuario.data.curp || "",
idCarrera: resUsuario.data.idCarrera || 0,
inscrito: resUsuario.data.inscrito || 0
}));
} else {
console.log('Error: No hay usuario');
}
} catch (error) {
console.log(error);
}
try {
const resTutor = await axios.post("/traerDatosTutor", user);
if (resTutor.status === 200) {
setTutor({
id: resTutor.data.id,
nombre: resTutor.data.nombre || "",
apellido: resTutor.data.apellido || "",
numeroDeTelefono: resTutor.data.numeroDeTelefono || "",
idUsuario: resTutor.data.idUsuario || 0
});
} else {
console.log('Error: No hay tutor');
}
} catch (error) {
console.error('Error:', error);
}
try {
const resCarrera = await axios.get("/carreras", user);
if (resCarrera.status === 200) {
setCarrera(resCarrera.data);
} else {
console.log('Error: No hay Carrera');
}
} catch (error) {
console.error('Error:', error);
}
};
fetchData();
}, [user]);
const handleInputChange = (e) => {
const { name, value } = e.target;
setUsuario((prevUsuario) => ({
...prevUsuario,
[name]: value
}));
};
const handleTutorInputChange = (e) => {
const { name, value } = e.target;
setTutor((prevTutor) => ({
...prevTutor,
[name]: value
}));
};
const handleFileChange = (e) => {
const file = e.target.files[0];
const fileName = `${usuario.matricula}_ActaN.pdf`;
const modifiedFile = new File([file], fileName, { type: file.type });
setActaN((prevActaN) => ({
...prevActaN,
archivo: modifiedFile
}));
};
const handleCarreraChange = (e) => {
const selectedCarreraId = e.target.value;
setCarreraSeleccionada(selectedCarreraId);
setUsuario((prevUsuario) => ({
...prevUsuario,
idCarrera: parseInt(selectedCarreraId, 10)
}));
};
const subir = async (e) => {
e.preventDefault();
try {
if (tutor.id === 0) {
setTutor({
idUsuario: usuario.id
});
const res = await axios.post(`/agregarTutor`, tutor);
if (res.status === 200) {
console.log('Tutor agregado exitosamente:', res.data);
}
} else {
const res = await axios.put(`/editarTutor`, tutor);
if (res.status === 200) {
console.log('Tutor actualizado exitosamente:', res.data);
}
}
const resUsuario = await axios.put(`/editarUsuario`, usuario);
if (resUsuario.status === 200) {
console.log('Usuario actualizado exitosamente:', resUsuario.data);
}
const formData = new FormData();
formData.append('titulo', `${usuario.matricula}_ActaN`);
formData.append('archivo', actaN.archivo);
formData.append('idUsuario', usuario.id);
const reqs = await axios.post('/agregarDocumentoAN', formData,{
headers: {
'Content-Type': 'multipart/form-data',
},
});
if (reqs){
window.location.reload();
}
} catch (error) {
console.error('Error al subir los datos:', error);
}
};
return (
<>
{usuario.inscrito !== 1 ? (
<div className='container'>
<div className='nbn'>
<form>
<form onSubmit={subir}>
<div className="mb-4">
<h5>Datos Personales</h5>
<DivInput
type="text"
name="nombre"
value={usuario.nombre}
className="form-control mb-3"
placeholder="Nombre"
required
handleChange={handleInputChange}
/>
<DivInput
type="text"
name="apellido"
value={usuario.apellido}
className="form-control mb-3"
placeholder="Apellido"
required
handleChange={handleInputChange}
/>
<DivInput
type="email"
name="correo"
value={usuario.correo}
className="form-control mb-3"
placeholder="Correo Electrónico"
required
handleChange={handleInputChange}
/>
<DivInput
type="text"
name="nacionalidad"
value={usuario.nacionalidad}
className="form-control mb-3"
placeholder="Nacionalidad"
required
handleChange={handleInputChange}
/>
<DivInput
type="text"
name="tipoSangre"
value={usuario.tipoSangre}
className="form-control mb-3"
placeholder="Tipo de Sangre"
required
handleChange={handleInputChange}
/>
<h7>Fecha de Nacimiento</h7>
<h6>Fecha de Nacimiento</h6>
<DivInput
type="date"
name="fechaNacimiento"
name="fecha_nacimiento"
value={usuario.fecha_nacimiento}
className="form-control mb-3"
placeholder="Fecha de Nacimiento"
required
handleChange={handleInputChange}
/>
<DivInput
type="text"
name="curp"
value={usuario.curp}
className="form-control mb-3"
placeholder="CURP"
required
handleChange={handleInputChange}
/>
</div>
<div className="mb-4">
<h5>Datos del Tutor</h5>
<DivInput
type="text"
name="nombreTutor"
name="nombre"
value={tutor.nombre}
className="form-control mb-3"
placeholder="Nombre"
required
handleChange={handleTutorInputChange}
/>
<DivInput
type="text"
name="apellidoTutor"
name="apellido"
value={tutor.apellido}
className="form-control mb-3"
placeholder="Apellidos"
required
handleChange={handleTutorInputChange}
/>
<DivInput
type="tel"
name="numeroDeTelefono"
value={tutor.numeroDeTelefono}
className="form-control mb-3"
placeholder="Número de Teléfono"
required
handleChange={handleTutorInputChange}
/>
</div>
<div className="mb-4">
<h5>Carrera</h5>
<select
id="carreraSelect"
className="form-control"
value={carreraSeleccionada}
onChange={handleCarreraChange}
>
<option value="" disabled>Selecciona una carrera</option>
{carrera.map((carrera) => (
<option key={carrera.id} value={carrera.id}>
{carrera.nombre}
</option>
))}
</select>
</div>
<div className="mb-4">
<h5>Documentación</h5>
<h6>Acta De Nacimiento</h6>
<input
type="file"
name="actaDeNacimiento"
name="archivo"
className="form-control mb-3"
accept=".pdf"
placeholder="Acta de Nacimiento"
required
/>
<h6>Constancia De Estudio</h6>
<input
type="file"
name="constanciaDeEstudios"
className="form-control mb-3"
accept=".pdf"
placeholder="Constancia de Estudios"
required
/>
<h6>Fotografia</h6>
<input
type="file"
name="fotografia"
className="form-control mb-3"
accept=".pdf"
placeholder="Fotografía"
required
/>
<h6>Certificado Medico</h6>
<input
type="file"
name="certificadoMedico"
className="form-control mb-3"
accept=".pdf"
placeholder="Certificado Médico"
required
onChange={handleFileChange}
/>
</div>
<button type="submit" className="btn btn-primary">Enviar Inscripción</button>
</form>
</div>
</div>
) : (
<div className="d-flex justify-content-center align-items-center vh-100">
<div className="p-5 text-center bg-light border rounded shadow">
Inscripción en Proceso, Validando los datos por favor revisa esta página dentro de una semana
</div>
</div>
)}
</>
);
}
};
export default Inscripcion;

View File

@ -13,12 +13,13 @@ const Login = () => {
const form = { ...usuario };
try {
const res = await sendRequest("POST", form, "/alumnoIniciado", "", false);
const res = await sendRequest("POST", usuario, "/alumnoIniciado", "", false);
if (res && res.authToken) {
storage.set("authToken", res.authToken);
storage.set("authUser", res.matricula);
storage.set("authRol", res.authRol);
storage.set("authId", res.authId);
const rol =storage.get("authRol");
go("/home")
} else {

View File

@ -1,47 +1,100 @@
import React, { useState } from 'react';
import axios from 'axios';
import React, { useState, useEffect } from 'react';
const ValidacionAdm = () => {
const [loading, setLoading] = useState(true);
const [alumno, setAlumno] = useState({});
const [matriculas, setMatriculas] = useState([]);
const [currentMatriculaIndex, setCurrentMatriculaIndex] = useState(0);
const handleLoad = () => {
useEffect(() => {
const fetchData = async () => {
try {
const resMatriculas = await axios.get('http://localhost:3000/matriculas');
if (resMatriculas.status === 200 && resMatriculas.data.length > 0) {
setMatriculas(resMatriculas.data);
await fetchAlumnoData(resMatriculas.data[0].id);
}
} catch (error) {
console.log(error);
} finally {
setLoading(false);
}
};
fetchData();
}, []);
const fetchAlumnoData = async (id) => {
try {
const resAlumno = await axios.post('http://localhost:3000/traerTodosDatosAlumno', { id: parseInt(id, 10) });
if (resAlumno.status === 200) {
setAlumno(resAlumno.data);
}
} catch (error) {
console.log(error);
}
};
const handlePreviousMatricula = () => {
if (currentMatriculaIndex > 0) {
const newIndex = currentMatriculaIndex - 1;
setCurrentMatriculaIndex(newIndex);
fetchAlumnoData(matriculas[newIndex].id);
}
};
const handleNextMatricula = () => {
if (currentMatriculaIndex < matriculas.length - 1) {
const newIndex = currentMatriculaIndex + 1;
setCurrentMatriculaIndex(newIndex);
fetchAlumnoData(matriculas[newIndex].id);
}
};
if (loading) {
return <div>Loading...</div>;
}
return (
<div className="container mt-4">
<h1 className="text-center mb-4">Validacion Administrativa</h1>
<h1 className="text-center mb-4">Validación Administrativa</h1>
<div className="input-group mb-3 justify-content-center">
<div className="input-group-prepend">
<button className="btn btn-sm p-0 border-0" type="button">
<button className="btn btn-sm p-0 border-0" type="button" onClick={handlePreviousMatricula}>
<img src="left-arrow.png" alt="Icono de flecha izquierda" style={{ width: '20px', height: '20px' }} />
</button>
</div>
<input type="text" className="form-control form-control-sm text-center" style={{ maxWidth: '250px' }} placeholder="Aqui aparece la matricula" />
<input
type="text"
className="form-control form-control-sm text-center"
style={{ maxWidth: '250px' }}
placeholder="Aqui aparece la matricula"
value={matriculas[currentMatriculaIndex].matricula}
readOnly
/>
<div className="input-group-append">
<button className="btn btn-sm p-0 border-0" type="button">
<button className="btn btn-sm p-0 border-0" type="button" onClick={handleNextMatricula}>
<img src="right-arrow.png" alt="Icono de flecha derecha" style={{ width: '20px', height: '20px' }} />
</button>
</div>
</div>
<div className="card mb-4">
<div className="card-body">
<h2 className="card-title">Datos del Alumno</h2>
<div className="row">
<div className="col-md-6">
<p className="card-text"><strong>Nombre:</strong> { } </p>
<p className="card-text"><strong>Apellido:</strong>{ } </p>
<p className="card-text"><strong>Matricula:</strong> { }</p>
<p className="card-text"><strong>Correo:</strong>{ } </p>
<p className="card-text"><strong>Nacionalidad:</strong>{ } </p>
<p className="card-text"><strong>Tipo de sangre:</strong>{ } </p>
<p className="card-text"><strong>Fecha de nacimiento:</strong>{ } </p>
<p className="card-text"><strong>CURP:</strong>{ } </p>
<p className="card-text"><strong>Carrera:</strong>{ } </p>
<p className="card-text"><strong>Nombre:</strong> {alumno.nombre}</p>
<p className="card-text"><strong>Apellido:</strong> {alumno.apellido}</p>
<p className="card-text"><strong>Matricula:</strong> {alumno.matricula}</p>
<p className="card-text"><strong>Correo:</strong> {alumno.correo}</p>
<p className="card-text"><strong>Nacionalidad:</strong> {alumno.nacionalidad}</p>
<p className="card-text"><strong>Tipo de sangre:</strong> {alumno.tipoSangre}</p>
<p className="card-text"><strong>Fecha de nacimiento:</strong> {alumno.fecha_nacimiento}</p>
<p className="card-text"><strong>CURP:</strong> {alumno.curp}</p>
<p className="card-text"><strong>Carrera:</strong> {alumno.carreraNombre}</p>
</div>
</div>
</div>
@ -52,9 +105,9 @@ const ValidacionAdm = () => {
<h2 className="card-title">Datos del Tutor</h2>
<div className="row">
<div className="col-md-6">
<p className="card-text"><strong>Nombre:</strong> { } </p>
<p className="card-text"><strong>Apellido:</strong>{ } </p>
<p className="card-text"><strong>Teléfono:</strong>{ }</p>
<p className="card-text"><strong>Nombre:</strong> {alumno.tutorNombre}</p>
<p className="card-text"><strong>Apellido:</strong> {alumno.tutorApellido}</p>
<p className="card-text"><strong>Teléfono:</strong> {alumno.numeroDeTelefono}</p>
</div>
</div>
</div>
@ -62,35 +115,33 @@ const ValidacionAdm = () => {
<div className="card mb-4">
<div className="card-body">
<h2 className="card-title">Documentos de Alumno</h2>
<h2 className="card-title">Documentos del Alumno</h2>
<div className="pdf-container mb-4">
<p className="card-text"><strong>Acta de Nacimiento:</strong> </p>
<embed src={"mapa_curri_TC.pdf"} type="application/pdf" width="100%" height="300px" onLoad={handleLoad} />
<p className="card-text"><strong>Acta de Nacimiento:</strong></p>
<embed src={'http://localhost:3000/'+alumno.matricula+'_ActaN.pdf'} type="application/pdf" width="100%" height="300px" />
<div className="d-flex justify-content-center mt-3">
<button className="btn btn-primary btn-sm me-1">Aceptar Documentos</button>
<button className="btn btn-primary btn-sm ms-1">Rechazar Documentos</button>
</div>
</div>
<div className="pdf-container mb-4">
<p className="card-text"><strong>Constancia de estudios :</strong> </p>
<embed src={"mapa_curri_TC.pdf"} type="application/pdf" width="100%" height="300px" onLoad={handleLoad} />
<p className="card-text"><strong>Constancia de estudios:</strong></p>
<embed src={alumno.constanciaEstudios} type="application/pdf" width="100%" height="300px" />
<div className="d-flex justify-content-center mt-3">
<button className="btn btn-primary btn-sm me-1">Aceptar Documentos</button>
<button className="btn btn-primary btn-sm ms-1">Rechazar Documentos</button>
</div>
</div>
<div className="pdf-container mb-4">
<p className="card-text"><strong>Fotografia:</strong> </p>
<embed src={"mapa_curri_TC.pdf"} type="application/pdf" width="100%" height="300px" onLoad={handleLoad} />
<p className="card-text"><strong>Fotografía:</strong></p>
<embed src={alumno.fotografia} type="application/pdf" width="100%" height="300px" />
<div className="d-flex justify-content-center mt-3">
<button className="btn btn-primary btn-sm me-1">Aceptar Documentos</button>
<button className="btn btn-primary btn-sm ms-1">Rechazar Documentos</button>
</div>
</div>
</div>
</div>
</div>
);
};

View File

@ -8,7 +8,7 @@ import axios from "axios";
window.axios = axios;
window.axios.defaults.baseURL = "http://localhost:4567";
window.axios.defaults.baseURL = "http://localhost:3000";
window.axios.defaults.headers.common["Accept"] = "application/json";
window.axios.defaults.headers.common["Content-Type"] = "application/json";
window.axios.defaults.headers.common["X-Requested-with"] = "XMLHttpRequest";