From d893e7e31b8f2c4ef7bad949db2b40a2d8ccb0ee Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Wed, 13 May 2026 15:39:54 -0300 Subject: [PATCH] =?UTF-8?q?Atualiza=C3=A7=C3=A3o=20de=20nome=20de=20loja?= =?UTF-8?q?=20na=20procedure=20que=20carrega=20os=20dados?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...004_prc_flash_carga_dados_contribuicao.sql | 867 ++++++++++++++++++ 1 file changed, 867 insertions(+) create mode 100644 migrations/C5_big/20260513000004_prc_flash_carga_dados_contribuicao.sql diff --git a/migrations/C5_big/20260513000004_prc_flash_carga_dados_contribuicao.sql b/migrations/C5_big/20260513000004_prc_flash_carga_dados_contribuicao.sql new file mode 100644 index 0000000..4ac4e90 --- /dev/null +++ b/migrations/C5_big/20260513000004_prc_flash_carga_dados_contribuicao.sql @@ -0,0 +1,867 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO ( + p_data_inicial IN DATE, + p_data_final IN DATE, + p_empresa IN NUMBER +) AS + v_id_empresa NUMBER; + v_id_cat1 NUMBER; + v_id_cat2 NUMBER; + v_id_cat3 NUMBER; + v_id_cat4 NUMBER; + v_id_cat5 NUMBER; + v_id_produto NUMBER; + v_contador NUMBER := 0; + + FUNCTION FN_GET_OR_CREATE_NODO ( + p_id_nodo_pai IN NUMBER, + p_tipo_nodo IN VARCHAR2, + p_codigo IN VARCHAR2, + p_nome IN VARCHAR2, + p_nivel IN NUMBER, + p_cod_empresa IN NUMBER DEFAULT NULL, + p_cod_produto IN NUMBER DEFAULT NULL, + p_seqprodutobase IN NUMBER DEFAULT NULL + ) RETURN NUMBER + IS + v_id_nodo NUMBER; + BEGIN + SELECT n.id_nodo + INTO v_id_nodo + FROM TB_FLASH_NODO n + WHERE ( + n.id_nodo_pai = p_id_nodo_pai + OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL) + ) + AND n.tipo_nodo = p_tipo_nodo + AND n.codigo = p_codigo + AND ( + p_tipo_nodo <> 'PRODUTO' + OR ( + n.cod_empresa = p_cod_empresa + OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL) + ) + ); + + UPDATE TB_FLASH_NODO n + SET n.nome = p_nome, + n.cod_empresa = p_cod_empresa, + n.cod_produto = p_cod_produto, + n.seqprodutobase = p_seqprodutobase, + n.data_atualizacao = SYSDATE + WHERE n.id_nodo = v_id_nodo + AND ( + NVL(n.nome, '#') <> NVL(p_nome, '#') + OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1) + OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1) + OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1) + ); + + RETURN v_id_nodo; + + EXCEPTION + WHEN NO_DATA_FOUND THEN + v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL; + + INSERT INTO TB_FLASH_NODO ( + id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel, + ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase, + data_cadastro, data_atualizacao + ) VALUES ( + v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel, + NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase, + SYSDATE, NULL + ); + + RETURN v_id_nodo; + END; + +BEGIN + DELETE FROM TB_FLASH_FATO_CONTRIBUICAO + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final + AND cod_empresa = p_empresa; + + FOR r IN ( + SELECT Z.DTA, + Z.NROEMPRESA, + Z.NOMEEMPRESA, + Z.NROSEGMENTO, + Z.NRODIVISAO, + Z.SEQPRODUTO, + Z.SEQPRODUTOBASE, + Z.PRODUTO, + Z.SEQCATEGORIAN1, + Z.CATEGORIAN1, + Z.SEQCATEGORIAN2, + Z.CATEGORIAN2, + Z.SEQCATEGORIAN3, + Z.CATEGORIAN3, + Z.SEQCATEGORIAN4, + Z.CATEGORIAN4, + Z.SEQCATEGORIAN5, + Z.CATEGORIAN5, + Z.VLRVENDA, + (CASE WHEN (Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) < TO_DATE('01/09/2022','DD/MM/YYYY')) + OR ( Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) > TO_DATE('01/01/2024','DD/MM/YYYY')) THEN + Z.VLRVENDA - (Z.QTDE_VENDA * (SELECT nvl(ROUND((CD.CMDIAVLRNF + CD.CMDIAIPI + CD.CMDIAICMSST + CD.CMDIADESPNF + CD.CMDIADESPFORANF - + CD.CMDIACREDICMS - CD.CMDIACREDICMSPRESUM - CD.CMDIACREDICMSANTECIP - CD.CMDIACREDPIS - CD.CMDIACREDCOFINS- CD.CMDIADCTOFORANF),4),0) + FROM consinco.MRL_CUSTODIA CD + WHERE CD.SEQPRODUTO = (CASE WHEN Z.SEQPRODUTOBASE IS NULL THEN Z.SEQPRODUTO ELSE Z.SEQPRODUTOBASE END) + AND CD.NROEMPRESA = 301 + AND CD.DTAENTRADASAIDA = ( + SELECT MAX(CD1.DTAENTRADASAIDA) + FROM consinco.MRL_CUSTODIA CD1 + WHERE CD1.SEQPRODUTO = CD.SEQPRODUTO + AND CD1.NROEMPRESA = 301 + AND CD1.DTAENTRADASAIDA <= Z.DTA + ) + )) - Z.VLR_IMP_VENDA + ELSE + Z.VLRCONTRIB + END) AS VLRCONTRIB, + Z.VLRVENDA_MES_ANT, + Z.VLRCONTRIB_MES_ANT, + Z.VLRVENDA_ANO_ANT, + Z.VLRCONTRIB_ANO_ANT, + Z.QTDE_VENDA, + Z.VLR_IMP_VENDA, + Z.PROPQTDPRODUTOBASE + FROM (SELECT /*+OPTIMIZER_FEATURES_ENABLE('10.2.0.4')*/ + TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) DTA, + V.NROEMPRESA, + E.NOMEREDUZIDO AS NOMEEMPRESA, + V.NROSEGMENTO, + V.NRODIVISAO, + V.SEQPRODUTO, + A.SEQPRODUTOBASE, + A.DESCCOMPLETA PRODUTO, + CC1.SEQCATEGORIA AS SEQCATEGORIAN1, + CC1.CATEGORIA AS CATEGORIAN1, + ( SELECT CC2.SEQCATEGORIA + FROM consinco.MAP_FAMDIVCATEG DC2 + JOIN consinco.MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR in ('A', 'F') + AND CC2.NIVELHIERARQUIA = 2 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS in ('A', 'F') + ) AS SEQCATEGORIAN2, + ( SELECT CC2.CATEGORIA + FROM consinco.MAP_FAMDIVCATEG DC2 + JOIN consinco.MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR in ('A', 'F') + AND CC2.NIVELHIERARQUIA = 2 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS in ('A', 'F') + ) AS CATEGORIAN2, + ( SELECT CC2.SEQCATEGORIA + FROM consinco.MAP_FAMDIVCATEG DC2 + JOIN consinco.MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 3 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS SEQCATEGORIAN3, + ( SELECT CC2.CATEGORIA + FROM consinco.MAP_FAMDIVCATEG DC2 + JOIN consinco.MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 3 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS CATEGORIAN3, + ( SELECT CC2.SEQCATEGORIA + FROM consinco.MAP_FAMDIVCATEG DC2 + JOIN consinco.MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 4 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS SEQCATEGORIAN4, + ( SELECT CC2.CATEGORIA + FROM consinco.MAP_FAMDIVCATEG DC2 + JOIN consinco.MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 4 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS CATEGORIAN4, + ( SELECT CC2.SEQCATEGORIA + FROM consinco.MAP_FAMDIVCATEG DC2 + JOIN consinco.MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 5 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS SEQCATEGORIAN5, + ( SELECT CC2.CATEGORIA + FROM consinco.MAP_FAMDIVCATEG DC2 + JOIN consinco.MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 5 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS CATEGORIAN5, + SUM( ( V.QTDITEM - NVL( V.QTDDEVOLITEM, 0 ) ) ) AS QTDE_VENDA, + SUM( ( ROUND( V.VLRITEM, 2 ) ) - ( ROUND( V.VLRDEVOLITEM, 2 ) - ( 0 ) ) ) AS VLRVENDA, + SUM( DECODE( + V.ACMCOMPRAVENDA, 'I', ( V.VLRITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ), + DECODE( Y.QTDVDA * V.QTDITEM, 0, 0, ( Y.VLRIMPOSTOVDA - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDITEM ) + ) + - DECODE( + V.ACMCOMPRAVENDA, 'I', ( V.VLRDEVOLITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ), + DECODE( Y.QTDVDA * V.QTDDEVOLITEM, 0, 0, ( Y.VLRIMPOSTODEVOL - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDDEVOLITEM ) + ) + + DECODE( + V.ACMCOMPRAVENDA, 'I', 0, + DECODE( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM ) + + V.VLRFCPICMS + V.PISITEM + V.COFINSITEM - + DECODE( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM ) + - V.DVLRFCPICMS - V.PISDEVOLITEM - V.COFINSDEVOLITEM + ) + ) AS VLR_IMP_VENDA + , sum( + consinco.fC5_AbcDistribLucratividade( + 'L', + 'L', + 'N', + V.VLRITEM , + 'N', + V.VLRICMSST, + V.VLRFCPST, + V.VLRICMSSTEMPORIG, + E.UF, + V.UFPESSOA, + 'S', + null, + 'N', + V.VLRIPIITEM, + V.VLRIPIDEVOLITEM, + 'N', + V.VLRDESCFORANF, + Y.CMDIAVLRNF - 0 , + Y.CMDIAIPI, + nvl( Y.CMDIACREDPIS, 0 ), + nvl( Y.CMDIACREDCOFINS, 0 ), + Y.CMDIAICMSST, + Y.CMDIADESPNF, + Y.CMDIADESPFORANF, + Y.CMDIADCTOFORANF, + 'S', + a.propqtdprodutobase, + V.QTDITEM, + V.VLREMBDESCRESSARCST, + V.ACMCOMPRAVENDA, + V.PISITEM, + V.COFINSITEM, + decode( V.TIPCGO, 'S', Y.QTDVDA, nvl( Y.QTDDEVOL, Y.QTDVDA ) ), + ( decode( V.TIPCGO, 'S', Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ), + nvl( Y.VLRIMPOSTODEVOL - nvl( V.VLRIPIDEVOLITEM, 0 ), + Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ) ) ) ) , + 'N', + V.VLRDESPOPERACIONALITEM, + Y.VLRDESPESAVDA, + 'N', + nvl( Y.VLRVERBAVDAACR, 0 ), + DECODE( V.TIPDOCFISCALCGO, 'T', 0, Y.QTDVERBAVDA ), + Y.VLRVERBAVDA - nvl( Y.VLRVERBAVDAINDEVIDA, 0 ), + 'N', + NVL(V.VLRTOTCOMISSAOITEM, 0), + V.VLRDEVOLITEM, + VLRDEVOLICMSST, + V.DVLRFCPST, + V.QTDDEVOLITEM, + V.PISDEVOLITEM, + V.COFINSDEVOLITEM, + V.VLRDESPOPERACIONALITEMDEVOL, + V.VLRTOTCOMISSAOITEMDEVOL, + E.PERIRLUCRAT, + E.PERCSLLLUCRAT, + Y.CMDIACREDICMS, + decode( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM ) + + 0 , + V.VLRFCPICMS, + V.PERCPMF, + V.PEROUTROIMPOSTO, + decode( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM ) + + 0 , + V.DVLRFCPICMS, + case when ( 'N' ) = 'N' then + (nvl(y.cmdiavlrdescpistransf,0) + nvl(y.cmdiavlrdesccofinstransf,0) + nvl(y.cmdiavlrdescicmstransf,0) + + nvl(y.cmdiavlrdescipitransf,0) + nvl(y.cmdiavlrdesclucrotransf,0) + nvl(y.cmdiavlrdescverbatransf,0) ) + else 0 + end, + case when DV.UTILACRESCCUSTPRODRELAC = 'S' and nvl( A.SEQPRODUTOBASE, A.SEQPRODUTOBASEANTIGO ) is not null then + coalesce( PR.PERCACRESCCUSTORELACVIG, nvl( consinco.F_RETACRESCCUSTORELACABC( V.SEQPRODUTO, V.DTAVDA ), 1 ) ) + else 1 + end, + 'N', + 0, + 0, + 'S', + V.VLRDESCMEDALHA, + 'S', + V.VLRDESCFORNEC, + V.VLRDESCFORNECDEVOL, + 'N', + V.VLRFRETEITEMRATEIO, + V.VLRFRETEITEMRATEIODEV, + 'S', + V.VLRICMSSTEMBUTPROD, + V.VLRICMSSTEMBUTPRODDEV, + V.VLREMBDESCRESSARCSTDEVOL, + case when 'N' = 'S' then nvl( V.VLRDESCACORDOVERBAPDV, 0 ) else 0 end, + nvl( Y.CMDIACREDIPI, 0 ), + NVL(V.VLRITEMRATEIOCTE,0), + 'N', + 'C', + V.VLRIPIPRECOVDA, + V.VLRIPIPRECODEVOL, + V.VLRDESCMEDALHADEVOL, + 'N' + )) AS VLRCONTRIB + , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_MES_ANT + , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_MES_ANT + , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_ANO_ANT + , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_ANO_ANT + , MAX(A.PROPQTDPRODUTOBASE) AS PROPQTDPRODUTOBASE + FROM consinco.MRL_CUSTODIA Y + JOIN consinco.MAXV_ABCDISTRIBBASE V ON Y.DTAENTRADASAIDA = V.DTAVDA + JOIN consinco.MAP_PRODUTO A ON A.SEQPRODUTO = V.SEQPRODUTO + JOIN consinco.MAP_PRODUTO PB ON PB.SEQPRODUTO = V.SEQPRODUTOCUSTO AND PB.SEQPRODUTO = Y.SEQPRODUTO + JOIN consinco.MAP_FAMDIVISAO D ON D.SEQFAMILIA = A.SEQFAMILIA AND D.NRODIVISAO = V.NRODIVISAO + JOIN consinco.MAP_FAMEMBALAGEM K ON K.SEQFAMILIA = A.SEQFAMILIA AND K.QTDEMBALAGEM = 1 + JOIN consinco.MAX_EMPRESA E ON E.NROEMPRESA = V.NROEMPRESA AND Y.NROEMPRESA = NVL( E.NROEMPCUSTOABC, E.NROEMPRESA ) + JOIN consinco.MAX_DIVISAO DV ON E.NRODIVISAO = DV.NRODIVISAO + JOIN consinco.MAP_FAMDIVCATEG DC ON DC.NRODIVISAO = D.NRODIVISAO AND DC.STATUS = 'A' AND DC.SEQFAMILIA = D.SEQFAMILIA + JOIN consinco.MAP_CATEGORIA CC1 ON CC1.SEQCATEGORIA = DC.SEQCATEGORIA AND CC1.STATUSCATEGOR in ('A', 'F') AND CC1.NIVELHIERARQUIA = 1 AND CC1.NRODIVISAO = DC.NRODIVISAO AND CC1.TIPCATEGORIA = 'M' + LEFT JOIN consinco.MAP_PRODACRESCCUSTORELAC PR ON PR.SEQPRODUTO = V.SEQPRODUTO AND PR.DTAMOVIMENTACAO = V.DTAVDA + WHERE V.NROEMPRESA IN ( SELECT E.EMPRESA_ID FROM EMPRESA_PARAMETROS E WHERE E.PARTICIPA_FLASH = 1 ) + AND V.NROEMPRESA = p_empresa + AND V.NROSEGMENTO IN ( SELECT A.NROSEGMENTO FROM CONSINCO.MAD_SEGMENTO A WHERE A.STATUS = 'A' ) + AND DECODE(V.TIPTABELA, 'S', V.CGOACMCOMPRAVENDA, V.ACMCOMPRAVENDA) IN ( 'S','I' ) + AND V.DTAVDA BETWEEN p_data_inicial AND p_data_final + GROUP BY TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) + , V.NROEMPRESA + , E.NOMEREDUZIDO + , V.NRODIVISAO + , V.NROSEGMENTO + , V.SEQPRODUTO + , A.SEQPRODUTOBASE + , A.SEQFAMILIA + , A.DESCCOMPLETA + , CC1.SEQCATEGORIA + , CC1.CATEGORIA) Z + ) LOOP + + v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.NROEMPRESA), r.NOMEEMPRESA, 1, r.NROEMPRESA); + + IF r.SEQCATEGORIAN1 IS NOT NULL THEN + v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN1), r.CATEGORIAN1, 2, r.NROEMPRESA); + ELSE v_id_cat1 := v_id_empresa; END IF; + + IF r.SEQCATEGORIAN2 IS NOT NULL THEN + v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN2), r.CATEGORIAN2, 3, r.NROEMPRESA); + ELSE v_id_cat2 := v_id_cat1; END IF; + + IF r.SEQCATEGORIAN3 IS NOT NULL THEN + v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN3), r.CATEGORIAN3, 4, r.NROEMPRESA); + ELSE v_id_cat3 := v_id_cat2; END IF; + + IF r.SEQCATEGORIAN4 IS NOT NULL THEN + v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN4), r.CATEGORIAN4, 5, r.NROEMPRESA); + ELSE v_id_cat4 := v_id_cat3; END IF; + + IF r.SEQCATEGORIAN5 IS NOT NULL THEN + v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN5), r.CATEGORIAN5, 6, r.NROEMPRESA); + ELSE v_id_cat5 := v_id_cat4; END IF; + + v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.SEQPRODUTO), r.PRODUTO, 7, r.NROEMPRESA, r.SEQPRODUTO, r.SEQPRODUTOBASE); + + INSERT INTO TB_FLASH_FATO_CONTRIBUICAO ( + id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana, + id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto, + seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_contribuicao, qtde_contribuicao, + vlr_contribuicao, vl_ticket_medio, propqtdprodutobase, data_cadastro + ) VALUES ( + SEQ_TB_FLASH_FATO_CONTRIBUICAO.NEXTVAL, + r.DTA, EXTRACT(YEAR FROM r.DTA), EXTRACT(MONTH FROM r.DTA), EXTRACT(DAY FROM r.DTA), + TO_NUMBER(TO_CHAR(r.DTA, 'D')), + v_id_produto, v_id_empresa, r.NROEMPRESA, r.NOMEEMPRESA, r.SEQPRODUTO, r.PRODUTO, + r.SEQPRODUTOBASE, r.NRODIVISAO, r.NROSEGMENTO, r.QTDE_VENDA, r.VLR_IMP_VENDA, + r.QTDE_VENDA, r.VLRCONTRIB, + CASE WHEN r.QTDE_VENDA > 0 THEN r.VLRVENDA / r.QTDE_VENDA ELSE NULL END, + r.PROPQTDPRODUTOBASE, SYSDATE + ); + + END LOOP; + + COMMIT; +END; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_CONTRIBUICAO ( + p_data_inicial IN DATE, + p_data_final IN DATE, + p_empresa IN NUMBER +) AS + v_id_empresa NUMBER; + v_id_cat1 NUMBER; + v_id_cat2 NUMBER; + v_id_cat3 NUMBER; + v_id_cat4 NUMBER; + v_id_cat5 NUMBER; + v_id_produto NUMBER; + v_contador NUMBER := 0; + + FUNCTION FN_GET_OR_CREATE_NODO ( + p_id_nodo_pai IN NUMBER, + p_tipo_nodo IN VARCHAR2, + p_codigo IN VARCHAR2, + p_nome IN VARCHAR2, + p_nivel IN NUMBER, + p_cod_empresa IN NUMBER DEFAULT NULL, + p_cod_produto IN NUMBER DEFAULT NULL, + p_seqprodutobase IN NUMBER DEFAULT NULL + ) RETURN NUMBER + IS + v_id_nodo NUMBER; + BEGIN + SELECT n.id_nodo + INTO v_id_nodo + FROM TB_FLASH_NODO n + WHERE ( + n.id_nodo_pai = p_id_nodo_pai + OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL) + ) + AND n.tipo_nodo = p_tipo_nodo + AND n.codigo = p_codigo + AND ( + p_tipo_nodo <> 'PRODUTO' + OR ( + n.cod_empresa = p_cod_empresa + OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL) + ) + ); + + UPDATE TB_FLASH_NODO n + SET n.nome = p_nome, + n.cod_empresa = p_cod_empresa, + n.cod_produto = p_cod_produto, + n.seqprodutobase = p_seqprodutobase, + n.data_atualizacao = SYSDATE + WHERE n.id_nodo = v_id_nodo + AND ( + NVL(n.nome, '#') <> NVL(p_nome, '#') + OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1) + OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1) + OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1) + ); + + RETURN v_id_nodo; + + EXCEPTION + WHEN NO_DATA_FOUND THEN + v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL; + + INSERT INTO TB_FLASH_NODO ( + id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel, + ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase, + data_cadastro, data_atualizacao + ) VALUES ( + v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel, + NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase, + SYSDATE, NULL + ); + + RETURN v_id_nodo; + END; + +BEGIN + DELETE FROM TB_FLASH_FATO_CONTRIBUICAO + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final + AND cod_empresa = p_empresa; + + FOR r IN ( + SELECT Z.DTA, + Z.NROEMPRESA, + Z.NOMEEMPRESA, + Z.NROSEGMENTO, + Z.NRODIVISAO, + Z.SEQPRODUTO, + Z.SEQPRODUTOBASE, + Z.PRODUTO, + Z.SEQCATEGORIAN1, + Z.CATEGORIAN1, + Z.SEQCATEGORIAN2, + Z.CATEGORIAN2, + Z.SEQCATEGORIAN3, + Z.CATEGORIAN3, + Z.SEQCATEGORIAN4, + Z.CATEGORIAN4, + Z.SEQCATEGORIAN5, + Z.CATEGORIAN5, + Z.VLRVENDA, + (CASE WHEN (Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) < TO_DATE('01/09/2022','DD/MM/YYYY')) + OR ( Z.SEQCATEGORIAN2 = 15458 AND z.seqcategorian3 NOT IN (SELECT seqcategoria FROM TB_EXCECAO_CONTRIB_HORTI) AND TRUNC(SYSDATE) > TO_DATE('01/01/2024','DD/MM/YYYY')) THEN + Z.VLRVENDA - (Z.QTDE_VENDA * (SELECT nvl(ROUND((CD.CMDIAVLRNF + CD.CMDIAIPI + CD.CMDIAICMSST + CD.CMDIADESPNF + CD.CMDIADESPFORANF - + CD.CMDIACREDICMS - CD.CMDIACREDICMSPRESUM - CD.CMDIACREDICMSANTECIP - CD.CMDIACREDPIS - CD.CMDIACREDCOFINS- CD.CMDIADCTOFORANF),4),0) + FROM MRL_CUSTODIA CD + WHERE CD.SEQPRODUTO = (CASE WHEN Z.SEQPRODUTOBASE IS NULL THEN Z.SEQPRODUTO ELSE Z.SEQPRODUTOBASE END) + AND CD.NROEMPRESA = 301 + AND CD.DTAENTRADASAIDA = ( + SELECT MAX(CD1.DTAENTRADASAIDA) + FROM MRL_CUSTODIA CD1 + WHERE CD1.SEQPRODUTO = CD.SEQPRODUTO + AND CD1.NROEMPRESA = 301 + AND CD1.DTAENTRADASAIDA <= Z.DTA + ) + )) - Z.VLR_IMP_VENDA + ELSE + Z.VLRCONTRIB + END) AS VLRCONTRIB, + Z.VLRVENDA_MES_ANT, + Z.VLRCONTRIB_MES_ANT, + Z.VLRVENDA_ANO_ANT, + Z.VLRCONTRIB_ANO_ANT, + Z.QTDE_VENDA, + Z.VLR_IMP_VENDA, + Z.PROPQTDPRODUTOBASE + FROM (SELECT /*+OPTIMIZER_FEATURES_ENABLE('10.2.0.4')*/ + TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) DTA, + V.NROEMPRESA, + E.FANTASIA AS NOMEEMPRESA, + V.NROSEGMENTO, + V.NRODIVISAO, + V.SEQPRODUTO, + A.SEQPRODUTOBASE, + A.DESCCOMPLETA PRODUTO, + CC1.SEQCATEGORIA AS SEQCATEGORIAN1, + CC1.CATEGORIA AS CATEGORIAN1, + ( SELECT CC2.SEQCATEGORIA + FROM consinco.MAP_FAMDIVCATEG DC2 + JOIN consinco.MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR in ('A', 'F') + AND CC2.NIVELHIERARQUIA = 2 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS in ('A', 'F') + ) AS SEQCATEGORIAN2, + ( SELECT CC2.CATEGORIA + FROM consinco.MAP_FAMDIVCATEG DC2 + JOIN consinco.MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR in ('A', 'F') + AND CC2.NIVELHIERARQUIA = 2 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS in ('A', 'F') + ) AS CATEGORIAN2, + ( SELECT CC2.SEQCATEGORIA + FROM consinco.MAP_FAMDIVCATEG DC2 + JOIN consinco.MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 3 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS SEQCATEGORIAN3, + ( SELECT CC2.CATEGORIA + FROM consinco.MAP_FAMDIVCATEG DC2 + JOIN consinco.MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 3 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS CATEGORIAN3, + ( SELECT CC2.SEQCATEGORIA + FROM consinco.MAP_FAMDIVCATEG DC2 + JOIN consinco.MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 4 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS SEQCATEGORIAN4, + ( SELECT CC2.CATEGORIA + FROM consinco.MAP_FAMDIVCATEG DC2 + JOIN consinco.MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 4 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS CATEGORIAN4, + ( SELECT CC2.SEQCATEGORIA + FROM consinco.MAP_FAMDIVCATEG DC2 + JOIN consinco.MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 5 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS SEQCATEGORIAN5, + ( SELECT CC2.CATEGORIA + FROM consinco.MAP_FAMDIVCATEG DC2 + JOIN consinco.MAP_CATEGORIA CC2 + ON CC2.SEQCATEGORIA = DC2.SEQCATEGORIA + AND CC2.STATUSCATEGOR = 'A' + AND CC2.NIVELHIERARQUIA = 5 + AND CC2.NRODIVISAO = DC2.NRODIVISAO + AND CC2.TIPCATEGORIA = 'M' + WHERE DC2.SEQFAMILIA = A.SEQFAMILIA + AND DC2.NRODIVISAO = V.NRODIVISAO + AND DC2.STATUS = 'A' + ) AS CATEGORIAN5, + SUM( ( V.QTDITEM - NVL( V.QTDDEVOLITEM, 0 ) ) ) AS QTDE_VENDA, + SUM( ( ROUND( V.VLRITEM, 2 ) ) - ( ROUND( V.VLRDEVOLITEM, 2 ) - ( 0 ) ) ) AS VLRVENDA, + SUM( DECODE( + V.ACMCOMPRAVENDA, 'I', ( V.VLRITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ), + DECODE( Y.QTDVDA * V.QTDITEM, 0, 0, ( Y.VLRIMPOSTOVDA - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDITEM ) + ) + - DECODE( + V.ACMCOMPRAVENDA, 'I', ( V.VLRDEVOLITEM * ( V.PERCPMF + V.PEROUTROIMPOSTO ) / 100 ), + DECODE( Y.QTDVDA * V.QTDDEVOLITEM, 0, 0, ( Y.VLRIMPOSTODEVOL - NVL( Y.VLRIPIVDA, 0 ) ) * DECODE('S','N',1, NVL( A.PROPQTDPRODUTOBASE, 1) ) / Y.QTDVDA * V.QTDDEVOLITEM ) + ) + + DECODE( + V.ACMCOMPRAVENDA, 'I', 0, + DECODE( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM ) + + V.VLRFCPICMS + V.PISITEM + V.COFINSITEM - + DECODE( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM ) + - V.DVLRFCPICMS - V.PISDEVOLITEM - V.COFINSDEVOLITEM + ) + ) AS VLR_IMP_VENDA + , sum( + consinco.fC5_AbcDistribLucratividade( + 'L', + 'L', + 'N', + V.VLRITEM , + 'N', + V.VLRICMSST, + V.VLRFCPST, + V.VLRICMSSTEMPORIG, + E.UF, + V.UFPESSOA, + 'S', + null, + 'N', + V.VLRIPIITEM, + V.VLRIPIDEVOLITEM, + 'N', + V.VLRDESCFORANF, + Y.CMDIAVLRNF - 0 , + Y.CMDIAIPI, + nvl( Y.CMDIACREDPIS, 0 ), + nvl( Y.CMDIACREDCOFINS, 0 ), + Y.CMDIAICMSST, + Y.CMDIADESPNF, + Y.CMDIADESPFORANF, + Y.CMDIADCTOFORANF, + 'S', + a.propqtdprodutobase, + V.QTDITEM, + V.VLREMBDESCRESSARCST, + V.ACMCOMPRAVENDA, + V.PISITEM, + V.COFINSITEM, + decode( V.TIPCGO, 'S', Y.QTDVDA, nvl( Y.QTDDEVOL, Y.QTDVDA ) ), + ( decode( V.TIPCGO, 'S', Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ), + nvl( Y.VLRIMPOSTODEVOL - nvl( V.VLRIPIDEVOLITEM, 0 ), + Y.VLRIMPOSTOVDA - nvl( Y.VLRIPIVDA, 0 ) ) ) ) , + 'N', + V.VLRDESPOPERACIONALITEM, + Y.VLRDESPESAVDA, + 'N', + nvl( Y.VLRVERBAVDAACR, 0 ), + DECODE( V.TIPDOCFISCALCGO, 'T', 0, Y.QTDVERBAVDA ), + Y.VLRVERBAVDA - nvl( Y.VLRVERBAVDAINDEVIDA, 0 ), + 'N', + NVL(V.VLRTOTCOMISSAOITEM, 0), + V.VLRDEVOLITEM, + VLRDEVOLICMSST, + V.DVLRFCPST, + V.QTDDEVOLITEM, + V.PISDEVOLITEM, + V.COFINSDEVOLITEM, + V.VLRDESPOPERACIONALITEMDEVOL, + V.VLRTOTCOMISSAOITEMDEVOL, + E.PERIRLUCRAT, + E.PERCSLLLUCRAT, + Y.CMDIACREDICMS, + decode( V.ICMSEFETIVOITEM, 0, V.ICMSITEM, V.ICMSEFETIVOITEM ) + + 0 , + V.VLRFCPICMS, + V.PERCPMF, + V.PEROUTROIMPOSTO, + decode( V.ICMSEFETIVODEVOLITEM, 0, V.ICMSDEVOLITEM, V.ICMSEFETIVODEVOLITEM ) + + 0 , + V.DVLRFCPICMS, + case when ( 'N' ) = 'N' then + (nvl(y.cmdiavlrdescpistransf,0) + nvl(y.cmdiavlrdesccofinstransf,0) + nvl(y.cmdiavlrdescicmstransf,0) + + nvl(y.cmdiavlrdescipitransf,0) + nvl(y.cmdiavlrdesclucrotransf,0) + nvl(y.cmdiavlrdescverbatransf,0) ) + else 0 + end, + case when DV.UTILACRESCCUSTPRODRELAC = 'S' and nvl( A.SEQPRODUTOBASE, A.SEQPRODUTOBASEANTIGO ) is not null then + coalesce( PR.PERCACRESCCUSTORELACVIG, nvl( consinco.F_RETACRESCCUSTORELACABC( V.SEQPRODUTO, V.DTAVDA ), 1 ) ) + else 1 + end, + 'N', + 0, + 0, + 'S', + V.VLRDESCMEDALHA, + 'S', + V.VLRDESCFORNEC, + V.VLRDESCFORNECDEVOL, + 'N', + V.VLRFRETEITEMRATEIO, + V.VLRFRETEITEMRATEIODEV, + 'S', + V.VLRICMSSTEMBUTPROD, + V.VLRICMSSTEMBUTPRODDEV, + V.VLREMBDESCRESSARCSTDEVOL, + case when 'N' = 'S' then nvl( V.VLRDESCACORDOVERBAPDV, 0 ) else 0 end, + nvl( Y.CMDIACREDIPI, 0 ), + NVL(V.VLRITEMRATEIOCTE,0), + 'N', + 'C', + V.VLRIPIPRECOVDA, + V.VLRIPIPRECODEVOL, + V.VLRDESCMEDALHADEVOL, + 'N' + )) AS VLRCONTRIB + , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_MES_ANT + , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_MES_ANT + , CAST( 0.0000 AS NUMBER(20,4)) AS VLRVENDA_ANO_ANT + , CAST( 0.0000 AS NUMBER(20,4)) AS VLRCONTRIB_ANO_ANT + , MAX(A.PROPQTDPRODUTOBASE) AS PROPQTDPRODUTOBASE + FROM consinco.MRL_CUSTODIA Y + JOIN consinco.MAXV_ABCDISTRIBBASE V ON Y.DTAENTRADASAIDA = V.DTAVDA + JOIN consinco.MAP_PRODUTO A ON A.SEQPRODUTO = V.SEQPRODUTO + JOIN consinco.MAP_PRODUTO PB ON PB.SEQPRODUTO = V.SEQPRODUTOCUSTO AND PB.SEQPRODUTO = Y.SEQPRODUTO + JOIN consinco.MAP_FAMDIVISAO D ON D.SEQFAMILIA = A.SEQFAMILIA AND D.NRODIVISAO = V.NRODIVISAO + JOIN consinco.MAP_FAMEMBALAGEM K ON K.SEQFAMILIA = A.SEQFAMILIA AND K.QTDEMBALAGEM = 1 + JOIN consinco.MAX_EMPRESA E ON E.NROEMPRESA = V.NROEMPRESA AND Y.NROEMPRESA = NVL( E.NROEMPCUSTOABC, E.NROEMPRESA ) + JOIN consinco.MAX_DIVISAO DV ON E.NRODIVISAO = DV.NRODIVISAO + JOIN consinco.MAP_FAMDIVCATEG DC ON DC.NRODIVISAO = D.NRODIVISAO AND DC.STATUS = 'A' AND DC.SEQFAMILIA = D.SEQFAMILIA + JOIN consinco.MAP_CATEGORIA CC1 ON CC1.SEQCATEGORIA = DC.SEQCATEGORIA AND CC1.STATUSCATEGOR in ('A', 'F') AND CC1.NIVELHIERARQUIA = 1 AND CC1.NRODIVISAO = DC.NRODIVISAO AND CC1.TIPCATEGORIA = 'M' + LEFT JOIN consinco.MAP_PRODACRESCCUSTORELAC PR ON PR.SEQPRODUTO = V.SEQPRODUTO AND PR.DTAMOVIMENTACAO = V.DTAVDA + WHERE V.NROEMPRESA IN ( SELECT E.EMPRESA_ID FROM EMPRESA_PARAMETROS E WHERE E.PARTICIPA_FLASH = 1 ) + AND V.NROEMPRESA = p_empresa + AND V.NROSEGMENTO IN ( SELECT A.NROSEGMENTO FROM CONSINCO.MAD_SEGMENTO A WHERE A.STATUS = 'A' ) + AND DECODE(V.TIPTABELA, 'S', V.CGOACMCOMPRAVENDA, V.ACMCOMPRAVENDA) IN ( 'S','I' ) + AND V.DTAVDA BETWEEN p_data_inicial AND p_data_final + GROUP BY TO_DATE( Y.DTAENTRADASAIDA, 'DD/MM/RRRR' ) + , V.NROEMPRESA + , E.FANTASIA + , V.NRODIVISAO + , V.NROSEGMENTO + , V.SEQPRODUTO + , A.SEQPRODUTOBASE + , A.SEQFAMILIA + , A.DESCCOMPLETA + , CC1.SEQCATEGORIA + , CC1.CATEGORIA) Z + ) LOOP + + v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.NROEMPRESA), r.NOMEEMPRESA, 1, r.NROEMPRESA); + + IF r.SEQCATEGORIAN1 IS NOT NULL THEN + v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN1), r.CATEGORIAN1, 2, r.NROEMPRESA); + ELSE v_id_cat1 := v_id_empresa; END IF; + + IF r.SEQCATEGORIAN2 IS NOT NULL THEN + v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN2), r.CATEGORIAN2, 3, r.NROEMPRESA); + ELSE v_id_cat2 := v_id_cat1; END IF; + + IF r.SEQCATEGORIAN3 IS NOT NULL THEN + v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN3), r.CATEGORIAN3, 4, r.NROEMPRESA); + ELSE v_id_cat3 := v_id_cat2; END IF; + + IF r.SEQCATEGORIAN4 IS NOT NULL THEN + v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN4), r.CATEGORIAN4, 5, r.NROEMPRESA); + ELSE v_id_cat4 := v_id_cat3; END IF; + + IF r.SEQCATEGORIAN5 IS NOT NULL THEN + v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.SEQCATEGORIAN5), r.CATEGORIAN5, 6, r.NROEMPRESA); + ELSE v_id_cat5 := v_id_cat4; END IF; + + v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.SEQPRODUTO), r.PRODUTO, 7, r.NROEMPRESA, r.SEQPRODUTO, r.SEQPRODUTOBASE); + + INSERT INTO TB_FLASH_FATO_CONTRIBUICAO ( + id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana, + id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto, + seqprodutobase, nrodivisao, nrosegmento, nro_tickets, vlr_imp_contribuicao, qtde_contribuicao, + vlr_contribuicao, vl_ticket_medio, propqtdprodutobase, data_cadastro + ) VALUES ( + SEQ_TB_FLASH_FATO_CONTRIBUICAO.NEXTVAL, + r.DTA, EXTRACT(YEAR FROM r.DTA), EXTRACT(MONTH FROM r.DTA), EXTRACT(DAY FROM r.DTA), + TO_NUMBER(TO_CHAR(r.DTA, 'D')), + v_id_produto, v_id_empresa, r.NROEMPRESA, r.NOMEEMPRESA, r.SEQPRODUTO, r.PRODUTO, + r.SEQPRODUTOBASE, r.NRODIVISAO, r.NROSEGMENTO, r.QTDE_VENDA, r.VLR_IMP_VENDA, + r.QTDE_VENDA, r.VLRCONTRIB, + CASE WHEN r.QTDE_VENDA > 0 THEN r.VLRVENDA / r.QTDE_VENDA ELSE NULL END, + r.PROPQTDPRODUTOBASE, SYSDATE + ); + + END LOOP; + + COMMIT; +END; +-- +goose StatementEnd