From a36e6bbae262f425d0cb42c8443e8b101e0a4dff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sarah=20Magalh=C3=A3es?= Date: Wed, 3 Jun 2026 17:01:06 -0300 Subject: [PATCH] Ajustando detalhes vdm --- src/products/products.module.ts | 326 ++++++++++++++------------------ 1 file changed, 143 insertions(+), 183 deletions(-) diff --git a/src/products/products.module.ts b/src/products/products.module.ts index 4e8fb3a..8bda5f1 100644 --- a/src/products/products.module.ts +++ b/src/products/products.module.ts @@ -2662,191 +2662,151 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1) detalhe: (args) => { return { sql: /*sql*/ ` + WITH CTE_UltimaEntrada AS ( + SELECT /*+ MATERIALIZE */ + eit.codigo AS produto_codigo, + ent.loja AS loja_codigo, + ean2.quantidade AS quantidadecompra, + ent.dataentrada AS dataultimaentrada, + ROW_NUMBER() OVER ( + PARTITION BY eit.codigo, ent.loja + ORDER BY ent.dataentrada DESC, ent.chave DESC + ) AS rn + FROM verdemar.entradas ent + INNER JOIN verdemar.entradas_itens eit ON ent.chave = eit.chaveentrada + INNER JOIN verdemar.operacoes_entradas op ON ent.operacao = op.codigo + INNER JOIN verdemar.produtos_ean ean2 ON eit.embalagem = ean2.chave + WHERE ent.status = 'S' + AND op.atualizacusto = 'S' + AND op.tiponota NOT IN ('B', 'T', 'L') + AND ent.dataentrada <= TRUNC(SYSDATE) + AND eit.quantidade * ean2.quantidade > NVL(eit.quantidadedevolvida, 0) + AND eit.codigo = ${args.codproduto} + ) SELECT - l.codigo AS idempresa, - FNC_NOMEPESSOAS(l.codigo) AS nomeempresa, - cat.nome AS categoria, - ( - SELECT MAX(e.dataentrada) - FROM verdemar.entradas e - INNER JOIN verdemar.entradas_itens ei ON ei.chaveentrada = e.chave - WHERE ei.codigo = p.codigo - AND e.loja = l.codigo - AND e.status = 'S' - ) AS dataultimaentrada, + l.codigo AS idempresa, + FNC_NOMEPESSOAS(l.codigo) AS nomeempresa, + cat.nome AS categoria, + ult_ent.dataultimaentrada AS dataultimaentrada, + ( + SELECT MAX(pm.data) + FROM verdemar.produtos_movimento pm + WHERE pm.codigo = p.codigo + AND pm.loja = l.codigo + ) AS dataultimavenda, + NULL AS precoatacado, + pp.precovenda AS precovarejo, + COALESCE(prom.precopromocao, 0) AS precopromoc, + pp.precovenda AS preconormal, + ( + SELECT pf.precofidelidade + FROM verdemar.produtos_fidelidade pf + WHERE pf.codigo = p.codigo + AND TRUNC(SYSDATE) BETWEEN pf.datainicial AND pf.datafinal + AND (pf.codigo_tipo = 0 OR pf.codigo_tipo = 2) + AND pf.loja = l.codigo + AND ROWNUM = 1 + ) AS precomeuMambo, + 0 AS vlrprecovenctoprox, + pp.custoliquido AS custoliquido, + pp.sugestao AS margem, + 0 AS margematacado, + pp.lucro AS margemnormal, + ( + SELECT api.margemprecopromocao_clubevm + FROM verdemar.produtos_fidelidade pf + INNER JOIN verdemar.autorizacao_promocao_itens api + ON api.codigo = pf.codigo + AND api.chave = pf.chaveorigem + WHERE pf.codigo = p.codigo + AND api.datafinal >= SYSDATE + AND api.datainicial <= SYSDATE + AND pf.loja = l.codigo + AND ROWNUM = 1 + ) AS margemmeuMambo, + subg.sugestao AS margemlucrodivisao, + est.quantidade AS estoqueDisponivel, + ( + SELECT est2.quantidade + FROM verdemar.loja l2 + INNER JOIN verdemar.produtos_estoque est2 ON est2.loja = l2.codigo + WHERE l2.lojanota = l.codigo + AND l2.statusloja = 3 + AND est2.codigo = p.codigo + AND ROWNUM = 1 + ) AS estoquetroca, + FNC_QTD_EMTRANSITO(p.codigo, l.codigo) AS estoquetransito, + 0 AS estoquefuturo, + 0 AS estoquereservado, + 0 AS reserva, + pew.estoque AS estoquedisponivelcd, + 0 AS estoquefuturocd, + pvm.mediasempromocao AS mdv, + pvm.mediacompromocao AS mdvpromoc, + pvm.diasestoque AS ddv, + NULL AS ddvminimo, + NULL AS ddvmaximo, + NULL AS dtavalidade, + p.numerodiasvalidade AS validadedias, + NULL AS classeabastecimento, + p.tipoabastecimento AS formaabastecimento, + ean.embalagem AS descricaoembalagem, + ean.quantidade AS quantidadeembalagem, + ult_ent.quantidadecompra AS quantidadecompra, + 0 AS qtdeatacado, + CASE + WHEN COALESCE(prom.precopromocao, 0) > 0 THEN 'PROMOCAO' + ELSE 'NORMAL' + END AS situacao, + CASE WHEN p.inativo = 'N' THEN 'A' ELSE 'I' END AS statusvenda, + NULL AS statuscompra, + p.paicomposto AS idbase, + NULL AS tipotroca, + p.codigo AS seqproduto, + p.nome AS Descricao - pm.ultimavenda AS dataultimavenda, - - NULL AS precoatacado, - pp.precovenda AS precovarejo, - COALESCE(prom.precopromocao, 0) AS precopromoc, - pp.precovenda AS preconormal, - - ( - SELECT pf.precofidelidade - FROM verdemar.produtos_fidelidade pf - WHERE pf.codigo = p.codigo - AND TRUNC(SYSDATE) BETWEEN pf.datainicial AND pf.datafinal - AND (pf.codigo_tipo = 0 OR pf.codigo_tipo = 2) - AND pf.loja = l.codigo - AND ROWNUM = 1 - ) AS precomeuMambo, - - 0 AS vlrprecovenctoprox, - pp.custoliquido AS custoliquido, - - pp.sugestao AS margem, - 0 AS margematacado, - pp.lucro AS margemnormal, - ( - SELECT api.margemprecopromocao_clubevm - FROM verdemar.produtos_fidelidade pf - INNER JOIN verdemar.autorizacao_promocao_itens api - ON api.codigo = pf.codigo - AND api.chave = pf.chaveorigem - WHERE pf.codigo = p.codigo - AND api.datafinal >= SYSDATE - AND api.datainicial <= SYSDATE - AND pf.loja = l.codigo - AND ROWNUM = 1 - ) AS margemmeuMambo, - subg.sugestao AS margemlucrodivisao, - - est.quantidade AS estoqueDisponivel, - ( - SELECT est2.quantidade - FROM verdemar.loja l2 - INNER JOIN verdemar.produtos_estoque est2 ON est2.loja = l2.codigo - WHERE l2.lojanota = l.codigo - AND l2.statusloja = 3 - AND est2.codigo = p.codigo - AND ROWNUM = 1 - ) AS estoquetroca, - FNC_QTD_EMTRANSITO(p.codigo, l.codigo) AS estoquetransito, - 0 AS estoquefuturo, - 0 AS estoquereservado, - 0 AS reserva, - pew.estoque AS estoquedisponivelcd, - 0 AS estoquefuturocd, - - pvm.mediasempromocao AS mdv, - pvm.mediacompromocao AS mdvpromoc, - pvm.diasestoque AS ddv, - NULL AS ddvminimo, - NULL AS ddvmaximo, - NULL AS dtavalidade, - p.numerodiasvalidade AS validadedias, - - NULL AS classeabastecimento, - p.tipoabastecimento AS formaabastecimento, - ean.embalagem AS descricaoembalagem, - ean.quantidade AS quantidadeembalagem, - - ( - SELECT ean2.quantidade - FROM verdemar.entradas ent - INNER JOIN verdemar.entradas_itens eit ON ent.chave = eit.chaveentrada - INNER JOIN verdemar.operacoes_entradas op ON ent.operacao = op.codigo - INNER JOIN verdemar.produtos_ean ean2 ON eit.embalagem = ean2.chave - WHERE eit.codigo = p.codigo - AND ent.loja = l.codigo - AND op.atualizacusto = 'S' - AND op.tiponota NOT IN ('B', 'T', 'L') - AND ent.status = 'S' - AND ent.dataentrada <= TRUNC(SYSDATE) - AND eit.quantidade * ean2.quantidade > NVL(eit.quantidadedevolvida, 0) - AND ent.dataentrada = ( - SELECT MAX(ent2.dataentrada) - FROM verdemar.entradas ent2 - INNER JOIN verdemar.entradas_itens eit2 ON ent2.chave = eit2.chaveentrada - INNER JOIN verdemar.operacoes_entradas op2 ON ent2.operacao = op2.codigo - INNER JOIN verdemar.produtos_ean ean3 ON eit2.embalagem = ean3.chave - WHERE eit2.codigo = p.codigo - AND ent2.loja = l.codigo - AND op2.atualizacusto = 'S' - AND op2.tiponota NOT IN ('B', 'T', 'L') - AND ent2.status = 'S' - AND ent2.dataentrada <= TRUNC(SYSDATE) - AND eit2.quantidade * ean3.quantidade > NVL(eit2.quantidadedevolvida, 0) - ) - AND ROWNUM = 1 - ) AS quantidadecompra, - - 0 AS qtdeatacado, - - CASE - WHEN COALESCE(prom.precopromocao, 0) > 0 THEN 'PROMOCAO' - ELSE 'NORMAL' - END AS situacao, - - CASE WHEN p.inativo = 'N' THEN 'A' ELSE 'I' END AS statusvenda, - NULL AS statuscompra, - p.paicomposto AS idbase, - NULL AS tipotroca, - - p.codigo AS seqproduto, - p.nome AS Descricao - - FROM verdemar.produtos p - - INNER JOIN verdemar.produtos_loja pl - ON pl.codigo = p.codigo - - INNER JOIN verdemar.loja l - ON l.codigo = pl.loja - - INNER JOIN verdemar.produtos_precos pp - ON pp.codigo = p.codigo - AND pp.loja = l.codigo - - LEFT JOIN verdemar.produtos_estoque est - ON est.codigo = p.codigo - AND est.loja = l.codigo - - LEFT JOIN verdemar.produtos_venda_media pvm - ON pvm.codigo = p.codigo - AND pvm.loja = l.codigo - - LEFT JOIN ( - SELECT codigo, - loja, - MAX(data) AS ultimavenda - FROM verdemar.produtos_movimento - GROUP BY codigo, loja - ) pm - ON pm.codigo = p.codigo - AND pm.loja = l.codigo - - LEFT JOIN ( - SELECT pr.codigo, - pr.loja, - pr.precopromocao - FROM verdemar.promocao pr - WHERE pr.datafinal >= TRUNC(SYSDATE) - OR pr.indeterminada = 'S' - ) prom - ON prom.codigo = p.codigo - AND prom.loja = l.codigo - - LEFT JOIN verdemar.produtos_ean ean - ON ean.codigo = p.codigo - AND ean.comprapadrao = 'S' - - LEFT JOIN verdemar.categoria cat - ON cat.codigo = p.categoria - - LEFT JOIN verdemar.subgrupo subg - ON subg.codigo = p.subgrupo - AND subg.setor = p.setor - AND subg.grupo = p.grupo - - LEFT JOIN verdemar.produtos_estoque_wms pew - ON pew.produto = p.codigo - AND pew.cd = 892605 - - WHERE p.codigo = ${args.codproduto} - AND l.participageradorlojas = 'S' - AND p.inativo = 'N' + FROM verdemar.produtos p + INNER JOIN verdemar.produtos_loja pl + ON pl.codigo = p.codigo + INNER JOIN verdemar.loja l + ON l.codigo = pl.loja + INNER JOIN verdemar.produtos_precos pp + ON pp.codigo = p.codigo + AND pp.loja = l.codigo + LEFT JOIN verdemar.produtos_estoque est + ON est.codigo = p.codigo + AND est.loja = l.codigo + LEFT JOIN verdemar.produtos_venda_media pvm + ON pvm.codigo = p.codigo + AND pvm.loja = l.codigo + LEFT JOIN CTE_UltimaEntrada ult_ent + ON ult_ent.produto_codigo = p.codigo + AND ult_ent.loja_codigo = l.codigo + AND ult_ent.rn = 1 + LEFT JOIN ( + SELECT pr.codigo, + pr.loja, + pr.precopromocao + FROM verdemar.promocao pr + WHERE (pr.datafinal >= TRUNC(SYSDATE) OR pr.indeterminada = 'S') + ) prom + ON prom.codigo = p.codigo + AND prom.loja = l.codigo + LEFT JOIN verdemar.produtos_ean ean + ON ean.codigo = p.codigo + AND ean.comprapadrao = 'S' + LEFT JOIN verdemar.categoria cat + ON cat.codigo = p.categoria + LEFT JOIN verdemar.subgrupo subg + ON subg.codigo = p.subgrupo + AND subg.setor = p.setor + AND subg.grupo = p.grupo + LEFT JOIN verdemar.produtos_estoque_wms pew + ON pew.produto = p.codigo + AND pew.cd = 892605 + WHERE p.codigo = ${args.codproduto} + AND l.participageradorlojas = 'S' + AND p.inativo = 'N' ` } },