Crie o seguinte gatilho pelo configurador:
Campo | Conteúdo |
---|
Campo | TFF_PERFIM | Sequencia | 001 | Cnt. Dominio | TFF_VLPRPA | Tipo | Primário | Regra | U_ValFinal() | Posiciona | Não | Condição | U_ValidRec() |
Após a criação do gatilho, inclua as seguintes funções (user function):
Bloco de código |
---|
language | text |
---|
title | Exemplo de Uso |
---|
| #INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"
User Function ValFinal()
Local nDataIni := Day(FwFldGet("TFF_PERINI")) //dia de inicio do contrato
Local nDtFimMes := Day(FwFldGet("TFF_PERFIM")) // dia de fim do contrato
Local nDataFim := 30 // ultimo dia do mes
Local nDtPerfim := 30 // ultimo dia do mes
Local nDtIniPer := Day(FirstDate(FwFldGet("TFF_PERFIM"))) // primeiro dia do mes
Local nValor := FwFldGet("TFF_PRCVEN") // preço de venda do contrato
Local nQtd := FwFldGet("TFF_QTDVEN") // preço de venda do contrato
If isInCallStack("TECA870")
//Só realiza o calculo quando o mes e ano do periodo final for o mesmo do periodo inicial
If Month(dDataBase) == Month(FwFldGet("TFF_PERFIM")) .And. Year(dDataBase) == Year(FwFldGet("TFF_PERFIM")) .And. Month(FwFldGet("TFF_PERFIM")) <> Month(FwFldGet("TFF_PERINI"))
nValor := (nValor/nDtPerfim)*((nDtFimMes-nDtIniPer)+1)
Else
If Year(FwFldGet("TFF_PERFIM")) <> Year(FwFldGet("TFF_PERINI"))
nValor := (nValor/nDataFim)*((nDataFim-nDataIni)+1)
Else
If Month(FwFldGet("TFF_PERFIM")) <> Month(FwFldGet("TFF_PERINI"))
nValor := (nValor/nDataFim)*((nDataFim-nDataIni)+1)
Else
nValor := (nValor/nDataFim)*((nDtFimMes-nDataIni)+1)
EndIf
EndIf
EndIf
Else
If Month(FwFldGet("TFF_PERFIM")) == Month(FwFldGet("TFF_PERINI")) .And. Year(FwFldGet("TFF_PERFIM")) == Year(FwFldGet("TFF_PERINI"))
nValor := (nValor/nDataFim)*((nDtFimMes-nDataIni)+1)
Else
nValor := (nValor/nDataFim)*((nDataFim-nDataIni)+1)
EndIf
EndIf
//Arredonda o valor
nValor := nValor * nQtd
nValor := Round(nValor,TamSX3("TFL_VLPRPA")[2])
Return nValor
User Function ValidRec()
Local lRet := .F.
Local lIsRecorrente := FwFldGet("TFJ_CNTREC") == "1"
Local lIsItenExtra := FwfldGet("TFF_COBCTR") == "2"
//Só será executado para contratos recorrentes e não será executado para item extra
If lIsRecorrente .And. !lIsItenExtra .AND. Month(dDataBase) == Month(FwFldGet("TFF_PERFIM")) .And. Year(dDataBase) == Year(FwFldGet("TFF_PERFIM"))
lRet := .T.
EndIf
Return lRet |
A função ValidRec() é criada para garantir que o gatilho não vai ser executado para contratos não recorrentes e itens extras
Se a condição criada for positiva, o gatilho será chamado e o calculo será feito. Com isso o valor da próxima parcela será reajustado quando o mês e ano do período final for o mesmo do período inicial, realizando o calculo proporcional, caso o mês e ano for diferente do período inicial, o calculo será ajustado para verificar somente o período inicial, ou seja, vai realizar o mesmo calculo para o gatilho existente no período inicial. |