Atualizações e criação das tabelas para o ambiente do Barcelos.
davinTI/app-dono-modulos/pipeline/head This commit looks good
davinTI/app-dono-modulos/pipeline/head This commit looks good
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,186 @@
|
||||
-- +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
|
||||
) 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;
|
||||
|
||||
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_PERDA
|
||||
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final
|
||||
AND cod_empresa = p_empresa;
|
||||
|
||||
FOR r IN (
|
||||
SELECT
|
||||
e.nroempresa AS empresa,
|
||||
e.nomereduzido AS nomeempresa,
|
||||
a.seqproduto AS cod_produto,
|
||||
a.seqprodutobase,
|
||||
a.desccompleta AS descricao,
|
||||
d.nrodivisao,
|
||||
seg1.nrosegmento,
|
||||
p.dtamovimento AS data_referencia,
|
||||
TO_NUMBER(TO_CHAR(p.dtamovimento, 'DD')) AS dia,
|
||||
TO_NUMBER(TO_CHAR(p.dtamovimento, 'MM')) AS mes,
|
||||
TO_NUMBER(TO_CHAR(p.dtamovimento, 'YYYY')) AS ano,
|
||||
TO_NUMBER(TO_CHAR(p.dtamovimento, 'D')) AS dia_semana,
|
||||
SUM(p.qtdperda) AS qtde_perda,
|
||||
SUM(p.vlrperda) AS vlr_perda,
|
||||
SUM(p.vlrcustoperda) AS vlr_custo_perda,
|
||||
a.propqtdprodutobase,
|
||||
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 1 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn1,
|
||||
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 1 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn1,
|
||||
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 2 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn2,
|
||||
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 2 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn2,
|
||||
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 3 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn3,
|
||||
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 3 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn3,
|
||||
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 4 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn4,
|
||||
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 4 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn4,
|
||||
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 5 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn5,
|
||||
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 5 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn5
|
||||
FROM max_empresa e
|
||||
JOIN mar_perda p
|
||||
ON p.nroempresa = e.nroempresa
|
||||
JOIN map_produto a
|
||||
ON a.seqproduto = p.seqproduto
|
||||
JOIN map_famdivisao d
|
||||
ON d.seqfamilia = a.seqfamilia
|
||||
AND d.nrodivisao = e.nrodivisao
|
||||
JOIN mad_famsegmento h
|
||||
ON h.seqfamilia = a.seqfamilia
|
||||
AND h.nrosegmento = e.nrosegmentoprinc
|
||||
JOIN mad_segmento seg1
|
||||
ON seg1.nrosegmento = h.nrosegmento
|
||||
AND seg1.nrodivisao = d.nrodivisao
|
||||
WHERE p.dtamovimento BETWEEN p_data_inicial AND p_data_final
|
||||
AND p.nroempresa = p_empresa
|
||||
GROUP BY e.nroempresa, e.nomereduzido, a.seqproduto, a.seqprodutobase,
|
||||
a.desccompleta, d.nrodivisao, seg1.nrosegmento, p.dtamovimento,
|
||||
a.propqtdprodutobase, a.seqfamilia, e.nrodivisao
|
||||
) LOOP
|
||||
|
||||
v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.empresa), r.nomeempresa, 1, r.empresa);
|
||||
|
||||
IF r.codcatn1 IS NOT NULL THEN
|
||||
v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.codcatn1), r.nomecatn1, 2, r.empresa);
|
||||
ELSE v_id_cat1 := v_id_empresa; END IF;
|
||||
|
||||
IF r.codcatn2 IS NOT NULL THEN
|
||||
v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.codcatn2), r.nomecatn2, 3, r.empresa);
|
||||
ELSE v_id_cat2 := v_id_cat1; END IF;
|
||||
|
||||
IF r.codcatn3 IS NOT NULL THEN
|
||||
v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.codcatn3), r.nomecatn3, 4, r.empresa);
|
||||
ELSE v_id_cat3 := v_id_cat2; END IF;
|
||||
|
||||
IF r.codcatn4 IS NOT NULL THEN
|
||||
v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.codcatn4), r.nomecatn4, 5, r.empresa);
|
||||
ELSE v_id_cat4 := v_id_cat3; END IF;
|
||||
|
||||
IF r.codcatn5 IS NOT NULL THEN
|
||||
v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.codcatn5), r.nomecatn5, 6, r.empresa);
|
||||
ELSE v_id_cat5 := v_id_cat4; END IF;
|
||||
|
||||
v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.cod_produto), r.descricao, 7, r.empresa, r.cod_produto, r.seqprodutobase);
|
||||
|
||||
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, vlr_custo_perda, qtde_perda,
|
||||
vlr_perda, propqtdprodutobase, data_cadastro
|
||||
) VALUES (
|
||||
SEQ_TB_FLASH_FATO_PERDA.NEXTVAL,
|
||||
r.data_referencia, r.ano, r.mes, r.dia, r.dia_semana,
|
||||
v_id_produto, v_id_empresa, r.empresa, r.nomeempresa, r.cod_produto, r.descricao,
|
||||
r.seqprodutobase, r.nrodivisao, r.nrosegmento, r.vlr_custo_perda,
|
||||
r.qtde_perda, r.vlr_perda, r.propqtdprodutobase, SYSDATE
|
||||
);
|
||||
|
||||
END LOOP;
|
||||
|
||||
COMMIT;
|
||||
END;
|
||||
-- +goose StatementEnd
|
||||
|
||||
-- +goose Down
|
||||
-- +goose StatementBegin
|
||||
DECLARE
|
||||
v_count NUMBER;
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_PERDA' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO';
|
||||
IF v_count > 0 THEN
|
||||
EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_PERDA';
|
||||
END IF;
|
||||
END;
|
||||
-- +goose StatementEnd
|
||||
Reference in New Issue
Block a user