Files
pcpuma_acatlan_api/server/controller/Equipo/cargaMasiva.js
T
2022-01-24 15:58:34 -06:00

122 lines
4.0 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: {
sobrenombre: equipos[i].carritoSobrenombre,
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({
sobrenombre: equipos[i].carritoSobrenombre,
idTipoCarrito: existeTipoCarrito.idTipoCarrito,
idModulo: existeModulo.idModulo,
});
avisos.push(
`Se creo el carrito ${existeCarrito.sobrenombre} 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,
sobrenombre: `${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', 'sobrenombre'],
},
],
attributes: [
'idEquipo',
'numeroSerie',
'numeroInventario',
'sobrenombre',
],
})
);
equiposNuevos.push(existeEquipo);
}
await eliminarArchivo(path);
});
return {
message: 'Se subio correctamente el archivo csv.',
equiposNuevos,
errores,
avisos,
};
};
module.exports = cargaMasiva;