#include "PROTHEUS.ch"
User Function MNTNG()
:= .T.
Local cId := PARAMIXB[1] //Indica o momento da chamada do PE
LocalIf oWS := PARAMIXB[2] //Objeto com referência ao webservice
AttIsMemberOf( oInput, "startDate" )
Local oParser
Local aArea
Local aAreaSTJ
Local nInputaDate := 0
Local aDate
StrTokArr( oInput:startDate, " " )
Local cType
Local lIsDone
Local cTask
ElseIf Local cCode
Local nAmount
AttIsMemberOf( oInput, "date" )
Local cOrder
Local cPlan
Local aDate
Local lOk
Local cAddressaDate := ""
Local cCodBem := ""
StrTokArr( oInput:date, " " )
If cId == "CREATE_VALID_ORDER" .OR. cId == "UPDATE_VALID_ORDER" //valida inclusão e alteração da ordem
EndIf
//Bloco a seguir realiza validações dos insumos
If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json
aDate := { STOD( aDate[1] ), aDate[2] }
If AttIsMemberOf( oParser, "inputs" ) .And. Len( oParser:inputs ) > 0
cOrder := IIf( AttIsMemberOf( oParser, 'code' ), oParser:code, '' )
//Neste exemplo haverá validações somente quando informar data anterior a data atual
cPlan := IIf( AttIsMemberOf( oParser, 'plan' ), oParser:plan, '000000' )If aDate[1] >= dDatabase
//Bloco abaixo realiza validações nos insumos
Loop
For nInput := 1 To Len( oParser:inputs )EndIf
oInputcTask := oParser:inputs[ nInput ]
IIf( AttIsMemberOf( oInput , 'task'), oInput:task, '' )
cTypecCode := IIf( AttIsMemberOf( oInput , 'typecode' ), oInput:typecode, '' )
lIsDonenAmount := IIf( AttIsMemberOf( oInput , 'isDoneamount'), oInput:isDoneamount, .F.0 )
//NesteIf exemplocId haverá validações somente para produtos realizados
== "CREATE_VALID_ORDER"
IflOk cType !:= "P" .OrF. !lIsDone
Else
Loop
EndIf
aDate := { dDatabase, '08:00' }
/*Trecho abaixo verifica se o insumo já está gravado no lOkbanco
:= .T.
If AttIsMemberOf( oInput, "startDate" )
caso exista não há necessidade de validação*/
aDate := StrTokArr( oInput:startDate, dbSelectArea(" STL" )
ElseIf AttIsMemberOfdbSetOrder( oInput, "date"1 )
If !dbSeek( aDate := StrTokArr( oInput:date, " " )xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
EndIf
PADR( cPlan, Len( STL->TL_PLANO aDate) :=) {+ STODPADR( aDate[1] )cTask, aDate[2] }
Len( STL->TL_TAREFA ) ) + ;
//Neste exemplo haverá validações somente quando informar data anterior a data atualcType + PADR( cCode, Len( STL->TL_CODIGO ) ) )
If aDate[1] >= dDatabase
lOk := .F.
Loop
Else
EndIf
lOk := .F.
cTask := IIf( AttIsMemberOf( oInput , 'task'), oInput:task, '' )
//Verificação abaixo para garantir que o cCodeinsumo não existe := IIf( AttIsMemberOf( oInput , 'code'), oInput:code, '' )
no banco
nAmount := IIfWhile !STL->( AttIsMemberOf( oInput , 'amount'), oInput:amount, 0 )
Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +;
If cId == "CREATE_VALID_ORDER"
STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) lOk := .F.)+ ;
Else
PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR(
cTask, Len( STL->TL_TAREFA ) ) + ;
/*Trecho abaixo verifica se o insumo já está gravado no banco
cType + PADR( cCode, Len( STL->TL_CODIGO ) )
caso exista não há necessidade de validação*/
If Val( STL->TL_SEQRELA ) > 0 ; //verifica se é dbSelectArea("STL")
insumo realizado
dbSetOrder( 1 )
.And. nAmount == STL->TL_QUANTID //comparação de quantidade
If !dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
lOk := .T. //já está gravado e não há necessidade de validar
PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
Exit
cType + PADR( cCode, Len( STL->TL_CODIGO ) ) )
EndIf
lOk := .F. dbSelectArea("STL")
Else
dbSkip()
lOk := .F.
EndDo
//Verificação abaixo paraEndIf
garantir que o insumo não existe no banco
EndIf
While !STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +;
If !lOk
Return 'Não é permitido realizar insumos do tipo produto com a data STL->TL_TAREFAretroativa. ' + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
;
'Verifique o insumo/produto ' + cCode + ' data ' + Dtoc( PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
aDate[1] )
EndIf
Next nInput
EndIf
cType + PADR( cCode, Len( STL->TL_CODIGO ) )EndIf
ElseIf cId == "CANCEL_VALID" //valida cancelamento da ordem
If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json
If Val( STL->TL_SEQRELA ) >If 0 ; Empty( oParser:message )//verifica secampo observação éfoi insumopassado realizadovazio
Return "A observação do cancelamento é obrigatória."
EndIf
.And. nAmount == STL->TL_QUANTID //comparação de quantidadeEndIf
ElseIf cId == "FINISH_VALID_ORDER"
If FWJsonDeserialize(oWS:GetContent(), @oParser)
If Empty( oParser:observation ) //verifica campo observação foi passado vazio
Return "Campo observação deve lOkser := .T. //já está gravado e não há necessidade de validar
informado."
EndIf
EndIf
ElseIf cId == "FINISHED_ORDER"
If FWJsonDeserialize(oWS:GetContent(), @oParser)
Exit
aArea := GetArea()
EndIf
aAreaSTJ := STJ->(GetArea())
dbSelectArea("STJ")
dbSelectAreadbSetOrder("STL"1)
If dbSeek(xFilial("STJ") + oParser:order + oParser:plan)
dbSkip(Reclock("STJ", .F.)
STJ->TJ_DTPRINI := STJ->TJ_DTMRINI
EndDo
STJ->TJ_HOPRINI := STJ->TJ_HOMRINI
STJ->TJ_DTPRFIM EndIf:= STJ->TJ_DTMRFIM
STJ->TJ_HOPRFIM EndIf
:= STJ->TJ_HOMRFIM
If !lOkMsUnlock()
Endif
Return 'Não é permitido realizar insumos do tipo produto com a data retroativa. ' + ; RestArea(aAreaSTJ)
RestArea(aArea)
Endif
ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de produtos
'Verifique oReturn insumo/produto" 'AND +B1_GRUPO cCode= + ' data ' + Dtoc( aDate[1] )
97'"
ElseIf cId == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do bem
cCodBem EndIf:= PARAMIXB[3]
dbSelectArea("ST9")
Next nInputdbSetOrder(1)
If dbSeek( xFilial("ST9") + EndIf
cCodBem ) .And. !Empty( ST9->T9_CLIENTE + EndIfST9->T9_LOJACLI )
ElseIf cId == "CANCEL_VALID" //valida cancelamento da ordem
cAddress := Posicione("SA1",1,xFilial("SA1") + ST9->T9_CLIENTE If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json
+ ST9->T9_LOJACLI,"SA1->A1_END")
EndIf
Return If EmptyAlltrim( oParser:messagecAddress )//verifica campo observação foi passado vazio
ElseIf cId == 'FILTER_ORDER'
Return ' AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' Return "A observação do cancelamento é obrigatória."
) )
ElseIf cId EndIf== 'FILTER_REQUEST'
Return ' AND EndIf
TQB.TQB_DTABER = ' + ValToSQL( cToD( '24/11/2020' ) )
ElseIf cId == "'UPDATE_FINISH_VALID_ORDER"'
If FWJsonDeserializeAttIsMemberOf( oWS:GetContent(), @oParser)
If Empty( oParser:observation ) //verifica campo observação foi passado vazio
, 'counter' )
If Len( oWS:counter ) > 0
Return "Campo observação deve ser informado."
oWS:counter[1]:value EndIf
EndIf
:= 3334
ElseIf cId == "FINISHED_ORDER"
oWS:counter[1]:time If FWJsonDeserialize(oWS:GetContent(), @oParser)
:= '10:10'
EndIf
aArea := GetArea()
If Len( oWS:counter ) > 1
aAreaSTJ := STJ->(GetArea())
oWS:counter[2]:value dbSelectArea("STJ"):= 3334
dbSetOrder(1)
oWS:counter[2]:time If dbSeek(xFilial("STJ") + oParser:order + oParser:plan)
:= '10:10'
EndIf
Reclock("STJ", .F.)
EndIf
If STJ->TJ_DTPRINI := STJ->TJ_DTMRINIAttIsMemberOf( oWS, 'observation' )
STJ->TJ_HOPRINIoWS:observation := STJ->TJ_HOMRINI
'ALTERADO PELO P.E. MNTNG'
EndIf
STJ->TJ_DTPRFIM := STJ->TJ_DTMRFIMReturn oWS
EndIf
Return |