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

138 lines
4.9 KiB
JavaScript
Raw Normal View History

2020-12-27 21:05:36 -06:00
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) => {
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-01-15 13:35:25 -06:00
validar.validarCorreo(programas[i].correo);
} 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();
const usuario = await Usuario.findOne({
where: { usuario: programas[i].correo },
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-15 13:35:25 -06:00
await gmail(correo.subject, programas[i].correo, correo.msj);
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,
}).then((res) => {
2021-01-15 13:35:25 -06:00
mensaje += `Se creo el responsable con id ${res.idUsuario} y correo ${res.usuario}\n`;
return res;
2020-12-27 21:05:36 -06:00
});
}
2021-01-15 13:35:25 -06:00
return res;
});
2020-12-27 21:05:36 -06:00
2021-01-15 13:35:25 -06:00
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-15 13:35:25 -06:00
idUsuario: usuario.idUsuario,
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)
mensaje += `Se asigno el programa ${res.clavePrograma} con id ${res.idPrograma} al usuario con correo ${usuario.idUsuario} y correo ${usuario.usuario}\n`;
});
} else {
await Programa.findOne({
where: {
clavePrograma: programas[i].clave,
idUsuario: usuario.idUsuario,
},
})
.then((res) => {
if (!res) {
return Programa.create({
institucion: programas[i].institucion,
dependencia: programas[i].dependencia,
programa: programas[i].programa,
clavePrograma: programas[i].clave,
activo,
acatlan,
idUsuario: usuario.idUsuario,
});
}
mensaje += `El programa ${res.clavePrograma} ya pertenece al responsable con id ${usuario.idUsuario} y correo ${usuario.usuario}\n`;
return false;
})
.then((res) => {
if (res)
mensaje += `Se asigno el programa ${res.clavePrograma} con id ${res.idPrograma} al usuario con correo ${usuario.idUsuario} y correo ${usuario.usuario}\n`;
});
}
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);
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;