#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
If cId == "CREATE_VALID_ORDER" .OR. cId == "UPDATE_VALID_ORDER" //valida inclusão e alteração da ordem
//Bloco a seguir realiza validações dos insumos
If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json:= IIf( AttIsMemberOf( oParser, 'plan' ), oParser:plan, '000000' )
//Bloco abaixo realiza validações nos insumos
For nInput := 1 To Len( oParser:inputs )
oInput := oParser:inputs[ nInput ]
cType := IIf( AttIsMemberOf( oInput , 'type' ), oInput:type, '' )
lIsDone := IIf( AttIsMemberOf( oInput , 'isDone'), oInput:isDone, .F. )
//Neste exemplo haverá validações somente para produtos realizados
If cType != "P" .Or. !lIsDone
Loop
EndIf
aDate := { dDatabase, '08:00' }
lOk := .T.
If AttIsMemberOf( oInput, "startDate" )
aDate := StrTokArr( oInput:startDate, " " )
ElseIf AttIsMemberOf( oInput, "date" )
aDate := StrTokArr( oInput:date, " " )
EndIf
aDate := { STOD( aDate[1] ), aDate[2] }
//Neste exemplo haverá validações somente quando informar data anterior a data atual
If aDate[1] >= dDatabase
Loop
If AttIsMemberOf( oParser, "inputs" ) .And. Len( oParser:inputs ) > 0
EndIf
cTask cOrder := IIf( AttIsMemberOf( oParseroInput , 'codetask' ), oParseroInput:codetask, '' )
cPlan cCode := IIf( AttIsMemberOf( oInput oParser, 'plancode' ), oParseroInput:plancode, '000000' )
//Bloco abaixo realiza validações nosnAmount insumos
:= IIf( AttIsMemberOf( oInput , For nInput := 1 To Len( oParser:inputs'amount'), oInput:amount, 0 )
If oInputcId :== oParser:inputs[ nInput ]
"CREATE_VALID_ORDER"
cType lOk := IIf( AttIsMemberOf( oInput , 'type' ), oInput:type, '' )
.F.
Else
lIsDone := IIf( AttIsMemberOf( oInput , 'isDone'), oInput:isDone, .F. )
/*Trecho abaixo verifica se o insumo já está gravado no banco
//Neste exemplo haverá validações somente para produtos realizados
caso exista não há necessidade de Ifvalidação*/
cType != "P" .Or. !lIsDone
dbSelectArea("STL")
Loop
dbSetOrder( 1 EndIf
)
aDate := { dDatabase, '08:00' }
If !dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
lOk := .T.
PADR( IfcPlan, AttIsMemberOfLen( oInput, "startDate"STL->TL_PLANO ) )
+ PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
aDate := StrTokArr( oInput:startDate, " " )
cType + PADR( cCode, ElseIf AttIsMemberOf( oInput, "date"Len( STL->TL_CODIGO ) ) )
aDate := StrTokArr( oInput:date, "lOk " ):= .F.
EndIf
Else
aDate := { STOD( aDate[1] ), aDate[2] }
lOk := .F.
//NesteVerificação exemploabaixo haverápara validaçõesgarantir somenteque quandoo informarinsumo datanão anteriorexiste ano data atual
banco
If aDate[1] >= dDatabase
While !STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +;
Loop
EndIf
STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ cTask;
:= IIf( AttIsMemberOf( oInput , 'task'), oInput:task, '' )
cCode := IIf( AttIsMemberOfPADR( oInput cPlan, 'code'), oInput:code, '' )
Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
nAmount := IIf( AttIsMemberOf( oInput , 'amount'), oInput:amount, 0 )
If cIdcType == "CREATE_VALID_ORDER"
+ PADR( cCode, Len( STL->TL_CODIGO ) )
lOk := .F.
If Val( STL->TL_SEQRELA ) > 0 ; //verifica se Else
é insumo realizado
.And. nAmount == STL->TL_QUANTID //comparação de quantidade
/*Trecho abaixo verifica se o insumo já está gravado no banco
lOk := .T. //já está gravado casoe exista não há necessidade de validação*/
validar
dbSelectArea("STL")
Exit
dbSetOrder( 1 )
EndIf
If !dbSeek( xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
dbSelectArea("STL")
PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;dbSkip()
EndDo
cType + PADR( cCode, Len( STL->TL_CODIGO ) ) )
EndIf
lOk := .F.EndIf
ElseIf !lOk
Return 'Não é lOk := .F.
permitido realizar insumos do tipo produto com a data retroativa. ' + ;
//Verificação abaixo para garantir que o insumo não existe no banco
'Verifique o insumo/produto ' + cCode + ' data ' + Dtoc( aDate[1] )
While !STL->( Eof() ) .AND. STL->TL_FILIAL + STL->TL_ORDEM + STL->TL_PLANO +;
EndIf
Next nInput
STL->TL_TAREFA + STL->TL_TIPOREG + STL->TL_CODIGO == xFilial('STL') + PADR( cOrder, Len( STL->TL_ORDEM ) )+ ;
EndIf
EndIf
ElseIf cId == "CANCEL_VALID" //valida cancelamento da ordem
If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json
If Empty( PADR( cPlan, Len( STL->TL_PLANO ) ) + PADR( cTask, Len( STL->TL_TAREFA ) ) + ;
oParser:message )//verifica campo observação foi passado vazio
Return "A observação do cancelamento é obrigatória."
EndIf
EndIf
cType + PADR( cCode, Len( STL->TL_CODIGO ) )
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 ser informado."
If Val( STL->TL_SEQRELA ) > 0 ; //verifica se é insumo realizado EndIf
EndIf
ElseIf cId == "FINISHED_ORDER"
If FWJsonDeserialize(oWS:GetContent(), @oParser)
.And. nAmount == STL->TL_QUANTID //comparação de quantidade
aArea := GetArea()
aAreaSTJ := STJ->(GetArea())
lOk := .T. //já está gravado e não há necessidade de validar
dbSelectArea("STJ")
dbSetOrder(1)
If dbSeek(xFilial("STJ") + oParser:order + oParser:plan)
Exit
Reclock("STJ", .F.)
STJ->TJ_DTPRINI := STJ->TJ_DTMRINI
EndIf
STJ->TJ_HOPRINI := STJ->TJ_HOMRINI
STJ->TJ_DTPRFIM := STJ->TJ_DTMRFIM
dbSelectArea("STL")
STJ->TJ_HOPRFIM := STJ->TJ_HOMRFIM
dbSkipMsUnlock()
Endif
EndDoRestArea(aAreaSTJ)
RestArea(aArea)
Endif
EndIf
ElseIf cId == "FILTER_PRODUCT" //adiciona filtro para busca de produtos
EndIf
Return " AND B1_GRUPO = '97'"
ElseIf cId == "DESCRIPTION_LOCALIZATION" // Altera descrição de localização do If !lOkbem
cCodBem := PARAMIXB[3]
dbSelectArea("ST9")
Return 'Não é permitidodbSetOrder(1)
realizar insumos do tipo produto com a dataIf retroativa. 'dbSeek( xFilial("ST9") + ;
cCodBem ) .And. !Empty( ST9->T9_CLIENTE + ST9->T9_LOJACLI )
cAddress := Posicione("SA1",1,xFilial("SA1") + ST9->T9_CLIENTE + ST9->T9_LOJACLI,"SA1->A1_END")
'Verifique o insumo/produto ' + cCode + ' data ' + Dtoc( aDate[1] )
EndIf
EndIf
Return Alltrim( cAddress )
ElseIf cId == 'FILTER_ORDER'
Return ' AND STJ.TJ_DTMPINI = ' + ValToSQL( cToD( '24/11/2020' ) )
ElseIf cId == 'FILTER_REQUEST'
Next nInput
Return ' AND TQB.TQB_DTABER = ' + ValToSQL( cToD( '24/11/2020' ) EndIf)
ElseIf cId == 'UPDATE_FINISH_ORDER'
EndIf
ElseIf cIdIf == "CANCEL_VALID" //valida cancelamento da ordem
AttIsMemberOf( oWS, 'counter' )
If FWJsonDeserialize(oWS:GetContent(),@oParser) //Parse da string no formato Json
If Len( oWS:counter ) > 0
If Empty( oParser:message )//verifica campo observação foi passado vazio
oWS:counter[1]:value := 3334
Return "A observação do cancelamento é obrigatória."
oWS:counter[1]:time EndIf:= '10:10'
EndIf
ElseIf cId == "FINISH_VALID_ORDER"
If FWJsonDeserialize(oWS:GetContent(), @oParser)
If Empty( oParser:observation ) //verifica campo observação foi passado vazio
EndIf
If Len( oWS:counter ) > 1
Return "Campo observação deve ser informado."
EndIf
EndIf
ElseIf cId == "FINISHED_ORDER" oWS:counter[2]:value := 3334
If FWJsonDeserialize(oWS:GetContent(), @oParser)
counter[2]:time := '10:10'
EndIf
aArea := GetArea() EndIf
If AttIsMemberOf( aAreaSTJ := STJ->(GetArea())
oWS, 'observation' )
oWS:observation := 'ALTERADO PELO dbSelectArea("STJ")
P.E. MNTNG'
EndIf
dbSetOrder(1)
Return oWS
EndIf
If dbSeek(xFilial("STJ") + oParser:order + oParser:plan)
Reclock("STJ", .F.)
STJ->TJ_DTPRINI := STJ->TJ_DTMRINI
STJ->TJ_HOPRINI := STJ->TJ_HOMRINI
STJ->TJ_DTPRFIM := STJ->TJ_DTMRFIM
STJ->TJ_HOPRFIM := STJ->TJ_HOMRFIM
MsUnlock()
Endif
Return |