-- +goose Up -- +goose StatementBegin CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_VENDA ( p_data_inicial IN DATE, p_data_final IN DATE, p_empresa IN NUMBER, p_divisao IN VARCHAR2 DEFAULT NULL, p_cgos IN VARCHAR2 DEFAULT NULL ) AS BEGIN DELETE FROM TB_FLASH_FATO_VENDA WHERE data_referencia BETWEEN p_data_inicial AND p_data_final AND cod_empresa = p_empresa; INSERT INTO TB_FLASH_FATO_VENDA ( 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_venda, qtde_venda, vlr_venda, vl_ticket_medio, propqtdprodutobase, data_cadastro, nome_segmento ) WITH pg AS ( SELECT MAX(indutilicmstaresugprabc) AS indutilicmstaresugprabc FROM consinco.max_paramgeral ), cat AS ( SELECT dc.nrodivisao, dc.seqfamilia, 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_famdivcateg dc JOIN consinco.map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.nrodivisao = dc.nrodivisao AND cc.statuscategor = 'A' AND cc.tipcategoria = 'M' AND cc.nivelhierarquia BETWEEN 1 AND 5 WHERE dc.status = 'A' GROUP BY dc.nrodivisao, dc.seqfamilia ), dados AS ( SELECT dv.nrodivisao, seg1.nrosegmento, seg1.descsegmento, e.nroempresa AS empresa, e.nomereduzido AS nomeempresa, a.seqproduto AS cod_produto, a.seqprodutobase, a.desccompleta AS descricao, z.dtaentradasaida AS data_referencia, TO_NUMBER(TO_CHAR(z.dtaentradasaida, 'D')) AS dia_semana, TO_NUMBER(TO_CHAR(z.dtaentradasaida, 'DD')) AS dia, TO_NUMBER(TO_CHAR(z.dtaentradasaida, 'MM')) AS mes, TO_NUMBER(TO_CHAR(z.dtaentradasaida, 'YYYY')) AS ano, 0 AS nro_tickets, SUM(DECODE(y.qtdvda,0,0,(y.vlrimpostovda+NVL(DECODE(pg.indutilicmstaresugprabc,'S',COALESCE(y.vlricmsvdasolicit,y.vlricmsvda),y.vlricmsvda),0)+NVL(y.vlrpisvda,0)+NVL(y.vlrcofinsvda,0))/y.qtdvda)*z.qtdvda) +SUM(DECODE(NVL(y.qtddevol,0),0,0,(NVL(y.vlrimpostodevol,0)+NVL(DECODE(pg.indutilicmstaresugprabc,'S',DECODE(y.qtdvda,0,0,COALESCE((y.vlricmsvdasolicit/y.qtdvda)*y.qtddevol,y.vlricmsdevol)),((z.vlricmsvda/GREATEST(z.qtdvda,1))*NVL(z.qtddevol,0))),0)+NVL(y.vlrpisdevol,0)+NVL(y.vlrcofinsdevol,0))/y.qtddevol)*(0-NVL(z.qtddevol,0))) AS vlr_imp_venda, SUM((z.qtdvda - NVL(z.qtddevol,0)) / k.qtdembalagem) AS qtde_venda, SUM(z.vlrtotalvda) - SUM(NVL(z.vlrtotaldevol,0)) AS vlr_venda, 0 AS vl_ticket_medio, a.propqtdprodutobase FROM consinco.mrl_custodia z JOIN consinco.max_empresa e ON e.nroempresa = z.nroempresa JOIN consinco.mrl_custodia y ON y.seqproduto = z.seqproduto AND y.dtaentradasaida = z.dtaentradasaida AND y.nroempresa = z.nroempresa JOIN consinco.map_famdivisao d ON d.seqfamilia = z.seqfamilia AND d.nrodivisao = e.nrodivisao JOIN consinco.max_divisao dv ON dv.nrodivisao = d.nrodivisao JOIN consinco.mad_segmento seg1 ON seg1.nrodivisao = d.nrodivisao JOIN consinco.mad_famsegmento h ON h.seqfamilia = z.seqfamilia AND h.nrosegmento = e.nrosegmentoprinc AND h.nrosegmento = seg1.nrosegmento JOIN consinco.map_famembalagem k ON k.seqfamilia = h.seqfamilia AND k.qtdembalagem = 1 JOIN consinco.map_produto a ON a.seqproduto = z.seqproduto AND a.seqfamilia = d.seqfamilia JOIN cat ON cat.nrodivisao = d.nrodivisao AND cat.seqfamilia = d.seqfamilia CROSS JOIN pg WHERE z.dtaentradasaida BETWEEN p_data_inicial AND p_data_final AND z.nroempresa = p_empresa AND (p_divisao IS NULL OR d.nrodivisao IN (SELECT TO_NUMBER(REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL)) FROM dual CONNECT BY REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL) IS NOT NULL)) AND (z.vlrtotalvda > 0 OR z.vlrtotaldevol > 0) AND EXISTS (SELECT 1 FROM consinco.maxv_abcdistribbase b WHERE b.seqproduto=z.seqproduto AND b.nroempresa=z.nroempresa AND b.dtavda=z.dtaentradasaida AND (p_cgos IS NULL OR b.codgeraloper IN (SELECT TO_NUMBER(REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL)) FROM dual CONNECT BY REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL) IS NOT NULL))) GROUP BY dv.nrodivisao, seg1.nrosegmento, seg1.descsegmento, e.nroempresa, e.nomereduzido, a.seqproduto, a.seqprodutobase, a.desccompleta, z.dtaentradasaida, a.propqtdprodutobase ), nodo_empresa AS ( SELECT codigo, MAX(id_nodo) AS id_nodo FROM TB_FLASH_NODO WHERE tipo_nodo = 'EMPRESA' AND id_nodo_pai IS NULL GROUP BY codigo ), nodo_produto AS ( SELECT codigo, cod_empresa, seqprodutobase, MAX(id_nodo) AS id_nodo FROM TB_FLASH_NODO WHERE tipo_nodo = 'PRODUTO' GROUP BY codigo, cod_empresa, seqprodutobase ) SELECT SEQ_TB_FLASH_FATO_VENDA.NEXTVAL, r.data_referencia, r.ano, r.mes, r.dia, r.dia_semana, np.id_nodo AS id_nodo, ne.id_nodo AS id_nodo_empresa, r.empresa, r.nomeempresa, r.cod_produto, r.descricao, r.seqprodutobase, r.nrodivisao, r.nrosegmento, r.nro_tickets, r.vlr_imp_venda, r.qtde_venda, r.vlr_venda, r.vl_ticket_medio, r.propqtdprodutobase, SYSDATE, r.descsegmento FROM dados r JOIN nodo_empresa ne ON ne.codigo = TO_CHAR(r.empresa) JOIN nodo_produto np ON np.codigo = TO_CHAR(r.cod_produto) AND np.cod_empresa = r.empresa AND NVL(np.seqprodutobase,-1) = NVL(r.seqprodutobase,-1); COMMIT; END; -- +goose StatementEnd -- +goose Down -- +goose StatementBegin DECLARE v_count NUMBER; BEGIN SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_VENDA' AND object_type = 'PROCEDURE'; IF v_count > 0 THEN EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_DADOS_VENDA'; END IF; END; -- +goose StatementEnd