Files
servicio_social_api/server/controller/Programa/cargaMasiva.js
T

153 lines
5.4 KiB
JavaScript
Raw Normal View History

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;