2020-12-27 21:05:36 -06:00
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 ;
2021-01-12 21:09:37 -06:00
let busquedaPrograma = {
where : { clavePrograma : programas [ i ]. clave },
include : [{ model : Usuario }],
};
2020-12-27 21:05:36 -06:00
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` ;
});
2021-01-06 20:24:18 -06:00
await gmail ( correo . subject , usuario , correo . msj );
2020-12-27 21:05:36 -06:00
}
2021-01-12 21:09:37 -06:00
if ( clavePrograma . substr ( 4 , 7 ) === '-12/20-' ) acatlan = true ;
if ( acatlan ) busquedaPrograma . where . idUsuario = dataUsuario . idUsuario ;
2020-12-27 21:05:36 -06:00
await Programa . findOne ( busquedaPrograma ). then ( async ( res ) => {
let dataPrograma = res ;
if ( ! dataPrograma ) {
let activo = true ;
if ( clavePrograma . substr ( 0 , 4 ) < moment (). year ()) activo = false ;
2020-12-29 00:12:32 -06:00
if ( clavePrograma . substr ( 0 , 4 ) > moment (). year ())
2020-12-27 21:05:36 -06:00
mensaje += `El año de esta clave de programa no es valido\n\n` ;
2020-12-29 00:12:32 -06:00
else {
2020-12-27 21:05:36 -06:00
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` ;
});
}
2020-12-29 00:12:32 -06:00
} else
2020-12-27 21:05:36 -06:00
mensaje += `Ya existe el programa con clave de programa: ${ dataPrograma . clavePrograma } que pertenece al responsable con correo: ${ dataPrograma . Usuario . usuario } \n\n` ;
});
});
}
2021-01-06 21:57:28 -06:00
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);
2020-12-27 21:05:36 -06:00
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 ;