#INCLUDE "PROTHEUS.CH" #INCLUDE "FWMVCDEF.CH" User Function CalcValor() Local aAreaTFF := TFF->(GetArea()) // Salva area Local nDataIni := Day(dDataBase) Local nMes := Month(dDataBase) Local nAno := Year(dDataBase) Local dDataIniCtr := cTod("") Local dDataFimCtr := cTod("") Local cCompet := "" Local cCodTFJ := "" Local cCodTFF := "" Local nDataFim := 30 //Qtd de dias para calculo do Vlr dia. Local nValor := 0 Local nQtd := 0 Local nDtFimMes := Day(dDataBase) Local cCompetAnt := "" Local nMesAnt := 0 Local nAnoAnt := 0 Local oModel := FwModelActive()
If IsInCallStack("AT870Antco") dDataIniCtr := PARAMIXB[1] dDataFimCtr := PARAMIXB[2] nDataIni := Day(dDataIniCtr) //dia de inicio do contrato nDtFimMes := Day(dDataFimCtr) // dia de fim do contrato nMes := Month(dDataFimCtr) nAno := Year(dDataFimCtr) cCodTFJ := PARAMIXB[3] nValor := PARAMIXB[4] // preço de venda do contrato nQtd := PARAMIXB[5] // preço de venda do contrato cCompetAnt := PARAMIXB[6] cCodTFF := PARAMIXB[7] Else dDataIniCtr := FwFldGet("TFF_PERINI") dDataFimCtr := FwFldGet("TFF_PERFIM") nDataIni := Day(dDataIniCtr) //dia de inicio do contrato nDtFimMes := Day(dDataFimCtr) // dia de fim do contrato nMes := Month(dDataFimCtr) nAno := Year(dDataFimCtr) cCodTFJ := FwFldGet("TFJ_CODIGO") nValor := FwFldGet("TFF_PRCVEN") // preço de venda do contrato nQtd := FwFldGet("TFF_QTDVEN") // preço de venda do contrato cCompetAnt := At740GtPer() cCodTFF := FwFldGet("TFF_COD") EndIf
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 Month(dDataFimCtr) == Month(dDataIniCtr) .And. Year(dDataFimCtr) == Year(dDataIniCtr) nValor := (nValor/nDataFim)*((nDtFimMes-nDataIni)+1) Else nValor := (nValor/nDataFim)*((nDataFim-nDataIni)+1) EndIf //Arredonda o valor nValor := nValor * nQtd nValor := Round(nValor,TamSX3("TFL_VLPRPA")[2]) //Atualiza o cronograma At740IAuto("TFF", cCodTFF, cCompet, nValor, cCodTFJ,cCompetAnt,nDataIni > 1) FWModelActive(oModel)
RestArea(aAreaTFF)
Return nValor User Function Condicao() 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. Day(FwFldGet("TFF_PERFIM")) != 1 lRet := .T. EndIf Return lRet
Veja abaixo de uma forma mais detalhada como será feito o calculo do valor da próxima parcela Valor do Posto é de R$4.500,00 O dia de inicio do posto é 15/04/2021 O calculo a ser feito será ((4500 / 30) * (30-15)+1 ) ((150) * (16)) = 2400 onde o resultado do valor da próxima parcela será de R$2.400,00 A quantidade de dias é 16, pois contamos o dia de inicio, ou seja, do dia 15 ao dia 30 tem 16 dias se contarmos o dia 15. |
A função Condição() é 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 ao ser informado uma data de inicio do contrato(TFF_PERINI), o calculo será feito conforme o dia e o valor(TFF_PRCVEN).
|