Vous êtes sur la page 1sur 7

*-----*-----*-----*-----*-----*-----*-----*-----*

WsStruct tb_Recebe
*-----*-----*-----*-----*-----*-----*-----*-----*

WsData Processo As tb_Processo OPTIONAL

EndWsStruct

*-----*-----*-----*-----*-----*-----*-----*-----*
WsStruct tb_Processo
*-----*-----*-----*-----*-----*-----*-----*-----*

WsData Fil As String OPTIONAL


WsData Processo As String OPTIONAL
WsData Cliente As String OPTIONAL
WsData LojaCli As String OPTIONAL
WsData Fornecedor As String OPTIONAL
WsData LojaFor As String OPTIONAL
WsData ChvSercorp As String OPTIONAL
WsData LogData As String OPTIONAL
WsData LogHora As String OPTIONAL
WsData LogUser As String OPTIONAL
WsData Invoice As tb_Invoice OPTIONAL

EndWsStruct

*-----*-----*-----*-----*-----*-----*-----*-----*
WsStruct tb_Invoice
*-----*-----*-----*-----*-----*-----*-----*-----*

WsData Invoice As String OPTIONAL


WsData Nu_Invoice As String OPTIONAL
WsData Natureza As String OPTIONAL
WsData Parcela As tb_Parcela OPTIONAL
WsData CentroCusto As String OPTIONAL
WsData ClasseValor As String OPTIONAL
WsData ItemConta As String OPTIONAL

EndWsStruct

*-----*-----*-----*-----*-----*-----*-----*-----*
WsStruct tb_Parcela
*-----*-----*-----*-----*-----*-----*-----*-----*

WsData Parcela As String OPTIONAL


WSData Evento As String OPTIONAL
WsData Tipo As String OPTIONAL
WsData Dt_Vcto As String OPTIONAL
WsData Moeda As String OPTIONAL
WsData Taxa As String OPTIONAL
WsData Vl_Parcela As String OPTIONAL

EndWsStruct

/*
Estrutura : tb_RetProt
Autor : Alan Henrique Almeida da Costa - AHAC
Data : 05/08/2013 - 13:00hrs
Objetivo :
*/
*-----*-----*-----*-----*-----*-----*-----*-----*
WsStruct tb_RetProt
*-----*-----*-----*-----*-----*-----*-----*-----*

WsData Status_int As String OPTIONAL


WsData Mensagem As String OPTIONAL
WsData ChvSercorp As String OPTIONAL

EndWsStruct

/*
WebService : Int_SercorpRec
Autor : Alan Henrique Almeida da Costa - AHAC
Data : 05/08/2013 - 13:00hrs
Objetivo :
*/
*-----*-----*-----*-----*-----*-----*-----*-----*
WsService Int_ReceiveSercorp DESCRIPTION "Interface Sercorp Envia"
*-----*-----*-----*-----*-----*-----*-----*-----*

WsData ReceiveProtheus As tb_Recebe


WsData ReturnProtheus As tb_RetProt

WsMethod Mt_RecebeProcesso

EndWsService

/*
Metodo : Mt_IntegraProcesso
Autor : Alan Henrique Almeida da Costa - AHAC
Data : 05/08/2013 - 13:00hrs
Objetivo :
*/
*-----*-----*-----*-----*-----*-----*-----*-----*
WsMethod Mt_RecebeProcesso WsReceive ReceiveProtheus WsSend ReturnProtheus
WsService Int_ReceiveSercorp
*-----*-----*-----*-----*-----*-----*-----*-----*
Local aEmp := {}
Local nI
Local aXml,cRcv := '', cSnd := ''
Local cAlias := ''
Local nRecSM0
Local cEmp , cFil
Local cParMoe
Private cVFil, cVProcesso, cVCliente, cVLojaCli, cVFornecedor, cVLojaFor,
cVInvoice, cVNu_Invoice, cVNatureza, cVParcela, cVEvento
Private cCentroCusto, cClasseValor, cItemConta
Private cVTipo, dVDt_Vcto, cVMoeda, nVTaxa, nVVl_Parcela, cVChvSercorp,
dVLogData, cVLogHora, cVLogUser, cXML
Private cMsg := ''
Private cStatus := ''
Private aEmpFilP := {}

Begin Sequence

//Lê XMLs do \System\


aXML := directory("*.xml")
For nI:=1 To Len(aXml)
If "SND" $ aXml[nI][1] //Se nome do XML contem "SND" é o XML recebido
cSnd := aXml[nI][1]
EndIf
If "RCV" $ aXml[nI][1] //Se nome do XML contem "RCV" é o XML recebido
cRcv := aXml[nI][1]
EndIf
Next nI

If !Empty(cSnd)
//abre o arquivo xml e copia na variavel cXml
cXml := ""
Ft_Fuse(cSnd)
Ft_FGoTop()
//Loop dentro do XML
While !Ft_FEof()
//Le a linha do XML
cXml += Ft_FReadLn() + " "
Ft_FSkip()
EndDo
Ft_Fuse()
Else
cXML := 'Falha ao ler XML'
EndIf
ConOut('Processando XML......................')
ConOut(cXML)

If !Empty(cSnd) //Apaga XML Recebido


FErase(cSnd)
EndIf
If !Empty(cRcv) //Apaga XML Enviado
FErase(cRCV)
EndIf

Processos := ::ReceiveProtheus:Processo

//---------------------------------//
// Valida de Preenchimento do XML //
//--------------------------------\\

IF EMPTY(Processos:Fil)//Filial
cMsg += 'Filial nao preenchida' + Chr(13)+Chr(10)
ENDIF

IF EMPTY(Processos:Processo)//Processo
cMsg += 'Codigo do Processo nao preenchido' + Chr(13)+Chr(10)
ENDIF

IF EMPTY(Processos:Cliente)//CLiente
cMsg += 'Codigo do Cliente nao preenchido' + Chr(13)+Chr(10)
ENDIF

IF EMPTY(Processos:LojaCli)//CLiente
cMsg += 'Loja do Cliente nao preenchida' + Chr(13)+Chr(10)
ENDIF

IF EMPTY(Processos:Fornecedor)//Fornecedor
cMsg += 'Codigo do Fornecedor nao preenchido' + Chr(13)+Chr(10)
ENDIF

IF EMPTY(Processos:LojaFor)//Fornecedor
cMsg += 'Loja do Fornecedor nao preenchida' + Chr(13)+Chr(10)
ENDIF

//IF EMPTY(Processos:ChvSercorp)//Chave Sercorp


// cMsg += 'Chave do Sercorp nao preenchida' + Chr(13)+Chr(10)
//ENDIF

IF EMPTY(Processos:LogData)//Data do Envio
cMsg += 'Data do envio nao preenchida' + Chr(13)+Chr(10)
ENDIF
Conout(Processos:LogData)

IF EMPTY(Processos:LogHora)//Hora do Envio
cMsg += 'Hora do envio nao preenchida' + Chr(13)+Chr(10)
ENDIF

IF EMPTY(Processos:LogUser)//Usuário do Envio
cMsg += 'Usuário do envio nao preenchido' + Chr(13)+Chr(10)
ENDIF

IF EMPTY(Processos:Invoice:Invoice)//Cod Invoice
cMsg += 'Codigo da ID Invoice nao preenchido' + Chr(13)+Chr(10)
ENDIF

IF EMPTY(Processos:Invoice:Nu_Invoice)//Cod Invoice
cMsg += 'Codigo da Nr. Invoice nao preenchido' + Chr(13)+Chr(10)
ENDIF

IF EMPTY(Processos:Invoice:Natureza)//Natureza
cMsg += 'Codigo da Natureza nao preenchido' + Chr(13)+Chr(10)
ENDIF

IF EMPTY(Processos:Invoice:CentroCusto)//Centro de Custo
cMsg += 'Codigo da Centro de Custo nao preenchido' + Chr(13)+Chr(10)
ENDIF

IF EMPTY(Processos:Invoice:ClasseValor)//Classe de Valor
cMsg += 'Codigo da Classe de Valor nao preenchido' + Chr(13)+Chr(10)
ENDIF

IF EMPTY(Processos:Invoice:ItemConta)//Item Contabil
cMsg += 'Codigo da Item Contabil nao preenchido' + Chr(13)+Chr(10)
ENDIF

IF EMPTY(Processos:Invoice:Parcela:Parcela)//Parcela
cMsg += 'Parcela da Invoice nao preenchida' + Chr(13)+Chr(10)
ENDIF

IF EMPTY(Processos:Invoice:Parcela:Evento)//Parcela
cMsg += 'Parcela da Invoice nao preenchida' + Chr(13)+Chr(10)
ENDIF

IF EMPTY(Processos:Invoice:Parcela:Tipo)//Tipo
cMsg += 'Tipo da Parcela nao preenchido' + Chr(13)+Chr(10)
ENDIF
IF EMPTY(Processos:Invoice:Parcela:Dt_Vcto)//Vencimento
cMsg += 'Data da Vencimento Parcela nao preenchida' + Chr(13)+Chr(10)
ENDIF
Conout(Processos:Invoice:Parcela:Dt_Vcto)

IF EMPTY(Processos:Invoice:Parcela:Moeda)//Moeda
cMsg += 'Moeda da Parcela nao preenchida' + Chr(13)+Chr(10)
ENDIF

//IF EMPTY(Processos:Invoice:Parcela:Taxa)//Taxa
// cMsg += 'Taxa da Moeda nao preenchida' + Chr(13)+Chr(10)
//ENDIF

IF EMPTY(Processos:Invoice:Parcela:Vl_Parcela)//Valor
cMsg += 'Valor da Parcela nao preenchido' + Chr(13)+Chr(10)
ENDIF

//Caso algum campo não esteja preenchido, cai fora das validações
IF !EMPTY(cMsg)
cStatus := "Rejeitado"
Break
ENDIF

//------------------------//
// Validações no Protheus //
//------------------------//
Conout('Vencimento')
Conout(Processos:Invoice:Parcela:Dt_Vcto)
Conout('Parcela')
Conout(Processos:Invoice:Parcela:Vl_Parcela)

//cEmp := SM0->M0_CODIGO
//cFil := SM0->M0_CODFIL

//RpcClearEnv()
//RpcSetType(3)
//RpcSetEnv(cEmp,cFil)
//E_INIT(.T.) //para criação de variáveis

cVFil :=
Upper(AVKey(Processos:Fil ,'EEQ_FILIAL')) //Filial
cVProcesso :=
Upper(AVKey(Processos:Processo ,'EEQ_PREEMB')) //Embarque
cVCliente :=
Upper(AVKey(Processos:Cliente ,'EEQ_IMPORT')) //Cliente
cVLojaCli :=
Upper(AVKey(Processos:LojaCli ,'EEQ_IMLOJA')) //Loja do
Cliente
cVFornecedor := Upper(AVKey(Processos:Fornecedor ,'EEQ_FORN'
)) //Fornecedor
cVLojaFor :=
Upper(AVKey(Processos:LojaFor ,'EEQ_FOLOJA')) //Loja do
Fornecedor
cVInvoice :=
Upper(AVKey(Processos:Invoice:Invoice ,'EEQ_NRINVO')) //Nr Invoice
cVNu_Invoice :=
Upper(AVKey(Processos:Invoice:Nu_Invoice ,'EEQ_NRINVO')) //Nr Invoice

cVNatureza :=
Upper(AVKey(Processos:Invoice:Natureza ,'EEQ_ZNATUR')) //Natureza

cCentroCusto :=
Upper(AVKey(Processos:Invoice:CentroCusto ,"CTT_CUSTO" )) //Centro de
Custo
cClasseValor := Upper(AVKey(Processos:Invoice:ClasseValor ,"CTH_CLVL"
)) //Classe de Valor
cItemConta := Upper(AVKey(Processos:Invoice:ItemConta ,"CTD_ITEM"
)) //item Contabil

cVParcela := ""
//Upper(AVKey(Processos:Invoice:Parcela:Parcela ,'EEQ_PARC' )) //Parcela
cVParcSerc :=
Upper(AVKey(Processos:Invoice:Parcela:Parcela ,'EEQ_ORIGEM' )) //Parcela

cVEvento :=
Upper(AVKey(Processos:Invoice:Parcela:Evento ,'EEQ_EVENT' )) //Parcela
cVTipo := Upper(AVKey(Processos:Invoice:Parcela:Tipo ,'EEQ_TIPO'
)) //Tipo
dVDt_Vcto := CtoD(Processos:Invoice:Parcela:Dt_Vcto)
//Vencimento
cVMoeda :=
Upper(AVKey(Processos:Invoice:Parcela:Moeda ,'EEQ_MOEDA' )) //Moeda
nVTaxa := Val(STRTRAN(Processos:Invoice:Parcela:Taxa,",","."))
//Taxa
nVVl_Parcela := Val(STRTRAN(Processos:Invoice:Parcela:Vl_Parcela,",","."))
//Valor
cVChvSercorp := Upper(Processos:ChvSercorp
) //Chave do Sercorp
cVLogHora :=
AVKey(Processos:LogHora ,'EEQ_ZLOGHR') //Hora do Envio
dVLogData := Ctod(Processos:LogData)
//Data do Envio
cVLogUser := Processos:LogUser
//Usuário do Envio

//Carrega Filiais
nRecSM0 := SM0->(RecNo())
SM0->(dbGoTop())
While !SM0->(Eof())
aAdd(aEmp,SM0->M0_CODFIL)
SM0->(DBSkip())
Enddo
SM0->(dbGoTo(nRecSM0))

//Verifica se Filial existe no Protheus


IF aScan(aEmp,cVFil) == 0

cMsg += 'Filial "' + AllTrim(cVFil) + '" nao existe no Protheus' +


Chr(13)+Chr(10)
cStatus := "Rejeitado"
Break

EndIf

cVFil := SM0->M0_CODFIL

SA1->(DBSETORDER(1))
SA2->(DBSETORDER(1))
EC6->(DBSETORDER(1))
EEQ->(DBSETORDER(4))
SYF->(DBSETORDER(1))

SED->(DBSETORDER(1))
CTT->(DBSETORDER(1))
CTD->(DBSETORDER(1))
CTH->(DBSETORDER(1))

//Verifica se o Cliente existe na SA1


IF !SA1->(DBSeek(xFilial('SA1')+cVCliente+cVLojaCli))
cMsg += 'Cliente "' + AllTrim(cVCliente) + '" nao cadastrado no Protheus'
+ Chr(13)+Chr(10)
EndIf

//Verifica se o Fornecedor existe na SA2


IF !SA2->(DBSeek(xFilial('SA2')+cVFornecedor+cVLojaFor))
cMsg += 'Fornecedor "' + AllTrim(cVFornecedor) + '" nao cadastrado no
Protheus' + Chr(13)+Chr(10)
EndIf

//Verifica se o Evento existe na EC6


IF !EC6->(DBSeek(xFilial('EC6')+AVKey('IMPORT','EC6_TPMODU')+cVEvento))
cMsg += 'Evento "' + AllTrim(cVEvento) + '" nao cadastrado no Protheus' +
Chr(13)+Chr(10)
EndIf

Vous aimerez peut-être aussi