From ad7986758544f807dbcbe750628f1fdd0d2328e8 Mon Sep 17 00:00:00 2001 From: lemuel Date: Wed, 28 Sep 2022 00:08:56 -0500 Subject: [PATCH] equipo con programas y tipos de entrada --- src/app.module.ts | 4 +++ .../full-informacion-equipo-programa.view.ts | 28 +++++++++++++++ src/equipo-programa/equipo-programa.module.ts | 7 +++- .../equipo-programa.service.ts | 25 ++++++++++++++ ...ll-informacion-equipo-tipo-entrada.view.ts | 28 +++++++++++++++ .../equipo-tipo-entrada.module.ts | 6 ++-- .../equipo-tipo-entrada.service.ts | 34 ++++++++++++++++++- .../views/full-informacion-equipo.view.ts | 14 +------- src/equipo/equipo.module.ts | 2 ++ src/equipo/equipo.service.ts | 17 +++++++++- 10 files changed, 147 insertions(+), 18 deletions(-) create mode 100644 src/equipo-programa/entity/views/full-informacion-equipo-programa.view.ts create mode 100644 src/equipo-tipo-entrada/entity/views/full-informacion-equipo-tipo-entrada.view.ts diff --git a/src/app.module.ts b/src/app.module.ts index 9ba05f8..1d590fe 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -75,7 +75,9 @@ import { InformacionCarritoView } from './carrito/entity/views/informacion-carri import { FullInformacionCarritoView } from './carrito/entity/views/full-informacion-carrito.view'; import { FullInformacionEquipoView } from './equipo/entity/views/full-informacion-equipo.view'; import { InformacionEquipoView } from './equipo/entity/views/informacion-equipo.view'; +import { FullInformacionEquipoProgramaView } from './equipo-programa/entity/views/full-informacion-equipo-programa.view'; import { InformacionEquipoProgramaView } from './equipo-programa/entity/views/informacion-equipo-programa.view'; +import { FullInformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/views/full-informacion-equipo-tipo-entrada.view'; import { InformacionEquipoTipoEntradaView } from './equipo-tipo-entrada/entity/views/informacion-equipo-tipo-entrada.view'; import { InformacionInstitucionView } from './institucion/entity/views/informacion-institucion.view'; import { MinInformacionInstitucionView } from './institucion/entity/views/min-informacion-institucion.view'; @@ -150,7 +152,9 @@ import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuar FullInformacionCarritoView, FullInformacionEquipoView, InformacionEquipoView, + FullInformacionEquipoProgramaView, InformacionEquipoProgramaView, + FullInformacionEquipoTipoEntradaView, InformacionEquipoTipoEntradaView, InformacionInstitucionView, MinInformacionInstitucionView, diff --git a/src/equipo-programa/entity/views/full-informacion-equipo-programa.view.ts b/src/equipo-programa/entity/views/full-informacion-equipo-programa.view.ts new file mode 100644 index 0000000..5be3ce9 --- /dev/null +++ b/src/equipo-programa/entity/views/full-informacion-equipo-programa.view.ts @@ -0,0 +1,28 @@ +import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; +import { EquipoPrograma } from '../equipo-programa.entity'; +import { Programa } from '../../../institucion-programa/entity/programa.entity'; + +@ViewEntity({ + expression: (dataSource: DataSource) => + dataSource + .createQueryBuilder() + .select('ep.id_equipo_programa', 'id_equipo_programa') + .addSelect('ep.id_equipo', 'id_equipo') + .addSelect('ep.id_programa', 'id_programa') + .addSelect('p.programa', 'programa') + .from(EquipoPrograma, 'ep') + .innerJoin(Programa, 'p', 'p.id_programa = ep.id_programa'), +}) +export class FullInformacionEquipoProgramaView { + @ViewColumn() + id_equipo_programa: number; + + @ViewColumn() + id_equipo: number; + + @ViewColumn() + id_programa: number; + + @ViewColumn() + programa: string; +} diff --git a/src/equipo-programa/equipo-programa.module.ts b/src/equipo-programa/equipo-programa.module.ts index dba6fe5..3903773 100644 --- a/src/equipo-programa/equipo-programa.module.ts +++ b/src/equipo-programa/equipo-programa.module.ts @@ -4,6 +4,7 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { EquipoProgramaController } from './equipo-programa.controller'; import { EquipoProgramaService } from './equipo-programa.service'; import { EquipoPrograma } from '../equipo-programa/entity/equipo-programa.entity'; +import { FullInformacionEquipoProgramaView } from './entity/views/full-informacion-equipo-programa.view'; import { InformacionEquipoProgramaView } from './entity/views/informacion-equipo-programa.view'; import { EquipoModule } from '../equipo/equipo.module'; import { InstitucionProgramaModule } from '../institucion-programa/institucion-programa.module'; @@ -14,7 +15,11 @@ import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module' forwardRef(() => EquipoModule), InstitucionProgramaModule, PassportModule.register({ defaultStrategy: 'jwt' }), - TypeOrmModule.forFeature([EquipoPrograma, InformacionEquipoProgramaView]), + TypeOrmModule.forFeature([ + EquipoPrograma, + FullInformacionEquipoProgramaView, + InformacionEquipoProgramaView, + ]), ValidarUsuarioModule, ], controllers: [EquipoProgramaController], diff --git a/src/equipo-programa/equipo-programa.service.ts b/src/equipo-programa/equipo-programa.service.ts index 1dbba66..cf73a9f 100644 --- a/src/equipo-programa/equipo-programa.service.ts +++ b/src/equipo-programa/equipo-programa.service.ts @@ -10,6 +10,7 @@ import { Repository } from 'typeorm'; import { Equipo } from '../equipo/entity/equipo.entity'; import { EquipoPrograma } from './entity/equipo-programa.entity'; import { Programa } from '../institucion-programa/entity/programa.entity'; +import { FullInformacionEquipoProgramaView } from './entity/views/full-informacion-equipo-programa.view'; import { InformacionEquipoProgramaView } from './entity/views/informacion-equipo-programa.view'; import { EquipoService } from '../equipo/equipo.service'; import { InstitucionProgramaService } from '../institucion-programa/institucion-programa.service'; @@ -20,6 +21,8 @@ export class EquipoProgramaService { constructor( @InjectRepository(EquipoPrograma) private repository: Repository, + @InjectRepository(FullInformacionEquipoProgramaView) + private fullInformacionEquipoProgramaView: Repository, @InjectRepository(InformacionEquipoProgramaView) private informacionEquipoProgramaView: Repository, @Inject(forwardRef(() => EquipoService)) @@ -147,6 +150,28 @@ export class EquipoProgramaService { }); } + findFullInfoEquipoProgramaAllByIdEquipo(id_equipo: number) { + return this.fullInformacionEquipoProgramaView + .find({ + where: { id_equipo }, + }) + .then((infoEquipoProgramas) => { + const equipoProgramas: EquipoPrograma[] = []; + + for (let i = 0; i < infoEquipoProgramas.length; i++) + equipoProgramas.push( + this.repository.create({ + id_equipo_programa: infoEquipoProgramas[i].id_equipo_programa, + programa: { + id_programa: infoEquipoProgramas[i].id_programa, + programa: infoEquipoProgramas[i].programa, + }, + }), + ); + return equipoProgramas; + }); + } + informacionEquipoPrograma(id_equipo: number, id_programa: number) { return this.informacionEquipoProgramaView.findOne({ where: { id_equipo, id_programa }, diff --git a/src/equipo-tipo-entrada/entity/views/full-informacion-equipo-tipo-entrada.view.ts b/src/equipo-tipo-entrada/entity/views/full-informacion-equipo-tipo-entrada.view.ts new file mode 100644 index 0000000..25f20e6 --- /dev/null +++ b/src/equipo-tipo-entrada/entity/views/full-informacion-equipo-tipo-entrada.view.ts @@ -0,0 +1,28 @@ +import { DataSource, ViewEntity, ViewColumn } from 'typeorm'; +import { EquipoTipoEntrada } from '../equipo-tipo-entrada.entity'; +import { TipoEntrada } from '../../../institucion-tipo-entrada/entity/tipo-entrada.entity'; + +@ViewEntity({ + expression: (dataSource: DataSource) => + dataSource + .createQueryBuilder() + .select('ete.id_equipo_tipo_entrada', 'id_equipo_tipo_entrada') + .addSelect('ete.id_equipo', 'id_equipo') + .addSelect('ete.id_tipo_entrada', 'id_tipo_entrada') + .addSelect('te.tipo_entrada', 'tipo_entrada') + .from(EquipoTipoEntrada, 'ete') + .innerJoin(TipoEntrada, 'te', 'te.id_tipo_entrada = ete.id_tipo_entrada'), +}) +export class FullInformacionEquipoTipoEntradaView { + @ViewColumn() + id_equipo_tipo_entrada: number; + + @ViewColumn() + id_equipo: number; + + @ViewColumn() + id_tipo_entrada: number; + + @ViewColumn() + tipo_entrada: string; +} diff --git a/src/equipo-tipo-entrada/equipo-tipo-entrada.module.ts b/src/equipo-tipo-entrada/equipo-tipo-entrada.module.ts index 95311ad..e894653 100644 --- a/src/equipo-tipo-entrada/equipo-tipo-entrada.module.ts +++ b/src/equipo-tipo-entrada/equipo-tipo-entrada.module.ts @@ -1,9 +1,10 @@ -import { Module } from '@nestjs/common'; +import { forwardRef, Module } from '@nestjs/common'; import { PassportModule } from '@nestjs/passport'; import { TypeOrmModule } from '@nestjs/typeorm'; import { EquipoTipoEntradaController } from './equipo-tipo-entrada.controller'; import { EquipoTipoEntradaService } from './equipo-tipo-entrada.service'; import { EquipoTipoEntrada } from '../equipo-tipo-entrada/entity/equipo-tipo-entrada.entity'; +import { FullInformacionEquipoTipoEntradaView } from './entity/views/full-informacion-equipo-tipo-entrada.view'; import { InformacionEquipoTipoEntradaView } from './entity/views/informacion-equipo-tipo-entrada.view'; import { EquipoModule } from '../equipo/equipo.module'; import { InstitucionTipoEntradaModule } from '../institucion-tipo-entrada/institucion-tipo-entrada.module'; @@ -11,11 +12,12 @@ import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module' @Module({ imports: [ - EquipoModule, + forwardRef(() => EquipoModule), InstitucionTipoEntradaModule, PassportModule.register({ defaultStrategy: 'jwt' }), TypeOrmModule.forFeature([ EquipoTipoEntrada, + FullInformacionEquipoTipoEntradaView, InformacionEquipoTipoEntradaView, ]), ValidarUsuarioModule, diff --git a/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts b/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts index 5534d83..0c18787 100644 --- a/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts +++ b/src/equipo-tipo-entrada/equipo-tipo-entrada.service.ts @@ -1,9 +1,15 @@ -import { ConflictException, Injectable } from '@nestjs/common'; +import { + ConflictException, + forwardRef, + Inject, + Injectable, +} from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Equipo } from '../equipo/entity/equipo.entity'; import { EquipoTipoEntrada } from './entity/equipo-tipo-entrada.entity'; import { TipoEntrada } from '../institucion-tipo-entrada/entity/tipo-entrada.entity'; +import { FullInformacionEquipoTipoEntradaView } from './entity/views/full-informacion-equipo-tipo-entrada.view'; import { InformacionEquipoTipoEntradaView } from './entity/views/informacion-equipo-tipo-entrada.view'; import { EquipoService } from '../equipo/equipo.service'; import { InstitucionTipoEntradaService } from '../institucion-tipo-entrada/institucion-tipo-entrada.service'; @@ -14,7 +20,10 @@ export class EquipoTipoEntradaService { @InjectRepository(EquipoTipoEntrada) private repository: Repository, @InjectRepository(InformacionEquipoTipoEntradaView) + private fullInformacionEquipoTipoEntradaView: Repository, + @InjectRepository(FullInformacionEquipoTipoEntradaView) private informacionEquipoTipoEntradaView: Repository, + @Inject(forwardRef(() => EquipoService)) private equipoService: EquipoService, private institucionTipoEntradaService: InstitucionTipoEntradaService, ) {} @@ -80,6 +89,29 @@ export class EquipoTipoEntradaService { }); } + findFullInfoEquipoTipoEntradaAllByIdEquipo(id_equipo: number) { + return this.fullInformacionEquipoTipoEntradaView + .find({ + where: { id_equipo }, + }) + .then((infoEquipoTipoEntradas) => { + const equipoProgramas: EquipoTipoEntrada[] = []; + + for (let i = 0; i < infoEquipoTipoEntradas.length; i++) + equipoProgramas.push( + this.repository.create({ + id_equipo_tipo_entrada: + infoEquipoTipoEntradas[i].id_equipo_tipo_entrada, + tipoEntrada: { + id_tipo_entrada: infoEquipoTipoEntradas[i].id_tipo_entrada, + tipo_entrada: infoEquipoTipoEntradas[i].tipo_entrada, + }, + }), + ); + return equipoProgramas; + }); + } + informacionEquipoTipoEntrada(id_equipo: number, id_tipo_entrada: number) { return this.informacionEquipoTipoEntradaView.findOne({ where: { id_equipo, id_tipo_entrada }, diff --git a/src/equipo/entity/views/full-informacion-equipo.view.ts b/src/equipo/entity/views/full-informacion-equipo.view.ts index ae03566..07d443c 100644 --- a/src/equipo/entity/views/full-informacion-equipo.view.ts +++ b/src/equipo/entity/views/full-informacion-equipo.view.ts @@ -21,23 +21,20 @@ import { TipoCarrito } from '../../../institucion-tipo-carrito/entity/tipo-carri .addSelect('e.numero_inventario', 'numero_inventario') .addSelect('e.numero_serie', 'numero_serie') .addSelect('e.prestado', 'prestado') - .addSelect('c.activo', 'activo_carrito') .addSelect('c.carrito', 'carrito') .addSelect('c.id_modulo', 'id_modulo') .addSelect('c.id_tipo_carrito', 'id_tipo_carrito') .addSelect('ma.marca', 'marca') .addSelect('mo.modelo', 'modelo') .addSelect('s.status', 'status') - .addSelect('m.activo', 'activo_modulo') .addSelect('m.id_institucion', 'id_institucion') .addSelect('m.modulo', 'modulo') .addSelect('tc.tipo_carrito', 'tipo_carrito') - .addSelect('i.activo', 'activo_institucion') .addSelect('i.institucion', 'institucion') .from(Equipo, 'e') .innerJoin(Carrito, 'c', 'c.id_carrito = e.id_carrito') .innerJoin(Marca, 'ma', 'ma.id_marca = e.id_marca') - .innerJoin(Modelo, 'mo', 'mo.id_modelo = e.modelo') + .innerJoin(Modelo, 'mo', 'mo.id_modelo = e.id_modelo') .innerJoin(Status, 's', 's.id_status = e.id_status') .innerJoin(Modulo, 'm', 'm.id_modulo = c.id_modulo') .innerJoin(TipoCarrito, 'tc', 'tc.id_tipo_carrito = c.id_tipo_carrito') @@ -52,15 +49,6 @@ export class FullInformacionEquipoView { @ViewColumn() id_equipo: number; - @ViewColumn() - activo_carrito: boolean; - - @ViewColumn() - activo_institucion: boolean; - - @ViewColumn() - activo_modulo: boolean; - @ViewColumn() carrito: string; diff --git a/src/equipo/equipo.module.ts b/src/equipo/equipo.module.ts index e0a65a6..964fa8f 100644 --- a/src/equipo/equipo.module.ts +++ b/src/equipo/equipo.module.ts @@ -8,6 +8,7 @@ import { FullInformacionEquipoView } from './entity/views/full-informacion-equip import { InformacionEquipoView } from './entity/views/informacion-equipo.view'; import { CarritoModule } from '../carrito/carrito.module'; import { EquipoProgramaModule } from '../equipo-programa/equipo-programa.module'; +import { EquipoTipoEntradaModule } from '../equipo-tipo-entrada/equipo-tipo-entrada.module'; import { InstitucionModule } from '../institucion/institucion.module'; import { InstitucionProgramaModule } from '../institucion-programa/institucion-programa.module'; import { InstitucionTipoCarritoModule } from '../institucion-tipo-carrito/institucion-tipo-carrito.module'; @@ -24,6 +25,7 @@ import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module' imports: [ CarritoModule, forwardRef(() => EquipoProgramaModule), + forwardRef(() => EquipoTipoEntradaModule), InstitucionModule, InstitucionProgramaModule, InstitucionTipoCarritoModule, diff --git a/src/equipo/equipo.service.ts b/src/equipo/equipo.service.ts index 76e3bde..dbd945f 100644 --- a/src/equipo/equipo.service.ts +++ b/src/equipo/equipo.service.ts @@ -22,6 +22,7 @@ import { InformacionEquipoView } from './entity/views/informacion-equipo.view'; import { FullInformacionEquipoView } from './entity/views/full-informacion-equipo.view'; import { CarritoService } from '../carrito/carrito.service'; import { EquipoProgramaService } from '../equipo-programa/equipo-programa.service'; +import { EquipoTipoEntradaService } from '../equipo-tipo-entrada/equipo-tipo-entrada.service'; import { InstitucionService } from '../institucion/institucion.service'; import { InstitucionProgramaService } from '../institucion-programa/institucion-programa.service'; import { InstitucionTipoCarritoService } from '../institucion-tipo-carrito/institucion-tipo-carrito.service'; @@ -44,6 +45,8 @@ export class EquipoService { private carritoService: CarritoService, @Inject(forwardRef(() => EquipoProgramaService)) private equipoProgramaService: EquipoProgramaService, + @Inject(forwardRef(() => EquipoTipoEntradaService)) + private equipoTipoEntradaService: EquipoTipoEntradaService, private institucionService: InstitucionService, private institucionProgramaService: InstitucionProgramaService, private institucionTipoCarritoService: InstitucionTipoCarritoService, @@ -391,11 +394,21 @@ export class EquipoService { }, }), ) - .then((infoEquipo) => { + .then(async (infoEquipo) => { if (!infoEquipo) throw new NotFoundException( 'No existe un equipo de cómputo con este número de inventario.', ); + + const programas = + await this.equipoProgramaService.findFullInfoEquipoProgramaAllByIdEquipo( + infoEquipo.id_equipo, + ); + const tiposEntradas = + await this.equipoTipoEntradaService.findFullInfoEquipoTipoEntradaAllByIdEquipo( + infoEquipo.id_equipo, + ); + return this.repository.create({ id_equipo: infoEquipo.id_equipo, equipo: infoEquipo.equipo, @@ -429,6 +442,8 @@ export class EquipoService { id_status: infoEquipo.id_status, status: infoEquipo.status, }, + programas, + tiposEntradas, }); }); }