pcpuma_unam_api/src/carrito-motivo/carrito-motivo.service.ts

133 lines
4.4 KiB
TypeScript
Raw Normal View History

2022-08-15 03:11:44 +00:00
import * as moment from 'moment';
2022-12-19 23:33:39 +00:00
import {
ForbiddenException,
forwardRef,
Inject,
Injectable,
} from '@nestjs/common';
2022-08-15 03:11:44 +00:00
import { InjectRepository } from '@nestjs/typeorm';
2023-01-11 18:46:48 +00:00
import { FindManyOptions, FindOptionsWhere, Repository } from 'typeorm';
2022-08-15 19:29:53 +00:00
import { Carrito } from '../carrito/entity/carrito.entity';
2022-08-15 03:11:44 +00:00
import { CarritoMotivo } from './entity/carrito-motivo.entity';
import { Operador } from '../operador/entity/operador.entity';
import { CarritoService } from '../carrito/carrito.service';
2023-01-17 15:31:48 +00:00
import { InstitucionService } from '../institucion/institucion.service';
2023-01-11 18:46:48 +00:00
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';
2022-08-15 03:11:44 +00:00
@Injectable()
2022-09-02 21:15:05 +00:00
export class CarritoMotivoService {
2022-08-15 03:11:44 +00:00
constructor(
@InjectRepository(CarritoMotivo)
private repository: Repository<CarritoMotivo>,
@Inject(forwardRef(() => CarritoService))
private carritoService: CarritoService,
2023-01-17 15:31:48 +00:00
private institucionService: InstitucionService,
2023-01-11 18:46:48 +00:00
private institucionTipoCarritoService: InstitucionTipoCarritoService,
private marcaService: MarcaService,
private modeloService: ModeloService,
private moduloService: ModuloService,
2022-08-15 03:11:44 +00:00
) {}
2022-12-05 06:09:59 +00:00
create(
2022-08-15 03:11:44 +00:00
carrito: Carrito,
operador: Operador,
motivo: string,
laboratorioMovil?: boolean,
numero_equipos?: number,
2022-12-19 23:33:39 +00:00
): Promise<CarritoMotivo> {
// Cramos y guardamos registro
2022-08-15 03:11:44 +00:00
return this.repository.save(
this.repository.create({
2022-12-05 06:09:59 +00:00
fecha_creacion: moment().toDate(),
2022-12-19 23:33:39 +00:00
laboratorioMovil,
2022-08-15 03:11:44 +00:00
motivo,
numero_equipos,
2022-12-19 23:33:39 +00:00
carrito,
operador,
2022-08-15 03:11:44 +00:00
}),
);
}
2022-12-19 23:33:39 +00:00
async findAllByIdCarrito(
2023-01-11 18:46:48 +00:00
admin: Operador,
2022-12-19 23:33:39 +00:00
id_carrito: number,
pagina?: number,
): Promise<CarritoMotivo[] | [CarritoMotivo[], number]> {
const carrito = await this.carritoService.findById(id_carrito);
const options: FindManyOptions<CarritoMotivo> = { where: { carrito } };
2023-01-11 18:46:48 +00:00
// Validamos que el carrito pertenezca a la institución del admin
2022-12-19 23:33:39 +00:00
if (
carrito.modulo.institucion.id_institucion !=
2023-01-11 18:46:48 +00:00
admin.institucion.id_institucion
2022-12-19 23:33:39 +00:00
)
throw new ForbiddenException(
'No puedes acceder a esta información porque no le pertenece a tu institución.',
);
2022-12-20 12:28:45 +00:00
// Si se mandó página significa que requiere paginación
2022-12-19 23:33:39 +00:00
if (pagina) {
options.skip = (pagina - 1) * 25;
options.take = 25;
return this.repository.findAndCount(options);
} else return this.repository.find(options);
2022-08-15 03:11:44 +00:00
}
2023-01-11 18:46:48 +00:00
async findAllLaboratorioMovil(
admin: Operador,
filtros: {
carrito?: string;
2023-01-17 15:31:48 +00:00
id_institucion?: string;
2023-01-11 18:46:48 +00:00
id_marca?: string;
id_modelo?: string;
id_modulo?: string;
id_tipo_carrito?: string;
},
): Promise<CarritoMotivo[]> {
2023-01-17 15:31:48 +00:00
const institucion = filtros.id_institucion
? await this.institucionService.findById(parseInt(filtros.id_institucion))
: null;
2023-01-11 18:46:48 +00:00
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;
2023-01-17 15:31:48 +00:00
const busquedaCarrito: FindOptionsWhere<Carrito> = {};
2023-01-11 18:46:48 +00:00
const busqueda: FindOptionsWhere<CarritoMotivo> = {
laboratorioMovil: true,
};
if (filtros.carrito) busquedaCarrito.carrito = filtros.carrito;
2023-01-17 15:31:48 +00:00
if (admin.institucion)
busquedaCarrito.modulo = { institucion: admin.institucion };
else if (institucion) busquedaCarrito.modulo = { institucion };
2023-01-11 18:46:48 +00:00
if (marca) busquedaCarrito.marca = marca;
if (modelo) busquedaCarrito.modelo = modelo;
2023-01-17 15:31:48 +00:00
if (modulo && admin.institucion) busquedaCarrito.modulo = modulo;
2023-01-11 18:46:48 +00:00
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,
});
}
2022-08-15 03:11:44 +00:00
}