2020-12-27 21:05:36 -06:00
const fs = require ( 'fs' );
const csv = require ( 'csvtojson' );
2021-05-13 14:06:07 -05:00
const moment = require ( 'moment' );
2021-05-05 18:49:23 -05:00
const helperPath = '../../helper' ;
const correos = require ( ` ${ helperPath } /correos` );
const encriptar = require ( ` ${ helperPath } /encriptar` );
2021-05-13 14:06:07 -05:00
const gmail = require ( ` ${ helperPath } /gmail` );
const { validarCorreo } = require ( ` ${ helperPath } /validar` );
2021-05-05 18:49:23 -05:00
const dbPath = '../../db/tablas' ;
const Programa = require ( ` ${ dbPath } /Programa` );
const Usuario = require ( ` ${ dbPath } /Usuario` );
2020-12-27 21:05:36 -06:00
const cargaMasiva = async ( file ) => {
2021-01-15 13:35:25 -06:00
const path = `server/uploads/ ${ file } ` ;
const today = moment ();
2020-12-27 21:05:36 -06:00
csv ()
. fromFile ( path )
. then ( async ( programas ) => {
let mensaje = '' ;
for ( let i = 0 ; i < programas . length ; i ++ ) {
mensaje += `Linea ${ i + 2 } \n` ;
2021-01-15 13:35:25 -06:00
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 ;
}
2020-12-27 21:05:36 -06:00
try {
2021-05-13 14:06:07 -05:00
validarCorreo ( programas [ i ]. correo );
2021-01-15 13:35:25 -06:00
} catch ( err ) {
console . log ( err );
mensaje += 'Esta linea contiene un correo no valido.\n\n' ;
2020-12-27 21:05:36 -06:00
continue ;
}
2021-01-15 13:35:25 -06:00
const acatlan = programas [ i ]. clave . substr ( 4 , 7 ) === '-12/20-' ;
const activo = Number ( programas [ i ]. clave . substr ( 0 , 4 )) === today . year ();
2021-01-20 09:16:35 -06:00
const responsable = await Usuario . findOne ({
where : { usuario : programas [ i ]. correo , idTipoUsuario : 2 },
2020-12-27 21:05:36 -06:00
}). then ( async ( res ) => {
2021-01-15 13:35:25 -06:00
if ( ! res ) {
const password = encriptar . generarPassword ();
const correo = correos . enviarSec (
2020-12-27 21:05:36 -06:00
password ,
2021-01-15 13:35:25 -06:00
programas [ i ]. correo ,
2020-12-27 21:05:36 -06:00
programas [ i ]. nombre
);
2021-01-20 09:22:11 -06:00
await gmail ( correo . subject , programas [ i ]. correo , correo . msj );
2021-01-15 13:35:25 -06:00
return Usuario . create ({
usuario : programas [ i ]. correo ,
2020-12-27 21:05:36 -06:00
password : encriptar . encriptar ( password ),
nombre : programas [ i ]. nombre ,
activo : true ,
idTipoUsuario : 2 ,
2021-01-20 09:16:35 -06:00
})
. then (( res ) => {
mensaje += `Se creo el responsable con id ${ res . idUsuario } y correo ${ res . usuario } \n` ;
return res ;
})
. catch (( err ) => {
mensaje += err ;
});
2020-12-27 21:05:36 -06:00
}
2021-01-15 13:35:25 -06:00
return res ;
});
if ( ! acatlan ) {
await Programa . findOne ({
where : { clavePrograma : programas [ i ]. clave },
include : [{ model : Usuario }],
})
. then (( res ) => {
if ( ! res ) {
return Programa . create ({
2020-12-27 21:05:36 -06:00
institucion : programas [ i ]. institucion ,
dependencia : programas [ i ]. dependencia ,
programa : programas [ i ]. programa ,
2021-01-15 13:35:25 -06:00
clavePrograma : programas [ i ]. clave ,
2020-12-27 21:05:36 -06:00
activo ,
2021-01-20 09:16:35 -06:00
idUsuario : responsable . idUsuario ,
}). catch (( err ) => {
mensaje += err ;
2020-12-27 21:05:36 -06:00
});
}
2021-01-15 13:35:25 -06:00
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 )
2021-01-20 09:16:35 -06:00
mensaje += `Se asigno el programa ${ res . clavePrograma } con id ${ res . idPrograma } al usuario con correo ${ responsable . idUsuario } y correo ${ responsable . usuario } \n` ;
2021-01-15 13:35:25 -06:00
});
} else {
await Programa . findOne ({
where : {
clavePrograma : programas [ i ]. clave ,
2021-01-20 09:16:35 -06:00
idUsuario : responsable . idUsuario ,
2021-01-15 13:35:25 -06:00
},
})
. then (( res ) => {
if ( ! res ) {
return Programa . create ({
2021-01-20 09:16:35 -06:00
institucion : 'UNAM' ,
dependencia : 'FES ACATLAN' ,
2021-01-15 13:35:25 -06:00
programa : programas [ i ]. programa ,
clavePrograma : programas [ i ]. clave ,
activo ,
acatlan ,
2021-01-20 09:16:35 -06:00
idUsuario : responsable . idUsuario ,
}). catch (( err ) => {
mensaje += err ;
2021-01-15 13:35:25 -06:00
});
}
2021-01-20 09:16:35 -06:00
mensaje += `El programa ${ res . clavePrograma } ya pertenece al responsable con id ${ responsable . idUsuario } y correo ${ responsable . usuario } \n` ;
2021-01-15 13:35:25 -06:00
return false ;
})
. then (( res ) => {
if ( res )
2021-01-20 09:16:35 -06:00
mensaje += `Se asigno el programa ${ res . clavePrograma } con id ${ res . idPrograma } al usuario con correo ${ responsable . idUsuario } y correo ${ responsable . usuario } \n` ;
2021-01-15 13:35:25 -06:00
});
}
mensaje += '\n' ;
2020-12-27 21:05:36 -06:00
}
2021-01-15 13:35:25 -06:00
await gmail ( 'Reporte carga masiva' , 'lemuel@acatlan.unam.mx' , mensaje );
2021-01-15 13:40:55 -06:00
await gmail ( 'Reporte carga masiva' , 'dscad@acatlan.unam.mx' , mensaje );
2021-05-05 18:49:23 -05:00
await gmail (
'Reporte carga masiva' ,
'tramites.ss@acatlan.unam.mx' ,
mensaje
);
2021-01-20 18:51:15 -06:00
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 ;