133 lines
4.4 KiB
TypeScript
133 lines
4.4 KiB
TypeScript
import * as moment from 'moment';
|
|
import {
|
|
ForbiddenException,
|
|
forwardRef,
|
|
Inject,
|
|
Injectable,
|
|
} from '@nestjs/common';
|
|
import { InjectRepository } from '@nestjs/typeorm';
|
|
import { FindManyOptions, FindOptionsWhere, Repository } from 'typeorm';
|
|
import { Carrito } from '../carrito/entity/carrito.entity';
|
|
import { CarritoMotivo } from './entity/carrito-motivo.entity';
|
|
import { Operador } from '../operador/entity/operador.entity';
|
|
import { CarritoService } from '../carrito/carrito.service';
|
|
import { InstitucionService } from '../institucion/institucion.service';
|
|
import { InstitucionTipoCarritoService } from '../institucion-tipo-carrito/institucion-tipo-carrito.service';
|
|
import { MarcaService } from '../marca/marca.service';
|
|
import { ModeloService } from '../modelo/modelo.service';
|
|
import { ModuloService } from '../modulo/modulo.service';
|
|
|
|
@Injectable()
|
|
export class CarritoMotivoService {
|
|
constructor(
|
|
@InjectRepository(CarritoMotivo)
|
|
private repository: Repository<CarritoMotivo>,
|
|
@Inject(forwardRef(() => CarritoService))
|
|
private carritoService: CarritoService,
|
|
private institucionService: InstitucionService,
|
|
private institucionTipoCarritoService: InstitucionTipoCarritoService,
|
|
private marcaService: MarcaService,
|
|
private modeloService: ModeloService,
|
|
private moduloService: ModuloService,
|
|
) {}
|
|
|
|
create(
|
|
carrito: Carrito,
|
|
operador: Operador,
|
|
motivo: string,
|
|
laboratorioMovil?: boolean,
|
|
numero_equipos?: number,
|
|
): Promise<CarritoMotivo> {
|
|
// Cramos y guardamos registro
|
|
return this.repository.save(
|
|
this.repository.create({
|
|
fecha_creacion: moment().toDate(),
|
|
laboratorioMovil,
|
|
motivo,
|
|
numero_equipos,
|
|
carrito,
|
|
operador,
|
|
}),
|
|
);
|
|
}
|
|
|
|
async findAllByIdCarrito(
|
|
admin: Operador,
|
|
id_carrito: number,
|
|
pagina?: number,
|
|
): Promise<CarritoMotivo[] | [CarritoMotivo[], number]> {
|
|
const carrito = await this.carritoService.findById(id_carrito);
|
|
const options: FindManyOptions<CarritoMotivo> = { where: { carrito } };
|
|
|
|
// Validamos que el carrito pertenezca a la institución del admin
|
|
if (
|
|
carrito.modulo.institucion.id_institucion !=
|
|
admin.institucion.id_institucion
|
|
)
|
|
throw new ForbiddenException(
|
|
'No puedes acceder a esta información porque no le pertenece a tu institución.',
|
|
);
|
|
// Si se mandó página significa que requiere paginación
|
|
if (pagina) {
|
|
options.skip = (pagina - 1) * 25;
|
|
options.take = 25;
|
|
return this.repository.findAndCount(options);
|
|
} else return this.repository.find(options);
|
|
}
|
|
|
|
async findAllLaboratorioMovil(
|
|
admin: Operador,
|
|
filtros: {
|
|
carrito?: string;
|
|
id_institucion?: string;
|
|
id_marca?: string;
|
|
id_modelo?: string;
|
|
id_modulo?: string;
|
|
id_tipo_carrito?: string;
|
|
},
|
|
): Promise<CarritoMotivo[]> {
|
|
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 busquedaCarrito: FindOptionsWhere<Carrito> = {};
|
|
const busqueda: FindOptionsWhere<CarritoMotivo> = {
|
|
laboratorioMovil: true,
|
|
};
|
|
|
|
if (filtros.carrito) busquedaCarrito.carrito = filtros.carrito;
|
|
if (admin.institucion)
|
|
busquedaCarrito.modulo = { institucion: admin.institucion };
|
|
else if (institucion) busquedaCarrito.modulo = { institucion };
|
|
if (marca) busquedaCarrito.marca = marca;
|
|
if (modelo) busquedaCarrito.modelo = modelo;
|
|
if (modulo && admin.institucion) busquedaCarrito.modulo = modulo;
|
|
if (tipoCarrito) busquedaCarrito.tipoCarrito = tipoCarrito;
|
|
busqueda.carrito = busquedaCarrito;
|
|
return this.repository.find({
|
|
join: {
|
|
alias: 'cmo',
|
|
innerJoinAndSelect: {
|
|
c: 'cmo.carrito',
|
|
m: 'c.modulo',
|
|
i: 'm.institucion',
|
|
},
|
|
},
|
|
where: busqueda,
|
|
});
|
|
}
|
|
}
|