Árvore de páginas


01. DADOS GERAIS

Produto:

TOTVS Backoffice

Linha de Produto:

Linha Protheus

Segmento:

Serviços

Módulo:Ativo Fixo - SIGAAT
Função:WFATFA125 - Solicitação de baixa aprovação via Workflow
País:Brasil
Ticket:Interno
Requisito/Story/Issue:DSERCTR1-33424


02. SITUAÇÃO/REQUISITO

Esse ponto de entrada é referente ao fonte descontinuado do workflow da rotina de solicitação de baixa, e seu objetivo é realizar as aprovações ou rejeições via FLUIG com envio ao Protheus.

03. SOLUÇÃO

Foi transformado função em RDMAKE/PE para uso e customização dos clientes, vale ressaltar que foi disponibilizado um exemplo usual para uso simples e quaisquer alterações são de autoria do cliente que o utiliza.

IMPORTANTE!

Vale ressaltar que esse fonte tornou-se um PE/RDMAKE por processo de descontinuação.

04. DEMAIS INFORMAÇÕES


Exemplificação

Exemplo do PE que será utilizado
#Include 'Protheus.ch'
#Include 'FWMVCDef.ch'
#Include 'WFATFA125.ch'

#DEFINE CODIGO	2
#DEFINE CAMPO		1

//-------------------------------------------------------------------
/*/{Protheus.doc} ModelDef
Modelo de dados da Solicitação da Baixa do Ativo 
@author Lucas de Oliveira
@since 13/02/2014
@version 1.0	
/*/
//-------------------------------------------------------------------
Static Function ModelDef()
Local oModel		:= MPFormModel():New('DWFATFA125' ,/*PreValidacao*/, {|oModel| WATF125Vld(oModel)}, {|oModel| WATF125Grv(oModel)},/*bCancel*/ )
Local oStruSNM	:= FWFormStruct(1,'SNM')
Local aSNMTRB		:= {}
Local nX

oStruSNM:AddField(STR0001, STR0002, "NM_APRVSOL", "C", 1, 1, /* bValid */, /* bWhen */, {'', '1='+STR0003,'2='+STR0004}, .T., /* cFolder */, /* cGroup */, /* aComboValues */, /* nMaxLenCombo */)//"Aprovar?"##"Aprovar solicitação"##"SIM"##"NÃO"
oStruSNM:AddField(STR0005, STR0006, "NM_VORIG1", "N", 16, 2, /* bValid */, /* bWhen */, , .F., /* cFolder */, /* cGroup */, /* aComboValues */, /* nMaxLenCombo */)//"Vlr. Ativo"##"Valor Ativo na moeda 1"
oStruSNM:AddField(STR0007, STR0008, "NM_VRDACM1", "N", 16, 2, /* bValid */ , /* bWhen */, , .F., /* cFolder */, /* cGroup */, /* aComboValues */, /* nMaxLenCombo */)//"Dep. Acumulada"##"Depreciação Acumulada na moeda 1"
oStruSNM:AddField(STR0009, STR0010, "NM_VALATU", "N", 16, 2, /* bValid */, /* bWhen */, , .F., /* cFolder */, /* cGroup */, /* aComboValues */, /* nMaxLenCombo */)//"Vlr. Atual"##"Valor atualizado"
oStruSNM:AddField("Hist. Rejeic", "", "NM_HISTREJ", "C", 80,, /* bValid */, /* bWhen */, , .F., /* cFolder */, /* cGroup */, /* aComboValues */, /* nMaxLenCombo */)//"Vlr. Atual"##"Valor atualizado"
oStruSNM:AddField("usuario solicitante/aprovador", "", "NM_USRSOL", "C", 6,, /* bValid */, /* bWhen */, , .F., /* cFolder */, /* cGroup */, /* aComboValues */, /* nMaxLenCombo */)//"Vlr. Atual"##"Valor atualizado"

oModel:SetDescription(STR0011)//'Solicitação de Baixa do Ativo'

oModel:AddFields('SNMMASTER',/*cOwner(Pai)*/,oStruSNM)

oModel:GetModel('SNMMASTER'):SetDescription(STR0011)//'Solicitação de Baixa do Ativo'

oModel:SetActivate( {|oModel| WFAT125ACT(oModel) } )

Return oModel


//-------------------------------------------------------------------
/*/{Protheus.doc} ViewDef
Visualizador de dados da Solicitação da Baixa do Ativo
@author Lucas de Oliveira
@since 13/02/2014
@version 1.0	
/*/
//-------------------------------------------------------------------
Static Function ViewDef()
Local oModel		:=	FWLoadModel('WFATFA125')
Local oStruSNMA	:= FWFormStruct(2, 'SNM', {|cCampo| AllTrim(cCampo) $ "NM_APRVSOL|NM_USRAPV|NM_NMUSAPV|NM_HISTREJ"})
Local oStruSNMS	:= FWFormStruct(2, 'SNM', {|cCampo| AllTrim(cCampo) $ "NM_VORIG1|NM_VRDACM1|NM_VALATU|NM_CODIGO|NM_DATSOL|NM_CBASE|NM_ITEM|NM_TIPO|NM_DESCBEM|NM_HISTSOL|NM_USRSOL|NM_NMUSSOL|NM_TIPOSOL|NM_GRUPO|NM_MOTBX|NM_QTDBX|NM_VLRBAIX|NM_VLVENDA|NM_HORSOL|NM_GERANF|NM_SITSOL"})
Local oView
Local nX,nY,nZ
Local aSNMTRB		:=	{}

oStruSNMS:SetNoFolder()
oStruSNMA:SetNoFolder()

oStruSNMA:AddField( 'NM_APRVSOL', '61', STR0001, STR0002, /* aHelp */, 'C', '@!', NIL, '', .T., NIL, NIL, {'', '1='+STR0003,'2='+STR0004}, NIL, NIL, .T., NIL/*, lInsertLine*/ )
oStruSNMS:AddField( 'NM_VORIG1', '80', STR0005, STR0006, /* aHelp */, 'N', '@E 9,999,999,999,999.99', NIL, '', .T., NIL, NIL, , NIL, NIL, .T., NIL/*, lInsertLine*/ )
oStruSNMS:AddField( 'NM_VRDACM1', '81', STR0007, STR0008, /* aHelp */, 'N', '@E 9,999,999,999,999.99', NIL, '', .T., NIL, NIL, , NIL, NIL, .T., NIL/*, lInsertLine*/ )
oStruSNMS:AddField( 'NM_VALATU', '82', STR0009, STR0010, /* aHelp */, 'N', '@E 9,999,999,999,999.99', NIL, '', .T., NIL, NIL, , NIL, NIL, .T., NIL/*, lInsertLine*/ )

oView := FWFormView():New()
oView:SetModel(oModel)

//oView:AddField('VIEW_SNM',oStruSNM,'SNMMASTER')
oView:AddField('VIEW_SNMS', oStruSNMS,'SNMMASTER' )
oView:AddField('VIEW_SNMA', oStruSNMA,'SNMMASTER' )

oView:CreateFolder('FLD_SNM')
oView:AddSheet('FLD_SNM','FLD_SOL',STR0012)//'Solicitação de Baixa do Ativo'
oView:AddSheet('FLD_SNM','FLD_APR',STR0013)//'Aprovação'

//oView:CreateHorizontalBox( 'SUP_SNM', 100)
oView:CreateHorizontalBox( 'BOX_SOL' ,100, /*owner*/, /*lUsePixel*/, 'FLD_SNM', 'FLD_SOL')
oView:CreateHorizontalBox( 'BOX_APR' ,100, /*owner*/, /*lUsePixel*/, 'FLD_SNM', 'FLD_APR')


//oView:SetOwnerView('VIEW_SNM','SUP_SNM')
oView:SetOwnerView('VIEW_SNMS','BOX_SOL')
oView:SetOwnerView('VIEW_SNMA','BOX_APR')

//oView:EnableTitleView('VIEW_SNM')

aSNMTRB := SNM->( DbStruct() )

For nX := 1 To Len( aSNMTRB )
	If	!aSNMTRB[nX][CAMPO] $ "NM_APRVSOL|NM_HISTREJ"
		For nY := 1 To Len( oStruSNMS:AFIELDS) 
			If oStruSNMS:AFIELDS[nY][CAMPO] == aSNMTRB[nX][CAMPO]
				oStruSNMS:SetProperty( aSNMTRB[nX][CAMPO] , MVC_VIEW_CANCHANGE, .F.)
			EndIf
		Next nY
		
		For nZ	:= 1 To Len(oStruSNMA:AFIELDS)
			If oStruSNMA:AFIELDS[nZ][CAMPO] == aSNMTRB[nX][CAMPO]
				oStruSNMA:SetProperty( aSNMTRB[nX][CAMPO] , MVC_VIEW_CANCHANGE, .F.)
			EndIf
		Next nZ
	EndIf
Next nX

oStruSNMS:SetProperty( 'NM_HISTSOL'	, MVC_VIEW_CANCHANGE, .F.)
oStruSNMS:SetProperty( 'NM_VORIG1'		, MVC_VIEW_CANCHANGE, .F.)
oStruSNMS:SetProperty( 'NM_VRDACM1'	, MVC_VIEW_CANCHANGE, .F.)
oStruSNMS:SetProperty( 'NM_VALATU'		, MVC_VIEW_CANCHANGE, .F.)

Return oView

//-------------------------------------------------------------------
/*/{Protheus.doc} WFATFA125
Cria Workflow de aprovação da solicitação da baixa do ativo no Fluig
@author Lucas de Oliveira
@since 13/02/2014
@version 1.0	
/*/
//-------------------------------------------------------------------
User Function WFATFA125()
Local	oBrowse:= FWmBrowse():New()
Local	aRetWF		:= {}
Local 	cUserFluig	:= PARAMIXB[1]
local 	cCodigoSol	:= PARAMIXB[2]
Local	oModel := FWLoadModel('WFATFA125')
Local	oModSNM := oModel:GetModel('SNMMASTER')
 
dbSelectArea( "SNM" )
SNM->( dbSetOrder(1) )
If SNM->( dbSeek( xFilial( "SNM" ) + cCodigoSol ) ) // Filial+NM_CODIGO
	
	oModel:SetOperation(4)
	oModel:Activate()

	
	aRetWF	:= StartProcess( 'SOLBXAT', cUserFluig ) //StartProcess(Codigo do Processo, Usuário responsável)
	cWFID	:=	AllTrim( Str( aRetWF[1] ) )
	
	
	If cWFID != "0" .AND. cWFID != "" .AND. cWFID != Nil
		Begin Transaction
			dbSelectArea( "SNM" )
			SNM->( dbSetOrder(1) )
			SNM->( dbSeek( xFilial( "SNM" ) + cCodigoSol ) )
			
			While SNM->NM_FILIAL == xFilial( "SNM" ) .And. SNM->NM_CODIGO == cCodigoSol
				RecLock( "SNM", .F. )
				SNM->NM_WFID := cWFID
				SNM->( dbSkip() )
				SNM->( MsUnLock() )
			EndDo
		End Transaction
	EndIf
	
EndIf

Return


//-------------------------------------------------------------------
/*/{Protheus.doc} WATF125Vld
Valida o formulário da Solicitação da baixa de ativo
@author Lucas de Oliveira
@since 13/02/2014
@version 1.0	
/*/
//-------------------------------------------------------------------
Static Function WATF125Vld(oModel)
Local lRet			:= .T.
Local cOpc			:= oModel:GetValue('SNMMASTER' , 'NM_APRVSOL')
Local oModSNM		:= oModel:GetModel('SNMMASTER')

Local cHistRej

If cOpc == ''

	lRet := .F.
	Help(" ",1,"WATF125APV",,STR0014 ,1,0) //"Campo Aprovar? não foi preenchido."

ElseIf cOpc == '2'

	oModSNM:GetStruct():SetProperty('NM_HISTREJ', MODEL_FIELD_OBRIGAT,.T.)
	oModSNM:SetValue("NM_HISTREJ","Rejeitada")
	cHistRej := oModel:GetValue('SNMMASTER' , 'NM_HISTREJ')
	If Empty(cHistRej)
		lRet := .F.
		Help(" ",1,"WATF125HIS",,STR0015,1,0) //"Campo Histórico de rejeição não foi preenchido."
	EndIf

EndIf

Return lRet

//-------------------------------------------------------------------
/*/{Protheus.doc} WATF125Grv
Grava aprovação da Solicitação da baixa de ativo
@author Lucas de Oliveira
@since 13/02/2014
@version 1.0	
/*/
//-------------------------------------------------------------------
Static Function WATF125Grv(oModel)
Local lRet 		:= .F.
Local cCodSol    	:= "" 
Local dDtApvRej	:= dDataBase
Local dHrApvRej	:= StrTran( Left( Time(), 5), ':', '' )
Local cObs			:= oModel:GetValue('SNMMASTER' , 'NM_HISTREJ')
Local cOpc		 	:= oModel:GetValue('SNMMASTER' , 'NM_APRVSOL')
Local cCodApvRej 	:= oModel:GetValue('SNMMASTER' , 'NM_CDHREJ')
// Local cUsrSol	 	:= oModel:GetValue('SNMMASTER' , 'NM_USRSOL')
Local cCDAPROV   	:= iif(empty( oModel:GetValue('SNMMASTER' , 'NM_USRAPV') ), SNM->NM_USRSOL, oModel:GetValue('SNMMASTER' , 'NM_USRAPV') )
Local cCodSol 	:= oModel:GetValue('SNMMASTER' , 'NM_CODIGO') 

dbSelectArea( "SNM" )
SNM->( dbSetOrder(1) )


If SNM->( dbSeek( xFilial("SNM") + cCodSol ) )
	
	cCodSol 	:= oModel:GetValue('SNMMASTER' , 'NM_CODIGO') 
	cWFID		:= SNM->NM_WFID
	
	If cOpc == '1'  // Aprovar
		
		lLiberou := ATFA126Grava( 3, .T. )	//FUNCAO QUE IRA FAZER A BAIXA E DEMAIS PROCESSOS
		
		If lLiberou
			
			dbSelectArea( "SNM" )
			SNM->( dbSetOrder(1) )
			SNM->( dbSeek( xFilial( "SNM" ) + cCodSol ) )
			
			While SNM->(!EOF()) .AND. xFilial( "SNM" ) + cCodSol == SNM->NM_FILIAL + SNM->NM_CODIGO
				RecLock( "SNM", .F. )							
				SNM->NM_USRAPV	:=	cCDAPROV
				SNM->NM_DTAPVRE	:=	dDtApvRej
				SNM->NM_HRAPVRE	:=	dHrApvRej
				SNM->NM_CDHREJ 	:=	cCodApvRej
				SNM->NM_SITSOL	:=	"2"							
				SNM->( MsUnlock() )							
				SNM->( dbSkip() )
			EndDo
			lRet := .T.
		EndIf
		
	ElseIf cOpc == '2' // Rejeitar
							
		dbSelectArea( "SNM" )
		SNM->( dbSetOrder(1) )
		SNM->( dbSeek( xFilial("SNM") + cCodSol ) )					
						
		While SNM->(!EOF()) .AND. xFilial( "SNM" ) + cCodSol == SNM->NM_FILIAL + SNM->NM_CODIGO
			RecLock( "SNM", .F. )
			SNM->NM_USRAPV	:= cCDAPROV
			SNM->NM_DTAPVRE	:= dDtApvRej
			SNM->NM_HRAPVRE	:= dHrApvRej
			SNM->NM_CDHREJ 	:= cCodApvRej
			SNM->NM_SITSOL	:= "3"
			MSMM( SNM->NM_CDHREJ, , , cObs, 1, , ,"SNM", "NM_CDHREJ" )	
			SNM->( MsUnlock() )						
			SNM->( dbSkip() )
		EndDo
		lRet := .T.
	EndIf
EndIf


Return lRet

//-------------------------------------------------------------------
/*/{Protheus.doc} WFAT125ACT
Inicialização padrão dos campos virtuais do workflow
@author Lucas de Oliveira
@since 13/02/2014
@version 1.0	
/*/
//-------------------------------------------------------------------
Static Function WFAT125ACT(oModel)
Local nRet := 0
Local aArea := GetArea()
Local nValOrig := 0
Local nValDepr := 0
Local nValAltu := 0
Local oModelSNM := oModel:GetModel('SNMMASTER')
SN3->(dbSetOrder(1))
If SN3->(dbSeek( xFilial("SN3") + SNM->NM_CBASE + SNM->NM_ITEM + SNM->NM_TIPO ))
	nValOrig := SN3->N3_VORIG1
	nValDepr := SN3->N3_VRDACM1
	nValAltu := nValOrig - nValDepr

	oModelSNM:LoadValue("NM_VORIG1",nValOrig)
	oModelSNM:LoadValue("NM_VRDACM1",nValDepr)
	oModelSNM:LoadValue("NM_VALATU",nValAltu)
	
EndIf

RestArea(aArea)
Return nRet

Observação: Não deve ser colocado o ID do MVC com o mesmo nome do fonte, conforme o exemplo informado DWFATFA125.

Outro ponto importante é que o ponto de entrada só ira funcionar se estiver compilado como user function e o parâmetro MV_ATFWBX estiver igual à 2 e o MV_ATFRESP preenchido.


ZIP com fontes pertinentes

WFATFA125.zip


Parâmetros:

Parâmetro

Tipo

Descrição

Obrigatório

PARAMIXB[1]Caractere

Usuário do fluig validado e utilizado no envio

Sim
PARAMIXB[1]CaractereCódigo da solicitaçãoSim


Retorno:

Retorno

Tipo

Descrição

Obrigatório

LógicoN/ANão se aplicaNão






05. ASSUNTOS RELACIONADOS