carritos views

This commit is contained in:
xXpuma99Xx
2022-09-25 19:47:28 -05:00
parent 9723e1b0d7
commit 7f310256ba
9 changed files with 282 additions and 105 deletions
+4
View File
@@ -71,6 +71,8 @@ import { TipoEntrada } from './institucion-tipo-entrada/entity/tipo-entrada.enti
import { TipoUsuario } from './tipo-usuario/entity/tipo-usuario.entity';
import { Usuario } from './usuario/entity/usuario.entity';
import { InformacionCarritoView } from './carrito/entity/views/informacion-carrito.view';
import { MinInformacionCarritoView } from './carrito/entity/views/min-informacion-carrito.view';
import { FullInformacionEquipoView } from './equipo/entity/views/full-informacion-equipo.view';
import { InformacionEquipoView } from './equipo/entity/views/informacion-equipo.view';
import { InformacionEquipoProgramaView } from './equipo-programa/entity/views/informacion-equipo-programa.view';
@@ -144,6 +146,8 @@ import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuar
TipoEntrada,
TipoUsuario,
Usuario,
InformacionCarritoView,
MinInformacionCarritoView,
FullInformacionEquipoView,
InformacionEquipoView,
InformacionEquipoProgramaView,
+5 -4
View File
@@ -53,7 +53,7 @@ export class CarritoController {
this.validarUsuarioService.validarAdminOperador(operador);
return this.carritoService
.findById(parseInt(query.id_carrito))
.findFullInfoCarritoById(parseInt(query.id_carrito))
.then((carrito) => {
if (
operador.tipoUsuario.id_tipo_usuario > 2 &&
@@ -126,7 +126,7 @@ export class CarritoController {
const operador: Operador = req.user.operador;
this.validarUsuarioService.validarAdminOperador(operador);
return this.carritoService.findAll(operador, query);
return this.carritoService.findMinInfoCarritoAll(query);
}
@Post()
@@ -139,7 +139,7 @@ export class CarritoController {
description: 'Todas las variables son obligatorias.',
examples: {
ejemplo: {
value: { id_modulo: 1, id_tipo_carrito: 1, marca: '', modelo: '' },
value: { id_modulo: 1, id_tipo_carrito: 1, id_marca: 1, id_modelo: 1 },
},
},
})
@@ -169,7 +169,8 @@ export class CarritoController {
ejemplo: {
value: {
id_carrito: 1,
_activo: true,
activo: true,
motivo: '',
},
},
},
+7 -1
View File
@@ -4,6 +4,8 @@ import { TypeOrmModule } from '@nestjs/typeorm';
import { CarritoController } from './carrito.controller';
import { CarritoService } from './carrito.service';
import { Carrito } from './entity/carrito.entity';
import { InformacionCarritoView } from './entity/views/informacion-carrito.view';
import { MinInformacionCarritoView } from './entity/views/min-informacion-carrito.view';
import { CarritoMotivoModule } from '../carrito-motivo/carrito-motivo.module';
import { InstitucionModule } from '../institucion/institucion.module';
import { InstitucionTipoCarritoModule } from '../institucion-tipo-carrito/institucion-tipo-carrito.module';
@@ -21,7 +23,11 @@ import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'
ModeloModule,
ModuloModule,
PassportModule.register({ defaultStrategy: 'jwt' }),
TypeOrmModule.forFeature([Carrito]),
TypeOrmModule.forFeature([
Carrito,
InformacionCarritoView,
MinInformacionCarritoView,
]),
ValidarUsuarioModule,
],
controllers: [CarritoController],
+158 -87
View File
@@ -7,8 +7,10 @@ import {
NotFoundException,
} from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { FindOperator, Like, Repository } from 'typeorm';
import { Carrito } from './entity/carrito.entity';
import { InformacionCarritoView } from './entity/views/informacion-carrito.view';
import { MinInformacionCarritoView } from './entity/views/min-informacion-carrito.view';
import { Modulo } from '../modulo/entity/modulo.entity';
import { Operador } from '../operador/entity/operador.entity';
import { TipoCarrito } from '../institucion-tipo-carrito/entity/tipo-carrito.entity';
@@ -23,6 +25,10 @@ import { ModuloService } from '../modulo/modulo.service';
export class CarritoService {
constructor(
@InjectRepository(Carrito) private repository: Repository<Carrito>,
@InjectRepository(InformacionCarritoView)
private informacionCarritoView: Repository<InformacionCarritoView>,
@InjectRepository(MinInformacionCarritoView)
private minInformacionCarritoView: Repository<MinInformacionCarritoView>,
@Inject(forwardRef(() => CarritoMotivoService))
private caritoMotivoService: CarritoMotivoService,
private institucionService: InstitucionService,
@@ -39,7 +45,7 @@ export class CarritoService {
id_marca: number,
id_modelo: number,
) {
const modulo = await this.moduloService.findById(id_modulo);
const modulo = await this.moduloService.findInfoModuloById(id_modulo);
const tipoCarrito =
await this.institucionTipoCarritoService.findTipoCarritoById(
id_tipo_carrito,
@@ -51,8 +57,13 @@ export class CarritoService {
throw new ForbiddenException(
'No puedes crear un carrito para este módulo porque no pertenece a tu institución.',
);
return this.repository
.count({ where: { modulo, tipoCarrito } })
return this.informacionCarritoView
.count({
where: {
id_modulo: modulo.id_modulo,
id_tipo_carrito: tipoCarrito.id_tipo_carrito,
},
})
.then((carritos) =>
this.repository.save(
this.repository.create({
@@ -69,87 +80,6 @@ export class CarritoService {
}));
}
async findAll(
operador: Operador,
filtros: {
pagina: string;
activo?: string;
carrito?: string;
id_institucion?: string;
id_marca?: string;
id_modelo?: string;
id_modulo?: string;
id_tipo_carrito?: string;
},
) {
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), '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;
const tipoCarrito = filtros.id_tipo_carrito
? await this.institucionTipoCarritoService.findTipoCarritoById(
parseInt(filtros.id_tipo_carrito),
)
: 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')
.orderBy('i.institucion')
.addOrderBy('m.modulo')
.addOrderBy('tc.tipo_carrito')
.addOrderBy('c.carrito')
.skip((parseInt(filtros.pagina) - 1) * 25)
.take(25);
if (modulo) {
if (
operador.tipoUsuario.id_tipo_usuario > 2 &&
operador.institucion.id_institucion != modulo.institucion.id_institucion
)
throw new ForbiddenException(
'No puedes acceder a esta información porque este módulo no pertenece a tu institución.',
);
query.andWhere('m.id_modulo = :id_modulo', {
id_modulo: modulo.id_modulo,
});
}
if (filtros.activo === 'true') query.andWhere('c.activo = 1');
if (filtros.activo === 'false') query.andWhere('c.activo = 0');
if (filtros.carrito)
query.andWhere('c.carrito LIKE :carrito', {
carrito: `%${filtros.carrito}%`,
});
if (institucion)
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 (tipoCarrito)
query.andWhere('tc.id_tipo_carrito = :id_tipo_carrito', {
id_tipo_carrito: tipoCarrito.id_tipo_carrito,
});
return query.getManyAndCount();
}
findById(id_carrito: number) {
return this.repository
.findOne({ where: { id_carrito } })
@@ -167,7 +97,7 @@ export class CarritoService {
) {
const modulo =
typeof id_modulo === 'number'
? await this.moduloService.findById(id_modulo)
? await this.moduloService.findInfoModuloById(id_modulo)
: id_modulo;
const tipoCarrito =
typeof id_tipo_carrito === 'number'
@@ -185,8 +115,149 @@ export class CarritoService {
});
}
findInfoCarritoById(id_carrito: number) {
return this.informacionCarritoView
.findOne({ where: { id_carrito } })
.then((infoCarrito) => {
if (!infoCarrito)
throw new NotFoundException('No existe este id carrito.');
return this.repository.create({
id_carrito: infoCarrito.id_carrito,
tipoCarrito: {
id_tipo_carrito: infoCarrito.id_tipo_carrito,
},
modulo: {
id_modulo: infoCarrito.id_modulo,
institucion: {
id_institucion: infoCarrito.id_institucion,
},
},
});
});
}
findFullInfoCarritoById(id_carrito: number) {
return this.minInformacionCarritoView
.findOne({ where: { id_carrito } })
.then((infoCarrito) => {
if (!infoCarrito)
throw new NotFoundException('No existe este id carrito.');
return this.repository.create({
id_carrito: infoCarrito.id_carrito,
activo: infoCarrito.activo === 1,
carrito: infoCarrito.carrito,
marca: {
id_marca: infoCarrito.id_marca,
marca: infoCarrito.marca,
},
modelo: {
id_modelo: infoCarrito.id_modelo,
modelo: infoCarrito.modelo,
},
modulo: {
id_modulo: infoCarrito.id_modulo,
modulo: infoCarrito.modulo,
institucion: {
id_institucion: infoCarrito.id_institucion,
institucion: infoCarrito.institucion,
},
},
tipoCarrito: {
id_tipo_carrito: infoCarrito.id_tipo_carrito,
tipo_carrito: infoCarrito.tipo_carrito,
},
});
});
}
async findMinInfoCarritoAll(filtros: {
pagina: string;
activo?: string;
carrito?: string;
id_institucion?: string;
id_marca?: string;
id_modelo?: string;
id_modulo?: string;
id_tipo_carrito?: string;
}) {
const institucion = filtros.id_institucion
? await this.institucionService.findInfoInstitucionById(
parseInt(filtros.id_institucion),
)
: 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.findInfoModuloById(parseInt(filtros.id_modulo))
: null;
const tipoCarrito = filtros.id_tipo_carrito
? await this.institucionTipoCarritoService.findTipoCarritoById(
parseInt(filtros.id_tipo_carrito),
)
: null;
const busqueda: {
activo?: number;
carrito?: FindOperator<string>;
id_institucion?: number;
id_marca?: number;
id_modelo?: number;
id_modulo?: number;
id_tipo_carrito?: number;
} = {};
if (filtros.activo === 'true') busqueda.activo = 1;
if (filtros.activo === 'false') busqueda.activo = 0;
if (filtros.carrito) busqueda.carrito = Like(`%${filtros.carrito}%`);
if (institucion) busqueda.id_institucion = institucion.id_institucion;
if (modulo) busqueda.id_modulo = modulo.id_modulo;
if (marca) busqueda.id_marca = marca.id_marca;
if (modelo) busqueda.id_modelo = modelo.id_modelo;
if (tipoCarrito) busqueda.id_tipo_carrito = tipoCarrito.id_tipo_carrito;
return this.minInformacionCarritoView
.findAndCount({
where: busqueda,
order: {
institucion: 'ASC',
modulo: 'ASC',
tipo_carrito: 'ASC',
carrito: 'ASC',
},
take: 25,
skip: (parseInt(filtros.pagina) - 1) * 25,
})
.then((infoCarritos) => {
const carritos: Carrito[] = [];
for (let i = 0; i < infoCarritos[0].length; i++)
carritos.push(
this.repository.create({
id_carrito: infoCarritos[0][i].id_carrito,
activo: infoCarritos[0][i].activo === 1,
carrito: infoCarritos[0][i].carrito,
modulo: {
id_modulo: infoCarritos[0][i].id_modulo,
modulo: infoCarritos[0][i].modulo,
institucion: {
id_institucion: infoCarritos[0][i].id_institucion,
institucion: infoCarritos[0][i].institucion,
},
},
tipoCarrito: {
id_tipo_carrito: infoCarritos[0][i].id_tipo_carrito,
tipo_carrito: infoCarritos[0][i].tipo_carrito,
},
}),
);
return [carritos, infoCarritos[1]];
});
}
async update(operador: Operador, attrs: Partial<Carrito>, motivo: string) {
return this.findById(attrs.id_carrito)
return this.findInfoCarritoById(attrs.id_carrito)
.then(async (carrito) => {
if (
operador.institucion.id_institucion !=
@@ -0,0 +1,32 @@
import { DataSource, ViewEntity, ViewColumn } from 'typeorm';
import { Carrito } from '../carrito.entity';
import { Modulo } from '../../../modulo/entity/modulo.entity';
@ViewEntity({
expression: (dataSource: DataSource) =>
dataSource
.createQueryBuilder()
.select('c.id_carrito', 'id_carrito')
.addSelect('c.carrito', 'carrito')
.addSelect('c.id_modulo', 'id_modulo')
.addSelect('c.id_tipo_carrito', 'id_tipo_carrito')
.addSelect('m.id_institucion', 'id_institucion')
.from(Carrito, 'c')
.innerJoin(Modulo, 'm', 'm.id_modulo = c.id_modulo'),
})
export class InformacionCarritoView {
@ViewColumn()
id_carrito: number;
@ViewColumn()
carrito: string;
@ViewColumn()
id_institucion: number;
@ViewColumn()
id_modulo: number;
@ViewColumn()
id_tipo_carrito: number;
}
@@ -0,0 +1,72 @@
import { DataSource, ViewEntity, ViewColumn } from 'typeorm';
import { Carrito } from '../carrito.entity';
import { Institucion } from '../../../institucion/entity/institucion.entity';
import { Modulo } from '../../../modulo/entity/modulo.entity';
import { Marca } from '../../../marca/entity/marca.entity';
import { Modelo } from '../../../modelo/entity/modelo.entity';
import { TipoCarrito } from '../../../institucion-tipo-carrito/entity/tipo-carrito.entity';
@ViewEntity({
expression: (dataSource: DataSource) =>
dataSource
.createQueryBuilder()
.select('c.id_carrito', 'id_carrito')
.addSelect('c.activo', 'activo')
.addSelect('c.carrito', 'carrito')
.addSelect('c.id_marca', 'id_marca')
.addSelect('c.id_modelo', 'id_modelo')
.addSelect('c.id_modulo', 'id_modulo')
.addSelect('c.id_tipo_carrito', 'id_tipo_carrito')
.addSelect('m.id_institucion', 'id_institucion')
.addSelect('m.modulo', 'modulo')
.addSelect('ma.marca', 'marca')
.addSelect('mo.modelo', 'modelo')
.addSelect('tc.tipo_carrito', 'tipo_carrito')
.addSelect('i.institucion', 'institucion')
.from(Carrito, 'c')
.innerJoin(Marca, 'ma', 'ma.id_marca = c.id_marca')
.innerJoin(Modelo, 'mo', 'mo.id_modelo = c.id_modelo')
.innerJoin(Modulo, 'm', 'm.id_modulo = c.id_modulo')
.innerJoin(TipoCarrito, 'tc', 'tc.id_tipo_carrito = c.id_tipo_carrito')
.innerJoin(Institucion, 'i', 'i.id_institucion = m.id_institucion'),
})
export class MinInformacionCarritoView {
@ViewColumn()
id_carrito: number;
@ViewColumn()
activo: number;
@ViewColumn()
carrito: string;
@ViewColumn()
id_institucion: number;
@ViewColumn()
id_marca: number;
@ViewColumn()
id_modelo: number;
@ViewColumn()
id_modulo: number;
@ViewColumn()
id_tipo_carrito: number;
@ViewColumn()
institucion: string;
@ViewColumn()
marca: string;
@ViewColumn()
modelo: string;
@ViewColumn()
modulo: string;
@ViewColumn()
tipo_carrito: string;
}
@@ -1,6 +1,5 @@
import { DataSource, ViewEntity, ViewColumn } from 'typeorm';
import { Modulo } from '../modulo.entity';
import { Institucion } from '../../../institucion/entity/institucion.entity';
@ViewEntity({
expression: (dataSource: DataSource) =>
@@ -8,8 +7,7 @@ import { Institucion } from '../../../institucion/entity/institucion.entity';
.createQueryBuilder()
.select('m.id_modulo', 'id_modulo')
.addSelect('m.id_institucion', 'id_institucion')
.from(Modulo, 'm')
.innerJoin(Institucion, 'i', 'i.id_institucion = m.id_institucion'),
.from(Modulo, 'm'),
})
export class InformacionModuloView {
@ViewColumn()
@@ -10,8 +10,8 @@ import { Institucion } from '../../../institucion/entity/institucion.entity';
.addSelect('m.activo', 'activo_modulo')
.addSelect('m.modulo', 'modulo')
.addSelect('m.id_institucion', 'id_institucion')
.addSelect('i.institucion', 'institucion')
.addSelect('i.activo', 'activo_institucion')
.addSelect('i.institucion', 'institucion')
.from(Modulo, 'm')
.innerJoin(Institucion, 'i', 'i.id_institucion = m.id_institucion'),
})
@@ -20,10 +20,10 @@ export class MinInformacionModuloView {
id_modulo: number;
@ViewColumn()
activo_modulo: number;
activo_institucion: number;
@ViewColumn()
activo_institucion: number;
activo_modulo: number;
@ViewColumn()
id_institucion: number;
-7
View File
@@ -250,20 +250,13 @@ export class UploadFileService {
if (equipo) {
errores.push(
`${error} ya existe un equipo de cómputo con el sobrenombre: ${equipo.equipo} en el carrito: ${equipo.carrito}.`,
// `${error} ya existe un equipo de cómputo con el sobrenombre: ${equipo.equipo} en el carrito: ${equipo.carrito.carrito}.`,
);
return;
} else {
// equipo = await this.equipoService.findByNumeroInventario(
// institucion,
// dataEquipo.numero_inventario,
// false,
// );
equipo = await this.equipoService.informacionEquipoNumeroInventario(
institucion.id_institucion,
dataEquipo.numero_inventario,
);
if (equipo) {
errores.push(
`${error} ya existe un equipo con ese número de inventario en esta institución.`,