122 lines
3.9 KiB
JavaScript
122 lines
3.9 KiB
JavaScript
const csv = require('csvtojson');
|
|
const { Op } = require('sequelize');
|
|
const { eliminarArchivo } = require('../../helper/helper');
|
|
const dbPath = '../../db/tablas';
|
|
const Carrito = require(`${dbPath}/Carrito`);
|
|
const Equipo = require(`${dbPath}/Equipo`);
|
|
const Modulo = require(`${dbPath}/Modulo`);
|
|
const Programa = require(`${dbPath}/Programa`);
|
|
const TipoCarrito = require(`${dbPath}/TipoCarrito`);
|
|
|
|
const cargaMasiva = async (file) => {
|
|
const path = `server/uploads/${file}`;
|
|
const equiposNuevos = [];
|
|
const errores = [];
|
|
const avisos = [];
|
|
|
|
await csv()
|
|
.fromFile(path)
|
|
.then(async (equipos) => {
|
|
for (let i = 0; i < equipos.length; i++) {
|
|
const existeModulo = await Modulo.findOne({
|
|
where: { idModulo: equipos[i].modulo },
|
|
});
|
|
const existeTipoCarrito = await TipoCarrito.findOne({
|
|
where: { tipoCarrito: equipos[i].tipo },
|
|
});
|
|
const existePrograma = equipos[i].programa
|
|
? await Programa.findOne({ where: { programa: equipos[i].programa } })
|
|
: {};
|
|
let existeCarrito = await Carrito.findOne({
|
|
where: {
|
|
idCarrito: equipos[i].carrito,
|
|
idModulo: existeModulo.idModulo,
|
|
},
|
|
});
|
|
let existeEquipo = await Equipo.findOne({
|
|
where: {
|
|
[Op.or]: [
|
|
{ numeroSerie: equipos[i].numeroSerie },
|
|
{ numeroInventario: equipos[i].numeroInventario },
|
|
],
|
|
},
|
|
});
|
|
|
|
if (
|
|
existeEquipo ||
|
|
!existeModulo ||
|
|
!existeTipoCarrito ||
|
|
(equipos[i].programa && !existePrograma)
|
|
) {
|
|
let error = '';
|
|
|
|
if (existeEquipo)
|
|
error += `El equipo con numero de serie ${existeEquipo.numeroSerie} ya existe. `;
|
|
else if (!existeModulo)
|
|
error += `El modulo ${equipos[i].modulo} no existe. `;
|
|
else if (!existeTipoCarrito)
|
|
error += `El tipo de equipo ${equipos[i].tipo} no existe. `;
|
|
else error += `El programa ${equipos[i].programa} no existe. `;
|
|
error += `Se salto la linea ${i + 2}.\n`;
|
|
errores.push(error);
|
|
continue;
|
|
}
|
|
if (!existeCarrito) {
|
|
existeCarrito = await Carrito.create({
|
|
carrito: equipos[i].carritoSobrenombre,
|
|
idTipoCarrito: existeTipoCarrito.idTipoCarrito,
|
|
idModulo: existeModulo.idModulo,
|
|
});
|
|
avisos.push(
|
|
`Se creo el carrito ${existeCarrito.carrito} que pretenece al modulo ${existeModulo.idModulo}`
|
|
);
|
|
}
|
|
existeEquipo = await Equipo.findAll({
|
|
where: { idCarrito: existeCarrito.idCarrito },
|
|
})
|
|
.then((res) =>
|
|
Equipo.create({
|
|
numeroSerie: equipos[i].numeroSerie,
|
|
numeroInventario: equipos[i].numeroInventario,
|
|
equipo: `${existeTipoCarrito.letra}${
|
|
res.length < 9 ? '0' + (res.length + 1) : res.length + 1
|
|
}`,
|
|
idCarrito: existeCarrito.idCarrito,
|
|
idPrograma: existePrograma.idPrograma
|
|
? existePrograma.idPrograma
|
|
: null,
|
|
})
|
|
)
|
|
.then((res) =>
|
|
Equipo.findOne({
|
|
where: { idEquipo: res.idEquipo },
|
|
include: [
|
|
{ model: Programa },
|
|
{
|
|
model: Carrito,
|
|
include: [{ model: TipoCarrito }, { model: Modulo }],
|
|
attributes: ['idCarrito', 'carrito'],
|
|
},
|
|
],
|
|
attributes: [
|
|
'idEquipo',
|
|
'numeroSerie',
|
|
'numeroInventario',
|
|
'equipo',
|
|
],
|
|
})
|
|
);
|
|
equiposNuevos.push(existeEquipo);
|
|
}
|
|
await eliminarArchivo(path);
|
|
});
|
|
return {
|
|
message: 'Se subió correctamente el archivo csv.',
|
|
equiposNuevos,
|
|
errores,
|
|
avisos,
|
|
};
|
|
};
|
|
|
|
module.exports = cargaMasiva;
|