From aa32a80fccecb64d09e5d272931d1bdb73a5419e Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Mon, 25 May 2026 16:55:46 -0300 Subject: [PATCH] =?UTF-8?q?Atualiza=20atualiza=C3=A7=C3=A3o=20de=20valores?= =?UTF-8?q?=20do=20flash=20de=20vendas.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0522000002_prc_flash_carga_dados_venda.sql | 201 ++++++++++++------ ...22000005_prc_flash_atualiza_venda_dono.sql | 91 -------- ...22000006_prc_flash_atualiza_venda_dono.sql | 8 +- src/flash/flash.module.ts | 12 +- 4 files changed, 148 insertions(+), 164 deletions(-) delete mode 100644 migrations/C5/20260522000005_prc_flash_atualiza_venda_dono.sql diff --git a/migrations/C5/20260522000002_prc_flash_carga_dados_venda.sql b/migrations/C5/20260522000002_prc_flash_carga_dados_venda.sql index 421a85b..d8bc2bb 100644 --- a/migrations/C5/20260522000002_prc_flash_carga_dados_venda.sql +++ b/migrations/C5/20260522000002_prc_flash_carga_dados_venda.sql @@ -3,7 +3,9 @@ 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_empresa IN NUMBER, + p_divisao IN VARCHAR2 DEFAULT NULL, + p_cgos IN VARCHAR2 DEFAULT NULL ) AS v_id_empresa NUMBER; v_id_cat1 NUMBER; @@ -83,6 +85,33 @@ BEGIN AND cod_empresa = p_empresa; FOR r IN ( + 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 + ) SELECT dv.nrodivisao, seg1.nrosegmento, seg1.descsegmento, @@ -92,84 +121,122 @@ BEGIN 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, + 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(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)) + 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, + SUM(z.vlrtotalvda) - SUM(NVL(z.vlrtotaldevol, 0)) AS vlr_venda, 0 AS vl_ticket_medio, 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 maxv_categoria g, map_famdivcateg u, map_produto a, map_famdivisao d, - map_famembalagem k, mad_segmento seg1, mrl_produtoempresa c, - mad_famsegmento h, max_empresa e, mrl_custodia y, mrl_custodia z, - mrlv_descontoregra re, max_divisao dv, max_paramgeral pg - WHERE z.dtaentradasaida BETWEEN p_data_inicial AND p_data_final - AND z.nroempresa = p_empresa - AND e.nroempresa = z.nroempresa - AND e.nrodivisao = d.nrodivisao - AND z.seqproduto = c.seqproduto - AND e.nroempresa = c.nroempresa - AND y.seqproduto = z.seqproduto + cat.codcatn1, + cat.nomecatn1, + cat.codcatn2, + cat.nomecatn2, + cat.codcatn3, + cat.nomecatn3, + cat.codcatn4, + cat.nomecatn4, + cat.codcatn5, + cat.nomecatn5 + 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 - AND (z.vlrtotalvda > 0 OR z.vlrtotaldevol > 0) - AND seg1.nrodivisao = d.nrodivisao - AND h.seqfamilia = z.seqfamilia + 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 - AND d.seqfamilia = z.seqfamilia - AND d.nrodivisao IN (1) - AND dv.nrodivisao = d.nrodivisao - AND k.seqfamilia = h.seqfamilia + JOIN consinco.map_famembalagem k + ON k.seqfamilia = h.seqfamilia AND k.qtdembalagem = 1 - AND z.seqproduto = re.seqproduto(+) - AND z.dtaentradasaida = re.datafaturamento(+) - AND z.nroempresa = re.nroempresa(+) - AND g.nrodivisao = u.nrodivisao - AND g.nivelhierarquia = 1 - AND g.tipcategoria = 'M' - AND g.statuscategor != 'I' - AND u.seqfamilia = d.seqfamilia - AND u.nrodivisao = d.nrodivisao - AND u.seqcategoria = g.seqcategoria - AND u.status = 'A' - AND a.seqproduto = z.seqproduto + JOIN consinco.map_produto a + ON a.seqproduto = z.seqproduto AND a.seqfamilia = d.seqfamilia - GROUP BY dv.nrodivisao, seg1.nrosegmento, seg1.descsegmento, e.nroempresa, e.nomereduzido, - a.seqproduto, a.seqprodutobase, a.desccompleta, z.dtaentradasaida, - a.propqtdprodutobase, e.nrodivisao, a.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 INSTR(',' || p_divisao || ',', ',' || TO_CHAR(d.nrodivisao) || ',') > 0) + 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 INSTR(',' || p_cgos || ',', ',' || TO_CHAR(b.codgeraloper) || ',') > 0) + ) + GROUP BY dv.nrodivisao, + seg1.nrosegmento, + seg1.descsegmento, + e.nroempresa, + e.nomereduzido, + a.seqproduto, + a.seqprodutobase, + a.desccompleta, + z.dtaentradasaida, + a.propqtdprodutobase, + cat.codcatn1, + cat.nomecatn1, + cat.codcatn2, + cat.nomecatn2, + cat.codcatn3, + cat.nomecatn3, + cat.codcatn4, + cat.nomecatn4, + cat.codcatn5, + cat.nomecatn5 ) LOOP v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.empresa), r.nomeempresa, 1, r.empresa); diff --git a/migrations/C5/20260522000005_prc_flash_atualiza_venda_dono.sql b/migrations/C5/20260522000005_prc_flash_atualiza_venda_dono.sql deleted file mode 100644 index 84ce9e8..0000000 --- a/migrations/C5/20260522000005_prc_flash_atualiza_venda_dono.sql +++ /dev/null @@ -1,91 +0,0 @@ --- +goose Up --- +goose StatementBegin -CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA_DONO ( - p_data_inicial IN DATE, - p_data_final IN DATE, - p_empresa_ini IN NUMBER DEFAULT NULL, - p_empresa_fim IN NUMBER DEFAULT NULL -) AS - v_inicio_execucao DATE := SYSDATE; -BEGIN - DBMS_OUTPUT.PUT_LINE('Iniciando PRC_FLASH_ATUALIZA_VENDA_DONO em ' || TO_CHAR(v_inicio_execucao, 'DD/MM/YYYY HH24:MI:SS')); - DBMS_OUTPUT.PUT_LINE('Período: ' || TO_CHAR(p_data_inicial, 'DD/MM/YYYY') || ' até ' || TO_CHAR(p_data_final, 'DD/MM/YYYY')); - - FOR r IN ( - SELECT codigo - FROM vitruvio.vi_lojas - WHERE codigo NOT IN (301, 401, 500) - AND (p_empresa_ini IS NULL OR codigo >= p_empresa_ini) - AND (p_empresa_fim IS NULL OR codigo <= p_empresa_fim) - ORDER BY codigo - ) LOOP - BEGIN - DBMS_OUTPUT.PUT_LINE('Carregando venda da empresa: ' || r.codigo); - - PRC_FLASH_CARGA_DADOS_VENDA( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final, - p_empresa => r.codigo - ); - - EXCEPTION - WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE( - 'Erro ao carregar empresa ' || r.codigo || ': ' || SQLERRM - ); - RAISE; - END; - END LOOP; - - DBMS_OUTPUT.PUT_LINE('Carregando stage de metas de venda...'); - - PRC_FLASH_CARGA_META_VENDA_STG( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final - ); - - DBMS_OUTPUT.PUT_LINE('Carregando metas finais de venda...'); - - PRC_FLASH_CARGA_META_VENDA( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final - ); - - DBMS_OUTPUT.PUT_LINE('Atualizando resumo de venda...'); - - PRC_FLASH_CARGA_RESUMO_VENDA( - p_data_inicial => p_data_inicial, - p_data_final => p_data_final - ); - - DBMS_OUTPUT.PUT_LINE('PRC_FLASH_ATUALIZA_VENDA_DONO finalizada em ' || TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS')); - DBMS_OUTPUT.PUT_LINE('Tempo em segundos: ' || ROUND((SYSDATE - v_inicio_execucao) * 86400, 2)); - -EXCEPTION - WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE('Erro geral na PRC_FLASH_ATUALIZA_VENDA_DONO: ' || SQLERRM); - RAISE; -END; --- +goose StatementEnd --- +goose StatementBegin -DECLARE - v_count NUMBER; -BEGIN - SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_VENDA_DONO_DONO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO'; - IF v_count > 0 THEN - EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA_DONO_DONO'; - END IF; -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_ATUALIZA_VENDA_DONO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO'; - IF v_count > 0 THEN - EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA_DONO'; - END IF; -END; --- +goose StatementEnd diff --git a/migrations/C5/20260522000006_prc_flash_atualiza_venda_dono.sql b/migrations/C5/20260522000006_prc_flash_atualiza_venda_dono.sql index 4108c62..e663470 100644 --- a/migrations/C5/20260522000006_prc_flash_atualiza_venda_dono.sql +++ b/migrations/C5/20260522000006_prc_flash_atualiza_venda_dono.sql @@ -3,7 +3,9 @@ CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_VENDA_DONO ( p_data_inicial IN DATE, p_data_final IN DATE, - p_empresas IN VARCHAR2 DEFAULT NULL + p_empresas IN VARCHAR2 DEFAULT NULL, + p_divisao IN VARCHAR2 DEFAULT NULL, + p_cgos IN VARCHAR2 DEFAULT NULL ) AS v_inicio_execucao DATE := SYSDATE; BEGIN @@ -22,7 +24,9 @@ BEGIN PRC_FLASH_CARGA_DADOS_VENDA( p_data_inicial => p_data_inicial, p_data_final => p_data_final, - p_empresa => r.codigo + p_empresa => r.codigo, + p_divisao => p_divisao, + p_cgos => p_cgos ); EXCEPTION diff --git a/src/flash/flash.module.ts b/src/flash/flash.module.ts index 3a94e07..df05f3e 100644 --- a/src/flash/flash.module.ts +++ b/src/flash/flash.module.ts @@ -968,13 +968,15 @@ where 1 = 0`, C5: [ createSchedule({ name: "Procedure que atualiza os dados do flash", - params: ["empresas"], + params: ["empresas", "divisao", "cgos"], command: (args) => ({ sql: /*sql*/ `BEGIN PRC_FLASH_ATUALIZA_VENDA_DONO( p_data_inicial => TRUNC(SYSDATE) - 30, p_data_final => TRUNC(SYSDATE), - p_empresas => ${args.empresas} + p_empresas => ${args.empresas}, + p_divisao => ${args.divisao}, + p_cgos => ${args.cgos} ); END;`, }), @@ -985,14 +987,16 @@ where 1 = 0`, C5_big: [ createSchedule({ name: "Procedure que atualiza os dados do flash", - params: [], + params: ["divisao", "cgos"], command: (params) => ({ sql: /*sql*/ `BEGIN PRC_FLASH_ATUALIZA_VENDA_DONO( p_data_inicial => TRUNC(SYSDATE) - 30, p_data_final => TRUNC(SYSDATE), p_empresa_ini => 1, - p_empresa_fim => 10 + p_empresa_fim => 10, + p_divisao => ${params.divisao}, + p_cgos => ${params.cgos} ); END;`, }),