Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save schefferdev/9d507c62bf1acdff4deb2b4e127ff476 to your computer and use it in GitHub Desktop.

Select an option

Save schefferdev/9d507c62bf1acdff4deb2b4e127ff476 to your computer and use it in GitHub Desktop.
Regra para integração entre sistema de abastecimento GATEC e ERP Sênior
definir interno.com.senior.g5.co.mcm.est.estoques.MovimentarEstoque wsEstoque;
@ Funções @
definir funcao fn_converte_ws();
definir funcao fn_verifica_integrado();
definir funcao fn_retorno_ok();
definir funcao fn_retorno_erro();
definir funcao fn_verifica_movimento_devolucao();
@ Variaveis de conversão @
definir alfa sCodEmp;
definir alfa sCodFil;
definir alfa sDatMov;
definir alfa sNumEme;
definir alfa sQtdMov;
definir alfa sNumDoc;
definir alfa sCodTns;
definir alfa sVlrMov;
definir alfa sObsMov;
definir alfa sMotMvp;
@ Variaveis para retorno @
definir numero nQtdErros;
definir numero nQtdOk;
definir numero nQtdTotal;
definir alfa sQtdErros;
definir alfa sQtdOk;
definir alfa sQtdTotal;
definir alfa sMensagemRetorno;
@ Variaveis de retorno WS @
definir alfa rCodEmp;
definir alfa rCodPro;
definir alfa rCodDer;
definir alfa rCodDep;
definir alfa rDatMov;
definir alfa rSeqMov;
@ Saida Padrão @
GatecAbastecimento.TipoRetorno = 2;
GatecAbastecimento.MensagemRetorno = "Ops! Algo macabro aconteceu aqui!";
@ Entradas @
definir alfa eToken;
eToken = GatecAbastecimento.Token;
@ Verificações padrões @
EstaNulo(eToken, nTokenNull);
se (nTokenNull = 1) {
GatecAbastecimento.MensagemRetorno = "Obrigatório informar o token para efetuar a integração!";
Cancel;
}
@ Recebe dados do GATEC @
definir cursor cur_dados;
cur_dados.SQL " \
SELECT E210MVP.CODEMP, \
E210MVP.FILDEP, \
E210MVP.DATMOV, \
E210MVP.USU_CHAREQ, \
E210MVP.CODTNS, \
E210MVP.USU_TIPREQ, \
E210MVP.NUMEME, \
E210MVP.CODPRO, \
E075PRO.DESPRO, \
E210MVP.CODDER, \
E210MVP.QTDMOV, \
E210MVP.NUMDOC, \
E210MVP.CODCCU, \
E210MVP.CODDEP, \
E210MVP.OBSMVP, \
E210MVP.USU_CHAINT \
FROM E210MVP, E075PRO \
WHERE 1 = 0 \
UNION \
SELECT CAST(EMPRESA.COD_EMPR_ERP_SEMFILIAL AS INT) AS CODEMP, \
CAST(EMPRESA.COD_EMPR_ERP_FILIAL AS INT) AS CODFIL, \
GATEC.DAT_MOVIMENTO AS DATMOV, \
GATEC.CHAVE AS CHAREQ, \
REGEXP_SUBSTR(GATEC.CHAVE,'[^-]+',1,2) AS EQUIPAMENTO, \
GATEC.REQ AS TIPREQ, \
GATEC.MOV_ID AS MOVREQ, \
SUBSTR(GATEC.MAT_CODIGO, 0, 6) AS CODPRO, \
PRO.DESPRO AS DESPRO, \
CASE \
WHEN LENGTH(GATEC.MAT_CODIGO) > 5 THEN \
SUBSTR(GATEC.MAT_CODIGO, 7, LENGTH(GATEC.MAT_CODIGO)) \
ELSE \
' ' \
END AS CODDER, \
GATEC.QTD_MATERIAL AS QTDMOV, \
CAST(GATEC.NUM_DOCUM AS INT) AS NUMDOC, \
GATEC.COD_CENTR_CUSTO AS CODCCU, \
GATEC.COD_DEPOS AS CODDEP, \
LOWER(USER_EXPORT) AS USER_EXPORT, \
GATEC.CHAVE_MD5 \
FROM DB_INTEGRACAO.GATEC_MOV_ABASTEC GATEC, \
DB_INTEGRACAO.GATEC_DEPARA_EMPRESA EMPRESA, \
E075PRO PRO \
WHERE EMPRESA.COD_EMPR_GA = GATEC.COD_EMPR \
AND EMPRESA.COD_EMPR_ERP_SEMFILIAL = PRO.CODEMP \
AND GATEC.MAT_CODIGO = PRO.CODPRO \
AND GATEC.IES_INTEGRADO = 'N' \
AND GATEC.CHAVE_MD5 = :eToken \
ORDER BY 1, 2, 3 ";
cur_dados.AbrirCursor();
@ Variaveis do cursor @
definir numero vCodEmp;
definir numero vCodFil;
definir data vDatMov;
definir alfa vChaReq;
definir alfa vTipReq;
definir alfa vCodEqp;
definir numero vNumEme;
definir alfa vCodPro;
definir alfa vDesPro;
definir alfa vCodDer;
definir numero vQtdMov;
definir numero vNumDoc;
definir alfa vCodCcu;
definir alfa vCodDep;
definir alfa vObsMvp;
definir alfa vChaInt;
nQtdErros = 0;
nQtdOk = 0;
enquanto(cur_dados.Achou){
@ Recebe dados do cursor @
vCodEmp = cur_dados.CODEMP;
vCodFil = cur_dados.FILDEP;
vDatMov = cur_dados.DATMOV;
vChaReq = cur_dados.USU_CHAREQ;
vTipReq = cur_dados.USU_TIPREQ;
vCodEqp = cur_dados.CODTNS;
vNumEme = cur_dados.NUMEME;
vCodPro = cur_dados.CODPRO;
vDesPro = cur_dados.DESPRO;
vCodDer = cur_dados.CODDER;
vQtdMov = cur_dados.QTDMOV;
vNumDoc = cur_dados.NUMDOC;
vCodCcu = cur_dados.CODCCU;
vCodDep = cur_dados.CODDEP;
vObsMvp = cur_dados.OBSMVP;
vChaInt = cur_dados.USU_CHAINT;
@ Verifica se já foi integrado @
fn_verifica_integrado();
se (nVerificaIntegrado = 0) {
@ Aplica conversões @
fn_converte_ws();
@ Adiciona dados na execução do WS @
wsEstoque.DadosGerais.CriarLinha();
wsEstoque.DadosGerais.CodEmp = sCodEmp;
wsEstoque.DadosGerais.CodFil = sCodFil;
wsEstoque.DadosGerais.CodPro = vCodPro;
wsEstoque.DadosGerais.CodDer = " ";
wsEstoque.DadosGerais.CodDep = vCodDep;
wsEstoque.DadosGerais.DatMov = sDatMov;
wsEstoque.DadosGerais.CodTns = sCodTns;
wsEstoque.DadosGerais.QtdMov = sQtdMov;
wsEstoque.DadosGerais.VlrMov = sVlrMov;
wsEstoque.DadosGerais.CodCcu = vCodCcu;
wsEstoque.DadosGerais.NumDoc = sNumDoc;
wsEstoque.DadosGerais.MotMvp = sMotMvp;
@ Executa o WS @
wsEstoque.ModoExecucao = 1;
wsEstoque.Executar();
@ Verifica o retorno @
definir numero wsTipoRetorno;
definir alfa wsMensagemRetorno;
wsTipoRetorno = wsEstoque.TipoRetorno;
wsMensagemRetorno = wsEstoque.MensagemRetorno;
se (wsTipoRetorno = 1) {
se (wsEstoque.RetornoMovimento.Retorno <> "OK"){
wsMensagemRetorno = wsEstoque.RetornoMovimento.Retorno;
fn_retorno_erro();
} senao {
fn_retorno_ok();
}
} senao {
fn_retorno_erro();
}
}
cur_dados.Proximo();
}
cur_dados.FecharCursor();
nQtdTotal = nQtdOk + nQtdErros;
IntParaAlfa(nQtdErros, sQtdErros);
IntParaAlfa(nQtdOk, sQtdOk);
IntParaAlfa(nQtdTotal, sQtdTotal);
sMensagemRetorno = "Foram processados " + sQtdTotal + " registros. Erros: " + sQtdErros + ", Ok: " + sQtdOk;
@ Retorno @
GatecAbastecimento.TipoRetorno = 1;
GatecAbastecimento.MensagemRetorno = sMensagemRetorno;
@==============================================================================@
@ Função para quando o resultado do WS de movimento de estoque estiver OK @
@==============================================================================@
funcao fn_retorno_ok();
{
definir numero nrCodEmp;
definir data drDatMov;
definir numero nrSeqMov;
rCodEmp = wsEstoque.RetornoMovimento.CodEmp;
rCodPro = wsEstoque.RetornoMovimento.CodPro;
rCodDer = wsEstoque.RetornoMovimento.CodDer;
rCodDep = wsEstoque.RetornoMovimento.CodDep;
rDatMov = wsEstoque.RetornoMovimento.DatMov;
rSeqMov = wsEstoque.RetornoMovimento.SeqMov;
AlfaParaInt(rCodEmp, nrCodEmp);
AlfaParaData(rDatMov, drDatMov);
AlfaParaInt(rSeqMov, nrSeqMov);
nQtdOk++;
ExecSQL " \
UPDATE E210MVP \
SET USU_CHAINT = :eToken, \
USU_CHAREQ = :vChaReq \
WHERE CODEMP = :nrCodEmp \
AND CODPRO = :rCodPro \
AND CODDER = :rCodDer \
AND CODDEP = :rCodDep \
AND DATMOV = :drDatMov \
AND SEQMOV = :nrSeqMov ";
ExecSQL " \
UPDATE DB_INTEGRACAO.GATEC_MOV_ABASTEC \
SET IES_INTEGRADO = 'S', \
OBS_ERRO_ABASTEC = NULL, \
ERP_CODEMP = :nrCodEmp, \
ERP_CODPRO = :rCodPro, \
ERP_CODDER = :rCodDer, \
ERP_CODDEP = :rCodDep, \
ERP_DATMOV = :drDatMov, \
ERP_SEQMOV = :nrSeqMov \
WHERE MOV_ID = :vNumEme ";
}
@==============================================================================@
@ Função para quando o resultado do WS de movimento de estoque estiver com Erro@
@==============================================================================@
funcao fn_retorno_erro();
{
nQtdErros++;
ExecSQL " \
UPDATE DB_INTEGRACAO.GATEC_MOV_ABASTEC \
SET IES_INTEGRADO = 'N', \
OBS_ERRO_ABASTEC = :wsMensagemRetorno \
WHERE MOV_ID = :vNumEme ";
}
@==============================================================================@
@ Função para converter variaveis para enviar o WS @
@==============================================================================@
funcao fn_converte_ws();
{
se (vTipReq = "R") {
sCodTns = "90262";
} senao {
sCodTns = "90206";
}
definir cursor cur_derivacao;
cur_derivacao.SQL " \
SELECT PREMED \
FROM E075DER \
WHERE CODEMP = :vCodEmp \
AND CODPRO = :vCodPro \
AND CODDER = :vCodDer ";
cur_derivacao.AbrirCursor();
definir numero nPreMed;
definir numero nVlrMov;
se (cur_derivacao.Achou) {
nPreMed = cur_derivacao.PREMED;
nVlrMov = nPreMed * vQtdMov;
sVlrMov = Formatar(nVlrMov,"%14.6f");
LimpaEspacos(sVlrMov);
}
cur_derivacao.FecharCursor();
IntParaAlfa(vCodEmp, sCodEmp);
IntParaAlfa(vCodFil, sCodFil);
ConverteMascara(3, vDatMov, sDatMov, "DD/MM/YYYY");
IntParaAlfa(vNumEme, sNumEme);
sQtdMov = Formatar(vQtdMov,"%14.6f");
IntParaAlfa(vNumDoc, sNumDoc);
sObsMov = "DADOS DO GATEC : Movimento do dia: " + sDatMov + ", documento: " + sNumDoc + ", chave : " + vChaReq + ", equipamento : " + vCodEqp;
sMotMvp = "Doc: " + sNumDoc + ", Produto: " + vCodPro + " - " + vDesPro + ", Eqp: " + vCodEqp;
}
@==============================================================================@
@ Função para verificar se chave já foi integrada e não permitir movimentos @
@ duplicados @
@==============================================================================@
@ Função para verificar se pode efetuar a devolução do saldo. @
@ Valida se houve saida para poder efetuar a devolução. @
@==============================================================================@
funcao fn_verifica_integrado();
{
definir numero nVerificaIntegrado;
definir cursor cur_verificar;
nVerificaIntegrado = 0;
cur_verificar.SQL " \
SELECT CODEMP \
FROM E210MVP \
WHERE USU_CHAREQ = :vChaReq ";
cur_verificar.AbrirCursor();
se (cur_verificar.Achou) {
se (vTipReq <> "D") {
wsMensagemRetorno = "Registro já está integrado.";
fn_retorno_erro();
nVerificaIntegrado = 1;
}
}
cur_verificar.FecharCursor();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment