Compare commits
31 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9f6201f0af | |||
| 137ebdece2 | |||
| bbc52c8cd1 | |||
| f3497dbff3 | |||
| 02ce1fdf01 | |||
| 005be96d2b | |||
| 26f673f4e9 | |||
| 96caf54474 | |||
| 088f13d9a1 | |||
| d6414c9219 | |||
| 9aff600d75 | |||
| 0b9d03dffb | |||
| 24a40126de | |||
| 662d44c137 | |||
| d8c592bb70 | |||
| 81c1bf9dc0 | |||
| 7d15179fc8 | |||
| 17141b7e76 | |||
| ae847b96d7 | |||
| 55d3c84cf3 | |||
| 1b965e293f | |||
| 9318e734a5 | |||
| 74bf1abad8 | |||
| bac2c74190 | |||
| 3f0383a7b2 | |||
| 90af924221 | |||
| 49eca1605a | |||
| 9a894998bf | |||
| cf1f4dcde3 | |||
| 28bba63131 | |||
| c7cd22c343 |
Vendored
+73
@@ -0,0 +1,73 @@
|
|||||||
|
pipeline {
|
||||||
|
agent {
|
||||||
|
docker {
|
||||||
|
image 'hub.davinti.com.br:443/infra/node:latest'
|
||||||
|
args '-u 1001:1001 --rm --entrypoint="" -e HOME=${WORKSPACE}'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
environment {
|
||||||
|
S3_BUCKET = "s3://app-dono-manifests"
|
||||||
|
GIT_TOKEN = credentials('gitea-pat')
|
||||||
|
}
|
||||||
|
|
||||||
|
stages {
|
||||||
|
stage('Install') {
|
||||||
|
|
||||||
|
steps {
|
||||||
|
sh """
|
||||||
|
# Create a .netrc file so Git can find the PAT for your Gitea domain
|
||||||
|
echo "machine git.davinti.com.br" > ~/.netrc
|
||||||
|
echo "login jenkins" >> ~/.netrc
|
||||||
|
echo "password ${GIT_TOKEN}" >> ~/.netrc
|
||||||
|
chmod 600 ~/.netrc
|
||||||
|
|
||||||
|
npm install
|
||||||
|
"""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Vet') {
|
||||||
|
steps {
|
||||||
|
echo 'Validating modules (Standard for all branches)...'
|
||||||
|
sh 'npx jeff vet -i "src/**/*.module.ts" --strict'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Generate & Upload') {
|
||||||
|
when {
|
||||||
|
branch 'main'
|
||||||
|
}
|
||||||
|
steps {
|
||||||
|
echo 'Generating manifest and deploying to S3...'
|
||||||
|
sh 'npm run generate:output'
|
||||||
|
|
||||||
|
sh 'tar -czvf migrations.tar.gz -C migrations/ .'
|
||||||
|
|
||||||
|
withAWS(credentials: 'aws-jeff-credentials-id', region: 'sa-east-1') {
|
||||||
|
script {
|
||||||
|
echo "Uploading to S3..."
|
||||||
|
sh "aws s3 cp dist/manifest.json ${S3_BUCKET}/manifest.json"
|
||||||
|
sh "aws s3 cp migrations.tar.gz ${S3_BUCKET}/migrations.tar.gz"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
post {
|
||||||
|
always {
|
||||||
|
sh 'rm -rf *'
|
||||||
|
script {
|
||||||
|
deleteDir()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
success {
|
||||||
|
echo "✨ Manifest successfully uploaded to S3!"
|
||||||
|
}
|
||||||
|
failure {
|
||||||
|
echo "❌ Build failed. Check the logs for Jeff's validation errors."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
-- +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;
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
-- +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;
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
-- +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;
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
-- +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;
|
||||||
|
/
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
-- +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;
|
||||||
@@ -0,0 +1,300 @@
|
|||||||
|
-- +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
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
-- +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;
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
-- +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;
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
-- +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;
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
-- +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;
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
-- +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';
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
-- +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';
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# Migrations
|
||||||
|
|
||||||
|
Este projeto utiliza [pressly/goose](https://github.com/pressly/goose) para
|
||||||
|
gerenciamento de migrações de banco de dados. Cada ERP possui seu próprio set de
|
||||||
|
migrations. Por exemplo, `migrations/C5/*.sql`, `migrations/SENIOR/*.sql`...
|
||||||
|
|
||||||
|
## Instalação
|
||||||
|
|
||||||
|
```bash
|
||||||
|
go install github.com/pressly/goose/v3/cmd/goose@latest
|
||||||
|
```
|
||||||
|
|
||||||
|
## Criando uma migração
|
||||||
|
|
||||||
|
```bash
|
||||||
|
goose -dir migrations/<ERP> create nome_da_migracao sql
|
||||||
|
```
|
||||||
|
|
||||||
|
Isso gera um arquivo com timestamp no formato
|
||||||
|
`YYYYMMDDHHMMSS_nome_da_migracao.sql` contendo seções `-- +goose Up` e `--
|
||||||
|
+goose Down`.
|
||||||
|
|
||||||
|
## Boas práticas
|
||||||
|
|
||||||
|
- **Sempre escreva a migração `Down`**: garante que a migração possa ser
|
||||||
|
revertida com segurança.
|
||||||
|
- **Uma mudança por migração**: mantenha cada arquivo focado em uma única
|
||||||
|
alteração (criar tabela, adicionar coluna, etc.).
|
||||||
|
- **Migrações devem ser idempotentes quando possível**: use `IF NOT EXISTS` /
|
||||||
|
`IF EXISTS` para evitar falhas em re-execução.
|
||||||
|
- **Nunca altere uma migração já aplicada**: se algo precisa ser corrigido, crie
|
||||||
|
uma nova migração.
|
||||||
|
- **Evite migrações destrutivas em produção**: prefira adicionar colunas
|
||||||
|
nullable e remover as antigas em uma migração posterior, em vez de renomear ou
|
||||||
|
deletar diretamente.
|
||||||
|
- **Teste localmente antes de aplicar**: rode `up` e `down` no ambiente local
|
||||||
|
para verificar que ambas as direções funcionam.
|
||||||
Generated
+3
-3
@@ -9,15 +9,15 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@davinti/jeff": "git+https://git.davinti.com.br/davinTI/jeff.git#v1.0.5"
|
"@davinti/jeff": "git+https://git.davinti.com.br/davinTI/jeff.git#v1.0.8"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"tsx": "^4.21.0"
|
"tsx": "^4.21.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@davinti/jeff": {
|
"node_modules/@davinti/jeff": {
|
||||||
"version": "1.0.5",
|
"version": "1.0.8",
|
||||||
"resolved": "git+https://git.davinti.com.br/davinTI/jeff.git#de72040736f1459809722c87d602185ae470fb76",
|
"resolved": "git+https://git.davinti.com.br/davinTI/jeff.git#aa32d9bc6e5ab4b6a4c5f2748fa68e4bfdd2b4e2",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/glob": "^8.1.0",
|
"@types/glob": "^8.1.0",
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@
|
|||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"description": "",
|
"description": "",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@davinti/jeff": "git+https://git.davinti.com.br/davinTI/jeff.git#v1.0.5"
|
"@davinti/jeff": "git+https://git.davinti.com.br/davinTI/jeff.git#v1.0.8"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"tsx": "^4.21.0"
|
"tsx": "^4.21.0"
|
||||||
|
|||||||
@@ -99,9 +99,19 @@ inner join mboard.tb_empresa_segmento tes
|
|||||||
where 1=1
|
where 1=1
|
||||||
and tvf.vlrvendaacumulada > 0
|
and tvf.vlrvendaacumulada > 0
|
||||||
and tvf.dtavda = TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
|
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)
|
group by rollup(canalapp, nomeempresaapp)
|
||||||
order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
|
order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
}).withSchedules({
|
||||||
|
C5: [
|
||||||
|
{
|
||||||
|
command: 'exec procedure',
|
||||||
|
cron: 'expressao cron',
|
||||||
|
name: 'Teste identificador da query',
|
||||||
|
timeout_seconds: 30
|
||||||
|
}
|
||||||
|
]
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -0,0 +1,117 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
+898
-33
@@ -14,14 +14,462 @@ export default moduleFactory
|
|||||||
display: {
|
display: {
|
||||||
type: "list",
|
type: "list",
|
||||||
search_bar: {
|
search_bar: {
|
||||||
placeholder: "Digite o nome do produto",
|
placeholder: "Digite o nome, código ou EAN do produto",
|
||||||
},
|
},
|
||||||
rows: {
|
rows: {
|
||||||
title: "title",
|
title: "title",
|
||||||
code: "code",
|
code: "code",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
params: ["nome_produto"],
|
params: ["filtro", "ean"],
|
||||||
|
},
|
||||||
|
detalhe: {
|
||||||
|
name: "Detalhes do Produto",
|
||||||
|
display: {
|
||||||
|
type: "detail",
|
||||||
|
stores: [
|
||||||
|
{
|
||||||
|
store_id: "idempresa",
|
||||||
|
store_name: "nomeempresa",
|
||||||
|
category: "categoria",
|
||||||
|
last_entry: "dataultimaentrada",
|
||||||
|
last_sale: "dataultimavenda",
|
||||||
|
sections: [
|
||||||
|
{
|
||||||
|
label: "Preço Atacado",
|
||||||
|
column: "precoatacado",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Preço Varejo",
|
||||||
|
column: "precovarejo",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "MDV",
|
||||||
|
column: "mdv",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Margem",
|
||||||
|
column: "margem",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Margem Atacado",
|
||||||
|
column: "margematacado",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Classe Abastecimento",
|
||||||
|
column: "classeabastecimento",
|
||||||
|
format: "string",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Descrição Embalagem",
|
||||||
|
column: "descricaoembalagem",
|
||||||
|
format: "string",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Quantidade Embalagem",
|
||||||
|
column: "quantidadeembalagem",
|
||||||
|
format: "number",
|
||||||
|
entrypoint: "detalhe_preco_embalagem",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Estoque Disponível",
|
||||||
|
column: "estoqueDisponivel",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Estoque Troca",
|
||||||
|
column: "estoquetroca",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Estoque Trânsito",
|
||||||
|
column: "estoquetransito",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Estoque Futuro",
|
||||||
|
column: "estoquefuturo",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Estoque Reservado",
|
||||||
|
column: "estoquereservado",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "DDV",
|
||||||
|
column: "ddv",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "DDV Mínimo",
|
||||||
|
column: "ddvminimo",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "DDV Máximo",
|
||||||
|
column: "ddvmaximo",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Forma Abastecimento",
|
||||||
|
column: "formaabastecimento",
|
||||||
|
format: "string",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Situação",
|
||||||
|
column: "situacao",
|
||||||
|
format: "string",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Estoque Disponível CD",
|
||||||
|
column: "estoquedisponivelcd",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Estoque Futuro CD",
|
||||||
|
column: "estoquefuturocd",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Custo Líquido",
|
||||||
|
column: "custoliquido",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Status Venda",
|
||||||
|
column: "statusvenda",
|
||||||
|
format: "string",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Status Compra",
|
||||||
|
column: "statuscompra",
|
||||||
|
format: "string",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Qtde Atacado",
|
||||||
|
column: "qtdeatacado",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "ID Base",
|
||||||
|
column: "idbase",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Tipo Troca",
|
||||||
|
column: "tipotroca",
|
||||||
|
format: "string",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Quantidade Compra",
|
||||||
|
column: "quantidadecompra",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Reserva",
|
||||||
|
column: "reserva",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Validade Dias",
|
||||||
|
column: "validadedias",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Margem Lucro Divisão",
|
||||||
|
column: "margemlucrodivisao",
|
||||||
|
format: "percentage",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Preço Promoção",
|
||||||
|
column: "precopromoc",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Preço Normal",
|
||||||
|
column: "preconormal",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Preço Meu Mambo",
|
||||||
|
column: "precomeuMambo",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Margem Meu Mambo",
|
||||||
|
column: "margemmeuMambo",
|
||||||
|
format: "percentage",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Margem Normal",
|
||||||
|
column: "margemnormal",
|
||||||
|
format: "percentage",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "MDV Promoção",
|
||||||
|
column: "mdvpromoc",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Preço Vencimento Próximo",
|
||||||
|
column: "vlrprecovenctoprox",
|
||||||
|
format: "currency_short",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Data Validade",
|
||||||
|
column: "dtavalidade",
|
||||||
|
format: "date",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
params: ["codproduto"],
|
||||||
|
},
|
||||||
|
detalhe_preco: {
|
||||||
|
name: "Detalhe Preço Embalagem",
|
||||||
|
display: {
|
||||||
|
type: "table",
|
||||||
|
table: {
|
||||||
|
header: [
|
||||||
|
{
|
||||||
|
label: "Embalagem",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Preço Embalagem",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Preço Unidade",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Margem",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
cell: [
|
||||||
|
{
|
||||||
|
field: "EMBALAGEM",
|
||||||
|
format: "string",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "PRECO_EMBALAGEM",
|
||||||
|
format: "currency",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "PRECO_UNIDADE",
|
||||||
|
format: "currency",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "MARGEM",
|
||||||
|
format: "percentage",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
params: ["nrempresa", "codproduto"],
|
||||||
|
},
|
||||||
|
detalhe_mdv: {
|
||||||
|
name: "Detalhe Vendas Dia",
|
||||||
|
display: {
|
||||||
|
type: "table",
|
||||||
|
table: {
|
||||||
|
header: [
|
||||||
|
{
|
||||||
|
label: "Data",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Qtd.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Qtd. ini.",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
cell: [
|
||||||
|
{
|
||||||
|
field: "data",
|
||||||
|
format: "date",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "qtd",
|
||||||
|
format: "currency",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "qtd_inicial",
|
||||||
|
format: "currency",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
params: ["nrempresa", "codproduto"],
|
||||||
|
},
|
||||||
|
detalhe_situacao_vigente: {
|
||||||
|
name: "Detalhe Histórico Venda",
|
||||||
|
display: {
|
||||||
|
type: "table",
|
||||||
|
table: {
|
||||||
|
header: [
|
||||||
|
{
|
||||||
|
label: "Data Início",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Data Fim",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Embalagem",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Preço",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
cell: [
|
||||||
|
{
|
||||||
|
field: "data_inicio",
|
||||||
|
format: "date",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "data_fim",
|
||||||
|
format: "date",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "embalagem",
|
||||||
|
format: "string",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "preco",
|
||||||
|
format: "currency",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
params: ["nrempresa", "codproduto"],
|
||||||
|
},
|
||||||
|
detalhe_custo_liquido: {
|
||||||
|
name: "Detalhe Custo Médio",
|
||||||
|
display: {
|
||||||
|
type: "table",
|
||||||
|
table: {
|
||||||
|
header: [
|
||||||
|
{
|
||||||
|
label: "Data",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Est. ini.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Est. fin.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Custo",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
cell: [
|
||||||
|
{
|
||||||
|
field: "data",
|
||||||
|
format: "date",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "estoqinicial",
|
||||||
|
format: "date",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "estoqfinal",
|
||||||
|
format: "string",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "custo",
|
||||||
|
format: "currency",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
params: ["nrempresa", "codproduto"],
|
||||||
|
},
|
||||||
|
detalhe_estoque_disponivel: {
|
||||||
|
name: "Detalhe Estoque Disponível",
|
||||||
|
display: {
|
||||||
|
type: "table",
|
||||||
|
table: {
|
||||||
|
header: [
|
||||||
|
{
|
||||||
|
label: "Data",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Qtd. ent.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Qtd. sai.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Saldo",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
cell: [
|
||||||
|
{
|
||||||
|
field: "data",
|
||||||
|
format: "date",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "qtdentrada",
|
||||||
|
format: "date",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "qtdsaida",
|
||||||
|
format: "string",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "qtdsaldo",
|
||||||
|
format: "currency",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
params: ["nrempresa", "codproduto"],
|
||||||
|
},
|
||||||
|
detalhe_estoque_transito: {
|
||||||
|
name: "Detalhe Estoque Trânsito",
|
||||||
|
display: {
|
||||||
|
type: "table",
|
||||||
|
table: {
|
||||||
|
header: [
|
||||||
|
{
|
||||||
|
label: "NF",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Serie",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Data",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Qtd.",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
cell: [
|
||||||
|
{
|
||||||
|
field: "NUMERONF",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "SERIENF",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "DTAEMISSAO",
|
||||||
|
format: "date",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: "QUANTIDADE",
|
||||||
|
format: "number",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
params: ["nrempresa", "codproduto"],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
entrypoint: "consulta",
|
entrypoint: "consulta",
|
||||||
@@ -31,42 +479,459 @@ export default moduleFactory
|
|||||||
consulta: (args) => {
|
consulta: (args) => {
|
||||||
return {
|
return {
|
||||||
sql: /*sql*/ `
|
sql: /*sql*/ `
|
||||||
select --mpc.codacesso as code,
|
SELECT
|
||||||
|
CAST(p.SEQPRODUTO AS NUMERIC(15)) AS code,
|
||||||
|
p.DESCCOMPLETA AS title
|
||||||
|
FROM
|
||||||
|
DIN_ABASTECIMENTO_PRODUTOS 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,
|
pro.seqproduto,
|
||||||
Upper(NVL(PRODIMAG.DESCRICAO,PRO.DESCCOMPLETA)) title,
|
initcap(pro.desccompleta) Descricao,
|
||||||
Upper(pro.desccompleta) Pesquisa,
|
nvl(mapi.urlecommerceimg,'') ImagemUrl,
|
||||||
coalesce(mapi.urlecommerceimg, '') IMAGEMURL,
|
case when trunc(case
|
||||||
NVL(cpa.seqcategoria,0) CATEGORIAID,
|
when pes2.precovalidpromoc > 0.00 then nvl(pes2.precovalidpromoc,0)
|
||||||
NVL(cpa.categoria,'SEM CATEGORIA') CATEGORIADESC
|
when pes2.precovalidpromoc = 0.00 then nvl(pes2.precovalidnormal,0)
|
||||||
from map_produto pro
|
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,
|
||||||
|
|
||||||
/* inner join map_prodcodigo mpc
|
trunc(case
|
||||||
on mpc.seqfamilia = pro.seqfamilia
|
when pes.precovalidpromoc > 0.00 then nvl(pes.precovalidpromoc,0)
|
||||||
and mpc.seqproduto = pro.seqproduto
|
when pes.precovalidpromoc = 0.00 then nvl(pes.precovalidnormal,0)
|
||||||
AND mpc.tipcodigo = 'E'
|
end, 2) PrecoVarejo,
|
||||||
and mpc.indutilvenda = 'S'*/
|
|
||||||
|
|
||||||
left join map_produtoimagem mapi
|
trunc(nvl(pemp.medvdiaforapromoc,0),4) MDV,
|
||||||
on mapi.seqproduto = pro.seqproduto
|
nvl(gmgb_fn_buscamargemproduto(pemp.nroempresa,pemp.seqproduto),0) Margem,
|
||||||
and mapi.indpricipal = 'S'
|
|
||||||
|
|
||||||
LEFT JOIN CONSINCO.GMGB_VW_MOBILE_PRODIMAGE PRODIMAG
|
case
|
||||||
ON PRODIMAG.ID = PRO.SEQPRODUTO
|
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,
|
||||||
|
|
||||||
left join (select fdc.seqfamilia, fdc.seqcategoria, c.categoria
|
NVL(pemp.estqtroca,0) EstoqueTroca,
|
||||||
from map_famdivcateg fdc
|
NVL(pemp.qtdpedrectransito,0) EstoqueTransito,
|
||||||
inner join consinco.map_categoria c
|
pemp.qtdpendpedcompra EstoqueFuturo,
|
||||||
on fdc.seqcategoria = c.seqcategoria
|
NVL(pemp.qtdreservadavda,0) + nvl(pemp.estqoutro,0) EstoqueReservado, --24/05/2024 - cfreitas - Inclu�do estqoutro para n�o ser necess�rio utilizar MADV_COMPOSICAORESERVASELINV
|
||||||
and fdc.nrodivisao = c.nrodivisao
|
ROUND(nvl(case
|
||||||
where c.nrodivisao = 2
|
when NVL(pemp.medvdiaforapromoc, 0) = 0 then 0
|
||||||
and c.categoria not in (' A CLASSIFICAR','ATIVO FIXO','ALMOXARIFADO','LANCHONETE','SERVI OS')
|
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)
|
||||||
and c.nivelhierarquia = 1
|
end, 0), 3) DDV,
|
||||||
and c.statuscategor = 'A'
|
|
||||||
and c.tipcategoria = 'M'
|
nvl(pemp.estqminimodv,0) DDVMinimo,
|
||||||
and fdc.status = 'A'
|
nvl(pemp.estqmaximodv, 0) DDVMaximo,
|
||||||
and title = ${args.nome_produto}
|
case
|
||||||
) cpa
|
WHEN (select count(1) from mlo_prodembwm w where w.nroempresa = 979 and w.seqproduto = pemp.seqproduto and w.codlinhasepar = 'FR') > 0 THEN 'FRACIONADO'
|
||||||
on cpa.seqfamilia = pro.seqfamilia`,
|
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
|
||||||
|
`,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user