diff --git a/server/controller/Equipo/equipos.js b/server/controller/Equipo/equipos.js index 7770b55..a00550c 100644 --- a/server/controller/Equipo/equipos.js +++ b/server/controller/Equipo/equipos.js @@ -15,6 +15,7 @@ const equipos = async () => where: { idCarrito: res[i].idCarrito }, include: [{ model: Status }], attributes: ['idEquipo', 'numeroSerie', 'numeroInventario', 'equipo'], + order: [['equipo', 'ASC']], }); return res; }); diff --git a/server/controller/Usuario/cargaMasiva.js b/server/controller/Usuario/cargaMasiva.js new file mode 100644 index 0000000..09bccef --- /dev/null +++ b/server/controller/Usuario/cargaMasiva.js @@ -0,0 +1,145 @@ +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; diff --git a/server/controller/Usuario/cargaMasivaPosgrados.js b/server/controller/Usuario/cargaMasivaPosgrados.js deleted file mode 100644 index baecafa..0000000 --- a/server/controller/Usuario/cargaMasivaPosgrados.js +++ /dev/null @@ -1,126 +0,0 @@ -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 alumnosNuevos = []; - const alumnosUpdate = []; - const errores = []; - const avisos = []; - - await csv() - .fromFile(path) - .then(async (alumnos) => { - for (let i = 0; i < alumnos.length; i++) { - if (alumnos[i].cuenta.length === 8) - alumnos[i].cuenta = '0' + alumnos[i].cuenta; - await Usuario.findOne({ - where: { usuario: alumnos[i].cuenta }, - include: [{ model: Carrera }], - }).then(async (res) => { - let usuario = res; - - if (!usuario) { - await Carrera.findOne({ - where: { carrera: alumnos[i].nomplan }, - }) - .then((res) => { - if (!res) { - avisos.push( - `Se añadio el posgrado ${alumnos[i].nomplan} al catalogo.` - ); - return Carrera.create({ carrera: alumnos[i].nomplan }); - } - return res; - }) - .then((res) => - Usuario.create({ - usuario: alumnos[i].cuenta, - nombre: `${alumnos[i].apellidop} ${alumnos[i].apellidom} ${alumnos[i].nombrew}`, - idCarrera: res.idCarrera, - idTipoUsuario: 5, - }) - ) - .then((res) => - Usuario.findOne({ - where: { idUsuario: res.idUsuario }, - include: [{ model: Carrera }, { model: TipoUsuario }], - }) - ) - .then((res) => { - alumnosNuevos.push({ - idUsuario: res.idUsuario, - usuario: res.usuario, - nombre: res.nombre, - Carrera: { - idCarrera: res.Carrera.idCarrera, - carrera: res.Carrera.carrera, - }, - TipoUsuario: { - idTipoUsuario: res.TipoUsuario.idTipoUsuario, - tipoUsuario: res.TipoUsuario.tipoUsuario, - }, - }); - }); - } else { - let update = {}; - - if (!usuario.activo) { - update.activo = true; - alumnosUpdate.push(`El alumno ${usuario.usuario} fue activado.`); - } - if (usuario.Carrera.carrera != alumnos[i].nomplan) { - await Carrera.findOne({ - where: { carrera: alumnos[i].nomplan }, - }) - .then((res) => { - if (!res) { - avisos.push( - `Se añadio el posgrado ${alumnos[i].nomplan} al catalogo.` - ); - return Carrera.create({ carrera: alumnos[i].nomplan }); - } - return res; - }) - .then((res) => { - update.idCarrera = res.idCarrera; - alumnosUpdate.push( - `Se cambio la carrera del alumno ${usuario.usuario} de ${usuario.Carrera.carrera} por ${res.carrera}.` - ); - }); - } - if (usuario.idTipoUsuario === 3) - avisos.push( - `El alumno con id ${usuario.idUsuario} y numero de cuenta ${usuario.usuario} tambien es profesor.` - ); - if (usuario.idTipoUsuario === 4) { - update.idTipoUsuario = 5; - alumnosUpdate.push( - `Se cambio el tipo de usuario alumno con id ${usuario.idUsuario} y numero de cuenta ${usuario.usuario}.` - ); - } - if (!validarObjetoVacio(update)) - await Usuario.update(update, { - where: { idUsuario: usuario.idUsuario }, - }); - } - }); - } - await eliminarArchivo(path); - }); - return { - message: 'Se subió correctamente el archivo csv.', - alumnosNuevos, - alumnosUpdate, - errores, - avisos, - }; -}; - -module.exports = cargaMasiva; diff --git a/server/routes/Usuario.js b/server/routes/Usuario.js index d364b7c..a75e886 100644 --- a/server/routes/Usuario.js +++ b/server/routes/Usuario.js @@ -5,7 +5,7 @@ const upload = multer({ dest: 'server/uploads' }); const { verificaToken } = require('../middleware/autentificacion'); const route = '/usuario'; const controllerPath = '../controller/Usuario'; -const cargaMasivaPosgrados = require(`${controllerPath}/cargaMasivaPosgrados`); +const cargaMasiva = require(`${controllerPath}/cargaMasiva`); const crear = require(`${controllerPath}/crear`); const escolares = require(`${controllerPath}/escolares`); const login = require(`${controllerPath}/login`); @@ -19,7 +19,7 @@ app.post( upload.single('csv'), (req, res) => { if (req.file) { - return cargaMasivaPosgrados(req.file.filename) + return cargaMasiva(req.file.filename) .then((data) => { res.status(201).json(data); })