From 8a0fd7699bd02b6f47a5a237de3ca782c2028076 Mon Sep 17 00:00:00 2001 From: Felipe Batista Date: Fri, 9 Jan 2026 15:37:59 -0300 Subject: [PATCH] feat:painel de pedidos de cliente --- src/sales/order/order.service.ts | 2252 ++++++++++++++++-------------- 1 file changed, 1178 insertions(+), 1074 deletions(-) diff --git a/src/sales/order/order.service.ts b/src/sales/order/order.service.ts index 2bb3a10..723b99d 100644 --- a/src/sales/order/order.service.ts +++ b/src/sales/order/order.service.ts @@ -1,1072 +1,1174 @@ /* eslint-disable @typescript-eslint/camelcase */ -import { HttpException, HttpStatus, Injectable,Inject } from '@nestjs/common'; +import { HttpException, HttpStatus, Inject, Injectable } from '@nestjs/common'; +import { ListsService } from 'src/backoffice/lists/lists.service'; +import { connectionOptions } from 'src/configs/typeorm.config'; import { ShoppingItens } from 'src/domain/entity/tables/estprevendai.entity'; import { Sale } from 'src/domain/entity/tables/estvenda.entity'; import { Pcpedctemp } from 'src/domain/entity/tables/pcpedctemp.entity'; -import { Connection, QueryRunner } from 'typeorm'; -import { Pcclient } from '../../domain/entity/tables/pcclient.entity'; import { Pcpeditemp } from 'src/domain/entity/tables/pcpeditemp.entity'; import { Cart } from 'src/domain/models/cart.model'; +import { Connection, QueryRunner } from 'typeorm'; +import { Pcclient } from '../../domain/entity/tables/pcclient.entity'; import { Pcpedc } from '../../domain/entity/tables/pcpedc.entity'; -import { connectionOptions } from 'src/configs/typeorm.config'; -import { ListsService } from 'src/backoffice/lists/lists.service'; -import { CustomerService } from '../customer/customer.service'; import { AddressCustomerService } from '../address-customer/address-customer.service'; +import { CustomerService } from '../customer/customer.service'; import { ShoppingService } from '../shopping/shopping.service'; import Redis = require('ioredis'); - @Injectable() export class OrderService { + constructor( + @Inject('REDIS_CLIENT') private readonly redisClient: Redis.Redis, + private readonly listsService: ListsService, + private readonly customerService: CustomerService, + private readonly addressCustomerService: AddressCustomerService, + private readonly shoppingService: ShoppingService, + ) {} - constructor( - @Inject('REDIS_CLIENT') private readonly redisClient: Redis.Redis, - private readonly listsService: ListsService, - private readonly customerService: CustomerService, - private readonly addressCustomerService: AddressCustomerService, - private readonly shoppingService: ShoppingService, - ) { } + async create(cart: Cart) { + const shopping = await this.findShopping(cart.id); + if (shopping == null) + throw new HttpException( + 'Carrinho de compras não localizado.', + HttpStatus.NOT_FOUND, + ); + const order = await this.createOrder(cart); + return order; + } - async create(cart: Cart) { - const shopping = await this.findShopping(cart.id); - if (shopping == null) - throw new HttpException("Carrinho de compras não localizado.", HttpStatus.NOT_FOUND); - const order = await this.createOrder(cart); - return order; - } + async deleteOrdersDelivery(orderId: number, userId: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); - async deleteOrdersDelivery(orderId: number, userId: number) { - const connection = new Connection(connectionOptions); - await connection.connect(); - const queryRunner = connection.createQueryRunner(); - await queryRunner.connect(); + try { + const orderCancel = await queryRunner.query( + 'SELECT PCPEDC.NUMPED FROM PCPEDC WHERE NUMPED = :NUMPED', + [orderId], + ); - try { - const orderCancel = await queryRunner.query('SELECT PCPEDC.NUMPED FROM PCPEDC WHERE NUMPED = :NUMPED', [orderId]); - - if (orderCancel !== null && orderCancel.length > 0) { - await queryRunner.startTransaction(); - await queryRunner.query("UPDATE PCPEDC SET VENDAASSISTIDA = 'N', RESERVAESTOQUETV7 = 'N' WHERE NUMPEDENTFUT = :1", [orderId]); - await queryRunner.commitTransaction(); - const ordersDelivery = await queryRunner - .query("SELECT PCPEDC.NUMPED FROM PCPEDC WHERE NUMPEDENTFUT = :1", [orderId]); - for (const orderDelivery of ordersDelivery) { - await queryRunner - .query("BEGIN ESK_VENDA.CANCELAR_PEDIDO(:1, :2); END;", [orderDelivery.numped, userId]); - } - } - } catch (erro) { - if (queryRunner.isTransactionActive) { - await queryRunner.commitTransaction(); - } - throw erro; - } finally { - if (queryRunner.isTransactionActive) { - await queryRunner.rollbackTransaction(); - } - await queryRunner.release(); - await connection.close(); + if (orderCancel !== null && orderCancel.length > 0) { + await queryRunner.startTransaction(); + await queryRunner.query( + "UPDATE PCPEDC SET VENDAASSISTIDA = 'N', RESERVAESTOQUETV7 = 'N' WHERE NUMPEDENTFUT = :1", + [orderId], + ); + await queryRunner.commitTransaction(); + const ordersDelivery = await queryRunner.query( + 'SELECT PCPEDC.NUMPED FROM PCPEDC WHERE NUMPEDENTFUT = :1', + [orderId], + ); + for (const orderDelivery of ordersDelivery) { + await queryRunner.query( + 'BEGIN ESK_VENDA.CANCELAR_PEDIDO(:1, :2); END;', + [orderDelivery.numped, userId], + ); } + } + } catch (erro) { + if (queryRunner.isTransactionActive) { + await queryRunner.commitTransaction(); + } + throw erro; + } finally { + if (queryRunner.isTransactionActive) { + await queryRunner.rollbackTransaction(); + } + await queryRunner.release(); + await connection.close(); + } + } + + async createOrder(cart: Cart) { + const prevenda = await this.shoppingService.getShopping(cart.id); + let idPreOrder = 0; + cart.idSeller = prevenda.codusur; + if (prevenda.numped > 0) { + idPreOrder = await this.getIdOrder(prevenda.codusur); + } else { + idPreOrder = await this.getIdOrder(cart.idSeller); } - async createOrder(cart: Cart) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); - const prevenda = await this.shoppingService.getShopping(cart.id); - let idPreOrder = 0; - cart.idSeller = prevenda.codusur; - if (prevenda.numped > 0) { - idPreOrder = await this.getIdOrder(prevenda.codusur); + try { + if (prevenda.numped > 0) { + // await this.deleteOrdersDelivery(prevenda.numped, cart.userId); + const orders = await queryRunner.query( + 'SELECT PCPEDC.NUMPED FROM PCPEDC WHERE NUMPED = :NUMPED', + [prevenda.numped], + ); + if (orders !== null && orders.length > 0) { + await queryRunner.query( + 'BEGIN ESK_VENDA.CANCELAR_PEDIDO(:1, :2); END;', + [prevenda.numped, cart.userId], + ); + const orderCancel = await queryRunner.query( + 'SELECT PCPEDC.NUMPED FROM PCPEDC WHERE NUMPED = :1', + [prevenda.numped], + ); + if (orderCancel.length > 0) { + throw new HttpException( + 'Não foi possível alterar o pedido de venda, verifique se o pedido já não encontra-se FATURADO ou em SEPARAÇÃO.', + HttpStatus.BAD_REQUEST, + ); + } + } + } + + // if ( prevenda.codcli === null || prevenda.codcli === 1){ + // this.createPreCustomer(cart); + // } + + const preOrder = await this.createPreOrder(cart, idPreOrder); + + await queryRunner.query( + 'BEGIN IMPORTARVENDAS.IMPORTARPEDIDOWEB(:preOrder, :idSeller); END;', + [preOrder.numpedrca, preOrder.codusur], + ); + + const order = await queryRunner.manager + .getRepository(Pcpedc) + .createQueryBuilder('pcpedc') + .where( + '"pcpedc".numpedrca = :idPreOrder AND "pcpedc".CONDVENDA IN (1,7)', + { idPreOrder: preOrder.numpedrca }, + ) + .getOne(); + + if (!order) { + const logPreOrder = await queryRunner.query( + 'SELECT PCPEDCTEMP.NUMPEDRCA, PCPEDCTEMP.observacao_pc as "resultado" FROM PCPEDCTEMP WHERE PCPEDCTEMP.NUMPEDRCA = :idPreOrder', + [preOrder.numpedrca], + ); + console.log(JSON.stringify(logPreOrder)); + throw new HttpException( + 'Erro ao gerar pedido de venda - ' + logPreOrder[0].resultado, + HttpStatus.INTERNAL_SERVER_ERROR, + ); + } + + if (queryRunner.isTransactionActive) { + queryRunner.commitTransaction(); + } + + await queryRunner.startTransaction(); + try { + // Atualizar numero do pedido na tabela de pre venda para + let sql = + ` UPDATE ESTPREVENDAC SET NUMPED = ${order.numped} ` + + ` WHERE ESTPREVENDAC.ID = '${cart.id}' `; + await queryRunner.query(sql); + + sql = + `UPDATE PCORCAVENDAC SET ORCAMENTOUTILIZADO = 'S' ` + + ` ,NUMPED = ${order.numped} ` + + ` WHERE PCORCAVENDAC.NUMORCA = ( SELECT ESTPREVENDAC.NUMORCA FROM ESTPREVENDAC WHERE ID = '${cart.id}' ) `; + await queryRunner.query(sql); + + // await queryRunner + // .query("BEGIN ESK_VENDA.RESERVA_PIGMENTO_TINTOMETRICO(:1); END;", [cart.id]); + + sql = + `UPDATE PCPEDC SET ` + + ` POSICAO = 'L' ` + + ` , MOTIVOPOSICAO = NULL ` + + ` , CODMOTIVO = NULL ` + + ` , DATA = TRUNC(DATA) ` + + ` , CODMOTBLOQUEIO = 0 ` + + ` , CODDISTRIB = 1 ` + + ` , DTENTREGA = TRUNC(DTENTREGA) ` + + ` , ORIGEMPED = 'T' ` + + ` , DTABERTURAPEDPALM = TRUNC(DTABERTURAPEDPALM) ` + + ` , ROTINALANC = 'VENDAWEB' ` + + ` , ROTINALANCULTALT = 'VENDAWEB' ` + + ` , TIPOVENDA = 'VV' ` + + ` , TIPOEMBALAGEM = 'U' ` + + ` , PRAZO1 = NVL(PRAZO1,0) ` + + ` WHERE NUMPED = :1 ` + + ` AND NOT EXISTS(SELECT PCBLOQUEIO.CODMOTBLOQUEIO FROM PCBLOQUEIO WHERE PCBLOQUEIO.CODCOB = PCPEDC.CODCOB) ` + + ` AND ( CODCOB IN ('DH', 'D') OR CODCOB LIKE 'CAR%' ` + + ` OR EXISTS(SELECT PCCOB.CODCOB FROM PCCOB ` + + ` WHERE PCCOB.CODCOB = PCPEDC.CODCOB ` + + ` AND NVL(PCCOB.CARTAO,'N') = 'S') ) `; + await queryRunner.manager.query(sql, [order.numped]); + sql = + `UPDATE PCPEDI SET POSICAO = 'L' WHERE NUMPED = :1 ` + + ` AND EXISTS( SELECT PCPEDC.NUMPED FROM PCPEDC ` + + ` WHERE PCPEDC.NUMPED = PCPEDI.NUMPED ` + + ` AND NOT EXISTS(SELECT PCBLOQUEIO.CODMOTBLOQUEIO FROM PCBLOQUEIO WHERE PCBLOQUEIO.CODCOB = PCPEDC.CODCOB) ` + + ` AND ( PCPEDC.CODCOB IN ('DH', 'D', 'CAR') OR CODCOB LIKE 'CAR%' ` + + ` OR EXISTS(SELECT PCCOB.CODCOB FROM PCCOB ` + + ` WHERE PCCOB.CODCOB = PCPEDC.CODCOB ` + + ` AND NVL(PCCOB.CARTAO,'N') = 'S') ) )`; + await queryRunner.manager.query(sql, [order.numped]); + + await this.updateStatusItem(queryRunner, order.numped); + + sql = + ` UPDATE PCPEDC SET ` + + ` POSICAO = 'L' ` + + ` , MOTIVOPOSICAO = NULL ` + + ` , CODMOTIVO = NULL ` + + ` , DATA = TRUNC(DATA) ` + + ` , DTENTREGA = TRUNC(DTENTREGA) ` + + ` , DTPREVENTREGA = TRUNC(DTENTREGA) ` + + ` , ORIGEMPED = 'T' ` + + ` , DTABERTURAPEDPALM = TRUNC(DTABERTURAPEDPALM) ` + + ` , ROTINALANC = 'VENDAWEB' ` + + ` , ROTINALANCULTALT = 'VENDAWEB' ` + + ` , CODMOTBLOQUEIO = NULL ` + + ` , CODDISTRIB = 1 ` + + ` , TIPOVENDA = 'VV' ` + + ` , TIPOEMBALAGEM = 'U' ` + + ` , PRAZO1 = NVL(PRAZO1,0) ` + + `WHERE NOT EXISTS(SELECT PCPEDI.CODPROD FROM PCPEDI ` + + ` WHERE PCPEDI.NUMPED = PCPEDC.NUMPED ` + + ` AND PCPEDI.POSICAO NOT IN ('L') ) ` + + ` AND PCPEDC.NUMPEDENTFUT = :1 ` + + ` AND EXISTS(SELECT TV7.NUMPED FROM PCPEDC TV7 WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT ` + + ` AND TV7.POSICAO = 'L' )`; + + await queryRunner.manager.query(sql, [order.numped]); + sql = + ` UPDATE PCPEDC SET ` + + ` POSICAO = ( SELECT PCPEDI.POSICAO FROM PCPEDI WHERE PCPEDI.NUMPED = PCPEDC.NUMPED AND ROWNUM = 1 ) ` + + ` , MOTIVOPOSICAO = NULL ` + + ` , CODMOTIVO = NULL ` + + ` , DTENTREGA = TRUNC(DTENTREGA) ` + + ` , DTPREVENTREGA = TRUNC(DTENTREGA) ` + + ` , DATA = TRUNC(DATA) ` + + ` , ORIGEMPED = 'T' ` + + ` , DTABERTURAPEDPALM = TRUNC(DTABERTURAPEDPALM) ` + + ` , ROTINALANC = 'VENDAWEB' ` + + ` , ROTINALANCULTALT = 'VENDAWEB' ` + + ` , CODMOTBLOQUEIO = NULL ` + + ` , CODDISTRIB = 1 ` + + ` , TIPOVENDA = 'VV' ` + + ` , TIPOEMBALAGEM = 'U' ` + + ` , PRAZO1 = NVL(PRAZO1,0) ` + + `WHERE EXISTS(SELECT PCPEDI.CODPROD FROM PCPEDI ` + + ` WHERE PCPEDI.NUMPED = PCPEDC.NUMPED ` + + ` AND PCPEDI.POSICAO NOT IN ('L') ) ` + + ` AND PCPEDC.NUMPEDENTFUT = :1 ` + + ` AND EXISTS(SELECT TV7.NUMPED FROM PCPEDC TV7 WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT ` + + ` AND TV7.POSICAO = 'L' )`; + await queryRunner.manager.query(sql, [order.numped]); + + // atualizar campos padrão para rotina 4116 + sql = + ` UPDATE PCPEDC SET ` + + ` DTENTREGA = TRUNC(DTENTREGA) ` + + ` , DATA = TRUNC(DATA) ` + + ` , DTPREVENTREGA = TRUNC(DTENTREGA) ` + + ` , ORIGEMPED = 'T' ` + + ` , VLFRETE = 0 ` + + ` , DTABERTURAPEDPALM = TRUNC(DTABERTURAPEDPALM) ` + + ` , ROTINALANC = 'VENDAWEB' ` + + ` , ROTINALANCULTALT = 'VENDAWEB' ` + + ` , CODMOTBLOQUEIO = CASE WHEN PCPEDC.POSICAO = 'B' THEN CODMOTBLOQUEIO ELSE 0 END ` + + ` , CODDISTRIB = 1 ` + + ` , TIPOVENDA = 'VV' ` + + ` , TIPOEMBALAGEM = 'U' ` + + ` , PRAZO1 = NVL(PRAZO1,0) ` + + ` , VENDAASSISTIDA = 'S' ` + + ` , MATERIALDECONSTRUCAO = 'S' ` + + ` , TIPOPRIORIDADEENTREGA = '${cart.shippingPriority}' ` + + ` , CODUSUR3 = ${preOrder.codusur3} ` + + ` , OBSENTREGA3 = '${preOrder.obsentrega3}' ` + + ` , CODPRACA = CASE WHEN '${cart.shippingPriority}' = 'M' THEN ${cart.idStorePlace} ` + + ` WHEN NVL(CODENDENTCLI,0) = 0 THEN CODPRACA ELSE ` + + ` NVL((SELECT PCCLIENTENDENT.CODPRACAENT FROM PCCLIENTENDENT ` + + ` WHERE PCCLIENTENDENT.CODCLI = PCPEDC.CODCLI AND ` + + ` PCCLIENTENDENT.CODENDENTCLI = PCPEDC.CODENDENTCLI), PCPEDC.CODPRACA ) END ` + + `WHERE ( PCPEDC.NUMPED = :1 OR PCPEDC.NUMPEDENTFUT = :2 ) `; + await queryRunner.manager.query(sql, [order.numped, order.numped]); + + sql = + ` UPDATE PCPEDC SET ` + + ` CODCOB = ( SELECT TV7.CODCOB FROM PCPEDC TV7 WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT ) ` + + ` , CODPLPAG = ( SELECT TV7.CODPLPAG FROM PCPEDC TV7 WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT ) ` + + ` , RESERVAESTOQUETV7 = 'N' ` + + ` , DTENTREGA = ( SELECT TV7.DTENTREGA FROM PCPEDC TV7 WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT ) ` + + `WHERE (PCPEDC.NUMPEDENTFUT = :1 ) `; + await queryRunner.manager.query(sql, [order.numped]); + + sql = + ` UPDATE PCPEDI SET CODSUPERVISOR = ( SELECT PCPEDC.CODSUPERVISOR FROM PCPEDC WHERE PCPEDC.NUMPED = PCPEDI.NUMPED ) ` + + ` ,DTENTREGA = ( SELECT PCPEDC.DTENTREGA FROM PCPEDC WHERE PCPEDI.NUMPED = PCPEDC.NUMPED ) ` + + ` ,COMPLEMENTO = NVL(( SELECT PCPEDITEMP.COMPLEMENTO FROM PCPEDITEMP, PCPEDCTEMP ` + + ` WHERE PCPEDITEMP.NUMPEDRCA = PCPEDCTEMP.NUMPEDRCA ` + + ` AND PCPEDCTEMP.NUMPED = PCPEDI.NUMPED ` + + ` AND PCPEDITEMP.CODPROD = PCPEDI.CODPROD ` + + ` AND PCPEDITEMP.NUMSEQ = PCPEDI.NUMSEQ ` + + ` AND ROWNUM = 1 ), PCPEDI.COMPLEMENTO) ` + + ` WHERE PCPEDI.NUMPED IN ( SELECT PCPEDC.NUMPED FROM PCPEDC ` + + ` WHERE PCPEDC.NUMPED = :1 OR PCPEDC.NUMPEDENTFUT = :2 ) `; + await queryRunner.manager.query(sql, [order.numped, order.numped]); + + await queryRunner.commitTransaction(); + } catch (err) { + await queryRunner.rollbackTransaction(); + console.log(err); + } + + let status = ''; + const statusOrder = await queryRunner.query( + 'SELECT PCPEDC.POSICAO as "status" FROM PCPEDC WHERE NUMPED = :1', + [order.numped], + ); + switch (statusOrder[0].status) { + case 'L': { + status = 'LIBERADO'; + break; + } + case 'P': { + status = 'PENDENTE'; + break; + } + case 'B': { + status = 'BLOQUEADO'; + break; + } + case 'F': { + status = 'FATURADO'; + break; + } + case 'C': { + status = 'CANCELADO'; + break; + } + } + + /* Sempre ira retornar status = LIBERADO*/ + // status = 'LIBERADO'; + + return { + idOrder: order.numped, + status: status, + }; + } catch (err) { + console.log(err); + this.deletePreOrder(idPreOrder); + throw err; + // since we have errors let's rollback changes we made + } finally { + // you need to release query runner which is manually created: + await queryRunner.release(); + await connection.close(); + } + } + + async updateStatusItem(queryRunner: QueryRunner, orderId: number) { + const sql = + ` SELECT PCPEDI.ROWID as "rid", PCPEDI.NUMPED as "numped", PCPEDI.CODPROD as "codprod", PCPEDI.CODFILIALRETIRA as "codfilialretira", ` + + ` PCPEDI.QT as "qt", PCPEDI.POSICAO as "posicao", ` + + ` ( NVL(PCEST.QTESTGER,0) - NVL(PCEST.QTRESERV,0) - NVL(PCEST.QTBLOQUEADA,0) - NVL(PCEST.QTPENDENTE,0) + PCPEDI.QT ) as "qtestoque_disponivel" ` + + ` FROM PCPEDI, PCPEDC, PCEST, PCPEDC TV7 ` + + ` WHERE PCPEDI.CODPROD = PCEST.CODPROD ` + + ` AND PCPEDI.NUMPED = PCPEDC.NUMPED ` + + ` AND PCPEDC.NUMPEDENTFUT = TV7.NUMPED ` + + ` AND PCPEDI.CODFILIALRETIRA = PCEST.CODFILIAL ` + + ` AND NOT EXISTS(SELECT PCBLOQUEIO.CODMOTBLOQUEIO FROM PCBLOQUEIO WHERE PCBLOQUEIO.CODCOB = TV7.CODCOB) ` + + ` AND ( TV7.CODCOB IN ('DH', 'D', 'CAR') OR ( TV7.CODCOB LIKE 'CAR%' ) OR EXISTS(SELECT PCCOB.CODCOB FROM PCCOB ` + + ` WHERE PCCOB.CODCOB = TV7.CODCOB ` + + ` AND NVL(PCCOB.CARTAO,'N') = 'S') ) ` + + ` AND PCPEDC.NUMPEDENTFUT = :1 FOR UPDATE `; + const itensTV8 = await queryRunner.query(sql, [orderId]); + + for (const item of itensTV8) { + await this.updateStockItem(queryRunner, item); + } + } + + async updateStockItem(queryRunner: QueryRunner, item: any) { + let sql = ''; + if (item.posicao === 'B') { + if (item.qt > item.qtestoque_disponivel) { + sql = `UPDATE PCPEDI SET POSICAO = 'P' ` + ` WHERE PCPEDI.ROWID = :1`; + await queryRunner.manager.query(sql, [item.rid]); + } else { + sql = + `UPDATE PCEST SET QTPENDENTE = GREATEST((QTPENDENTE - :1), 0) ` + + ` ,QTRESERV = QTRESERV + :2 ` + + ` WHERE PCEST.CODFILIAL = :3 AND PCEST.CODPROD = :4`; + await queryRunner.manager.query(sql, [ + item.qt, + item.qt, + item.codfilialretira, + item.codprod, + ]); + sql = `UPDATE PCPEDI SET POSICAO = 'L' ` + ` WHERE PCPEDI.ROWID = :1`; + await queryRunner.manager.query(sql, [item.rid]); + } + } + } + + async updateOrderDelivery(orderDelivery: Pcpedc, order: Pcpedc) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + await queryRunner.manager + .createQueryBuilder() + .update(Pcpedc) + .set({ + codplpag: order.codplpag, + codcob: order.codcob, + condvenda: 8, + numpedentfut: order.numped, + log: null, + codmotivo: null, + motivoposicao: null, + vlbonific: 0, + vendaassistida: 'S', + }) + .where('numped = :numped', { numped: orderDelivery.numped }) + .execute(); + await queryRunner.commitTransaction(); + } catch (err) { + await queryRunner.rollbackTransaction(); + throw err; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async deletePreOrder(idPreOrder: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + await queryRunner.manager + .createQueryBuilder() + .delete() + .from(Pcpeditemp) + .where('"PCPEDITEMP".NUMPEDRCA = :numpedrca', { numpedrca: idPreOrder }) + .execute(); + + await queryRunner.manager + .createQueryBuilder() + .delete() + .from(Pcpedctemp) + .where('"PCPEDCTEMP".NUMPEDRCA = :numpedrca', { numpedrca: idPreOrder }) + .execute(); + await queryRunner.commitTransaction(); + } catch (err) { + await queryRunner.rollbackTransaction(); + throw err; + } finally { + await queryRunner.release(); + await connection.close(); + } + } + + async createPreOrder( + cart: Cart, + idPreOrder: number, + idPreOrderTV7: number = null, + ) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + console.log('iniciando transação'); + + try { + const customer = await this.getCustomer(cart.idCustomer); + let idSellerPreorder = cart.idSeller; + //Verifica se existe orçamento para a prevenda (CART) + const cartPreOrder = await queryRunner.query( + 'SELECT ESTPREVENDAC.NUMORCA, PCORCAVENDAC.CODUSUR as "idSeller" ' + + ' FROM ESTPREVENDAC, PCORCAVENDAC ' + + ` WHERE ESTPREVENDAC.ID = '${cart.id}' ` + + ' AND ESTPREVENDAC.NUMORCA = PCORCAVENDAC.NUMORCA ', + ); + + if (cartPreOrder != null && cartPreOrder.length > 0) { + idSellerPreorder = cartPreOrder[0].idSeller; + } + + const supervisor = await queryRunner.manager.query( + 'SELECT PCUSUARI.CODSUPERVISOR FROM PCUSUARI WHERE CODUSUR = :1', + [idSellerPreorder], + ); + console.log(supervisor); + + //Create pre-customers + if (cart.idCustomer === 1 && cart.preCustomerDocument !== null) { + const preCustomer = await queryRunner.query( + `SELECT ESTVENDAPRECLIENTE.CPF FROM ESTVENDAPRECLIENTE ` + + ` WHERE IDCART = :1 AND CPF = :2`, + [cart.id, cart.preCustomerDocument], + ); + if (preCustomer === null || preCustomer.length === 0) { + const sqlInsert = + ` INSERT INTO ESTVENDAPRECLIENTE ( CPF, IDCART, NOME, TELEFONE, DTCADASTRO, CODUSUR, NUMPEDRCA ) ` + + ` VALUES ( REGEXP_REPLACE(:CPF, '[^0-9]', '') , :IDCART, :NOME, :TELEFONE, SYSDATE, :CODUSUR, :NUMPEDRCA ) `; + await queryRunner.query(sqlInsert, [ + cart.preCustomerDocument, + cart.id, + cart.preCustomerName, + cart.preCustomerPhone, + cart.idSeller, + idPreOrder, + ]); + } + } else { + if (cart.preCustomerDocument !== null) { + await queryRunner.query( + `DELETE FROM ESTVENDAPRECLIENTE WHERE IDCART = :1 AND REGEXP_REPLACE(:CPF, '[^0-9]', '')`, + [cart.id, cart.preCustomerDocument], + ); + } + } + + //#region create PCPEDCTEMP + console.log('Cart: ' + cart); + const dateNow = new Date(); + const dateDelivery = new Date(); + dateDelivery.setDate(dateNow.getDate() + 3); + const preOrder = new Pcpedctemp(); + preOrder.numpedrca = idPreOrder; + preOrder.percvenda = 100; + preOrder.codcob = cart.idBilling; + preOrder.codplpag = cart.idPaymentPlan; + if (cart.idAddress > 0) { + preOrder.codendentcli = cart.idAddress; + preOrder.codendent = cart.idAddress; + } + preOrder.condvenda = 7; + if (idPreOrderTV7) { + preOrder.condvenda = 1; + } + preOrder.dtaberturapedpalm = new Date(); + preOrder.dtinclusao = new Date(); + preOrder.dtimportacao = new Date(); + preOrder.data = new Date(); + preOrder.hora = preOrder.data.getHours(); + preOrder.minuto = preOrder.data.getMinutes(); + preOrder.dtentrega = dateDelivery; + (preOrder.codfilial = cart.saleStore), + (preOrder.codfilialnf = preOrder.codfilial); + preOrder.codusur = idSellerPreorder; // cart.idSeller; + if (supervisor != null) { + preOrder.codsupervisor = supervisor.codsupervisor; + } + preOrder.codemitente = cart.userId; + preOrder.codusur3 = cart.idProfessional; + preOrder.tipointegracao = 'W'; + preOrder.validarnivelvenda = 'N'; + preOrder.dtentrega = cart.shippingDate; + preOrder.esc_tipoentrega = cart.scheduleDelivery === true ? 'P' : 'N'; + // preOrder.vlfrete = cart.shippingValue; --Já esta sendo incluido item para o valor de frete + preOrder.vldescontocupom = 0; + preOrder.vldescontofinanceiro = 0; + preOrder.vlentrada = 0; + preOrder.vlfretenf = 0; + preOrder.vloutrasdesp = 0; + preOrder.vltroco = 0; + preOrder.origemped = 'W'; + preOrder.integradora = 10; + preOrder.importado = 'N'; + preOrder.codautorizacaotef = 0; + preOrder.esc_ajustarfinanceiro = 'N'; + preOrder.esc_obternsu = 'N'; + preOrder.esc_vloutrasdespweb = 0; + preOrder.pedidopagoecommerce = 'S'; + preOrder.numpedmktplace = ''; + preOrder.numitens = cart.itens.length; + preOrder.obs1 = cart.notation1; + preOrder.obs2 = cart.notation2; + preOrder.obsentrega1 = cart.deliveryNote1; + preOrder.obsentrega2 = cart.deliveryNote2; + preOrder.obsentrega3 = cart.deliveryNote3; + + //Dados do cliente + preOrder.codcli = cart.idCustomer; + preOrder.codpraca = + cart.shippingPriority == 'M' && cart.idStorePlace != null + ? cart.idStorePlace + : customer.codpraca; + preOrder.fretedespacho = customer.fretedespacho; + preOrder.codfornecfrete = cart.carrierId; + + preOrder.numpedcli = preOrder.numpedrca.toString(); + preOrder.numpedweb = preOrder.numpedrca; + preOrder.data = new Date(); + preOrder.vlfrete = 0; //cart.shippingValue; + //#endregion + + //#region create PCPEDITEMP + + let numeroSeq = 1; + for (const item of cart.itens) { + const kit = await queryRunner.query( + 'SELECT PCFORMPROD.CODPRODMP as "idProduct", ' + + ' PCFORMPROD.QTPRODMP as "qtComponent", ' + + ' PCPRODUT.CODAUXILIAR as "ean" ,' + + ` case when ESTLISTAPRODUTOS.PRECOPROMOCIONAL > 0 AND '${cart.idBilling}' <> 'CHM' THEN ` + + ' ESTLISTAPRODUTOS.precopromocional ' + + ' ELSE ESTLISTAPRODUTOS.precovenda END as "listPrice" ' + + ' FROM PCFORMPROD, PCPRODUT, ESTLISTAPRODUTOS ' + + ' WHERE PCFORMPROD.CODPRODACAB = :1 ' + + ' AND PCFORMPROD.CODPRODMP = PCPRODUT.CODPROD ' + + ' AND PCPRODUT.CODPROD = ESTLISTAPRODUTOS.CODPROD ' + + ' AND ESTLISTAPRODUTOS.CODFILIAL = :2', + [item.idProduct, preOrder.codfilial], + ); + if (kit.length > 0) { + for (const componente of kit) { + const listPrice = componente.listPrice; + + const salePrice = ( + componente.listPrice * + (item.salePrice / item.listPrice) + ).toFixed(2); + + const itemOrder = new Pcpeditemp(); + itemOrder.tipointegracao = 'W'; + itemOrder.integradora = 10; + itemOrder.numpedrca = idPreOrder; + itemOrder.numpedweb = idPreOrder; + itemOrder.codcli = cart.idCustomer; + itemOrder.codusur = idSellerPreorder; //cart.idSeller; + itemOrder.numseq = numeroSeq; + itemOrder.codprod = componente.idProduct; + itemOrder.codauxiliar = componente.ean; + itemOrder.codfilialretira = item.idStock; + itemOrder.tipoentrega = + item.deliveryMethod == 'RA' ? 'RP' : item.deliveryMethod; + itemOrder.rp_imediata = item.deliveryMethod == 'RA' ? 'S' : 'N'; + if (item.deliveryMethod == 'RA') { + preOrder.dtentrega = new Date(); + } + itemOrder.ptabela = Number.parseFloat(listPrice); + itemOrder.pvenda = Number.parseFloat(salePrice); + itemOrder.qt = item.quantity * componente.qtComponent; + itemOrder.data = new Date(); + itemOrder.complemento = item.descriptionAux; + itemOrder.localizacao = item.environment; + + await queryRunner.manager + .createQueryBuilder() + .insert() + .into(Pcpeditemp) + .values(itemOrder) + .execute(); + + numeroSeq = numeroSeq + 1; + } } else { - idPreOrder = await this.getIdOrder(cart.idSeller); + const itemOrder = new Pcpeditemp(); + itemOrder.tipointegracao = 'W'; + itemOrder.integradora = 10; + itemOrder.numpedrca = idPreOrder; + itemOrder.numpedweb = idPreOrder; + itemOrder.codcli = cart.idCustomer; + itemOrder.codusur = idSellerPreorder; //cart.idSeller; + itemOrder.numseq = numeroSeq; + itemOrder.codprod = item.idProduct; + itemOrder.codauxiliar = item.ean; + itemOrder.codfilialretira = item.idStock; + itemOrder.tipoentrega = + item.deliveryMethod == 'RA' ? 'RP' : item.deliveryMethod; + itemOrder.rp_imediata = item.deliveryMethod == 'RA' ? 'S' : 'N'; + if (item.deliveryMethod == 'RA') { + preOrder.dtentrega = new Date(); + } + itemOrder.ptabela = item.listPrice; + itemOrder.pvenda = item.salePrice; + itemOrder.qt = item.quantity; + itemOrder.data = new Date(); + itemOrder.complemento = item.descriptionAux; + itemOrder.localizacao = item.environment; + + await queryRunner.manager + .createQueryBuilder() + .insert() + .into(Pcpeditemp) + .values(itemOrder) + .execute(); + + numeroSeq = numeroSeq + 1; } + } - const connection = new Connection(connectionOptions); - await connection.connect(); - const queryRunner = connection.createQueryRunner(); - await queryRunner.connect(); + //#endregion - try { + if (cart.shippingValue > 0) { + const itemOrder = new Pcpeditemp(); + itemOrder.tipointegracao = 'W'; + itemOrder.integradora = 10; + itemOrder.numpedrca = idPreOrder; + itemOrder.numpedweb = idPreOrder; + itemOrder.codcli = cart.idCustomer; + itemOrder.codusur = idSellerPreorder; //cart.idSeller; + itemOrder.numseq = numeroSeq; + itemOrder.codprod = 48500; + itemOrder.codauxiliar = 48500; + itemOrder.codfilialretira = '12'; + itemOrder.tipoentrega = 'EF'; + itemOrder.ptabela = Number.parseFloat(cart.shippingValue.toString()); + itemOrder.pvenda = Number.parseFloat(cart.shippingValue.toString()); + itemOrder.qt = 1; + itemOrder.data = new Date(); - if (prevenda.numped > 0) { - // await this.deleteOrdersDelivery(prevenda.numped, cart.userId); - const orders = await queryRunner.query('SELECT PCPEDC.NUMPED FROM PCPEDC WHERE NUMPED = :NUMPED', [prevenda.numped]); - if (orders !== null && orders.length > 0) { - await queryRunner - .query("BEGIN ESK_VENDA.CANCELAR_PEDIDO(:1, :2); END;", [prevenda.numped, cart.userId]); - const orderCancel = await queryRunner - .query('SELECT PCPEDC.NUMPED FROM PCPEDC WHERE NUMPED = :1', [prevenda.numped]); - if (orderCancel.length > 0) { - throw new HttpException('Não foi possível alterar o pedido de venda, verifique se o pedido já não encontra-se FATURADO ou em SEPARAÇÃO.', HttpStatus.BAD_REQUEST); - } - } + await queryRunner.manager + .createQueryBuilder() + .insert() + .into(Pcpeditemp) + .values(itemOrder) + .execute(); - } + numeroSeq = numeroSeq + 1; + } - // if ( prevenda.codcli === null || prevenda.codcli === 1){ - // this.createPreCustomer(cart); - // } + // execute some operations on this transaction: + await queryRunner.manager + .createQueryBuilder() + .insert() + .into(Pcpedctemp) + .values(preOrder) + .execute(); - const preOrder = await this.createPreOrder(cart, idPreOrder); - - await queryRunner - .query("BEGIN IMPORTARVENDAS.IMPORTARPEDIDOWEB(:preOrder, :idSeller); END;", [preOrder.numpedrca, preOrder.codusur]); - - const order = await queryRunner.manager - .getRepository(Pcpedc) - .createQueryBuilder('pcpedc') - .where("\"pcpedc\".numpedrca = :idPreOrder AND \"pcpedc\".CONDVENDA IN (1,7)", { idPreOrder: preOrder.numpedrca }) - .getOne(); - - if (!order) { - const logPreOrder = await queryRunner.query('SELECT PCPEDCTEMP.NUMPEDRCA, PCPEDCTEMP.observacao_pc as \"resultado\" FROM PCPEDCTEMP WHERE PCPEDCTEMP.NUMPEDRCA = :idPreOrder', - [preOrder.numpedrca]); - console.log(JSON.stringify(logPreOrder)); - throw new HttpException('Erro ao gerar pedido de venda - ' + logPreOrder[0].resultado, HttpStatus.INTERNAL_SERVER_ERROR); - } - - if (queryRunner.isTransactionActive) { - queryRunner.commitTransaction(); - } - - await queryRunner.startTransaction(); - try { - // Atualizar numero do pedido na tabela de pre venda para - let sql = ` UPDATE ESTPREVENDAC SET NUMPED = ${order.numped} ` + - ` WHERE ESTPREVENDAC.ID = '${cart.id}' `; - await queryRunner.query(sql); - - sql = `UPDATE PCORCAVENDAC SET ORCAMENTOUTILIZADO = 'S' ` + - ` ,NUMPED = ${order.numped} ` + - ` WHERE PCORCAVENDAC.NUMORCA = ( SELECT ESTPREVENDAC.NUMORCA FROM ESTPREVENDAC WHERE ID = '${cart.id}' ) `; - await queryRunner.query(sql); - - // await queryRunner - // .query("BEGIN ESK_VENDA.RESERVA_PIGMENTO_TINTOMETRICO(:1); END;", [cart.id]); - - - sql = `UPDATE PCPEDC SET ` + - ` POSICAO = 'L' ` + - ` , MOTIVOPOSICAO = NULL ` + - ` , CODMOTIVO = NULL ` + - ` , DATA = TRUNC(DATA) ` + - ` , CODMOTBLOQUEIO = 0 ` + - ` , CODDISTRIB = 1 ` + - ` , DTENTREGA = TRUNC(DTENTREGA) ` + - ` , ORIGEMPED = 'T' ` + - ` , DTABERTURAPEDPALM = TRUNC(DTABERTURAPEDPALM) ` + - ` , ROTINALANC = 'VENDAWEB' ` + - ` , ROTINALANCULTALT = 'VENDAWEB' ` + - ` , TIPOVENDA = 'VV' ` + - ` , TIPOEMBALAGEM = 'U' ` + - ` , PRAZO1 = NVL(PRAZO1,0) ` + - ` WHERE NUMPED = :1 ` + - ` AND NOT EXISTS(SELECT PCBLOQUEIO.CODMOTBLOQUEIO FROM PCBLOQUEIO WHERE PCBLOQUEIO.CODCOB = PCPEDC.CODCOB) ` + - ` AND ( CODCOB IN ('DH', 'D') OR CODCOB LIKE 'CAR%' ` + - ` OR EXISTS(SELECT PCCOB.CODCOB FROM PCCOB ` + - ` WHERE PCCOB.CODCOB = PCPEDC.CODCOB ` + - ` AND NVL(PCCOB.CARTAO,'N') = 'S') ) `; - await queryRunner.manager - .query(sql, [order.numped]); - sql = `UPDATE PCPEDI SET POSICAO = 'L' WHERE NUMPED = :1 ` + - ` AND EXISTS( SELECT PCPEDC.NUMPED FROM PCPEDC ` + - ` WHERE PCPEDC.NUMPED = PCPEDI.NUMPED ` + - ` AND NOT EXISTS(SELECT PCBLOQUEIO.CODMOTBLOQUEIO FROM PCBLOQUEIO WHERE PCBLOQUEIO.CODCOB = PCPEDC.CODCOB) ` + - ` AND ( PCPEDC.CODCOB IN ('DH', 'D', 'CAR') OR CODCOB LIKE 'CAR%' ` + - ` OR EXISTS(SELECT PCCOB.CODCOB FROM PCCOB ` + - ` WHERE PCCOB.CODCOB = PCPEDC.CODCOB ` + - ` AND NVL(PCCOB.CARTAO,'N') = 'S') ) )`; - await queryRunner.manager - .query(sql, [order.numped]); - - await this.updateStatusItem(queryRunner, order.numped); - - - sql = ` UPDATE PCPEDC SET ` + - ` POSICAO = 'L' ` + - ` , MOTIVOPOSICAO = NULL ` + - ` , CODMOTIVO = NULL ` + - ` , DATA = TRUNC(DATA) ` + - ` , DTENTREGA = TRUNC(DTENTREGA) ` + - ` , DTPREVENTREGA = TRUNC(DTENTREGA) ` + - ` , ORIGEMPED = 'T' ` + - ` , DTABERTURAPEDPALM = TRUNC(DTABERTURAPEDPALM) ` + - ` , ROTINALANC = 'VENDAWEB' ` + - ` , ROTINALANCULTALT = 'VENDAWEB' ` + - ` , CODMOTBLOQUEIO = NULL ` + - ` , CODDISTRIB = 1 ` + - ` , TIPOVENDA = 'VV' ` + - ` , TIPOEMBALAGEM = 'U' ` + - ` , PRAZO1 = NVL(PRAZO1,0) ` + - `WHERE NOT EXISTS(SELECT PCPEDI.CODPROD FROM PCPEDI ` + - ` WHERE PCPEDI.NUMPED = PCPEDC.NUMPED ` + - ` AND PCPEDI.POSICAO NOT IN ('L') ) ` + - ` AND PCPEDC.NUMPEDENTFUT = :1 ` + - ` AND EXISTS(SELECT TV7.NUMPED FROM PCPEDC TV7 WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT ` + - ` AND TV7.POSICAO = 'L' )`; - - await queryRunner.manager.query(sql, [order.numped]); - sql = ` UPDATE PCPEDC SET ` + - ` POSICAO = ( SELECT PCPEDI.POSICAO FROM PCPEDI WHERE PCPEDI.NUMPED = PCPEDC.NUMPED AND ROWNUM = 1 ) ` + - ` , MOTIVOPOSICAO = NULL ` + - ` , CODMOTIVO = NULL ` + - ` , DTENTREGA = TRUNC(DTENTREGA) ` + - ` , DTPREVENTREGA = TRUNC(DTENTREGA) ` + - ` , DATA = TRUNC(DATA) ` + - ` , ORIGEMPED = 'T' ` + - ` , DTABERTURAPEDPALM = TRUNC(DTABERTURAPEDPALM) ` + - ` , ROTINALANC = 'VENDAWEB' ` + - ` , ROTINALANCULTALT = 'VENDAWEB' ` + - ` , CODMOTBLOQUEIO = NULL ` + - ` , CODDISTRIB = 1 ` + - ` , TIPOVENDA = 'VV' ` + - ` , TIPOEMBALAGEM = 'U' ` + - ` , PRAZO1 = NVL(PRAZO1,0) ` + - `WHERE EXISTS(SELECT PCPEDI.CODPROD FROM PCPEDI ` + - ` WHERE PCPEDI.NUMPED = PCPEDC.NUMPED ` + - ` AND PCPEDI.POSICAO NOT IN ('L') ) ` + - ` AND PCPEDC.NUMPEDENTFUT = :1 ` + - ` AND EXISTS(SELECT TV7.NUMPED FROM PCPEDC TV7 WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT ` + - ` AND TV7.POSICAO = 'L' )`; - await queryRunner.manager.query(sql, [order.numped]); - - // atualizar campos padrão para rotina 4116 - sql = ` UPDATE PCPEDC SET ` + - ` DTENTREGA = TRUNC(DTENTREGA) ` + - ` , DATA = TRUNC(DATA) ` + - ` , DTPREVENTREGA = TRUNC(DTENTREGA) ` + - ` , ORIGEMPED = 'T' ` + - ` , VLFRETE = 0 ` + - ` , DTABERTURAPEDPALM = TRUNC(DTABERTURAPEDPALM) ` + - ` , ROTINALANC = 'VENDAWEB' ` + - ` , ROTINALANCULTALT = 'VENDAWEB' ` + - ` , CODMOTBLOQUEIO = CASE WHEN PCPEDC.POSICAO = 'B' THEN CODMOTBLOQUEIO ELSE 0 END ` + - ` , CODDISTRIB = 1 ` + - ` , TIPOVENDA = 'VV' ` + - ` , TIPOEMBALAGEM = 'U' ` + - ` , PRAZO1 = NVL(PRAZO1,0) ` + - ` , VENDAASSISTIDA = 'S' ` + - ` , MATERIALDECONSTRUCAO = 'S' ` + - ` , TIPOPRIORIDADEENTREGA = '${cart.shippingPriority}' ` + - ` , CODUSUR3 = ${preOrder.codusur3} ` + - ` , OBSENTREGA3 = '${preOrder.obsentrega3}' ` + - ` , CODPRACA = CASE WHEN '${cart.shippingPriority}' = 'M' THEN ${cart.idStorePlace} ` + - ` WHEN NVL(CODENDENTCLI,0) = 0 THEN CODPRACA ELSE ` + - ` NVL((SELECT PCCLIENTENDENT.CODPRACAENT FROM PCCLIENTENDENT ` + - ` WHERE PCCLIENTENDENT.CODCLI = PCPEDC.CODCLI AND ` + - ` PCCLIENTENDENT.CODENDENTCLI = PCPEDC.CODENDENTCLI), PCPEDC.CODPRACA ) END ` + - `WHERE ( PCPEDC.NUMPED = :1 OR PCPEDC.NUMPEDENTFUT = :2 ) `; - await queryRunner.manager.query(sql, [order.numped, order.numped]); - - sql = ` UPDATE PCPEDC SET ` + - ` CODCOB = ( SELECT TV7.CODCOB FROM PCPEDC TV7 WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT ) ` + - ` , CODPLPAG = ( SELECT TV7.CODPLPAG FROM PCPEDC TV7 WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT ) ` + - ` , RESERVAESTOQUETV7 = 'N' ` + - ` , DTENTREGA = ( SELECT TV7.DTENTREGA FROM PCPEDC TV7 WHERE TV7.NUMPED = PCPEDC.NUMPEDENTFUT ) ` + - `WHERE (PCPEDC.NUMPEDENTFUT = :1 ) `; - await queryRunner.manager.query(sql, [order.numped]); - - sql = ` UPDATE PCPEDI SET CODSUPERVISOR = ( SELECT PCPEDC.CODSUPERVISOR FROM PCPEDC WHERE PCPEDC.NUMPED = PCPEDI.NUMPED ) ` + - ` ,DTENTREGA = ( SELECT PCPEDC.DTENTREGA FROM PCPEDC WHERE PCPEDI.NUMPED = PCPEDC.NUMPED ) ` + - ` ,COMPLEMENTO = NVL(( SELECT PCPEDITEMP.COMPLEMENTO FROM PCPEDITEMP, PCPEDCTEMP ` + - ` WHERE PCPEDITEMP.NUMPEDRCA = PCPEDCTEMP.NUMPEDRCA ` + - ` AND PCPEDCTEMP.NUMPED = PCPEDI.NUMPED ` + - ` AND PCPEDITEMP.CODPROD = PCPEDI.CODPROD ` + - ` AND PCPEDITEMP.NUMSEQ = PCPEDI.NUMSEQ ` + - ` AND ROWNUM = 1 ), PCPEDI.COMPLEMENTO) ` + - ` WHERE PCPEDI.NUMPED IN ( SELECT PCPEDC.NUMPED FROM PCPEDC ` + - ` WHERE PCPEDC.NUMPED = :1 OR PCPEDC.NUMPEDENTFUT = :2 ) `; - await queryRunner.manager.query(sql, [order.numped, order.numped]); - - await queryRunner.commitTransaction(); - } catch (err) { - await queryRunner.rollbackTransaction(); - console.log(err); - } - - - let status = ''; - const statusOrder = await queryRunner - .query('SELECT PCPEDC.POSICAO as "status" FROM PCPEDC WHERE NUMPED = :1', [order.numped]); - switch (statusOrder[0].status) { - case 'L': { - status = 'LIBERADO'; - break; - } - case 'P': { - status = 'PENDENTE'; - break; - } - case 'B': { - status = 'BLOQUEADO'; - break; - } - case 'F': { - status = 'FATURADO'; - break; - } - case 'C': { - status = 'CANCELADO'; - break; - } - - } - - /* Sempre ira retornar status = LIBERADO*/ - // status = 'LIBERADO'; - - return { - idOrder: order.numped, - status: status - }; - } catch (err) { - console.log(err); - this.deletePreOrder(idPreOrder); - throw err; - // since we have errors let's rollback changes we made - } finally { - // you need to release query runner which is manually created: - await queryRunner.release(); - await connection.close(); - } + await queryRunner.commitTransaction(); + return preOrder; + } catch (err) { + await queryRunner.rollbackTransaction(); + throw err; + } finally { + await queryRunner.release(); + await connection.close(); } + } - async updateStatusItem(queryRunner: QueryRunner, orderId: number) { - const sql = ` SELECT PCPEDI.ROWID as "rid", PCPEDI.NUMPED as "numped", PCPEDI.CODPROD as "codprod", PCPEDI.CODFILIALRETIRA as "codfilialretira", ` + - ` PCPEDI.QT as "qt", PCPEDI.POSICAO as "posicao", ` + - ` ( NVL(PCEST.QTESTGER,0) - NVL(PCEST.QTRESERV,0) - NVL(PCEST.QTBLOQUEADA,0) - NVL(PCEST.QTPENDENTE,0) + PCPEDI.QT ) as "qtestoque_disponivel" ` + - ` FROM PCPEDI, PCPEDC, PCEST, PCPEDC TV7 ` + - ` WHERE PCPEDI.CODPROD = PCEST.CODPROD ` + - ` AND PCPEDI.NUMPED = PCPEDC.NUMPED ` + - ` AND PCPEDC.NUMPEDENTFUT = TV7.NUMPED ` + - ` AND PCPEDI.CODFILIALRETIRA = PCEST.CODFILIAL ` + - ` AND NOT EXISTS(SELECT PCBLOQUEIO.CODMOTBLOQUEIO FROM PCBLOQUEIO WHERE PCBLOQUEIO.CODCOB = TV7.CODCOB) ` + - ` AND ( TV7.CODCOB IN ('DH', 'D', 'CAR') OR ( TV7.CODCOB LIKE 'CAR%' ) OR EXISTS(SELECT PCCOB.CODCOB FROM PCCOB ` + - ` WHERE PCCOB.CODCOB = TV7.CODCOB ` + - ` AND NVL(PCCOB.CARTAO,'N') = 'S') ) ` + - ` AND PCPEDC.NUMPEDENTFUT = :1 FOR UPDATE `; - const itensTV8 = await queryRunner.query(sql, [orderId]); - - for (const item of itensTV8) { - await this.updateStockItem(queryRunner, item); - } + async findSale(id: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const sale = await queryRunner.manager + .getRepository(Sale) + .createQueryBuilder('estvenda') + .where('"estvenda".id = :id', { id: id }) + .getOne(); + return sale; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); } + } - async updateStockItem(queryRunner: QueryRunner, item: any) { - let sql = ""; - if (item.posicao === "B") { - if (item.qt > item.qtestoque_disponivel) { - sql = `UPDATE PCPEDI SET POSICAO = 'P' ` + - ` WHERE PCPEDI.ROWID = :1`; - await queryRunner.manager.query(sql, [item.rid]); - } else { - sql = `UPDATE PCEST SET QTPENDENTE = GREATEST((QTPENDENTE - :1), 0) ` + - ` ,QTRESERV = QTRESERV + :2 ` + - ` WHERE PCEST.CODFILIAL = :3 AND PCEST.CODPROD = :4`; - await queryRunner.manager.query(sql, [item.qt, item.qt, item.codfilialretira, item.codprod]); - sql = `UPDATE PCPEDI SET POSICAO = 'L' ` + - ` WHERE PCPEDI.ROWID = :1`; - await queryRunner.manager.query(sql, [item.rid]); - } - } + async findShopping(idshopping: string) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const shopping = await queryRunner.manager + .getRepository(ShoppingItens) + .createQueryBuilder('estshopping') + .where('"estshopping".id = :id', { id: idshopping }) + .getMany(); + return shopping; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); } + } - async updateOrderDelivery(orderDelivery: Pcpedc, order: Pcpedc) { - const connection = new Connection(connectionOptions); - await connection.connect(); - const queryRunner = connection.createQueryRunner(); - await queryRunner.connect(); - await queryRunner.startTransaction(); - try { - await queryRunner.manager - .createQueryBuilder() - .update(Pcpedc) - .set({ - codplpag: order.codplpag, - codcob: order.codcob, - condvenda: 8, - numpedentfut: order.numped, - log: null, - codmotivo: null, - motivoposicao: null, - vlbonific: 0, - vendaassistida: 'S' - }) - .where("numped = :numped", { numped: orderDelivery.numped }) - .execute(); - await queryRunner.commitTransaction(); - } catch (err) { - await queryRunner.rollbackTransaction(); - throw err; - } finally { - await queryRunner.release(); - await connection.close(); - } + async getIdOrder(idSeller: number): Promise { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + console.log('Consultando usuario ' + idSeller); + let sql = + 'SELECT NVL(PROXNUMPEDWEB,0) as "proxnumpedweb" FROM PCUSUARI ' + + ' WHERE PCUSUARI.CODUSUR = :1 FOR UPDATE'; + const seller = await queryRunner.query(sql, [idSeller]); + + const idOrder = seller[0].proxnumpedweb; + console.log(idOrder); + + await queryRunner.startTransaction(); + + try { + sql = + 'UPDATE PCUSUARI SET PROXNUMPEDWEB = NVL(PROXNUMPEDWEB,0) + 1 ' + + ' WHERE PCUSUARI.CODUSUR = :1'; + await queryRunner.query(sql, [idSeller]); + + await queryRunner.commitTransaction(); + return idOrder; + } catch (err) { + await queryRunner.rollbackTransaction(); + console.log(err); + return -1; + } finally { + await queryRunner.release(); + await connection.close(); } + } - async deletePreOrder(idPreOrder: number) { - const connection = new Connection(connectionOptions); - await connection.connect(); - const queryRunner = connection.createQueryRunner(); - await queryRunner.connect(); - await queryRunner.startTransaction(); - try { - await queryRunner.manager - .createQueryBuilder() - .delete() - .from(Pcpeditemp) - .where("\"PCPEDITEMP\".NUMPEDRCA = :numpedrca", { numpedrca: idPreOrder }) - .execute(); - - await queryRunner.manager - .createQueryBuilder() - .delete() - .from(Pcpedctemp) - .where("\"PCPEDCTEMP\".NUMPEDRCA = :numpedrca", { numpedrca: idPreOrder }) - .execute(); - await queryRunner.commitTransaction(); - } catch (err) { - await queryRunner.rollbackTransaction(); - throw err; - } finally { - await queryRunner.release(); - await connection.close(); - } + async getCustomer(idCustomer: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const customer = await queryRunner.manager + .getRepository(Pcclient) + .createQueryBuilder('pcclient') + .where('"pcclient".codcli = :idCustomer', { idCustomer }) + .getOne(); + return customer; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); } + } - async createPreOrder(cart: Cart, idPreOrder: number, idPreOrderTV7: number = null) { + async getOrders( + store: string, + initialDate: Date, + finalDate: Date, + document: string, + name: string, + sellerId: number, + idOrder: string, + ) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + let sqlWhere = ''; + let sql = ''; - const connection = new Connection(connectionOptions); - await connection.connect(); - const queryRunner = connection.createQueryRunner(); - await queryRunner.connect(); - await queryRunner.startTransaction(); - console.log('iniciando transação'); + try { + sql = + ` SELECT TO_CHAR(PCPEDC.DATA, \'DD/MM/YYYY\') as "createDate" ` + + ` ,PCPEDC.NUMPED as "orderId" ` + + ` ,PCPEDC.CODFILIAL as "store" ` + + ` ,CASE WHEN PCPEDC.POSICAO = 'B' THEN 'BLOQUEADO' ` + + ` WHEN PCPEDC.POSICAO = 'P' THEN 'PENDENTE' ` + + ` WHEN PCPEDC.POSICAO = 'L' THEN 'LIBERADO' ` + + ` WHEN PCPEDC.POSICAO = 'M' THEN 'MONTADO' ` + + ` WHEN PCPEDC.POSICAO = 'F' THEN 'FATURADO' END as "status" ` + + ` ,PCPEDC.CODCLI as "customerId" ` + + ` ,PCPEDC.CODUSUR as "sellerId" ` + + ` ,PCCLIENT.CLIENTE as "customerName" ` + + ` ,PCPEDC.VLATEND as "orderValue" ` + + ` ,PCPEDC.NUMITENS as "itens" ` + + ` ,CASE WHEN ( SELECT COUNT(1) FROM ESTPIX WHERE ESTPIX.NUMPED = PCPEDC.NUMPED ) > 0 THEN 'S' ELSE 'N' END as "pixCreate" ` + + ` FROM PCPEDC, PCCLIENT ` + + ` WHERE PCPEDC.CODCLI = PCCLIENT.CODCLI ` + + ` AND PCPEDC.CONDVENDA IN (1,7) ` + + ` AND PCPEDC.DTCANCEL IS NULL AND PCPEDC.POSICAO NOT IN ('C') `; + ` AND PCPEDC.ROTINALANC = 'VENDAWEB' `; + if (store != null && store != '') { + sqlWhere += ` AND PCPEDC.CODFILIAL = '${store}' `; + } + if (document != null && document != '') { + sqlWhere += ` AND REGEXP_REPLACE(PCCLIENT.CGCENT, '[^0-9]', '') = REGEXP_REPLACE('${document}', '[^0-9]', '')`; + } + if (name != null && name != '') { + sqlWhere += ` AND PCCLIENT.CLIENTE LIKE '${name.replace( + '@', + '%', + )}'||'%'`; + } + if (sellerId > 0) { + sqlWhere += ` AND PCPEDC.CODUSUR = ${sellerId} `; + } + if (idOrder.trim() != null && idOrder.trim() != '') { + sqlWhere += ` AND PCPEDC.NUMPED = ${idOrder} `; + } - try { - const customer = await this.getCustomer(cart.idCustomer); - let idSellerPreorder = cart.idSeller; - //Verifica se existe orçamento para a prevenda (CART) - const cartPreOrder = await queryRunner.query('SELECT ESTPREVENDAC.NUMORCA, PCORCAVENDAC.CODUSUR as "idSeller" ' + - ' FROM ESTPREVENDAC, PCORCAVENDAC ' + - ` WHERE ESTPREVENDAC.ID = '${cart.id}' ` + - ' AND ESTPREVENDAC.NUMORCA = PCORCAVENDAC.NUMORCA '); + //tratamento de data// + const startDate = new Date(initialDate); + let day = startDate.getDate(); + let month = ('00' + (startDate.getMonth() + 1)).slice(-2); + let year = startDate.getFullYear(); + const startFormat = day + '/' + month + '/' + year; + const endDate = new Date(finalDate); + day = endDate.getDate(); + month = ('00' + (endDate.getMonth() + 1)).slice(-2); + year = endDate.getFullYear(); + const endFormat = day + '/' + month + '/' + year; - if (cartPreOrder != null && cartPreOrder.length > 0) { - idSellerPreorder = cartPreOrder[0].idSeller; - } - - const supervisor = await queryRunner.manager.query('SELECT PCUSUARI.CODSUPERVISOR FROM PCUSUARI WHERE CODUSUR = :1', [idSellerPreorder]); - console.log(supervisor); - - //Create pre-customers - if (cart.idCustomer === 1 && cart.preCustomerDocument !== null) { - const preCustomer = await queryRunner.query(`SELECT ESTVENDAPRECLIENTE.CPF FROM ESTVENDAPRECLIENTE ` + - ` WHERE IDCART = :1 AND CPF = :2`, [cart.id, cart.preCustomerDocument]); - if (preCustomer === null || preCustomer.length === 0) { - const sqlInsert = ` INSERT INTO ESTVENDAPRECLIENTE ( CPF, IDCART, NOME, TELEFONE, DTCADASTRO, CODUSUR, NUMPEDRCA ) ` + - ` VALUES ( REGEXP_REPLACE(:CPF, '[^0-9]', '') , :IDCART, :NOME, :TELEFONE, SYSDATE, :CODUSUR, :NUMPEDRCA ) `; - await queryRunner.query(sqlInsert, [cart.preCustomerDocument, - cart.id, cart.preCustomerName, cart.preCustomerPhone, cart.idSeller, idPreOrder]); - } - } else { - if (cart.preCustomerDocument !== null) { - await queryRunner.query(`DELETE FROM ESTVENDAPRECLIENTE WHERE IDCART = :1 AND REGEXP_REPLACE(:CPF, '[^0-9]', '')`, - [cart.id, cart.preCustomerDocument]); - } - } - - - //#region create PCPEDCTEMP - console.log('Cart: ' + cart); - const dateNow = new Date(); - const dateDelivery = new Date(); - dateDelivery.setDate(dateNow.getDate() + 3); - const preOrder = new Pcpedctemp(); - preOrder.numpedrca = idPreOrder; - preOrder.percvenda = 100; - preOrder.codcob = cart.idBilling; - preOrder.codplpag = cart.idPaymentPlan; - if (cart.idAddress > 0) { - preOrder.codendentcli = cart.idAddress; - preOrder.codendent = cart.idAddress; - } - preOrder.condvenda = 7; - if (idPreOrderTV7) { - preOrder.condvenda = 1; - } - preOrder.dtaberturapedpalm = new Date(); - preOrder.dtinclusao = new Date(); - preOrder.dtimportacao = new Date(); - preOrder.data = new Date(); - preOrder.hora = preOrder.data.getHours(); - preOrder.minuto = preOrder.data.getMinutes(); - preOrder.dtentrega = dateDelivery; - preOrder.codfilial = cart.saleStore, - preOrder.codfilialnf = preOrder.codfilial; - preOrder.codusur = idSellerPreorder; // cart.idSeller; - if (supervisor != null) { - preOrder.codsupervisor = supervisor.codsupervisor; - } - preOrder.codemitente = cart.userId; - preOrder.codusur3 = cart.idProfessional; - preOrder.tipointegracao = "W"; - preOrder.validarnivelvenda = "N"; - preOrder.dtentrega = cart.shippingDate; - preOrder.esc_tipoentrega = (cart.scheduleDelivery === true) ? 'P' : 'N'; - // preOrder.vlfrete = cart.shippingValue; --Já esta sendo incluido item para o valor de frete - preOrder.vldescontocupom = 0; - preOrder.vldescontofinanceiro = 0; - preOrder.vlentrada = 0; - preOrder.vlfretenf = 0; - preOrder.vloutrasdesp = 0; - preOrder.vltroco = 0; - preOrder.origemped = "W"; - preOrder.integradora = 10; - preOrder.importado = "N"; - preOrder.codautorizacaotef = 0; - preOrder.esc_ajustarfinanceiro = "N"; - preOrder.esc_obternsu = "N"; - preOrder.esc_vloutrasdespweb = 0; - preOrder.pedidopagoecommerce = "S"; - preOrder.numpedmktplace = ""; - preOrder.numitens = cart.itens.length; - preOrder.obs1 = cart.notation1; - preOrder.obs2 = cart.notation2; - preOrder.obsentrega1 = cart.deliveryNote1; - preOrder.obsentrega2 = cart.deliveryNote2; - preOrder.obsentrega3 = cart.deliveryNote3; - - //Dados do cliente - preOrder.codcli = cart.idCustomer; - preOrder.codpraca = (cart.shippingPriority == "M" && cart.idStorePlace != null ) ? cart.idStorePlace : customer.codpraca; - preOrder.fretedespacho = customer.fretedespacho; - preOrder.codfornecfrete = cart.carrierId; - - preOrder.numpedcli = preOrder.numpedrca.toString(); - preOrder.numpedweb = preOrder.numpedrca; - preOrder.data = new Date(); - preOrder.vlfrete = 0; //cart.shippingValue; - //#endregion - - //#region create PCPEDITEMP - - let numeroSeq = 1; - for (const item of cart.itens) { - - const kit = await queryRunner.query('SELECT PCFORMPROD.CODPRODMP as "idProduct", ' + - ' PCFORMPROD.QTPRODMP as "qtComponent", ' + - ' PCPRODUT.CODAUXILIAR as "ean" ,' + - ` case when ESTLISTAPRODUTOS.PRECOPROMOCIONAL > 0 AND '${cart.idBilling}' <> 'CHM' THEN ` + - ' ESTLISTAPRODUTOS.precopromocional ' + - ' ELSE ESTLISTAPRODUTOS.precovenda END as "listPrice" ' + - ' FROM PCFORMPROD, PCPRODUT, ESTLISTAPRODUTOS ' + - ' WHERE PCFORMPROD.CODPRODACAB = :1 ' + - ' AND PCFORMPROD.CODPRODMP = PCPRODUT.CODPROD ' + - ' AND PCPRODUT.CODPROD = ESTLISTAPRODUTOS.CODPROD ' + - ' AND ESTLISTAPRODUTOS.CODFILIAL = :2', - [item.idProduct, preOrder.codfilial]); - if (kit.length > 0) { - for (const componente of kit) { - - const listPrice = componente.listPrice; - - const salePrice = (componente.listPrice * - (item.salePrice / item.listPrice)).toFixed(2); - - const itemOrder = new Pcpeditemp(); - itemOrder.tipointegracao = "W"; - itemOrder.integradora = 10; - itemOrder.numpedrca = idPreOrder; - itemOrder.numpedweb = idPreOrder; - itemOrder.codcli = cart.idCustomer; - itemOrder.codusur = idSellerPreorder; //cart.idSeller; - itemOrder.numseq = numeroSeq; - itemOrder.codprod = componente.idProduct; - itemOrder.codauxiliar = componente.ean; - itemOrder.codfilialretira = item.idStock; - itemOrder.tipoentrega = (item.deliveryMethod == 'RA') ? "RP" : item.deliveryMethod; - itemOrder.rp_imediata = (item.deliveryMethod == 'RA') ? "S" : "N"; - if ( item.deliveryMethod == 'RA') { - preOrder.dtentrega = new Date(); - } - itemOrder.ptabela = Number.parseFloat(listPrice); - itemOrder.pvenda = Number.parseFloat(salePrice); - itemOrder.qt = (item.quantity * componente.qtComponent); - itemOrder.data = new Date(); - itemOrder.complemento = item.descriptionAux; - itemOrder.localizacao = item.environment; - - await queryRunner.manager - .createQueryBuilder() - .insert() - .into(Pcpeditemp) - .values(itemOrder) - .execute(); - - numeroSeq = numeroSeq + 1; - }; - } else { - const itemOrder = new Pcpeditemp(); - itemOrder.tipointegracao = "W"; - itemOrder.integradora = 10; - itemOrder.numpedrca = idPreOrder; - itemOrder.numpedweb = idPreOrder; - itemOrder.codcli = cart.idCustomer; - itemOrder.codusur = idSellerPreorder; //cart.idSeller; - itemOrder.numseq = numeroSeq; - itemOrder.codprod = item.idProduct; - itemOrder.codauxiliar = item.ean; - itemOrder.codfilialretira = item.idStock; - itemOrder.tipoentrega = (item.deliveryMethod == 'RA') ? "RP" : item.deliveryMethod; - itemOrder.rp_imediata = (item.deliveryMethod == 'RA') ? "S" : "N"; - if ( item.deliveryMethod == 'RA') { - preOrder.dtentrega = new Date(); - } - itemOrder.ptabela = item.listPrice; - itemOrder.pvenda = item.salePrice; - itemOrder.qt = item.quantity; - itemOrder.data = new Date(); - itemOrder.complemento = item.descriptionAux; - itemOrder.localizacao = item.environment; - - await queryRunner.manager - .createQueryBuilder() - .insert() - .into(Pcpeditemp) - .values(itemOrder) - .execute(); - - numeroSeq = numeroSeq + 1; - - } - } - - //#endregion - - if (cart.shippingValue > 0) { - const itemOrder = new Pcpeditemp(); - itemOrder.tipointegracao = "W"; - itemOrder.integradora = 10; - itemOrder.numpedrca = idPreOrder; - itemOrder.numpedweb = idPreOrder; - itemOrder.codcli = cart.idCustomer; - itemOrder.codusur = idSellerPreorder; //cart.idSeller; - itemOrder.numseq = numeroSeq; - itemOrder.codprod = 48500; - itemOrder.codauxiliar = 48500; - itemOrder.codfilialretira = '12'; - itemOrder.tipoentrega = 'EF'; - itemOrder.ptabela = Number.parseFloat(cart.shippingValue.toString()); - itemOrder.pvenda = Number.parseFloat(cart.shippingValue.toString()); - itemOrder.qt = 1; - itemOrder.data = new Date(); - - - await queryRunner.manager - .createQueryBuilder() - .insert() - .into(Pcpeditemp) - .values(itemOrder) - .execute(); - - numeroSeq = numeroSeq + 1; - } - - // execute some operations on this transaction: - await queryRunner.manager - .createQueryBuilder() - .insert() - .into(Pcpedctemp) - .values(preOrder) - .execute(); - - await queryRunner.commitTransaction(); - return preOrder; - - } catch (err) { - await queryRunner.rollbackTransaction(); - throw err; - } finally { - await queryRunner.release(); - await connection.close(); - } - + sqlWhere += ` AND PCPEDC.DATA BETWEEN TO_DATE('${startFormat}', 'DD/MM/YYYY') AND TO_DATE('${endFormat}', 'DD/MM/YYYY') `; + const result = await queryRunner.query(sql + sqlWhere); + return result; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); } + } - async findSale(id: string) { - const connection = new Connection(connectionOptions); - await connection.connect(); - const queryRunner = connection.createQueryRunner(); - await queryRunner.connect(); - try { - const sale = await queryRunner.manager - .getRepository(Sale) - .createQueryBuilder('estvenda') - .where("\"estvenda\".id = :id", { id: id }) - .getOne(); - return sale; - } catch (error) { - console.log(error); - throw error; - } finally { - await queryRunner.release(); - await connection.close(); - } + async getItensOrder(idOrder: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + let sql = ''; + + try { + sql = + ` SELECT PCPEDI.CODPROD as "productId", PCPRODUT.DESCRICAO as "description", ` + + ` PCPRODUT.EMBALAGEM as "package", ` + + ` ( SELECT PCPEDITEMP.COMPLEMENTO FROM PCPEDITEMP ` + + ` WHERE PCPEDC.NUMPEDRCA = PCPEDITEMP.NUMPEDRCA ` + + ` AND PCPEDI.CODPROD = PCPEDITEMP.CODPROD ` + + ` AND PCPEDI.NUMSEQ = PCPEDITEMP.NUMSEQ ) as "color" , ` + + ` ( SELECT PCPEDITEMP.LOCALIZACAO FROM PCPEDITEMP ` + + ` WHERE PCPEDC.NUMPEDRCA = PCPEDITEMP.NUMPEDRCA ` + + ` AND PCPEDI.CODPROD = PCPEDITEMP.CODPROD ` + + ` AND PCPEDI.NUMSEQ = PCPEDITEMP.NUMSEQ ) as "local", ` + + ` PCPEDI.QT as "quantity", PCPEDI.PVENDA as "price", ( PCPEDI.QT * PCPEDI.PVENDA ) as "subTotal" ` + + ` FROM PCPEDI, PCPEDC, PCPRODUT ` + + ` WHERE PCPEDI.CODPROD = PCPRODUT.CODPROD ` + + ` AND PCPEDI.NUMPED = PCPEDC.NUMPED ` + + ` AND PCPEDC.CONDVENDA IN (7,1) ` + + ` AND PCPEDC.NUMPED = :NUMPED ` + + // ` AND PCPEDC.ROTINALANC = 'VENDAWEB' ` + + ` ORDER BY PCPEDI.NUMSEQ `; + const result = await queryRunner.query(sql, [idOrder]); + return result; + } catch (error) { + console.log(error); + throw error; + } finally { + await queryRunner.release(); + await connection.close(); } + } - async findShopping(idshopping: string) { - const connection = new Connection(connectionOptions); - await connection.connect(); - const queryRunner = connection.createQueryRunner(); - await queryRunner.connect(); - try { - const shopping = await queryRunner.manager - .getRepository(ShoppingItens) - .createQueryBuilder('estshopping') - .where("\"estshopping\".id = :id", { id: idshopping }) - .getMany(); - return shopping; - } catch (error) { - console.log(error); - throw error; - } finally { - await queryRunner.release(); - await connection.close(); - } + async getCartId(orderId: number) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const order = await queryRunner.query( + 'SELECT PCPEDC.DATA as "createDate" ' + + ' ,PCPEDC.NUMPED as "orderId" ' + + ' ,PCPEDC.CODFILIAL as "invoiceStore" ' + + ' ,PCPEDC.CODCLI as "customerId" ' + + ' ,PCPEDC.CODPLPAG as "paymentPlanId" ' + + ' ,PCPEDC.CODCOB as "billindId" ' + + ' ,PCPEDC.CODENDENT as "addressId" ' + + ' ,PCPEDC.CODUSUR3 as "partnerId" ' + + ' ,ESTPREVENDAC.ID as "cartId" ' + + ' ,PCPEDC.POSICAO as "status" ' + + ' ,PCPEDC.OBS as "notification" ' + + ' ,PCPEDC.OBS1 as "notification1" ' + + ' ,PCPEDC.OBS2 as "notification2" ' + + ' ,PCPEDC.OBSENTREGA1 as "notificationDelivery1" ' + + ' ,PCPEDC.OBSENTREGA2 as "notificationDelivery2" ' + + ' ,PCPEDC.OBSENTREGA3 as "notificationDelivery3" ' + + ' ,PCPEDC.DTENTREGA as "deliveryDate" ' + + ' ,ESTPREVENDAC.ENTREGAPROGRAMADA as "squeduleDelivery" ' + + ` ,NVL(PCPEDC.TIPOPRIORIDADEENTREGA, 'B') as "priorityDelivery" ` + + ' FROM PCPEDC, ESTPREVENDAC ' + + ' WHERE PCPEDC.NUMPED = ESTPREVENDAC.NUMPED ' + + ' AND PCPEDC.NUMPED = :1', + [orderId], + ); + + if (order.length == 0) { + throw new HttpException( + `Pedido não foi localizado`, + HttpStatus.NOT_FOUND, + ); + } + + if (order.status == 'F') { + throw new HttpException( + `Pedido já FATURADO, alteração não permitida.`, + HttpStatus.NOT_FOUND, + ); + } + + const invoiceStores = await this.listsService.GetStoreAll(); + const invoiceStore = await invoiceStores.find( + data => data.id === order[0].invoiceStore, + ); + const customer = await this.customerService.findCustomerById( + order[0].customerId, + ); + const billinds = await this.listsService.GetBilling(order[0].customerId); + const partners = await this.listsService.GetPartners(); + const address = await this.addressCustomerService.getAddress( + order[0].customerId, + order[0].addressId, + ); + const billing = billinds.find(data => data.codcob === order[0].billindId); + const paymentPlans = await this.listsService.GetPaymentPlan( + billing.codcob, + ); + const paymentPlan = paymentPlans.find( + data => data.codplpag === order[0].paymentPlanId, + ); + const partner = partners.find(data => data.id === order[0].partnerId); + + return { + cartId: order[0].cartId, + invoiceStore: invoiceStore, + customer: customer, + partner: partner, + paymentPlan: paymentPlan, + billing: billing, + address: address, + notification: order[0].notification, + notification1: order[0].notification1, + notification2: order[0].notification2, + notificationDelivery1: order[0].notificationDelivery1, + notificationDelivery2: order[0].notificationDelivery2, + notificationDelivery3: order[0].notificationDelivery3, + deliveryDate: order[0].deliveryDate, + squeduleDelivery: order[0].esc_tipoEntrega == 'P' ? true : false, + priorityDelivery: order[0].priorityDelivery, + }; + } finally { + await queryRunner.release(); + await connection.close(); } + } - async getIdOrder(idSeller: number): Promise { - const connection = new Connection(connectionOptions); - await connection.connect(); - const queryRunner = connection.createQueryRunner(); - await queryRunner.connect(); - console.log('Consultando usuario ' + idSeller); - let sql = 'SELECT NVL(PROXNUMPEDWEB,0) as "proxnumpedweb" FROM PCUSUARI ' + - ' WHERE PCUSUARI.CODUSUR = :1 FOR UPDATE'; - const seller = await queryRunner.query(sql, [idSeller]); - - const idOrder = seller[0].proxnumpedweb; - console.log(idOrder); - - await queryRunner.startTransaction(); - - try { - - sql = 'UPDATE PCUSUARI SET PROXNUMPEDWEB = NVL(PROXNUMPEDWEB,0) + 1 ' + - ' WHERE PCUSUARI.CODUSUR = :1'; - await queryRunner.query(sql, [idSeller]); - - - await queryRunner.commitTransaction(); - return idOrder; - - } catch (err) { - - await queryRunner.rollbackTransaction(); - console.log(err); - return -1; - - } finally { - - await queryRunner.release(); - await connection.close(); - } - + async createPreCustomer(cart: Cart) { + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + const preCustomer = await queryRunner.query( + `SELECT ESTVENDAPRECLIENTE.CPF FROM ESTVENDAPRECLIENTE ` + + ` WHERE IDCART = :1 AND CPF = :2`, + [cart.id, cart.preCustomerDocument], + ); + if (preCustomer.length === 0) { + const sqlInsert = + ` INSERT INTO ESTVENDAPRECLIENTE ( CPF, IDCART, NOME, TELEFONE, DTCADASTRO, CODUSUR ) ` + + ` VALUES ( REGEXP_REPLACE(:CPF, '[^0-9]', '') , :IDCART, :NOME, :TELEFONE, SYSDATE, :CODUSUR ) `; + await queryRunner.query(sqlInsert, [ + cart.preCustomerDocument, + cart.id, + cart.preCustomerName, + cart.preCustomerPhone, + cart.idSeller, + ]); + } else { + } + await queryRunner.commitTransaction(); + } catch (err) { + await queryRunner.rollbackTransaction(); + console.log(err); + } finally { + await queryRunner.release(); + await connection.close(); } + } - async getCustomer(idCustomer: number) { - const connection = new Connection(connectionOptions); - await connection.connect(); - const queryRunner = connection.createQueryRunner(); - await queryRunner.connect(); - try { - const customer = await queryRunner.manager - .getRepository(Pcclient) - .createQueryBuilder('pcclient') - .where("\"pcclient\".codcli = :idCustomer", { idCustomer }) - .getOne(); - return customer; - } catch (error) { - console.log(error); - throw error; - } finally { - await queryRunner.release(); - await connection.close(); - } + async productsWithoutTax(idCart: string, idCustomer: number) { + const sql = + ' SELECT ESTPREVENDAI.CODPROD as "productId", PCPRODUT.DESCRICAO as "description", ' + + ' PCPRODUT.EMBALAGEM as "package", PCCLIENT.ESTENT as "uf" ' + + ' FROM ESTPREVENDAI, ESTPREVENDAC, PCCLIENT, PCPRODUT ' + + ' WHERE ESTPREVENDAI.IDCART = ESTPREVENDAC.ID ' + + ' AND ESTPREVENDAI.CODPROD = PCPRODUT.CODPROD ' + + ' AND PCCLIENT.CODCLI = :CODCLI ' + + ' AND ESTPREVENDAC.ID = :ID ' + + ' AND NOT EXISTS(SELECT PCTRIBUT.CODST FROM PCTABTRIB, PCTRIBUT ' + + ' WHERE PCTABTRIB.CODFILIALNF = ESTPREVENDAC.CODFILIAL ' + + ' AND PCTABTRIB.UFDESTINO = PCCLIENT.ESTENT ' + + ' AND PCTABTRIB.CODPROD = PCPRODUT.CODPROD ' + + ' AND PCTABTRIB.CODST = PCTRIBUT.CODST ) '; + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const products = await queryRunner.query(sql, [idCustomer, idCart]); + return products; + } finally { + await queryRunner.release(); + await connection.close(); } + } - async getOrders(store: string, initialDate: Date, finalDate: Date, - document: string, name: string, sellerId: number, idOrder: string) { - const connection = new Connection(connectionOptions); - await connection.connect(); - const queryRunner = connection.createQueryRunner(); - await queryRunner.connect(); - let sqlWhere = ''; - let sql = ''; - - try { - - sql = ` SELECT TO_CHAR(PCPEDC.DATA, \'DD/MM/YYYY\') as "createDate" ` + - ` ,PCPEDC.NUMPED as "orderId" ` + - ` ,PCPEDC.CODFILIAL as "store" ` + - ` ,CASE WHEN PCPEDC.POSICAO = 'B' THEN 'BLOQUEADO' ` + - ` WHEN PCPEDC.POSICAO = 'P' THEN 'PENDENTE' ` + - ` WHEN PCPEDC.POSICAO = 'L' THEN 'LIBERADO' ` + - ` WHEN PCPEDC.POSICAO = 'M' THEN 'MONTADO' ` + - ` WHEN PCPEDC.POSICAO = 'F' THEN 'FATURADO' END as "status" ` + - ` ,PCPEDC.CODCLI as "customerId" ` + - ` ,PCPEDC.CODUSUR as "sellerId" ` + - ` ,PCCLIENT.CLIENTE as "customerName" ` + - ` ,PCPEDC.VLATEND as "orderValue" ` + - ` ,PCPEDC.NUMITENS as "itens" ` + - ` ,CASE WHEN ( SELECT COUNT(1) FROM ESTPIX WHERE ESTPIX.NUMPED = PCPEDC.NUMPED ) > 0 THEN 'S' ELSE 'N' END as "pixCreate" ` + - ` FROM PCPEDC, PCCLIENT ` + - ` WHERE PCPEDC.CODCLI = PCCLIENT.CODCLI ` + - ` AND PCPEDC.CONDVENDA IN (1,7) ` + - ` AND PCPEDC.DTCANCEL IS NULL AND PCPEDC.POSICAO NOT IN ('C') `; - ` AND PCPEDC.ROTINALANC = 'VENDAWEB' `; - if (store != null && store != '') { - sqlWhere += ` AND PCPEDC.CODFILIAL = '${store}' `; - } - if (document != null && document != '') { - sqlWhere += ` AND REGEXP_REPLACE(PCCLIENT.CGCENT, '[^0-9]', '') = REGEXP_REPLACE('${document}', '[^0-9]', '')`; - } - if (name != null && name != '') { - sqlWhere += ` AND PCCLIENT.CLIENTE LIKE '${name.replace('@', '%')}'||'%'`; - } - if (sellerId > 0) { - sqlWhere += ` AND PCPEDC.CODUSUR = ${sellerId} `; - } - if (idOrder.trim() != null && idOrder.trim() != '') { - sqlWhere += ` AND PCPEDC.NUMPED = ${idOrder} `; - } - - //tratamento de data// - const startDate = new Date(initialDate); - let day = startDate.getDate(); - let month = ("00" + (startDate.getMonth() + 1)).slice(-2); - let year = startDate.getFullYear(); - const startFormat = day + "/" + month + "/" + year; - const endDate = new Date(finalDate); - day = endDate.getDate(); - month = ("00" + (endDate.getMonth() + 1)).slice(-2); - year = endDate.getFullYear(); - const endFormat = day + "/" + month + "/" + year; - - sqlWhere += ` AND PCPEDC.DATA BETWEEN TO_DATE('${startFormat}', 'DD/MM/YYYY') AND TO_DATE('${endFormat}', 'DD/MM/YYYY') `; - - const result = await queryRunner.query(sql + sqlWhere); - return result; - } catch (error) { - console.log(error); - throw error; - } finally { - await queryRunner.release(); - await connection.close(); - } + async OrderRetiraPosterior() { + const sql = + ' SELECT ' + + ' p.DATA as "data" ' + + ' ,p.numped as "orderId" ' + + ` ,TO_CHAR(p.datapedido, 'DD/MM/YYYY HH24:MI') as "orderDate" ` + + ' ,p.CODCLI as "customerId" ' + + ' ,p.cliente as "customerName" ' + + ' ,p.codusur as "sellerId" ' + + ' ,p.nomevendedor as "sellerName" ' + + ' ,p.etapa_pedido as "process" ' + + ' ,p.progresso as "progress" ' + + ` ,TO_CHAR(p.DATA_ETAPA_PEDIDO, 'DD/MM/YYYY HH24:MI') as "processDate" ` + + ' ,round( trunc(sysdate-p.DATAPEDIDO) * 24 + (sysdate-p.DATAPEDIDO - trunc(sysdate-p.DATAPEDIDO)) * 24) as "timeHour" ' + + ' ,round(( ( trunc(sysdate-p.DATAPEDIDO) * 24 + (sysdate-p.DATAPEDIDO - trunc(sysdate-p.DATAPEDIDO)) * 24) - ' + + ' TRUNC(( trunc(sysdate-p.DATAPEDIDO) * 24 + (sysdate-p.DATAPEDIDO - trunc(sysdate-p.DATAPEDIDO)) * 24)) ) * 60,0) as "timeMinute" ' + + ' ,p.codfilial as "storeId" ' + + ' FROM esvpedidoretiraposterior p ' + + ' ORDER BY p.datapedido '; + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const orders = await queryRunner.query(sql); + return orders; + } finally { + await queryRunner.release(); + await connection.close(); } - + } - async getItensOrder(idOrder: number) { - const connection = new Connection(connectionOptions); - await connection.connect(); - const queryRunner = connection.createQueryRunner(); - await queryRunner.connect(); - let sql = ''; - - try { - - sql = ` SELECT PCPEDI.CODPROD as "productId", PCPRODUT.DESCRICAO as "description", ` + - ` PCPRODUT.EMBALAGEM as "package", ` + - ` ( SELECT PCPEDITEMP.COMPLEMENTO FROM PCPEDITEMP ` + - ` WHERE PCPEDC.NUMPEDRCA = PCPEDITEMP.NUMPEDRCA ` + - ` AND PCPEDI.CODPROD = PCPEDITEMP.CODPROD ` + - ` AND PCPEDI.NUMSEQ = PCPEDITEMP.NUMSEQ ) as "color" , ` + - ` ( SELECT PCPEDITEMP.LOCALIZACAO FROM PCPEDITEMP ` + - ` WHERE PCPEDC.NUMPEDRCA = PCPEDITEMP.NUMPEDRCA ` + - ` AND PCPEDI.CODPROD = PCPEDITEMP.CODPROD ` + - ` AND PCPEDI.NUMSEQ = PCPEDITEMP.NUMSEQ ) as "local", ` + - ` PCPEDI.QT as "quantity", PCPEDI.PVENDA as "price", ( PCPEDI.QT * PCPEDI.PVENDA ) as "subTotal" ` + - ` FROM PCPEDI, PCPEDC, PCPRODUT ` + - ` WHERE PCPEDI.CODPROD = PCPRODUT.CODPROD ` + - ` AND PCPEDI.NUMPED = PCPEDC.NUMPED ` + - ` AND PCPEDC.CONDVENDA IN (7,1) ` + - ` AND PCPEDC.NUMPED = :NUMPED ` + - // ` AND PCPEDC.ROTINALANC = 'VENDAWEB' ` + - ` ORDER BY PCPEDI.NUMSEQ `; - const result = await queryRunner.query(sql, [idOrder]); - return result; - } catch (error) { - console.log(error); - throw error; - } finally { - await queryRunner.release(); - await connection.close(); - } - - } - - async getCartId(orderId: number) { - const connection = new Connection(connectionOptions); - await connection.connect(); - const queryRunner = connection.createQueryRunner(); - await queryRunner.connect(); - try { - const order = await queryRunner.query('SELECT PCPEDC.DATA as "createDate" ' + - ' ,PCPEDC.NUMPED as "orderId" ' + - ' ,PCPEDC.CODFILIAL as "invoiceStore" ' + - ' ,PCPEDC.CODCLI as "customerId" ' + - ' ,PCPEDC.CODPLPAG as "paymentPlanId" ' + - ' ,PCPEDC.CODCOB as "billindId" ' + - ' ,PCPEDC.CODENDENT as "addressId" ' + - ' ,PCPEDC.CODUSUR3 as "partnerId" ' + - ' ,ESTPREVENDAC.ID as "cartId" ' + - ' ,PCPEDC.POSICAO as "status" ' + - - ' ,PCPEDC.OBS as "notification" ' + - ' ,PCPEDC.OBS1 as "notification1" ' + - ' ,PCPEDC.OBS2 as "notification2" ' + - ' ,PCPEDC.OBSENTREGA1 as "notificationDelivery1" ' + - ' ,PCPEDC.OBSENTREGA2 as "notificationDelivery2" ' + - ' ,PCPEDC.OBSENTREGA3 as "notificationDelivery3" ' + - ' ,PCPEDC.DTENTREGA as "deliveryDate" ' + - ' ,ESTPREVENDAC.ENTREGAPROGRAMADA as "squeduleDelivery" ' + - ` ,NVL(PCPEDC.TIPOPRIORIDADEENTREGA, 'B') as "priorityDelivery" ` + - ' FROM PCPEDC, ESTPREVENDAC ' + - ' WHERE PCPEDC.NUMPED = ESTPREVENDAC.NUMPED ' + - ' AND PCPEDC.NUMPED = :1', [orderId]); - - if (order.length == 0) { - throw new HttpException(`Pedido não foi localizado`, HttpStatus.NOT_FOUND); - } - - if (order.status == 'F') { - throw new HttpException(`Pedido já FATURADO, alteração não permitida.`, HttpStatus.NOT_FOUND); - } - - const invoiceStores = await this.listsService.GetStoreAll(); - const invoiceStore = await invoiceStores.find(data => data.id === order[0].invoiceStore); - const customer = await this.customerService.findCustomerById(order[0].customerId); - const billinds = await this.listsService.GetBilling(order[0].customerId); - const partners = await this.listsService.GetPartners(); - const address = await this.addressCustomerService.getAddress(order[0].customerId, order[0].addressId); - const billing = billinds.find(data => data.codcob === order[0].billindId); - const paymentPlans = await this.listsService.GetPaymentPlan(billing.codcob); - const paymentPlan = paymentPlans.find(data => data.codplpag === order[0].paymentPlanId); - const partner = partners.find(data => data.id === order[0].partnerId); - - return { - cartId: order[0].cartId, invoiceStore: invoiceStore, customer: customer, partner: partner, - paymentPlan: paymentPlan, billing: billing, address: address, - notification: order[0].notification, notification1: order[0].notification1, notification2: order[0].notification2, - notificationDelivery1: order[0].notificationDelivery1, notificationDelivery2: order[0].notificationDelivery2, notificationDelivery3: order[0].notificationDelivery3, - deliveryDate: order[0].deliveryDate, squeduleDelivery: order[0].esc_tipoEntrega == 'P' ? true : false, priorityDelivery: order[0].priorityDelivery - } - - } finally { - await queryRunner.release(); - await connection.close(); - } - } - - async createPreCustomer(cart: Cart) { - - const connection = new Connection(connectionOptions); - await connection.connect(); - const queryRunner = connection.createQueryRunner(); - await queryRunner.connect(); - await queryRunner.startTransaction(); - try { - const preCustomer = await queryRunner.query(`SELECT ESTVENDAPRECLIENTE.CPF FROM ESTVENDAPRECLIENTE ` + - ` WHERE IDCART = :1 AND CPF = :2`, [cart.id, cart.preCustomerDocument]); - if (preCustomer.length === 0) { - const sqlInsert = ` INSERT INTO ESTVENDAPRECLIENTE ( CPF, IDCART, NOME, TELEFONE, DTCADASTRO, CODUSUR ) ` + - ` VALUES ( REGEXP_REPLACE(:CPF, '[^0-9]', '') , :IDCART, :NOME, :TELEFONE, SYSDATE, :CODUSUR ) `; - await queryRunner.query(sqlInsert, [cart.preCustomerDocument, - cart.id, cart.preCustomerName, cart.preCustomerPhone, cart.idSeller]); - } else { - - } - await queryRunner.commitTransaction(); - - } catch (err) { - await queryRunner.rollbackTransaction(); - console.log(err); - } finally { - await queryRunner.release(); - await connection.close(); - } - } - - async productsWithoutTax(idCart: string, idCustomer: number) { - const sql = ' SELECT ESTPREVENDAI.CODPROD as "productId", PCPRODUT.DESCRICAO as "description", ' + - ' PCPRODUT.EMBALAGEM as "package", PCCLIENT.ESTENT as "uf" ' + - ' FROM ESTPREVENDAI, ESTPREVENDAC, PCCLIENT, PCPRODUT ' + - ' WHERE ESTPREVENDAI.IDCART = ESTPREVENDAC.ID ' + - ' AND ESTPREVENDAI.CODPROD = PCPRODUT.CODPROD ' + - ' AND PCCLIENT.CODCLI = :CODCLI ' + - ' AND ESTPREVENDAC.ID = :ID ' + - ' AND NOT EXISTS(SELECT PCTRIBUT.CODST FROM PCTABTRIB, PCTRIBUT ' + - ' WHERE PCTABTRIB.CODFILIALNF = ESTPREVENDAC.CODFILIAL ' + - ' AND PCTABTRIB.UFDESTINO = PCCLIENT.ESTENT ' + - ' AND PCTABTRIB.CODPROD = PCPRODUT.CODPROD ' + - ' AND PCTABTRIB.CODST = PCTRIBUT.CODST ) '; - - const connection = new Connection(connectionOptions); - await connection.connect(); - const queryRunner = connection.createQueryRunner(); - await queryRunner.connect(); - try { - const products = await queryRunner.query(sql, [idCustomer, idCart]); - return products; - } finally { - await queryRunner.release(); - await connection.close(); - } - } - - async OrderRetiraPosterior() { - - const sql = ' SELECT ' + - ' p.DATA as "data" ' + - ' ,p.numped as "orderId" ' + - ` ,TO_CHAR(p.datapedido, 'DD/MM/YYYY HH24:MI') as "orderDate" ` + - ' ,p.CODCLI as "customerId" ' + - ' ,p.cliente as "customerName" ' + - ' ,p.codusur as "sellerId" ' + - ' ,p.nomevendedor as "sellerName" ' + - ' ,p.etapa_pedido as "process" ' + - ' ,p.progresso as "progress" ' + - ` ,TO_CHAR(p.DATA_ETAPA_PEDIDO, 'DD/MM/YYYY HH24:MI') as "processDate" ` + - ' ,round( trunc(sysdate-p.DATAPEDIDO) * 24 + (sysdate-p.DATAPEDIDO - trunc(sysdate-p.DATAPEDIDO)) * 24) as "timeHour" ' + - ' ,round(( ( trunc(sysdate-p.DATAPEDIDO) * 24 + (sysdate-p.DATAPEDIDO - trunc(sysdate-p.DATAPEDIDO)) * 24) - ' + - ' TRUNC(( trunc(sysdate-p.DATAPEDIDO) * 24 + (sysdate-p.DATAPEDIDO - trunc(sysdate-p.DATAPEDIDO)) * 24)) ) * 60,0) as "timeMinute" ' + - ' FROM esvpedidoretiraposterior p ' + - ' ORDER BY p.datapedido '; - - const connection = new Connection(connectionOptions); - await connection.connect(); - const queryRunner = connection.createQueryRunner(); - await queryRunner.connect(); - try { - const orders = await queryRunner.query(sql); - return orders; - } finally { - await queryRunner.release(); - await connection.close(); - } - - - } - - async getProductsOrder(store: string, initialDate: Date, finalDate: Date, - document: string, name: string, sellerId: number, idOrder: string, - typeFilterProduct: string, productText: string - ) { - - const sql = `SELECT PCPEDC.DATA as "date" + async getProductsOrder( + store: string, + initialDate: Date, + finalDate: Date, + document: string, + name: string, + sellerId: number, + idOrder: string, + typeFilterProduct: string, + productText: string, + ) { + const sql = `SELECT PCPEDC.DATA as "date" ,PCPEDC.NUMPED as "orderId" ,PCPEDC.NUMNOTA as "invoice" ,PCPEDC.CODCLI as "customerId" @@ -1101,67 +1203,69 @@ export class OrderService { AND PCPEDC.CODUSUR = PCUSUARI.CODUSUR AND PCPEDI.CODPROD = PCPRODUT.CODPROD `; - let sqlWhere = ''; - if (store != null && store != '' && store != '99') { - sqlWhere += ` AND PCPEDC.CODFILIAL = '${store}' `; - } - if (document != null && document != '') { - sqlWhere += ` AND REGEXP_REPLACE(PCCLIENT.CGCENT, '[^0-9]', '') = REGEXP_REPLACE('${document}', '[^0-9]', '')`; - } - if (name != null && name != '') { - sqlWhere += ` AND PCCLIENT.CLIENTE LIKE '${name.replace('@', '%')}'||'%'`; - } - if (sellerId > 0) { - sqlWhere += ` AND PCPEDC.CODUSUR = ${sellerId} `; - } - if (idOrder.trim() != null && idOrder.trim() != '') { - sqlWhere += ` AND PCPEDC.NUMPED = ${idOrder} `; - } - - if ( typeFilterProduct != '') { - switch (typeFilterProduct) { - case 'ID': - sqlWhere += ` AND PCPEDI.CODPROD = ${productText} `; - break; - case 'EAN': - sqlWhere += ` AND PCPRODUT.CODAUXILIAR = ${productText} `; - break; - case 'TEXT': - sqlWhere += ` AND PCPRODUT.DESCRICAO LIKE '${productText}%' `; - break; - case 'PARTNER': - sqlWhere += ` AND PCPRODUT.CODFAB like '${productText}%'`; - break; - default: break; - } - } - - //tratamento de data// - const startDate = new Date(initialDate); - let day = startDate.getDate(); - let month = ("00" + (startDate.getMonth() + 1)).slice(-2); - let year = startDate.getFullYear(); - const startFormat = day + "/" + month + "/" + year; - const endDate = new Date(finalDate); - day = endDate.getDate(); - month = ("00" + (endDate.getMonth() + 1)).slice(-2); - year = endDate.getFullYear(); - const endFormat = day + "/" + month + "/" + year; - - sqlWhere += ` AND PCPEDI.DATA BETWEEN TO_DATE('${startFormat}', 'DD/MM/YYYY') AND TO_DATE('${endFormat}', 'DD/MM/YYYY') `; - - - const connection = new Connection(connectionOptions); - await connection.connect(); - const queryRunner = connection.createQueryRunner(); - await queryRunner.connect(); - try { - const orders = await queryRunner.query(sql + sqlWhere); - return orders; - } finally { - await queryRunner.release(); - await connection.close(); - } + let sqlWhere = ''; + if (store != null && store != '' && store != '99') { + sqlWhere += ` AND PCPEDC.CODFILIAL = '${store}' `; + } + if (document != null && document != '') { + sqlWhere += ` AND REGEXP_REPLACE(PCCLIENT.CGCENT, '[^0-9]', '') = REGEXP_REPLACE('${document}', '[^0-9]', '')`; + } + if (name != null && name != '') { + sqlWhere += ` AND PCCLIENT.CLIENTE LIKE '${name.replace( + '@', + '%', + )}'||'%'`; + } + if (sellerId > 0) { + sqlWhere += ` AND PCPEDC.CODUSUR = ${sellerId} `; + } + if (idOrder.trim() != null && idOrder.trim() != '') { + sqlWhere += ` AND PCPEDC.NUMPED = ${idOrder} `; } + if (typeFilterProduct != '') { + switch (typeFilterProduct) { + case 'ID': + sqlWhere += ` AND PCPEDI.CODPROD = ${productText} `; + break; + case 'EAN': + sqlWhere += ` AND PCPRODUT.CODAUXILIAR = ${productText} `; + break; + case 'TEXT': + sqlWhere += ` AND PCPRODUT.DESCRICAO LIKE '${productText}%' `; + break; + case 'PARTNER': + sqlWhere += ` AND PCPRODUT.CODFAB like '${productText}%'`; + break; + default: + break; + } + } + + //tratamento de data// + const startDate = new Date(initialDate); + let day = startDate.getDate(); + let month = ('00' + (startDate.getMonth() + 1)).slice(-2); + let year = startDate.getFullYear(); + const startFormat = day + '/' + month + '/' + year; + const endDate = new Date(finalDate); + day = endDate.getDate(); + month = ('00' + (endDate.getMonth() + 1)).slice(-2); + year = endDate.getFullYear(); + const endFormat = day + '/' + month + '/' + year; + + sqlWhere += ` AND PCPEDI.DATA BETWEEN TO_DATE('${startFormat}', 'DD/MM/YYYY') AND TO_DATE('${endFormat}', 'DD/MM/YYYY') `; + + const connection = new Connection(connectionOptions); + await connection.connect(); + const queryRunner = connection.createQueryRunner(); + await queryRunner.connect(); + try { + const orders = await queryRunner.query(sql + sqlWhere); + return orders; + } finally { + await queryRunner.release(); + await connection.close(); + } + } }