find equipo prestamo view
This commit is contained in:
+3
-1
@@ -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;
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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({
|
||||
|
||||
Reference in New Issue
Block a user