Files
app-dono-modulos/migrations/C5/20260529000014_prc_flash_carga_dados_venda.sql

112 lines
6.9 KiB
SQL

-- +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