diff --git a/sql/18-todo.sql b/sql/18-todo.sql index 7bfddb5..e236a37 100644 --- a/sql/18-todo.sql +++ b/sql/18-todo.sql @@ -2087,4 +2087,3 @@ INSERT INTO institucion_dia(id_institucion, id_dia) VALUES(1000, 3); INSERT INTO institucion_dia(id_institucion, id_dia) VALUES(1000, 4); INSERT INTO institucion_dia(id_institucion, id_dia) VALUES(1000, 5); INSERT INTO institucion_dia(id_institucion, id_dia) VALUES(1000, 6); - diff --git a/src/carrito/carrito.controller.ts b/src/carrito/carrito.controller.ts index 1f89670..089bdb3 100644 --- a/src/carrito/carrito.controller.ts +++ b/src/carrito/carrito.controller.ts @@ -76,18 +76,18 @@ export class CarritoController { type: 'string', required: false, }) - // @ApiQuery({ - // description: 'Id de la marca.', - // name: 'id_marca', - // type: 'string', - // required: false, - // }) - // @ApiQuery({ - // description: 'Id del modelo.', - // name: 'id_modelo', - // type: 'string', - // required: false, - // }) + @ApiQuery({ + description: 'Id de la marca.', + name: 'id_marca', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Id del modelo.', + name: 'id_modelo', + type: 'string', + required: false, + }) @ApiQuery({ description: 'Id del módulo.', name: 'id_modulo', @@ -122,8 +122,8 @@ export class CarritoController { return this.carritoService.create( body.id_modulo, body.id_tipo_carrito, - body.marca, - body.modelo, + body.id_marca, + body.id_modelo, ); } @@ -141,20 +141,11 @@ export class CarritoController { value: { id_carrito: 1, _activo: true, - _carrito: '', - // _id_marca: '', - // _id_modelo: '', - _marca: '', - _modelo: '', }, }, }, }) update(@Body() body: UpdateCarritoDto) { - const data = { ...body }; - - // delete data.id_marca; - // delete data.id_modelo; - return this.carritoService.update(data); + return this.carritoService.update(body); } } diff --git a/src/carrito/carrito.service.ts b/src/carrito/carrito.service.ts index fd6d4cb..02b3735 100644 --- a/src/carrito/carrito.service.ts +++ b/src/carrito/carrito.service.ts @@ -28,18 +28,16 @@ export class CarritoService { async create( id_modulo: number, id_tipo_carrito: number, - marca: string, - modelo: string, - // id_marca: number, - // id_modelo: number, + id_marca: number, + id_modelo: number, ) { - // const marca = await this.marcaService.findById(id_marca); - // const modelo = await this.modeloService.findById(id_modelo); const modulo = await this.moduloService.findById(id_modulo); const tipoCarrito = await this.institucionTipoCarritoService.findTipoCarritoById( id_tipo_carrito, ); + const marca = await this.marcaService.findById(id_marca, 'c'); + const modelo = await this.modeloService.findById(id_modelo, 'c'); return this.repository .count({ modulo, tipoCarrito }) @@ -72,12 +70,12 @@ export class CarritoService { const institucion = filtros.id_institucion ? await this.institucionService.findById(parseInt(filtros.id_institucion)) : null; - // const marca = filtros.id_marca - // ? await this.marcaService.findById(parseInt(filtros.id_marca)) - // : null; - // const modelo = filtros.id_modelo - // ? await this.modeloService.findById(parseInt(filtros.id_modelo)) - // : null; + const marca = filtros.id_marca + ? await this.marcaService.findById(parseInt(filtros.id_marca), 'c') + : null; + const modelo = filtros.id_modelo + ? await this.modeloService.findById(parseInt(filtros.id_modelo), 'c') + : null; const modulo = filtros.id_modulo ? await this.moduloService.findById(parseInt(filtros.id_modulo)) : null; @@ -88,6 +86,8 @@ export class CarritoService { : null; const query = this.repository .createQueryBuilder('c') + .innerJoinAndSelect('c.marca', 'ma') + .innerJoinAndSelect('c.modelo', 'mo') .innerJoinAndSelect('c.modulo', 'm') .innerJoinAndSelect('c.tipoCarrito', 'tc') .innerJoinAndSelect('m.institucion', 'i') @@ -108,6 +108,14 @@ export class CarritoService { query.andWhere('i.id_institucion = :id_institucion', { id_institucion: institucion.id_institucion, }); + if (marca) + query.andWhere('ma.id_marca = :id_marca', { + id_marca: marca.id_marca, + }); + if (modelo) + query.andWhere('mo.id_modelo = :id_modelo', { + id_modelo: modelo.id_modelo, + }); if (modulo) query.andWhere('m.id_modulo = :id_modulo', { id_modulo: modulo.id_modulo, diff --git a/src/carrito/dto/input/carritos.dto.ts b/src/carrito/dto/input/carritos.dto.ts index d0d5a83..917a3fa 100644 --- a/src/carrito/dto/input/carritos.dto.ts +++ b/src/carrito/dto/input/carritos.dto.ts @@ -23,13 +23,13 @@ export class CarritosDto { @IsOptional() id_institucion?: string; - // @IsNumberString() - // @IsOptional() - // id_marca?: string; + @IsNumberString() + @IsOptional() + id_marca?: string; - // @IsNumberString() - // @IsOptional() - // id_modelo?: string; + @IsNumberString() + @IsOptional() + id_modelo?: string; @IsNumberString() @IsOptional() diff --git a/src/carrito/dto/input/create.dto.ts b/src/carrito/dto/input/create.dto.ts index 9ce4083..cf30959 100644 --- a/src/carrito/dto/input/create.dto.ts +++ b/src/carrito/dto/input/create.dto.ts @@ -1,21 +1,15 @@ -import { IsInt, IsString } from 'class-validator'; +import { IsInt } from 'class-validator'; export class CreateCarritoDto { + @IsInt() + id_marca: number; + + @IsInt() + id_modelo: number; + @IsInt() id_modulo: number; @IsInt() id_tipo_carrito: number; - - // @IsInt() - // id_marca: number; - - // @IsInt() - // id_modulo: number; - - @IsString() - marca: string; - - @IsString() - modelo: string; } diff --git a/src/carrito/dto/input/update.dto.ts b/src/carrito/dto/input/update.dto.ts index 70fbd92..26e5986 100644 --- a/src/carrito/dto/input/update.dto.ts +++ b/src/carrito/dto/input/update.dto.ts @@ -7,20 +7,4 @@ export class UpdateCarritoDto { @IsBoolean() @IsOptional() activo?: boolean; - - // @IsInt() - // @IsOptional() - // id_marca?: number; - - // @IsInt() - // @IsOptional() - // id_modelo?: number; - - @IsString() - @IsOptional() - marca?: string; - - @IsString() - @IsOptional() - modelo?: string; } diff --git a/src/carrito/dto/output/carrito.dto.ts b/src/carrito/dto/output/carrito.dto.ts index 412c08f..1fac1b5 100644 --- a/src/carrito/dto/output/carrito.dto.ts +++ b/src/carrito/dto/output/carrito.dto.ts @@ -15,11 +15,11 @@ export class CarritoOutputDto { carrito; @Expose() - // @Type(() => MarcaOutputDto) + @Type(() => MarcaOutputDto) marca; @Expose() - // @Type(() => ModeloOutputDto) + @Type(() => ModeloOutputDto) modelo; @Expose() diff --git a/src/carrito/entity/carrito.entity.ts b/src/carrito/entity/carrito.entity.ts index cabe0d5..6d34a7e 100644 --- a/src/carrito/entity/carrito.entity.ts +++ b/src/carrito/entity/carrito.entity.ts @@ -23,17 +23,13 @@ export class Carrito { @Column({ type: String, nullable: false, length: 4 }) carrito: string; - // @ManyToOne(() => Marca, (marca) => marca.carritos, { eager: true }) - // @JoinColumn({ name: 'id_marca' }) - @Column({ type: String, nullable: false, length: 30 }) - marca: string; - // marca: Marca; + @ManyToOne(() => Marca, (marca) => marca.carritos, { eager: true }) + @JoinColumn({ name: 'id_marca' }) + marca: Marca; - // @ManyToOne(() => Modelo, (modelo) => modelo.carritos, { eager: true }) - // @JoinColumn({ name: 'id_modelo' }) - @Column({ type: String, nullable: false, length: 30 }) - modelo: string; - // modelo: Modelo; + @ManyToOne(() => Modelo, (modelo) => modelo.carritos, { eager: true }) + @JoinColumn({ name: 'id_modelo' }) + modelo: Modelo; @ManyToOne(() => Modulo, (modulo) => modulo.carritos, { eager: true }) @JoinColumn({ name: 'id_modulo' }) diff --git a/src/equipo/dto/input/equipos.dto.ts b/src/equipo/dto/input/equipos.dto.ts index 1a02f62..8f6344a 100644 --- a/src/equipo/dto/input/equipos.dto.ts +++ b/src/equipo/dto/input/equipos.dto.ts @@ -27,13 +27,13 @@ export class EquiposDto { @IsOptional() id_institucion?: string; - // @IsInt() - // @IsOptional() - // id_marca?: number; + @IsNumberString() + @IsOptional() + id_marca?: string; - // @IsInt() - // @IsOptional() - // id_modelo?: number; + @IsNumberString() + @IsOptional() + id_modelo?: string; @IsNumberString() @IsOptional() diff --git a/src/equipo/dto/input/update.dto.ts b/src/equipo/dto/input/update.dto.ts index e253c1c..3083155 100644 --- a/src/equipo/dto/input/update.dto.ts +++ b/src/equipo/dto/input/update.dto.ts @@ -1,4 +1,10 @@ -import { IsInt, IsNotEmpty, IsOptional, IsString, MaxLength } from 'class-validator'; +import { + IsInt, + IsNotEmpty, + IsOptional, + IsString, + MaxLength, +} from 'class-validator'; export class UpdateEquipoDto { @IsInt() @@ -29,14 +35,6 @@ export class UpdateEquipoDto { @IsOptional() id_status?: number; - @IsString() - @IsOptional() - marca?: string; - - @IsString() - @IsOptional() - modelo?: string; - @IsString() @IsNotEmpty() @MaxLength(250) diff --git a/src/equipo/dto/output/equipo.dto.ts b/src/equipo/dto/output/equipo.dto.ts index 95f8187..895d952 100644 --- a/src/equipo/dto/output/equipo.dto.ts +++ b/src/equipo/dto/output/equipo.dto.ts @@ -13,14 +13,6 @@ export class EquipoOutputDto { @Expose() equipo; - @Expose() - // @Type(() => MarcaOutputDto) - marca; - - @Expose() - // @Type(() => ModeloOutputDto) - modelo; - @Expose() numero_inventario; @@ -31,6 +23,14 @@ export class EquipoOutputDto { @Type(() => CarritoMinOutputDto) carrito; + @Expose() + @Type(() => MarcaOutputDto) + marca; + + @Expose() + @Type(() => ModeloOutputDto) + modelo; + @Expose() @Type(() => EquipoProgramaOutputDto) programas; diff --git a/src/equipo/entity/equipo.entity.ts b/src/equipo/entity/equipo.entity.ts index b21c0e2..eb348ad 100644 --- a/src/equipo/entity/equipo.entity.ts +++ b/src/equipo/entity/equipo.entity.ts @@ -23,12 +23,6 @@ export class Equipo { @Column({ type: String, nullable: false, length: 4 }) equipo: string; - @Column({ type: String, nullable: false, length: 30 }) - marca: string; - - @Column({ type: String, nullable: false, length: 30 }) - modelo: string; - @Column({ type: String, nullable: false, length: 30 }) numero_inventario: string; @@ -42,13 +36,13 @@ export class Equipo { @JoinColumn({ name: 'id_carrito' }) carrito: Carrito; - // @ManyToOne(() => Marca, (marca) => marca.equipos, { eager: true }) - // @JoinColumn({ name: 'id_marca' }) - // marca: Marca; + @ManyToOne(() => Marca, (marca) => marca.equipos, { eager: true }) + @JoinColumn({ name: 'id_marca' }) + marca: Marca; - // @ManyToOne(() => Modelo, (modelo) => modelo.equipos, { eager: true }) - // @JoinColumn({ name: 'id_modelo' }) - // modelo: Modelo; + @ManyToOne(() => Modelo, (modelo) => modelo.equipos, { eager: true }) + @JoinColumn({ name: 'id_modelo' }) + modelo: Modelo; @ManyToOne(() => Status, (status) => status.equipos, { eager: true }) @JoinColumn({ name: 'id_status' }) diff --git a/src/equipo/equipo.controller.ts b/src/equipo/equipo.controller.ts index 7084765..d1c6498 100644 --- a/src/equipo/equipo.controller.ts +++ b/src/equipo/equipo.controller.ts @@ -82,18 +82,18 @@ export class EquipoController { type: 'string', required: false, }) - // @ApiQuery({ - // description: 'Id de la marca que se quiere usar como filtro.', - // name: 'id_marca', - // type: 'string', - // required: false, - // }) - // @ApiQuery({ - // description: 'Id del modelo que se quiere usar como filtro.', - // name: 'id_modelo', - // type: 'string', - // required: false, - // }) + @ApiQuery({ + description: 'Id de la marca que se quiere usar como filtro.', + name: 'id_marca', + type: 'string', + required: false, + }) + @ApiQuery({ + description: 'Id del modelo que se quiere usar como filtro.', + name: 'id_modelo', + type: 'string', + required: false, + }) @ApiQuery({ description: 'Id del módulo que se quiere usar como filtro.', name: 'id_modulo', @@ -147,8 +147,6 @@ export class EquipoController { // _id_modelo: '', _id_operador: 1, _id_status: 1, - _marca: '', - _modelo: '', _motivo: '', }, }, diff --git a/src/equipo/equipo.service.ts b/src/equipo/equipo.service.ts index 2b50b6c..c4cb886 100644 --- a/src/equipo/equipo.service.ts +++ b/src/equipo/equipo.service.ts @@ -10,8 +10,8 @@ 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 { Marca } from '../marca/entity/marca.entity'; -// import { Modelo } from '../modelo/entity/modelo.entity'; +import { Marca } from '../marca/entity/marca.entity'; +import { Modelo } from '../modelo/entity/modelo.entity'; import { Modulo } from '../modulo/entity/modulo.entity'; import { Operador } from '../operador/entity/operador.entity'; import { Programa } from '../institucion-programa/entity/programa.entity'; @@ -55,8 +55,8 @@ export class EquipoService { equipo: string, numero_inventario: string, numero_serie: string, - marca: string, // Marca, - modelo: string, // Modelo, + marca: Marca, + modelo: Modelo, ) { const activo = await this.statusService.findById(1); const equipoNuevo = await this.repository.save( @@ -96,12 +96,12 @@ export class EquipoService { const institucion = filtros.id_institucion ? await this.institucionService.findById(parseInt(filtros.id_institucion)) : null; - // const marca = filtros.id_marca - // ? await this.marcaService.findById(parseInt(filtros.id_marca)) - // : null; - // const modelo = filtros.id_modelo - // ? await this.modeloService.findById(parseInt(filtros.id_modelo)) - // : null; + const marca = filtros.id_marca + ? await this.marcaService.findById(parseInt(filtros.id_marca), 'e') + : null; + const modelo = filtros.id_modelo + ? await this.modeloService.findById(parseInt(filtros.id_modelo), 'e') + : null; const modulo = filtros.id_modulo ? await this.moduloService.findById(parseInt(filtros.id_modulo)) : null; @@ -126,6 +126,8 @@ export class EquipoService { const query = this.repository .createQueryBuilder('e') .innerJoinAndSelect('e.carrito', 'c') + .innerJoinAndSelect('e.marca', 'ma') + .innerJoinAndSelect('e.modelo', 'mo') .innerJoinAndSelect('e.programas', 'ps') .innerJoinAndSelect('e.status', 's') .innerJoinAndSelect('e.tiposEntradas', 'tes') @@ -154,14 +156,14 @@ export class EquipoService { query.andWhere('m.id_institucion = :id_institucion', { id_institucion: institucion.id_institucion, }); - // if (marca) - // query.andWhere('m.id_marca = :id_marca', { - // id_marca: marca.id_marca, - // }); - // if (modelo) - // query.andWhere('m.id_modelo = :id_modelo', { - // id_modelo: modelo.id_modelo, - // }); + if (marca) + query.andWhere('ma.id_marca = :id_marca', { + id_marca: marca.id_marca, + }); + if (modelo) + query.andWhere('mo.id_modelo = :id_modelo', { + id_modelo: modelo.id_modelo, + }); if (modulo) query.andWhere('m.id_modulo = :id_modulo', { id_modulo: modulo.id_modulo, diff --git a/src/marca/entity/marca.entity.ts b/src/marca/entity/marca.entity.ts index 3ce543e..a15ce2a 100644 --- a/src/marca/entity/marca.entity.ts +++ b/src/marca/entity/marca.entity.ts @@ -1,6 +1,6 @@ import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from 'typeorm'; -// import { Carrito } from '../../carrito/entity/carrito.entity'; -// import { Equipo } from '../../equipo/entity/equipo.entity'; +import { Carrito } from '../../carrito/entity/carrito.entity'; +import { Equipo } from '../../equipo/entity/equipo.entity'; @Entity() export class Marca { @@ -13,9 +13,9 @@ export class Marca { @Column({ type: String, nullable: false, length: 1 }) tipo: string; - // @OneToMany(() => Carrito, (carrito) => carrito.marca) - // carritos: Carrito[]; + @OneToMany(() => Carrito, (carrito) => carrito.marca) + carritos: Carrito[]; - // @OneToMany(() => Equipo, (equipo) => equipo.marca) - // equipos: Equipo[]; + @OneToMany(() => Equipo, (equipo) => equipo.marca) + equipos: Equipo[]; } diff --git a/src/marca/marca.service.ts b/src/marca/marca.service.ts index 91fbf6e..9978138 100644 --- a/src/marca/marca.service.ts +++ b/src/marca/marca.service.ts @@ -22,6 +22,14 @@ export class MarcaService { return this.repository.find({ where: { tipo }, order: { tipo: 'ASC' } }); } + findById(id_marca: number, tipo: string, validarExistencia = true) { + return this.repository.findOne({ id_marca, tipo }).then((marca) => { + if (validarExistencia && !marca) + throw new ConflictException('No existe esta marca.'); + return marca; + }); + } + findByMarca(marca: string, tipo: string, validarExistencia = true) { return this.repository.findOne({ marca, tipo }).then((marca) => { if (validarExistencia && !marca) diff --git a/src/modelo/entity/modelo.entity.ts b/src/modelo/entity/modelo.entity.ts index ddde7e1..d9ade02 100644 --- a/src/modelo/entity/modelo.entity.ts +++ b/src/modelo/entity/modelo.entity.ts @@ -1,6 +1,6 @@ import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from 'typeorm'; -// import { Carrito } from '../../carrito/entity/carrito.entity'; -// import { Equipo } from '../../equipo/entity/equipo.entity'; +import { Carrito } from '../../carrito/entity/carrito.entity'; +import { Equipo } from '../../equipo/entity/equipo.entity'; @Entity() export class Modelo { @@ -13,9 +13,9 @@ export class Modelo { @Column({ type: String, nullable: false, length: 1 }) tipo: string; - // @OneToMany(() => Carrito, (carrito) => carrito.modelo) - // carritos: Carrito[]; + @OneToMany(() => Carrito, (carrito) => carrito.modelo) + carritos: Carrito[]; - // @OneToMany(() => Equipo, (equipo) => equipo.modelo) - // equipos: Equipo[]; + @OneToMany(() => Equipo, (equipo) => equipo.modelo) + equipos: Equipo[]; } diff --git a/src/modelo/modelo.service.ts b/src/modelo/modelo.service.ts index 08aff64..35ad836 100644 --- a/src/modelo/modelo.service.ts +++ b/src/modelo/modelo.service.ts @@ -24,6 +24,13 @@ export class ModeloService { return this.repository.find({ where: { tipo }, order: { tipo: 'ASC' } }); } + findById(id_modelo: number, tipo: string, validarExistencia = true) { + return this.repository.findOne({ id_modelo, tipo }).then((modelo) => { + if (validarExistencia && !modelo) + throw new ConflictException('No existe este modelo.'); + return modelo; + }); + } findByModelo(modelo: string, tipo: string, validarExistencia = true) { return this.repository.findOne({ modelo, tipo }).then((modelo) => { if (validarExistencia && !modelo) diff --git a/src/upload-file/upload-file.module.ts b/src/upload-file/upload-file.module.ts index 5b89df7..29d94af 100644 --- a/src/upload-file/upload-file.module.ts +++ b/src/upload-file/upload-file.module.ts @@ -13,6 +13,8 @@ import { InstitucionProgramaModule } from '../institucion-programa/institucion-p import { InstitucionTipoCarritoModule } from '../institucion-tipo-carrito/institucion-tipo-carrito.module'; import { InstitucionTipoEntradaModule } from '../institucion-tipo-entrada/institucion-tipo-entrada.module'; import { InstitucionUsuarioModule } from '../institucion-usuario/institucion-usuario.module'; +import { MarcaModule } from '../marca/marca.module'; +import { ModeloModule } from '../modelo/modelo.module'; import { ModuloModule } from '../modulo/modulo.module'; import { TipoUsuarioModule } from '../tipo-usuario/tipo-usuario.module'; import { UsuarioModule } from '../usuario/usuario.module'; @@ -29,6 +31,8 @@ import { UsuarioModule } from '../usuario/usuario.module'; InstitucionTipoCarritoModule, InstitucionTipoEntradaModule, InstitucionUsuarioModule, + MarcaModule, + ModeloModule, ModuloModule, MulterModule.register({ dest: './upload', diff --git a/src/upload-file/upload-file.service.ts b/src/upload-file/upload-file.service.ts index bf6409c..57056b3 100644 --- a/src/upload-file/upload-file.service.ts +++ b/src/upload-file/upload-file.service.ts @@ -12,6 +12,8 @@ import { InstitucionProgramaService } from '../institucion-programa/institucion- import { InstitucionTipoCarritoService } from '../institucion-tipo-carrito/institucion-tipo-carrito.service'; import { InstitucionTipoEntradaService } from '../institucion-tipo-entrada/institucion-tipo-entrada.service'; import { InstitucionUsuarioService } from '../institucion-usuario/institucion-usuario.service'; +import { MarcaService } from '../marca/marca.service'; +import { ModeloService } from '../modelo/modelo.service'; import { ModuloService } from '../modulo/modulo.service'; import { TipoUsuarioService } from '../tipo-usuario/tipo-usuario.service'; import { UsuarioService } from '../usuario/usuario.service'; @@ -31,6 +33,8 @@ export class UploadFileService { private institucionTipoCarritoService: InstitucionTipoCarritoService, private institucionTipoEntradaService: InstitucionTipoEntradaService, private institucionUsuarioService: InstitucionUsuarioService, + private marcaService: MarcaService, + private modeloService: ModeloService, private moduloService: ModuloService, private tipoUsuarioService: TipoUsuarioService, private usuarioService: UsuarioService, @@ -92,6 +96,16 @@ export class UploadFileService { equipos[i].modulo, false, ); + const marca = await this.marcaService.findByMarca( + equipos[i].marca, + 'e', + false, + ); + const modelo = await this.modeloService.findByModelo( + equipos[i].modelo, + 'e', + false, + ); const carrito = tipoCarrito && modulo ? await this.carritoService.findCarrito( @@ -109,8 +123,10 @@ export class UploadFileService { ) : null; - if (!tipoCarrito || !modulo || !carrito) { + if (!tipoCarrito || !marca || !modelo || !modulo || !carrito) { if (!tipoCarrito) error += ' no existe este tipo de carrito.'; + if (!marca) error += ' no existe esta marca.'; + if (!modelo) error += ' no existe este modelo.'; if (!modulo) error += ' no existe este módulo.'; if (!carrito) error += ' no existe este carrito.'; errores.push(error); @@ -137,8 +153,8 @@ export class UploadFileService { equipos[i].equipo, equipos[i].numero_inventario, equipos[i].numero_serie, - equipos[i].marca, - equipos[i].modelo, + marca, + modelo, ); const entradas = equipos[i].entradas.split(',');