2 Commits

Author SHA1 Message Date
Jonathã Correa b468049cfb Adicionando sistema C5_mambo
davinTI/app-dono-modulos/pipeline/head This commit looks good
2026-04-22 14:46:09 -03:00
Jonathã Correa c81d631cf0 Ajuste na query de produto
davinTI/app-dono-modulos/pipeline/head There was a failure building this commit
2026-04-22 14:42:07 -03:00
15 changed files with 487 additions and 789 deletions
@@ -1,26 +0,0 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_SEQUENCES
WHERE SEQUENCE_NAME = 'SEQ_FLASH_PERDAS';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_FLASH_PERDAS
START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE';
END IF;
END;
-- +goose Down
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_SEQUENCES
WHERE SEQUENCE_NAME = 'SEQ_FLASH_PERDAS';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_FLASH_PERDAS';
END IF;
END;
@@ -1,52 +0,0 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TABLES
WHERE TABLE_NAME = 'TB_FLASH_PERDAS';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE TABLE TB_FLASH_PERDAS (
ID NUMBER NOT NULL
CONSTRAINT PK_FLASH_PERDAS PRIMARY KEY,
NUMERO_LOJA NUMBER(10) NOT NULL,
NOME_LOJA VARCHAR2(200) NOT NULL,
CODIGO_CATEGORIA_N1 VARCHAR2(50),
NOME_CATEGORIA_N1 VARCHAR2(200),
CODIGO_CATEGORIA_N2 VARCHAR2(50),
NOME_CATEGORIA_N2 VARCHAR2(200),
CODIGO_CATEGORIA_N3 VARCHAR2(50),
NOME_CATEGORIA_N3 VARCHAR2(200),
CODIGO_CATEGORIA_N4 VARCHAR2(50),
NOME_CATEGORIA_N4 VARCHAR2(200),
CODIGO_CATEGORIA_N5 VARCHAR2(50),
NOME_CATEGORIA_N5 VARCHAR2(200),
CODIGO_PRODUTO VARCHAR2(50),
NOME_PRODUTO VARCHAR2(400),
DATA_PERDA DATE NOT NULL,
ANO NUMBER(4) NOT NULL,
MES NUMBER(2) NOT NULL,
DIA NUMBER(2) NOT NULL,
DIA_SEMANA NUMBER(1),
VALOR_PERDA NUMBER(18,4),
CUSTO NUMBER(18,4),
QTD_PERDA NUMBER(10),
DATAINC DATE DEFAULT SYSDATE NOT NULL,
DATAALT DATE DEFAULT SYSDATE NOT NULL
)';
END IF;
END;
-- +goose Down
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TABLES
WHERE TABLE_NAME = 'TB_FLASH_PERDAS';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_PERDAS CASCADE CONSTRAINTS PURGE';
END IF;
END;
@@ -1,32 +0,0 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TRIGGERS
WHERE TRIGGER_NAME = 'TRG_FLASH_PERDAS_BI';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE OR REPLACE TRIGGER TRG_FLASH_PERDAS_BI
BEFORE INSERT ON TB_FLASH_PERDAS
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
:NEW.ID := SEQ_FLASH_PERDAS.NEXTVAL;
END IF;
END;';
END IF;
END;
-- +goose Down
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TRIGGERS
WHERE TRIGGER_NAME = 'TRG_FLASH_PERDAS_BI';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP TRIGGER TRG_FLASH_PERDAS_BI';
END IF;
END;
@@ -1,28 +0,0 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_INDEXES
WHERE INDEX_NAME = 'IDX_FLASH_PERDAS_01';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IDX_FLASH_PERDAS_01
ON TB_FLASH_PERDAS (NUMERO_LOJA, DATA_PERDA)';
END IF;
END;
/
-- +goose Down
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_INDEXES
WHERE INDEX_NAME = 'IDX_FLASH_PERDAS_01';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP INDEX IDX_FLASH_PERDAS_01';
END IF;
END;
/
@@ -1,25 +0,0 @@
-- +goose Up
BEGIN
EXECUTE IMMEDIATE 'COMMENT ON TABLE TB_FLASH_PERDAS IS ''Flash de perdas por loja, produto e data''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.ID IS ''Chave primária surrogate — populada via SEQ_FLASH_PERDAS''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.NUMERO_LOJA IS ''Código numérico da loja''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATA_PERDA IS ''Data do registro de perda''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.VALOR_PERDA IS ''Valor monetário da perda (4 casas decimais)''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.QTD_PERDA IS ''Quantidade perdida (inteiro)''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.CUSTO IS ''Custo unitário do produto no momento da perda''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATAINC IS ''Data/hora de inclusão do registro''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATAALT IS ''Data/hora da última alteração do registro''';
END;
-- +goose Down
BEGIN
EXECUTE IMMEDIATE 'COMMENT ON TABLE TB_FLASH_PERDAS IS ''''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.ID IS ''''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.NUMERO_LOJA IS ''''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATA_PERDA IS ''''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.VALOR_PERDA IS ''''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.QTD_PERDA IS ''''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.CUSTO IS ''''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATAINC IS ''''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATAALT IS ''''';
END;
@@ -1,300 +0,0 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE PRC_CARREGA_FLASH_PERDAS (
p_data_inicial IN DATE,
p_data_final IN DATE,
p_reprocessar IN VARCHAR2 DEFAULT 'S'
)
IS
BEGIN
IF p_reprocessar = 'S' THEN
DELETE FROM TB_FLASH_PERDAS
WHERE DATA_PERDA BETWEEN p_data_inicial AND p_data_final;
END IF;
INSERT INTO TB_FLASH_PERDAS (
ID,
NUMERO_LOJA,
NOME_LOJA,
CODIGO_CATEGORIA_N1,
NOME_CATEGORIA_N1,
CODIGO_CATEGORIA_N2,
NOME_CATEGORIA_N2,
CODIGO_CATEGORIA_N3,
NOME_CATEGORIA_N3,
CODIGO_CATEGORIA_N4,
NOME_CATEGORIA_N4,
CODIGO_CATEGORIA_N5,
NOME_CATEGORIA_N5,
CODIGO_PRODUTO,
NOME_PRODUTO,
DATA_PERDA,
ANO,
MES,
DIA,
DIA_SEMANA,
VALOR_PERDA,
CUSTO,
QTD_PERDA,
DATAINC,
DATAALT
)
WITH cat_base AS (
SELECT
pc.seqproduto,
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_produto pc
JOIN consinco.map_familia fc
ON fc.seqfamilia = pc.seqfamilia
JOIN consinco.map_famdivcateg dc
ON dc.seqfamilia = fc.seqfamilia
AND dc.nrodivisao = 1
AND dc.status = 'A'
JOIN consinco.map_categoria cc
ON cc.nrodivisao = dc.nrodivisao
AND cc.seqcategoria = dc.seqcategoria
AND cc.tipcategoria = 'M'
AND cc.statuscategor = 'A'
AND cc.nivelhierarquia BETWEEN 1 AND 5
GROUP BY pc.seqproduto
),
custo_base AS (
SELECT
cd.seqproduto,
cd.nroempresa,
cd.dtaentradasaida,
(cd.cmdiavlrnf
+ cd.cmdiaipi
+ cd.cmdiaicmsst
+ cd.cmdiadespnf
+ cd.cmdiadespforanf
- cd.cmdiacredicms
- cd.cmdiacredicmspresum
- cd.cmdiacredicmsantecip
- cd.cmdiacredpis
- cd.cmdiacredcofins
- cd.cmdiadctoforanf) AS custo_dia
FROM consinco.mrl_custodia cd
),
inner_query AS (
SELECT
e.nroempresa AS empresa,
e.nomereduzido AS nomeempresa,
cat.codcatn1,
cat.nomecatn1,
cat.codcatn2,
cat.nomecatn2,
cat.codcatn3,
cat.nomecatn3,
cat.codcatn4,
cat.nomecatn4,
cat.codcatn5,
cat.nomecatn5,
c.seqproduto AS cod_produto,
a.desccompleta AS descricao,
a.seqprodutobase,
vw.dtaentradasaida AS data_venda,
SUM(vw.vlrctoliquido) AS custo_liq_na_loja,
SUM(vw.valorlancto) AS perda,
SUM(vw.qtdlancto) AS qtde_perda_unit,
(
SUM((vw.qtdlancto / c3.qtdembalagem) * c3.precovalidnormal *
(e.pericmsestimativa + e.peroutroimposto + e.percpmf + e.perir +
DECODE(e.indfaturaiss, 'S', e.perciss, 0) +
DECODE(e.indfaturaipi || b.indcalcipisaida, 'SS', b.peraliquotaipi, 0)) / 100)
+ SUM((vw.qtdlancto / c3.qtdembalagem) * c3.precovalidnormal *
(t3.peraliquota * t3.pertributado / 100) / 100)
+ SUM((vw.qtdlancto / c3.qtdembalagem) * c3.precovalidnormal *
DECODE(b.indisentopis, 'S', 0,
DECODE(b.indisentodebpiscofins, 'S', 0, e.perpis)) / 100)
+ SUM((vw.qtdlancto / c3.qtdembalagem) * c3.precovalidnormal *
DECODE(b.indisentopis, 'S', 0,
DECODE(b.indisentodebpiscofins, 'S', 0, e.percofins)) / 100)
) AS vlrimpostovda,
CASE
WHEN cat.codcatn2 IN (15458, 18080)
AND cat.codcatn3 NOT IN (17696, 18007, 17182)
THEN
SUM(
vw.qtdlancto * (
SELECT cx.custo_dia
FROM custo_base cx
WHERE cx.seqproduto = COALESCE(a.seqprodutobase, c.seqproduto)
AND cx.nroempresa = 301
AND cx.dtaentradasaida = (
SELECT MAX(cx2.dtaentradasaida)
FROM custo_base cx2
WHERE cx2.seqproduto = cx.seqproduto
AND cx2.nroempresa = 301
AND cx2.dtaentradasaida <= vw.dtaentradasaida
)
)
)
ELSE SUM(vw.valorlancto)
END AS perda_novo
FROM
maxv_categoria gs,
map_famdivcateg us,
map_famdivcateg w,
map_famdivisao d,
max_empresa e,
max_divisao i2,
map_classifabc z2,
maxv_abcperdabase vw,
map_tributacaouf t3,
map_familia b,
mad_famsegmento h,
map_famembalagem k,
mrl_produtoempresa c,
mrl_prodempseg c3,
map_produto a,
mad_segmento se,
map_produto pr,
cat_base cat,
(
SELECT
a.seqproduto,
a.nroempresa,
SUM(a.estqloja) AS estqloja,
SUM(a.estqdeposito) AS estqdeposito,
SUM(a.estqtroca) AS estqtroca,
SUM(a.estqalmoxarifado) AS estqalmoxarifado,
SUM(a.estqoutro) AS estqoutro,
SUM(
NVL(a.cmultvlrdescpistransf, 0) +
NVL(a.cmultvlrdesccofinstransf, 0) +
NVL(a.cmultvlrdescicmstransf, 0) +
NVL(a.cmultvlrdescipitransf, 0) +
NVL(a.cmultvlrdesclucrotransf, 0) +
NVL(a.cmultvlrdescverbatransf, 0) +
NVL(a.cmultvlrdescdiferencatransf, 0)
) AS vlrdesctransfcb
FROM mrl_produtoempresa a
GROUP BY a.seqproduto, a.nroempresa
) sx,
(
SELECT MAX(dx.utilacresccustprodrelac) AS utilacresccustprodrelac
FROM max_divisao dx
JOIN max_empresa ex
ON ex.nrodivisao = dx.nrodivisao
) i3
WHERE
e.nroempresa = vw.nroempresa
AND e.nrodivisao = d.nrodivisao
AND h.seqfamilia = vw.seqfamilia
AND h.nrosegmento = e.nrosegmentoprinc
AND h.nrosegmento = se.nrosegmento
AND d.seqfamilia = vw.seqfamilia
AND d.nrodivisao IN (1)
AND b.seqfamilia = vw.seqfamilia
AND i2.nrodivisao = d.nrodivisao
AND z2.nrosegmento = h.nrosegmento
AND z2.classifcomercabc = h.classifcomercabc
AND k.seqfamilia = h.seqfamilia
AND a.seqproduto = c.seqproduto
AND k.qtdembalagem = h.padraoembvenda
AND c.seqproduto = vw.seqproduto
AND c.nroempresa = NVL(e.nroempcustoabc, e.nroempresa)
AND c3.nroempresa = vw.nroempresa
AND c3.seqproduto = vw.seqproduto
AND c3.nrosegmento = e.nrosegmentoprinc
AND c3.qtdembalagem = h.padraoembvenda
AND t3.nrotributacao = d.nrotributacao
AND t3.ufempresa = e.uf
AND t3.ufclientefornec = e.uf
AND t3.tiptributacao = DECODE(i2.tipdivisao, 'V', 'SN', 'SC')
AND t3.nroregtributacao = NVL(e.nroregtributacao, 0)
AND pr.seqproduto = vw.seqproduto
AND sx.seqproduto = vw.seqproduto
AND sx.nroempresa = vw.nroempresa
AND cat.seqproduto = vw.seqproduto
AND vw.dtaentradasaida BETWEEN p_data_inicial AND p_data_final
AND vw.nroempresa IN (
SELECT CODIGO
FROM VITRUVIO.vi_lojas
WHERE codigo NOT IN (301, 401, 500)
)
AND vw.tipclassinterno IN ('P', 'R', 'C', 'A')
AND vw.tiplancto IN ('S')
AND gs.nrodivisao = us.nrodivisao
AND gs.nivelhierarquia = 2
AND gs.tipcategoria = 'M'
AND gs.statuscategor != 'I'
AND us.seqfamilia = d.seqfamilia
AND us.nrodivisao = d.nrodivisao
AND us.seqcategoria = gs.seqcategoria
AND us.status = 'A'
AND w.seqfamilia = d.seqfamilia
AND w.nrodivisao = d.nrodivisao
AND w.status = 'A'
AND w.seqcategoria IN (14772, 15450)
GROUP BY
e.nroempresa,
e.nomereduzido,
gs.seqcategoria,
gs.caminhocompleto,
SUBSTR(e.nomereduzido || ' : ' || gs.caminhocompleto, 1, 250),
c.seqproduto,
a.seqprodutobase,
a.desccompleta,
vw.dtaentradasaida,
cat.codcatn1, cat.nomecatn1,
cat.codcatn2, cat.nomecatn2,
cat.codcatn3, cat.nomecatn3,
cat.codcatn4, cat.nomecatn4,
cat.codcatn5, cat.nomecatn5,
TO_NUMBER(NULL),
NULL
)
SELECT
SEQ_FLASH_PERDAS.NEXTVAL,
iq.empresa,
iq.nomeempresa,
TO_CHAR(iq.codcatn1),
iq.nomecatn1,
TO_CHAR(iq.codcatn2),
iq.nomecatn2,
TO_CHAR(iq.codcatn3),
iq.nomecatn3,
TO_CHAR(iq.codcatn4),
iq.nomecatn4,
TO_CHAR(iq.codcatn5),
iq.nomecatn5,
TO_CHAR(iq.cod_produto),
iq.descricao,
iq.data_venda,
EXTRACT(YEAR FROM iq.data_venda),
EXTRACT(MONTH FROM iq.data_venda),
EXTRACT(DAY FROM iq.data_venda),
(TRUNC(iq.data_venda) - TRUNC(iq.data_venda, 'IW') + 1),
iq.perda_novo,
iq.custo_liq_na_loja,
iq.qtde_perda_unit,
SYSDATE,
SYSDATE
FROM inner_query iq;
COMMIT;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
BEGIN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_CARREGA_FLASH_PERDAS';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -4043 THEN
RAISE;
END IF;
END;
-- +goose StatementEnd
@@ -1,26 +0,0 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_SEQUENCES
WHERE SEQUENCE_NAME = 'SEQ_FLASH_VENDAS';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_FLASH_VENDAS
START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE';
END IF;
END;
-- +goose Down
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TRIGGERS
WHERE TRIGGER_NAME = 'TRG_FLASH_VENDAS_BI';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP TRIGGER TRG_FLASH_VENDAS_BI';
END IF;
END;
@@ -1,26 +0,0 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_INDEXES
WHERE INDEX_NAME = 'IDX_FLASH_VENDAS_01';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IDX_FLASH_VENDAS_01
ON TB_FLASH_VENDAS (NUMERO_LOJA, DATA_VENDA)';
END IF;
END;
-- +goose Down
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_INDEXES
WHERE INDEX_NAME = 'IDX_FLASH_VENDAS_01';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP INDEX IDX_FLASH_VENDAS_01';
END IF;
END;
@@ -1,52 +0,0 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TABLES
WHERE TABLE_NAME = 'TB_FLASH_VENDAS';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE TABLE TB_FLASH_VENDAS (
ID NUMBER NOT NULL
CONSTRAINT PK_FLASH_VENDAS PRIMARY KEY,
NUMERO_LOJA NUMBER(10) NOT NULL,
NOME_LOJA VARCHAR2(200) NOT NULL,
CODIGO_CATEGORIA_N1 VARCHAR2(50),
NOME_CATEGORIA_N1 VARCHAR2(200),
CODIGO_CATEGORIA_N2 VARCHAR2(50),
NOME_CATEGORIA_N2 VARCHAR2(200),
CODIGO_CATEGORIA_N3 VARCHAR2(50),
NOME_CATEGORIA_N3 VARCHAR2(200),
CODIGO_CATEGORIA_N4 VARCHAR2(50),
NOME_CATEGORIA_N4 VARCHAR2(200),
CODIGO_CATEGORIA_N5 VARCHAR2(50),
NOME_CATEGORIA_N5 VARCHAR2(200),
CODIGO_PRODUTO VARCHAR2(50),
NOME_PRODUTO VARCHAR2(400),
DATA_VENDA DATE NOT NULL,
ANO NUMBER(4) NOT NULL,
MES NUMBER(2) NOT NULL,
DIA NUMBER(2) NOT NULL,
DIA_SEMANA NUMBER(1),
VALOR_VENDA NUMBER(18,4),
CUSTO NUMBER(18,4),
QTD_VENDA NUMBER(10),
DATAINC DATE DEFAULT SYSDATE NOT NULL,
DATAALT DATE DEFAULT SYSDATE NOT NULL
)';
END IF;
END;
-- +goose Down
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TABLES
WHERE TABLE_NAME = 'TB_FLASH_VENDAS';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_VENDAS CASCADE CONSTRAINTS PURGE';
END IF;
END;
@@ -1,32 +0,0 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TRIGGERS
WHERE TRIGGER_NAME = 'TRG_FLASH_VENDAS_BI';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE OR REPLACE TRIGGER TRG_FLASH_VENDAS_BI
BEFORE INSERT ON TB_FLASH_VENDAS
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
:NEW.ID := SEQ_FLASH_VENDAS.NEXTVAL;
END IF;
END;';
END IF;
END;
-- +goose Down
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TRIGGERS
WHERE TRIGGER_NAME = 'TRG_FLASH_VENDAS_BI';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP TRIGGER TRG_FLASH_VENDAS_BI';
END IF;
END;
@@ -1,16 +0,0 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_INDEXES
WHERE INDEX_NAME = 'IDX_FLASH_VENDAS_01';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IDX_FLASH_VENDAS_01
ON TB_FLASH_VENDAS (NUMERO_LOJA, DATA_VENDA)';
END IF;
END;
-- +goose Down
SELECT 'down SQL query';
@@ -1,15 +0,0 @@
-- +goose Up
BEGIN
EXECUTE IMMEDIATE 'COMMENT ON TABLE TB_FLASH_VENDAS IS ''Flash de vendas por loja, produto e data''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.ID IS ''Chave primária surrogate — populada via SEQ_FLASH_VENDAS''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.NUMERO_LOJA IS ''Código numérico da loja''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.DATA_VENDA IS ''Data do registro de venda''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.VALOR_VENDA IS ''Valor monetário da venda (4 casas decimais)''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.QTD_VENDA IS ''Quantidade vendida (inteiro)''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.CUSTO IS ''Custo unitário do produto no momento da venda''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.DATAINC IS ''Data/hora de inclusão do registro''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.DATAALT IS ''Data/hora da última alteração do registro''';
END;
-- +goose Down
SELECT 'down SQL query';
-9
View File
@@ -105,13 +105,4 @@ order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
}; };
}, },
}, },
}).withSchedules({
C5: [
{
command: 'exec procedure',
cron: 'expressao cron',
name: 'Teste identificador da query',
timeout_seconds: 30
}
]
}); });
-117
View File
@@ -1,117 +0,0 @@
import { createModuleFactory } from "@davinti/jeff";
const moduleFactory = createModuleFactory(["C5BIG"]);
export default moduleFactory
.createModule({
id: "flash-de-perdas",
description: "Flash de Perdas",
label: "Flash de Perdas",
icon: "bar-chart",
queries: {
flash: {
name: "Flash de Perdas",
display: {
type: "flash",
settings: {
group_column: "canalapp",
total_indicator_column: "is_total",
null_label_key: "Geral",
},
header: {
title_column: "canalapp",
value_column: "venda_dia",
value_format: "currency",
},
rows: [
{
label: "Meta Mês",
column: "meta_mes",
format: "currency_short",
},
{
label: "VDA",
column: "vda",
format: "currency_short",
},
{
label: "DMA",
column: "dma",
format: "currency_short",
},
{
label: "Meta Dia",
column: "meta_dia",
format: "currency_short",
},
{
label: "Meta Margem Dia",
column: "meta_margem_dia",
format: "percentage",
},
{
label: "Qtd Clientes",
column: "qtd_clientes",
format: "integer",
},
{
label: "Ticket Médio",
column: "ticket_medio",
format: "currency",
},
{
label: "Margem",
column: "margem",
format: "percentage",
accent: true,
},
],
},
params: ["data_venda"],
},
},
entrypoint: "flash",
})
.withImplementations({
C5BIG: {
flash: (args) => {
return {
sql: /*sql*/ `
select
tes.canalapp,
tes.nomeempresaapp,
grouping(tes.canalapp) is_total,
sum(tvf.vlrvendadia) venda_dia,
sum(tvf.vlrmetames) meta_mes,
sum(tvf.vlrvendaacumulada) vda,
sum(tvf.vlrvendaacumulada - tvf.vlrmetaaculumada) dma,
sum(tvf.vlrmetadia) meta_dia,
round(avg(tvf.vlrmetamargemdiaperc), 2) meta_margem_dia,
sum(tvf.qtdclientes) qtd_clientes,
round(sum(tvf.vlrvendadia) / nullif(sum(tvf.qtdclientes), 0), 2) as ticket_medio,
round((sum(tvf.vlrlucro) / nullif(sum(tvf.vlrvendadia), 0)) * 100, 2) as margem
from mboard.tb_venda_flash tvf
inner join mboard.tb_empresa_segmento tes
on tes.nroempresa = tvf.nroempresa
and tes.nrodivisao = tvf.nrodivisao
and tes.nrosegmento = tvf.nrosegmento
and tes.codcanal = tvf.codcanal
where 1=1
and tvf.vlrvendaacumulada > 0
and tvf.dtavda = TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
and (tvf.nroempresa in (${args.ctx_user_companies_for_module}))
group by rollup(canalapp, nomeempresaapp)
order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
};
},
},
}).withSchedules({
C5BIG: [
{
command: 'exec procedure',
cron: 'expressao cron',
name: 'Teste identificador da query',
timeout_seconds: 30
}
]
});
+487 -33
View File
@@ -1,6 +1,6 @@
import { createModuleFactory } from "@davinti/jeff"; import { createModuleFactory } from "@davinti/jeff";
const moduleFactory = createModuleFactory(["C5"]); const moduleFactory = createModuleFactory(["C5", "C5_mambo"]);
export default moduleFactory export default moduleFactory
.createModule({ .createModule({
@@ -475,42 +475,496 @@ export default moduleFactory
entrypoint: "consulta", entrypoint: "consulta",
}) })
.withImplementations({ .withImplementations({
C5_mambo: {
consulta: (args) => {
return {
sql: /*sql*/ `
SELECT CAST(P.SEQPRODUTO AS NUMERIC(15)) AS code,
P.DESCCOMPLETA AS title
FROM CONSINCO.MAP_PRODUTO P
WHERE 1 = 1
AND (
(
${args.filtro} IS NOT NULL
AND (
P.SEQPRODUTO LIKE '%' || ${args.filtro} || '%'
OR
UPPER(P.DESCCOMPLETA) LIKE UPPER('%' || ${args.filtro} || '%')
)
)
OR (
${args.ean} IS NOT NULL
AND EXISTS (
SELECT 1 FROM CONSINCO.MAP_PRODCODIGO A
WHERE A.SEQPRODUTO = p.SEQPRODUTO
AND ISNUMERIC(A.CODACESSO) = 'S'
AND A.CODACESSO = ${args.ean}
)
)
OR (
${args.filtro} IS NULL
AND
${args.ean} IS NULL
)
)
ORDER BY 2
`,
};
},
detalhe: (args) => {
return {
sql: /*sql*/ `
select /*+ FIRST_ROWS(10) */ pemp.nroempresa,
tcomp.comprador,
nvl(mff.fornecedor, 'N/A') fornecedor,
consinco.gmgbfcategoriafamilian1(pro.seqfamilia, me.nrodivisao, 1) categoria,
pro.seqproduto,
initcap(pro.desccompleta) Descricao,
nvl(mapi.urlecommerceimg,'') ImagemUrl,
case when trunc(case
when pes2.precovalidpromoc > 0.00 then nvl(pes2.precovalidpromoc,0)
when pes2.precovalidpromoc = 0.00 then nvl(pes2.precovalidnormal,0)
end / pes2.qtdembalagem,2) = 0 then
trunc(case
when pes.precovalidpromoc > 0.00 then nvl(pes.precovalidpromoc,0)
when pes.precovalidpromoc = 0.00 then nvl(pes.precovalidnormal,0)
end, 2)
else
trunc(case
when pes2.precovalidpromoc > 0.00 then nvl(pes2.precovalidpromoc,0)
when pes2.precovalidpromoc = 0.00 then nvl(pes2.precovalidnormal,0)
end / pes2.qtdembalagem,2)
end PrecoAtacado,
trunc(case
when pes.precovalidpromoc > 0.00 then nvl(pes.precovalidpromoc,0)
when pes.precovalidpromoc = 0.00 then nvl(pes.precovalidnormal,0)
end, 2) PrecoVarejo,
trunc(nvl(pemp.medvdiaforapromoc,0),4) MDV,
nvl(gmgb_fn_buscamargemproduto(pemp.nroempresa,pemp.seqproduto),0) Margem,
case
when trunc(case
when pes.precovalidpromoc > 0.00 then nvl(pes.precovalidpromoc,0)
when pes.precovalidpromoc = 0.00 then nvl(pes.precovalidnormal,0)
end, 2) = trunc(case
when pes2.precovalidpromoc > 0.00 then nvl(pes2.precovalidpromoc,0)
when pes2.precovalidpromoc = 0.00 then nvl(pes2.precovalidnormal,0)
end / pes2.qtdembalagem,2
) then nvl(gmgb_fn_buscamargemproduto(pemp.nroempresa,pemp.seqproduto),0)
else
nvl(CONSINCO.GMGB_FN_BUSCAMARGEMPRODUTO_AT2(pemp.nroempresa,pemp.seqproduto),0)
end MargemAtacado,
nvl(pemp.codclassifpreco,'Sem valor') ClasseAbastecimento,
emb.embalagem DescricaoEmbalagem,
trunc(nvl(emb.qtdembalagem,0)) QuantidadeEmbalagem,
case
when pemp.nroempresa in (979, 980, 981) then trunc(nvl(pemp.estqdeposito - pemp.qtdreservadavda,0),3)
else trunc(nvl(pemp.estqloja,0), 3) - (NVL(pemp.qtdreservadavda,0))
end EstoqueDisponivel,
NVL(pemp.estqtroca,0) EstoqueTroca,
NVL(pemp.qtdpedrectransito,0) EstoqueTransito,
pemp.qtdpendpedcompra EstoqueFuturo,
NVL(pemp.qtdreservadavda,0) + nvl(pemp.estqoutro,0) EstoqueReservado, --24/05/2024 - cfreitas - Includo estqoutro para no ser necessrio utilizar MADV_COMPOSICAORESERVASELINV
ROUND(nvl(case
when NVL(pemp.medvdiaforapromoc, 0) = 0 then 0
when NVL(pemp.medvdiaforapromoc,0) > 0 then (nvl(case when me.nroempresa in (979, 980, 981) then trunc(nvl(pemp.estqdeposito,0), 3) else trunc(nvl(pemp.estqloja,0), 3) end,0) - NVL(pemp.qtdreservadavda,0) ) / trunc(nvl(pemp.medvdiaforapromoc,1),4)
end, 0), 3) DDV,
nvl(pemp.estqminimodv,0) DDVMinimo,
nvl(pemp.estqmaximodv, 0) DDVMaximo,
case
WHEN (select count(1) from mlo_prodembwm w where w.nroempresa = 979 and w.seqproduto = pemp.seqproduto and w.codlinhasepar = 'FR') > 0 THEN 'FRACIONADO'
when pemp.formaabastecimento = 'I' then 'ARMAZENAGEM'
when pemp.formaabastecimento = 'C' then 'CROSS'
when pemp.formaabastecimento = 'N' then 'CENTRAL-EDL'
when pemp.formaabastecimento = 'E' then 'LOJA-EDL'
when pemp.formaabastecimento is null then gmgb_fn_busca_forma_abastecfam(pro.seqfamilia, md.nrodivisao)
end FormaAbastecimento,
case
when pes.precovalidpromoc > 0.00 then 'PROMOCAO'
when pes.precovalidpromoc = 0.00 then 'NORMAL'
end Situacao,
pempcd.estqdeposito - nvl(pempcd.qtdreservadavda,0) EstoqueDisponivelCD,
pempcd.qtdpendpedcompra EstoqueFuturoCD,
consinco.gmgb_fn_busca_dtult_entrada(pemp.nroempresa,pemp.seqproduto) DATAULTIMAENTRADA,
pemp.dtaultvenda DATAULTIMAVENDA,
consinco.fmrl_custoprodempatual(pro.seqproduto, pemp.nroempresa, 'L') custoliquido,
CASE WHEN (select count(*) from mrl_prodempseg pest where pest.seqproduto = pemp.seqproduto and pest.nroempresa = pemp.nroempresa and pest.nrosegmento = seg.nrosegmento and pest.statusvenda = 'A' ) > 0 then 'A' ELSE 'I' end STATUSVENDA,
--case when (pemp.statuscompra='A') then 1 else 0 end STATUSCOMPRA,
pemp.statuscompra,
nvl((select min(qtdembalagem) from mrl_prodempseg where nroempresa=me.nroempresa and nrosegmento=me.nrosegmentoprinc and seqproduto=pro.seqproduto and statusvenda='A' and qtdembalagem>1), 1) QtdeAtacado,
nvl(pro.seqprodutobase,0) IdBase,
case
when mfdv.indnegavariacentral = 'S' THEN 'TROCA FISICA'
ELSE
case when mff.indindenizavaria = 'S' then
case when (me.nroempresa >= 400 and me.nroempresa <=499) or (me.nroempresa >= 600 and me.nroempresa <= 699) then
'SEM TROCA'
else
'TROCA FINANC'
end
when mff.indindenizavaria = 'N' then
'NF DEVOL'
else
'SEM TROCA'
end
END TIPOTROCA,
mfdv.padraoembcompra QUANTIDADECOMPRA,
pemp.qtdreservadavda RESERVA,
NVL(pro.pzovalidadedia, 0) VALIDADEDIAS,
mfdv.margemlucrodivisao,
nvl(pes.precovalidpromoc,0) PrecoPromoc,
nvl(pes.precovalidnormal,0) PrecoNormal,
nvl(pes3.precovalidpromoc,0) PrecoMeuMambo,
case when pes3.precovalidpromoc > 0 then
nvl(consinco.mbo_fn_buscamargemprodutoseg(pemp.nroempresa,pemp.seqproduto,15),0)
else
0
end MargemMeuMambo,
nvl(consinco.mbo_fn_buscamargemprodutoseg(pemp.nroempresa,pemp.seqproduto,2,'S'),0) MargemNormal,
trunc(nvl(pemp.medvdiapromoc,0),4) MdvPromoc,
NVL(vncto.vlrprecovenctoprox,0) VLRPRECOVENCTOPROX,
vncto.dtavalidade
from max_divisao md
inner join max_empresa me
on me.nrodivisao = md.nrodivisao
and me.nroempresa not in (104,200,291,298,910,911,920,930,931,940,980)
and me.dtainiciomovestoque <= trunc(sysdate)
and me.status = 'A'
inner join mad_segmento seg
on md.nrodivisao = me.nrodivisao
and me.nrosegmentoprinc = seg.nrosegmento
inner join mrl_produtoempresa pemp
on pemp.nroempresa = me.nroempresa
left join mrl_produtoempresa pempcd
on pempcd.seqproduto = pemp.seqproduto
and pempcd.nroempresa in (979)
left join map_classeabastec mcab
on mcab.classeabastqtd = pemp.classeabastqtd
and mcab.nroempresa = pemp.nroempresa
and mcab.classeabastvlr = pemp.classeabastvlr
inner join map_produto pro
on pro.seqproduto = pemp.seqproduto
inner join map_famdivisao mfdv
on mfdv.seqfamilia = pro.seqfamilia
and mfdv.nrodivisao = me.nrodivisao
inner join max_comprador mco
on mco.seqcomprador = mfdv.seqcomprador
left join tb_comprador tcomp
on tcomp.COMPRADOR = mco.comprador
left join map_produtoimagem mapi
on mapi.seqproduto = pro.seqproduto
and mapi.indpricipal = 'S'
inner join mrl_prodempseg pes
on pes.seqproduto = pemp.seqproduto
and pes.nroempresa = pemp.nroempresa
and pes.nrosegmento = seg.nrosegmento
and pes.qtdembalagem = 1
inner join mrl_prodempseg pes2
on pes2.nroempresa = pes.nroempresa
and pes2.seqproduto = pes.seqproduto
and pes2.nrosegmento = pes.nrosegmento
left join mrl_prodempseg pes3
on pes3.seqproduto = pemp.seqproduto
and pes3.nroempresa = pemp.nroempresa
and pes3.nrosegmento = 15
and pes3.qtdembalagem = 1
inner join map_famembalagem emb
on emb.seqfamilia = pro.seqfamilia
and emb.qtdembalagem = 1
left join (select mffTemp.Seqfamilia,
mfdvTemp.Nrodivisao,
mffTemp.indindenizavaria,
mfdvTemp.pzomedvisitarep,
mfdvTemp.pzomedentrega,
mfdvTemp.pzomedatraso,
gp.fantasia fornecedor
from map_famfornec mffTemp
inner join ge_pessoa gp
on gp.seqpessoa = mffTemp.Seqfornecedor
left join maf_fornecdivisao mfdvTemp
on mfdvTemp.Seqfornecedor = mffTemp.Seqfornecedor
and mffTemp.Principal = 'S'
) mff
on mff.seqfamilia = pro.seqfamilia
and mff.nrodivisao = md.nrodivisao
left join (select pvencto.nroempresa,
pvencto.seqproduto,
min(pvencto.vlrpreco) vlrprecovenctoprox,
min(pvencto.dtavalidade) dtavalidade
from consinco.mrl_prodempvencimento pvencto
where 1=1
and pvencto.dtavalidade >= trunc(sysdate)
and pvencto.qtdembalagem = 1
group by pvencto.nroempresa,
pvencto.seqproduto
) vncto
ON vncto.nroempresa = pemp.nroempresa
and vncto.seqproduto = pemp.seqproduto
where 1=1
--and pemp.SEQPRODUTO = 136011
--and pemp.nroempresa = 202
and md.nrodivisao in (2,4)
and pemp.seqproduto = ${args.codproduto}
and me.nroempresa in (${args.ctx_user_companies_for_module})
and pes2.qtdembalagem = (select nvl(max(pes3.qtdembalagem), 1)
from mrl_prodempseg pes3
where pes3.nroempresa = pes.nroempresa
and pes3.seqproduto = pes.seqproduto
and pes3.nrosegmento = pes.nrosegmento
and pes3.statusvenda = 'A')
`,
};
},
detalhe_preco: (args) => {
return {
sql: /*sql*/ `
select ora_hash(mgmp.SEQPRODUTO||mgmp.NROEMPRESA||mgmp.QTDEMBALAGEM||mgmp.NROSEGMENTO) chave,
mgmp.SEQPRODUTO,
mgmp.NROEMPRESA,
mgmp.NROSEGMENTO,
mgmp.QTDEMBALAGEM || ' ' || mgmp.EMBVENDA embalagem,
mgmp.PRECOVALIDNORMAL preco_embalagem,
mgmp.PRECOVALIDNORMAL / mgmp.QTDEMBALAGEM preco_unidade,
trunc(mgmp.MGMPRECOVALIDO,2) margem
from maxv_mgmbaseprodseg mgmp
inner join max_empresa me
on me.nroempresa = mgmp.NROEMPRESA
and me.status = 'A'
and me.dtainiciomovestoque <= trunc(sysdate)-1
and me.nrodivisao in (2,4)
and me.nroempresa not in (291,298,910,911,920,930,931,940,980)
AND mgmp.NROSEGMENTO IN (2,7)
where 1=1
and mgmp.seqproduto = ${args.codproduto}
and mgmp.nroempresa = ${args.nrempresa}
AND mgmp.NROSEGMENTO NOT IN (22,23,26)
and mgmp.STATUSVENDA = 'A'
`,
};
},
detalhe_mdv: (args) => {
return {
sql: /*sql*/ `
select mcdia.dtaentradasaida data,
mcdia.nroempresa,
mcdia.seqproduto,
Decode(to_char(mcdia.dtaentradasaida,'d'),1,'Domingo',2,'Segunda',3,'Terça',4,'Quarta',5,'Quinta',6,'Sexta',7,'Sábado') diasemana,
mcdia.qtdvda qtd,
mcdia.qtdestqinicial qtd_inicial
from mrl_custodia mcdia
inner join max_empresa me
on mcdia.nroempresa = me.nroempresa
where 1=1
and mcdia.qtdvda > 0
and mcdia.dtaentradasaida >= trunc(sysdate)-365
AND mcdia.nroempresa = ${args.nrempresa}
AND mcdia.seqproduto = ${args.codproduto}
order by dtaentradasaida desc
`,
};
},
detalhe_situacao_vigente: (args) => {
return {
sql: /*sql*/ `
select mrl_prodempseg.nroempresa,
mrl_prodempseg.seqproduto,
mrl_promocao.dtainicio,
mrl_promocao.dtafim,
mfe.qtdembalagem || ' ' || mfe.embalagem embalagem,
mrl_promocaoitem.precopromocional preco
from mrl_promocaoitem, mrl_promocao, mrl_prodempseg,
map_produto mp, map_famembalagem mfe, max_empresa me
where 1=1
and me.nroempresa = mrl_promocao.nroempresa
and me.status = 'A'
and me.nrodivisao = 2
and me.dtainiciomovestoque <= trunc(sysdate)-1
and mrl_promocao.nroempresa = mrl_promocaoitem.nroempresa
and mrl_promocao.seqpromocao = mrl_promocaoitem.seqpromocao
and mrl_promocao.centralloja = mrl_promocaoitem.centralloja
and mrl_promocao.nrosegmento = mrl_promocaoitem.nrosegmento
and mrl_promocaoitem.seqproduto = mrl_prodempseg.seqproduto
and mrl_promocao.nrosegmento = mrl_prodempseg.nrosegmento
and mrl_promocao.nroempresa = mrl_prodempseg.nroempresa
and mrl_promocaoitem.qtdembalagem = mrl_prodempseg.qtdembalagem
and mp.seqproduto = mrl_prodempseg.seqproduto
and mfe.seqfamilia = mp.seqfamilia
and mfe.qtdembalagem = mrl_prodempseg.qtdembalagem
and nvl(mrl_promocao.tipopromoc, 'N') in ('N', 'F', 'A', 'S')
and mrl_promocao.dtainicio >= trunc(sysdate)-90--365
AND mrl_prodempseg.nroempresa = ${args.nrempresa}
AND mrl_prodempseg.seqproduto = ${args.codproduto}
order by mrl_promocao.dtainicio desc
`,
};
},
detalhe_custo_liquido: (args) => {
return {
sql: /*sql*/ `
select mcdiafam.dtaentradasaida,
mcdiafam.nroempresa,
PROD.SEQPRODUTO,
mcdiafam.seqfamilia,
mcdiafam.qtdestqinicial estqinicial,
qtdestqinicial + qtdentrada - qtdsaida estqfinal,
--trunc(cmdiavlrnf,2) custo
cmdiavlrnf custo
from mrl_custodiafam mcdiafam
INNER JOIN MAP_PRODUTO PROD
ON PROD.SEQFAMILIA = MCDIAFAM.SEQFAMILIA
inner join max_empresa me
on me.nroempresa = mcdiafam.nroempresa
and me.status = 'A'
and me.dtainiciomovestoque <= trunc(sysdate)-1
and me.nrodivisao in (2,4)
where 1=1
and mcdiafam.dtaentradasaida >= trunc(sysdate)-365
AND mcdiafam.nroempresa = ${args.nrempresa}
AND PROD.SEQPRODUTO = ${args.codproduto}
order by mcdiafam.dtaentradasaida desc
`,
};
},
detalhe_estoque_disponivel: (args) => {
return {
sql: /*sql*/ `
select
cdia.dtaentradasaida,
cdia.nroempresa,
cdia.seqproduto,
cdia.qtdentrada,
cdia.qtdsaida,
cdia.qtdestqinicial + cdia.qtdentrada - cdia.qtdsaida qtdsaldo
from mrl_custodia cdia
join max_empresa me
on me.nroempresa = cdia.nroempresa
and me.status = 'A'
and me.dtainiciomovestoque < trunc(sysdate)
and me.nrodivisao = 2
where cdia.dtaentradasaida >= sysdate - 365
and cdia.seqproduto = ${args.codproduto}
and cdia.nroempresa = ${args.nrempresa}
union all
select
mle.dtaentradasaida,
mle.nroempresa,
mle.seqproduto,
sum(case when mle.tiplancto = 'E' then mle.qtdlancto else 0 end) qtdentrada,
sum(case when mle.tiplancto = 'S' then mle.qtdlancto else 0 end) qtdsaida,
cdia.qtdestqinicial
+ sum(case when mle.tiplancto = 'E' then mle.qtdlancto else 0 end)
- sum(case when mle.tiplancto = 'S' then mle.qtdlancto else 0 end) qtdsaldo
from mrl_lanctoestoque mle
join max_empresa me
on me.nroempresa = mle.nroempresa
and me.status = 'A'
and me.dtainiciomovestoque < trunc(sysdate)
and me.nrodivisao = 4
join mrl_custodia cdia
on cdia.dtaentradasaida = mle.dtaentradasaida
and cdia.nroempresa = mle.nroempresa
and cdia.seqproduto = mle.seqproduto
where mle.dtaentradasaida >= sysdate - 365
and mle.codgeraloper not in (301,302)
and mle.seqproduto = ${args.codproduto}
and mle.nroempresa = ${args.nrempresa}
group by
mle.dtaentradasaida,
mle.nroempresa,
mle.seqproduto,
cdia.qtdestqinicial
order by dtaentradasaida desc
`,
};
},
detalhe_estoque_transito: (args) => {
return {
sql: /*sql*/ `
SELECT
a.nroempresa,
b.seqproduto,
INITCAP(C.NOMERAZAO) FORNECEDOR,
A.NUMERONF,
A.SERIENF,
A.DTAEMISSAO,
A.DTAENTRADA,
B.QUANTIDADE,
B.VLRITEM VALOR
from MLF_AUXNOTAFISCAL A, MLF_AUXNFITEM B, GE_PESSOA C, MAP_PRODUTO D
WHERE 1=1
and B.SEQAUXNOTAFISCAL = A.SEQAUXNOTAFISCAL
AND C.SEQPESSOA = A.SEQPESSOA
AND D.SEQPRODUTO = B.SEQPRODUTO
AND A.DTAEMISSAO >= SYSDATE-365
AND a.nroempresa = ${args.nrempresa}
AND b.seqproduto = ${args.codproduto}
order by A.DTAEMISSAO, A.NUMERONF, A.SERIENF
`,
};
},
},
C5: { C5: {
consulta: (args) => { consulta: (args) => {
return { return {
sql: /*sql*/ ` sql: /*sql*/ `
SELECT SELECT CAST(P.SEQPRODUTO AS NUMERIC(15)) AS code,
CAST(p.SEQPRODUTO AS NUMERIC(15)) AS code, P.DESCCOMPLETA AS title
p.DESCCOMPLETA AS title FROM CONSINCO.MAP_PRODUTO P
FROM WHERE 1 = 1
DIN_ABASTECIMENTO_PRODUTOS p AND (
WHERE (
1 = 1 ${args.filtro} IS NOT NULL
AND ( AND (
( P.SEQPRODUTO LIKE '%' || ${args.filtro} || '%'
${args.filtro} IS NOT NULL OR
AND ( UPPER(P.DESCCOMPLETA) LIKE UPPER('%' || ${args.filtro} || '%')
p.SEQPRODUTO LIKE '%' || ${args.filtro} || '%' )
OR UPPER(p.DESCCOMPLETA) LIKE UPPER('%' || ${args.filtro} || '%') )
) OR (
) ${args.ean} IS NOT NULL
OR ( AND EXISTS (
${args.ean} IS NOT NULL SELECT 1 FROM CONSINCO.MAP_PRODCODIGO A
AND EXISTS ( WHERE A.SEQPRODUTO = p.SEQPRODUTO
SELECT 1 AND ISNUMERIC(A.CODACESSO) = 'S'
FROM CONSINCO.MAP_PRODCODIGO A AND A.CODACESSO = ${args.ean}
WHERE A.SEQPRODUTO = p.SEQPRODUTO )
AND ISNUMERIC(A.CODACESSO) = 'S' )
AND A.CODACESSO = ${args.ean} OR (
) ${args.filtro} IS NULL
) AND
OR ( ${args.ean} IS NULL
${args.filtro} IS NULL )
AND ${args.ean} IS NULL )
) ORDER BY 2
)
ORDER BY
2
`, `,
}; };
}, },