equipo corregido

This commit is contained in:
2022-06-13 07:32:22 -05:00
parent 9ff4f93893
commit 6de9a5c03f
3 changed files with 79 additions and 30 deletions
+23 -4
View File
@@ -1,12 +1,31 @@
import { IsInt } from 'class-validator';
import { Optional } from '@nestjs/common';
import { IsInt, IsString } from 'class-validator';
export class EquipoUpdateDto {
@IsInt()
id_equipo: number;
@IsInt()
id_carrito: number;
@IsString()
@Optional()
equipo?: string;
@IsInt()
id_status: number;
@Optional()
id_carrito?: number;
@IsInt()
@Optional()
id_status?: number;
@IsString()
@Optional()
marca?: string;
@IsString()
@Optional()
modelo?: string;
@IsString()
@Optional()
numero_serie?: string;
}
+8 -7
View File
@@ -1,7 +1,7 @@
import { Body, Controller, Get, Put, Query } from '@nestjs/common';
import { ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
import { EquipoService } from './equipo.service';
import { EquipoDto } from './dto/equipo.dto';
import { ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
import { EquipoEquiposDto } from './dto/equipo-equipos.dto';
import { EquipoUpdateDto } from './dto/equipo-update.dto';
@@ -12,7 +12,8 @@ export class EquipoController {
@Get('equipo')
@ApiOperation({
description: 'Endpoint que retorna la información de un equipo.',
description:
'Endpoint que retorna la información de un equipo por su número de inventario de una institución.',
})
@ApiQuery({
description: 'Id de la institución.',
@@ -71,11 +72,11 @@ export class EquipoController {
name: 'id_modulo',
type: 'string',
})
// @ApiQuery({
// description: 'Id del tipo de entrada que se quiere usar como filtro.',
// name: 'id_tipo_entrada',
// type: 'string',
// })
@ApiQuery({
description: 'Id del tipo de entrada que se quiere usar como filtro.',
name: 'id_tipo_entrada',
type: 'string',
})
equipos(@Query() query: EquipoEquiposDto) {
return this.equipoService.findAll(query);
}
+48 -19
View File
@@ -1,4 +1,5 @@
import {
ConflictException,
forwardRef,
Inject,
Injectable,
@@ -6,9 +7,9 @@ import {
} from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Carrito } from '../carrito/entity/carrito.entity';
import { Equipo } from './entity/equipo.entity';
import { Institucion } from '../institucion/entity/institucion.entity';
import { Carrito } from '../carrito/entity/carrito.entity';
import { Modulo } from '../modulo/entity/modulo.entity';
import { Programa } from '../institucion-programa/entity/programa.entity';
import { TipoCarrito } from '../institucion-tipo-carrito/entity/tipo-carrito.entity';
@@ -45,7 +46,7 @@ export class EquipoService {
numero_inventario: string,
numero_serie: string,
) {
const e = await this.repository.save(
const equipoNuevo = await this.repository.save(
this.repository.create({
carrito,
equipo,
@@ -57,8 +58,23 @@ export class EquipoService {
}),
);
await this.equipoProgramaService.create(e, 1);
return e;
return this.equipoProgramaService
.create(equipoNuevo, 1)
.then((_) => equipoNuevo);
}
async existeEquipo(id_carrito: number | Carrito, equipo: string) {
const carrito =
typeof id_carrito === 'number'
? await this.carritoService.findById(id_carrito)
: id_carrito;
return this.repository.findOne({ carrito, equipo }).then((existeEquipo) => {
if (existeEquipo)
throw new ConflictException(
'Ya existe un equipo con este nombre, intenta con otro.',
);
});
}
async findAll(filtros: {
@@ -98,6 +114,10 @@ export class EquipoService {
.innerJoinAndSelect('e.status', 's')
.innerJoinAndSelect('c.modulo', 'm')
.innerJoinAndSelect('c.tipoCarrito', 'tc')
.innerJoinAndSelect('e.tiposEntradas', 'tes')
.innerJoinAndSelect('tes.tipoEntrada', 'te')
.innerJoinAndSelect('e.programas', 'ps')
.innerJoinAndSelect('ps.programa', 'p')
.take(15)
.skip((parseInt(filtros.pagina) - 1) * 15);
@@ -113,23 +133,19 @@ export class EquipoService {
query.andWhere('m.id_modulo = :id_modulo', {
id_modulo: modulo.id_modulo,
});
if (programa) {
query.innerJoinAndSelect('e.programas', 'ps');
query.innerJoinAndSelect('ps.programa', 'p');
if (programa)
query.andWhere('ps.id_programa = :id_programa', {
id_programa: programa.id_programa,
});
}
else query.andWhere('ps.id_programa = 1');
if (tipoCarrito)
query.andWhere('tc.id_tipo_carrito = :id_tipo_carrito', {
id_tipo_carrito: tipoCarrito.id_tipo_carrito,
});
if (tipoEntrada) {
query.innerJoinAndSelect('e.tiposEntradas', 'tes');
if (tipoEntrada)
query.andWhere('tes.id_tipo_entrada = :id_tipo_entrada', {
id_tipo_entrada: tipoEntrada.id_tipo_entrada,
});
}
if (status)
query.andWhere('s.id_status = :id_status', {
id_status: status.id_status,
@@ -181,7 +197,7 @@ export class EquipoService {
) {
const query = this.repository
.createQueryBuilder('e')
.innerJoinAndSelect('e.carrito', 'c', 'activo = 1')
.innerJoinAndSelect('e.carrito', 'c', 'c.activo = 1')
.innerJoinAndSelect(
'c.modulo',
'm',
@@ -196,12 +212,12 @@ export class EquipoService {
'tc.id_tipo_carrito = :id_tipo_carrito',
{ id_tipo_carrito: tipoCarrito.id_tipo_carrito },
)
.innerJoinAndSelect('e.status', 's')
.innerJoinAndSelect('e.status', 's', 's.id_status = 1')
.innerJoinAndSelect('e.tiposEntradas', 'tes')
.innerJoinAndSelect('tes.tipoEntrada', 'te')
.innerJoinAndSelect('e.programas', 'ps')
.innerJoinAndSelect('ps.programa', 'p')
.where('e.id_status = 1 AND e.prestado = 0');
.where('e.prestado = 0');
if (programa)
query.andWhere('ps.id_programa = :id_programa', {
@@ -227,7 +243,7 @@ export class EquipoService {
if (n === 0) {
const query = this.repository
.createQueryBuilder('e')
.innerJoinAndSelect('e.carrito', 'c', 'activo = 1')
.innerJoinAndSelect('e.carrito', 'c', 'c.activo = 1')
.innerJoinAndSelect(
'c.modulo',
'm',
@@ -242,8 +258,8 @@ export class EquipoService {
'tc.id_tipo_carrito = :id_tipo_carrito',
{ id_tipo_carrito: tipoCarrito.id_tipo_carrito },
)
.innerJoinAndSelect('e.status', 's')
.andWhere('id_status = 1 AND prestado = 1');
.innerJoinAndSelect('e.status', 's', 's.id_status = 1')
.andWhere('prestado = 1');
return query.update().set({ prestado: false }).execute();
}
@@ -267,10 +283,23 @@ export class EquipoService {
});
}
update(attrs: Partial<Equipo>) {
update(attrs: Partial<Equipo>, id_carrito?: number, id_status?: number) {
return this.findById(attrs.id_equipo)
.then((equipo) => {
.then(async (equipo) => {
const status = id_status
? await this.statusService.findById(id_status)
: null;
const carrito = id_carrito
? await this.carritoService.findById(id_carrito)
: null;
if (attrs.equipo) {
if (carrito) this.existeEquipo(carrito, attrs.equipo);
else this.existeEquipo(equipo.carrito, attrs.equipo);
}
Object.assign(equipo, attrs);
if (carrito) equipo.carrito = carrito;
if (status) equipo.status = status;
return this.repository.save(equipo);
})
.then((equipo) => ({