Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save schefferdev/0c4d1cdfdd3983ce1d8fe0cb3a0c0580 to your computer and use it in GitHub Desktop.

Select an option

Save schefferdev/0c4d1cdfdd3983ce1d8fe0cb3a0c0580 to your computer and use it in GitHub Desktop.
definir interno.com.senior.g5.co.mcm.est.requisicoes.RequisicaoAgrupada wsRequisicao;
definir interno.com.senior.g5.co.mcm.est.geracaosolicitacaocompra.GerarSolicitacaoCompra wsSolicitacao;
@ Saida padrão @
GatecOSAutomotiva.TipoRetorno = 2;
GatecOSAutomotiva.MensagemRetorno = "Ops. Ocorreu um erro inexperado. Favor verificar com o TI!";
@ Funções @
definir funcao fn_parametros_integracao(numero nEmpInt);
definir numero vParametroIntegracao;
definir funcao fn_numero_requisicao(numero nEmpInt);
definir funcao fn_numero_solicitacao(numero nEmpInt);
definir funcao fn_dados_requisicao();
definir numero vValidaProduto;
definir funcao fn_valida_requisicao();
definir numero vValidaRequisicao;
definir funcao fn_requisicao_ok();
definir funcao fn_solicitacao_ok();
definir funcao fn_requisicao_erro();
definir funcao fn_solicitacao_erro();
@ Parametros de entrada @
definir alfa eToken;
eToken = GatecOSAutomotiva.Token;
@ Lista de processamento @
definir lista lRequisicao;
definir lista lSolicitacao;
lRequisicao.DefinirCampos();
lRequisicao.AdicionarCampo("codemp", numero);
lRequisicao.AdicionarCampo("numeme", numero);
lRequisicao.AdicionarCampo("seqeme", numero);
lRequisicao.AdicionarCampo("id_chave", numero);
lRequisicao.AdicionarCampo("numosg", alfa);
lRequisicao.AdicionarCampo("codsaf", alfa);
lRequisicao.EfetivarCampos();
lSolicitacao.DefinirCampos();
lSolicitacao.AdicionarCampo("codemp", numero);
lSolicitacao.AdicionarCampo("numsol", numero);
lSolicitacao.AdicionarCampo("seqsol", numero);
lSolicitacao.AdicionarCampo("id_chave", numero);
lSolicitacao.AdicionarCampo("numosg", alfa);
lSolicitacao.AdicionarCampo("codsaf", alfa);
lSolicitacao.EfetivarCampos();
@ Parametros de Integração @
definir alfa sParTnsIntReq; @ Transação de Integração para Requisição @
definir alfa sParTnsDevReq; @ Transação de Integração para Devolução de Requisição @
definir alfa sParTnsIntSol; @ Transação de Integração para Solicitação @
@ Processamento @
definir cursor cur_dados;
definir numero nQtdReg;
definir numero nQtdPro;
definir numero nQtdSer;
cur_dados.SQL " \
SELECT CODEMP, \
FILEME, \
SEQEME, \
CPLPRO, \
CODFAM, \
NUMEME, \
PROSER, \
CODPRO, \
CODDEP, \
QTDEME, \
DATEME, \
CCURES, \
ORIEME, \
CONREC, \
INTPAT, \
HOREME, \
CODEQP, \
DEPCMP, \
SITAPR \
FROM E207EME \
WHERE CODEMP = 0 \
UNION ALL \
SELECT TO_NUMBER(EMP.COD_EMPR_ERP_SEMFILIAL) AS CODEMP, \
TO_NUMBER(EMP.COD_EMPR_ERP_FILIAL) AS CODFIL, \
REQ.ID_CHAVE AS NUMSEQ, \
REQ.CHAVE_MD5 AS CODCHA, \
TO_CHAR(REQ.SAF_ANO_SAFRA) AS CODSAF, \
TO_NUMBER(SUBSTR(REQ.COD_OS, 4)) AS NUMOSG, \
DECODE(SUBSTR(REQ.COD_MATER, 1, 1), 'S', 'S', 'P') AS PROSER, \
REQ.COD_MATER AS CODPRO, \
REQ.COD_DEPOS AS CODDEP, \
REQ.QTD_SOLIC AS QTDMOV, \
TRUNC(REQ.MOV_DATA) AS DATMOV, \
REQ.COD_CENTRO_CUSTO AS CODCCU, \
REQ.OS_COMPRAR AS EFECPR, \
REQ.REQ_TIPO AS TIPREQ, \
REQ.REQ_CANCELADA AS SITCAN, \
TO_NUMBER(OSG.COD_EQUIP_OS) COD_EQUIPAMENTO, \
OSG.DSC_EQP_CC, \
REQ.REQ_USUARIO, \
REQ.ESTOQUE AS RESERVA_ESTOQUE \
FROM DB_INTEGRACAO.GATEC_OS_ITENS_REQUISITADOS REQ, \
DB_INTEGRACAO.GATEC_DEPARA_EMPRESA EMP, \
DB_INTEGRACAO.GATEC_OS OSG \
WHERE EMP.COD_EMPR_GA = REQ.COD_EMPR \
AND OSG.COD_EMPR = REQ.COD_EMPR(+) \
AND OSG.SAF_ANO_SAFRA = REQ.SAF_ANO_SAFRA(+) \
AND OSG.NUM_OS = REQ.COD_OS(+) \
AND SUBSTR(REQ.COD_OS, 1, 3) = 'AUT' \
AND REQ.REQUIS_GERADA = 'N' \
AND REQ.CHAVE_MD5 = :eToken \
ORDER BY 1, 2, 6, 3 ";
cur_dados.AbrirCursor();
@ Variaveis do cursor @
definir numero vCodEmp;
definir numero vCodFil;
definir numero vNumSeq;
definir alfa vCodCha;
definir alfa vCodSaf;
definir numero vNumOsg;
definir alfa vProSer;
definir alfa vCodPro;
definir alfa vCodDep;
definir numero vQtdMov;
definir data vDatMov;
definir alfa vCodCcu;
definir alfa vEfeCpr;
definir alfa vTipReq;
definir alfa vSitCan;
definir alfa vCodTns;
definir numero vNumEme;
definir numero vSeqEme;
definir numero vNumSol;
definir numero vSeqSol;
definir alfa vDesPro;
definir alfa vUniMed;
definir alfa vObsEme;
definir numero vCodEqp;
definir alfa vDesEqp;
definir alfa vReqUsu;
definir alfa vResEst;
definir alfa sNumOsg;
enquanto(cur_dados.Achou) {
nQtdReg++;
vCodEmp = cur_dados.CODEMP;
vCodFil = cur_dados.FILEME;
vNumSeq = cur_dados.SEQEME;
vCodCha = cur_dados.CPLPRO;
vCodSaf = cur_dados.CODFAM;
vNumOsg = cur_dados.NUMEME;
vProSer = cur_dados.PROSER;
vCodPro = cur_dados.CODPRO;
vCodDep = cur_dados.CODDEP;
vQtdMov = cur_dados.QTDEME;
vDatMov = cur_dados.DATEME;
vCodCcu = cur_dados.CCURES;
vEfeCpr = cur_dados.ORIEME;
vTipReq = cur_dados.CONREC;
vSitCan = cur_dados.INTPAT;
vCodEqp = cur_dados.HOREME;
vDesEqp = cur_dados.CODEQP;
vReqUsu = cur_dados.DEPCMP;
vResEst = cur_dados.SITAPR;
IntParaAlfa(vNumOsg, sNumOsg);
sNumOsg = "AUT" + sNumOsg;
@ Carrega parametros @
fn_parametros_integracao(vCodEmp);
se (vParametroIntegracao > 0) {
GatecOSAutomotiva.TipoRetorno = 2;
GatecOSAutomotiva.MensagemRetorno = "Falha ao carregar os parâmetros da integração!";
Cancel;
}
@ Carrega valores extras @
fn_dados_requisicao();
se (vValidaProduto > 0) {
Cancel;
}
se (vProSer = "P") {
nQtdPro++;
@ Valida Requisição @
fn_valida_requisicao();
se (vValidaRequisicao > 0) {
cur_dados.Proximo();
Continue;
}
se (vTipReq = "R") {
vCodTns = sParTnsIntReq;
} senao {
vCodTns = sParTnsDevReq;
}
@ Carrega numerações @
se (vNumEme = 0) {
fn_numero_requisicao(vCodEmp);
} senao {
vSeqEme++;
}
@ Preenche WS @
wsRequisicao.tipoProcessamento = 1;
wsRequisicao.requisicao.CriarLinha();
wsRequisicao.requisicao.CodEmp = vCodEmp;
wsRequisicao.requisicao.CodFil = vCodFil;
wsRequisicao.requisicao.CodTns = vCodTns;
wsRequisicao.requisicao.NumEme = vNumEme;
wsRequisicao.requisicao.SeqEme = vSeqEme;
wsRequisicao.requisicao.ProSer = vProSer;
wsRequisicao.requisicao.CodPro = vCodPro;
wsRequisicao.requisicao.CplPro = vDesPro;
wsRequisicao.requisicao.UniMed = vUniMed;
wsRequisicao.requisicao.QtdEme = vQtdMov;
se (vResEst = "S") {
wsRequisicao.requisicao.CodDep = vCodDep;
wsRequisicao.requisicao.ResEst = vResEst;
}
wsRequisicao.requisicao.DatEme = vDatMov;
wsRequisicao.requisicao.DatPrv = DatSis;
wsRequisicao.requisicao.DatApr = DatSis;
wsRequisicao.requisicao.QtdApr = vQtdMov;
wsRequisicao.requisicao.CcuRes = vCodCcu;
wsRequisicao.requisicao.ObsEme = vObsEme;
wsRequisicao.requisicao.UsuRes = CodUsu;
@ Adiciona linha @
GatecOSAutomotiva.Retorno.CriarLinha();
GatecOSAutomotiva.Retorno.CodEmp = vCodEmp;
GatecOSAutomotiva.Retorno.NumEme = vNumEme;
GatecOSAutomotiva.Retorno.SeqEme = vSeqEme;
lRequisicao.Adicionar();
lRequisicao.codemp = vCodEmp;
lRequisicao.numeme = vNumEme;
lRequisicao.seqeme = vSeqEme;
lRequisicao.id_chave = vNumSeq;
lSolicitacao.numosg = sNumOsg;
lSolicitacao.codsaf = vCodSaf;
lRequisicao.Gravar();
} senao {
nQtdSer++;
se (vTipReq = "R") {
vCodTns = sParTnsIntSol;
} senao {
GatecOSAutomotiva.TipoRetorno = 2;
GatecOSAutomotiva.MensagemRetorno = "Não é permitido efetuar devolução de serviço!";
Cancel;
}
@ Carrega numerações @
se (vNumSol = 0) {
fn_numero_solicitacao(vCodEmp);
} senao {
vSeqSol++;
}
wsSolicitacao.CodEmp = vCodEmp;
wsSolicitacao.CodFil = vCodFil;
wsSolicitacao.NumSol = vNumSol;
wsSolicitacao.ItensServico.CriarLinha();
wsSolicitacao.ItensServico.SeqSol = vSeqSol;
wsSolicitacao.ItensServico.CodTns = vCodTns;
wsSolicitacao.ItensServico.CodSer = vCodPro;
wsSolicitacao.ItensServico.CplPro = vDesPro;
wsSolicitacao.ItensServico.UniMed = vUniMed;
wsSolicitacao.ItensServico.QtdSol = vQtdMov;
wsSolicitacao.ItensServico.DatPrv = vDatMov;
wsSolicitacao.ItensServico.PreSol = vPreSol;
wsSolicitacao.ItensServico.CcuRes = vCodCcu;
wsSolicitacao.ItensServico.ObsSol = vObsEme;
lSolicitacao.Adicionar();
lSolicitacao.codemp = vCodEmp;
lSolicitacao.numsol = vNumSol;
lSolicitacao.seqsol = vSeqSol;
lSolicitacao.id_chave = vNumSeq;
lSolicitacao.numosg = sNumOsg;
lSolicitacao.codsaf = vCodSaf;
lSolicitacao.Gravar();
}
cur_dados.Proximo();
}
cur_dados.FecharCursor();
se (nQtdPro > 0) {
wsRequisicao.ModoExecucao = 1;
wsRequisicao.Executar();
@ Variaveis de retorno @
definir alfa sMensagemRetorno;
definir numero nTipoRetorno;
definir alfa sErroExecucao;
sMensagemRetorno = wsRequisicao.mensagemRetorno;
nTipoRetorno = wsRequisicao.tipoRetorno;
sErroExecucao = wsRequisicao.erroExecucao;
definir numero rCodEmp;
definir numero rNumEme;
definir numero rSeqEme;
definir numero rChaInt;
definir alfa rNumOsg;
definir alfa rCodSaf;
se (nTipoRetorno <> 0) {
sMensagemRetorno = wsRequisicao.Erros.MsgErr;
fn_requisicao_erro();
} senao {
fn_requisicao_ok();
}
GatecOSAutomotiva.MensagemRetorno = sMensagemRetorno;
}
se (nQtdSer > 0) {
wsSolicitacao.ModoExecucao = 1;
wsSolicitacao.Executar();
@ Variaveis de retorno @
definir alfa sMensagemRetorno;
definir numero nTipoRetorno;
definir alfa sErroExecucao;
sMensagemRetorno = wsSolicitacao.mensagemRetorno;
nTipoRetorno = wsSolicitacao.tipoRetorno;
sErroExecucao = wsSolicitacao.retornoSolicitacao.msgRet;
se (nTipoRetorno <> 1) {
sMensagemRetorno = wsSolicitacao.retornoSolicitacao.msgRet;
fn_solicitacao_erro();
} senao {
fn_solicitacao_ok();
}
GatecOSAutomotiva.MensagemRetorno = sMensagemRetorno;
}
se (nQtdReg = 0) {
GatecOSAutomotiva.TipoRetorno = 2;
GatecOSAutomotiva.MensagemRetorno = "Nenhum registro processado!";
}
funcao fn_requisicao_erro();
{
GatecOSAutomotiva.TipoRetorno = 2;
lRequisicao.Primeiro();
enquanto(lRequisicao.FDA = 0) {
rCodEmp = lRequisicao.codemp;
rNumEme = lRequisicao.numeme;
rSeqEme = lRequisicao.seqeme;
rChaInt = lRequisicao.id_chave;
ExecSQL " \
UPDATE DB_INTEGRACAO.GATEC_OS_ITENS_REQUISITADOS \
SET OBS_ERRO = :sMensagemRetorno, \
REQUIS_GERADA = 'N', \
REQ_PROCESSADO = 'S' \
WHERE ID_CHAVE = :rChaInt ";
lRequisicao.Proximo();
}
}
funcao fn_solicitacao_erro();
{
GatecOSAutomotiva.TipoRetorno = 2;
lSolicitacao.Primeiro();
enquanto(lSolicitacao.FDA = 0) {
rChaInt = lSolicitacao.id_chave;
ExecSQL " \
UPDATE DB_INTEGRACAO.GATEC_OS_ITENS_REQUISITADOS \
SET OBS_ERRO = :sMensagemRetorno, \
REQUIS_GERADA = 'N', \
REQ_PROCESSADO = 'S' \
WHERE ID_CHAVE = :rChaInt ";
lSolicitacao.Proximo();
}
}
funcao fn_requisicao_ok();
{
GatecOSAutomotiva.TipoRetorno = 1;
lRequisicao.Primeiro();
enquanto(lRequisicao.FDA = 0) {
rCodEmp = lRequisicao.codemp;
rNumEme = lRequisicao.numeme;
rSeqEme = lRequisicao.seqeme;
rChaInt = lRequisicao.id_chave;
rNumOsg = lRequisicao.numosg;
rCodSaf = lRequisicao.codsaf;
ExecSQL " \
UPDATE E207EME \
SET USU_CHAINT = :eToken, \
USU_IDCHAVE = :rChaInt, \
USU_NUMOS = :rNumOsg, \
USU_SAFRA = :rCodSaf \
WHERE CODEMP = :rCodEmp \
AND NUMEME = :rNumEme \
AND SEQEME = :rSeqEme ";
ExecSQL " \
UPDATE DB_INTEGRACAO.GATEC_OS_ITENS_REQUISITADOS \
SET ERP_CODEMP = :rCodEmp, \
ERP_NUMEME = :rNumEme, \
ERP_SEQEME = :rSeqEme, \
REQUIS_GERADA = 'S', \
REQ_PROCESSADO = 'S', \
OBS_ERRO = 'Registro integrado', \
DAT_IMPORT = SYSDATE \
WHERE ID_CHAVE = :rChaInt ";
lRequisicao.Proximo();
}
}
funcao fn_solicitacao_ok();
{
GatecOSAutomotiva.TipoRetorno = 1;
lSolicitacao.Primeiro();
enquanto(lSolicitacao.FDA = 0) {
rCodEmp = lSolicitacao.codemp;
rNumSol = lSolicitacao.numsol;
rSeqSol = lSolicitacao.seqsol;
rChaInt = lSolicitacao.id_chave;
rNumOsg = lSolicitacao.numosg;
rCodSaf = lSolicitacao.codsaf;
ExecSQL " \
UPDATE E405SOL \
SET USU_CHAINT = :eToken, \
USU_IDCHAVE = :rChaInt, \
USU_NUMOS = :rNumOsg, \
USU_SAFRA = :rCodSaf \
WHERE CODEMP = :rCodEmp \
AND NUMSOL = :rNumSol \
AND SEQSOL = :rSeqSol ";
ExecSQL " \
UPDATE DB_INTEGRACAO.GATEC_OS_ITENS_REQUISITADOS \
SET ERP_CODEMP = :rCodEmp, \
ERP_NUMSOL = :rNumSol, \
ERP_SEQSOL = :rSeqSol, \
REQUIS_GERADA = 'S', \
REQ_PROCESSADO = 'S', \
OBS_ERRO = 'Registro integrado', \
DAT_IMPORT = SYSDATE \
WHERE ID_CHAVE = :rChaInt ";
lSolicitacao.Proximo();
}
}
funcao fn_parametros_integracao(numero nEmpInt);
{
vParametroIntegracao = 0;
definir cursor cur_parametros;
cur_parametros.SQL " \
SELECT USU_TNSREQ, \
USU_TNSDEV, \
USU_TNSSOL \
FROM USU_T000GAT \
WHERE USU_CODEMP = :nEmpInt ";
cur_parametros.AbrirCursor();
se (cur_parametros.Achou) {
sParTnsIntReq = cur_parametros.usu_tnsreq;
sParTnsDevReq = cur_parametros.usu_tnsdev;
sParTnsIntSol = cur_parametros.usu_tnssol;
} senao {
vParametroIntegracao = 1;
}
cur_parametros.FecharCursor();
}
funcao fn_numero_requisicao(numero nEmpInt);
{
definir cursor cur_numero;
cur_numero.SQL " \
SELECT NUMEME \
FROM E207EME \
WHERE CODEMP = 0 \
UNION ALL \
SELECT MAX(NUMEME) AS NUMEME \
FROM E207EME \
WHERE CODEMP = :nEmpInt ";
cur_numero.AbrirCursor();
se (cur_numero.Achou) {
vNumEme = cur_numero.NUMEME;
vSeqEme = 1;
@ Incrementa contator de requisição @
vNumEme++;
}
cur_numero.FecharCursor();
}
funcao fn_numero_solicitacao(numero nEmpInt);
{
definir cursor cur_numero;
cur_numero.SQL " \
SELECT NUMSOL \
FROM E405SOL \
WHERE CODEMP = 0 \
UNION ALL \
SELECT NVL(MAX(NUMSOL), 1) AS NUMSOL \
FROM E405SOL \
WHERE CODEMP = :nEmpInt ";
cur_numero.AbrirCursor();
se (cur_numero.Achou) {
vNumSol = cur_numero.NUMSOL;
vSeqSol = 1;
@ Incrementa contator de requisição @
vNumSol++;
}
cur_numero.FecharCursor();
}
funcao fn_dados_requisicao();
{
@ Valida produto @
definir cursor cur_produto;
vValidaProduto = 0;
cur_produto.SQL " \
SELECT E075PRO.DESPRO, \
E075PRO.UNIMED, \
E075PRO.SITPRO, \
E075DER.PREREP \
FROM E075PRO, \
E075DER \
WHERE E075PRO.CODEMP = E075DER.CODEMP \
AND E075PRO.CODPRO = E075DER.CODPRO \
AND E075PRO.CODEMP = :vCodEmp \
AND E075PRO.CODPRO = :vCodPro \
AND E075DER.CODDER = ' ' ";
cur_produto.AbrirCursor();
definir alfa sValDesPro;
definir alfa sValUniMed;
definir alfa sValSitPro;
se (cur_produto.Achou) {
sValDesPro = cur_produto.DESPRO;
sValUniMed = cur_produto.UNIMED;
sValSitPro = cur_produto.SITPRO;
@ Valida situação do produto @
se (sValSitPro = "I") {
GatecOSAutomotiva.TipoRetorno = 2;
GatecOSAutomotiva.MensagemRetorno = "Produto (" + vCodPro + "-" + sValDesPro + ")está inativo no ERP";
vValidaProduto = 1;
Cancel;
}
vDesPro = sValDesPro;
vUniMed = sValUniMed;
vPreSol = cur_produto.PREREP;
} senao {
GatecOSAutomotiva.TipoRetorno = 2;
GatecOSAutomotiva.MensagemRetorno = "Produto não encontrado no ERP!";
vValidaProduto = 1;
}
cur_produto.FecharCursor();
@ Prepara usuario @
definir cursor cur_usuario;
cur_usuario.SQL " \
SELECT CODUSU \
FROM R999USU \
WHERE UPPER(NOMUSU) = :vReqUsu ";
cur_usuario.AbrirCursor();
se (cur_usuario.Achou) {
vUsuEme = cur_usuario.CODUSU;
} senao {
vUsuEme = CodUsu;
}
cur_usuario.FecharCursor();
@ Valida reserva de estoque @
EstaNulo(vCodDep, vDepNul);
@ Prepara observação @
definir alfa sCodEqp;
definir alfa sNumOsg;
IntParaAlfa(vNumOsg, sNumOsg);
IntParaAlfa(vCodEqp, sCodEqp);
vObsEme = "Dados do GAtec: OS: " + sNumOsg + " Equipamento: " + sCodEqp + " - " + vDesEqp + " Usuário: " + vReqUsu;
}
funcao fn_valida_requisicao();
{
vValidaRequisicao = 0;
definir cursor cur_validacao;
cur_validacao.SQL " \
SELECT CODEMP, \
NUMEME, \
SEQEME \
FROM E207EME \
WHERE USU_CHAINT = :eToken \
AND USU_IDCHAVE = :vNumSeq ";
cur_validacao.AbrirCursor();
se (cur_validacao.Achou) {
vValidaRequisicao = 1;
vNumEme = cur_validacao.NUMEME;
vSeqEme = cur_validacao.SEQEME;
lRequisicao.Adicionar();
lRequisicao.codemp = vCodEmp;
lRequisicao.numeme = vNumEme;
lRequisicao.seqeme = vSeqEme;
lRequisicao.id_chave = vNumSeq;
lRequisicao.Gravar();
fn_requisicao_ok();
}
cur_validacao.FecharCursor();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment