reporte laboratorio movil

This commit is contained in:
2023-01-11 12:46:48 -06:00
parent 69587c2954
commit 061c0589d2
6 changed files with 170 additions and 9 deletions
@@ -10,9 +10,11 @@ import { Serealize } from '../interceptors/serialize.interceptor';
import { CarritoMotivoService } from './carrito-motivo.service';
import { ValidarUsuarioService } from '../validar-usuario/validar-usuario.service';
import { Operador } from '../operador/entity/operador.entity';
import { GetDto } from './dto/input/get.dto';
import { CarritoMotivoOutputDto } from './dto/output/carrito-motivo.dto';
import { CarritoDto } from '../carrito/dto/input/carrito.dto';
import { GetDto } from './dto/input/get.dto';
import { LaboratorioMovilDto } from './dto/input/laboratorio-movil.dto';
import { CarritoMotivoOutputDto } from './dto/output/carrito-motivo.dto';
import { CarritoMotivoLabMovilOutputDto } from './dto/output/carrito-motivo-lab-movil.dto';
@Controller('carrito-motivo')
@ApiTags('carrito-motivo')
@@ -51,6 +53,48 @@ export class CarritoMotivoController {
);
}
@Serealize(CarritoMotivoLabMovilOutputDto)
@Get('laboratorio-movil')
@UseGuards(AuthGuard('jwt'))
@ApiOperation({ description: 'Reporte de laboratorio móvil.' })
@ApiBearerAuth('jwt')
@ApiQuery({
description: 'Carrito que se desea buscar.',
name: 'carrito',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id de la marca.',
name: 'id_marca',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del modelo.',
name: 'id_modelo',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del módulo.',
name: 'id_modulo',
type: 'string',
required: false,
})
@ApiQuery({
description: 'Id del tipo de carrito.',
name: 'id_tipo_carrito',
type: 'string',
required: false,
})
laboratorioMovil(@Request() req, @Query() query: LaboratorioMovilDto) {
const admin: Operador = req.user.operador;
this.validarUsuarioService.validarAdmin(admin);
return this.carritoMotivoService.findAllLaboratorioMovil(admin, query);
}
@Serealize(CarritoMotivoOutputDto)
@Get('reporte')
@UseGuards(AuthGuard('jwt'))
@@ -5,11 +5,19 @@ import { CarritoMotivoController } from './carrito-motivo.controller';
import { CarritoMotivoService } from './carrito-motivo.service';
import { CarritoMotivo } from './entity/carrito-motivo.entity';
import { CarritoModule } from '../carrito/carrito.module';
import { InstitucionTipoCarritoModule } from '../institucion-tipo-carrito/institucion-tipo-carrito.module';
import { MarcaModule } from '../marca/marca.module';
import { ModeloModule } from '../modelo/modelo.module';
import { ModuloModule } from '../modulo/modulo.module';
import { StatusModule } from '../status/status.module';
@Module({
imports: [
forwardRef(() => CarritoModule),
InstitucionTipoCarritoModule,
MarcaModule,
ModeloModule,
ModuloModule,
PassportModule.register({ defaultStrategy: 'jwt' }),
StatusModule,
TypeOrmModule.forFeature([CarritoMotivo]),
+62 -4
View File
@@ -6,11 +6,15 @@ import {
Injectable,
} from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { FindManyOptions, Repository } from '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 { 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 {
@@ -19,6 +23,10 @@ export class CarritoMotivoService {
private repository: Repository<CarritoMotivo>,
@Inject(forwardRef(() => CarritoService))
private carritoService: CarritoService,
private institucionTipoCarritoService: InstitucionTipoCarritoService,
private marcaService: MarcaService,
private modeloService: ModeloService,
private moduloService: ModuloService,
) {}
create(
@@ -42,17 +50,17 @@ export class CarritoMotivoService {
}
async findAllByIdCarrito(
operador: Operador,
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 operador
// Validamos que el carrito pertenezca a la institución del admin
if (
carrito.modulo.institucion.id_institucion !=
operador.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.',
@@ -64,4 +72,54 @@ export class CarritoMotivoService {
return this.repository.findAndCount(options);
} else return this.repository.find(options);
}
async findAllLaboratorioMovil(
admin: Operador,
filtros: {
carrito?: string;
id_marca?: string;
id_modelo?: string;
id_modulo?: string;
id_tipo_carrito?: string;
},
): Promise<CarritoMotivo[]> {
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> = {
modulo: { institucion: admin.institucion },
};
const busqueda: FindOptionsWhere<CarritoMotivo> = {
laboratorioMovil: true,
};
if (filtros.carrito) busquedaCarrito.carrito = filtros.carrito;
if (marca) busquedaCarrito.marca = marca;
if (modelo) busquedaCarrito.modelo = modelo;
if (modulo) 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,
});
}
}
@@ -0,0 +1,29 @@
import {
IsNotEmpty,
IsNumberString,
IsOptional,
IsString,
} from 'class-validator';
export class LaboratorioMovilDto {
@IsString()
@IsNotEmpty()
@IsOptional()
carrito?: string;
@IsNumberString()
@IsOptional()
id_marca?: string;
@IsNumberString()
@IsOptional()
id_modelo?: string;
@IsNumberString()
@IsOptional()
id_modulo?: string;
@IsNumberString()
@IsOptional()
id_tipo_carrito?: string;
}
@@ -0,0 +1,25 @@
import { Expose, Type } from 'class-transformer';
import { CarritoMinOutputDto } from '../../../carrito/dto/output/carrito-min.dto';
import { OperadorMinOutputDto } from '../../../operador/dto/output/operador-min.dto';
export class CarritoMotivoLabMovilOutputDto {
@Expose()
id_motivo;
@Expose()
fecha_creacion;
@Expose()
laboratorioMovil;
@Expose()
motivo;
@Expose()
@Type(() => CarritoMinOutputDto)
carrito;
@Expose()
@Type(() => OperadorMinOutputDto)
operador;
}
@@ -14,9 +14,6 @@ export class CarritoMotivoOutputDto {
@Expose()
motivo;
@Expose()
status;
@Expose()
@Type(() => OperadorMinOutputDto)
operador;