#include "PROTHEUS.ch"
User Function MNTNG()
Local cId := PARAMIXB[1] //Indica o momento da chamada do PE
Local oWS := PARAMIXB[2] //Objeto com referência ao webservice
Local oParser
Local aArea
Local aAreaSTJ
Local nInput := 0
Local aDate
Local cType
Local lIsDone
Local cTask
Local cCode
Local nAmount
Local cOrder
Local cPlan
Local aDate
Local lOk
Local cAddress := ""
Local cCodBem := ""
If cId == "CREATE_VALID_ORDER" .OR. cId == "UPDATE_VALID_ORDER" //valida inclusão e alteração da ordem
//Bloco aabaixo seguir realiza validações dosnos insumos
For IfnInput FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json
:= 1 To Len( oParser:inputs )
If AttIsMemberOf( oParser, "inputs" ) .And. Len(oInput := oParser:inputs[ )nInput > 0]
cOrder cType := IIf( AttIsMemberOf( oParseroInput , 'codetype' ), oParseroInput:codetype, '' )
cPlan lIsDone := IIf( AttIsMemberOf( oInput oParser, 'planisDone' ), oParseroInput:planisDone, '000000'.F. )
//Bloco abaixo
realiza validações nos insumos
For//Neste nInputexemplo :=haverá 1validações Tosomente Len( oParser:inputs )
para produtos realizados
If oInputcType :!= oParser:inputs[ nInput ]
"P" .Or. !lIsDone
Loop
cType := IIf( AttIsMemberOf( oInput , 'type' ), oInput:type, '' )EndIf
lIsDoneaDate := IIf( AttIsMemberOf( oInput { dDatabase, 'isDone'), oInput:isDone, .F. )
08:00' }
lOk := .T.
//Neste exemplo haverá validações somente para produtos realizados
If AttIsMemberOf( oInput, "startDate" )
If cTypeaDate !:= "P" .Or. !lIsDone StrTokArr( oInput:startDate, " " )
ElseIf AttIsMemberOf( oInput, "date" Loop)
EndIf
aDate := StrTokArr( oInput:date, " " )
aDate := { dDatabase, '08:00' }EndIf
lOkaDate := { STOD( := .T.
aDate[1] ), aDate[2] }
If AttIsMemberOf( oInput, "startDate" )
//Neste exemplo haverá validações somente quando informar data anterior a data aDateatual
:= StrTokArr( oInput:startDate, " " )
If aDate[1] >= dDatabase
ElseIf AttIsMemberOf( oInput, "date" )
Loop
aDate := StrTokArr( oInput:date, " " )
EndIf
EndIf
cTask := IIf( AttIsMemberOf( oInput , 'task'), oInput:task, '' )
aDate := { STOD( aDate[1] ), aDate[2] }
cCode := IIf( AttIsMemberOf( oInput ,
'code'), oInput:code, '' )
//Neste exemplo haveránAmount validações:= somenteIIf( quandoAttIsMemberOf( informaroInput data anterior a data atual, 'amount'), oInput:amount, 0 )
If aDate[1] >= dDatabase
cId == "CREATE_VALID_ORDER"
lOk := Loop.F.
EndIfElse
cTask := IIf(
AttIsMemberOf( oInput , 'task'), oInput:task, '' )
/*Trecho abaixo verifica cCodese o insumo :=já IIf(está AttIsMemberOf(gravado oInputno , 'code'), oInput:code, '' )
banco
nAmount := IIf( AttIsMemberOf( oInputcaso , 'amount'), oInput:amount, 0 )exista não há necessidade de validação*/
If cId == "CREATE_VALID_ORDER"dbSelectArea("STL")
lOkdbSetOrder( := .F.1 )
Else
If !dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
/*Trecho abaixo verificaPADR( secPlan, o insumo já está gravado no banco
Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
caso exista não há necessidade de validação*/
cType + PADR( cCode, Len( STL->TL_CODIGO ) ) )
dbSelectArea("STL")
dbSetOrder(lOk 1 ):= .F.
IfElse
!dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
lOk := .F.
PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) )//Verificação +abaixo ;
para garantir que o insumo não existe no banco
cType + PADR( cCode, Len(While !STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_CODIGO ) ) )PLANO +;
lOk := .F.
STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
Else
lOk := .F.
PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
//Verificação abaixo para garantir que o insumo não existe no banco
cType + PADR( cCode, Len( STL->TL_CODIGO ) )
While !STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +;
If Val( STL->TL_SEQRELA ) > 0 ; //verifica se é insumo realizado
STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
.And. nAmount == STL->TL_QUANTID //comparação de quantidade
PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
lOk := .T. //já está gravado e não há necessidade de validar
cType + PADR( cCode, Len( STL->TL_CODIGO ) )
Exit
If Val( STL->TL_SEQRELA ) > 0 ; //verifica se é insumo realizadoEndIf
dbSelectArea("STL")
.And. nAmount == STL->TL_QUANTID //comparação de quantidade
dbSkip()
lOk := .T. //já está gravado e não há necessidade de validar
EndDo
EndIf
Exit
EndIf
If EndIf!lOk
Return 'Não é permitido realizar insumos do dbSelectArea("STL")
tipo produto com a data retroativa. ' + ;
dbSkip()
'Verifique o insumo/produto ' + cCode + ' data ' + Dtoc( EndDo
aDate[1] )
EndIf
Next EndIf
nInput
EndIf
If !lOkEndIf
ElseIf cId == "CANCEL_VALID" //valida cancelamento da ordem
If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string Returnno 'Nãoformato éJson
permitido realizar insumos do tipo produto com a data retroativa. ' +If ;
Empty( oParser:message )//verifica campo observação foi passado vazio
Return "A observação do cancelamento é obrigatória."
'Verifique o insumo/produto ' + cCodeEndIf
+ ' data ' + Dtoc( aDate[1] )EndIf
ElseIf cId == "FINISH_VALID_ORDER"
If FWJsonDeserialize(oWS:GetContent(), @oParser)
If Empty( oParser:observation ) //verifica campo observação foi passado EndIf
vazio
Next nInput
Return "Campo observação deve ser informado."
EndIf
EndIf
EndIf
ElseIf cId == "CANCELFINISHED_VALIDORDER" //valida cancelamento da ordem
If FWJsonDeserialize(oWS:GetContent(), @oParser) //Parse da string no formato Json
If Empty( oParser:message )//verifica campo observação foi passado vazio
aArea Return "A observação do cancelamento é obrigatória.":= GetArea()
EndIf
aAreaSTJ := STJ->(GetArea())
EndIf
ElseIf cId == "FINISH_VALID_ORDER"
If FWJsonDeserialize(oWS:GetContent(), @oParser)
If Empty( oParser:observation ) //verifica campo observação foi passado vazio
dbSelectArea("STJ")
dbSetOrder(1)
Return "Campo observação deve ser informado."
If dbSeek(xFilial("STJ") + oParser:order + oParser:plan)
EndIf
EndIf
ElseIf cId == Reclock("FINISHED_ORDERSTJ", .F.)
If FWJsonDeserialize(oWS:GetContent(), @oParser)STJ->TJ_DTPRINI := STJ->TJ_DTMRINI
STJ->TJ_HOPRINI := STJ->TJ_HOMRINI
aArea := GetArea()
aAreaSTJSTJ->TJ_DTPRFIM := STJ->(GetArea())>TJ_DTMRFIM
dbSelectArea("STJ")
STJ->TJ_HOPRFIM := STJ->TJ_HOMRFIM
dbSetOrder(1)
MsUnlock()
If dbSeek(xFilial("STJ") + oParser:order + oParser:plan)
Endif
Reclock("STJ", .F.RestArea(aAreaSTJ)
RestArea(aArea)
STJ->TJ_DTPRINI := STJ->TJ_DTMRINI
Endif
ElseIf STJ->TJ_HOPRINI := STJ->TJ_HOMRINI
cId == "FILTER_PRODUCT" //adiciona filtro para busca de produtos
Return " AND STJ->TJB1_DTPRFIMGRUPO := STJ->TJ_DTMRFIM
'97'"
ElseIf cId == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do bem
STJ->TJ_HOPRFIM cCodBem := STJ->TJ_HOMRFIMPARAMIXB[3]
dbSelectArea("ST9")
MsUnlockdbSetOrder(1)
If dbSeek( xFilial("ST9") Endif
+ cCodBem ) .And. !Empty( ST9->T9_CLIENTE + ST9->T9_LOJACLI )
RestArea(aAreaSTJ)
cAddress := Posicione("SA1",1,xFilial("SA1") + ST9->T9_CLIENTE RestArea(aArea+ ST9->T9_LOJACLI,"SA1->A1_END")
EndifEndIf
Return
Alltrim( cAddress )
ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de produtos'FILTER_ORDER'
Return "' AND B1STJ.TJ_GRUPO = '97'"
ElseIf cId == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do bem
cCodBem := PARAMIXB[3]
DTMPINI = ' + ValToSQL( cToD( '24/11/2020' ) )
dbSelectArea("ST9")
ElseIf cId dbSetOrder(1)== 'FILTER_REQUEST'
Return ' AND TQB.TQB_DTABER If= dbSeek( xFilial("ST9") ' + cCodBem ) .And. !Empty( ST9->T9_CLIENTE + ST9->T9_LOJACLI )
ValToSQL( cToD( '24/11/2020' ) )
ElseIf cId == 'UPDATE_FINISH_ORDER'
cAddress :=If Posicione("SA1",1,xFilial("SA1") + ST9->T9_CLIENTE + ST9->T9_LOJACLI,"SA1->A1_END")AttIsMemberOf( oWS, 'counter' )
EndIf
If Return AlltrimLen( cAddressoWS:counter )
ElseIf cId == 'FILTER_ORDER' > 0
Return ' AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' ) )
oWS:counter[1]:value := 3334
ElseIf cId == 'FILTER_REQUEST'
Return ' AND TQB.TQB_DTABER = ' + ValToSQL( cToD( '24/11/2020' ) )
ElseIf cId == 'UPDATE_FINISH_ORDER oWS:counter[1]:time := '10:10'
If AttIsMemberOf( oWS, 'counter' )EndIf
If Len( oWS:counter ) > 01
oWS:counter[12]:value := 3334
oWS:counter[12]:time := '10:10'
EndIf
EndIf
If LenAttIsMemberOf( oWS:counter ) > 1
, 'observation' )
oWS:observation := 'ALTERADO PELO P.E. MNTNG'
EndIf
Return oWS:counter[2]:value := 3334oWS
EndIf
Return |