find equipo prestamo view

This commit is contained in:
2022-09-28 04:42:06 -05:00
parent ad79867585
commit e2ff8ade26
5 changed files with 150 additions and 104 deletions
+3 -1
View File
@@ -71,9 +71,10 @@ 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 { FullInformacionCarritoView } from './carrito/entity/views/full-informacion-carrito.view';
import { InformacionCarritoView } from './carrito/entity/views/informacion-carrito.view';
import { FullInformacionEquipoView } from './equipo/entity/views/full-informacion-equipo.view';
import { InformacionEquipoPrestamoView } from './equipo/entity/views/informacion-equipo-prestamo.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';
@@ -151,6 +152,7 @@ import { InformacionUsuarioView } from './usuario/entity/views/informacion-usuar
InformacionCarritoView,
FullInformacionCarritoView,
FullInformacionEquipoView,
InformacionEquipoPrestamoView,
InformacionEquipoView,
FullInformacionEquipoProgramaView,
InformacionEquipoProgramaView,
@@ -0,0 +1,70 @@
import { DataSource, ViewEntity, ViewColumn } from 'typeorm';
import { Carrito } from '../../../carrito/entity/carrito.entity';
import { Equipo } from '../equipo.entity';
import { Institucion } from '../../../institucion/entity/institucion.entity';
import { EquipoPrograma } from '../../../equipo-programa/entity/equipo-programa.entity';
import { EquipoTipoEntrada } from '../../../equipo-tipo-entrada/entity/equipo-tipo-entrada.entity';
import { Modulo } from '../../../modulo/entity/modulo.entity';
@ViewEntity({
expression: (dataSource: DataSource) =>
dataSource
.createQueryBuilder()
.select('e.id_equipo', 'id_equipo')
.addSelect('e.id_carrito', 'id_carrito')
.addSelect('e.id_status', 'id_status')
.addSelect('e.prestado', 'prestado')
.addSelect('c.id_modulo', 'id_modulo')
.addSelect('c.id_tipo_carrito', 'id_tipo_carrito')
.addSelect('ps.id_equipo_programa', 'id_equipo_programa')
.addSelect('ps.id_programa', 'id_programa')
.addSelect('tes.id_equipo_tipo_entrada', 'id_equipo_tipo_entrada')
.addSelect('tes.id_tipo_entrada', 'id_tipo_entrada')
.addSelect('m.id_institucion', 'id_institucion')
.from(Equipo, 'e')
.innerJoin(Carrito, 'c', 'c.id_carrito = e.id_carrito')
.innerJoin(EquipoPrograma, 'ps', 'ps.id_equipo = e.id_equipo')
.innerJoin(EquipoTipoEntrada, 'tes', 'tes.id_equipo = e.id_equipo')
.innerJoin(Modulo, 'm', 'm.id_modulo = c.id_modulo')
.innerJoin(Institucion, 'i', 'i.id_institucion = m.id_institucion')
.where('c.activo = 1')
.andWhere('m.activo = 1')
.andWhere('i.activo = 1')
.andWhere('e.id_status = 1')
.orderBy('c.carrito', 'ASC')
.addOrderBy('e.equipo', 'ASC'),
})
export class InformacionEquipoPrestamoView {
@ViewColumn()
id_equipo: number;
@ViewColumn()
id_carrito: number;
@ViewColumn()
id_equipo_programa: number;
@ViewColumn()
id_equipo_tipo_entrada: number;
@ViewColumn()
id_institucion: number;
@ViewColumn()
id_modulo: number;
@ViewColumn()
id_programa: number;
@ViewColumn()
id_status: number;
@ViewColumn()
id_tipo_carrito: number;
@ViewColumn()
id_tipo_entrada: number;
@ViewColumn()
prestado: number;
}
+2
View File
@@ -5,6 +5,7 @@ import { EquipoController } from './equipo.controller';
import { EquipoService } from './equipo.service';
import { Equipo } from './entity/equipo.entity';
import { FullInformacionEquipoView } from './entity/views/full-informacion-equipo.view';
import { InformacionEquipoPrestamoView } from './entity/views/informacion-equipo-prestamo.view';
import { InformacionEquipoView } from './entity/views/informacion-equipo.view';
import { CarritoModule } from '../carrito/carrito.module';
import { EquipoProgramaModule } from '../equipo-programa/equipo-programa.module';
@@ -40,6 +41,7 @@ import { ValidarUsuarioModule } from '../validar-usuario/validar-usuario.module'
TypeOrmModule.forFeature([
Equipo,
FullInformacionEquipoView,
InformacionEquipoPrestamoView,
InformacionEquipoView,
]),
ValidarUsuarioModule,
+47 -69
View File
@@ -7,7 +7,7 @@ import {
NotFoundException,
} from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { FindOptionsWhere, Repository } from 'typeorm';
import { Carrito } from '../carrito/entity/carrito.entity';
import { Equipo } from './entity/equipo.entity';
import { Institucion } from '../institucion/entity/institucion.entity';
@@ -18,8 +18,9 @@ import { Operador } from '../operador/entity/operador.entity';
import { Programa } from '../institucion-programa/entity/programa.entity';
import { TipoCarrito } from '../institucion-tipo-carrito/entity/tipo-carrito.entity';
import { TipoEntrada } from '../institucion-tipo-entrada/entity/tipo-entrada.entity';
import { InformacionEquipoView } from './entity/views/informacion-equipo.view';
import { FullInformacionEquipoView } from './entity/views/full-informacion-equipo.view';
import { InformacionEquipoPrestamoView } from './entity/views/informacion-equipo-prestamo.view';
import { InformacionEquipoView } from './entity/views/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';
@@ -38,10 +39,12 @@ import { StatusService } from '../status/status.service';
export class EquipoService {
constructor(
@InjectRepository(Equipo) private repository: Repository<Equipo>,
@InjectRepository(InformacionEquipoView)
private informacionEquipoView: Repository<InformacionEquipoView>,
@InjectRepository(FullInformacionEquipoView)
private fullInformacionEquipoView: Repository<FullInformacionEquipoView>,
@InjectRepository(InformacionEquipoPrestamoView)
private informacionEquipoPrestamoView: Repository<InformacionEquipoPrestamoView>,
@InjectRepository(InformacionEquipoView)
private informacionEquipoView: Repository<InformacionEquipoView>,
private carritoService: CarritoService,
@Inject(forwardRef(() => EquipoProgramaService))
private equipoProgramaService: EquipoProgramaService,
@@ -254,78 +257,53 @@ export class EquipoService {
programa?: Programa,
tipoEntrada?: TipoEntrada,
) {
const queryReseteo = this.repository
.createQueryBuilder('e')
.innerJoin('e.carrito', 'c', 'c.activo = 1')
.innerJoin('e.programas', 'ps')
.innerJoin('e.status', 's', 's.id_status = 1')
.innerJoin('e.tiposEntradas', 'tes')
.innerJoin('c.modulo', 'm', 'm.id_modulo = :id_modulo AND m.activo = 1', {
id_modulo: modulo.id_modulo,
})
.innerJoin(
'c.tipoCarrito',
'tc',
'tc.id_tipo_carrito = :id_tipo_carrito',
{ id_tipo_carrito: tipoCarrito.id_tipo_carrito },
)
.innerJoin('m.institucion', 'i', 'i.activo = 1')
.where('e.prestado = 1');
const query = this.repository
.createQueryBuilder('e')
.innerJoinAndSelect('e.carrito', 'c', 'c.activo = 1')
.innerJoinAndSelect('e.programas', 'ps')
.innerJoinAndSelect('e.status', 's', 's.id_status = 1')
.innerJoinAndSelect('e.tiposEntradas', 'tes')
.innerJoinAndSelect(
'c.modulo',
'm',
'm.id_modulo = :id_modulo AND m.activo = 1',
{ id_modulo: modulo.id_modulo },
)
.innerJoinAndSelect(
'c.tipoCarrito',
'tc',
'tc.id_tipo_carrito = :id_tipo_carrito',
{ id_tipo_carrito: tipoCarrito.id_tipo_carrito },
)
.innerJoinAndSelect('m.institucion', 'i', 'i.activo = 1')
.innerJoinAndSelect('ps.programa', 'p')
.innerJoinAndSelect('tes.tipoEntrada', 'te')
.where('e.prestado = 0')
.orderBy('c.carrito')
.addOrderBy('e.equipo');
const busquedaReseteo: FindOptionsWhere<InformacionEquipoPrestamoView> = {
prestado: 1,
id_modulo: modulo.id_modulo,
id_tipo_carrito: tipoCarrito.id_tipo_carrito,
};
const busqueda: FindOptionsWhere<InformacionEquipoPrestamoView> = {
prestado: 0,
id_modulo: modulo.id_modulo,
id_tipo_carrito: tipoCarrito.id_tipo_carrito,
};
if (programa) {
query.andWhere('ps.id_programa = :id_programa', {
id_programa: programa.id_programa,
});
queryReseteo.andWhere('ps.id_programa = :id_programa', {
id_programa: programa.id_programa,
});
busqueda.id_programa = programa.id_programa;
busquedaReseteo.id_programa = programa.id_programa;
} else {
query.andWhere('ps.id_programa = 1');
queryReseteo.andWhere('id_programa = 1');
busqueda.id_programa = 1;
busquedaReseteo.id_programa = 1;
}
if (tipoEntrada) {
query.andWhere('tes.id_tipo_entrada = :id_tipo_entrada', {
id_tipo_entrada: tipoEntrada.id_tipo_entrada,
});
queryReseteo.andWhere('tes.id_tipo_entrada = :id_tipo_entrada', {
id_tipo_entrada: tipoEntrada.id_tipo_entrada,
});
busqueda.id_tipo_entrada = tipoEntrada.id_tipo_entrada;
busquedaReseteo.id_tipo_entrada = tipoEntrada.id_tipo_entrada;
}
return query.getCount().then(async (n) => {
if (n === 0)
await queryReseteo.getMany().then(async (equipos) => {
for (let i = 0; i < equipos.length; i++) {
equipos[i].prestado = false;
await this.repository.save(equipos[i]);
}
});
return query.getOne();
});
return this.informacionEquipoPrestamoView
.count({ where: busqueda })
.then(async (n) => {
if (n === 0)
await this.informacionEquipoPrestamoView
.find({ where: busquedaReseteo })
.then(async (infoEquipos) => {
for (let i = 0; i < infoEquipos.length; i++)
await this.repository.save(
this.repository.create({
id_equipo: infoEquipos[i].id_equipo,
prestado: false,
}),
);
});
return this.informacionEquipoPrestamoView.findOne({ where: busqueda });
})
.then((equipo) => {
if (!equipo)
throw new ConflictException(
'No hay un equipo de cómputo que cumpla con las caracteríasticas solicitadas o ya no hay equipos disponibles en este momento. Intenta más tarde o cambia las características.',
);
return this.repository.create({ id_equipo: equipo.id_equipo });
});
}
findInfoEquipoById(id_equipo: number) {
+28 -34
View File
@@ -137,34 +137,34 @@ export class PrestamoService {
)
: null;
// if (ahora.weekday() === 0)
// throw new ConflictException('No hay servicio los días domingo.');
// this.validarInstitucionUsuario(usuario.instituciones, modulo);
// if (!institucionDia.activo)
// throw new ConflictException(
// 'El día de hoy no hay servicio de préstamo de equipos.',
// );
// if (ahora < horaMin)
// throw new ConflictException(
// `El servicio inicia a las ${institucionDia.hora_inicio} el día de hoy.`,
// );
// if (ahora >= horaExtra)
// throw new ConflictException(
// `El servicio terminó a las ${institucionDia.hora_extra} el día de hoy.`,
// );
// for (let i = 0; i < institucionDia.horasExcepcion.length; i++) {
// const horaFin = moment(
// `${ahoraStr} ${institucionDia.horasExcepcion[i].hora_fin}`,
// );
// const horaInicio = moment(
// `${ahoraStr} ${institucionDia.horasExcepcion[i].hora_inicio}`,
// );
if (ahora.weekday() === 0)
throw new ConflictException('No hay servicio los días domingo.');
this.validarInstitucionUsuario(usuario.instituciones, modulo);
if (!institucionDia.activo)
throw new ConflictException(
'El día de hoy no hay servicio de préstamo de equipos.',
);
if (ahora < horaMin)
throw new ConflictException(
`El servicio inicia a las ${institucionDia.hora_inicio} el día de hoy.`,
);
if (ahora >= horaExtra)
throw new ConflictException(
`El servicio terminó a las ${institucionDia.hora_extra} el día de hoy.`,
);
for (let i = 0; i < institucionDia.horasExcepcion.length; i++) {
const horaFin = moment(
`${ahoraStr} ${institucionDia.horasExcepcion[i].hora_fin}`,
);
const horaInicio = moment(
`${ahoraStr} ${institucionDia.horasExcepcion[i].hora_inicio}`,
);
// if (ahora > horaInicio && ahora < horaFin)
// throw new ConflictException(
// `Se suspendió temporalmente el servicio de ${institucionDia.horasExcepcion[i].hora_inicio} a ${institucionDia.horasExcepcion[i].hora_fin}.`,
// );
// }
if (ahora > horaInicio && ahora < horaFin)
throw new ConflictException(
`Se suspendió temporalmente el servicio de ${institucionDia.horasExcepcion[i].hora_inicio} a ${institucionDia.horasExcepcion[i].hora_fin}.`,
);
}
return this.repository
.findOne({ where: { activo: true, usuario } })
.then((existePrestamo) => {
@@ -179,13 +179,7 @@ export class PrestamoService {
tipoEntrada,
);
})
.then(async (equipo) => {
if (!equipo)
throw new ConflictException(
'No hay un equipo de cómputo que cumpla con las caracteríasticas solicitadas o ya no hay equipos disponibles en este momento. Intenta más tarde o cambia las características.',
);
return this.equipoService.update(equipo, null, 2);
})
.then((equipo) => this.equipoService.update(equipo, null, 2))
.then(({ equipo }) =>
this.repository.save(
this.repository.create({