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) => { const pagina = validar.validarId(body.pagina); const idUsuario = validar.validarId(body.idUsuario); const where = body.idStatus ? { idStatus: validar.validarId(body.idStatus) } : {}; const nombre = body.nombre ? validar.validarTexto(body.nombre, 'El nombre', 60) : ''; const numeroCuenta = body.numeroCuenta ? validar.validarNumeroCuenta(body.numeroCuenta) : ''; const data = []; 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}%` }, nombre: { [Op.like]: `%${nombre}%` }, }, }, { model: Carrera }, { model: Status, where: { idStatus: { [Op.not]: 10 } } }, ], order: [['updatedAt', 'DESC']], }); }) .then((res) => { for (let i = pagina * 25 - 25; i < res.length && i < pagina * 25; i++) data.push({ idServicio: res[i].idServicio, fechaInicio: res[i].fechaInicio, fechaFin: res[i].fechaFin, cartaTermino: res[i].cartaTermino, idCuestionarioPrograma: res[i].idCuestionarioPrograma, Usuario: { idUsuario: res[i].Usuario.idUsuario, usuario: res[i].Usuario.usuario, nombre: res[i].Usuario.nombre, TipoUsuario: res[i].Usuario.TipoUsuario, }, Carrera: res[i].Carrera, Status: res[i].Status, }); return { registros: res.length, faltantes: res.length - data.length - (pagina - 1) * 25, servicios: data, }; }); }; module.exports = serviciosResponsable;