Listo equipo
This commit is contained in:
parent
b8d2294328
commit
fca9da4d9b
@ -49,7 +49,7 @@ export class EquipoMotivoService {
|
||||
}
|
||||
|
||||
findAllByIdEquipo(id_equipo: number, pagina: number) {
|
||||
return this.equipoService.findInfoEquipoById(id_equipo).then((equipo) =>
|
||||
return this.equipoService.findById(id_equipo).then((equipo) =>
|
||||
this.repository.findAndCount({
|
||||
where: { equipo },
|
||||
skip: (pagina - 1) * 25,
|
||||
|
@ -31,7 +31,7 @@ export class EquipoProgramaService {
|
||||
) {}
|
||||
|
||||
async asignar(operador: Operador, id_equipo: number, id_programa: number) {
|
||||
const equipo = await this.equipoService.findInfoEquipoById(id_equipo);
|
||||
const equipo = await this.equipoService.findById(id_equipo);
|
||||
const programa = await this.institucionProgramaService.findProgramaById(
|
||||
id_programa,
|
||||
);
|
||||
|
@ -31,7 +31,7 @@ export class EquipoTipoEntradaService {
|
||||
) {}
|
||||
|
||||
async asignar(id_equipo: number, id_tipo_entrada: number) {
|
||||
const equipo = await this.equipoService.findInfoEquipoById(id_equipo);
|
||||
const equipo = await this.equipoService.findById(id_equipo);
|
||||
const tipoEntrada =
|
||||
await this.institucionTipoEntradaService.findTipoEntradaById(
|
||||
id_tipo_entrada,
|
||||
|
@ -35,6 +35,18 @@ export class Equipo {
|
||||
@Column({ type: Number, nullable: true, default: null })
|
||||
u: number;
|
||||
|
||||
@Column({ type: Number, nullable: true })
|
||||
id_carrito: number;
|
||||
|
||||
@Column({ type: Number, nullable: true })
|
||||
id_marca: number;
|
||||
|
||||
@Column({ type: Number, nullable: true })
|
||||
id_modelo: number;
|
||||
|
||||
@Column({ type: Number, nullable: true })
|
||||
id_status: number;
|
||||
|
||||
@ManyToOne(() => Carrito, (carrito) => carrito.equipos, { eager: true })
|
||||
@JoinColumn({ name: 'id_carrito' })
|
||||
carrito: Carrito;
|
||||
|
@ -22,6 +22,7 @@ import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.servic
|
||||
import { Operador } from '../operador/entity/operador.entity';
|
||||
import { NumeroInventarioDto } from '../dto/numero-inventario.dto';
|
||||
import { EquiposDto } from './dto/input/equipos.dto';
|
||||
import { MessageOutputDto } from '../dto/output/message.dto';
|
||||
import { UpdateEquipoDto } from './dto/input/update.dto';
|
||||
import { EquipoOutputDto } from './dto/output/equipo.dto';
|
||||
import { EquiposOutputDto } from './dto/output/equipos.dto';
|
||||
@ -57,7 +58,7 @@ export class EquipoController {
|
||||
|
||||
this.validarUsuarioService.validarAdminOperador(operador);
|
||||
return this.equipoService
|
||||
.findFullInfoEquipoByNumeroInventario(
|
||||
.findFullInfoByNumeroInventario(
|
||||
parseInt(query.id_institucion),
|
||||
query.numero_inventario,
|
||||
)
|
||||
@ -160,6 +161,7 @@ export class EquipoController {
|
||||
return this.equipoService.findAll(operador, query);
|
||||
}
|
||||
|
||||
@Serealize(MessageOutputDto)
|
||||
@Put()
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
@ApiOperation({
|
||||
|
@ -69,6 +69,7 @@ export class EquipoService {
|
||||
marca: Marca,
|
||||
modelo: Modelo,
|
||||
) {
|
||||
// Creo y guardo el registro
|
||||
const equipoNuevo = await this.repository.save(
|
||||
this.repository.create({
|
||||
carrito,
|
||||
@ -81,6 +82,7 @@ export class EquipoService {
|
||||
}),
|
||||
);
|
||||
|
||||
// Le asigno programa "Sin programa"
|
||||
return this.equipoProgramaService
|
||||
.createSinPrograma(equipoNuevo)
|
||||
.then((_) => equipoNuevo);
|
||||
@ -159,7 +161,10 @@ export class EquipoService {
|
||||
.take(15)
|
||||
.skip((parseInt(filtros.pagina) - 1) * 15);
|
||||
|
||||
// Si se mando id modulo
|
||||
if (modulo) {
|
||||
// Valido que el módulo le pertenezca a la institución del
|
||||
// operador que solicita la información
|
||||
if (
|
||||
operador.tipoUsuario.id_tipo_usuario > 2 &&
|
||||
operador.institucion.id_institucion != modulo.institucion.id_institucion
|
||||
@ -171,7 +176,10 @@ export class EquipoService {
|
||||
id_modulo: modulo.id_modulo,
|
||||
});
|
||||
}
|
||||
// Si se mando id carrito
|
||||
if (carrito) {
|
||||
// Valido que el carrito le pertenezca a la institución del
|
||||
// operador que solicita la información
|
||||
if (
|
||||
operador.tipoUsuario.id_tipo_usuario > 2 &&
|
||||
operador.institucion.id_institucion !=
|
||||
@ -223,87 +231,7 @@ export class EquipoService {
|
||||
return query.getManyAndCount();
|
||||
}
|
||||
|
||||
async findEquipo(
|
||||
id_usuario: number,
|
||||
modulo: Modulo,
|
||||
tipoCarrito: TipoCarrito,
|
||||
programa?: Programa,
|
||||
tipoEntrada?: TipoEntrada,
|
||||
) {
|
||||
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) {
|
||||
busqueda.id_programa = programa.id_programa;
|
||||
busquedaReseteo.id_programa = programa.id_programa;
|
||||
} else {
|
||||
busqueda.id_programa = 1;
|
||||
busquedaReseteo.id_programa = 1;
|
||||
}
|
||||
if (tipoEntrada) {
|
||||
busqueda.id_tipo_entrada = tipoEntrada.id_tipo_entrada;
|
||||
busquedaReseteo.id_tipo_entrada = tipoEntrada.id_tipo_entrada;
|
||||
}
|
||||
return this.informacionEquipoPrestamoView
|
||||
.findOne({ where: busqueda })
|
||||
.then((infoEquipo) => {
|
||||
if (!infoEquipo)
|
||||
return 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((infoEquipo) => {
|
||||
if (!infoEquipo)
|
||||
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 infoEquipo;
|
||||
});
|
||||
return infoEquipo;
|
||||
})
|
||||
.then((infoEquipo) => {
|
||||
if (infoEquipo.u)
|
||||
throw new ConflictException(
|
||||
'Ocurrio un error al tratar de asignarte un equipo de cómputo, intenta de nuevo.',
|
||||
);
|
||||
|
||||
const equipo = this.repository.create({
|
||||
id_equipo: infoEquipo.id_equipo,
|
||||
u: id_usuario,
|
||||
status: { id_status: 2 },
|
||||
});
|
||||
|
||||
return this.repository.save(equipo);
|
||||
})
|
||||
.then((equipo) => this.findInfoEquipoById(equipo.id_equipo))
|
||||
.then((equipo) => {
|
||||
if (equipo.u != id_usuario)
|
||||
throw new ConflictException(
|
||||
'Ocurrio un error al tratar de asignarte un equipo de cómputo, intenta de nuevo.',
|
||||
);
|
||||
return equipo;
|
||||
});
|
||||
}
|
||||
|
||||
findInfoEquipoById(id_equipo: number) {
|
||||
findById(id_equipo: number) {
|
||||
return this.informacionEquipoView
|
||||
.findOne({ where: { id_equipo } })
|
||||
.then((infoEquipo) => {
|
||||
@ -313,7 +241,27 @@ export class EquipoService {
|
||||
});
|
||||
}
|
||||
|
||||
findInfoEquipoByNumeroInventario(
|
||||
findByEquipo(carrito: Carrito, equipo: string, validarNoExiste = true) {
|
||||
return this.informacionEquipoView
|
||||
.findOne({
|
||||
where: {
|
||||
id_carrito: carrito.id_carrito,
|
||||
equipo,
|
||||
},
|
||||
})
|
||||
.then((infoEquipo) => {
|
||||
if (!infoEquipo) {
|
||||
if (validarNoExiste)
|
||||
throw new NotFoundException(
|
||||
'No existe un equipo de cómputo con este número de inventario.',
|
||||
);
|
||||
return null;
|
||||
}
|
||||
return this.viewToEquipo(infoEquipo);
|
||||
});
|
||||
}
|
||||
|
||||
findByNumeroInventario(
|
||||
institucion: Institucion,
|
||||
numero_inventario: string,
|
||||
validarNoExiste = true,
|
||||
@ -337,31 +285,102 @@ export class EquipoService {
|
||||
});
|
||||
}
|
||||
|
||||
async findInfoEquipoByEquipo(
|
||||
carrito: Carrito,
|
||||
equipo: string,
|
||||
validarNoExiste = true,
|
||||
findEquipo(
|
||||
id_usuario: number,
|
||||
modulo: Modulo,
|
||||
tipoCarrito: TipoCarrito,
|
||||
programa?: Programa,
|
||||
tipoEntrada?: TipoEntrada,
|
||||
) {
|
||||
return this.informacionEquipoView
|
||||
.findOne({
|
||||
where: {
|
||||
id_carrito: carrito.id_carrito,
|
||||
equipo,
|
||||
},
|
||||
})
|
||||
.then((infoEquipo) => {
|
||||
if (!infoEquipo) {
|
||||
if (validarNoExiste)
|
||||
throw new NotFoundException(
|
||||
'No existe un equipo de cómputo con este número de inventario.',
|
||||
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,
|
||||
};
|
||||
|
||||
// Si se mando un programa se añade a la busqueda
|
||||
if (programa) {
|
||||
busqueda.id_programa = programa.id_programa;
|
||||
busquedaReseteo.id_programa = programa.id_programa;
|
||||
} else {
|
||||
// De lo contrario se asigna el valor por defaulta, "Sin programa"
|
||||
busqueda.id_programa = 1;
|
||||
busquedaReseteo.id_programa = 1;
|
||||
}
|
||||
// Si se mando un tipo de entrada se añade a la busqueda
|
||||
if (tipoEntrada) {
|
||||
busqueda.id_tipo_entrada = tipoEntrada.id_tipo_entrada;
|
||||
busquedaReseteo.id_tipo_entrada = tipoEntrada.id_tipo_entrada;
|
||||
}
|
||||
// Busaca un equipo
|
||||
return (
|
||||
this.informacionEquipoPrestamoView
|
||||
.findOne({ where: busqueda })
|
||||
.then((infoEquipo) => {
|
||||
// Si no hay uno busca a todos los quipos que cumplan las mismas
|
||||
// condiciones pero que ya hayan sido prestados
|
||||
if (!infoEquipo)
|
||||
return this.informacionEquipoPrestamoView
|
||||
.find({ where: busquedaReseteo })
|
||||
.then(async (infoEquipos) => {
|
||||
// Los pasamos a no prestados para resetear los equipos
|
||||
for (let i = 0; i < infoEquipos.length; i++)
|
||||
await this.repository.save(
|
||||
this.repository.create({
|
||||
id_equipo: infoEquipos[i].id_equipo,
|
||||
prestado: false,
|
||||
}),
|
||||
);
|
||||
// Trata de buscar otro
|
||||
return this.informacionEquipoPrestamoView.findOne({
|
||||
where: busqueda,
|
||||
});
|
||||
})
|
||||
.then((infoEquipo) => {
|
||||
// Si no hay saca error
|
||||
if (!infoEquipo)
|
||||
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 infoEquipo;
|
||||
});
|
||||
return infoEquipo;
|
||||
})
|
||||
.then((infoEquipo) => {
|
||||
// Esta variable debe estar siempre en null antes de asignar el equipo
|
||||
if (infoEquipo.u)
|
||||
throw new ConflictException(
|
||||
'Ocurrio un error al tratar de asignarte un equipo de cómputo, intenta de nuevo.',
|
||||
);
|
||||
return null;
|
||||
}
|
||||
return this.viewToEquipo(infoEquipo);
|
||||
});
|
||||
// Actualizo el status del equipo a apartado y gurado el id del usaurio
|
||||
// al que se asignó
|
||||
return this.repository.save(
|
||||
this.repository.create({
|
||||
id_equipo: infoEquipo.id_equipo,
|
||||
u: id_usuario,
|
||||
status: { id_status: 2 },
|
||||
}),
|
||||
);
|
||||
})
|
||||
// Una vez actualizado lo busco de nuvo
|
||||
.then((equipo) => this.findById(equipo.id_equipo))
|
||||
.then((equipo) => {
|
||||
// Si el campo u no coincide con el id_usaurio saca error
|
||||
if (equipo.u != id_usuario)
|
||||
throw new ConflictException(
|
||||
'Ocurrio un error al tratar de asignarte un equipo de cómputo, intenta de nuevo.',
|
||||
);
|
||||
return equipo;
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
findFullInfoEquipoByNumeroInventario(
|
||||
findFullInfoByNumeroInventario(
|
||||
id_institucion: number,
|
||||
numero_inventario: string,
|
||||
) {
|
||||
@ -381,10 +400,12 @@ export class EquipoService {
|
||||
'No existe un equipo de cómputo con este número de inventario.',
|
||||
);
|
||||
|
||||
// Busco todos los programas de este equipo
|
||||
const programas =
|
||||
await this.equipoProgramaService.findFullInfoEquipoProgramaAllByIdEquipo(
|
||||
infoEquipo.id_equipo,
|
||||
);
|
||||
// Busco todos los tipos de entrada de este equipo
|
||||
const tiposEntradas =
|
||||
await this.equipoTipoEntradaService.findFullInfoEquipoTipoEntradaAllByIdEquipo(
|
||||
infoEquipo.id_equipo,
|
||||
@ -451,8 +472,10 @@ export class EquipoService {
|
||||
? await this.statusService.findById(id_status)
|
||||
: null;
|
||||
|
||||
return this.findInfoEquipoById(attrs.id_equipo)
|
||||
return this.findById(attrs.id_equipo)
|
||||
.then(async (equipo) => {
|
||||
// Valido que el equipo pertenezca a la institución del operador
|
||||
// que realiza esta acción
|
||||
if (
|
||||
operador.tipoUsuario.id_tipo_usuario > 2 &&
|
||||
operador.institucion.id_institucion !=
|
||||
@ -461,11 +484,14 @@ export class EquipoService {
|
||||
throw new ForbiddenException(
|
||||
'No puedes modificar la información este equipo porque no pertenece a tu institución.',
|
||||
);
|
||||
// Si se mandó id_status
|
||||
if (status) {
|
||||
// No se pude actualziar el status de lequipo cuando esta en uno de estos
|
||||
if (equipo.status.id_status === 2 || equipo.status.id_status === 3)
|
||||
throw new ConflictException(
|
||||
'No se puede cambiar el status de un equipo si esta apartada o en uso.',
|
||||
);
|
||||
// El operador no puede cambiar el status de un equipo a uno de estos
|
||||
if (status.id_status === 2 || status.id_status === 3)
|
||||
throw new ConflictException(
|
||||
'No se puede cambiar manualmente el status de un equipo a este status.',
|
||||
@ -478,6 +504,8 @@ export class EquipoService {
|
||||
Object.assign(equipo, attrs);
|
||||
if (status) {
|
||||
equipo.status = status;
|
||||
// Se crea registro de quien cambio el status del equipo, el motivo
|
||||
// por el cual lo cambió, el status al que lo cmabió y cuando lo hizo
|
||||
await this.equipoMotivoService.create(
|
||||
equipo,
|
||||
operador,
|
||||
@ -486,14 +514,14 @@ export class EquipoService {
|
||||
);
|
||||
}
|
||||
if (carrito) equipo.carrito = carrito;
|
||||
// Guardar
|
||||
return this.repository.save(equipo);
|
||||
})
|
||||
.then((_) => ({
|
||||
message: 'Se guardaron los cambios correctamente.',
|
||||
}));
|
||||
.then((_) => ({ message: 'Se guardaron los cambios correctamente.' }));
|
||||
}
|
||||
|
||||
async updateStatus(equipo: Equipo, operador?: Operador, motivo?: string) {
|
||||
// Si el status al que se esta actualizando es mayo o igual a 4
|
||||
if (equipo.status.id_status >= 4) {
|
||||
if (!operador) throw new ConflictException('No se mandó el id operador.');
|
||||
if (!motivo)
|
||||
@ -507,6 +535,7 @@ export class EquipoService {
|
||||
motivo,
|
||||
);
|
||||
}
|
||||
// Guardo los cambios
|
||||
return this.repository.save(equipo);
|
||||
}
|
||||
|
||||
|
@ -183,7 +183,7 @@ export class MultaService {
|
||||
}
|
||||
|
||||
findAllByIdEquipo(id_equipo: number, pagina: number) {
|
||||
return this.equipoService.findInfoEquipoById(id_equipo).then((equipo) =>
|
||||
return this.equipoService.findById(id_equipo).then((equipo) =>
|
||||
this.fullInformacionMultaView
|
||||
.findAndCount({
|
||||
where: { id_equipo: equipo.id_equipo },
|
||||
|
@ -696,7 +696,7 @@ export class PrestamoService {
|
||||
return this.institucionService
|
||||
.findInfoInstitucionById(id_institucion)
|
||||
.then((institucion) =>
|
||||
this.equipoService.findInfoEquipoByNumeroInventario(
|
||||
this.equipoService.findByNumeroInventario(
|
||||
institucion,
|
||||
numero_inventario,
|
||||
),
|
||||
|
@ -214,11 +214,7 @@ export class UploadFileService {
|
||||
)
|
||||
: null;
|
||||
let equipo = carrito
|
||||
? await this.equipoService.findInfoEquipoByEquipo(
|
||||
carrito,
|
||||
dataEquipo.equipo,
|
||||
false,
|
||||
)
|
||||
? await this.equipoService.findByEquipo(carrito, dataEquipo.equipo, false)
|
||||
: null;
|
||||
|
||||
if (!tipoCarrito || !marca || !modelo || !modulo || !carrito) {
|
||||
@ -249,7 +245,7 @@ export class UploadFileService {
|
||||
);
|
||||
return;
|
||||
} else {
|
||||
equipo = await this.equipoService.findInfoEquipoByNumeroInventario(
|
||||
equipo = await this.equipoService.findByNumeroInventario(
|
||||
institucion,
|
||||
dataEquipo.numero_inventario,
|
||||
false,
|
||||
|
Loading…
Reference in New Issue
Block a user