This commit is contained in:
xXpuma99Xx
2022-07-05 21:53:47 -05:00
parent 755db28c93
commit ae98fde192
31 changed files with 300 additions and 157 deletions
+15
View File
@@ -0,0 +1,15 @@
import { IsInt, IsString } from 'class-validator';
export class MultarDto {
@IsString()
descripcion: string;
@IsInt()
id_institucion_infraccion: number;
@IsInt()
id_operador: number;
@IsInt()
id_prestamo: number;
}
+6
View File
@@ -0,0 +1,6 @@
import { IsInt } from 'class-validator';
export class QuitarMultarDto {
@IsInt()
id_institucion_usuario: number;
}
+4 -4
View File
@@ -22,6 +22,10 @@ export class MultasEquipoOutputDto {
@Expose()
retraso;
@Expose()
@Type(() => InstitucionInfraccionOutputDto)
institucionInfraccion;
@Expose()
@Type(() => OperadorMinOutputDto)
opeardorMulta;
@@ -29,8 +33,4 @@ export class MultasEquipoOutputDto {
@Expose()
@Type(() => PrestamoEquipoMinOutputDto)
prestamo;
@Expose()
@Type(() => InstitucionInfraccionOutputDto)
institucionInfraccion;
}
+4 -4
View File
@@ -22,6 +22,10 @@ export class MultasUsuarioOutputDto {
@Expose()
retraso;
@Expose()
@Type(() => InstitucionInfraccionOutputDto)
institucionInfraccion;
@Expose()
@Type(() => OperadorMinOutputDto)
opeardorMulta;
@@ -29,8 +33,4 @@ export class MultasUsuarioOutputDto {
@Expose()
@Type(() => PrestamoUsuarioMinOutputDto)
prestamo;
@Expose()
@Type(() => InstitucionInfraccionOutputDto)
institucionInfraccion;
}
+4 -4
View File
@@ -22,6 +22,10 @@ export class MultasOutputDto {
@Expose()
retraso;
@Expose()
@Type(() => InstitucionInfraccionOutputDto)
institucionInfraccion;
@Expose()
@Type(() => OperadorMinOutputDto)
opeardorMulta;
@@ -29,8 +33,4 @@ export class MultasOutputDto {
@Expose()
@Type(() => PrestamoMinOutputDto)
prestamo;
@Expose()
@Type(() => InstitucionInfraccionOutputDto)
institucionInfraccion;
}
+44 -3
View File
@@ -1,10 +1,12 @@
import { Controller, Get, Query } from '@nestjs/common';
import { ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
import { Body, Controller, Get, Post, Put, Query } from '@nestjs/common';
import { ApiBody, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
import { Serealize } from '../interceptors/serialize.interceptor';
import { MultaService } from './multa.service';
import { IdUsuarioDto } from '../dto/id-usuario.dto';
import { IdEquipoPaginaDto } from '../dto/id-equipo-pagina.dto';
import { MultarDto } from './dto/input/multar.dto';
import { MultasDto } from './dto/input/multas.dto';
import { QuitarMultarDto } from './dto/input/quitar.dto';
import { MultasUsuarioDto } from './dto/input/multas-usuario.dto';
import { MultasOutputDto } from './dto/output/multas.dto';
import { MultasEquipoOutputDto } from './dto/output/multas-equipo.dto';
@@ -16,6 +18,31 @@ import { MultasUsuarioOutputDto } from './dto/output/multas-usuario.dto';
export class MultaController {
constructor(private multaService: MultaService) {}
@Post()
@ApiOperation({ description: 'Endpoint utilizado para multar a un usuario.' })
@ApiBody({
description: 'Todas las vairales son obligatorias.',
examples: {
ejemplo: {
value: {
id_institucion_infraccion: 1,
id_operador: 1,
id_prestamo: 1,
descripcion: '',
},
},
},
})
multar(@Body() body: MultarDto) {
return this.multaService.create(
body.id_prestamo,
body.id_operador,
body.descripcion,
null,
body.id_institucion_infraccion,
);
}
@Serealize(MultasOutputDto)
@Get()
@ApiOperation({
@@ -90,7 +117,8 @@ export class MultaController {
@Serealize(MultasMinOutputDto)
@Get('multas-usuario-activas')
@ApiOperation({
description: 'Endpoint que retorna todas las multas de un usuario que esten activas.',
description:
'Endpoint que retorna todas las multas de un usuario que esten activas.',
})
@ApiQuery({
description: 'Id del usuario.',
@@ -101,6 +129,19 @@ export class MultaController {
return this.multaService.findMultasActivas(parseInt(query.id_usuario));
}
@Put()
@ApiOperation({
description:
'Endpoint que se encarga de quitar la multa de un alumno de cierta una.',
})
@ApiBody({
description: 'La variable id_institucion_usuario es obligatoria.',
examples: { example: { value: { id_institucion_usuario: 1 } } },
})
quitarMulta(@Body() body: QuitarMultarDto) {
return this.multaService.quitarMulta(body.id_institucion_usuario);
}
// @Get('reporte')
// reporte() {}
}
+48 -16
View File
@@ -138,20 +138,20 @@ export class MultaService {
const query = this.repository
.createQueryBuilder('mu')
.innerJoinAndSelect('mu.institucionInfraccion', 'ii')
.innerJoinAndSelect('ii.infraccion', 'inf')
.innerJoinAndSelect('mu.opeardorMulta', 'om')
.innerJoinAndSelect('om.tipoUsuario', 'tu')
.innerJoinAndSelect('mu.prestamo', 'p')
.innerJoinAndSelect('ii.infraccion', 'inf')
.innerJoinAndSelect('om.tipoUsuario', 'tu')
.innerJoinAndSelect('p.equipo', 'e')
.innerJoinAndSelect('e.carrito', 'c')
.innerJoinAndSelect('c.modulo', 'm')
.innerJoinAndSelect('m.institucion', 'i')
.innerJoinAndSelect('c.tipoCarrito', 'tc')
.innerJoinAndSelect('p.usuario', 'u')
.innerJoinAndSelect('e.carrito', 'c')
.innerJoinAndSelect('u.instituciones', 'is')
.innerJoinAndSelect('c.modulo', 'm')
.innerJoinAndSelect('c.tipoCarrito', 'tc')
.innerJoinAndSelect('is.institucionCarrera', 'ic')
.innerJoinAndSelect('ic.institucion', 'in')
.innerJoinAndSelect('m.institucion', 'i')
.innerJoinAndSelect('ic.carrera', 'ca')
.innerJoinAndSelect('ic.institucion', 'in')
.innerJoinAndSelect('ca.nivel', 'n')
.orderBy('i.institucion')
.addOrderBy('u.usuario')
@@ -178,19 +178,19 @@ export class MultaService {
this.repository
.createQueryBuilder('mu')
.innerJoinAndSelect('mu.institucionInfraccion', 'ii')
.innerJoinAndSelect('mu.opeardorMulta', 'om')
.innerJoinAndSelect('mu.prestamo', 'p')
.innerJoinAndSelect('ii.infraccion', 'inf')
.innerJoinAndSelect('ii.institucion', 'i')
.innerJoinAndSelect('mu.opeardorMulta', 'om')
.innerJoinAndSelect('om.tipoUsuario', 'tu')
.innerJoinAndSelect('mu.prestamo', 'p')
.innerJoinAndSelect('p.equipo', 'e', 'e.id_equipo = :id_equipo', {
id_equipo: equipo.id_equipo,
})
.innerJoinAndSelect('p.usuario', 'u')
.innerJoinAndSelect('u.instituciones', 'is')
.innerJoinAndSelect('is.institucionCarrera', 'ic')
.innerJoinAndSelect('ic.institucion', 'in')
.innerJoinAndSelect('ic.carrera', 'ca')
.innerJoinAndSelect('ic.institucion', 'in')
.innerJoinAndSelect('ca.nivel', 'n')
.orderBy('mu.id_multa', 'DESC')
.skip((pagina - 1) * 25)
@@ -204,19 +204,19 @@ export class MultaService {
this.repository
.createQueryBuilder('mu')
.innerJoinAndSelect('mu.institucionInfraccion', 'ii')
.innerJoinAndSelect('mu.opeardorMulta', 'om')
.innerJoinAndSelect('mu.prestamo', 'p')
.innerJoinAndSelect('ii.infraccion', 'inf')
.innerJoinAndSelect('ii.institucion', 'i')
.innerJoinAndSelect('mu.opeardorMulta', 'om')
.innerJoinAndSelect('om.tipoUsuario', 'tu')
.innerJoinAndSelect('mu.prestamo', 'p')
.innerJoinAndSelect('p.equipo', 'e')
.innerJoinAndSelect('e.carrito', 'c')
.innerJoinAndSelect('c.modulo', 'm')
.innerJoinAndSelect('m.institucion', 'in')
.innerJoinAndSelect('c.tipoCarrito', 'tc')
.innerJoinAndSelect('p.usuario', 'u', 'u.id_usuario = :id_usuario', {
id_usuario: usuario.id_usuario,
})
.innerJoinAndSelect('e.carrito', 'c')
.innerJoinAndSelect('c.modulo', 'm')
.innerJoinAndSelect('c.tipoCarrito', 'tc')
.innerJoinAndSelect('m.institucion', 'in')
.orderBy('mu.id_multa', 'DESC')
.skip((pagina - 1) * 25)
.take(25)
@@ -238,4 +238,36 @@ export class MultaService {
.getMany(),
);
}
async quitarMulta(id_institucion_usuario: number) {
const institucionUsuario = await this.institucionUsuarioService.findById(
id_institucion_usuario,
);
return this.repository
.createQueryBuilder('mu')
.innerJoin('mu.prestamo', 'p')
.innerJoin('p.usuario', 'u')
.innerJoin(
'u.instituciones',
'is',
'is.id_institucion_usuario = :id_institucion_usuario',
{
id_institucion_usuario: institucionUsuario.id_institucion_usuario,
},
)
.where('activo = 1')
.getOne()
.then((multa) => {
if (!multa)
throw new ConflictException(
'Este usuario no tiene una multa activa en esta institución.',
);
multa.activo = false;
institucionUsuario.multa = false;
return this.repository.save(multa);
})
.then((_) => this.institucionUsuarioService.update(institucionUsuario))
.then((_) => ({ message: 'Se guardaron los cambios correctamente.' }));
}
}