01. DADOS GERAIS
Produto: | TOTVS Prestadores de Serviços Terceirização
|
---|---|
Linha de Produto: | Linha Protheus |
Segmento: | Serviços |
Módulo: | Prestadores de Serviços |
Função: | Não há |
País: | Brasil |
Ticket: | Não há |
Requisito/Story/Issue (informe o requisito relacionado) : | DSERSGS-10968 |
02. SITUAÇÃO/REQUISITO
Criar um gatilho para calcular o valor da próxima parcela considerando a data final digitada.
03. SOLUÇÃO
Criação de gatilho para o calculo automático do valor da próxima parcela considerando a data final digitada.
O calculo será feito quando o mês e ano da data inicial e da data final forem iguais e quando a database estiver no mesmo mês e ano da data final, realizando a proporcionalidade.
Importante
Essa implementação só será executada para contratos recorrentes(TFJ_CNTREC) e não terá efeito para itens extras.
04. DEMAIS INFORMAÇÕES
Exemplo de Uso
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):
#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 nMes := Month(FwFldGet("TFF_PERFIM")) Local nAno := Year(FwFldGet("TFF_PERFIM")) Local cCompet := "" Local cCodTFJ := FwFldGet("TFJ_CODIGO") 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 Local nValProx := FwFldGet("TFF_VLPRPA") Local cCompetAnt := At740GtPer() Local nMesAnt := 0 Local nAnoAnt := 0 Local oModel := FwModelActive() Local lAltera := .T. If !Empty(cCompetAnt) nMesAnt := Month(cCompetAnt) nAnoAnt := Year(cCompetAnt) If Len(cValToChar(nMesAnt)) == 1 cCompetAnt := "0" + cValToChar(nMesAnt) + "/" + cValToChar(nAnoAnt) Else cCompetAnt := cValToChar(nMesAnt) + "/" + cValToChar(nAnoAnt) EndIf EndIf If Len(cValToChar(nMes)) == 1 cCompet := "0" + cValToChar(nMes) + "/" + cValToChar(nAno) Else cCompet := cValToChar(nMes) + "/" + cValToChar(nAno) EndIf 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 lAltera := .F. If Year(FwFldGet("TFF_PERFIM")) <> Year(FwFldGet("TFF_PERINI")) If nDtFimMes == Day(LastDate(FwFldGet("TFF_PERFIM"))) nValor := (nValor/nDataFim)*((nDataFim-1)+1) Else nValor := (nValor/nDataFim) * nDtFimMes EndIf Else If Month(FwFldGet("TFF_PERFIM")) <> Month(FwFldGet("TFF_PERINI")) If nDtFimMes == Day(LastDate(FwFldGet("TFF_PERFIM"))) nValor := (nValor/nDataFim)*((nDataFim-1)+1) Else nValor := (nValor/nDataFim) * nDtFimMes EndIf 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")) If nDtFimMes == LastDate(FwFldGet("TFF_PERFIM")) nValor := (nValor/nDataFim)*30 Else nValor := (nValor/nDataFim)*((nDtFimMes-nDataIni)+1) EndIf Else nValor := (nValor/nDataFim) * nDtFimMes lAltera := .F. EndIf EndIf //Arredonda o valor nValor := nValor * nQtd nValor := Round(nValor,TamSX3("TFL_VLPRPA")[2]) If nValor > 0 //Atualiza o cronograma At740IAuto("TFF", FwFldGet("TFF_COD"), cCompet, nValor, cCodTFJ,cCompetAnt,nDtFimMes < Day(LastDate(FwFldGet("TFF_PERFIM")))) EndIf If !lAltera nValor := nValProx EndIf FWModelActive(oModel) 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 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.
05. ASSUNTOS RELACIONADOS