Files
app-dono-modulos/migrations/C5/20260529000040_prc_flash_carga_dados_perda.sql
T

77 lines
4.0 KiB
SQL

-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_PERDA (
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_PERDA
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final
AND cod_empresa = p_empresa;
INSERT INTO TB_FLASH_FATO_PERDA (
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, qtde_perda, vlr_perda,
propqtdprodutobase, data_cadastro, nome_segmento
)
SELECT
SEQ_TB_FLASH_FATO_PERDA.NEXTVAL,
x.data_referencia, x.ano_referencia, x.mes_referencia, x.dia_referencia, x.dia_semana,
x.id_nodo, x.id_nodo_empresa, x.cod_empresa, x.nome_empresa,
x.cod_produto, x.descricao_produto, x.seqprodutobase, x.nrodivisao, x.nrosegmento,
x.qtde_perda, x.vlr_perda, x.propqtdprodutobase, x.data_cadastro, x.nome_segmento
FROM (
SELECT
TRUNC(a.DTAVDA) AS data_referencia,
EXTRACT(YEAR FROM a.DTAVDA) AS ano_referencia,
EXTRACT(MONTH FROM a.DTAVDA) AS mes_referencia,
EXTRACT(DAY FROM a.DTAVDA) AS dia_referencia,
TO_NUMBER(TO_CHAR(a.DTAVDA,'D')) AS dia_semana,
MIN(b.id_nodo) AS id_nodo,
MIN(c.id_nodo) AS id_nodo_empresa,
b.cod_empresa AS cod_empresa,
MAX(d.fantasia) AS nome_empresa,
a.seqproduto AS cod_produto,
MAX(e.descreduzida) AS descricao_produto,
MAX(e.seqprodutobase) AS seqprodutobase,
MIN(a.nrodivisao) AS nrodivisao,
a.nrosegmento AS nrosegmento,
SUM(a.qtditem) AS qtde_perda,
SUM(a.vlritem) AS vlr_perda,
MAX(e.propqtdprodutobase) AS propqtdprodutobase,
SYSDATE AS data_cadastro,
MAX(seg1.descsegmento) AS nome_segmento
FROM consinco.maxv_abcdistribbase a
INNER JOIN vitruvio.TB_FLASH_NODO b ON b.tipo_nodo = 'PRODUTO' AND b.cod_empresa = a.nroempresa AND b.cod_produto = a.seqproduto
INNER JOIN vitruvio.TB_FLASH_NODO c ON c.tipo_nodo = 'EMPRESA' AND c.cod_empresa = a.nroempresa
INNER JOIN consinco.max_empresa d ON d.nroempresa = c.cod_empresa
INNER JOIN consinco.map_produto e ON e.seqproduto = a.seqproduto
INNER JOIN consinco.mad_segmento seg1 ON seg1.nrodivisao = a.nrodivisao AND seg1.nrosegmento = a.nrosegmento
WHERE a.nroempresa = p_empresa
AND a.dtavda BETWEEN p_data_inicial AND p_data_final
AND (p_cgos IS NULL OR a.codgeraloper IN (SELECT TO_NUMBER(REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL)) FROM dual CONNECT BY REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL) IS NOT NULL))
AND (p_divisao IS NULL OR a.nrodivisao IN (SELECT TO_NUMBER(REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL)) FROM dual CONNECT BY REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL) IS NOT NULL))
GROUP BY TRUNC(a.dtavda), EXTRACT(YEAR FROM a.dtavda), EXTRACT(MONTH FROM a.dtavda),
EXTRACT(DAY FROM a.dtavda), TO_NUMBER(TO_CHAR(a.dtavda,'D')), b.cod_empresa, a.seqproduto, a.nrosegmento
) x;
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_PERDA' AND object_type = 'PROCEDURE';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_DADOS_PERDA';
END IF;
END;
-- +goose StatementEnd