145 lines
5.2 KiB
JavaScript
145 lines
5.2 KiB
JavaScript
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) => {
|
|
const path = `server/uploads/${file}`;
|
|
const today = moment();
|
|
|
|
csv()
|
|
.fromFile(path)
|
|
.then(async (programas) => {
|
|
let mensaje = '';
|
|
|
|
for (let i = 0; i < programas.length; i++) {
|
|
mensaje += `Linea ${i + 2}\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;
|
|
}
|
|
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 responsable = await Usuario.findOne({
|
|
where: { usuario: programas[i].correo, idTipoUsuario: 2 },
|
|
}).then(async (res) => {
|
|
if (!res) {
|
|
const password = encriptar.generarPassword();
|
|
const correo = correos.enviarSec(
|
|
password,
|
|
programas[i].correo,
|
|
programas[i].nombre
|
|
);
|
|
|
|
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) => {
|
|
mensaje += `Se creo el responsable con id ${res.idUsuario} y correo ${res.usuario}\n`;
|
|
return res;
|
|
})
|
|
.catch((err) => {
|
|
mensaje += err;
|
|
});
|
|
}
|
|
return res;
|
|
});
|
|
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: programas[i].clave,
|
|
activo,
|
|
idUsuario: responsable.idUsuario,
|
|
}).catch((err) => {
|
|
mensaje += err;
|
|
});
|
|
}
|
|
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 ${responsable.idUsuario} y correo ${responsable.usuario}\n`;
|
|
});
|
|
} else {
|
|
await Programa.findOne({
|
|
where: {
|
|
clavePrograma: programas[i].clave,
|
|
idUsuario: responsable.idUsuario,
|
|
},
|
|
})
|
|
.then((res) => {
|
|
if (!res) {
|
|
return Programa.create({
|
|
institucion: 'UNAM',
|
|
dependencia: 'FES ACATLAN',
|
|
programa: programas[i].programa,
|
|
clavePrograma: programas[i].clave,
|
|
activo,
|
|
acatlan,
|
|
idUsuario: responsable.idUsuario,
|
|
}).catch((err) => {
|
|
mensaje += err;
|
|
});
|
|
}
|
|
mensaje += `El programa ${res.clavePrograma} ya pertenece al responsable con id ${responsable.idUsuario} y correo ${responsable.usuario}\n`;
|
|
return false;
|
|
})
|
|
.then((res) => {
|
|
if (res)
|
|
mensaje += `Se asigno el programa ${res.clavePrograma} con id ${res.idPrograma} al usuario con correo ${responsable.idUsuario} y correo ${responsable.usuario}\n`;
|
|
});
|
|
}
|
|
mensaje += '\n';
|
|
}
|
|
await gmail('Reporte carga masiva', 'lemuel@acatlan.unam.mx', mensaje);
|
|
await gmail('Reporte carga masiva', 'dscad@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;
|