diff --git a/src/products/products.module.ts b/src/products/products.module.ts index 8bda5f1..827ee65 100644 --- a/src/products/products.module.ts +++ b/src/products/products.module.ts @@ -2663,151 +2663,221 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1) 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, - 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 + SELECT + /*+ MATERIALIZE */ + eit.codigo AS produto_codigo, + ent.loja AS loja_codigo, + ean2.quantidade AS quantidadecompra, + ent.dataentrada AS dataultimaentrada, + ROW_NUMBER() OVER ( - 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' - ` + 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} + AND ent.loja IN (${args.ctx_user_companies_for_module}) + + ) + + SELECT + 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 + AND pm.data >= TRUNC(SYSDATE) - 50 + -- limita o scan + + ) 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.produtos_estoque est2 + INNER JOIN verdemar.loja l2 ON + l2.codigo = est2.loja + WHERE + est2.codigo = p.codigo + AND l2.lojanota = l.codigo + AND l2.statusloja = 3 + 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 + 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' + AND l.codigo IN (${args.ctx_user_companies_for_module})` } }, detalhe_preco: (args) => {