From cf1840bc9ef714013047025b31d10ad0a2f60c28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonath=C3=A3=20Correa?= Date: Wed, 22 Apr 2026 16:46:46 -0300 Subject: [PATCH] Adicionando sistema C5_big --- src/products/products.module.ts | 922 +++++++++++++++++++++++++++++++- 1 file changed, 921 insertions(+), 1 deletion(-) diff --git a/src/products/products.module.ts b/src/products/products.module.ts index 9bde270..9fb019d 100644 --- a/src/products/products.module.ts +++ b/src/products/products.module.ts @@ -1,6 +1,6 @@ import { createModuleFactory } from "@davinti/jeff"; -const moduleFactory = createModuleFactory(["C5_big", "C5_mambo"]); +const moduleFactory = createModuleFactory(["C5", "C5_big", "C5_mambo"]); export default moduleFactory .createModule({ @@ -935,4 +935,924 @@ and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1) }; }, }, + C5_mambo: { + consulta: (args) => { + return { + sql: /*sql*/ ` + SELECT + CAST(p.SEQPRODUTO AS NUMERIC(15)) AS code, + p.DESCCOMPLETA AS title + FROM + DIN_ABASTECIMENTO_PRODUTOS p + WHERE + 1 = 1 + AND ( + ( + ${args.filtro} IS NOT NULL + AND ( + p.SEQPRODUTO LIKE '%' || ${args.filtro} || '%' + OR UPPER(p.DESCCOMPLETA) LIKE UPPER('%' || ${args.filtro} || '%') + ) + ) + OR ( + ${args.ean} IS NOT NULL + AND EXISTS ( + SELECT 1 + FROM CONSINCO.MAP_PRODCODIGO A + WHERE A.SEQPRODUTO = p.SEQPRODUTO + AND ISNUMERIC(A.CODACESSO) = 'S' + AND A.CODACESSO = ${args.ean} + ) + ) + OR ( + ${args.filtro} IS NULL + AND ${args.ean} IS NULL + ) + ) + ORDER BY + 2 + `, + }; + }, + detalhe: (args) => { + return { + sql: /*sql*/ ` + select /*+ FIRST_ROWS(10) */ pemp.nroempresa, + tcomp.comprador, + nvl(mff.fornecedor, 'N/A') fornecedor, + consinco.gmgbfcategoriafamilian1(pro.seqfamilia, me.nrodivisao, 1) categoria, + pro.seqproduto, + initcap(pro.desccompleta) Descricao, + nvl(mapi.urlecommerceimg,'') ImagemUrl, + case when trunc(case + when pes2.precovalidpromoc > 0.00 then nvl(pes2.precovalidpromoc,0) + when pes2.precovalidpromoc = 0.00 then nvl(pes2.precovalidnormal,0) + end / pes2.qtdembalagem,2) = 0 then + trunc(case + when pes.precovalidpromoc > 0.00 then nvl(pes.precovalidpromoc,0) + when pes.precovalidpromoc = 0.00 then nvl(pes.precovalidnormal,0) + end, 2) + else + trunc(case + when pes2.precovalidpromoc > 0.00 then nvl(pes2.precovalidpromoc,0) + when pes2.precovalidpromoc = 0.00 then nvl(pes2.precovalidnormal,0) + end / pes2.qtdembalagem,2) + end PrecoAtacado, + + trunc(case + when pes.precovalidpromoc > 0.00 then nvl(pes.precovalidpromoc,0) + when pes.precovalidpromoc = 0.00 then nvl(pes.precovalidnormal,0) + end, 2) PrecoVarejo, + + trunc(nvl(pemp.medvdiaforapromoc,0),4) MDV, + nvl(gmgb_fn_buscamargemproduto(pemp.nroempresa,pemp.seqproduto),0) Margem, + + case + when trunc(case + when pes.precovalidpromoc > 0.00 then nvl(pes.precovalidpromoc,0) + when pes.precovalidpromoc = 0.00 then nvl(pes.precovalidnormal,0) + end, 2) = trunc(case + when pes2.precovalidpromoc > 0.00 then nvl(pes2.precovalidpromoc,0) + when pes2.precovalidpromoc = 0.00 then nvl(pes2.precovalidnormal,0) + end / pes2.qtdembalagem,2 + ) then nvl(gmgb_fn_buscamargemproduto(pemp.nroempresa,pemp.seqproduto),0) + else + nvl(CONSINCO.GMGB_FN_BUSCAMARGEMPRODUTO_AT2(pemp.nroempresa,pemp.seqproduto),0) + end MargemAtacado, + nvl(pemp.codclassifpreco,'Sem valor') ClasseAbastecimento, + emb.embalagem DescricaoEmbalagem, + trunc(nvl(emb.qtdembalagem,0)) QuantidadeEmbalagem, + case + when pemp.nroempresa in (979, 980, 981) then trunc(nvl(pemp.estqdeposito - pemp.qtdreservadavda,0),3) + else trunc(nvl(pemp.estqloja,0), 3) - (NVL(pemp.qtdreservadavda,0)) + end EstoqueDisponivel, + + NVL(pemp.estqtroca,0) EstoqueTroca, + NVL(pemp.qtdpedrectransito,0) EstoqueTransito, + pemp.qtdpendpedcompra EstoqueFuturo, + NVL(pemp.qtdreservadavda,0) + nvl(pemp.estqoutro,0) EstoqueReservado, --24/05/2024 - cfreitas - Inclu�do estqoutro para n�o ser necess�rio utilizar MADV_COMPOSICAORESERVASELINV + ROUND(nvl(case + when NVL(pemp.medvdiaforapromoc, 0) = 0 then 0 + when NVL(pemp.medvdiaforapromoc,0) > 0 then (nvl(case when me.nroempresa in (979, 980, 981) then trunc(nvl(pemp.estqdeposito,0), 3) else trunc(nvl(pemp.estqloja,0), 3) end,0) - NVL(pemp.qtdreservadavda,0) ) / trunc(nvl(pemp.medvdiaforapromoc,1),4) + end, 0), 3) DDV, + + nvl(pemp.estqminimodv,0) DDVMinimo, + nvl(pemp.estqmaximodv, 0) DDVMaximo, + case + WHEN (select count(1) from mlo_prodembwm w where w.nroempresa = 979 and w.seqproduto = pemp.seqproduto and w.codlinhasepar = 'FR') > 0 THEN 'FRACIONADO' + when pemp.formaabastecimento = 'I' then 'ARMAZENAGEM' + when pemp.formaabastecimento = 'C' then 'CROSS' + when pemp.formaabastecimento = 'N' then 'CENTRAL-EDL' + when pemp.formaabastecimento = 'E' then 'LOJA-EDL' + when pemp.formaabastecimento is null then gmgb_fn_busca_forma_abastecfam(pro.seqfamilia, md.nrodivisao) + end FormaAbastecimento, + + case + when pes.precovalidpromoc > 0.00 then 'PROMOCAO' + when pes.precovalidpromoc = 0.00 then 'NORMAL' + end Situacao, + pempcd.estqdeposito - nvl(pempcd.qtdreservadavda,0) EstoqueDisponivelCD, + pempcd.qtdpendpedcompra EstoqueFuturoCD, + + consinco.gmgb_fn_busca_dtult_entrada(pemp.nroempresa,pemp.seqproduto) DATAULTIMAENTRADA, + pemp.dtaultvenda DATAULTIMAVENDA, + consinco.fmrl_custoprodempatual(pro.seqproduto, pemp.nroempresa, 'L') custoliquido, + CASE WHEN (select count(*) from mrl_prodempseg pest where pest.seqproduto = pemp.seqproduto and pest.nroempresa = pemp.nroempresa and pest.nrosegmento = seg.nrosegmento and pest.statusvenda = 'A' ) > 0 then 'A' ELSE 'I' end STATUSVENDA, + --case when (pemp.statuscompra='A') then 1 else 0 end STATUSCOMPRA, + pemp.statuscompra, + nvl((select min(qtdembalagem) from mrl_prodempseg where nroempresa=me.nroempresa and nrosegmento=me.nrosegmentoprinc and seqproduto=pro.seqproduto and statusvenda='A' and qtdembalagem>1), 1) QtdeAtacado, + nvl(pro.seqprodutobase,0) IdBase, + case + when mfdv.indnegavariacentral = 'S' THEN 'TROCA FISICA' + ELSE + + case when mff.indindenizavaria = 'S' then + case when (me.nroempresa >= 400 and me.nroempresa <=499) or (me.nroempresa >= 600 and me.nroempresa <= 699) then + 'SEM TROCA' + else + 'TROCA FINANC' + end + when mff.indindenizavaria = 'N' then + 'NF DEVOL' + else + 'SEM TROCA' + end + END TIPOTROCA, + mfdv.padraoembcompra QUANTIDADECOMPRA, + pemp.qtdreservadavda RESERVA, + NVL(pro.pzovalidadedia, 0) VALIDADEDIAS, + mfdv.margemlucrodivisao, + nvl(pes.precovalidpromoc,0) PrecoPromoc, + nvl(pes.precovalidnormal,0) PrecoNormal, + nvl(pes3.precovalidpromoc,0) PrecoMeuMambo, + case when pes3.precovalidpromoc > 0 then + nvl(consinco.mbo_fn_buscamargemprodutoseg(pemp.nroempresa,pemp.seqproduto,15),0) + else + 0 + end MargemMeuMambo, + nvl(consinco.mbo_fn_buscamargemprodutoseg(pemp.nroempresa,pemp.seqproduto,2,'S'),0) MargemNormal, + trunc(nvl(pemp.medvdiapromoc,0),4) MdvPromoc, + NVL(vncto.vlrprecovenctoprox,0) VLRPRECOVENCTOPROX, + vncto.dtavalidade + +from max_divisao md + +inner join max_empresa me + on me.nrodivisao = md.nrodivisao +and me.nroempresa not in (104,200,291,298,910,911,920,930,931,940,980) +and me.dtainiciomovestoque <= trunc(sysdate) +and me.status = 'A' + +inner join mad_segmento seg + on md.nrodivisao = me.nrodivisao +and me.nrosegmentoprinc = seg.nrosegmento + +inner join mrl_produtoempresa pemp + on pemp.nroempresa = me.nroempresa + +left join mrl_produtoempresa pempcd + on pempcd.seqproduto = pemp.seqproduto +and pempcd.nroempresa in (979) + +left join map_classeabastec mcab +on mcab.classeabastqtd = pemp.classeabastqtd +and mcab.nroempresa = pemp.nroempresa +and mcab.classeabastvlr = pemp.classeabastvlr + +inner join map_produto pro + on pro.seqproduto = pemp.seqproduto + +inner join map_famdivisao mfdv + on mfdv.seqfamilia = pro.seqfamilia +and mfdv.nrodivisao = me.nrodivisao + +inner join max_comprador mco + on mco.seqcomprador = mfdv.seqcomprador + +left join tb_comprador tcomp + on tcomp.COMPRADOR = mco.comprador + +left join map_produtoimagem mapi + on mapi.seqproduto = pro.seqproduto +and mapi.indpricipal = 'S' + +inner join mrl_prodempseg pes + on pes.seqproduto = pemp.seqproduto +and pes.nroempresa = pemp.nroempresa +and pes.nrosegmento = seg.nrosegmento +and pes.qtdembalagem = 1 + +inner join mrl_prodempseg pes2 + on pes2.nroempresa = pes.nroempresa +and pes2.seqproduto = pes.seqproduto +and pes2.nrosegmento = pes.nrosegmento + +left join mrl_prodempseg pes3 + on pes3.seqproduto = pemp.seqproduto +and pes3.nroempresa = pemp.nroempresa +and pes3.nrosegmento = 15 +and pes3.qtdembalagem = 1 + +inner join map_famembalagem emb + on emb.seqfamilia = pro.seqfamilia +and emb.qtdembalagem = 1 + +left join (select mffTemp.Seqfamilia, + mfdvTemp.Nrodivisao, + mffTemp.indindenizavaria, + mfdvTemp.pzomedvisitarep, + mfdvTemp.pzomedentrega, + mfdvTemp.pzomedatraso, + gp.fantasia fornecedor + + from map_famfornec mffTemp + + inner join ge_pessoa gp + on gp.seqpessoa = mffTemp.Seqfornecedor + + left join maf_fornecdivisao mfdvTemp + on mfdvTemp.Seqfornecedor = mffTemp.Seqfornecedor + and mffTemp.Principal = 'S' + + ) mff + on mff.seqfamilia = pro.seqfamilia +and mff.nrodivisao = md.nrodivisao + +left join (select pvencto.nroempresa, + pvencto.seqproduto, + min(pvencto.vlrpreco) vlrprecovenctoprox, + min(pvencto.dtavalidade) dtavalidade + from consinco.mrl_prodempvencimento pvencto + where 1=1 + and pvencto.dtavalidade >= trunc(sysdate) + and pvencto.qtdembalagem = 1 + group by pvencto.nroempresa, + pvencto.seqproduto + ) vncto + ON vncto.nroempresa = pemp.nroempresa +and vncto.seqproduto = pemp.seqproduto + +where 1=1 +--and pemp.SEQPRODUTO = 136011 +--and pemp.nroempresa = 202 +and md.nrodivisao in (2,4) +and pemp.seqproduto = ${args.codproduto} +and me.nroempresa in (${args.ctx_user_companies_for_module}) +and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1) + from mrl_prodempseg pes3 + where pes3.nroempresa = pes.nroempresa + and pes3.seqproduto = pes.seqproduto + and pes3.nrosegmento = pes.nrosegmento + and pes3.statusvenda = 'A') + `, + }; + }, + detalhe_preco: (args) => { + return { + sql: /*sql*/ ` + select ora_hash(mgmp.SEQPRODUTO||mgmp.NROEMPRESA||mgmp.QTDEMBALAGEM||mgmp.NROSEGMENTO) chave, + mgmp.SEQPRODUTO, + mgmp.NROEMPRESA, + mgmp.NROSEGMENTO, + mgmp.QTDEMBALAGEM || ' ' || mgmp.EMBVENDA embalagem, + mgmp.PRECOVALIDNORMAL preco_embalagem, + mgmp.PRECOVALIDNORMAL / mgmp.QTDEMBALAGEM preco_unidade, + trunc(mgmp.MGMPRECOVALIDO,2) margem + from maxv_mgmbaseprodseg mgmp + inner join max_empresa me + on me.nroempresa = mgmp.NROEMPRESA + and me.status = 'A' + and me.dtainiciomovestoque <= trunc(sysdate)-1 + and me.nrodivisao in (2,4) + and me.nroempresa not in (291,298,910,911,920,930,931,940,980) + AND mgmp.NROSEGMENTO IN (2,7) + where 1=1 + and mgmp.seqproduto = ${args.codproduto} + and mgmp.nroempresa = ${args.nrempresa} + AND mgmp.NROSEGMENTO NOT IN (22,23,26) + and mgmp.STATUSVENDA = 'A' + `, + }; + }, + detalhe_mdv: (args) => { + return { + sql: /*sql*/ ` + select mcdia.dtaentradasaida data, + mcdia.nroempresa, + mcdia.seqproduto, + Decode(to_char(mcdia.dtaentradasaida,'d'),1,'Domingo',2,'Segunda',3,'Terça',4,'Quarta',5,'Quinta',6,'Sexta',7,'Sábado') diasemana, + mcdia.qtdvda qtd, + mcdia.qtdestqinicial qtd_inicial + from mrl_custodia mcdia + inner join max_empresa me + on mcdia.nroempresa = me.nroempresa + where 1=1 + and mcdia.qtdvda > 0 + and mcdia.dtaentradasaida >= trunc(sysdate)-365 + AND mcdia.nroempresa = ${args.nrempresa} + AND mcdia.seqproduto = ${args.codproduto} + order by dtaentradasaida desc + `, + }; + }, + detalhe_situacao_vigente: (args) => { + return { + sql: /*sql*/ ` + select mrl_prodempseg.nroempresa, + mrl_prodempseg.seqproduto, + mrl_promocao.dtainicio, + mrl_promocao.dtafim, + mfe.qtdembalagem || ' ' || mfe.embalagem embalagem, + mrl_promocaoitem.precopromocional preco + from mrl_promocaoitem, mrl_promocao, mrl_prodempseg, + map_produto mp, map_famembalagem mfe, max_empresa me + where 1=1 + and me.nroempresa = mrl_promocao.nroempresa + and me.status = 'A' + and me.nrodivisao = 2 + and me.dtainiciomovestoque <= trunc(sysdate)-1 + and mrl_promocao.nroempresa = mrl_promocaoitem.nroempresa + and mrl_promocao.seqpromocao = mrl_promocaoitem.seqpromocao + and mrl_promocao.centralloja = mrl_promocaoitem.centralloja + and mrl_promocao.nrosegmento = mrl_promocaoitem.nrosegmento + and mrl_promocaoitem.seqproduto = mrl_prodempseg.seqproduto + and mrl_promocao.nrosegmento = mrl_prodempseg.nrosegmento + and mrl_promocao.nroempresa = mrl_prodempseg.nroempresa + and mrl_promocaoitem.qtdembalagem = mrl_prodempseg.qtdembalagem + and mp.seqproduto = mrl_prodempseg.seqproduto + and mfe.seqfamilia = mp.seqfamilia + and mfe.qtdembalagem = mrl_prodempseg.qtdembalagem + and nvl(mrl_promocao.tipopromoc, 'N') in ('N', 'F', 'A', 'S') + and mrl_promocao.dtainicio >= trunc(sysdate)-90--365 + AND mrl_prodempseg.nroempresa = ${args.nrempresa} + AND mrl_prodempseg.seqproduto = ${args.codproduto} + order by mrl_promocao.dtainicio desc + `, + }; + }, + detalhe_custo_liquido: (args) => { + return { + sql: /*sql*/ ` + select mcdiafam.dtaentradasaida, + mcdiafam.nroempresa, + PROD.SEQPRODUTO, + mcdiafam.seqfamilia, + mcdiafam.qtdestqinicial estqinicial, + qtdestqinicial + qtdentrada - qtdsaida estqfinal, + --trunc(cmdiavlrnf,2) custo + cmdiavlrnf custo + from mrl_custodiafam mcdiafam + INNER JOIN MAP_PRODUTO PROD + ON PROD.SEQFAMILIA = MCDIAFAM.SEQFAMILIA + inner join max_empresa me + on me.nroempresa = mcdiafam.nroempresa + and me.status = 'A' + and me.dtainiciomovestoque <= trunc(sysdate)-1 + and me.nrodivisao in (2,4) + where 1=1 + and mcdiafam.dtaentradasaida >= trunc(sysdate)-365 + AND mcdiafam.nroempresa = ${args.nrempresa} + AND PROD.SEQPRODUTO = ${args.codproduto} + order by mcdiafam.dtaentradasaida desc + `, + }; + }, + detalhe_estoque_disponivel: (args) => { + return { + sql: /*sql*/ ` + select + cdia.dtaentradasaida, + cdia.nroempresa, + cdia.seqproduto, + cdia.qtdentrada, + cdia.qtdsaida, + cdia.qtdestqinicial + cdia.qtdentrada - cdia.qtdsaida qtdsaldo + from mrl_custodia cdia + join max_empresa me + on me.nroempresa = cdia.nroempresa + and me.status = 'A' + and me.dtainiciomovestoque < trunc(sysdate) + and me.nrodivisao = 2 + where cdia.dtaentradasaida >= sysdate - 365 + and cdia.seqproduto = ${args.codproduto} + and cdia.nroempresa = ${args.nrempresa} + union all + select + mle.dtaentradasaida, + mle.nroempresa, + mle.seqproduto, + sum(case when mle.tiplancto = 'E' then mle.qtdlancto else 0 end) qtdentrada, + sum(case when mle.tiplancto = 'S' then mle.qtdlancto else 0 end) qtdsaida, + cdia.qtdestqinicial + + sum(case when mle.tiplancto = 'E' then mle.qtdlancto else 0 end) + - sum(case when mle.tiplancto = 'S' then mle.qtdlancto else 0 end) qtdsaldo + from mrl_lanctoestoque mle + join max_empresa me + on me.nroempresa = mle.nroempresa + and me.status = 'A' + and me.dtainiciomovestoque < trunc(sysdate) + and me.nrodivisao = 4 + join mrl_custodia cdia + on cdia.dtaentradasaida = mle.dtaentradasaida + and cdia.nroempresa = mle.nroempresa + and cdia.seqproduto = mle.seqproduto + where mle.dtaentradasaida >= sysdate - 365 + and mle.codgeraloper not in (301,302) + and mle.seqproduto = ${args.codproduto} + and mle.nroempresa = ${args.nrempresa} + group by + mle.dtaentradasaida, + mle.nroempresa, + mle.seqproduto, + cdia.qtdestqinicial + order by dtaentradasaida desc + `, + }; + }, + detalhe_estoque_transito: (args) => { + return { + sql: /*sql*/ ` + SELECT + a.nroempresa, + b.seqproduto, + INITCAP(C.NOMERAZAO) FORNECEDOR, + A.NUMERONF, + A.SERIENF, + A.DTAEMISSAO, + A.DTAENTRADA, + B.QUANTIDADE, + B.VLRITEM VALOR + from MLF_AUXNOTAFISCAL A, MLF_AUXNFITEM B, GE_PESSOA C, MAP_PRODUTO D + WHERE 1=1 + and B.SEQAUXNOTAFISCAL = A.SEQAUXNOTAFISCAL + AND C.SEQPESSOA = A.SEQPESSOA + AND D.SEQPRODUTO = B.SEQPRODUTO + AND A.DTAEMISSAO >= SYSDATE-365 + AND a.nroempresa = ${args.nrempresa} + AND b.seqproduto = ${args.codproduto} + order by A.DTAEMISSAO, A.NUMERONF, A.SERIENF + `, + }; + }, + }, + C5_big: { + consulta: (args) => { + return { + sql: /*sql*/ ` + SELECT + CAST(p.SEQPRODUTO AS NUMERIC(15)) AS code, + p.DESCCOMPLETA AS title + FROM + DIN_ABASTECIMENTO_PRODUTOS p + WHERE + 1 = 1 + AND ( + ( + ${args.filtro} IS NOT NULL + AND ( + p.SEQPRODUTO LIKE '%' || ${args.filtro} || '%' + OR UPPER(p.DESCCOMPLETA) LIKE UPPER('%' || ${args.filtro} || '%') + ) + ) + OR ( + ${args.ean} IS NOT NULL + AND EXISTS ( + SELECT 1 + FROM CONSINCO.MAP_PRODCODIGO A + WHERE A.SEQPRODUTO = p.SEQPRODUTO + AND ISNUMERIC(A.CODACESSO) = 'S' + AND A.CODACESSO = ${args.ean} + ) + ) + OR ( + ${args.filtro} IS NULL + AND ${args.ean} IS NULL + ) + ) + ORDER BY + 2 + `, + }; + }, + detalhe: (args) => { + return { + sql: /*sql*/ ` + select /*+ FIRST_ROWS(10) */ pemp.nroempresa, + tcomp.comprador, + nvl(mff.fornecedor, 'N/A') fornecedor, + consinco.gmgbfcategoriafamilian1(pro.seqfamilia, me.nrodivisao, 1) categoria, + pro.seqproduto, + initcap(pro.desccompleta) Descricao, + nvl(mapi.urlecommerceimg,'') ImagemUrl, + case when trunc(case + when pes2.precovalidpromoc > 0.00 then nvl(pes2.precovalidpromoc,0) + when pes2.precovalidpromoc = 0.00 then nvl(pes2.precovalidnormal,0) + end / pes2.qtdembalagem,2) = 0 then + trunc(case + when pes.precovalidpromoc > 0.00 then nvl(pes.precovalidpromoc,0) + when pes.precovalidpromoc = 0.00 then nvl(pes.precovalidnormal,0) + end, 2) + else + trunc(case + when pes2.precovalidpromoc > 0.00 then nvl(pes2.precovalidpromoc,0) + when pes2.precovalidpromoc = 0.00 then nvl(pes2.precovalidnormal,0) + end / pes2.qtdembalagem,2) + end PrecoAtacado, + + trunc(case + when pes.precovalidpromoc > 0.00 then nvl(pes.precovalidpromoc,0) + when pes.precovalidpromoc = 0.00 then nvl(pes.precovalidnormal,0) + end, 2) PrecoVarejo, + + trunc(nvl(pemp.medvdiaforapromoc,0),4) MDV, + nvl(gmgb_fn_buscamargemproduto(pemp.nroempresa,pemp.seqproduto),0) Margem, + + case + when trunc(case + when pes.precovalidpromoc > 0.00 then nvl(pes.precovalidpromoc,0) + when pes.precovalidpromoc = 0.00 then nvl(pes.precovalidnormal,0) + end, 2) = trunc(case + when pes2.precovalidpromoc > 0.00 then nvl(pes2.precovalidpromoc,0) + when pes2.precovalidpromoc = 0.00 then nvl(pes2.precovalidnormal,0) + end / pes2.qtdembalagem,2 + ) then nvl(gmgb_fn_buscamargemproduto(pemp.nroempresa,pemp.seqproduto),0) + else + nvl(CONSINCO.GMGB_FN_BUSCAMARGEMPRODUTO_AT2(pemp.nroempresa,pemp.seqproduto),0) + end MargemAtacado, + nvl(pemp.codclassifpreco,'Sem valor') ClasseAbastecimento, + emb.embalagem DescricaoEmbalagem, + trunc(nvl(emb.qtdembalagem,0)) QuantidadeEmbalagem, + case + when pemp.nroempresa in (979, 980, 981) then trunc(nvl(pemp.estqdeposito - pemp.qtdreservadavda,0),3) + else trunc(nvl(pemp.estqloja,0), 3) - (NVL(pemp.qtdreservadavda,0)) + end EstoqueDisponivel, + + NVL(pemp.estqtroca,0) EstoqueTroca, + NVL(pemp.qtdpedrectransito,0) EstoqueTransito, + pemp.qtdpendpedcompra EstoqueFuturo, + NVL(pemp.qtdreservadavda,0) + nvl(pemp.estqoutro,0) EstoqueReservado, --24/05/2024 - cfreitas - Inclu�do estqoutro para n�o ser necess�rio utilizar MADV_COMPOSICAORESERVASELINV + ROUND(nvl(case + when NVL(pemp.medvdiaforapromoc, 0) = 0 then 0 + when NVL(pemp.medvdiaforapromoc,0) > 0 then (nvl(case when me.nroempresa in (979, 980, 981) then trunc(nvl(pemp.estqdeposito,0), 3) else trunc(nvl(pemp.estqloja,0), 3) end,0) - NVL(pemp.qtdreservadavda,0) ) / trunc(nvl(pemp.medvdiaforapromoc,1),4) + end, 0), 3) DDV, + + nvl(pemp.estqminimodv,0) DDVMinimo, + nvl(pemp.estqmaximodv, 0) DDVMaximo, + case + WHEN (select count(1) from mlo_prodembwm w where w.nroempresa = 979 and w.seqproduto = pemp.seqproduto and w.codlinhasepar = 'FR') > 0 THEN 'FRACIONADO' + when pemp.formaabastecimento = 'I' then 'ARMAZENAGEM' + when pemp.formaabastecimento = 'C' then 'CROSS' + when pemp.formaabastecimento = 'N' then 'CENTRAL-EDL' + when pemp.formaabastecimento = 'E' then 'LOJA-EDL' + when pemp.formaabastecimento is null then gmgb_fn_busca_forma_abastecfam(pro.seqfamilia, md.nrodivisao) + end FormaAbastecimento, + + case + when pes.precovalidpromoc > 0.00 then 'PROMOCAO' + when pes.precovalidpromoc = 0.00 then 'NORMAL' + end Situacao, + pempcd.estqdeposito - nvl(pempcd.qtdreservadavda,0) EstoqueDisponivelCD, + pempcd.qtdpendpedcompra EstoqueFuturoCD, + + consinco.gmgb_fn_busca_dtult_entrada(pemp.nroempresa,pemp.seqproduto) DATAULTIMAENTRADA, + pemp.dtaultvenda DATAULTIMAVENDA, + consinco.fmrl_custoprodempatual(pro.seqproduto, pemp.nroempresa, 'L') custoliquido, + CASE WHEN (select count(*) from mrl_prodempseg pest where pest.seqproduto = pemp.seqproduto and pest.nroempresa = pemp.nroempresa and pest.nrosegmento = seg.nrosegmento and pest.statusvenda = 'A' ) > 0 then 'A' ELSE 'I' end STATUSVENDA, + --case when (pemp.statuscompra='A') then 1 else 0 end STATUSCOMPRA, + pemp.statuscompra, + nvl((select min(qtdembalagem) from mrl_prodempseg where nroempresa=me.nroempresa and nrosegmento=me.nrosegmentoprinc and seqproduto=pro.seqproduto and statusvenda='A' and qtdembalagem>1), 1) QtdeAtacado, + nvl(pro.seqprodutobase,0) IdBase, + case + when mfdv.indnegavariacentral = 'S' THEN 'TROCA FISICA' + ELSE + + case when mff.indindenizavaria = 'S' then + case when (me.nroempresa >= 400 and me.nroempresa <=499) or (me.nroempresa >= 600 and me.nroempresa <= 699) then + 'SEM TROCA' + else + 'TROCA FINANC' + end + when mff.indindenizavaria = 'N' then + 'NF DEVOL' + else + 'SEM TROCA' + end + END TIPOTROCA, + mfdv.padraoembcompra QUANTIDADECOMPRA, + pemp.qtdreservadavda RESERVA, + NVL(pro.pzovalidadedia, 0) VALIDADEDIAS, + mfdv.margemlucrodivisao, + nvl(pes.precovalidpromoc,0) PrecoPromoc, + nvl(pes.precovalidnormal,0) PrecoNormal, + nvl(pes3.precovalidpromoc,0) PrecoMeuMambo, + case when pes3.precovalidpromoc > 0 then + nvl(consinco.mbo_fn_buscamargemprodutoseg(pemp.nroempresa,pemp.seqproduto,15),0) + else + 0 + end MargemMeuMambo, + nvl(consinco.mbo_fn_buscamargemprodutoseg(pemp.nroempresa,pemp.seqproduto,2,'S'),0) MargemNormal, + trunc(nvl(pemp.medvdiapromoc,0),4) MdvPromoc, + NVL(vncto.vlrprecovenctoprox,0) VLRPRECOVENCTOPROX, + vncto.dtavalidade + +from max_divisao md + +inner join max_empresa me + on me.nrodivisao = md.nrodivisao +and me.nroempresa not in (104,200,291,298,910,911,920,930,931,940,980) +and me.dtainiciomovestoque <= trunc(sysdate) +and me.status = 'A' + +inner join mad_segmento seg + on md.nrodivisao = me.nrodivisao +and me.nrosegmentoprinc = seg.nrosegmento + +inner join mrl_produtoempresa pemp + on pemp.nroempresa = me.nroempresa + +left join mrl_produtoempresa pempcd + on pempcd.seqproduto = pemp.seqproduto +and pempcd.nroempresa in (979) + +left join map_classeabastec mcab +on mcab.classeabastqtd = pemp.classeabastqtd +and mcab.nroempresa = pemp.nroempresa +and mcab.classeabastvlr = pemp.classeabastvlr + +inner join map_produto pro + on pro.seqproduto = pemp.seqproduto + +inner join map_famdivisao mfdv + on mfdv.seqfamilia = pro.seqfamilia +and mfdv.nrodivisao = me.nrodivisao + +inner join max_comprador mco + on mco.seqcomprador = mfdv.seqcomprador + +left join tb_comprador tcomp + on tcomp.COMPRADOR = mco.comprador + +left join map_produtoimagem mapi + on mapi.seqproduto = pro.seqproduto +and mapi.indpricipal = 'S' + +inner join mrl_prodempseg pes + on pes.seqproduto = pemp.seqproduto +and pes.nroempresa = pemp.nroempresa +and pes.nrosegmento = seg.nrosegmento +and pes.qtdembalagem = 1 + +inner join mrl_prodempseg pes2 + on pes2.nroempresa = pes.nroempresa +and pes2.seqproduto = pes.seqproduto +and pes2.nrosegmento = pes.nrosegmento + +left join mrl_prodempseg pes3 + on pes3.seqproduto = pemp.seqproduto +and pes3.nroempresa = pemp.nroempresa +and pes3.nrosegmento = 15 +and pes3.qtdembalagem = 1 + +inner join map_famembalagem emb + on emb.seqfamilia = pro.seqfamilia +and emb.qtdembalagem = 1 + +left join (select mffTemp.Seqfamilia, + mfdvTemp.Nrodivisao, + mffTemp.indindenizavaria, + mfdvTemp.pzomedvisitarep, + mfdvTemp.pzomedentrega, + mfdvTemp.pzomedatraso, + gp.fantasia fornecedor + + from map_famfornec mffTemp + + inner join ge_pessoa gp + on gp.seqpessoa = mffTemp.Seqfornecedor + + left join maf_fornecdivisao mfdvTemp + on mfdvTemp.Seqfornecedor = mffTemp.Seqfornecedor + and mffTemp.Principal = 'S' + + ) mff + on mff.seqfamilia = pro.seqfamilia +and mff.nrodivisao = md.nrodivisao + +left join (select pvencto.nroempresa, + pvencto.seqproduto, + min(pvencto.vlrpreco) vlrprecovenctoprox, + min(pvencto.dtavalidade) dtavalidade + from consinco.mrl_prodempvencimento pvencto + where 1=1 + and pvencto.dtavalidade >= trunc(sysdate) + and pvencto.qtdembalagem = 1 + group by pvencto.nroempresa, + pvencto.seqproduto + ) vncto + ON vncto.nroempresa = pemp.nroempresa +and vncto.seqproduto = pemp.seqproduto + +where 1=1 +--and pemp.SEQPRODUTO = 136011 +--and pemp.nroempresa = 202 +and md.nrodivisao in (2,4) +and pemp.seqproduto = ${args.codproduto} +and me.nroempresa in (${args.ctx_user_companies_for_module}) +and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1) + from mrl_prodempseg pes3 + where pes3.nroempresa = pes.nroempresa + and pes3.seqproduto = pes.seqproduto + and pes3.nrosegmento = pes.nrosegmento + and pes3.statusvenda = 'A') + `, + }; + }, + detalhe_preco: (args) => { + return { + sql: /*sql*/ ` + select ora_hash(mgmp.SEQPRODUTO||mgmp.NROEMPRESA||mgmp.QTDEMBALAGEM||mgmp.NROSEGMENTO) chave, + mgmp.SEQPRODUTO, + mgmp.NROEMPRESA, + mgmp.NROSEGMENTO, + mgmp.QTDEMBALAGEM || ' ' || mgmp.EMBVENDA embalagem, + mgmp.PRECOVALIDNORMAL preco_embalagem, + mgmp.PRECOVALIDNORMAL / mgmp.QTDEMBALAGEM preco_unidade, + trunc(mgmp.MGMPRECOVALIDO,2) margem + from maxv_mgmbaseprodseg mgmp + inner join max_empresa me + on me.nroempresa = mgmp.NROEMPRESA + and me.status = 'A' + and me.dtainiciomovestoque <= trunc(sysdate)-1 + and me.nrodivisao in (2,4) + and me.nroempresa not in (291,298,910,911,920,930,931,940,980) + AND mgmp.NROSEGMENTO IN (2,7) + where 1=1 + and mgmp.seqproduto = ${args.codproduto} + and mgmp.nroempresa = ${args.nrempresa} + AND mgmp.NROSEGMENTO NOT IN (22,23,26) + and mgmp.STATUSVENDA = 'A' + `, + }; + }, + detalhe_mdv: (args) => { + return { + sql: /*sql*/ ` + select mcdia.dtaentradasaida data, + mcdia.nroempresa, + mcdia.seqproduto, + Decode(to_char(mcdia.dtaentradasaida,'d'),1,'Domingo',2,'Segunda',3,'Terça',4,'Quarta',5,'Quinta',6,'Sexta',7,'Sábado') diasemana, + mcdia.qtdvda qtd, + mcdia.qtdestqinicial qtd_inicial + from mrl_custodia mcdia + inner join max_empresa me + on mcdia.nroempresa = me.nroempresa + where 1=1 + and mcdia.qtdvda > 0 + and mcdia.dtaentradasaida >= trunc(sysdate)-365 + AND mcdia.nroempresa = ${args.nrempresa} + AND mcdia.seqproduto = ${args.codproduto} + order by dtaentradasaida desc + `, + }; + }, + detalhe_situacao_vigente: (args) => { + return { + sql: /*sql*/ ` + select mrl_prodempseg.nroempresa, + mrl_prodempseg.seqproduto, + mrl_promocao.dtainicio, + mrl_promocao.dtafim, + mfe.qtdembalagem || ' ' || mfe.embalagem embalagem, + mrl_promocaoitem.precopromocional preco + from mrl_promocaoitem, mrl_promocao, mrl_prodempseg, + map_produto mp, map_famembalagem mfe, max_empresa me + where 1=1 + and me.nroempresa = mrl_promocao.nroempresa + and me.status = 'A' + and me.nrodivisao = 2 + and me.dtainiciomovestoque <= trunc(sysdate)-1 + and mrl_promocao.nroempresa = mrl_promocaoitem.nroempresa + and mrl_promocao.seqpromocao = mrl_promocaoitem.seqpromocao + and mrl_promocao.centralloja = mrl_promocaoitem.centralloja + and mrl_promocao.nrosegmento = mrl_promocaoitem.nrosegmento + and mrl_promocaoitem.seqproduto = mrl_prodempseg.seqproduto + and mrl_promocao.nrosegmento = mrl_prodempseg.nrosegmento + and mrl_promocao.nroempresa = mrl_prodempseg.nroempresa + and mrl_promocaoitem.qtdembalagem = mrl_prodempseg.qtdembalagem + and mp.seqproduto = mrl_prodempseg.seqproduto + and mfe.seqfamilia = mp.seqfamilia + and mfe.qtdembalagem = mrl_prodempseg.qtdembalagem + and nvl(mrl_promocao.tipopromoc, 'N') in ('N', 'F', 'A', 'S') + and mrl_promocao.dtainicio >= trunc(sysdate)-90--365 + AND mrl_prodempseg.nroempresa = ${args.nrempresa} + AND mrl_prodempseg.seqproduto = ${args.codproduto} + order by mrl_promocao.dtainicio desc + `, + }; + }, + detalhe_custo_liquido: (args) => { + return { + sql: /*sql*/ ` + select mcdiafam.dtaentradasaida, + mcdiafam.nroempresa, + PROD.SEQPRODUTO, + mcdiafam.seqfamilia, + mcdiafam.qtdestqinicial estqinicial, + qtdestqinicial + qtdentrada - qtdsaida estqfinal, + --trunc(cmdiavlrnf,2) custo + cmdiavlrnf custo + from mrl_custodiafam mcdiafam + INNER JOIN MAP_PRODUTO PROD + ON PROD.SEQFAMILIA = MCDIAFAM.SEQFAMILIA + inner join max_empresa me + on me.nroempresa = mcdiafam.nroempresa + and me.status = 'A' + and me.dtainiciomovestoque <= trunc(sysdate)-1 + and me.nrodivisao in (2,4) + where 1=1 + and mcdiafam.dtaentradasaida >= trunc(sysdate)-365 + AND mcdiafam.nroempresa = ${args.nrempresa} + AND PROD.SEQPRODUTO = ${args.codproduto} + order by mcdiafam.dtaentradasaida desc + `, + }; + }, + detalhe_estoque_disponivel: (args) => { + return { + sql: /*sql*/ ` + select + cdia.dtaentradasaida, + cdia.nroempresa, + cdia.seqproduto, + cdia.qtdentrada, + cdia.qtdsaida, + cdia.qtdestqinicial + cdia.qtdentrada - cdia.qtdsaida qtdsaldo + from mrl_custodia cdia + join max_empresa me + on me.nroempresa = cdia.nroempresa + and me.status = 'A' + and me.dtainiciomovestoque < trunc(sysdate) + and me.nrodivisao = 2 + where cdia.dtaentradasaida >= sysdate - 365 + and cdia.seqproduto = ${args.codproduto} + and cdia.nroempresa = ${args.nrempresa} + union all + select + mle.dtaentradasaida, + mle.nroempresa, + mle.seqproduto, + sum(case when mle.tiplancto = 'E' then mle.qtdlancto else 0 end) qtdentrada, + sum(case when mle.tiplancto = 'S' then mle.qtdlancto else 0 end) qtdsaida, + cdia.qtdestqinicial + + sum(case when mle.tiplancto = 'E' then mle.qtdlancto else 0 end) + - sum(case when mle.tiplancto = 'S' then mle.qtdlancto else 0 end) qtdsaldo + from mrl_lanctoestoque mle + join max_empresa me + on me.nroempresa = mle.nroempresa + and me.status = 'A' + and me.dtainiciomovestoque < trunc(sysdate) + and me.nrodivisao = 4 + join mrl_custodia cdia + on cdia.dtaentradasaida = mle.dtaentradasaida + and cdia.nroempresa = mle.nroempresa + and cdia.seqproduto = mle.seqproduto + where mle.dtaentradasaida >= sysdate - 365 + and mle.codgeraloper not in (301,302) + and mle.seqproduto = ${args.codproduto} + and mle.nroempresa = ${args.nrempresa} + group by + mle.dtaentradasaida, + mle.nroempresa, + mle.seqproduto, + cdia.qtdestqinicial + order by dtaentradasaida desc + `, + }; + }, + detalhe_estoque_transito: (args) => { + return { + sql: /*sql*/ ` + SELECT + a.nroempresa, + b.seqproduto, + INITCAP(C.NOMERAZAO) FORNECEDOR, + A.NUMERONF, + A.SERIENF, + A.DTAEMISSAO, + A.DTAENTRADA, + B.QUANTIDADE, + B.VLRITEM VALOR + from MLF_AUXNOTAFISCAL A, MLF_AUXNFITEM B, GE_PESSOA C, MAP_PRODUTO D + WHERE 1=1 + and B.SEQAUXNOTAFISCAL = A.SEQAUXNOTAFISCAL + AND C.SEQPESSOA = A.SEQPESSOA + AND D.SEQPRODUTO = B.SEQPRODUTO + AND A.DTAEMISSAO >= SYSDATE-365 + AND a.nroempresa = ${args.nrempresa} + AND b.seqproduto = ${args.codproduto} + order by A.DTAEMISSAO, A.NUMERONF, A.SERIENF + `, + }; + }, + }, });