Compare commits
3 Commits
796ca2bae7
...
f50deaf29d
Author | SHA1 | Date |
---|---|---|
Soka_jplr | f50deaf29d | |
Soka_jplr | 41b16210f2 | |
Soka_jplr | f0f6c8bf47 |
|
@ -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.
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
File diff suppressed because it is too large
Load Diff
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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;
|
|
@ -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 });
|
||||
}
|
||||
});
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"java.configuration.updateBuildConfiguration": "interactive"
|
||||
}
|
|
@ -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()));
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
* }
|
||||
*/
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -7,6 +7,7 @@ const Nav = () => {
|
|||
storage.remove("authToken");
|
||||
storage.remove("authUser");
|
||||
storage.remove("authRol");
|
||||
storage.remove("authId");
|
||||
go("/login");
|
||||
};
|
||||
return (
|
||||
|
|
|
@ -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 />;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -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";
|
||||
|
|
Loading…
Reference in New Issue