Criação do handler de autenticação, para um futuro microserviço de auth
This commit is contained in:
215
src/orders/repositories/orders.repository.ts
Normal file
215
src/orders/repositories/orders.repository.ts
Normal file
@@ -0,0 +1,215 @@
|
||||
// src/modules/orders/infrastructure/repositories/orders.repository.ts
|
||||
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { DataSource } from 'typeorm';
|
||||
import { InjectDataSource } from '@nestjs/typeorm';
|
||||
import { createOracleConfig } from '../../core/configs/typeorm.oracle.config';
|
||||
import { FindOrdersDto } from '../dto/find-orders.dto';
|
||||
|
||||
@Injectable()
|
||||
export class OrdersRepository {
|
||||
constructor(
|
||||
@InjectDataSource('oracle') private readonly dataSource: DataSource
|
||||
) {}
|
||||
|
||||
async findOrders(query: FindOrdersDto): Promise<any[]> {
|
||||
await this.dataSource.initialize();
|
||||
const queryRunner = this.dataSource.createQueryRunner();
|
||||
await queryRunner.connect();
|
||||
|
||||
try {
|
||||
let sql = `SELECT PCPEDC.DATA as "createDate"
|
||||
,PCPEDC.CODFILIAL || CASE WHEN PCPEDC.CODFILIALLOJA IS NOT NULL THEN
|
||||
' - Pre-Box ('||PCPEDC.CODFILIALLOJA||')'
|
||||
ELSE NULL END as "storeId"
|
||||
,PCPEDC.NUMPED as "orderId"
|
||||
,PCPEDC.CODCLI as "customerId"
|
||||
,PCPEDC.CODCLI||' - '||PCCLIENT.CLIENTE as "customerName"
|
||||
,PCPEDC.CODUSUR as "sellerId"
|
||||
,PCPEDC.CODUSUR||' - '||PCUSUARI.NOME as "sellerName"
|
||||
,PCSUPERV.NOME as "store"
|
||||
,( SELECT CASE WHEN PCPEDI.TIPOENTREGA = 'EN' THEN 'Entrega ('||PCPEDI.TIPOENTREGA||')'
|
||||
WHEN PCPEDI.TIPOENTREGA = 'EF' THEN 'Entrega Futura ('||PCPEDI.TIPOENTREGA||')'
|
||||
WHEN PCPEDI.TIPOENTREGA = 'RP' THEN 'Retira Posterior ('||PCPEDI.TIPOENTREGA||')'
|
||||
WHEN PCPEDI.TIPOENTREGA = 'RI' THEN 'Retira Imediata ('||PCPEDI.TIPOENTREGA||')'
|
||||
ELSE 'Não Informado' END
|
||||
FROM PCPEDI
|
||||
WHERE PCPEDI.NUMPED = PCPEDC.NUMPED
|
||||
AND ROWNUM = 1 ) as "deliveryType"
|
||||
,CASE WHEN NVL(PCPEDC.CODENDENTCLI,0) = 0 THEN
|
||||
( SELECT PCPRACA.CODPRACA||'-'||PCPRACA.PRACA
|
||||
FROM PCPRACA
|
||||
WHERE PCPRACA.CODPRACA = PCPEDC.CODPRACA )
|
||||
ELSE ( SELECT PCPRACA.CODPRACA||'-'||PCPRACA.PRACA
|
||||
FROM PCCLIENTENDENT, PCPRACA
|
||||
WHERE PCCLIENTENDENT.CODCLI = PCPEDC.CODCLI
|
||||
AND PCCLIENTENDENT.CODENDENTCLI = PCPEDC.CODENDENTCLI
|
||||
AND PCCLIENTENDENT.CODPRACAENT = PCPRACA.CODPRACA ) END as "deliveryLocal"
|
||||
,CASE WHEN NVL(PCPEDC.CODENDENTCLI,0) = 0 THEN
|
||||
( SELECT PCROTAEXP.CODROTA||'-'||PCROTAEXP.DESCRICAO
|
||||
FROM PCPRACA, PCROTAEXP
|
||||
WHERE PCPRACA.CODPRACA = PCPEDC.CODPRACA
|
||||
AND PCPRACA.ROTA = PCROTAEXP.CODROTA )
|
||||
ELSE ( SELECT PCROTAEXP.CODROTA||'-'||PCROTAEXP.DESCRICAO
|
||||
FROM PCCLIENTENDENT, PCPRACA, PCROTAEXP
|
||||
WHERE PCCLIENTENDENT.CODCLI = PCPEDC.CODCLI
|
||||
AND PCCLIENTENDENT.CODENDENTCLI = PCPEDC.CODENDENTCLI
|
||||
AND PCCLIENTENDENT.CODPRACAENT = PCPRACA.CODPRACA
|
||||
AND PCPRACA.ROTA = PCROTAEXP.CODROTA ) END as "masterDeliveryLocal"
|
||||
,CASE WHEN PCPEDC.CONDVENDA = 1 THEN 'TV1 - Retira Imediata'
|
||||
WHEN PCPEDC.CONDVENDA = 7 THEN 'TV7 - Faturamento'
|
||||
WHEN PCPEDC.CONDVENDA = 8 THEN 'TV8 - Entrega (' ||
|
||||
( SELECT PCPEDI.TIPOENTREGA FROM PCPEDI
|
||||
WHERE PCPEDI.NUMPED = PCPEDC.NUMPED
|
||||
AND ROWNUM = 1 ) ||')'
|
||||
WHEN PCPEDC.CONDVENDA = 10 THEN 'TV10 - Transferência'
|
||||
ELSE 'Outros' END as "orderType"
|
||||
,CASE WHEN PCPEDC.POSICAO = 'P' THEN 'Pendente'
|
||||
WHEN PCPEDC.POSICAO = 'B' THEN 'Bloqueado'
|
||||
WHEN PCPEDC.POSICAO = 'L' THEN 'Liberado'
|
||||
WHEN PCPEDC.POSICAO = 'M' THEN 'Montado'
|
||||
WHEN PCPEDC.POSICAO = 'F' THEN 'Faturado'
|
||||
WHEN PCPEDC.POSICAO = 'C' THEN 'Cancelado'
|
||||
END as "status"
|
||||
,CASE WHEN PCPEDC.CONDVENDA IN (1,7) THEN PCPEDC.VLATEND ELSE PCPEDC.VLTOTAL END as "amount"
|
||||
,PCPEDC.DTENTREGA as "deliveryDate"
|
||||
,CASE WHEN PCPEDC.tipoprioridadeentrega = 'B' THEN 'Baixa'
|
||||
WHEN PCPEDC.TIPOPRIORIDADEENTREGA = 'M' THEN 'Média'
|
||||
WHEN PCPEDC.TIPOPRIORIDADEENTREGA = 'A' THEN 'Alta'
|
||||
ELSE 'Não Definido' END as "deliveryPriority"
|
||||
,PCPEDC.NUMCAR as "shipmentId"
|
||||
,PCPEDC.DTLIBERA as "releaseDate"
|
||||
,PCPEDC.CODFUNCLIBERA as "releaseUser"
|
||||
,PCPEDC.CODFUNCLIBERA||'-'||
|
||||
(SELECT PCEMPR.NOME FROM PCEMPR WHERE PCEMPR.MATRICULA = PCPEDC.CODFUNCLIBERA) as "releaseUserName"
|
||||
,PCCARREG.DTSAIDA as "shipmentDate"
|
||||
,PCCARREG.DATAMON as "shipmentDateCreate"
|
||||
,CASE WHEN PCPEDC.NUMCAR = 0 THEN NULL
|
||||
ELSE PCCARREG.DTFECHA END as "shipmentCloseDate"
|
||||
,PCPEDC.CODPLPAG as "paymentId"
|
||||
,PCPLPAG.DESCRICAO as "paymentName"
|
||||
,PCPEDC.CODCOB as "billingId"
|
||||
,PCPEDC.CODCOB||'-'||
|
||||
PCCOB.COBRANCA as "billingName"
|
||||
,PCPEDC.DTFAT as "invoiceDate"
|
||||
,PCPEDC.HORAFAT as "invoiceHour"
|
||||
,PCPEDC.MINUTOFAT as "invoiceMinute"
|
||||
,PCPEDC.NUMNOTA as "invoiceNumber"
|
||||
,PCPEDC.MOTIVOPOSICAO as "BloqDescription"
|
||||
,PCNFSAID.DTCANHOTO as "confirmDeliveryDate"
|
||||
,PCPEDC.TOTPESO as "totalWeigth"
|
||||
,CASE WHEN PCNFSAID.DTCANHOTO IS NOT NULL THEN 4
|
||||
WHEN PCPEDC.POSICAO = 'F' THEN 3
|
||||
WHEN PCPEDC.DTFINALSEP IS NOT NULL THEN 2
|
||||
WHEN PCPEDC.POSICAO = 'M' THEN 1
|
||||
WHEN PCPEDC.POSICAO IN ('L', 'P', 'B') THEN 0
|
||||
ELSE 0 END as "processOrder"
|
||||
,( SELECT COUNT(1) FROM PCPREST, PCNFSAID, PCPEDC PED_VGER
|
||||
WHERE PCPREST.NUMTRANSVENDA = PCNFSAID.NUMTRANSVENDA
|
||||
AND PCNFSAID.NUMTRANSVENDA = PED_VGER.NUMTRANSVENDA
|
||||
AND PED_VGER.NUMPED = PCPEDC.NUMPEDENTFUT
|
||||
AND PCPREST.DTPAG IS NULL
|
||||
AND PCPREST.CODCOB = 'VGER' ) as "payment"
|
||||
,MOTORISTA.MATRICULA || ' - ' || MOTORISTA.NOME as "driver"
|
||||
,PCPEDC.NUMPEDENTFUT as "orderSaleId"
|
||||
,PCVEICUL.DESCRICAO||' ( '|| PCVEICUL.PLACA||' )' as "carDescription"
|
||||
,PCVEICUL.PLACA as "carIdentification"
|
||||
,PCPEDC.CODFORNECFRETE||' - '||PCFORNEC.FORNECEDOR as "carrier"
|
||||
,CASE WHEN (SELECT COUNT(1) FROM PCNFENT, PCFILIAL
|
||||
WHERE PCFILIAL.CODIGO = PCPEDC.CODFILIAL
|
||||
AND PCFILIAL.CODFORNEC = PCNFENT.CODFORNEC
|
||||
AND PCNFENT.NUMNOTA = PCPEDC.NUMNOTA ) = 0
|
||||
AND PCPEDC.CONDVENDA = 10
|
||||
AND PCPEDC.POSICAO = 'F' THEN 'Em Trânsito'
|
||||
WHEN PCPEDC.POSICAO = 'M'
|
||||
AND PCPEDC.CONDVENDA = 10 THEN 'Em Separação'
|
||||
WHEN PCPEDC.POSICAO IN ( 'L', 'P' )
|
||||
AND PCPEDC.CONDVENDA = 10 THEN 'Aguardando Separação'
|
||||
WHEN PCPEDC.CONDVENDA NOT IN ( 10 ) THEN NULL
|
||||
ELSE 'Concluída' END as "statusTransfer"
|
||||
,PCPEDC.CODFILIALLOJA as "storePreBox"
|
||||
FROM PCPEDC, PCCLIENT, PCUSUARI, PCSUPERV, PCCOB, PCPLPAG, PCCARREG, PCNFSAID,
|
||||
PCEMPR MOTORISTA, PCVEICUL, PCFORNEC
|
||||
WHERE PCPEDC.CODCLI = PCCLIENT.CODCLI
|
||||
AND PCPEDC.CODUSUR = PCUSUARI.CODUSUR
|
||||
AND PCPEDC.CODPLPAG = PCPLPAG.CODPLPAG
|
||||
AND PCPEDC.CODCOB = PCCOB.CODCOB
|
||||
AND PCPEDC.CODSUPERVISOR = PCSUPERV.CODSUPERVISOR
|
||||
AND PCPEDC.NUMTRANSVENDA = PCNFSAID.NUMTRANSVENDA (+)
|
||||
AND PCPEDC.NUMCAR = PCCARREG.NUMCAR (+)
|
||||
AND PCCARREG.CODMOTORISTA = MOTORISTA.MATRICULA (+)
|
||||
AND PCCARREG.CODVEICULO = PCVEICUL.CODVEICULO (+)
|
||||
AND PCPEDC.CODFORNECFRETE = PCFORNEC.CODFORNEC (+)`;
|
||||
|
||||
const conditions: string[] = [];
|
||||
|
||||
if (query.storeId) {
|
||||
conditions.push(`AND PCPEDC.CODFILIAL = :storeId`);
|
||||
}
|
||||
if (query.storeStockId) {
|
||||
conditions.push(`AND EXISTS(SELECT 1 FROM PCPEDI WHERE PCPEDI.NUMPED = PCPEDC.NUMPED AND PCPEDI.CODFILIALRETIRA = :storeStockId)`);
|
||||
}
|
||||
if (query.sellerId) {
|
||||
conditions.push(`AND PCPEDC.CODUSUR = :sellerId`);
|
||||
}
|
||||
if (query.customerId) {
|
||||
conditions.push(`AND PCPEDC.CODCLI = :customerId`);
|
||||
}
|
||||
if (query.billingId) {
|
||||
conditions.push(`AND PCPEDC.CODCOB = :billingId`);
|
||||
}
|
||||
if (query.orderId) {
|
||||
conditions.push(`AND (PCPEDC.NUMPED = :orderId OR PCPEDC.NUMPEDENTFUT = :orderId)`);
|
||||
}
|
||||
if (query.invoiceId) {
|
||||
conditions.push(`AND PCPEDC.NUMNOTA = :invoiceId`);
|
||||
}
|
||||
if (query.productId) {
|
||||
conditions.push(`AND EXISTS(SELECT 1 FROM PCPEDI WHERE PCPEDI.NUMPED = PCPEDC.NUMPED AND PCPEDI.CODPROD = :productId)`);
|
||||
}
|
||||
if (query.createDateIni) {
|
||||
conditions.push(`AND PCPEDC.DATA >= TO_DATE(:createDateIni, 'YYYY-MM-DD')`);
|
||||
}
|
||||
if (query.createDateEnd) {
|
||||
conditions.push(`AND PCPEDC.DATA <= TO_DATE(:createDateEnd, 'YYYY-MM-DD')`);
|
||||
}
|
||||
if (query.invoiceDateIni) {
|
||||
conditions.push(`AND PCPEDC.DTFAT >= TO_DATE(:invoiceDateIni, 'YYYY-MM-DD')`);
|
||||
}
|
||||
if (query.invoiceDateEnd) {
|
||||
conditions.push(`AND PCPEDC.DTFAT <= TO_DATE(:invoiceDateEnd, 'YYYY-MM-DD')`);
|
||||
}
|
||||
if (query.shippimentId) {
|
||||
conditions.push(`AND PCPEDC.NUMCAR = :shippimentId`);
|
||||
}
|
||||
if (query.deliveryType) {
|
||||
const types = query.deliveryType.split(',').map(t => `'${t}'`).join(',');
|
||||
conditions.push(`AND EXISTS(SELECT 1 FROM PCPEDI WHERE PCPEDI.NUMPED = PCPEDC.NUMPED AND PCPEDI.TIPOENTREGA IN (${types}))`);
|
||||
}
|
||||
if (query.status) {
|
||||
const statusList = query.status.split(',').map(s => `'${s}'`).join(',');
|
||||
conditions.push(`AND PCPEDC.POSICAO IN (${statusList})`);
|
||||
}
|
||||
if (query.type) {
|
||||
const types = query.type.split(',').map(t => `'${t}'`).join(',');
|
||||
conditions.push(`AND PCPEDC.CONDVENDA IN (${types})`);
|
||||
}
|
||||
if (query.onlyPendentingTransfer === 'S') {
|
||||
conditions.push(`
|
||||
AND NOT EXISTS(SELECT 1 FROM PCNFENT, PCFILIAL
|
||||
WHERE PCFILIAL.CODIGO = PCPEDC.CODFILIAL
|
||||
AND PCFILIAL.CODFORNEC = PCNFENT.CODFORNEC
|
||||
AND PCNFENT.NUMNOTA = PCPEDC.NUMNOTA)`);
|
||||
}
|
||||
|
||||
sql += '\n' + conditions.join('\n');
|
||||
sql += '\nAND ROWNUM < 5000';
|
||||
|
||||
const orders = await queryRunner.manager.query(sql);
|
||||
return orders;
|
||||
} finally {
|
||||
await queryRunner.release();
|
||||
await this.dataSource.destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user