equipo tipo entrada actualizado

This commit is contained in:
2022-10-15 17:29:24 -05:00
parent 449e2acb5d
commit ace78c2a62
6 changed files with 132 additions and 89 deletions
+28 -26
View File
@@ -46,24 +46,24 @@ export class EquipoProgramaService {
'No puedes modificar la información este equipo porque no pertenece a tu institución.',
);
// Verifica que no eixsta un registro con estos ids
return this.findInfoEquipoProgramaByIdEquipoIdPrograma(
equipo.id_equipo,
programa.id_programa,
).then((existeEquipoPrograma) => {
// Error si existe
if (existeEquipoPrograma)
throw new ConflictException(
'Este software ya fue asignado a este equipo.',
);
// Creo registro
return this.create(equipo, programa);
});
return this.findInfoEquipoProgramaByEquipoPrograma(equipo, programa).then(
(existeEquipoPrograma) => {
// Error si existe
if (existeEquipoPrograma)
throw new ConflictException(
'Este software ya fue asignado a este equipo.',
);
// Creo registro
return this.create(equipo, programa);
},
);
}
async create(equipo: Equipo, programa: Programa) {
create(equipo: Equipo, programa: Programa) {
// Ver si tiene programa "Sin programa"
return this.findInfoEquipoProgramaByIdEquipoIdPrograma(equipo.id_equipo, 1)
return this.findInfoEquipoProgramaByEquipoPrograma(equipo, {
id_programa: 1,
})
.then(async (existeEquipoSinPrograma) => {
// Si tiene lo elimino
if (existeEquipoSinPrograma)
@@ -79,7 +79,7 @@ export class EquipoProgramaService {
}));
}
async createSinPrograma(equipo: Equipo) {
createSinPrograma(equipo: Equipo) {
return this.repository.save(
this.repository.create({ equipo, programa: { id_programa: 1 } }),
);
@@ -136,14 +136,17 @@ export class EquipoProgramaService {
findInfoEquipoProgramaById(id_equipo_programa: number) {
return this.informacionEquipoProgramaView
.findOne({ where: { id_equipo_programa } })
.then((infoEquipoPrograma) =>
this.repository.create({
.then((infoEquipoPrograma) => {
if (!infoEquipoPrograma)
throw new ConflictException('No existe este id equipo programa.');
return this.repository.create({
id_equipo_programa: infoEquipoPrograma.id_equipo_programa,
equipo: {
id_equipo: infoEquipoPrograma.id_equipo,
carrito: {
id_carrito: infoEquipoPrograma.id_carrito,
modulo: {
id_modulo: infoEquipoPrograma.id_modulo,
institucion: {
id_institucion: infoEquipoPrograma.id_institucion,
},
@@ -153,16 +156,15 @@ export class EquipoProgramaService {
},
},
},
}),
);
programa: { id_programa: infoEquipoPrograma.id_programa },
});
});
}
findInfoEquipoProgramaByIdEquipoIdPrograma(
id_equipo: number,
id_programa: number,
findInfoEquipoProgramaByEquipoPrograma(
equipo: Equipo,
programa: Programa | Partial<Programa>,
) {
return this.repository.findOne({
where: { equipo: { id_equipo }, programa: { id_programa } },
});
return this.repository.findOne({ where: { equipo, programa } });
}
}
@@ -11,9 +11,7 @@ export class EquipoTipoEntrada {
@JoinColumn({ name: 'id_equipo' })
equipo: Equipo;
@ManyToOne(() => TipoEntrada, (tipoEntrada) => tipoEntrada.equipos, {
eager: true,
})
@ManyToOne(() => TipoEntrada, (tipoEntrada) => tipoEntrada.equipos)
@JoinColumn({ name: 'id_tipo_entrada' })
tipoEntrada: TipoEntrada;
}
@@ -1,5 +1,8 @@
import { DataSource, ViewEntity, ViewColumn } from 'typeorm';
import { EquipoTipoEntrada } from '../equipo-tipo-entrada.entity';
import { Equipo } from '../../../equipo/entity/equipo.entity';
import { Carrito } from '../../../carrito/entity/carrito.entity';
import { Modulo } from '../../../modulo/entity/modulo.entity';
@ViewEntity({
expression: (dataSource: DataSource) =>
@@ -8,15 +11,34 @@ import { EquipoTipoEntrada } from '../equipo-tipo-entrada.entity';
.select('ete.id_equipo_tipo_entrada', 'id_equipo_tipo_entrada')
.addSelect('ete.id_equipo', 'id_equipo')
.addSelect('ete.id_tipo_entrada', 'id_tipo_entrada')
.from(EquipoTipoEntrada, 'ete'),
.addSelect('e.id_carrito', 'id_carrito')
.addSelect('c.id_modulo', 'id_modulo')
.addSelect('c.id_tipo_carrito', 'id_tipo_carrito')
.addSelect('m.id_institucion', 'id_institucion')
.from(EquipoTipoEntrada, 'ete')
.innerJoin(Equipo, 'e', 'e.id_equipo = ete.id_equipo')
.innerJoin(Carrito, 'c', 'c.id_carrito = e.id_carrito')
.innerJoin(Modulo, 'm', 'm.id_modulo = c.id_modulo'),
})
export class InformacionEquipoTipoEntradaView {
@ViewColumn()
id_equipo_tipo_entrada: number;
@ViewColumn()
id_carrito: number;
@ViewColumn()
id_equipo: number;
@ViewColumn()
id_institucion: number;
@ViewColumn()
id_modulo: number;
@ViewColumn()
id_tipo_entrada: number;
@ViewColumn()
id_tipo_carrito: number;
}
@@ -37,7 +37,7 @@ export class EquipoTipoEntradaController {
const operador: Operador = req.user.operador;
this.validarUsuarioService.validarAdminOperador(operador);
return this.equipoTipoEntradaService.create(
return this.equipoTipoEntradaService.asignar(
body.id_equipo,
body.id_tipo_entrada,
);
@@ -58,6 +58,9 @@ export class EquipoTipoEntradaController {
const operador: Operador = req.user.operador;
this.validarUsuarioService.validarAdminOperador(operador);
return this.equipoTipoEntradaService.delete(body.id_equipo_tipo_entrada);
return this.equipoTipoEntradaService.delete(
operador,
body.id_equipo_tipo_entrada,
);
}
}
@@ -1,5 +1,6 @@
import {
ConflictException,
ForbiddenException,
forwardRef,
Inject,
Injectable,
@@ -8,6 +9,7 @@ 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 { Operador } from 'src/operador/entity/operador.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';
@@ -28,41 +30,26 @@ export class EquipoTipoEntradaService {
private institucionTipoEntradaService: InstitucionTipoEntradaService,
) {}
async create(
id_equipo: number | Equipo,
id_tipo_entrada: number | TipoEntrada,
) {
const equipo =
typeof id_equipo === 'number'
? await this.equipoService.findInfoEquipoById(id_equipo)
: id_equipo;
async asignar(id_equipo: number, id_tipo_entrada: number) {
const equipo = await this.equipoService.findInfoEquipoById(id_equipo);
const tipoEntrada =
typeof id_tipo_entrada === 'number'
? await this.institucionTipoEntradaService.findTipoEntradaById(
id_tipo_entrada,
)
: id_tipo_entrada;
await this.institucionTipoEntradaService.findTipoEntradaById(
id_tipo_entrada,
);
return this.informacionEquipoTipoEntrada(
equipo.id_equipo,
tipoEntrada.id_tipo_entrada,
)
.then((existeEquipoTipoEntrada) => {
if (existeEquipoTipoEntrada)
throw new ConflictException(
'Este tipo de entrada ya fue asignado a este equipo.',
);
return this.repository.save(
this.repository.create({ equipo, tipoEntrada }),
return this.findInfoEquipoTipoEntradaByEquipoTipoEntrada(
equipo,
tipoEntrada,
).then((existeEquipoTipoEntrada) => {
if (existeEquipoTipoEntrada)
throw new ConflictException(
'Este tipo de entrada ya fue asignado a este equipo.',
);
})
.then((equipoTipoEntrada) => ({
message: `Se asignó el tipo de entrada: ${tipoEntrada.tipo_entrada}, al equipo con número de inventario: ${equipo.numero_inventario}.`,
equipoTipoEntrada,
}));
return this.create(equipo, tipoEntrada);
});
}
async createCargaMasiva(equipo: Equipo, tipoEntrada: TipoEntrada) {
create(equipo: Equipo, tipoEntrada: TipoEntrada) {
return this.repository
.save(this.repository.create({ equipo, tipoEntrada }))
.then((equipoTipoEntrada) => ({
@@ -71,32 +58,32 @@ export class EquipoTipoEntradaService {
}));
}
delete(id_equipo_tipo_entrada: number) {
return this.findById(id_equipo_tipo_entrada)
.then((equipoTipoEntrada) => this.repository.remove(equipoTipoEntrada))
delete(operador: Operador, id_equipo_tipo_entrada: number) {
return this.findInfoEquipoTipoEntradaById(id_equipo_tipo_entrada)
.then((equipoTipoEntrada) => {
// Valida que el equipo pertenezca a la institución del operador
if (
operador.institucion.id_institucion !=
equipoTipoEntrada.equipo.carrito.modulo.institucion.id_institucion
)
throw new ForbiddenException(
'No puedes modificar la información este equipo porque no pertenece a tu institución.',
);
return this.repository.remove(equipoTipoEntrada);
})
.then((_) => ({
message: 'Se eliminó correctamente el tipo de entrada de este equipo.',
}));
}
findById(id_equipo_tipo_entrada: number) {
return this.repository
.findOne({ where: { id_equipo_tipo_entrada } })
.then((equipoTipoEntrada) => {
if (!equipoTipoEntrada)
throw new ConflictException('No existe este id equipo tipo entrada.');
return equipoTipoEntrada;
});
}
findFullInfoEquipoTipoEntradaAllByIdEquipo(id_equipo: number) {
return this.fullInformacionEquipoTipoEntradaView
.find({ where: { id_equipo } })
.then((infoEquipoTipoEntradas) => {
const equipoProgramas: EquipoTipoEntrada[] = [];
const equipoTipoEntradas: EquipoTipoEntrada[] = [];
for (let i = 0; i < infoEquipoTipoEntradas.length; i++)
equipoProgramas.push(
equipoTipoEntradas.push(
this.repository.create({
id_equipo_tipo_entrada:
infoEquipoTipoEntradas[i].id_equipo_tipo_entrada,
@@ -106,13 +93,44 @@ export class EquipoTipoEntradaService {
},
}),
);
return equipoProgramas;
return equipoTipoEntradas;
});
}
informacionEquipoTipoEntrada(id_equipo: number, id_tipo_entrada: number) {
return this.informacionEquipoTipoEntradaView.findOne({
where: { id_equipo, id_tipo_entrada },
});
findInfoEquipoTipoEntradaById(id_equipo_tipo_entrada: number) {
return this.informacionEquipoTipoEntradaView
.findOne({ where: { id_equipo_tipo_entrada } })
.then((infoEquipoTipoEntrada) => {
if (!infoEquipoTipoEntrada)
throw new ConflictException('No existe este id equipo tipo entrada.');
return this.repository.create({
id_equipo_tipo_entrada: infoEquipoTipoEntrada.id_equipo_tipo_entrada,
equipo: {
id_equipo: infoEquipoTipoEntrada.id_equipo,
carrito: {
id_carrito: infoEquipoTipoEntrada.id_carrito,
modulo: {
id_modulo: infoEquipoTipoEntrada.id_modulo,
institucion: {
id_institucion: infoEquipoTipoEntrada.id_institucion,
},
},
tipoCarrito: {
id_tipo_carrito: infoEquipoTipoEntrada.id_tipo_carrito,
},
},
},
tipoEntrada: {
id_tipo_entrada: infoEquipoTipoEntrada.id_tipo_entrada,
},
});
});
}
findInfoEquipoTipoEntradaByEquipoTipoEntrada(
equipo: Equipo,
tipoEntrada: TipoEntrada,
) {
return this.repository.findOne({ where: { equipo, tipoEntrada } });
}
}
+7 -7
View File
@@ -284,9 +284,9 @@ export class UploadFileService {
false,
);
const existeEquipoTipoEntrada = tipoEntrada
? await this.equipoTipoEntradaService.informacionEquipoTipoEntrada(
equipo.id_equipo,
tipoEntrada.id_tipo_entrada,
? await this.equipoTipoEntradaService.findInfoEquipoTipoEntradaByEquipoTipoEntrada(
equipo,
tipoEntrada,
)
: null;
@@ -308,7 +308,7 @@ export class UploadFileService {
continue;
}
await this.equipoTipoEntradaService
.createCargaMasiva(equipo, tipoEntrada)
.create(equipo, tipoEntrada)
.then((res) => {
equipo.tiposEntradas.push(res.equipoTipoEntrada);
mensajes.push(res.message);
@@ -321,9 +321,9 @@ export class UploadFileService {
false,
);
const existeEquipoPrograma = programa
? await this.equipoProgramaService.findInfoEquipoProgramaByIdEquipoIdPrograma(
equipo.id_equipo,
programa.id_programa,
? await this.equipoProgramaService.findInfoEquipoProgramaByEquipoPrograma(
equipo,
programa,
)
: null;