ajuste orders

This commit is contained in:
Joelson
2025-09-25 22:31:29 -03:00
parent 7b5fa2e78d
commit 893a7c5b0a
7 changed files with 432 additions and 9 deletions

View File

@@ -11,6 +11,8 @@ import { OrderStatusDto } from '../dto/OrderStatusDto';
import { InvoiceCheckDto } from '../dto/invoice-check.dto';
import { LeadtimeDto } from "../dto/leadtime.dto";
import { MarkData } from "../interface/markdata";
import { DeliveryCompletedQuery } from "../dto/delivery-completed-query.dto";
import { DeliveryCompleted } from "../dto/delivery-completed.dto";
@Injectable()
@@ -1569,4 +1571,251 @@ WHERE
`;
return await this.oracleDataSource.query(sql, [markName]);
}
/**
* Busca o NUMTRANSVENDA de um pedido específico
* @param orderId - ID do pedido
* @returns NUMTRANSVENDA do pedido ou null se não encontrado
*/
async getOrderTransactionId(orderId: string): Promise<number | null> {
const sql = `
SELECT NUMTRANSVENDA
FROM PCPEDC
WHERE NUMPED = :1
`;
const result = await this.oracleDataSource.query(sql, [orderId]);
return result.length > 0 ? result[0].NUMTRANSVENDA : null;
}
/**
* Busca entregas realizadas por transactionId
* @param query - Filtros para a consulta de entregas realizadas incluindo transactionId
* @returns Lista de entregas realizadas
*/
async getCompletedDeliveriesByTransactionId(query: { transactionId: number; limit: number; offset: number }): Promise<DeliveryCompleted[]> {
const sql = `
SELECT
ESTENTREGAS.CODSAIDA AS "outId"
,ESTENTREGAS.NUMTRANSVENDA AS "transactionId"
,ESTENTREGAS.DATA AS "deliveryDate"
,PCNFSAID.NUMNOTA AS "invoiceNumber"
,PCNFSAID.CODCLI AS "customerId"
,PCCLIENT.CLIENTE AS "customerName"
,ESTENTREGAS.DOCUMENTORECEBEDOR AS "deliveryDoc"
,ESTENTREGAS.NOMERECEBEDOR AS "deliveryName"
,ESTENTREGAS.LAT AS "lat"
,ESTENTREGAS.LNG AS "lng"
,ESTENTREGAS.AVARIA AS "existBreakdown"
,ESTENTREGAS.DEVOLUCAO AS "existReturn"
,ESTENTREGAS.MOTIVODEVOLUCAO AS "obsReturn"
,PCNFSAID.DTCANHOTO AS "dataCanhoto"
,PCNFSAID.NUMTRANSVENDA AS "transactionIdInvoice"
,PCNFSAID.CODFUNCCANHOTO AS "invoiceUserId"
,PCEMPR.NOME AS "invoiceUserName"
,ESTSITUACAOENTREGA.SITUACAO AS "deliveryStatus"
,PCCARREG.CODMOTORISTA AS "driverId"
,MOTORISTA.NOME AS "driverName"
FROM ESTENTREGAS, PCNFSAID, PCCLIENT, PCEMPR, ESTSITUACAOENTREGA, ESTSAIDAVEICULOCARREG, PCCARREG, PCEMPR MOTORISTA
WHERE ESTENTREGAS.NUMTRANSVENDA = PCNFSAID.NUMTRANSVENDA
AND ESTENTREGAS.CODSAIDA = ESTSAIDAVEICULOCARREG.CODSAIDA
AND PCNFSAID.NUMCAR = ESTSAIDAVEICULOCARREG.NUMCAR
AND PCNFSAID.NUMCAR = PCCARREG.NUMCAR
AND PCCARREG.CODMOTORISTA = MOTORISTA.MATRICULA (+)
AND PCNFSAID.CODCLI = PCCLIENT.CODCLI
AND PCNFSAID.CODFUNCCANHOTO = PCEMPR.MATRICULA (+)
AND ESTENTREGAS.CODSAIDA = ESTSITUACAOENTREGA.CODSAIDA (+)
AND PCNFSAID.CODCLI = ESTSITUACAOENTREGA.CODCLI (+)
AND ESTENTREGAS.NUMTRANSVENDA = :1
ORDER BY ESTENTREGAS.DATA DESC
OFFSET :2 ROWS FETCH NEXT :3 ROWS ONLY
`;
const deliveries = await this.oracleDataSource.query(sql, [
query.transactionId,
query.offset,
query.limit
]);
// Buscar imagens para cada entrega
for (let index = 0; index < deliveries.length; index++) {
const delivery = deliveries[index];
const sqlImages = `
SELECT URL
FROM ESTENTREGASIMAGENS
WHERE CODSAIDA = :1
AND NUMTRANSVENDA = :2
`;
const images = await this.oracleDataSource.query(sqlImages, [delivery.outId, delivery.transactionId]);
delivery.urlImages = images.map((image: any) => image.URL);
}
// Converter os resultados para o formato esperado
return deliveries.map((row: any) => ({
outId: row.outId,
transactionId: row.transactionId,
deliveryDate: row.deliveryDate,
invoiceNumber: row.invoiceNumber,
customerId: row.customerId,
customerName: row.customerName,
deliveryDoc: row.deliveryDoc,
deliveryName: row.deliveryName,
lat: row.lat,
lng: row.lng,
existBreakdown: row.existBreakdown,
existReturn: row.existReturn,
obsReturn: row.obsReturn,
dataCanhoto: row.dataCanhoto,
transactionIdInvoice: row.transactionIdInvoice,
invoiceUserId: row.invoiceUserId,
invoiceUserName: row.invoiceUserName,
deliveryStatus: row.deliveryStatus,
driverId: row.driverId,
driverName: row.driverName,
urlImages: [...row.urlImages],
}));
}
/**
* Busca entregas realizadas com filtros opcionais
* @param query - Filtros para a consulta de entregas realizadas
* @returns Lista de entregas realizadas
*/
async getCompletedDeliveries(query: DeliveryCompletedQuery): Promise<DeliveryCompleted[]> {
let sql = `
SELECT
ESTENTREGAS.CODSAIDA AS "outId"
,ESTENTREGAS.NUMTRANSVENDA AS "transactionId"
,ESTENTREGAS.DATA AS "deliveryDate"
,PCNFSAID.NUMNOTA AS "invoiceNumber"
,PCNFSAID.CODCLI AS "customerId"
,PCCLIENT.CLIENTE AS "customerName"
,ESTENTREGAS.DOCUMENTORECEBEDOR AS "deliveryDoc"
,ESTENTREGAS.NOMERECEBEDOR AS "deliveryName"
,ESTENTREGAS.LAT AS "lat"
,ESTENTREGAS.LNG AS "lng"
,ESTENTREGAS.AVARIA AS "existBreakdown"
,ESTENTREGAS.DEVOLUCAO AS "existReturn"
,ESTENTREGAS.MOTIVODEVOLUCAO AS "obsReturn"
,PCNFSAID.DTCANHOTO AS "dataCanhoto"
,PCNFSAID.NUMTRANSVENDA AS "transactionIdInvoice"
,PCNFSAID.CODFUNCCANHOTO AS "invoiceUserId"
,PCEMPR.NOME AS "invoiceUserName"
,ESTSITUACAOENTREGA.SITUACAO AS "deliveryStatus"
,PCCARREG.CODMOTORISTA AS "driverId"
,MOTORISTA.NOME AS "driverName"
FROM ESTENTREGAS, PCNFSAID, PCCLIENT, PCEMPR, ESTSITUACAOENTREGA, ESTSAIDAVEICULOCARREG, PCCARREG, PCEMPR MOTORISTA
WHERE ESTENTREGAS.NUMTRANSVENDA = PCNFSAID.NUMTRANSVENDA
AND ESTENTREGAS.CODSAIDA = ESTSAIDAVEICULOCARREG.CODSAIDA
AND PCNFSAID.NUMCAR = ESTSAIDAVEICULOCARREG.NUMCAR
AND PCNFSAID.NUMCAR = PCCARREG.NUMCAR
AND PCCARREG.CODMOTORISTA = MOTORISTA.MATRICULA (+)
AND PCNFSAID.CODCLI = PCCLIENT.CODCLI
AND PCNFSAID.CODFUNCCANHOTO = PCEMPR.MATRICULA (+)
AND ESTENTREGAS.CODSAIDA = ESTSITUACAOENTREGA.CODSAIDA (+)
AND PCNFSAID.CODCLI = ESTSITUACAOENTREGA.CODCLI (+)
`;
const parameters: any[] = [];
let paramIndex = 1;
// Filtros opcionais
if (query.startDate) {
sql += ` AND TRUNC(ESTENTREGAS.DATA) >= TO_DATE(:${paramIndex},'YYYY-MM-DD')`;
parameters.push(query.startDate);
paramIndex++;
}
if (query.endDate) {
sql += ` AND TRUNC(ESTENTREGAS.DATA) <= TO_DATE(:${paramIndex},'YYYY-MM-DD')`;
parameters.push(query.endDate);
paramIndex++;
}
if (query.outId) {
sql += ` AND ESTENTREGAS.CODSAIDA = :${paramIndex}`;
parameters.push(query.outId);
paramIndex++;
}
if (query.driverName) {
sql += ` AND UPPER(MOTORISTA.NOME) LIKE UPPER(:${paramIndex})`;
parameters.push(`%${query.driverName}%`);
paramIndex++;
}
if (query.customerId && query.customerId > 0) {
sql += ` AND PCCLIENT.CODCLI = :${paramIndex}`;
parameters.push(query.customerId);
paramIndex++;
}
if (query.customerName) {
sql += ` AND UPPER(PCCLIENT.CLIENTE) LIKE UPPER(:${paramIndex})`;
parameters.push(`%${query.customerName}%`);
paramIndex++;
}
if (query.orderNumber) {
sql += ` AND PCNFSAID.NUMNOTA = :${paramIndex}`;
parameters.push(query.orderNumber);
paramIndex++;
}
if (query.status) {
sql += ` AND ESTSITUACAOENTREGA.SITUACAO = :${paramIndex}`;
parameters.push(query.status);
paramIndex++;
}
// Ordenação
sql += ` ORDER BY ESTENTREGAS.DATA DESC`;
// Paginação
const limit = query.limit || 100;
const offset = query.offset || 0;
sql += ` OFFSET :${paramIndex} ROWS FETCH NEXT :${paramIndex + 1} ROWS ONLY`;
parameters.push(offset);
parameters.push(limit);
const deliveries = await this.oracleDataSource.query(sql, parameters);
// Buscar imagens para cada entrega
for (let index = 0; index < deliveries.length; index++) {
const delivery = deliveries[index];
const sqlImages = `
SELECT URL
FROM ESTENTREGASIMAGENS
WHERE CODSAIDA = :1
AND NUMTRANSVENDA = :2
`;
const images = await this.oracleDataSource.query(sqlImages, [delivery.outId, delivery.transactionId]);
delivery.urlImages = images.map((image: any) => image.URL);
}
// Converter os resultados para o formato esperado
return deliveries.map((row: any) => ({
outId: row.outId,
transactionId: row.transactionId,
deliveryDate: row.deliveryDate,
invoiceNumber: row.invoiceNumber,
customerId: row.customerId,
customerName: row.customerName,
deliveryDoc: row.deliveryDoc,
deliveryName: row.deliveryName,
lat: row.lat,
lng: row.lng,
existBreakdown: row.existBreakdown,
existReturn: row.existReturn,
obsReturn: row.obsReturn,
dataCanhoto: row.dataCanhoto,
transactionIdInvoice: row.transactionIdInvoice,
invoiceUserId: row.invoiceUserId,
invoiceUserName: row.invoiceUserName,
deliveryStatus: row.deliveryStatus,
driverId: row.driverId,
driverName: row.driverName,
urlImages: [...row.urlImages],
}));
}
}