188 lines
7.6 KiB
JavaScript
188 lines
7.6 KiB
JavaScript
const connection = require('../conf/connection.js');
|
|
const express = require('express');
|
|
const nodemailer = require("nodemailer");
|
|
|
|
var randomstring = require("randomstring");
|
|
const bcrypt = require('bcrypt');
|
|
|
|
var app = express();
|
|
|
|
|
|
function query(consulta) {
|
|
return new Promise(function(resolve, reject) {
|
|
connection.query(`${consulta}`, (error, results, files) => {
|
|
if (error) reject(error);
|
|
resolve(results);
|
|
});
|
|
})
|
|
}
|
|
|
|
async function sendEmail( destination, costo ) {
|
|
|
|
// Generate test SMTP service account from ethereal.email
|
|
// Only needed if you don't have a real mail account for testing
|
|
let testAccount = await nodemailer.createTestAccount();
|
|
|
|
// create reusable transporter object using the default SMTP transport
|
|
let transporter = nodemailer.createTransport({
|
|
service: "Gmail",
|
|
port: 587,
|
|
secure: false, // true for 465, false for other ports
|
|
auth: {
|
|
user: 'asinea103@fa.unam.mx', // generated ethereal user
|
|
pass: 'As1n34103++'
|
|
},
|
|
});
|
|
|
|
// send mail with defined transport object
|
|
let info = await transporter.sendMail({
|
|
from: '"ASINEA 2020" <asinea103@fa.unam.mx>', // sender address
|
|
to: `"${destination}"`, // list of receivers
|
|
subject: "Inscripción exitosa ASINEA 2020", // Subject line
|
|
text: `
|
|
Felicidades tu registro a ASINEA 2020 fue exitoso. Los pasos a seguir son:
|
|
1.- Se generará su ficha de depósito con el monto de $${costo}.00, llegará por este medio en los próximos días
|
|
2.- Tiene dos días hábiles para realizar el pago.
|
|
3.- Entrar al portal de ASINEA para subir el comprobante de tu pago, para que pueda ser validado.
|
|
4.- Al ser comprobado su pago recibirá su comprobante de inscripción
|
|
|
|
Nota: Recuerde que algunos eventos tienen un máximo de asistentes por lo que no se asegura su lugar si no realiza el pago.
|
|
`, // plain text body
|
|
|
|
});
|
|
|
|
console.log("Message sent: %s", info.messageId);
|
|
// Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@example.com>
|
|
|
|
// Preview only available when sending through an Ethereal account
|
|
console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
|
|
// Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
|
|
}
|
|
|
|
|
|
function depurado(cadena) {
|
|
if (cadena != null) {
|
|
cadena = cadena.replace(/'/g, "''");
|
|
cadena = cadena.replace(/;/g, "m");
|
|
return cadena;
|
|
} else
|
|
return null;
|
|
}
|
|
|
|
app.post('/registro', async(req, res) => {
|
|
|
|
try{
|
|
|
|
let data= req.body;
|
|
|
|
let correo = depurado(data.correo);
|
|
let curp = depurado(data.curp);
|
|
|
|
let sqlString = `SELECT * FROM persona where correo = '${correo}'; `;
|
|
|
|
let sqlAnswer = await query(sqlString);
|
|
|
|
if (sqlAnswer.length != 0) {
|
|
|
|
console.log( "El correo ya fue registrado anteriormente");
|
|
res.status(200).json({ error: false, msj: "El correo ya registrado anteriormente" });
|
|
return;
|
|
}
|
|
|
|
sqlString = `SELECT * FROM persona where curp = '${curp}'; `;
|
|
|
|
sqlAnswer = await query(sqlString);
|
|
|
|
if (sqlAnswer.length != 0) {
|
|
|
|
console.log( "El CURP ya fue registrado anteriormente");
|
|
res.status(200).json({ error: false, msj: "El CURP ya registrado anteriormente" });
|
|
return;
|
|
}
|
|
|
|
let codigoGrupal = depurado(data.codigoGrupal);
|
|
let nombre = depurado(data.nombre)
|
|
let apellidoPaterno = depurado(data.apellidoPaterno);
|
|
let apellidoMaterno = depurado(data.apellidoMaterno);
|
|
|
|
let telefono = depurado(data.telefono);
|
|
let institucion = depurado(data.institucion);
|
|
let asignaturaImpartida = depurado(data.asignaturaImpartida);
|
|
|
|
|
|
sqlString = `SELECT * FROM codigo where codigoString = '${codigoGrupal}'; `;
|
|
sqlAnswer = await query(sqlString);
|
|
|
|
if ( sqlAnswer.length === 0 && data.tipoParticipacion ==='Grupal' ) {
|
|
console.log( "El codigo grupal introducido no es valido");
|
|
res.status(200).json({ error: false, msj: "El codigo grupal introducido no es valido" });
|
|
return;
|
|
}
|
|
|
|
else if ( data.tipoParticipacion ==='Grupal' && `${sqlAnswer[0].usado}` === `true` && data.tipoParticipacion ==='Grupal' ) {
|
|
console.log( "El codigo grupal introducido ya fue utilizado anteriormente");
|
|
res.status(200).json({ error: false, msj: "El codigo grupal introducido ya fue utilizado anteriormente" });
|
|
return;
|
|
}
|
|
|
|
let password = await bcrypt.hash(data.password, 10);
|
|
|
|
// `idPersona` `nombre` `apellidoPaterno` `apellidoMaterno` `curp` `edad` `genero` `telefono` `correo` `password` `comunidad` `institucion` `situacionAcademica` `nivel` `gradoAcademico` `asignatura` `participacion` `codigoGrupal` `totalPagar` `requiereFactura` `envioComprobante` `referenciaEnviada` `validarPago` `rechazado`
|
|
|
|
sqlString = `INSERT INTO persona VALUES (null, '${nombre}', '${apellidoPaterno}', '${apellidoMaterno}', '${curp}', ${data.edad}, '${data.genero}', '${telefono}', '${data.correo}', '${password}', '${data.comunidad}', '${institucion}', '${data.situacionAcademica}', '${data.nivel}', '${data.gradoAcademico}', '${asignaturaImpartida}', '${data.tipoParticipacion}', '${codigoGrupal}', '${data.pago}', false , false, false, false, false, null )`;
|
|
|
|
await query(sqlString);
|
|
|
|
sqlString = `SELECT LAST_INSERT_ID() as idPersona;`;
|
|
let idPersona = await query(sqlString);
|
|
|
|
console.log('este es el idPersona',idPersona);
|
|
|
|
idPersona = idPersona[0];
|
|
|
|
idPersona = idPersona.idPersona;
|
|
console.log(`Este es el ID persona : ${idPersona}`)
|
|
|
|
for(let i=0; i < data.eventos.length ; i++){
|
|
let idEvento = data.eventos[i];
|
|
|
|
sqlString = `INSERT INTO asistencia VALUES (null, ${idPersona}, ${idEvento} )`;
|
|
await query ( sqlString );
|
|
|
|
sqlString = `UPDATE evento SET cupo = cupo-1 WHERE idEvento=${idEvento};`;
|
|
await query( sqlString );
|
|
}
|
|
|
|
try{
|
|
await sendEmail( correo, data.pago );
|
|
}
|
|
catch(error){
|
|
res.status(200).json({error: false, msj: 'No se pudo enviar el correo de confirmación pero tu inscripcion esta registrada, nos comunicaremos contigo personalmente', registrado: false });
|
|
}
|
|
|
|
if ( data.tipoParticipacion ==='Grupal' ){
|
|
sqlString = `update codigo set usado = true where codigoString = '${codigoGrupal}'; `;
|
|
sqlAnswer = await query(sqlString);
|
|
|
|
if( parseInt(data.pago) === 0){
|
|
sqlString = `update persona persona set validarPago = true where idPersona = ${idPersona}; `;
|
|
sqlAnswer = await query(sqlString);
|
|
}
|
|
}
|
|
|
|
res.status(200).json({error: false, msj: 'Tu registro fue exitoso ¡Gracias!', registrado: true});
|
|
|
|
|
|
|
|
|
|
}
|
|
catch(error){
|
|
console.log(error);
|
|
res.status(400).json({error: true, msj: `Sucedio un error ${error}`});
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
module.exports = app |