01. DADOS GERAIS
| Produto: | | Solucoes_totvs |
|---|
| Solucao | TOTVS Prestadores de Serviços Terceirização |
|---|
|
| Solucoes_totvs_parceirosexptotvs |
|---|
|
|
|---|
| Linha de Produto: | | Linhas_totvs |
|---|
| Segmento | Distribuição |
|---|
| Region | Construção Projetos |
|---|
| Linha | Linha Protheus |
|---|
|
|
|---|
| Segmento: | |
|---|
| Módulo: | Prestadores de Serviços Terceirização |
|---|
| Função: | TECA740.PRW |
|---|
| Ticket: | Não há |
|---|
| Requisito/Story/Issue (informe o requisito relacionado) : | DSERSGS-10241 |
|---|
02. SITUAÇÃO/REQUISITO
Ao gerar um orçamento de serviço, o calculo para a primeira parcela de um contrato é necessário que o mesmo seja informado manualmente.
03. SOLUÇÃO
Criação de gatilho para o calculo automático do valor da primeira parcela, quando é informado o período inicial.
| Aviso |
|---|
|
Essa implementação só será executada para contratos recorrentes(TFJ_CNTREC) e não terá efeito para itens extras. |
| Informações |
|---|
|
Crie o seguinte gatilho pelo configurador. Image Modified
Campo | Conteúdo |
|---|
| Campo | TFF_PERINI | | Sequencia | 001 | | Cnt. Dominio | TFF_VLPRPA | | Tipo | Primário | | Regra | U_CalcValor() | | Posiciona | Não | | Condicao | U_Condicao() |
Após a criação do gatilho, inclua as seguintes funções (user function).
| Bloco de código |
|---|
| | theme | Eclipse |
|---|
| linenumbers | true |
|---|
| #INCLUDE #INCLUDE "PROTHEUS.CH"
#INCLUDE #INCLUDE "FWMVCDEF.CH"
User Function CalcValor()
Local aAreaTFF := TFF->(GetArea()) // Salva area
Local nDataIni := Day(FwFldGet("TFF_PERINI")) //dia de inicio do contrato(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 := FwFldGet("TFF_PRCVEN") // 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(dDataIniCtr)
nAno := Year(dDataIniCtr)
cCodTFJ := PARAMIXB[3]
nValor := PARAMIXB[4] // preço de venda do contrato
Local nQtd nQtd := FwFldGet("TFF_QTDVEN")PARAMIXB[5] // preço de venda do contrato
Local nDtFimMes
cCompetAnt := PARAMIXB[6]
cCodTFF := PARAMIXB[7]
Else
dDataIniCtr := Day(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(dDataIniCtr)
If Month( nAno := Year(dDataIniCtr)
cCodTFJ := FwFldGet("TFJ_CODIGO")
nValor := FwFldGet("TFF_PERFIM")) == Month(PRCVEN") // preço de venda do contrato
nQtd := FwFldGet("TFF_QTDVEN") // preço de venda do contrato
cCompetAnt := At740GtPer()
cCodTFF := FwFldGet("TFF_PERINICOD")
EndIf
If !Empty(cCompetAnt) .And. Year(FwFldGet("TFF_PERFIM")) == Year(FwFldGet("TFF_PERINI"))
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
|
| Informações |
|---|
| 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).
|
05. ASSUNTOS RELACIONADOS
...