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 = {}; 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}%` }, nombre: { [Op.like]: `%${nombre}%` }, }, }, { 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, 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, nombre: res[i].Usuario.nombre, 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;