const fs = require('fs'); const moment = require('moment'); const csv = require('csvtojson'); const gmail = require('../../helper/gmail'); const correos = require('../../helper/correos'); const encriptar = require('../../helper/encriptar'); const validar = require('../../helper/validar'); const Programa = require('../../db/tablas/Programa'); const Usuario = require('../../db/tablas/Usuario'); const cargaMasiva = async (file) => { let path = `server/uploads/${file}`; csv() .fromFile(path) .then(async (programas) => { let mensaje = ''; for (let i = 0; i < programas.length; i++) { let usuario = ''; let clavePrograma = programas[i].clave; let acatlan = false; let busquedaPrograma = {}; mensaje += `Linea ${i + 2}\n`; try { usuario = validar.validarCorreo(programas[i].correo); } catch (error) { mensaje += 'Correo no valido, se salto esta linea.\n\n'; continue; } await Usuario.findOne({ where: { usuario }, }).then(async (res) => { let dataUsuario = res; if (!dataUsuario) { let password = encriptar.generarPassword(); let correo = correos.enviarSec( password, usuario, programas[i].nombre ); await Usuario.create({ usuario, 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`; }); await gmail(correo.subject, usuario, correo.msj); } if (clavePrograma.substr(4) === '-12/20-91') acatlan = true; if (acatlan) { busquedaPrograma = { where: { clavePrograma: programas[i].clave, idUsuario: dataUsuario.idUsuario, }, include: [{ model: Usuario }], }; } else { busquedaPrograma = { where: { clavePrograma: programas[i].clave }, include: [{ model: Usuario }], }; } await Programa.findOne(busquedaPrograma).then(async (res) => { let dataPrograma = 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({ institucion: programas[i].institucion, dependencia: programas[i].dependencia, programa: programas[i].programa, clavePrograma, acatlan, 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`; }); } } else mensaje += `Ya existe el programa con clave de programa: ${dataPrograma.clavePrograma} que pertenece al responsable con correo: ${dataPrograma.Usuario.usuario}\n\n`; }); }); } gmail('Informe de carga masiva', 'lemuel@acatlan.unam.mx', mensaje); gmail('Informe de carga masiva', 'dscad@acatlan.unam.mx', mensaje); // gmail('Informe de carga masiva', 'tramites.ss@acatlan.unam.mx', mensaje); fs.unlinkSync(path); }); return { message: 'Se subio correctamente el archivo csv, se enviará un correo a tramites.ss@acatlan.unam.mx con los detalles de la carga masiva.', }; }; module.exports = cargaMasiva;