From dc89e76dae771a97f2dc1be178a9859356d44a9b Mon Sep 17 00:00:00 2001 From: xXpuma99Xx <51341582+xXpuma99Xx@users.noreply.github.com> Date: Fri, 24 Jun 2022 18:10:26 -0500 Subject: [PATCH] hoy endpoint --- src/carrito/carrito.service.ts | 5 +++ src/equipo/equipo.controller.ts | 8 +++- src/equipo/equipo.service.ts | 13 ++++-- .../institucion-carrera.service.ts | 7 ++- .../dto/output/institucion-carrera.dto.ts | 6 ++- .../entity/institucion-dia.entity.ts | 1 + .../institucion-dia.controller.ts | 16 +++++++ .../institucion-dia.service.ts | 25 ++++++++++- .../institucion-infraccion.service.ts | 12 +++++- .../institucion-programa.service.ts | 27 +++++++----- src/institucion/institucion.service.ts | 5 ++- src/prestamo/prestamo.service.ts | 43 +++++++++++-------- 12 files changed, 126 insertions(+), 42 deletions(-) diff --git a/src/carrito/carrito.service.ts b/src/carrito/carrito.service.ts index af199de..1500bd6 100644 --- a/src/carrito/carrito.service.ts +++ b/src/carrito/carrito.service.ts @@ -121,6 +121,11 @@ export class CarritoService { innerJoinAndSelect: { m: 'c.modulo', i: 'm.institucion' }, }, where: busqueda, + order: { + modulo: 'ASC', + tipoCarrito: 'ASC', + carrito: 'ASC', + }, skip: (parseInt(filtros.pagina) - 1) * 25, take: 25, }); diff --git a/src/equipo/equipo.controller.ts b/src/equipo/equipo.controller.ts index 84f6c63..572a7ac 100644 --- a/src/equipo/equipo.controller.ts +++ b/src/equipo/equipo.controller.ts @@ -92,8 +92,14 @@ export class EquipoController { @Put() // @UseGuards(AuthGuard('jwt')) update(@Body() body: UpdateEquipoDto) { + const data = { ...body }; + + delete data.id_carrito; + delete data.id_status; + delete data.id_operador; + delete data.motivo; return this.equipoService.update( - body, + data, body.id_carrito, body.id_status, body.id_operador, diff --git a/src/equipo/equipo.service.ts b/src/equipo/equipo.service.ts index aae4fdf..286767d 100644 --- a/src/equipo/equipo.service.ts +++ b/src/equipo/equipo.service.ts @@ -126,6 +126,11 @@ export class EquipoService { .innerJoinAndSelect('e.programas', 'ps') .innerJoinAndSelect('ps.programa', 'p') .innerJoinAndSelect('m.institucion', 'i') + .orderBy('i.institucion') + .addOrderBy('m.modulo') + .addOrderBy('tc.id_tipo_carrito') + .addOrderBy('c.carrito') + .addOrderBy('e.equipo') .take(15) .skip((parseInt(filtros.pagina) - 1) * 15); @@ -225,7 +230,9 @@ export class EquipoService { .innerJoinAndSelect('tes.tipoEntrada', 'te') .innerJoinAndSelect('e.programas', 'ps') .innerJoinAndSelect('ps.programa', 'p') - .where('e.prestado = 0 AND e.id_status = 1'); + .where('e.prestado = 0 AND e.id_status = 1') + .orderBy('c.carrito') + .addOrderBy('e.equipo'); if (programa) query.andWhere('ps.id_programa = :id_programa', { @@ -320,10 +327,10 @@ export class EquipoService { : id_operador : null; - if (attrs.equipo && attrs.equipo != equipo.equipo) + if ((attrs.equipo && attrs.equipo != equipo.equipo) || carrito) await this.existeEquipo( carrito ? carrito : equipo.carrito, - attrs.equipo, + attrs.equipo ? attrs.equipo : equipo.equipo, ); if ( status && diff --git a/src/institucion-carrera/institucion-carrera.service.ts b/src/institucion-carrera/institucion-carrera.service.ts index 9bc7067..4876501 100644 --- a/src/institucion-carrera/institucion-carrera.service.ts +++ b/src/institucion-carrera/institucion-carrera.service.ts @@ -20,8 +20,11 @@ export class InstitucionCarreraService { .findById(id_institucion) .then((institucion) => this.institucionCarreraRepository.find({ - carrera: { id_carrera: Not(1) }, - institucion, + where: { + carrera: { id_carrera: Not(1) }, + institucion, + }, + order: { carrera: 'ASC' }, }), ); } diff --git a/src/institucion-dia/dto/output/institucion-carrera.dto.ts b/src/institucion-dia/dto/output/institucion-carrera.dto.ts index eef8f77..c8515f9 100644 --- a/src/institucion-dia/dto/output/institucion-carrera.dto.ts +++ b/src/institucion-dia/dto/output/institucion-carrera.dto.ts @@ -1,6 +1,6 @@ import { Expose, Type } from 'class-transformer'; import { DiaOutputDto } from './dia.dto'; -import { InstitucionMinOutputDto } from '../../../institucion/dto/output/institucion-min.dto'; +import { HoraExcepcionOutputDto } from '../../../hora-excepcion/dto/output/hora-excepcion.dto'; export class InstitucionCarreaOutputDto { @Expose() @@ -18,4 +18,8 @@ export class InstitucionCarreaOutputDto { @Expose() @Type(() => DiaOutputDto) dia; + + @Expose() + @Type(() => HoraExcepcionOutputDto) + horasExcepcion; } diff --git a/src/institucion-dia/entity/institucion-dia.entity.ts b/src/institucion-dia/entity/institucion-dia.entity.ts index b59ecb4..b9859d9 100644 --- a/src/institucion-dia/entity/institucion-dia.entity.ts +++ b/src/institucion-dia/entity/institucion-dia.entity.ts @@ -35,6 +35,7 @@ export class InstitucionDia { @OneToMany( () => HoraExcepcion, (horaExcepcion) => horaExcepcion.institucionDia, + { eager: true }, ) horasExcepcion: HoraExcepcion[]; } diff --git a/src/institucion-dia/institucion-dia.controller.ts b/src/institucion-dia/institucion-dia.controller.ts index 769d891..7ac0d58 100644 --- a/src/institucion-dia/institucion-dia.controller.ts +++ b/src/institucion-dia/institucion-dia.controller.ts @@ -29,6 +29,22 @@ export class InstitucionDiaController { ); } + @Serealize(InstitucionCarreaOutputDto) + @Get('hoy') + // @UseGuards(AuthGuard('jwt')) + @ApiOperation({ + description: + 'Endpoint que retorna la información del día de hoy de una institución.', + }) + @ApiQuery({ + description: 'Id de la institución.', + name: 'id_institucion', + type: 'string', + }) + hoy(@Query() query: IdInstitucionDto) { + return this.institucionDiaService.hoy(parseInt(query.id_institucion)); + } + @Put() // @UseGuards(AuthGuard('jwt')) @ApiOperation({ diff --git a/src/institucion-dia/institucion-dia.service.ts b/src/institucion-dia/institucion-dia.service.ts index c9c8805..5aee93e 100644 --- a/src/institucion-dia/institucion-dia.service.ts +++ b/src/institucion-dia/institucion-dia.service.ts @@ -1,4 +1,9 @@ -import { Injectable, NotFoundException } from '@nestjs/common'; +import * as moment from 'moment'; +import { + ConflictException, + Injectable, + NotFoundException, +} from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Institucion } from '../institucion/entity/institucion.entity'; @@ -15,7 +20,9 @@ export class InstitucionDiaService { findAllByIdInstitucion(id_institucion: number) { return this.institucionService .findById(id_institucion) - .then((institucion) => this.repository.find({ institucion })); + .then((institucion) => + this.repository.find({ where: { institucion }, order: { dia: 'ASC' } }), + ); } findById(id_institucion_dia: number) { @@ -32,6 +39,20 @@ export class InstitucionDiaService { return this.repository.findOne({ institucion, dia: { id_dia } }); } + async hoy(id_institucion: number) { + const ahora = moment(); + + if (ahora.weekday() === 0 || ahora.weekday() === 6) + throw new ConflictException( + 'No se puede pedir equipo de cómputo los sabados y domingos.', + ); + return this.institucionService + .findById(id_institucion) + .then((institucion) => + this.findInstitucionDia(institucion, ahora.weekday()), + ); + } + update(attrs: Partial) { return this.findById(attrs.id_institucion_dia) .then((institucionDia) => { diff --git a/src/institucion-infraccion/institucion-infraccion.service.ts b/src/institucion-infraccion/institucion-infraccion.service.ts index 47b76b4..9b7f3dd 100644 --- a/src/institucion-infraccion/institucion-infraccion.service.ts +++ b/src/institucion-infraccion/institucion-infraccion.service.ts @@ -44,14 +44,22 @@ export class InstitucionInfraccionService { } findAll() { - return this.infraccionRepository.find(); + return this.infraccionRepository.find({ order: { infraccion: 'ASC' } }); } findAllByIdInstitucion(id_institucion: number) { return this.institucionService .findById(id_institucion) .then((institucion) => - this.institucionInfraccionRepository.find({ institucion }), + this.institucionInfraccionRepository + .createQueryBuilder('ii') + .innerJoinAndSelect('ii.institucion', 'in') + .innerJoinAndSelect('ii.infraccion', 'i') + .where('in.id_institucion = :id_institucion', { + id_institucion: institucion.id_institucion, + }) + .orderBy('i.infraccion') + .getMany(), ); } diff --git a/src/institucion-programa/institucion-programa.service.ts b/src/institucion-programa/institucion-programa.service.ts index 76f08bc..3b964bb 100644 --- a/src/institucion-programa/institucion-programa.service.ts +++ b/src/institucion-programa/institucion-programa.service.ts @@ -45,7 +45,10 @@ export class InstitucionProgramaService { } findAllProgramas() { - return this.programaRepository.find(); + return this.programaRepository.find({ + where: { id_programa: Not(1) }, + order: { programa: 'ASC' }, + }); } findById(id_institucion_programa: number) { @@ -75,17 +78,19 @@ export class InstitucionProgramaService { async findAllByIdInstitucion(id_institucion: number, mostrar = false) { const institucion = await this.institucionService.findById(id_institucion); - const busqueda: { - institucion: Institucion; - programa: { id_programa: FindOperator }; - mostrar?: boolean; - } = { - institucion, - programa: { id_programa: Not(1) }, - }; + const query = this.institucionProgramaRepository + .createQueryBuilder('ip') + .innerJoinAndSelect('ip.programa', 'p', 'p.id_programa != 1') + .innerJoinAndSelect( + 'ip.institucion', + 'i', + 'i.id_institucion = :id_institucion', + { id_institucion: institucion.id_institucion }, + ) + .orderBy('p.programa'); - if (mostrar) busqueda.mostrar = mostrar; - return this.institucionProgramaRepository.find(busqueda); + if (mostrar) query.andWhere('ip.mostrar = 1'); + return query.getMany(); } update(attrs: Partial) { diff --git a/src/institucion/institucion.service.ts b/src/institucion/institucion.service.ts index 929d6db..3c51ab1 100644 --- a/src/institucion/institucion.service.ts +++ b/src/institucion/institucion.service.ts @@ -13,7 +13,10 @@ export class InstitucionService { const busqueda: { activo?: boolean } = {}; if (activo) busqueda.activo = activo; - return this.repository.find(busqueda); + return this.repository.find({ + where: busqueda, + order: { institucion: 'ASC' }, + }); } findById(id_institucion: number) { diff --git a/src/prestamo/prestamo.service.ts b/src/prestamo/prestamo.service.ts index 1b45067..50be02a 100644 --- a/src/prestamo/prestamo.service.ts +++ b/src/prestamo/prestamo.service.ts @@ -171,7 +171,7 @@ export class PrestamoService { .then(async (equipo) => { if (!equipo) throw new ConflictException( - 'No hay un equipo de cómputo que cumpla con las caracteríasticas solicitasdas o ya no hay equipos disponibles en este momento. Intenta más tarde o cambia las caracteríasticas.', + 'No hay un equipo de cómputo que cumpla con las caracteríasticas solicitadas o ya no hay equipos disponibles en este momento. Intenta más tarde o cambia las características.', ); return this.equipoService.update(equipo, null, 2); }) @@ -179,11 +179,11 @@ export class PrestamoService { this.repository.save( this.repository.create({ equipo, - usuario, fecha_inicio: ahora.toDate(), hora_max_recoger: ahora .add(modulo.institucion.tiempo_recoger, 'm') .toDate(), + usuario, }), ), ) @@ -197,7 +197,7 @@ export class PrestamoService { async desactivarPrestamos() { const ahora = moment(); - const operadorRegreso = await this.operadorService.findById(1); + const sistema = await this.operadorService.findById(1); return this.repository .find({ @@ -209,16 +209,19 @@ export class PrestamoService { if (ahora.diff(moment(prestamos[i].hora_max_recoger)) > 0) { prestamos[i].activo = false; prestamos[i].cancelado_operador = true; - prestamos[i].operadorRegreso = operadorRegreso; - await this.equipoService - .update(prestamos[i].equipo, null, 1) - .then((_) => this.repository.save(prestamos[i])) - .then((prestamo) => { + prestamos[i].operadorRegreso = sistema; + await this.repository + .save(prestamos[i]) + .then((_) => + this.equipoService.update(prestamos[i].equipo, null, 1), + ) + .then((_) => { this.appGateway.actualizarOperador( - prestamo.usuario.institucionCarrera.institucion - .id_institucion, + prestamos[i].equipo.carrito.modulo.institucion.id_institucion, + ); + this.appGateway.actualizarUsuario( + prestamos[i].usuario.id_usuario, ); - this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario); }); } }); @@ -240,9 +243,9 @@ export class PrestamoService { .toDate(); prestamo.operadorEntrega = operadorEntrega; prestamo.equipo.prestado = true; - return this.equipoService - .update(prestamo.equipo, null, 3) - .then((_) => this.repository.save(prestamo)) + return this.repository + .save(prestamo) + .then((_) => this.equipoService.update(prestamo.equipo, null, 3)) .then((_) => { this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario); return { @@ -435,11 +438,13 @@ export class PrestamoService { prestamo.fecha_entrega = ahora.toDate(); prestamo.operadorRegreso = operadorRegreso; if (semanasCastigo > 0) { + const mensajeTardanza = `El usaurio se tardó: ${tardanza} minutos en entregar el equipo de cómputo.`; + if (id_institucion_infraccion) await this.multaService.create( prestamo, operadorRegreso, - `El usaurio se tardó: ${tardanza} minutos en entregar el equipo de cómputo. ${descripcion}`, + `${mensajeTardanza} ${descripcion}`, semanasCastigo, id_institucion_infraccion, ); @@ -447,7 +452,7 @@ export class PrestamoService { await this.multaService.create( prestamo, operadorRegreso, - `El usaurio se tardó: ${tardanza} minutos en entregar el equipo de cómputo.`, + mensajeTardanza, semanasCastigo, ); } else if (id_institucion_infraccion) @@ -458,9 +463,9 @@ export class PrestamoService { null, id_institucion_infraccion, ); - return this.equipoService - .update(prestamo.equipo, null, 1) - .then((_) => this.repository.save(prestamo)) + return this.repository + .save(prestamo) + .then((_) => this.equipoService.update(prestamo.equipo, null, 1)) .then((_) => { this.appGateway.actualizarUsuario(prestamo.usuario.id_usuario); return {