-- +goose Up -- +goose StatementBegin CREATE OR REPLACE PROCEDURE PRC_CARREGA_FLASH_PERDAS ( p_data_inicial IN DATE, p_data_final IN DATE, p_reprocessar IN VARCHAR2 DEFAULT 'S' ) IS BEGIN IF p_reprocessar = 'S' THEN DELETE FROM TB_FLASH_PERDAS WHERE DATA_PERDA BETWEEN p_data_inicial AND p_data_final; END IF; INSERT INTO TB_FLASH_PERDAS ( ID, NUMERO_LOJA, NOME_LOJA, CODIGO_CATEGORIA_N1, NOME_CATEGORIA_N1, CODIGO_CATEGORIA_N2, NOME_CATEGORIA_N2, CODIGO_CATEGORIA_N3, NOME_CATEGORIA_N3, CODIGO_CATEGORIA_N4, NOME_CATEGORIA_N4, CODIGO_CATEGORIA_N5, NOME_CATEGORIA_N5, CODIGO_PRODUTO, NOME_PRODUTO, DATA_PERDA, ANO, MES, DIA, DIA_SEMANA, VALOR_PERDA, CUSTO, QTD_PERDA, DATAINC, DATAALT ) WITH cat_base AS ( SELECT pc.seqproduto, MAX(CASE WHEN cc.nivelhierarquia = 1 THEN dc.seqcategoria END) AS codcatn1, MAX(CASE WHEN cc.nivelhierarquia = 1 THEN cc.categoria END) AS nomecatn1, MAX(CASE WHEN cc.nivelhierarquia = 2 THEN dc.seqcategoria END) AS codcatn2, MAX(CASE WHEN cc.nivelhierarquia = 2 THEN cc.categoria END) AS nomecatn2, MAX(CASE WHEN cc.nivelhierarquia = 3 THEN dc.seqcategoria END) AS codcatn3, MAX(CASE WHEN cc.nivelhierarquia = 3 THEN cc.categoria END) AS nomecatn3, MAX(CASE WHEN cc.nivelhierarquia = 4 THEN dc.seqcategoria END) AS codcatn4, MAX(CASE WHEN cc.nivelhierarquia = 4 THEN cc.categoria END) AS nomecatn4, MAX(CASE WHEN cc.nivelhierarquia = 5 THEN dc.seqcategoria END) AS codcatn5, MAX(CASE WHEN cc.nivelhierarquia = 5 THEN cc.categoria END) AS nomecatn5 FROM consinco.map_produto pc JOIN consinco.map_familia fc ON fc.seqfamilia = pc.seqfamilia JOIN consinco.map_famdivcateg dc ON dc.seqfamilia = fc.seqfamilia AND dc.nrodivisao = 1 AND dc.status = 'A' JOIN consinco.map_categoria cc ON cc.nrodivisao = dc.nrodivisao AND cc.seqcategoria = dc.seqcategoria AND cc.tipcategoria = 'M' AND cc.statuscategor = 'A' AND cc.nivelhierarquia BETWEEN 1 AND 5 GROUP BY pc.seqproduto ), custo_base AS ( SELECT cd.seqproduto, cd.nroempresa, cd.dtaentradasaida, (cd.cmdiavlrnf + cd.cmdiaipi + cd.cmdiaicmsst + cd.cmdiadespnf + cd.cmdiadespforanf - cd.cmdiacredicms - cd.cmdiacredicmspresum - cd.cmdiacredicmsantecip - cd.cmdiacredpis - cd.cmdiacredcofins - cd.cmdiadctoforanf) AS custo_dia FROM consinco.mrl_custodia cd ), inner_query AS ( SELECT e.nroempresa AS empresa, e.nomereduzido AS nomeempresa, cat.codcatn1, cat.nomecatn1, cat.codcatn2, cat.nomecatn2, cat.codcatn3, cat.nomecatn3, cat.codcatn4, cat.nomecatn4, cat.codcatn5, cat.nomecatn5, c.seqproduto AS cod_produto, a.desccompleta AS descricao, a.seqprodutobase, vw.dtaentradasaida AS data_venda, SUM(vw.vlrctoliquido) AS custo_liq_na_loja, SUM(vw.valorlancto) AS perda, SUM(vw.qtdlancto) AS qtde_perda_unit, ( SUM((vw.qtdlancto / c3.qtdembalagem) * c3.precovalidnormal * (e.pericmsestimativa + e.peroutroimposto + e.percpmf + e.perir + DECODE(e.indfaturaiss, 'S', e.perciss, 0) + DECODE(e.indfaturaipi || b.indcalcipisaida, 'SS', b.peraliquotaipi, 0)) / 100) + SUM((vw.qtdlancto / c3.qtdembalagem) * c3.precovalidnormal * (t3.peraliquota * t3.pertributado / 100) / 100) + SUM((vw.qtdlancto / c3.qtdembalagem) * c3.precovalidnormal * DECODE(b.indisentopis, 'S', 0, DECODE(b.indisentodebpiscofins, 'S', 0, e.perpis)) / 100) + SUM((vw.qtdlancto / c3.qtdembalagem) * c3.precovalidnormal * DECODE(b.indisentopis, 'S', 0, DECODE(b.indisentodebpiscofins, 'S', 0, e.percofins)) / 100) ) AS vlrimpostovda, CASE WHEN cat.codcatn2 IN (15458, 18080) AND cat.codcatn3 NOT IN (17696, 18007, 17182) THEN SUM( vw.qtdlancto * ( SELECT cx.custo_dia FROM custo_base cx WHERE cx.seqproduto = COALESCE(a.seqprodutobase, c.seqproduto) AND cx.nroempresa = 301 AND cx.dtaentradasaida = ( SELECT MAX(cx2.dtaentradasaida) FROM custo_base cx2 WHERE cx2.seqproduto = cx.seqproduto AND cx2.nroempresa = 301 AND cx2.dtaentradasaida <= vw.dtaentradasaida ) ) ) ELSE SUM(vw.valorlancto) END AS perda_novo FROM maxv_categoria gs, map_famdivcateg us, map_famdivcateg w, map_famdivisao d, max_empresa e, max_divisao i2, map_classifabc z2, maxv_abcperdabase vw, map_tributacaouf t3, map_familia b, mad_famsegmento h, map_famembalagem k, mrl_produtoempresa c, mrl_prodempseg c3, map_produto a, mad_segmento se, map_produto pr, cat_base cat, ( SELECT a.seqproduto, a.nroempresa, SUM(a.estqloja) AS estqloja, SUM(a.estqdeposito) AS estqdeposito, SUM(a.estqtroca) AS estqtroca, SUM(a.estqalmoxarifado) AS estqalmoxarifado, SUM(a.estqoutro) AS estqoutro, SUM( NVL(a.cmultvlrdescpistransf, 0) + NVL(a.cmultvlrdesccofinstransf, 0) + NVL(a.cmultvlrdescicmstransf, 0) + NVL(a.cmultvlrdescipitransf, 0) + NVL(a.cmultvlrdesclucrotransf, 0) + NVL(a.cmultvlrdescverbatransf, 0) + NVL(a.cmultvlrdescdiferencatransf, 0) ) AS vlrdesctransfcb FROM mrl_produtoempresa a GROUP BY a.seqproduto, a.nroempresa ) sx, ( SELECT MAX(dx.utilacresccustprodrelac) AS utilacresccustprodrelac FROM max_divisao dx JOIN max_empresa ex ON ex.nrodivisao = dx.nrodivisao ) i3 WHERE e.nroempresa = vw.nroempresa AND e.nrodivisao = d.nrodivisao AND h.seqfamilia = vw.seqfamilia AND h.nrosegmento = e.nrosegmentoprinc AND h.nrosegmento = se.nrosegmento AND d.seqfamilia = vw.seqfamilia AND d.nrodivisao IN (1) AND b.seqfamilia = vw.seqfamilia AND i2.nrodivisao = d.nrodivisao AND z2.nrosegmento = h.nrosegmento AND z2.classifcomercabc = h.classifcomercabc AND k.seqfamilia = h.seqfamilia AND a.seqproduto = c.seqproduto AND k.qtdembalagem = h.padraoembvenda AND c.seqproduto = vw.seqproduto AND c.nroempresa = NVL(e.nroempcustoabc, e.nroempresa) AND c3.nroempresa = vw.nroempresa AND c3.seqproduto = vw.seqproduto AND c3.nrosegmento = e.nrosegmentoprinc AND c3.qtdembalagem = h.padraoembvenda AND t3.nrotributacao = d.nrotributacao AND t3.ufempresa = e.uf AND t3.ufclientefornec = e.uf AND t3.tiptributacao = DECODE(i2.tipdivisao, 'V', 'SN', 'SC') AND t3.nroregtributacao = NVL(e.nroregtributacao, 0) AND pr.seqproduto = vw.seqproduto AND sx.seqproduto = vw.seqproduto AND sx.nroempresa = vw.nroempresa AND cat.seqproduto = vw.seqproduto AND vw.dtaentradasaida BETWEEN p_data_inicial AND p_data_final AND vw.nroempresa IN ( SELECT CODIGO FROM VITRUVIO.vi_lojas WHERE codigo NOT IN (301, 401, 500) ) AND vw.tipclassinterno IN ('P', 'R', 'C', 'A') AND vw.tiplancto IN ('S') AND gs.nrodivisao = us.nrodivisao AND gs.nivelhierarquia = 2 AND gs.tipcategoria = 'M' AND gs.statuscategor != 'I' AND us.seqfamilia = d.seqfamilia AND us.nrodivisao = d.nrodivisao AND us.seqcategoria = gs.seqcategoria AND us.status = 'A' AND w.seqfamilia = d.seqfamilia AND w.nrodivisao = d.nrodivisao AND w.status = 'A' AND w.seqcategoria IN (14772, 15450) GROUP BY e.nroempresa, e.nomereduzido, gs.seqcategoria, gs.caminhocompleto, SUBSTR(e.nomereduzido || ' : ' || gs.caminhocompleto, 1, 250), c.seqproduto, a.seqprodutobase, a.desccompleta, vw.dtaentradasaida, cat.codcatn1, cat.nomecatn1, cat.codcatn2, cat.nomecatn2, cat.codcatn3, cat.nomecatn3, cat.codcatn4, cat.nomecatn4, cat.codcatn5, cat.nomecatn5, TO_NUMBER(NULL), NULL ) SELECT SEQ_FLASH_PERDAS.NEXTVAL, iq.empresa, iq.nomeempresa, TO_CHAR(iq.codcatn1), iq.nomecatn1, TO_CHAR(iq.codcatn2), iq.nomecatn2, TO_CHAR(iq.codcatn3), iq.nomecatn3, TO_CHAR(iq.codcatn4), iq.nomecatn4, TO_CHAR(iq.codcatn5), iq.nomecatn5, TO_CHAR(iq.cod_produto), iq.descricao, iq.data_venda, EXTRACT(YEAR FROM iq.data_venda), EXTRACT(MONTH FROM iq.data_venda), EXTRACT(DAY FROM iq.data_venda), (TRUNC(iq.data_venda) - TRUNC(iq.data_venda, 'IW') + 1), iq.perda_novo, iq.custo_liq_na_loja, iq.qtde_perda_unit, SYSDATE, SYSDATE FROM inner_query iq; COMMIT; END; -- +goose StatementEnd -- +goose Down -- +goose StatementBegin BEGIN EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_CARREGA_FLASH_PERDAS'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -4043 THEN RAISE; END IF; END; -- +goose StatementEnd