From 971fbfe898b4f053c643dfa0e96e999edab456e3 Mon Sep 17 00:00:00 2001 From: Lemuel Marquez Date: Fri, 15 Jan 2021 13:35:25 -0600 Subject: [PATCH] carga masiva --- server/controller/Programa/cargaMasiva.js | 146 +++++++++++++--------- 1 file changed, 86 insertions(+), 60 deletions(-) diff --git a/server/controller/Programa/cargaMasiva.js b/server/controller/Programa/cargaMasiva.js index 647f0b7..751f4bd 100644 --- a/server/controller/Programa/cargaMasiva.js +++ b/server/controller/Programa/cargaMasiva.js @@ -9,7 +9,8 @@ const Programa = require('../../db/tablas/Programa'); const Usuario = require('../../db/tablas/Usuario'); const cargaMasiva = async (file) => { - let path = `server/uploads/${file}`; + const path = `server/uploads/${file}`; + const today = moment(); csv() .fromFile(path) @@ -17,88 +18,113 @@ const cargaMasiva = async (file) => { let mensaje = ''; for (let i = 0; i < programas.length; i++) { - let usuario = ''; - let clavePrograma = programas[i].clave; - let acatlan = false; - let busquedaPrograma = { - where: { clavePrograma: programas[i].clave }, - include: [{ model: Usuario }], - }; - mensaje += `Linea ${i + 2}\n`; - try { - usuario = validar.validarCorreo(programas[i].correo); - } catch (error) { - mensaje += 'Correo no valido, se salto esta linea.\n\n'; + if ( + !programas[i].correo || + !programas[i].nombre || + !programas[i].institucion || + !programas[i].dependencia || + !programas[i].programa || + !programas[i].clave + ) { + mensaje += + 'Esta liena fue saltada por falta de datos en alguno de sus campos.\n\n'; continue; } - - await Usuario.findOne({ - where: { usuario }, + try { + validar.validarCorreo(programas[i].correo); + } catch (err) { + console.log(err); + mensaje += 'Esta linea contiene un correo no valido.\n\n'; + continue; + } + const acatlan = programas[i].clave.substr(4, 7) === '-12/20-'; + const activo = Number(programas[i].clave.substr(0, 4)) === today.year(); + const usuario = await Usuario.findOne({ + where: { usuario: programas[i].correo }, }).then(async (res) => { - let dataUsuario = res; - - if (!dataUsuario) { - let password = encriptar.generarPassword(); - let correo = correos.enviarSec( + if (!res) { + const password = encriptar.generarPassword(); + const correo = correos.enviarSec( password, - usuario, + programas[i].correo, programas[i].nombre ); - await Usuario.create({ - usuario, + await gmail(correo.subject, programas[i].correo, correo.msj); + return Usuario.create({ + usuario: programas[i].correo, password: encriptar.encriptar(password), nombre: programas[i].nombre, activo: true, idTipoUsuario: 2, }).then((res) => { - dataUsuario = res.dataValues; - mensaje += `Se creo un responsable de programa con correo: ${dataUsuario.usuario} e id: ${dataUsuario.idUsuario}\n`; + mensaje += `Se creo el responsable con id ${res.idUsuario} y correo ${res.usuario}\n`; + return res; }); - await gmail(correo.subject, usuario, correo.msj); } - if (clavePrograma.substr(4, 7) === '-12/20-') acatlan = true; - if (acatlan) busquedaPrograma.where.idUsuario = dataUsuario.idUsuario; - await Programa.findOne(busquedaPrograma).then(async (res) => { - let dataPrograma = res; + return res; + }); - if (!dataPrograma) { - let activo = true; - - if (clavePrograma.substr(0, 4) < moment().year()) activo = false; - if (clavePrograma.substr(0, 4) > moment().year()) - mensaje += `El año de esta clave de programa no es valido\n\n`; - else { - await Programa.create({ + if (!acatlan) { + await Programa.findOne({ + where: { clavePrograma: programas[i].clave }, + include: [{ model: Usuario }], + }) + .then((res) => { + if (!res) { + return Programa.create({ institucion: programas[i].institucion, dependencia: programas[i].dependencia, programa: programas[i].programa, - clavePrograma, - acatlan, + clavePrograma: programas[i].clave, activo, - idUsuario: dataUsuario.idUsuario, - }).then((res) => { - dataPrograma = res.dataValues; - mensaje += `Se agrego el programa: ${ - dataPrograma.programa - } con clave: ${dataPrograma.clavePrograma} al responsable ${ - dataUsuario.usuario - } ${ - dataPrograma.activo ? 'se encuentra' : 'no se encuentra' - } activo y ${ - dataPrograma.acatlan ? 'pertenece' : 'no pertenece' - } a Acatlán\n\n`; + idUsuario: usuario.idUsuario, }); } - } else - mensaje += `Ya existe el programa con clave de programa: ${dataPrograma.clavePrograma} que pertenece al responsable con correo: ${dataPrograma.Usuario.usuario}\n\n`; - }); - }); + mensaje += `El programa ${res.clavePrograma} ya ${ + programas[i].correo === res.Usuario.usuario + ? 'le pertenece a este responsable' + : 'fue asignado a otro responsable' + } con id ${res.Usuario.idUsuario} y correo ${ + res.Usuario.usuario + }.\n`; + return false; + }) + .then((res) => { + if (res) + mensaje += `Se asigno el programa ${res.clavePrograma} con id ${res.idPrograma} al usuario con correo ${usuario.idUsuario} y correo ${usuario.usuario}\n`; + }); + } else { + await Programa.findOne({ + where: { + clavePrograma: programas[i].clave, + idUsuario: usuario.idUsuario, + }, + }) + .then((res) => { + if (!res) { + return Programa.create({ + institucion: programas[i].institucion, + dependencia: programas[i].dependencia, + programa: programas[i].programa, + clavePrograma: programas[i].clave, + activo, + acatlan, + idUsuario: usuario.idUsuario, + }); + } + mensaje += `El programa ${res.clavePrograma} ya pertenece al responsable con id ${usuario.idUsuario} y correo ${usuario.usuario}\n`; + return false; + }) + .then((res) => { + if (res) + mensaje += `Se asigno el programa ${res.clavePrograma} con id ${res.idPrograma} al usuario con correo ${usuario.idUsuario} y correo ${usuario.usuario}\n`; + }); + } + mensaje += '\n'; } - await gmail('Informe de carga masiva', 'lemuel@acatlan.unam.mx', mensaje); - await gmail('Informe de carga masiva', 'dscad@acatlan.unam.mx', mensaje); - // await gmail('Informe de carga masiva', 'tramites.ss@acatlan.unam.mx', mensaje); + await gmail('Reporte carga masiva', 'lemuel@acatlan.unam.mx', mensaje); fs.unlinkSync(path); }); return {