Files
servicio_social_api/server/controller/Programa/cargaMasiva.js
T
2021-01-20 09:16:35 -06:00

146 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';
}
console.log(mensaje);
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;