Last active
January 17, 2022 13:16
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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