ajuste orders
This commit is contained in:
@@ -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],
|
||||
}));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user