2025-07-28 15:33:09 -06:00
|
|
|
const enviarCorreoInscripcion = require('../../controller/Profesor/enviarCorreo'); // Ajusta si está en otra ruta
|
2025-08-09 18:52:17 -06:00
|
|
|
const Alumno = require('../../db/tablas/Alumno');
|
|
|
|
|
const AlumnoInscrito = require('../../db/tablas/AlumnoInscrito');
|
2026-08-04 10:55:42 -06:00
|
|
|
const sequelize = require('../../config/sequelize.conf');
|
2025-07-28 15:33:09 -06:00
|
|
|
|
|
|
|
|
async function realizarInscripcion(req, res) {
|
2025-08-09 18:52:17 -06:00
|
|
|
const { id_cuenta, nombre, correo } = req.body;
|
2025-07-28 15:33:09 -06:00
|
|
|
|
|
|
|
|
try {
|
2026-08-04 10:55:42 -06:00
|
|
|
console.log('\n=== INICIO INSCRIPCION PROFESOR ===');
|
|
|
|
|
console.log('Datos recibidos:', { id_cuenta, nombre, correo });
|
|
|
|
|
|
|
|
|
|
// Validar datos requeridos primero
|
|
|
|
|
if (!nombre || !id_cuenta || !correo) {
|
|
|
|
|
console.error('Datos incompletos');
|
|
|
|
|
return res.status(400).json({ message: 'Faltan datos requeridos: id_cuenta, nombre y correo.' });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Obtener periodo activo
|
|
|
|
|
let idPeriodoActivo;
|
|
|
|
|
try {
|
|
|
|
|
console.log('Buscando periodo activo...');
|
|
|
|
|
const periodoActivo = await sequelize.query(`
|
|
|
|
|
SELECT id_periodo
|
|
|
|
|
FROM periodo
|
|
|
|
|
WHERE activo = 1
|
|
|
|
|
LIMIT 1
|
|
|
|
|
`, { raw: true, type: sequelize.QueryTypes.SELECT });
|
|
|
|
|
|
|
|
|
|
console.log('Resultado periodo:', periodoActivo);
|
|
|
|
|
|
|
|
|
|
if (!periodoActivo || !periodoActivo.length) {
|
|
|
|
|
console.warn('No hay periodo activo');
|
|
|
|
|
return res.status(400).json({
|
|
|
|
|
message: 'No hay periodo activo configurado'
|
|
|
|
|
});
|
|
|
|
|
}
|
2025-08-11 12:45:58 -06:00
|
|
|
|
2026-08-04 10:55:42 -06:00
|
|
|
idPeriodoActivo = periodoActivo[0].id_periodo;
|
|
|
|
|
console.log('ID Periodo Activo encontrado:', idPeriodoActivo);
|
|
|
|
|
} catch (dbError) {
|
|
|
|
|
console.error('❌ Error al obtener periodo activo:');
|
|
|
|
|
console.error(' Mensaje:', dbError.message);
|
|
|
|
|
console.error(' SQL:', dbError.sql);
|
|
|
|
|
console.error(' Stack:', dbError.stack);
|
|
|
|
|
return res.status(500).json({
|
|
|
|
|
message: 'Error al obtener el período activo.',
|
|
|
|
|
error: dbError.message,
|
|
|
|
|
sql: dbError.sql || 'N/A'
|
|
|
|
|
});
|
2025-07-28 15:33:09 -06:00
|
|
|
}
|
2025-08-11 12:45:58 -06:00
|
|
|
|
2025-07-28 15:33:09 -06:00
|
|
|
|
|
|
|
|
// 1. Buscar si el usuario existe
|
2026-08-04 10:55:42 -06:00
|
|
|
console.log('Buscando usuario con id_cuenta:', id_cuenta);
|
2025-08-09 18:52:17 -06:00
|
|
|
const usuario = await Alumno.findOne({ where: { id_cuenta } });
|
2026-08-04 10:55:42 -06:00
|
|
|
console.log('Usuario encontrado:', usuario ? 'SÍ' : 'NO');
|
2025-07-28 15:33:09 -06:00
|
|
|
|
|
|
|
|
if (!usuario) {
|
2026-08-04 10:55:42 -06:00
|
|
|
console.error('Usuario no encontrado');
|
|
|
|
|
return res.status(404).json({ message: 'Usuario (Alumno) no encontrado en la base de datos.' });
|
2025-07-28 15:33:09 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 2. Verificar si ya tiene inscripción
|
2026-08-04 10:55:42 -06:00
|
|
|
console.log('Verificando inscripción existente...');
|
2025-08-09 18:52:17 -06:00
|
|
|
const inscripcionExistente = await AlumnoInscrito.findOne({
|
2025-08-11 12:45:58 -06:00
|
|
|
where: {
|
|
|
|
|
id_cuenta: usuario.id_cuenta,
|
2026-08-04 10:55:42 -06:00
|
|
|
id_periodo: idPeriodoActivo
|
2025-08-11 12:45:58 -06:00
|
|
|
}
|
2025-07-28 15:33:09 -06:00
|
|
|
});
|
2026-08-04 10:55:42 -06:00
|
|
|
console.log('Inscripción existente:', inscripcionExistente ? 'SÍ' : 'NO');
|
2025-08-11 11:30:12 -06:00
|
|
|
|
2025-07-28 15:33:09 -06:00
|
|
|
if (inscripcionExistente) {
|
2026-08-04 10:55:42 -06:00
|
|
|
console.log('Usuario ya inscrito en este período');
|
2025-07-28 15:33:09 -06:00
|
|
|
return res.status(200).json({
|
2026-08-04 10:55:42 -06:00
|
|
|
message: 'El usuario ya está inscrito en este período.',
|
|
|
|
|
data: inscripcionExistente
|
2025-07-28 15:33:09 -06:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-05 01:09:25 +00:00
|
|
|
// // Validacion del periodo
|
|
|
|
|
// const periodoActivo = await Periodo.findOne({
|
|
|
|
|
// where: {
|
|
|
|
|
// activo: 1 // o true
|
|
|
|
|
// }
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
|
|
// if (!periodoActivo) {
|
|
|
|
|
// throw new Error("No hay un periodo activo");
|
|
|
|
|
// }
|
2026-02-05 00:49:38 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-28 15:33:09 -06:00
|
|
|
// 3. Crear inscripción
|
2026-08-04 10:55:42 -06:00
|
|
|
console.log('Creando nueva inscripción...');
|
|
|
|
|
const nuevaInscripcion = await AlumnoInscrito.create({
|
2025-08-11 12:45:58 -06:00
|
|
|
id_cuenta: usuario.id_cuenta,
|
2026-08-04 10:55:42 -06:00
|
|
|
id_periodo: idPeriodoActivo,
|
2025-08-11 12:45:58 -06:00
|
|
|
id_plataforma: 5,
|
|
|
|
|
fecha_inscripcion: new Date(),
|
|
|
|
|
tiempo_disponible: 3600,
|
2026-08-04 10:55:42 -06:00
|
|
|
realizo_pago: false,
|
|
|
|
|
platica: true,
|
|
|
|
|
ad: false
|
2025-07-28 15:33:09 -06:00
|
|
|
});
|
|
|
|
|
|
2026-08-04 10:55:42 -06:00
|
|
|
console.log('✓ Inscripción creada:', nuevaInscripcion.id_alumno_inscrito);
|
2025-08-09 18:16:56 -06:00
|
|
|
|
2026-08-04 10:55:42 -06:00
|
|
|
// 4. Enviar correo
|
|
|
|
|
try {
|
|
|
|
|
console.log('Enviando correo a:', correo);
|
|
|
|
|
await enviarCorreoInscripcion(correo, nombre);
|
|
|
|
|
console.log('✓ Correo enviado exitosamente');
|
|
|
|
|
} catch (emailError) {
|
|
|
|
|
console.warn('⚠ Correo no enviado (pero inscripción OK):', emailError.message);
|
|
|
|
|
}
|
2025-07-28 15:33:09 -06:00
|
|
|
|
2026-08-04 10:55:42 -06:00
|
|
|
// 5. Respuesta final
|
|
|
|
|
console.log('=== INSCRIPCION COMPLETADA EXITOSAMENTE ===\n');
|
|
|
|
|
res.status(200).json({
|
|
|
|
|
message: 'Inscripción creada correctamente.',
|
|
|
|
|
data: {
|
|
|
|
|
id_alumno_inscrito: nuevaInscripcion.id_alumno_inscrito,
|
|
|
|
|
id_cuenta: usuario.id_cuenta,
|
|
|
|
|
id_periodo: idPeriodoActivo
|
|
|
|
|
}
|
|
|
|
|
});
|
2025-07-28 15:33:09 -06:00
|
|
|
|
|
|
|
|
} catch (error) {
|
2026-08-04 10:55:42 -06:00
|
|
|
console.error('\n❌ ERROR EN realizarInscripcion ❌');
|
|
|
|
|
console.error('Tipo de error:', error.name);
|
|
|
|
|
console.error('Mensaje:', error.message);
|
|
|
|
|
console.error('Stack completo:', error.stack);
|
|
|
|
|
console.error('Datos recibidos:', req.body);
|
|
|
|
|
if (error.sql) console.error('SQL:', error.sql);
|
|
|
|
|
console.error('=====================================\n');
|
|
|
|
|
|
|
|
|
|
res.status(500).json({
|
|
|
|
|
message: 'Error al procesar la inscripción o enviar el correo.',
|
|
|
|
|
error: error.message,
|
|
|
|
|
type: error.name
|
|
|
|
|
});
|
2025-07-28 15:33:09 -06:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports = { realizarInscripcion };
|