From b2d773bd14a30791b97bee43b2a8031c91795c94 Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Fri, 24 Jun 2022 19:15:49 -0500 Subject: [PATCH] =?UTF-8?q?equipos=20con=20una=20opci=C3=B3n=20mas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/carrito/carrito.service.ts | 56 +++++++++++++++-------------- src/equipo/dto/input/equipos.dto.ts | 4 +++ src/equipo/equipo.controller.ts | 5 +++ src/equipo/equipo.service.ts | 12 +++++-- src/modulo/modulo.service.ts | 14 +++++++- 5 files changed, 62 insertions(+), 29 deletions(-) diff --git a/src/carrito/carrito.service.ts b/src/carrito/carrito.service.ts index 1500bd6..f98d5f1 100644 --- a/src/carrito/carrito.service.ts +++ b/src/carrito/carrito.service.ts @@ -91,12 +91,17 @@ export class CarritoService { id_modulo?: string; id_tipo_carrito?: string; }) { - const busqueda: { - modulo?: Modulo | { institucion: Institucion }; - activo?: boolean; - carrito?: FindOperator; - tipoCarrito?: TipoCarrito; - } = {}; + const query = this.repository + .createQueryBuilder('c') + .innerJoinAndSelect('c.modulo', 'm') + .innerJoinAndSelect('c.tipoCarrito', 'tc') + .innerJoinAndSelect('m.institucion', 'i') + .orderBy('i.institucion') + .addOrderBy('m.modulo') + .addOrderBy('tc.tipo_carrito') + .addOrderBy('c.carrito') + .skip((parseInt(filtros.pagina) - 1) * 25) + .take(25); const institucion = filtros.id_institucion ? await this.institucionService.findById(parseInt(filtros.id_institucion)) : null; @@ -109,26 +114,25 @@ export class CarritoService { ) : null; - if (filtros.activo === 'true') busqueda.activo = true; - if (filtros.activo === 'false') busqueda.activo = false; - if (filtros.carrito) busqueda.carrito = Like(`%${filtros.carrito}%`); - if (tipoCarrito) busqueda.tipoCarrito = tipoCarrito; - if (institucion) busqueda.modulo = { institucion }; - if (modulo) busqueda.modulo = modulo; - return this.repository.findAndCount({ - join: { - alias: 'c', - innerJoinAndSelect: { m: 'c.modulo', i: 'm.institucion' }, - }, - where: busqueda, - order: { - modulo: 'ASC', - tipoCarrito: 'ASC', - carrito: 'ASC', - }, - skip: (parseInt(filtros.pagina) - 1) * 25, - take: 25, - }); + if (filtros.activo === 'true') query.andWhere('c.activo = 1'); + if (filtros.activo === 'false') query.andWhere('c.activo = 0'); + if (filtros.carrito) + query.andWhere('c.carrito LIKE :carrito', { + carrito: `%${filtros.carrito}%`, + }); + if (tipoCarrito) + query.andWhere('tc.id_tipo_carrito = :id_tipo_carrito', { + id_tipo_carrito: tipoCarrito.id_tipo_carrito, + }); + if (institucion) + query.andWhere('i.id_institucion = :id_institucion', { + id_institucion: institucion.id_institucion, + }); + if (modulo) + query.andWhere('m.id_modulo = :id_modulo', { + id_modulo: modulo.id_modulo, + }); + return query.getManyAndCount(); } findById(id_carrito: number) { diff --git a/src/equipo/dto/input/equipos.dto.ts b/src/equipo/dto/input/equipos.dto.ts index 156f712..f35601f 100644 --- a/src/equipo/dto/input/equipos.dto.ts +++ b/src/equipo/dto/input/equipos.dto.ts @@ -12,6 +12,10 @@ export class EquiposDto { @IsOptional() equipo?: string; + @IsNumberString() + @IsOptional() + id_institucion?: string; + @IsNumberString() @IsOptional() id_modulo?: string; diff --git a/src/equipo/equipo.controller.ts b/src/equipo/equipo.controller.ts index 572a7ac..2465594 100644 --- a/src/equipo/equipo.controller.ts +++ b/src/equipo/equipo.controller.ts @@ -60,6 +60,11 @@ export class EquipoController { name: 'equipo', type: 'string', }) + @ApiQuery({ + description: 'Id de la institución que se quiere usar como filtro.', + name: 'id_institucion', + type: 'string', + }) @ApiQuery({ description: 'Id del tipo de carrito que se quiere usar como filtro.', name: 'id_tipo_carrito', diff --git a/src/equipo/equipo.service.ts b/src/equipo/equipo.service.ts index 286767d..d29dbfb 100644 --- a/src/equipo/equipo.service.ts +++ b/src/equipo/equipo.service.ts @@ -88,12 +88,16 @@ export class EquipoService { pagina: string; carrito?: string; equipo?: string; + id_institucion?: string; id_modulo?: string; id_programa?: string; id_tipo_carrito?: string; id_tipo_entrada?: string; id_status?: string; }) { + const institucion = filtros.id_institucion + ? await this.institucionService.findById(parseInt(filtros.id_institucion)) + : null; const modulo = filtros.id_modulo ? await this.moduloService.findById(parseInt(filtros.id_modulo)) : null; @@ -128,7 +132,7 @@ export class EquipoService { .innerJoinAndSelect('m.institucion', 'i') .orderBy('i.institucion') .addOrderBy('m.modulo') - .addOrderBy('tc.id_tipo_carrito') + .addOrderBy('tc.tipo_carrito') .addOrderBy('c.carrito') .addOrderBy('e.equipo') .take(15) @@ -139,9 +143,13 @@ export class EquipoService { carrito: `%${filtros.carrito}%`, }); if (filtros.equipo) - query.andWhere('equipo LIKE :equipo', { + query.andWhere('e.equipo LIKE :equipo', { equipo: `%${filtros.equipo}%`, }); + if (institucion) + query.andWhere('m.id_institucion = :id_institucion', { + id_institucion: institucion.id_institucion, + }); if (modulo) query.andWhere('m.id_modulo = :id_modulo', { id_modulo: modulo.id_modulo, diff --git a/src/modulo/modulo.service.ts b/src/modulo/modulo.service.ts index 3746be8..c43df78 100644 --- a/src/modulo/modulo.service.ts +++ b/src/modulo/modulo.service.ts @@ -52,7 +52,19 @@ export class ModuloService { findAllByIdInstitucion(id_institucion: number) { return this.institucionService .findById(id_institucion) - .then((institucion) => this.repository.find({ institucion })); + .then((institucion) => + this.repository + .createQueryBuilder('m') + .innerJoinAndSelect( + 'm.institucion', + 'i', + 'i.id_institucion = :id_institucion', + { id_institucion: institucion.id_institucion }, + ) + .orderBy('i.institucion') + .orderBy('m.modulo') + .getMany(), + ); } findById(id_modulo: number) {