Files
servicio_social_api/server/controller/Programa/cargaMasiva.js
T
2021-11-29 00:46:38 -06:00

152 lines
5.5 KiB
JavaScript

const fs = require('fs');
const csv = require('csvtojson');
const moment = require('moment');
const helperPath = '../../helper';
const correos = require(`${helperPath}/correos`);
const encriptar = require(`${helperPath}/encriptar`);
const gmail = require(`${helperPath}/gmail`);
const { validarCorreo } = require(`${helperPath}/validar`);
const dbPath = '../../db/tablas';
const Programa = require(`${dbPath}/Programa`);
const Usuario = require(`${dbPath}/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 {
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((res) => {
if (!res) {
const password = encriptar.generarPassword();
const correo = correos.enviarSec(
password,
programas[i].correo,
programas[i].nombre
);
return Usuario.create({
usuario: programas[i].correo,
password: encriptar.encriptar(password),
nombre: programas[i].nombre,
activo: true,
idTipoUsuario: 2,
})
.then(async (res) => {
await gmail(correo.subject, programas[i].correo, correo.msj);
mensaje += `Se creo al responsable con id ${res.idUsuario} y correo ${res.usuario}\n`;
return res;
})
.catch((err) => {
mensaje = mensaje + err.message + 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 = mensaje + err.message + err;
});
}
mensaje += `El programa ${res.clavePrograma} ya ${
programas[i].correo === res.Usuario.usuario
? 'le pertenece a este responsable'
: 'fue asignado al 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 id ${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 = mensaje + err.message + 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 id ${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);
// await gmail(
// 'Reporte 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;