From 381080d8fa3d3d8479638dc40fc8c7d8c70149ae Mon Sep 17 00:00:00 2001 From: Lemuel Marquez Date: Tue, 17 Nov 2020 13:49:31 -0600 Subject: [PATCH] servicios de un responsable --- server/controller/Programa/get.js | 6 +- server/controller/Servicio/serviciosAdmin.js | 92 ++++++++++--------- .../Servicio/serviciosResponsable.js | 78 ++++++++++++++++ server/db/data-fake.js | 2 +- server/db/install.js | 14 ++- server/db/tablas/Usuario.js | 6 +- server/routes/Servicio.js | 13 +++ 7 files changed, 162 insertions(+), 49 deletions(-) diff --git a/server/controller/Programa/get.js b/server/controller/Programa/get.js index 1cd34ce..d0dabaa 100644 --- a/server/controller/Programa/get.js +++ b/server/controller/Programa/get.js @@ -6,10 +6,12 @@ const get = async (body) => { let idUsuario = validar.validarId(body.idUsuario); return Usuario.findOne({ - where: { idUsuario, idTipoUsuario: 2 }, + where: { idUsuario }, }) .then((res) => { - if (!res) throw new Error('Id de responsable no valido'); + if (!res) throw new Error('No existe este usuario.'); + if (res.idTipoUsuario != 2) + throw new Error('No es un usuario de tipo responsable'); return Programa.findAll({ where: { idUsuario, activo: true }, }); diff --git a/server/controller/Servicio/serviciosAdmin.js b/server/controller/Servicio/serviciosAdmin.js index cb30812..890a94b 100644 --- a/server/controller/Servicio/serviciosAdmin.js +++ b/server/controller/Servicio/serviciosAdmin.js @@ -7,7 +7,8 @@ const Status = require('../../db/tablas/Status'); const TipoUsuario = require('../../db/tablas/TipoUsuario'); const serviciosAdmin = async (body) => { - let pagina = body.pagina; + let pagina = validar.validarId(body.pagina); + let idUsuario = validar.validarId(body.idUsuario); let idStatus = body.idStatus ? validar.validarId(body.idStatus) : null; let nombre = body.nombre ? validar.validarTexto(body.nombre, 'El nombre') @@ -18,49 +19,56 @@ const serviciosAdmin = async (body) => { let where = { nombre: { [Op.like]: `%${nombre}%` } }; if (idStatus) where.idStatus = idStatus; - return Servicio.findAll({ - where, - include: [ - { - model: Usuario, - include: { model: TipoUsuario }, - where: { usuario: { [Op.like]: `%${numeroCuenta}%` } }, - }, - { model: Carrera }, - { model: Status }, - ], - }).then((res) => { - let data = []; - - for (let i = pagina * 25 - 25; i < res.length && i < pagina * 25; i++) - data.push({ - idServicio: res[i].idServicio, - nombre: res[i].nombre, - fechaInicio: res[i].fechaInicio, - fechaFin: res[i].fechaFin, - Usuario: { - idUsuario: res[i].Usuario.idUsuario, - usuario: res[i].Usuario.usuario, - TipoUsuario: { - idTipoUsuario: res[i].Usuario.TipoUsuario.idTipoUsuario, - tipoUsuario: res[i].Usuario.TipoUsuario.tipoUsuario, + return Usuario.findOne({ where: { idUsuario } }) + .then((res) => { + if (!res) throw new Error('No existe este usuario.'); + if (res.idTipoUsuario != 1) + throw new Error('No es un usuario tipo admin.'); + return Servicio.findAll({ + where, + include: [ + { + model: Usuario, + include: { model: TipoUsuario }, + where: { usuario: { [Op.like]: `%${numeroCuenta}%` } }, }, - }, - Carrera: { - idCarrera: res[i].Carrera.idCarrera, - carrera: res[i].Carrera.carrera, - }, - Status: { - idStatus: res[i].Status.idStatus, - status: res[i].Status.status, - }, + { model: Carrera }, + { model: Status }, + ], }); - return { - registros: res.length, - faltantes: res.length - data.length - (pagina - 1) * 25, - servicios: data, - }; - }); + }) + .then((res) => { + let data = []; + + for (let i = pagina * 25 - 25; i < res.length && i < pagina * 25; i++) + data.push({ + idServicio: res[i].idServicio, + nombre: res[i].nombre, + fechaInicio: res[i].fechaInicio, + fechaFin: res[i].fechaFin, + Usuario: { + idUsuario: res[i].Usuario.idUsuario, + usuario: res[i].Usuario.usuario, + TipoUsuario: { + idTipoUsuario: res[i].Usuario.TipoUsuario.idTipoUsuario, + tipoUsuario: res[i].Usuario.TipoUsuario.tipoUsuario, + }, + }, + Carrera: { + idCarrera: res[i].Carrera.idCarrera, + carrera: res[i].Carrera.carrera, + }, + Status: { + idStatus: res[i].Status.idStatus, + status: res[i].Status.status, + }, + }); + return { + registros: res.length, + faltantes: res.length - data.length - (pagina - 1) * 25, + servicios: data, + }; + }); }; module.exports = serviciosAdmin; diff --git a/server/controller/Servicio/serviciosResponsable.js b/server/controller/Servicio/serviciosResponsable.js index e69de29..1d5a113 100644 --- a/server/controller/Servicio/serviciosResponsable.js +++ b/server/controller/Servicio/serviciosResponsable.js @@ -0,0 +1,78 @@ +const { Op } = require('sequelize'); +const validar = require('../../helper/validar'); +const Servicio = require('../../db/tablas/Servicio'); +const Usuario = require('../../db/tablas/Usuario'); +const Carrera = require('../../db/tablas/Carrera'); +const Status = require('../../db/tablas/Status'); +const TipoUsuario = require('../../db/tablas/TipoUsuario'); +const Programa = require('../../db/tablas/Programa'); + +const serviciosResponsable = async (body) => { + let pagina = validar.validarId(body.pagina); + let idUsuario = validar.validarId(body.idUsuario); + let idStatus = body.idStatus ? validar.validarId(body.idStatus) : null; + let nombre = body.nombre + ? validar.validarTexto(body.nombre, 'El nombre') + : ''; + let numeroCuenta = body.numeroCuenta + ? validar.validarNumeroCuenta(body.numeroCuenta) + : ''; + let where = { nombre: { [Op.like]: `%${nombre}%` } }; + + if (idStatus) where.idStatus = idStatus; + return Usuario.findOne({ where: { idUsuario } }) + .then((res) => { + if (!res) throw new Error('No existe este usuario.'); + if (res.idTipoUsuario != 2) + throw new Error('No es un usuario tipo responsable.'); + return Servicio.findAll({ + where, + include: [ + { model: Programa, where: { idUsuario } }, + { + model: Usuario, + include: { model: TipoUsuario }, + where: { usuario: { [Op.like]: `%${numeroCuenta}%` } }, + }, + { model: Carrera }, + { model: Status }, + ], + }); + }) + .then((res) => { + let data = []; + + for (let i = pagina * 25 - 25; i < res.length && i < pagina * 25; i++) + data.push({ + idServicio: res[i].idServicio, + nombre: res[i].nombre, + fechaInicio: res[i].fechaInicio, + fechaFin: res[i].fechaFin, + idCuestionarioAlumno: res[i].idCuestionarioAlumno, + idCuestionarioPrograma: res[i].idCuestionarioPrograma, + Usuario: { + idUsuario: res[i].Usuario.idUsuario, + usuario: res[i].Usuario.usuario, + TipoUsuario: { + idTipoUsuario: res[i].Usuario.TipoUsuario.idTipoUsuario, + tipoUsuario: res[i].Usuario.TipoUsuario.tipoUsuario, + }, + }, + Carrera: { + idCarrera: res[i].Carrera.idCarrera, + carrera: res[i].Carrera.carrera, + }, + Status: { + idStatus: res[i].Status.idStatus, + status: res[i].Status.status, + }, + }); + return { + registros: res.length, + faltantes: res.length - data.length - (pagina - 1) * 25, + servicios: data, + }; + }); +}; + +module.exports = serviciosResponsable; diff --git a/server/db/data-fake.js b/server/db/data-fake.js index a669aed..ca8dc0e 100644 --- a/server/db/data-fake.js +++ b/server/db/data-fake.js @@ -28,7 +28,7 @@ const dataPrograma = async () => { dependencia: `Dependencia Falsa ${j - i + 1}`, programa: `Programa Falso ${j}`, clavePrograma: `2020/${i + j + 1}-${i + j + 1}`, - idUsuario: i + 1, + idUsuario: i + 2, }); console.log( `Se inserto el programa ${j} del responsable ${i + 1}`.magenta diff --git a/server/db/install.js b/server/db/install.js index 2a52d3d..e4d7bfb 100644 --- a/server/db/install.js +++ b/server/db/install.js @@ -1,4 +1,5 @@ const colors = require('colors'); +const encriptar = require('../helper/encriptar'); const Carrera = require('./tablas/Carrera'); const CuestionarioAlumno = require('./tablas/CuestionarioAlumno'); const CuestionarioPrograma = require('./tablas/CuestionarioPrograma'); @@ -101,12 +102,23 @@ const dataStatus = async () => { } }; +const dataAdmin = async () => { + console.log('\nPaso 5) Instalando admin.'.bold.blue); + await Usuario.create({ + usuario: 'admin', + password: encriptar.encriptar('hola'), + idTipoUsuario: 1, + activo: true, + nombre: 'COESI', + }); +}; + const exe = async () => { await drop(); await sync(); await dataTipoUsuario(); await dataStatus(); - + await dataAdmin(); console.log( '\nSe ha instalado exitosamente la base de datos.\n'.underline.bold.green ); diff --git a/server/db/tablas/Usuario.js b/server/db/tablas/Usuario.js index ac3010b..3b8dd75 100644 --- a/server/db/tablas/Usuario.js +++ b/server/db/tablas/Usuario.js @@ -13,16 +13,16 @@ Usuario.init( autoIncrement: true, }, usuario: { - type: DataTypes.STRING(60), + type: DataTypes.STRING(80), allowNull: false, }, password: { - type: DataTypes.STRING(20), + type: DataTypes.STRING(100), allowNull: true, defaultValue: null, }, nombre: { - type: DataTypes.STRING(20), + type: DataTypes.STRING(40), allowNull: true, defaultValue: null, }, diff --git a/server/routes/Servicio.js b/server/routes/Servicio.js index 6311948..4d108d4 100644 --- a/server/routes/Servicio.js +++ b/server/routes/Servicio.js @@ -3,6 +3,8 @@ const app = express(); const route = '/servicio'; const nuevo = require('../controller/Servicio/nuevo'); const serviciosAdmin = require('../controller/Servicio/serviciosAdmin'); +const serviciosResponsable = require('../controller/Servicio/serviciosResponsable'); + app.post(`${route}/nuevo`, (req, res) => { return nuevo(req.body) @@ -24,4 +26,15 @@ app.get(`${route}/servicios_admin`, (req, res) => { }); }); +app.get(`${route}/servicios_responsable`, (req, res) => { + return serviciosResponsable(req.query) + .then((data) => { + res.status(200).json(data); + }) + .catch((err) => { + res.status(400).json({ message: err.message }); + }); +}); + + module.exports = app;