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