146 lines
5.0 KiB
JavaScript
146 lines
5.0 KiB
JavaScript
const csv = require('csvtojson');
|
|
const helperPath = '../../helper';
|
|
const { validarObjetoVacio } = require(`${helperPath}/validar`);
|
|
const { eliminarArchivo } = require(`${helperPath}/helper`);
|
|
const dbPath = '../../db/tablas';
|
|
const Carrera = require(`${dbPath}/Carrera`);
|
|
const TipoUsuario = require(`${dbPath}/TipoUsuario`);
|
|
const Usuario = require(`${dbPath}/Usuario`);
|
|
|
|
const cargaMasiva = async (file) => {
|
|
const path = `server/uploads/${file}`;
|
|
const usuariosNuevos = [];
|
|
const usuariosUpdate = [];
|
|
const errores = [];
|
|
const avisos = [];
|
|
|
|
return csv()
|
|
.fromFile(path)
|
|
.then(async (usuarios) => {
|
|
for (let i = 0; i < usuarios.length; i++) {
|
|
const mensajeErrBase = `Se salto la linea ${i + 2} por:`;
|
|
|
|
if (
|
|
!usuarios[i].cuenta ||
|
|
!usuarios[i].apellidop ||
|
|
!usuarios[i].apellidom ||
|
|
!usuarios[i].nombrew ||
|
|
!usuarios[i].tipoUsuario
|
|
) {
|
|
if (!usuarios[i].cuenta)
|
|
errores.push(`${mensajeErrBase} falta variable cuenta.`);
|
|
if (!usuarios[i].apellidop)
|
|
errores.push(`${mensajeErrBase} falta variable apellidop.`);
|
|
if (!usuarios[i].apellidom)
|
|
errores.push(`${mensajeErrBase} falta variable apellidom.`);
|
|
if (!usuarios[i].nombrew)
|
|
errores.push(`${mensajeErrBase} falta variable nombrew.`);
|
|
if (!usuarios[i].tipoUsuario)
|
|
errores.push(`${mensajeErrBase} falta variable tipoUsuario.`);
|
|
continue;
|
|
}
|
|
|
|
const idTipoUsuario = await TipoUsuario.findOne({
|
|
where: { tipoUsuario: usuarios[i].tipoUsuario },
|
|
}).then((res) => {
|
|
if (!res) {
|
|
errores.push(`${mensajeErrBase} tipo de usuario no valido.`);
|
|
return null;
|
|
}
|
|
return res.idTipoUsuario;
|
|
});
|
|
let idCarrera = null;
|
|
|
|
if (!idTipoUsuario) continue;
|
|
if (idTipoUsuario != 3) {
|
|
if (!usuarios[i].nomplan) {
|
|
errores.push(`${mensajeErrBase} falta variable nomplan.`);
|
|
continue;
|
|
}
|
|
idCarrera = await Carrera.findOne({
|
|
where: { carrera: usuarios[i].nomplan },
|
|
})
|
|
.then((res) => {
|
|
if (!res) {
|
|
avisos.push(
|
|
`Se añadio el posgrado/la carrera ${usuarios[i].nomplan} al catálogo.`
|
|
);
|
|
return Carrera.create({ carrera: usuarios[i].nomplan });
|
|
}
|
|
return res;
|
|
})
|
|
.then((res) => res.idCarrera);
|
|
}
|
|
if (usuarios[i].cuenta.length === 8)
|
|
usuarios[i].cuenta = `0${usuarios[i].cuenta}`;
|
|
await Usuario.findOne({
|
|
where: { usuario: usuarios[i].cuenta },
|
|
include: [{ model: Carrera }],
|
|
}).then(async (res) => {
|
|
let usuario = res;
|
|
|
|
if (!usuario) {
|
|
const data = {
|
|
usuario: usuarios[i].cuenta,
|
|
nombre: `${usuarios[i].apellidop} ${usuarios[i].apellidom} ${usuarios[i].nombrew}`,
|
|
idTipoUsuario,
|
|
};
|
|
|
|
if (data.idTipoUsuario != 3) data.idCarrera = idCarrera;
|
|
await Usuario.create(data)
|
|
.then((res) =>
|
|
Usuario.findOne({
|
|
where: { idUsuario: res.idUsuario },
|
|
include: [{ model: Carrera }, { model: TipoUsuario }],
|
|
attributes: ['idUsuario', 'usuario', 'nombre'],
|
|
})
|
|
)
|
|
.then((res) => usuariosNuevos.push(res));
|
|
} else {
|
|
let update = {};
|
|
|
|
if (!usuario.activo) {
|
|
update.activo = true;
|
|
usuariosUpdate.push(
|
|
`La cuenta del usuario: ${usuario.usuario} fue activada.`
|
|
);
|
|
}
|
|
if (
|
|
usuario.Carrera &&
|
|
usuario.Carrera.carrera != usuarios[i].nomplan
|
|
) {
|
|
update.idCarrera = idCarrera;
|
|
usuariosUpdate.push(
|
|
`Se cambio la carrera del usuario: ${usuario.usuario} de ${usuario.Carrera.carrera} por ${usuarios[i].nomplan}.`
|
|
);
|
|
}
|
|
if (usuario.idTipoUsuario != idTipoUsuario) {
|
|
update.idTipoUsuario = idTipoUsuario;
|
|
usuariosUpdate.push(
|
|
`Se cambio el tipo de usuario del usuario: ${usuario.usuario} de ${usuario.TipoUsuario.tipoUsuario} por ${usuarios[i].tipoUsuario}.`
|
|
);
|
|
}
|
|
if (!validarObjetoVacio(update))
|
|
await Usuario.update(update, {
|
|
where: { idUsuario: usuario.idUsuario },
|
|
});
|
|
else
|
|
errores.push(
|
|
`${mensajeErrBase} no se mando nada para actualizar.`
|
|
);
|
|
}
|
|
});
|
|
}
|
|
return eliminarArchivo(path);
|
|
})
|
|
.then(() => ({
|
|
message: 'Se subió correctamente el archivo csv.',
|
|
usuariosNuevos,
|
|
usuariosUpdate,
|
|
errores,
|
|
avisos,
|
|
}));
|
|
};
|
|
|
|
module.exports = cargaMasiva;
|