Histórico da Página
...
Ao revisar um contrato recorrente, na tela de revisão como mostra a seguir, em outras ações, selecionando o botão ajuste retroativo, é exibida uma tela.
Os campos Função, Escala e Apurado em são filtros para aplicar o reajuste nos itens de RH(TFF), caso nenhum deles forem informados todas as linhas serão consideradas para a aplicação do reajuste.
Para os campos Percentual e Multiplicador, o calculo para o valor de venda do item de RH será explicado abaixo:
Exemplo:
Percentual = 10%
Multiplicador = 2
...
TFF_PRCVEN = 11.000
...
title | Demais informações |
---|
...
A opção "Em todos os locais" indica se o cálculo deve ser feito para todos os locais com suas TFF´s, ou seja, caso seja informado o campo com o valor Sim, todos os itens de RH(TFF) de todos os locais do orçamento serão considerados, se o valor informado for Não, somente os itens de RH(TFF) do local posicionado será considerado.
O campos agrupados na opção "Alteração de Quantidade" são referentes a alteração de quantidade de venda do item de RH(TFF), ele só terá funcionalidade se o valor for maior que zero.
O campo Nova Quantidade será aplicado ao campo TFF_QTDVEN e consequentemente alterará o valor de venda do item de RH(TFF_SUBTOT) do orçamento.
O campo Data de Referência será utilizado para o cálculo da próxima parcela(TFF_VLPRPA).
Exemplo 1:
Vamos supor que foi informado o valor 2 para o campo Nova Quantidade e a data de 15/01/2021 para o campo Data de Referência
nValor corresponde ao preço de venda(TFF_PRCVEN) multiplicado pela nova quantidade menos a quantidade já existente
nDataFim corresponde ao ultimo dia do mês de referência(Mês de Janeiro o ultimo dia é 31, se for fevereiro é 28, se for Abril é 30)
nDataIni corresponde ao dia referente a data de referência
nValor := (nValor/nDataFim)*((nDataFim-nDataIni)+1)
nValor = 10.000
nDataFim = 31
nDataIni = 15
Cálculo: (10.000/31)*((31-15)+1)
TFF_VLPRPA = 5.483,87
O campo "Todas as linhas" indica se a alteração de quantidade será somente para o item de RH(TFF) posicionada ou a todas as linhas que serão reajustadas.
Caso informe o valor posicionada, a alteração de quantidade e o cálculo para a próxima parcela informado acima só será aplicada para o item de RH(TFF) posicionada, o seguinte log será exibido para melhor visualização da alteração.
Nesse log pode-se visualizar a alteração da quantidade, do valor de venda e também o novo valor para a próxima parcela, onde consta o valor anterior R$: 10.000,00 somado com o valor proporcional detalhado acima no valor de R$ 5.483,87
Caso informe o valor Todas, a alteração de quantidade e o cálculo para a próxima parcela será aplicado para todas as linhas encontradas.
Nesse log pode-se visualizar a alteração da quantidade, do valor de venda e também o novo valor para a próxima parcela, onde também é acrescentado o percentual informado.
Para o percentual foi utilizado o valor de 10% e o multiplicador utilizado foi de 2.
Veja que o valor de R$ 17.483,87 é composto do valor da próxima parcela R$ 15.483,87 e o valor do percentual aplicado para o local R$ 2.000,00
O valor de R$: 15.483,87 é composto do valor anterior da próxima parcela R$ 10.000,00 somado com o valor proporcional de R$ 5.483,87, verifique o cálculo no exemplo 1
Para os 2 cenários foi utilizado o valor de 2 no campo Nova Quantidade e a data de 15/01/2021 como Data de Referência.
Bloco de código | ||||
---|---|---|---|---|
| ||||
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"
User function a740GrdV()
Local oView := PARAMIXB[1] //Viewdef
If !isBlind() .AND. VALTYPE(oView) == 'O' .AND. (isInCallStack("At870PRev") .OR. isInCallStack("AT870PlaRe"))
oView:AddUserButton("Reajuste Retroativo","",{|oView| U_RRetroat(oView)},,,)
EndIf
Return
User Function RRetroat(oView)
Local oModel
Local oMdlTFJ
Local oDlgSelect
Local cFuncao := SPACE(TamSx3("TFF_FUNCAO")[1])
Local cEscala := SPACE(TamSx3("TFF_ESCALA")[1])
Local nPerc := 0
Local nMult := 0
Local nValRet := 0
Local nQuant := 0
Local dDataRef := dDataBase
Local dDataDe := CTOD(" / / ")
Local dDataAte := CTOD(" / / ")
Local cAplReajs := "2"
Local cAplHE := "2"
Local cAplMT := "2"
Local cTodosLoc := "2"
Local cTodasLin := "2"
Local cCronog := '1'
Local cProdRet := '2'
Local cCompet := Space(7)
Local aOpcRea := {"2 - Não","1 - Sim"}
Local aOpcHE := {"2 - Não","1 - Sim"}
Local aOpcMT := {"2 - Não","1 - Sim"}
Local aOpcs := {"2 - Não","1 - Sim"}
Local aOpcComp := {}
Local aQtd := {"2 - Posicionada","1 - Todos"}
Local aCronog := {"1 - Sim", "2 - Não"}
Local aRetroat := {"1 - Sim", "2 - Não"}
Local oGrp := Nil
Local oGrp1 := NIL
Local oGrp2 := Nil
Local oGrp3 := Nil
If VALTYPE(oView) == 'O' .AND. VALTYPE(oModel := oView:GetModel()) == 'O'
oMdlTFJ := oModel:GetModel("TFJ_REFER")
If oMdlTFJ:GetValue("TFJ_CNTREC") == '1'
aOpcComp := U_CompetCo()
DEFINE MSDIALOG oDlgSelect FROM 0,0 TO 560,400 PIXEL TITLE "Reajuste Retroativo"
oGrp1 := TGroup():New(000, 005, 43, 200, "Filtros", oDlgSelect,,, .T.)
@ 10, 9 SAY "Função" SIZE 30, 30 PIXEL
oGetSRA := TGet():New( 020, 009, { | u | If(PCount() > 0, cFuncao := u, cFuncao) },oDlgSelect, ;
060, 010, "!@",{ || .T.}, 0, 16777215,,.F.,,.T.,,.F.,;
,.F.,.F.,{|| .T.},.F.,.F. ,,"cFuncao",,,,.T. )
oGetSRA:cF3 := 'SRJ'
@ 10, 77 SAY "Escala" SIZE 30, 30 PIXEL
oGetTDW := TGet():New( 020, 077, { | u | If(PCount() > 0, cEscala := u, cEscala) },oDlgSelect, ;
060, 010, "!@",{ || .T.}, 0, 16777215,,.F.,,.T.,,.F.,;
,.F.,.F.,{|| .T.},.F.,.F. ,,"cEscala",,,,.T. )
oGetTDW:cF3 := 'TDW'
@ 10, 147 SAY "Apurado em:" SIZE 80, 30 PIXEL
oCompet := TGet():New( 020, 147, { | u | If( PCount() == 0, cCompet, cCompet := u ) },oDlgSelect, ;
020, 010, "@E 99/9999",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"cCompet",,,,.T.)
oGrp2 := TGroup():New(045, 005, 150, 200, "Reajuste", oDlgSelect,,, .T.)
@ 55, 9 SAY "Novo Valor (R$) " SIZE 50, 30 PIXEL
oDataDe := TGet():New( 65, 009, { | u | If( PCount() == 0, nValRet, nValRet := u ) },oDlgSelect, ;
090, 010, "@E 99,999,999,999.99",{|| U_VldCpoRe(nValRet,nPerc,"Percentual (%)")}, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"nValRet",,,,.T.)
@ 85, 9 SAY "Percentual (%)" SIZE 50, 30 PIXEL
oDataDe := TGet():New( 95, 009, { | u | If( PCount() == 0, nPerc, nPerc := u ) },oDlgSelect, ;
060, 010, "@E 9999.99",{||U_VldCpoRe(nPerc,nValRet,"Novo Valor (R$) ")}, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"nPerc",,,,.T.)
@ 85, 77 SAY "Multiplicador" SIZE 50, 30 PIXEL
oDataAte := TGet():New( 95, 077, { | u | If( PCount() == 0, nMult, nMult := u ) },oDlgSelect, ;
060, 010, "@E 99.99",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"nMult",,,,.T.)
@ 115, 9 SAY "Data de ?" SIZE 50, 30 PIXEL
oDataRet := TGet():New( 125, 009, { | u | If( PCount() == 0, dDataDe, dDataDe := u ) },oDlgSelect, ;
060, 010, "@D",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"dDataDe",,,,.T.)
@ 115, 77 SAY "Data Ate ?" SIZE 50, 30 PIXEL
oDataRet1 := TGet():New( 125, 077, { | u | If( PCount() == 0, dDataAte, dDataAte := u ) },oDlgSelect, ;
060, 010, "@D",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"dDataAte",,,,.T.)
@ 55, 147 SAY "Aplica Reajuste?" SIZE 80, 30 PIXEL
oCombo1 := TComboBox():New(65,147,{|u|if(PCount()>0,cAplReajs:=u,cAplReajs)},;
aOpcRea,40,10,oDlgSelect,,,,,,.T.,,,,,,,,,'cAplReajs')
@ 85, 147 SAY "Reajusta Materiais?" SIZE 80, 30 PIXEL
oCombo3 := TComboBox():New(95,147,{|u|if(PCount()>0,cAplMT:=u,cAplMT)},;
aOpcMT,40,10,oDlgSelect,,,{|| U_VldOpc(nValRet,.T.,"Reajusta Materiais?",cAplMT)},,,.T.,,,,,,,,,'cAplMT')
@ 115, 147 SAY "Reajusta H.E.?" SIZE 80, 30 PIXEL
oCombo2 := TComboBox():New(125,147,{|u|if(PCount()>0,cAplHE:=u,cAplHE)},;
aOpcHE,40,10,oDlgSelect,,,{|| U_VldOpc(nValRet,.T.,"Reajusta H.E.?",cAplHE)},,,.T.,,,,,,,,,'cAplHE')
oGrp := TGroup():New(152, 005, 192, 200, "Alteração de Quantidade", oDlgSelect,,, .T.)
@ 162, 9 SAY "Nova Quantidade" SIZE 50, 30 PIXEL
oQuant := TGet():New( 172, 009, { | u | If( PCount() == 0, nQuant, nQuant := u ) },oDlgSelect, ;
060, 010, "@E 99,999,999,999",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"nQuant",,,,.T.)
@ 162, 77 SAY "Data de Referencia" SIZE 50, 30 PIXEL
oDataAte := TGet():New( 172, 077, { | u | If( PCount() == 0, dDataRef, dDataRef := u ) },oDlgSelect, ;
060, 010, "@D",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"dDataRef",,,,.T.)
oGrp3 := TGroup():New(195, 005, 260, 200, "Locais", oDlgSelect,,, .T.)
@ 207, 9 SAY "Em todos os Locais?" SIZE 80, 30 PIXEL
oCombo := TComboBox():New(217,09,{|u|if(PCount()>0,cTodosLoc:=u,cTodosLoc)},;
aOpcs,40,10,oDlgSelect,,,{|| U_VldOpc(nValRet,.T.,"Em todos os Locais?",cTodosLoc)},,,.T.,,,,,,,,,'cTodosLoc')
@ 207, 77 SAY "Todas os itens de RH?" SIZE 80, 30 PIXEL
oCombo1 := TComboBox():New(217, 077,{|u|if(PCount()>0,cTodasLin:=u,cTodasLin)},;
aQtd,60,10,oDlgSelect,,,{|| U_VldOpc(nValRet,.T.,"Todas os itens de RH?",cTodasLin)},,,.T.,,,,,,,,,'cTodasLin')
@ 233, 9 SAY "Aplic. Cronograma?" SIZE 80, 30 PIXEL
oCombo1 := TComboBox():New(243, 09,{|u|if(PCount()>0,cCronog:=u,cCronog)},;
aCronog,60,10,oDlgSelect,,,,,,.T.,,,,,,,,,'cCronog')
@ 233, 77 SAY "Cobra Retroativo ?" SIZE 80, 30 PIXEL
oCombo2 := TComboBox():New(243, 077,{|u|if(PCount()>0,cProdRet:=u,cProdRet)},;
aRetroat,60,10,oDlgSelect,,,,,,.T.,,,,,,,,,'cProdRet')
oExit := TButton():New( 263 , 005, "Sair",oDlgSelect,{|| oDlgSelect:End() }, 090,12,,,.F.,.T.,.F.,,.F.,,,.F. )
oRefresh := TButton():New( 263, 105, "Aplicar",oDlgSelect,{|| U_AplicVl(oModel, cFuncao , nPerc, nMult, LEFT(cTodosLoc,1), cEscala, nQuant, dDataRef, LEFT(cTodasLin,1), cCompet, LEFT(cAplReajs,1), LEFT(cCronog,1), LEFT(cAplHE,1), LEFT(cAplMT,1),LEFT(cProdRet,1),dDataDe,dDataAte,nValRet) , oDlgSelect:End()}, 095,12,,,.F.,.T.,.F.,,.F.,,,.F. )
// Define CSS
oRefresh:SetCss( U_ColorAplic() )
ACTIVATE MSDIALOG oDlgSelect CENTER
Else
MsgAlert("Opção disponível apenas para contratos Recorrentes")
EndIf
EndIf
Return .T.
User Function AplicVl(oModel, cFuncao , nPerc, nMult, cTodosLoc, cEscala, nQuant, dDataRef, cTodasLin, cCompet, cAplReajs, cCronog, cAplHE,cAplMT, cProdRet,dDataDe,dDataAte,nValRet)
Local lAllLoc := cTodosLoc == '1'
Local lAllLinha := cTodasLin == '1'
Local lAplicRea := cAplReajs == '1'
Local oMdlTFL := oModel:GetModel("TFL_LOC")
Local oMdlTFF := oModel:GetModel("TFF_RH")
Local oMdlTFG := oModel:GetModel("TFG_MI")
Local oMdlTFH := oModel:GetModel("TFH_MC")
Local oMdlTFJ := oModel:GetModel("TFJ_REFER")
Local nX := 0
Local nY := 0
Local nZ := 0
Local cLog := ""
Local aSaveRows := FwSaveRows()
Local aErroMVC := {}
Local aErrors := {}
Local nTotal := 0
Local nGrandTot := 0
Local nVal := 0
Local nValPrc := 0
Local nPosTFF := 0
Local nPosTFL := 0
Local nValParc := 0
Local lServRet := .F.
Local lContinua := .T.
Local cProxParc := ""
Local cMsg := ""
Local nValPrx := 0
Local nDiff := 0
Local aTFF := {}
Local aTFFAtu := {}
Local lDataRet := U_VldDtRet(nPerc,dDataDe,dDataAte)
Local lReajuste := .F.
If nValRet > 0 .And. nPerc > 0
MsgAlert("O campo Novo Valor (R$) e o campo Percentual (%) estão preenchidos, verifique qual opção de reajuste será utilizado", "Atenção")
Return
EndIf
//Para reajuste por valor, a aplicação é somente no posto posicionado e não reajusta H.E e nem Materiais
If nValRet > 0
lAllLinha := .F.
lAllLoc := .F.
cAplHE := '2'
cAplMT := '2'
If oMdlTFF:GetValue("TFF_PRCVEN") > nValRet
MsgAlert("O Novo Valor deve ser maior que o valor do Posto selecionado", "Atenção")
Return
EndIf
EndIf
DbSelectArea("TFF")
TFF->(DbSetOrder(1))
If cProdRet == "1"
lServRet := .T.
EndIf
If nQuant > 0 .And. !lAllLinha
nPosTFF := oMdlTFF:GetLine()
nPosTFL := oMdlTFL:GetLine()
If !EMPTY(STRTRAN(cCompet,"/")) .AND. cAplReajs == '1'
cProxParc := cCompet
Else
cProxParc := TecBDt2Cmp(POSICIONE("CNA",1,xFilial("CNA")+oMdlTFL:GetValue("TFL_CONTRT")+oMdlTFL:GetValue("TFL_CONREV")+oMdlTFL:GetValue("TFL_PLAN"), "CNA_PROMED"))
EndIf
cLog += "Local: " + Alltrim(POSICIONE("ABS",1,xFilial("ABS") + oMdlTFL:GetValue("TFL_LOCAL"), "ABS_DESCRI")) + Chr(13) + Chr(10)
cLog += " - RH: " + oMdlTFF:GetValue("TFF_COD") + Chr(13) + Chr(10)
cLog += " - Função: " + Alltrim(POSICIONE("SRJ",1,xFilial("SRJ") + oMdlTFF:GetValue("TFF_FUNCAO"), "RJ_DESC")) + Chr(13) + Chr(10)
cLog += " - Produto: " + Alltrim(Posicione("SB1",1,xFilial("SB1") + oMdlTFF:GetValue("TFF_PRODUT"), "B1_DESC")) + Chr(13) + Chr(10)
cLog += " - Qtd. Venda Anterior: " + Alltrim(AllToChar(oMdlTFF:GetValue("TFF_QTDVEN"))) + Chr(13) + Chr(10)
cLog += " - Qtd. Venda: " + Alltrim(AllToChar(nQuant)) + Chr(13) + Chr(10)
cLog += " - Vlr. Venda Anterior: R$ " + Alltrim(TRANSFORM( oMdlTFF:GetValue("TFF_SUBTOT") , "@E 99,999,999,999.99" )) + Chr(13) + Chr(10)
cLog += " - Vlr. Venda Novo: R$ " + Alltrim(TRANSFORM( ROUND(nQuant * oMdlTFF:GetValue("TFF_SUBTOT"), TamSX3("TFF_SUBTOT")[2]) , "@E 99,999,999,999.99" )) + Chr(13) + Chr(10)
IF nPerc == 0 .AND. lAplicRea
nValParc := 0
Else
nValParc := U_AplicQtd(oMdlTFF,nQuant,dDataRef,.F.,,cCronog == '1')
EndIf
nGrandTot += nValParc
If cCronog == '1'
If !(TecHasTGT("TFF",oMdlTFF:GetValue("TFF_COD"),cProxParc,oMdlTFJ:GetValue("TFJ_CODIGO"),@nTotal))
nTotal := At740PrxPa(/*cTipo*/,;
oMdlTFF:GetValue("TFF_QTDVEN"),;
oMdlTFF:GetValue("TFF_PRCVEN"),;
oMdlTFF:GetValue("TFF_DESCON"),;
oMdlTFF:GetValue("TFF_TXLUCR"),;
oMdlTFF:GetValue("TFF_TXADM"))
EndIf
Else
nTotal := oMdlTFF:GetValue("TFF_VLPRPA")
EndIf
cLog += " - Valor Novo (prox. parcela): R$ " + Alltrim(TRANSFORM((IIF(nPerc == 0 .AND. lAplicRea, 0, nValParc + nTotal)), "@e 999,999,999.99" )) +;
" ( R$ " + Alltrim(TRANSFORM(nValParc, "@e 999,999,999.99" )) + " )" + " + ( R$ " + Alltrim(TRANSFORM(IIF(nPerc == 0 .AND. lAplicRea, 0, nTotal), "@e 999,999,999.99" )) + " )" + Chr(13) + Chr(10)
cLog += Chr(13) + Chr(10)
cLog += Chr(13) + Chr(10)
EndIf
If lAplicRea .And. lDataRet
For nX := 1 To oMdlTFL:Length()
If lAllLoc
oMdlTFL:GoLine(nX)
EndIf
For nY := 1 To oMdlTFF:Length()
If !lAllLinha
nPosTFF := oMdlTFF:GetLine()
oMdlTFF:GoLine(nPosTFF)
Else
oMdlTFF:GoLine(nY)
EndIf
If U_VldFiltro(oMdlTFF,cFuncao,cEscala,cCompet) .AND. oMdlTFF:GetValue("TFF_COBCTR") != '2' //.And. oMdlTFF:GetValue("TFF_ENCE") != '1'
If !EMPTY(STRTRAN(cCompet,"/")) .AND. cAplReajs == '1'
cProxParc := cCompet
Else
cProxParc := TecBDt2Cmp(POSICIONE("CNA",1,xFilial("CNA")+oMdlTFL:GetValue("TFL_CONTRT")+oMdlTFL:GetValue("TFL_CONREV")+oMdlTFL:GetValue("TFL_PLAN"), "CNA_PROMED"))
EndIf
If cCronog == '1'
If !(TecHasTGT("TFF",oMdlTFF:GetValue("TFF_COD"),cProxParc,oMdlTFJ:GetValue("TFJ_CODIGO"),@nValPrx))
nValPrx := At740PrxPa(/*cTipo*/,;
oMdlTFF:GetValue("TFF_QTDVEN"),;
oMdlTFF:GetValue("TFF_PRCVEN"),;
oMdlTFF:GetValue("TFF_DESCON"),;
oMdlTFF:GetValue("TFF_TXLUCR"),;
oMdlTFF:GetValue("TFF_TXADM"))
EndIf
Else
nValPrx := oMdlTFF:GetValue("TFF_VLPRPA")
EndIf
cLog += "Local: " + Alltrim(POSICIONE("ABS",1,xFilial("ABS") + oMdlTFL:GetValue("TFL_LOCAL"), "ABS_DESCRI")) + Chr(13) + Chr(10)
cLog += " - RH: " + oMdlTFF:GetValue("TFF_COD") + Chr(13) + Chr(10)
cLog += " - Função: " + Alltrim(POSICIONE("SRJ",1,xFilial("SRJ") + oMdlTFF:GetValue("TFF_FUNCAO"), "RJ_DESC")) + Chr(13) + Chr(10)
cLog += " - Produto: " + Alltrim(Posicione("SB1",1,xFilial("SB1") + oMdlTFF:GetValue("TFF_PRODUT"), "B1_DESC")) + Chr(13) + Chr(10)
If lAllLinha .And. nQuant > 0
cLog += " - Qtd. Venda Anterior: " + Alltrim(AllToChar(oMdlTFF:GetValue("TFF_QTDVEN"))) + Chr(13) + Chr(10)
cLog += " - Qtd. Venda: " + Alltrim(AllToChar(nQuant)) + Chr(13) + Chr(10)
cLog += " - Vlr. Venda Anterior: R$ " + Alltrim(TRANSFORM( oMdlTFF:GetValue("TFF_SUBTOT") , "@E 99,999,999,999.99" )) + Chr(13) + Chr(10)
cLog += " - Vlr. Venda Novo: R$ " + Alltrim(TRANSFORM( ROUND(nQuant * oMdlTFF:GetValue("TFF_SUBTOT"), TamSX3("TFF_SUBTOT")[2]) , "@E 99,999,999,999.99" )) + Chr(13) + Chr(10)
cLog += " - Valor Antigo (prox. parcela): R$ " + Alltrim(TRANSFORM( nValPrx , "@e 999,999,999.99" )) + Chr(13) + Chr(10)
nValParc := U_AplicQtd(oMdlTFF,nQuant,dDataRef,.F.,,cCronog == '1')
If nPerc == 0 .AND. lAplicRea
nTotal := 0
Else
nTotal := ROUND( (nValPrx * (nPerc / 100)) * nMult , TamSX3("TFF_VLPRPA")[2] )
EndIf
nGrandTot += nTotal
If nPerc == 0 .AND. lAplicRea
nValParc := 0
Else
nValParc := nValPrx + nValParc
EndIf
cLog += " - Valor Novo (prox. parcela): R$ " + Alltrim(TRANSFORM((IIF(nPerc == 0 .AND. lAplicRea, 0, nValParc + nTotal)), "@e 999,999,999.99" )) +;
" ( R$ " + Alltrim(TRANSFORM(nValParc, "@e 999,999,999.99" )) + " )" + " + ( R$ " + Alltrim(TRANSFORM(IIF(nPerc == 0 .AND. lAplicRea, 0, nTotal), "@e 999,999,999.99" )) + " )" + Chr(13) + Chr(10)
cLog += Chr(13) + Chr(10)
Else
cLog += " - Valor Antigo RH (prox. parcela): R$ " + Alltrim(TRANSFORM( nValPrx , "@e 999,999,999.99" )) + Chr(13) + Chr(10)
If nValRet > 0
nTotal := nValRet
ElseIf nPerc == 0 .AND. lAplicRea
nTotal := 0
Else
nTotal := (oMdlTFF:GetValue("TFF_PRCVEN") * (nPerc / 100)) * oMdlTFF:GetValue("TFF_QTDVEN")
EndIf
nTotal := Round(nTotal,TamSX3("TFF_VLPRPA")[2])
nGrandTot += nTotal
If nValRet > 0
cLog += " - Valor Novo RH(prox. parcela): R$ " + Alltrim(TRANSFORM((nTotal), "@e 999,999,999.99" )) +;
" ( + R$ " + Alltrim(TRANSFORM(nTotal - nValPrx, "@e 999,999,999.99" )) + " )" + Chr(13) + Chr(10)
cLog += Chr(13) + Chr(10)
Else
cLog += " - Valor Novo RH(prox. parcela): R$ " + Alltrim(TRANSFORM((IIF(nPerc == 0 .AND. lAplicRea, 0, nValPrx) + nTotal), "@e 999,999,999.99" )) +;
" ( + R$ " + Alltrim(TRANSFORM(nTotal, "@e 999,999,999.99" )) + " )" + Chr(13) + Chr(10)
cLog += Chr(13) + Chr(10)
EndIf
If cAplMT == "1"
If oMdlTFG:Length() > 0
U_CheckMat("TFG",oMdlTFG,oMdlTFF:GetValue("TFF_COD"),oMdlTFJ:GetValue("TFJ_CODIGO"),cCronog,cProxParc,@cLog,nPerc,lAplicRea,@nGrandTot)
EndIf
If oMdlTFH:Length() > 0
U_CheckMat("TFH",oMdlTFH,oMdlTFF:GetValue("TFF_COD"),oMdlTFJ:GetValue("TFJ_CODIGO"),cCronog,cProxParc,@cLog,nPerc,lAplicRea,@nGrandTot)
EndIf
EndIf
EndIf
EndIf
If !lAllLinha
Exit
EndIf
Next nY
cLog += REPLICATE("-",10)
cLog += Chr(13) + Chr(10)
If !lAllLoc
Exit
EndIf
Next nX
EndIf
cLog += REPLICATE("-",15)
cLog += Chr(13) + Chr(10)
cLog += "Valor adicional prox. parcela: R$ " + Alltrim(TRANSFORM(nGrandTot, "@e 999,999,999.99" ))
AtShowLog(cLog,"Prévia de Valores",/*lVScroll*/,/*lHScroll*/,/*lWrdWrap*/,.F.)
If MsgYesNo("Aplicar valores calculados?")
//Verifica se vai aplicar a quantidade somente para a linha posicionada
If !lAllLinha .And. nQuant > 0
oMdlTFL:GoLine(nPosTFL)
oMdlTFF:GoLine(nPosTFF)
U_AplicQtd(oMdlTFF,nQuant,dDataRef,.T.,nPerc,cCronog == '1',cCompet, @lContinua)
EndIf
If lContinua
For nX := 1 To oMdlTFL:Length()
If lAllLoc
oMdlTFL:GoLine(nX)
EndIf
For nY := 1 To oMdlTFF:Length()
If !lAllLinha
oMdlTFF:GoLine(nPosTFF)
Else
oMdlTFF:GoLine(nY)
EndIf
lAplicDiff := .F.
If U_VldFiltro(oMdlTFF,cFuncao,cEscala,cCompet) .AND. oMdlTFF:GetValue("TFF_COBCTR") != '2' //.And. oMdlTFF:GetValue("TFF_ENCE") != '1'
If cAplHE == '1'
U_AjustHE(nPerc, oMdlTFF)
EndIf
//aplicar a quantidade para todas as linhas encontradas conforme os filtros
If lAllLinha .And. nQuant > 0
U_AplicQtd(oMdlTFF,nQuant,dDataRef,.T.,nPerc,cCronog == '1', , @lContinua)
EndIf
aTFFAtu := U_MontaTFFAtu(oMdlTFF,dDataDe,dDataAte)
If lContinua
If !EMPTY(STRTRAN(cCompet,"/")) .AND. cAplReajs == '1'
cProxParc := cCompet
lReajuste := .T.
Else
cProxParc := TecBDt2Cmp(POSICIONE("CNA",1,xFilial("CNA")+oMdlTFL:GetValue("TFL_CONTRT")+oMdlTFL:GetValue("TFL_CONREV")+oMdlTFL:GetValue("TFL_PLAN"), "CNA_PROMED"))
EndIf
If cCronog == '1'
If !(TecHasTGT("TFF",oMdlTFF:GetValue("TFF_COD"),cProxParc,oMdlTFJ:GetValue("TFJ_CODIGO"),@nVal))
nVal := At740PrxPa(/*cTipo*/,;
oMdlTFF:GetValue("TFF_QTDVEN"),;
oMdlTFF:GetValue("TFF_PRCVEN"),;
oMdlTFF:GetValue("TFF_DESCON"),;
oMdlTFF:GetValue("TFF_TXLUCR"),;
oMdlTFF:GetValue("TFF_TXADM"))
Else //aplicar apenas a diferença
lAplicDiff := .T.
EndIf
Else
nVal := oMdlTFF:GetValue("TFF_VLPRPA")
EndIf
nValPrc := oMdlTFF:GetValue("TFF_PRCVEN")
If (lServRet .And. nMult > 0) .Or. (lServRet .And. lDataRet)
If nValRet > 0
nTotal := nValRet
Else
nTotal := (nValPrc + (nValPrc * (nPerc / 100)))
EndIf
If nPerc > 0 .Or. nValRet > 0
nDiff := At740PrxPa(/*cTipo*/,;
oMdlTFF:GetValue("TFF_QTDVEN"),;
oMdlTFF:GetValue("TFF_PRCVEN"),;
oMdlTFF:GetValue("TFF_DESCON"),;
oMdlTFF:GetValue("TFF_TXLUCR"),;
oMdlTFF:GetValue("TFF_TXADM"))
If oMdlTFF:GetValue("TFF_ENCE") != '1'
lContinua := lContinua .AND. oMdlTFF:SetValue("TFF_PRCVEN", nTotal)
nDiff := (At740PrxPa(/*cTipo*/,;
oMdlTFF:GetValue("TFF_QTDVEN"),;
oMdlTFF:GetValue("TFF_PRCVEN"),;
oMdlTFF:GetValue("TFF_DESCON"),;
oMdlTFF:GetValue("TFF_TXLUCR"),;
oMdlTFF:GetValue("TFF_TXADM"))- nDiff)
Else
nDiff := nTotal - nDiff
EndIf
EndIf
If nValRet > 0
nTotal := nValRet
ElseIf nPerc == 0 .AND. lAplicRea
nTotal := 0
Else
nTotal := (nValPrc * (nPerc / 100)) * oMdlTFF:GetValue("TFF_QTDVEN")
EndIf
nTotal := Round(nTotal,TamSX3("TFF_VLPRPA")[2])
If cCronog == '1'
If lAplicDiff
If !lReajuste .And. nPerc > 0
U_AplicTGT("TFF",oMdlTFF:GetValue("TFF_COD"),cProxParc,oMdlTFJ:GetValue("TFJ_CODIGO"),nTotal)
At740IAuto("TFF", oMdlTFF:GetValue("TFF_COD"), cProxParc, nDiff, oMdlTFJ:GetValue("TFJ_CODIGO"))
EndIf
Else
If oMdlTFF:GetValue("TFF_ENCE") != '1'
U_AplicTGT("TFF",oMdlTFF:GetValue("TFF_COD"),cProxParc,oMdlTFJ:GetValue("TFJ_CODIGO"),nTotal)
If nValRet > 0
At740IAuto("TFF", oMdlTFF:GetValue("TFF_COD"), cProxParc, nTotal, oMdlTFJ:GetValue("TFJ_CODIGO"))
Else
At740IAuto("TFF", oMdlTFF:GetValue("TFF_COD"), cProxParc, nVal + nTotal, oMdlTFJ:GetValue("TFJ_CODIGO"))
EndIf
EndIf
EndIf
Else
lContinua := lContinua .AND. oMdlTFF:SetValue("TFF_VLPRPA",nVal + nTotal)
EndIf
If nValRet > 0
nTotal := nValRet
Else
nTotal := (nValPrc * (nPerc / 100)) * oMdlTFF:GetValue("TFF_QTDVEN")
EndIf
//Valida as datas para sempre fazer os calculos baseados em 30 dias
If Day(dDataAte) > 30
dDataAte := dDataAte - 1
EndIf
//Valida as datas para sempre fazer os calculos baseados em 30 dias
If Day(dDataDe) > 30
dDataDe := dDataDe - 1
EndIf
//Busca as TFF´s em revisões anteriores e monta array com valores e dias a serem calculados
//aTFF := U_GetTFFAnt("TFF",oMdlTFF:GetValue("TFF_CONTRT"),oMdlTFF:GetValue("TFF_CONREV"),oMdlTFF:GetValue("TFF_COD"),dDataDe,dDataAte,aTFFAtu,oMdlTFF:GetValue("TFF_ENCE") = '1',oMdlTFF:GetValue("TFF_DTENCE"))
aTFF := U_GetValTFF("TFF",oMdlTFF,dDataDe,dDataAte,nValPrc,oMdlTFF:GetValue("TFF_ENCE") = '1',oMdlTFF:GetValue("TFF_DTENCE"))
//Realiza o calculo conforme as revisões anteriores
If Len(aTFF) > 0
nTotal := U_ValRetr(aTFF,nPerc, nDiff / oMdlTFF:GetValue("TFF_QTDVEN") )
/* For nX := 1 To 12
U_ValRetMes(aTFF,nX,1000)
Next nX */
Else
U_CeckMult(dDataDe,dDataAte,@nMult)
nTotal := nTotal * nMult
nTotal := Round(nTotal,TamSX3("TFF_VLPRPA")[2])
EndIf
If cProdRet == "1"
U_AplicRet(oMdlTFF,oMdlTFJ,cProxParc,nTotal,,nValPrc,dDataDe,dDataAte,nPerc,nValRet)
EndIf
If cAplMT == "1"
If !oMdlTFG:IsEmpty() .And. oMdlTFG:Length() > 0
U_AplicMat("TFG",oMdlTFG,oMdlTFF:GetValue("TFF_COD"),oMdlTFJ:GetValue("TFJ_CODIGO"),cCronog,cProxParc,@cLog,nPerc,lAplicRea,dDataDe,dDataAte,oMdlTFJ,cProdRet,oMdlTFF:GetValue("TFF_ENCE") = '1',oMdlTFF:GetValue("TFF_DTENCE"),nValRet)
EndIf
If !oMdlTFH:IsEmpty() .And. oMdlTFH:Length() > 0
U_AplicMat("TFH",oMdlTFH,oMdlTFF:GetValue("TFF_COD"),oMdlTFJ:GetValue("TFJ_CODIGO"),cCronog,cProxParc,@cLog,nPerc,lAplicRea,dDataDe,dDataAte,oMdlTFJ,cProdRet,oMdlTFF:GetValue("TFF_ENCE") = '1',oMdlTFF:GetValue("TFF_DTENCE"),nValRet)
EndIf
EndIf
Else
If nPerc > 0
nDiff := At740PrxPa(/*cTipo*/,;
oMdlTFF:GetValue("TFF_QTDVEN"),;
oMdlTFF:GetValue("TFF_PRCVEN"),;
oMdlTFF:GetValue("TFF_DESCON"),;
oMdlTFF:GetValue("TFF_TXLUCR"),;
oMdlTFF:GetValue("TFF_TXADM"))
lContinua := lContinua .AND. oMdlTFF:SetValue("TFF_PRCVEN",;
ROUND((nValPrc + (nValPrc * (nPerc / 100))),;
TamSX3("TFF_PRCVEN")[2]))
nDiff := (At740PrxPa(/*cTipo*/,;
oMdlTFF:GetValue("TFF_QTDVEN"),;
oMdlTFF:GetValue("TFF_PRCVEN"),;
oMdlTFF:GetValue("TFF_DESCON"),;
oMdlTFF:GetValue("TFF_TXLUCR"),;
oMdlTFF:GetValue("TFF_TXADM"))- nDiff)
EndIf
If nPerc == 0 .AND. lAplicRea
IF nQuant == 0
If cCronog == '1'
At740IAuto("TFF", oMdlTFF:GetValue("TFF_COD"), cProxParc, 0, oMdlTFJ:GetValue("TFJ_CODIGO"))
Else
lContinua := lContinua .AND. oMdlTFF:SetValue("TFF_VLPRPA", 0)
EndIf
EndIf
Else
If cCronog == '1'
If lAplicDiff .And. ROUND(nDiff * nMult,TamSX3("TFF_VLPRPA")[2]) > 0
At740IAuto("TFF",;
oMdlTFF:GetValue("TFF_COD"),;
cProxParc,;
ROUND(nDiff * nMult,TamSX3("TFF_VLPRPA")[2]),;
oMdlTFJ:GetValue("TFJ_CODIGO"))
Else
At740IAuto("TFF",;
oMdlTFF:GetValue("TFF_COD"),;
cProxParc,;
ROUND((nVal + ((nVal * (nPerc / 100)) * nMult)),TamSX3("TFF_VLPRPA")[2]),;
oMdlTFJ:GetValue("TFJ_CODIGO"))
EndIf
Else
lContinua := lContinua .AND. oMdlTFF:SetValue("TFF_VLPRPA",;
ROUND((nVal + ((nVal * (nPerc / 100)) * nMult)),;
TamSX3("TFF_VLPRPA")[2]))
EndIf
EndIf
EndIf
EndIf
EndIf
If !lAllLinha .OR. !lContinua
Exit
EndIf
Next nY
If !lAllLoc .OR. !lContinua
Exit
EndIf
Next nX
EndIf
EndIf
If !lContinua
aErroMVC := oModel:GetErrorMessage()
If !Empty(aErroMVC[6])
AADD(aErrors, { "Id do formulário de origem:" + ' [' + AllToChar( aErroMVC[1] ) + ']',; //"Id do formulário de origem:"
"Id do campo de origem:" + ' [' + AllToChar( aErroMVC[2] ) + ']',; //"Id do campo de origem:"
"Id do formulário de erro:" + ' [' + AllToChar( aErroMVC[3] ) + ']',; //"Id do formulário de erro:"
"Id do campo de erro:" + ' [' + AllToChar( aErroMVC[4] ) + ']',; //"Id do campo de erro:"
"Id do erro:" + ' [' + AllToChar( aErroMVC[5] ) + ']',; //"Id do erro:"
"Mensagem do erro:" + ' [' + AllToChar( aErroMVC[6] ) + ']',; //"Mensagem do erro:"
"Mensagem da solução:" + ' [' + AllToChar( aErroMVC[7] ) + ']',; //"Mensagem da solução:"
"Valor atribuído:" + ' [' + AllToChar( aErroMVC[8] ) + ']',; //"Valor atribuído:"
"Valor anterior:" + ' [' + AllToChar( aErroMVC[9] ) + ']'; //"Valor anterior:"
})
For nX := 1 To LEN(aErrors)
For nZ := 1 To LEN(aErrors[nX])
cMsg += If(Empty(aErrors[nX][nZ]), aErrors[nX][nZ], aErrors[nX][nZ] + CRLF )
Next
cMsg += CRLF + REPLICATE("-",30) + CRLF
Next
If !ISBlind()
AtShowLog(cMsg,"Inconsistência",/*lVScroll*/,/*lHScroll*/,/*lWrdWrap*/,.F.) //"Error"
EndIf
EndIf
EndIf
FwRestRows( aSaveRows )
Return
User Function VldFiltro(oMdlTFF,cFuncao,cEscala,cCompet)
Local lRetorno := .T.
If !Empty(cFuncao) .And. !Empty(cEscala) .AND. !Empty(cCompet)
If oMdlTFF:GetValue("TFF_FUNCAO") == cFuncao .And. oMdlTFF:GetValue("TFF_ESCALA") == cEscala
If !(U_VldCompC(oMdlTFF:GetValue("TFF_COD"), cCompet))
lRetorno := .F.
EndIf
Else
lRetorno := .F.
EndIf
Else
If !Empty(cFuncao)
lRetorno := oMdlTFF:GetValue("TFF_FUNCAO") == cFuncao
EndIf
If !Empty(cEscala) .AND. lRetorno
lRetorno := oMdlTFF:GetValue("TFF_ESCALA") == cEscala
EndIf
If !Empty(cCompet) .AND. lRetorno
lRetorno := U_VldCompC(oMdlTFF:GetValue("TFF_COD"), cCompet)
EndIf
EndIf
Return lRetorno
User Function AplicQtd(oMdlTFF,nQuant,dDataRef,lSetValue, nPerc, lCronog, cCompet, lContinua)
Local nDataFim := 30 //qtd de dias mes para o calculo
Local nValor := 0
Local nValorCalc := 0
Local nVlrPrx := oMdlTFF:GetValue("TFF_VLPRPA") //Valor da proxima parcela
Local nDataIni := Day(dDataRef) //dia de inicio do contrato
Local nQtdAnt := oMdlTFF:GetValue("TFF_QTDVEN")
Local oModel := oMdlTFF:GetModel()
Local oMdlTFL := oModel:GetModel("TFL_LOC")
Local oMdlTFJ := oModel:GetModel("TFJ_REFER")
Local cProxParc := TecBDt2Cmp(POSICIONE("CNA",1,xFilial("CNA")+oMdlTFF:GetValue("TFF_CONTRT")+oMdlTFF:GetValue("TFF_CONREV")+oMdlTFL:GetValue("TFL_PLAN"), "CNA_PROMED"))
Default cCompet := ""
If lSetValue
//Altera a quantidade do campo TFF_QTDVEN
lContinua := oMdlTFF:SetValue("TFF_QTDVEN",nQuant)
//Realiza o calculo da proxima parcela
If lContinua
nValor := oMdlTFF:GetValue("TFF_PRCVEN") * (nQuant - nQtdAnt) // preço de venda do contrato
nValor := (nValor/nDataFim)*((nDataFim-nDataIni)+1)
// Security = especifico
// ---------------------------------------------------
/* M->TFJ_XCPROR := FwFldGet("TFJ_XCPROR")
lPadrao := .T.
IF M->TFJ_XCPROR$"1_3"
lPadrao := .F.
IF M->TFJ_XCPROR=="1"
// Dias corridos
nDataFim := Day(LastDate(dDataRef)) // ultimo dia do mes
nDiv := nDataFim
ELSEIF M->TFJ_XCPROR=="3"
// 30,42 (365/12) dias
nDiv := 30.42
nDataFim := Day(LastDate(dDataRef)) // ultimo dia do mes
nDataFim += 0.42 // ultimo dia do mes (28/29/30 OU 31) + 0.42
ENDIF
nValor := oMdlTFF:GetValue("TFF_PRCVEN") * (nQuant - nQtdAnt)
nValor := (nValor/nDiv)*((nDataFim-nDataIni)+1)
ENDIF
IF ExistBlock("TELARAT")
IF M->TFJ_XCPROR$"2_3" .AND. !lPadrao
U_TELARAT(M->TFJ_XCPROR , nDiv , nDataIni , nDataFim , oMdlTFF:GetValue("TFF_PRCVEN"), lpadrao )
ELSE
U_TELARAT(M->TFJ_XCPROR,,,,,.t.)
ENDIF
ENDIF */
// ---------------------------------------------------
//Arredonda o valor
nValor := Round(nValor,TamSX3("TFL_VLPRPA")[2])
nValorCalc := nValor
nValor := nVlrPrx + nValor
lContinua := oMdlTFF:SetValue("TFF_VLPRPA",nValor)
If lCronog
If !(TecHasTGT("TFF",oMdlTFF:GetValue("TFF_COD"),cProxParc,oMdlTFJ:GetValue("TFJ_CODIGO"),@nVlrPrx))
nVlrPrx := At740PrxPa(/*cTipo*/,;
nQtdAnt,;
oMdlTFF:GetValue("TFF_PRCVEN"),;
oMdlTFF:GetValue("TFF_DESCON"),;
oMdlTFF:GetValue("TFF_TXLUCR"),;
oMdlTFF:GetValue("TFF_TXADM"))
EndIf
nValor := nVlrPrx + nValorCalc
// Security - 20102021_1
// No processo atual, gera o prorata do decréscimo no mês/ano que será a próxima medição.
// exemplo: ultima medição 09/2021, próxima medição 10/2021. Redução de posto para 10/11/2021, ou seja prorata competência para 11/2021,
// o sistema preencheu cronograma com prorata para 10/2021. Concorda que nesse mês de competência 10/2021 os funcionários vão trabalhar na
// quantidade integral...não faz sentido cobrar com prorata.
//IF !Empty(cCompet)
IF cCompet == substr(dtos(dDataRef),5,2) + "/" + left(dtos(dDataRef),4)
If !Empty(cCompet) .And. cProxParc > cCompet
At740IAuto("TFF", oMdlTFF:GetValue("TFF_COD"), cCompet, nValorCalc, oMdlTFJ:GetValue("TFJ_CODIGO"))
Else
At740IAuto("TFF", oMdlTFF:GetValue("TFF_COD"), cCompet, nValor, oMdlTFJ:GetValue("TFJ_CODIGO"))
EndIf
ELSE
If !Empty(cCompet) .And. cProxParc > cCompet
At740IAuto("TFF", oMdlTFF:GetValue("TFF_COD"), cCompet, nValorCalc, oMdlTFJ:GetValue("TFJ_CODIGO"))
Else
At740IAuto("TFF", oMdlTFF:GetValue("TFF_COD"), cProxParc, nValor, oMdlTFJ:GetValue("TFJ_CODIGO"))
EndIf
ENDIF
EndIf
EndIf
Else
nValor := oMdlTFF:GetValue("TFF_PRCVEN") * (nQuant - nQtdAnt) // Valor a ser reajustado
nValor := (nValor/nDataFim)*((nDataFim-nDataIni)+1)
// Security = especifico
// ---------------------------------------------------
/*M->TFJ_XCPROR := FwFldGet("TFJ_XCPROR")
lPadrao := .T.
IF M->TFJ_XCPROR$"1_3"
lPadrao := .F.
IF M->TFJ_XCPROR=="1"
// Dias corridos
nDataFim := Day(LastDate(dDataRef)) // ultimo dia do mes
nDiv := nDataFim
ELSEIF M->TFJ_XCPROR=="3"
// 30,42 (365/12) dias
nDiv := 30.42
nDataFim := Day(LastDate(dDataRef)) // ultimo dia do mes
nDataFim += 0.42 // ultimo dia do mes (28/29/30 OU 31) + 0.42
ENDIF
nValor := oMdlTFF:GetValue("TFF_PRCVEN") * (nQuant - nQtdAnt)
nValor := (nValor/nDiv)*((nDataFim-nDataIni)+1)
ENDIF
IF ExistBlock("TELARAT")
IF M->TFJ_XCPROR$"1_3" .AND. !lPadrao
U_TELARAT(M->TFJ_XCPROR , nDiv , nDataIni , nDataFim , oMdlTFF:GetValue("TFF_PRCVEN") )
ELSE
U_TELARAT(M->TFJ_XCPROR,,,,,.t.)
ENDIF
ENDIF */
// ---------------------------------------------------
//Arredonda o valor
nValor := Round(nValor,TamSX3("TFL_VLPRPA")[2])
EndIf
Return nValor
User Function CompetCo()
Local aCompets := CtrCompets()
Local nX
For nX := 1 to Len(aCompets)
aCompets[nX] := CVALTOCHAR(nX)+'='+aCompets[nX]
Next nX
Return aCompets
User Function VldCompC(cCodTFF, cCompet)
Local cQuery := ""
Local cAliasCND := GetNextAlias()
Local lRet := .T.
cQuery := ""
cQuery += " SELECT 1 FROM " + RetSQLName("TFF") + " TFF "
cQuery += " INNER JOIN " + RetSQLName("TFL") + " TFL "
cQuery += " ON TFL.TFL_CODIGO = TFF.TFF_CODPAI "
cQuery += " AND TFL.TFL_FILIAL = '" + xFilial("TFL") + "' "
cQuery += " AND TFL.D_E_L_E_T_ = ' ' "
cQuery += " INNER JOIN " + RetSQLName("CNE") + " CNE "
cQuery += " ON CNE.CNE_CONTRA = TFF.TFF_CONTRT "
cQuery += " AND CNE.CNE_NUMERO = TFL.TFL_PLAN "
cQuery += " AND CNE.CNE_REVISA = TFF.TFF_CONREV "
cQuery += " AND CNE.CNE_ITEM = TFF.TFF_ITCNB "
cQuery += " AND CNE.CNE_FILIAL = '" + xFilial("CNE") + "' "
cQuery += " AND CNE.D_E_L_E_T_ = ' ' "
cQuery += " INNER JOIN " + RetSQLName("CND") + " CND "
cQuery += " ON CND.CND_CONTRA = CNE.CNE_CONTRA "
cQuery += " AND CND.CND_REVISA = CNE.CNE_REVISA "
cQuery += " AND CND.CND_FILIAL = '" + xFilial("CND") + "' "
cQuery += " AND CND.D_E_L_E_T_ = ' ' "
cQuery += " AND CND.CND_COMPET = '" + cCompet + "' "
cQuery += " WHERE "
cQuery += " TFF.TFF_FILIAL = '" + xFilial("TFF") + "' "
cQuery += " AND TFF.TFF_COD = '" + cCodTFF + "' "
cQuery += " AND TFF.D_E_L_E_T_ = ' ' "
cQuery := ChangeQuery(cQuery)
DbUseArea(.T., "TOPCONN",TcGenQry(,,cQuery), cAliasCND , .T., .T.)
lRet := ( cAliasCND )->( !EOF() )
( cAliasCND )->(DbCloseArea())
Return lRet
User Function AjustHE(nPerc, oMdlTFF)
Local oModel := oMdlTFF:GetModel()
Local oMdlHE := oModel:GetModel("TFU_HE")
Local nX
Local nValor := 0
If nPerc != 0
For nX := 1 To oMdlHE:Length()
oMdlHE:GoLine(nX)
nValor := ROUND( oMdlHE:GetValue("TFU_VALOR") + (oMdlHE:GetValue("TFU_VALOR") * nPerc / 100), TamSX3("TFU_VALOR")[2] )
oMdlHE:SetValue("TFU_VALOR", nValor )
Next nX
EndIf
Return
User Function CheckMat(cTabela,oMdlMat,cTFFCOD,cTFJCOD,cCronog,cProxParc,cLog,nPerc,lAplicRea,nGrandTot)
Local nX := 0
Local nValPrxMI := 0
Local nValPrxMC := 0
Local nTotal := 0
Local cDescProd := ""
If cTabela == "TFG"
For nX := 1 To oMdlMat:Length()
oMdlMat:GoLine(nX)
cDescProd := Alltrim(Posicione("SB1",1,xFilial("SB1") + oMdlMat:GetValue("TFG_PRODUT"), "B1_DESC"))
cLog += " - Material de Implantação: " + oMdlMat:GetValue("TFG_COD") + " - " + cDescProd + Chr(13) + Chr(10)
If cCronog == '1'
If !(TecHasTGT("TFG",oMdlMat:GetValue("TFG_COD"),cProxParc,cTFJCOD,@nValPrxMI))
nValPrxMI := At740PrxPa(/*cTipo*/,;
oMdlMat:GetValue("TFG_QTDVEN"),;
oMdlMat:GetValue("TFG_PRCVEN"),;
oMdlMat:GetValue("TFG_DESCON"),;
oMdlMat:GetValue("TFG_TXLUCR"),;
oMdlMat:GetValue("TFG_TXADM"))
EndIf
Else
nValPrxMI := oMdlMat:GetValue("TFG_VLPRPA")
EndIf
cLog += " - Valor Antigo MI (prox. parcela): R$ " + Alltrim(TRANSFORM( nValPrxMI , "@e 999,999,999.99" )) + Chr(13) + Chr(10)
If nPerc == 0 .AND. lAplicRea
nTotal := 0
Else
nTotal := (oMdlMat:GetValue("TFG_PRCVEN") * (nPerc / 100)) * oMdlMat:GetValue("TFG_QTDVEN")
EndIf
nTotal := Round(nTotal,TamSX3("TFG_VLPRPA")[2])
nGrandTot += nTotal
cLog += " - Valor Novo MI (prox. parcela): R$ " + Alltrim(TRANSFORM((IIF(nPerc == 0 .AND. lAplicRea, 0, nValPrxMI) + nTotal), "@e 999,999,999.99" )) +;
" ( + R$ " + Alltrim(TRANSFORM(nTotal, "@e 999,999,999.99" )) + " )" + Chr(13) + Chr(10)
cLog += Chr(13) + Chr(10)
Next nX
ElseIf cTabela == "TFH"
For nX := 1 To oMdlMat:Length()
oMdlMat:GoLine(nX)
cDescProd := Alltrim(Posicione("SB1",1,xFilial("SB1") + oMdlMat:GetValue("TFH_PRODUT"), "B1_DESC"))
cLog += " - Material de Consumo: " + oMdlMat:GetValue("TFH_COD") + " - " + cDescProd + Chr(13) + Chr(10)
If cCronog == '1'
If !(TecHasTGT("TFH",oMdlMat:GetValue("TFH_COD"),cProxParc,cTFJCOD,@nValPrxMC))
nValPrxMC := At740PrxPa(/*cTipo*/,;
oMdlMat:GetValue("TFH_QTDVEN"),;
oMdlMat:GetValue("TFH_PRCVEN"),;
oMdlMat:GetValue("TFH_DESCON"),;
oMdlMat:GetValue("TFH_TXLUCR"),;
oMdlMat:GetValue("TFH_TXADM"))
EndIf
Else
nValPrxMC := oMdlMat:GetValue("TFH_VLPRPA")
EndIf
cLog += " - Valor Antigo MC (prox. parcela): R$ " + Alltrim(TRANSFORM( nValPrxMC , "@e 999,999,999.99" )) + Chr(13) + Chr(10)
If nPerc == 0 .AND. lAplicRea
nTotal := 0
Else
nTotal := (oMdlMat:GetValue("TFH_PRCVEN") * (nPerc / 100)) * oMdlMat:GetValue("TFH_QTDVEN")
EndIf
nTotal := Round(nTotal,TamSX3("TFH_VLPRPA")[2])
nGrandTot += nTotal
cLog += " - Valor Novo MC (prox. parcela): R$ " + Alltrim(TRANSFORM((IIF(nPerc == 0 .AND. lAplicRea, 0, nValPrxMC) + nTotal), "@e 999,999,999.99" )) +;
" ( + R$ " + Alltrim(TRANSFORM(nTotal, "@e 999,999,999.99" )) + " )" + Chr(13) + Chr(10)
cLog += Chr(13) + Chr(10)
Next nX
EndIf
Return
User Function AplicMat(cTabela,oMdlMat,cTFFCOD,cTFJCOD,cCronog,cProxParc,cLog,nPerc,lAplicRea,dDataDe,dDataAte,oMdlTFJ,cProdRet,lEncerra,dDataEncerra,nValRet)
Local nX := 0
Local nValPrxMI := 0
Local nValPrxMC := 0
Local nTotal := 0
Local nValPrc := 0
Local aMatRet := {}
Local aTFGAtu := {}
Local aTFHAtu := {}
Local nMult := 0
If cTabela == "TFG"
For nX := 1 To oMdlMat:Length()
oMdlMat:GoLine(nX)
aMatRet := {}
aTFGAtu := U_MontaMatAtu(cTabela,oMdlMat,dDataDe,dDataAte)
If cCronog == '1'
If !(TecHasTGT("TFG",oMdlMat:GetValue("TFG_COD"),cProxParc,cTFJCOD,@nValPrxMI))
nValPrxMI := At740PrxPa(/*cTipo*/,;
oMdlMat:GetValue("TFG_QTDVEN"),;
oMdlMat:GetValue("TFG_PRCVEN"),;
oMdlMat:GetValue("TFG_DESCON"),;
oMdlMat:GetValue("TFG_TXLUCR"),;
oMdlMat:GetValue("TFG_TXADM"))
EndIf
Else
nValPrxMI := oMdlMat:GetValue("TFG_VLPRPA")
EndIf
nValPrc := oMdlMat:GetValue("TFG_PRCVEN")
nTotal := (nValPrc + (nValPrc * (nPerc / 100)))
If nPerc > 0
oMdlMat:SetValue("TFG_PRCVEN", nTotal)
EndIf
If nPerc == 0 .AND. lAplicRea
nTotal := 0
Else
nTotal := (nValPrc * (nPerc / 100)) * oMdlMat:GetValue("TFG_QTDVEN")
EndIf
nTotal := Round(nTotal,TamSX3("TFG_VLPRPA")[2])
If cCronog == '1'
At740IAuto("TFG", oMdlMat:GetValue("TFG_COD"), cProxParc, nValPrxMI + nTotal, cTFJCOD)
Else
oMdlMat:SetValue("TFG_VLPRPA",nValPrxMI + nTotal)
EndIf
//Busca as TFF´s em revisões anteriores e monta array com valores e dias a serem calculados
//aMatRet := U_GetTFFAnt(cTabela,oMdlMat:GetValue("TFG_CONTRT"),oMdlMat:GetValue("TFG_CONREV"),oMdlMat:GetValue("TFG_COD"),dDataDe,dDataAte,aTFGAtu,lEncerra,dDataEncerra)
aMatRet := U_GetValTFF(cTabela,oMdlMat,dDataDe,dDataAte,nValPrc,lEncerra,dDataEncerra)
//Realiza o calculo conforme as revisões anteriores
If Len(aMatRet) > 0
nTotal := U_ValRetr(aMatRet,nPerc)
Else
U_CeckMult(dDataDe,dDataAte,@nMult)
nTotal := nTotal * nMult
nTotal := Round(nTotal,TamSX3("TFF_VLPRPA")[2])
EndIf
If cProdRet == "1"
//U_AplicRet(oMdlMat,oMdlTFJ,cProxParc,nTotal,cTabela)
U_AplicRet(oMdlMat,oMdlTFJ,cProxParc,nTotal,cTabela,nValPrc,dDataDe,dDataAte,nPerc,nValRet)
EndIf
Next nX
ElseIf cTabela == "TFH"
For nX := 1 To oMdlMat:Length()
oMdlMat:GoLine(nX)
aMatRet := {}
aTFHAtu := U_MontaMatAtu(cTabela,oMdlMat,dDataDe,dDataAte)
If cCronog == '1'
If !(TecHasTGT("TFH",oMdlMat:GetValue("TFH_COD"),cProxParc,cTFJCOD,@nValPrxMC))
nValPrxMC := At740PrxPa(/*cTipo*/,;
oMdlMat:GetValue("TFH_QTDVEN"),;
oMdlMat:GetValue("TFH_PRCVEN"),;
oMdlMat:GetValue("TFH_DESCON"),;
oMdlMat:GetValue("TFH_TXLUCR"),;
oMdlMat:GetValue("TFH_TXADM"))
EndIf
Else
nValPrxMC := oMdlMat:GetValue("TFH_VLPRPA")
EndIf
nValPrc := oMdlMat:GetValue("TFH_PRCVEN")
nTotal := (nValPrc + (nValPrc * (nPerc / 100)))
If nPerc > 0
oMdlMat:SetValue("TFH_PRCVEN", nTotal)
EndIf
If nPerc == 0 .AND. lAplicRea
nTotal := 0
Else
nTotal := (nValPrc * (nPerc / 100)) * oMdlMat:GetValue("TFH_QTDVEN")
EndIf
nTotal := Round(nTotal,TamSX3("TFH_VLPRPA")[2])
If cCronog == '1'
At740IAuto("TFH", oMdlMat:GetValue("TFH_COD"), cProxParc, nValPrxMC + nTotal, cTFJCOD)
Else
oMdlMat:SetValue("TFH_VLPRPA",nValPrxMC + nTotal)
EndIf
//Busca as TFF´s em revisões anteriores e monta array com valores e dias a serem calculados
//aMatRet := U_GetTFFAnt(cTabela,oMdlMat:GetValue("TFH_CONTRT"),oMdlMat:GetValue("TFH_CONREV"),oMdlMat:GetValue("TFH_COD"),dDataDe,dDataAte,aTFHAtu,lEncerra,dDataEncerra)
aMatRet := U_GetValTFF(cTabela,oMdlMat,dDataDe,dDataAte,nValPrc,lEncerra,dDataEncerra)
//Realiza o calculo conforme as revisões anteriores
If Len(aMatRet) > 0
nTotal := U_ValRetr(aMatRet,nPerc)
Else
U_CeckMult(dDataDe,dDataAte,@nMult)
nTotal := nTotal * nMult
nTotal := Round(nTotal,TamSX3("TFF_VLPRPA")[2])
EndIf
If cProdRet == "1"
//U_AplicRet(oMdlMat,oMdlTFJ,cProxParc,nTotal,cTabela)
U_AplicRet(oMdlMat,oMdlTFJ,cProxParc,nTotal,cTabela,nValPrc,dDataDe,dDataAte,nPerc,nValRet)
EndIf
Next nX
EndIf
Return
User Function AplicTGT(cTpItem,cCodItem,cCompet,cCodTFJ,nVal)
Local aArea := GetArea()
Local cSql := ""
Local cAliasAux := GetNextAlias()
cSql += " SELECT TGT.TGT_VALOR, TGT.TGT_COMPET FROM " + RetSqlName("TGT") + " TGT "
cSql += " WHERE TGT.D_E_L_E_T_ = ' ' AND "
cSql += " TGT.TGT_TPITEM = '"+cTpItem+"' AND "
cSql += " TGT.TGT_CDITEM = '"+cCodItem+"' "
cSql := ChangeQuery(cSql)
dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.)
While (cAliasAux)->(!EOF())
If Val(Substr((cAliasAux)->TGT_COMPET,1,2)) + Val(Substr((cAliasAux)->TGT_COMPET,4,7)) >= Val(Substr(cCompet,1,2)) + Val(Substr(cCompet,4,7))
lRet := .T.
At740IAuto("TFF", cCodItem, (cAliasAux)->TGT_COMPET, (cAliasAux)->TGT_VALOR + nVal, cCodTFJ)
EndIf
(cAliasAux)->(DbSkip())
EndDo
(cAliasAux)->(DbCloseArea())
RestArea(aArea)
Return
User Function AplicRet(oMdlTFF,oMdlTFJ,cCompet,nTotal,cTabela,nValPrc,dDataDe,dDataAte,nPerc,nValRet)
Local lRet := .T.
Local cProdRet := ""
Local cCodItem := ""
Local lCpoTGT := U_ChkCpoTGT()
Default cTabela := "TFF"
Default nValPrc := 0
Default dDataDe := CTOD('')
Default dDataAte := CTOD('')
Default nPerc := 0
Default nValRet := 0
If cTabela == "TFF"
If !Empty(oMdlTFF:GetValue("TFF_PRDRET"))
cProdRet := oMdlTFF:GetValue("TFF_PRDRET")
Else
cProdRet := oMdlTFJ:GetValue("TFJ_PRDRET")
EndIf
cCodItem := oMdlTFF:GetValue("TFF_COD")
Else
cProdRet := oMdlTFJ:GetValue("TFJ_PRDRET")
If cTabela == "TFH"
cCodItem := oMdlTFF:GetValue("TFH_COD")
Else
cCodItem := oMdlTFF:GetValue("TFG_COD")
EndIf
EndIf
If nTotal < 0
nTotal := 0
EndIf
/*
If lCpoTGT
If nValRet > 0
nPerc := U_ChkInd(nValPrc,nValRet)
nPerc := nPerc * 100
nValRet := nValRet - nValPrc
ElseIf nPerc > 0
nValRet := (nValPrc * (nPerc / 100))
EndIf
EndIf
*/
U_ChkRtTGT(cTabela, cCodItem, cCompet, oMdlTFJ:GetValue("TFJ_CODIGO"))
At740IExce(cTabela, cCodItem, cCompet, nTotal, oMdlTFJ:GetValue("TFJ_CODIGO"),cProdRet,dDataDe,dDataAte,nPerc,nValRet)
Return lRet
User Function ChkRtTGT(cTpItem, cCodItem, cCompet, cTFJ_CODIGO)
Local cSql := ""
Local cAliasAux := GetNextAlias()
cSql += " SELECT TGT.R_E_C_N_O_ TGTRECNO FROM " + RetSqlName("TGT") + " TGT "
cSql += " WHERE TGT.D_E_L_E_T_ = ' ' AND "
cSql += " TGT.TGT_TPITEM = '"+cTpItem+"' AND "
cSql += " TGT.TGT_CDITEM = '"+cCodItem+"' AND "
cSql += " TGT.TGT_CODTFJ = '"+cTFJ_CODIGO+"' AND "
cSql += " TGT.TGT_COMPET = '"+cCompet+"' AND "
cSql += " TGT.TGT_EXCEDT = '1' "
cSql := ChangeQuery(cSql)
dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.)
If (cAliasAux)->(!EOF())
TGT->( DbGoTo( (cAliasAux)->TGTRECNO ) )
Reclock("TGT", .F.)
TGT->( DbDelete() )
TGT->( MsUnlock() )
(cAliasAux)->(DbSkip())
EndIf
(cAliasAux)->(DbCloseArea())
Return
User Function MontaTFFAtu(oMdlTFF,dDataDe,dDataAte)
Local aItTFF := {}
If Day(dDataAte) > 30
dDataAte := dDataAte - 1
EndIf
If Day(dDataDe) > 30
dDataDe := dDataDe - 1
EndIf
aAdd(aItTFF,{"TFF_COD",oMdlTFF:GetValue("TFF_COD")})
aAdd(aItTFF,{"TFF_QTDVEN",oMdlTFF:GetValue("TFF_QTDVEN")})
aAdd(aItTFF,{"TFF_PRCVEN",oMdlTFF:GetValue("TFF_PRCVEN")})
If oMdlTFF:GetValue("TFF_PERINI") <= dDataDe
aAdd(aItTFF,{"TFF_PERINI",dDataDe})
Else
aAdd(aItTFF,{"TFF_PERINI",oMdlTFF:GetValue("TFF_PERINI")})
EndIf
If oMdlTFF:GetValue("TFF_PERFIM") >= dDataAte
aAdd(aItTFF,{"TFF_PERFIM",dDataAte})
Else
aAdd(aItTFF,{"TFF_PERFIM",oMdlTFF:GetValue("TFF_PERFIM")})
EndIf
Return aItTFF
User Function MontaMatAtu(cTabela,oMdlMat,dDataDe,dDataAte)
Local aMatAtu := {}
If cTabela == "TFG"
aAdd(aMatAtu,{"TFG_COD",oMdlMat:GetValue("TFG_COD")})
aAdd(aMatAtu,{"TFG_QTDVEN",oMdlMat:GetValue("TFG_QTDVEN")})
aAdd(aMatAtu,{"TFG_PRCVEN",oMdlMat:GetValue("TFG_PRCVEN")})
aAdd(aMatAtu,{"TFG_PERINI",dDataDe})
aAdd(aMatAtu,{"TFG_PERFIM",dDataAte})
ElseIf cTabela == "TFH"
aAdd(aMatAtu,{"TFH_COD",oMdlMat:GetValue("TFH_COD")})
aAdd(aMatAtu,{"TFH_QTDVEN",oMdlMat:GetValue("TFH_QTDVEN")})
aAdd(aMatAtu,{"TFH_PRCVEN",oMdlMat:GetValue("TFH_PRCVEN")})
aAdd(aMatAtu,{"TFH_PERINI",dDataDe})
aAdd(aMatAtu,{"TFH_PERFIM",dDataAte})
EndIf
Return aMatAtu
//Cria um Array com todas as revisões de um Item com as datas de inicio e fim da revisão
User Function GetTFFAnt(cTabela,cContrato,cRevisa,cCodTFF,dDataDe,dDataAte,aTFFAtu,lEncerra,dDataEnce)
Local cSql := ""
Local aItTFF := {}
Local aRevAnt := {}
Local aRevAtu := {}
Local cAliasAux := GetNextAlias()
Local lRevAnt := .F.
Local nX := 0
Local nMeses := 0
Local nDias := 0
Local lBuscaRev := !Empty(dDataDe) .And. !Empty(dDataAte)
Local aTFFAnt := {}
Local dTFFIniBKP := aTFFAtu[4][2]
Default lEncerra := .F.
Default dDataEnce := CTOD(" / / ")
If lBuscaRev
cSql += " SELECT CN9_DTREV,CN9_NUMERO,CN9_REVISA,CN9_REVATU FROM " + RetSqlName("CN9") + " CN9 "
cSql += " WHERE CN9.D_E_L_E_T_ = ' ' AND "
cSql += " CN9.CN9_FILIAL = '" + xFilial("CN9") + "' AND "
cSql += " CN9.CN9_NUMERO = '" + cContrato + "' AND "
cSql += " CN9.CN9_DTREV >= '" + DtoS(dDataDe) + "' AND "
cSql += " CN9.CN9_DTREV <= '" + DtoS(dDataAte) + "' AND "
cSql += " CN9.CN9_REVISA <= '" + cRevisa + "' "
cSql += " ORDER BY CN9_REVISA "
cSql := ChangeQuery(cSql)
dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.)
While (cAliasAux)->(!EOF())
If (cAliasAux)->CN9_DTREV >= DtoS(dDataDe) .And. !lRevAnt
aRevAnt := U_BuscaRevAnt(cTabela,cContrato,cCodTFF,(cAliasAux)->CN9_REVISA,dDataDe,sTod((cAliasAux)->CN9_DTREV))
If Len(aRevAnt) > 0
aAdd(aItTFF,aRevAnt)
aRevAnt := {}
EndIf
aTFFAnt := U_BuscaItAnt(cTabela,cContrato,(cAliasAux)->CN9_REVISA,cCodTFF,dDataDe,sTod((cAliasAux)->CN9_DTREV))
If Len(aTFFAnt) > 0
If sToD((cAliasAux)->CN9_DTREV) > aTFFAnt[4][2]
aTFFAnt[4][2] := sToD((cAliasAux)->CN9_DTREV)
EndIf
aAdd(aItTFF,aTFFAnt)
EndIf
aTFFAnt := {}
lRevAnt := .T.
If (cAliasAux)->CN9_REVISA = '001' .And. Empty((cAliasAux)->CN9_REVATU)
aTFFAnt := U_GetTFFAtu(cTabela,cContrato,cRevisa,cCodTFF,sTod((cAliasAux)->CN9_DTREV),dDataAte)
If Len(aTFFAnt) > 0
aAdd(aItTFF,aTFFAnt)
EndIf
aTFFAnt := {}
EndIf
Else
If (cAliasAux)->CN9_REVISA == cRevisa
If Len(aItTFF) > 0
aItTFF[Len(aItTFF)][5][2] := sToD((cAliasAux)->CN9_DTREV)
EndIf
If !Empty((cAliasAux)->CN9_DTREV)
aTFFAtu[4][2] := sToD((cAliasAux)->CN9_DTREV)
EndIf
aAdd(aItTFF,aTFFAtu)
Else
If Len(aItTFF) > 0
aItTFF[Len(aItTFF)][5][2] := sToD((cAliasAux)->CN9_DTREV)
EndIf
aTFFAnt := U_BuscaItAnt(cTabela,cContrato,(cAliasAux)->CN9_REVISA,cCodTFF,dDataDe,sTod((cAliasAux)->CN9_DTREV))
If Len(aTFFAnt) > 0
aTFFAnt[4][2] := sToD((cAliasAux)->CN9_DTREV)
aAdd(aItTFF,aTFFAnt)
EndIf
aTFFAnt := {}
EndIf
EndIf
(cAliasAux)->(DbSkip())
EndDo
(cAliasAux)->(DbCloseArea())
//Caso não tenha nenhuma revisão, o array retorna vazio e o array com os dadados atuais serão criados
If Empty(aItTFF)
aRevAtu := U_GetTFFAtu(cTabela,cContrato,cRevisa,cCodTFF,dDataDe,dDataAte)
If Len(aRevAtu) > 0
aAdd(aItTFF,aRevAtu)
aRevAtu := {}
EndIf
EndIf
//Ajusta o array com a data final de reajuste
U_AjItTFF(aItTFF,dDataAte,lEncerra,dDataEnce,aTFFAtu[5][2],dTFFIniBKP)
//Verifica se algum periodo ficou com a data maior que a data de encerramento da TFF
U_ChkDtTFF(aItTFF, aTFFAtu[5][2], dDataAte)
//Realiza o calculo para verificar a quantidade de dias e meses serão realizados o calculo
For nX := 1 To Len(aItTFF)
If aItTFF[nX][4][2] <> aItTFF[nX][5][2] .Or. nX == Len(aItTFF)
If aItTFF[nX][5][2] > aItTFF[nX][4][2]
If Day(aItTFF[nX][4][2]) > 1
nMeses := DateDiffMonth(aItTFF[nX][4][2],aItTFF[nX][5][2]) - 1
nDias := (30 - Day(aItTFF[nX][4][2])) + 1
If Day(aItTFF[nX][5][2]) == 30
nMeses += 1
Else
nDias += Day(aItTFF[nX][5][2]) - 1
EndIf
Else
nMeses := DateDiffMonth(aItTFF[nX][4][2],aItTFF[nX][5][2])
If Day(aItTFF[nX][5][2]) == 30
nMeses += 1
Else
nDias += Day(aItTFF[nX][5][2]) - 1
EndIf
EndIf
If nDias >= 30
nDias := nDias - 30
nMeses += 1
EndIf
Else
If nX == Len(aItTFF) .And. aItTFF[nX][5][2] == aItTFF[nX][4][2]
nMeses := 0
nDias := 1
Else
nMeses := 0
nDias := 0
EndIf
EndIf
EndIf
aAdd(aItTFF[nX],{"MESES",nMeses})
aAdd(aItTFF[nX],{"DIAS",nDias})
nMeses := 0
nDias := 0
Next nX
EndIf
Return aItTFF
//Faz uma busca nas revisoes anteriores
User Function BuscaRevAnt(cTabela,cContrato,cCodTFF,cRevAtu,dDataDe,dDataRev)
Local cSql := ""
Local aItTFF := {}
Local cAliasAux := GetNextAlias()
cSql += " SELECT CN9_DTREV,CN9_NUMERO,CN9_REVISA,CN9_REVATU FROM " + RetSqlName("CN9") + " CN9 "
cSql += " WHERE CN9.D_E_L_E_T_ = ' ' AND "
cSql += " CN9.CN9_FILIAL = '" + xFilial("CN9") + "' AND "
cSql += " CN9.CN9_NUMERO = '" + cContrato + "' AND "
cSql += " CN9.CN9_REVATU = '" + cRevAtu + "' "
cSql := ChangeQuery(cSql)
dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.)
If (cAliasAux)->(!EOF())
If (cAliasAux)->CN9_DTREV < DtoS(dDataDe)
aItTFF := U_BuscaItAnt(cTabela,cContrato,(cAliasAux)->CN9_REVISA,cCodTFF,dDataDe,dDataRev,.T.)
EndIf
(cAliasAux)->(DbSkip())
EndIf
(cAliasAux)->(DbCloseArea())
Return aItTFF
//Monta o array com as TFF´s de revisões anteriores com os respectivos dados
User Function BuscaItAnt(cTabela,cContrato,cRevAtu,cCodTFF,dDataDe,dDataRev,lRevAnt)
Local cSql := ""
Local cAliasAux := GetNextAlias()
Local aItTFF := {}
Default lRevAnt := .F.
Do Case
Case cTabela == "TFF"
cSql += " SELECT TFF.TFF_COD, TFF.TFF_CONREV ,TFF.TFF_QTDVEN,TFF.TFF_PRCVEN,TFF.TFF_PERINI,TFF.TFF_PERFIM FROM " + RetSqlName("TFF") + " TFF "
cSql += " WHERE TFF.D_E_L_E_T_ = ' ' AND "
cSql += " TFF.TFF_FILIAL = '" + xFilial("TFF") + "' AND "
cSql += " TFF.TFF_CONTRT = '" + cContrato + "' AND "
cSql += " TFF.TFF_CODSUB = '" + cCodTFF + "' "
cSql := ChangeQuery(cSql)
dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.)
If (cAliasAux)->(!EOF())
If (cAliasAux)->TFF_CONREV == cRevAtu
aAdd(aItTFF,{"TFF_COD",(cAliasAux)->TFF_COD})
aAdd(aItTFF,{"TFF_QTDVEN",(cAliasAux)->TFF_QTDVEN})
aAdd(aItTFF,{"TFF_PRCVEN",(cAliasAux)->TFF_PRCVEN})
If lRevAnt
If (cAliasAux)->TFF_PERINI < dToS(dDataDe)
aAdd(aItTFF,{"TFF_PERINI",dDataDe})
Else
aAdd(aItTFF,{"TFF_PERINI",sToD((cAliasAux)->TFF_PERINI)})
EndIf
If sToD((cAliasAux)->TFF_PERINI) > dDataRev
aAdd(aItTFF,{"TFF_PERFIM",sToD((cAliasAux)->TFF_PERINI)})
Else
aAdd(aItTFF,{"TFF_PERFIM",dDataRev})
EndIf
Else
aAdd(aItTFF,{"TFF_PERINI",dDataRev})
aAdd(aItTFF,{"TFF_PERFIM",dDataRev})
EndIf
Else
aItTFF := U_BuscaItAnt(cTabela,cContrato,cRevAtu,(cAliasAux)->TFF_COD,dDataDe,dDataRev,.T.)
EndIf
(cAliasAux)->(DbSkip())
EndIf
(cAliasAux)->(DbCloseArea())
Case cTabela == "TFH"
cSql += " SELECT TFH.TFH_COD, TFH.TFH_CONREV ,TFH.TFH_QTDVEN,TFH.TFH_PRCVEN,TFH.TFH_PERINI,TFH.TFH_PERFIM FROM " + RetSqlName("TFH") + " TFH "
cSql += " WHERE TFH.D_E_L_E_T_ = ' ' AND "
cSql += " TFH.TFH_FILIAL = '" + xFilial("TFH") + "' AND "
cSql += " TFH.TFH_CONTRT = '" + cContrato + "' AND "
cSql += " TFH.TFH_CODSUB = '" + cCodTFF + "' "
cSql := ChangeQuery(cSql)
dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.)
If (cAliasAux)->(!EOF())
If (cAliasAux)->TFH_CONREV == cRevAtu
aAdd(aItTFF,{"TFH_COD",(cAliasAux)->TFH_COD})
aAdd(aItTFF,{"TFH_QTDVEN",(cAliasAux)->TFH_QTDVEN})
aAdd(aItTFF,{"TFH_PRCVEN",(cAliasAux)->TFH_PRCVEN})
If lRevAnt
If (cAliasAux)->TFH_PERINI < dToS(dDataDe)
aAdd(aItTFF,{"TFH_PERINI",dDataDe})
Else
aAdd(aItTFF,{"TFH_PERINI",sToD((cAliasAux)->TFH_PERINI)})
EndIf
aAdd(aItTFF,{"TFH_PERFIM",dDataRev})
Else
aAdd(aItTFF,{"TFH_PERINI",dDataRev})
aAdd(aItTFF,{"TFH_PERFIM",dDataRev})
EndIf
Else
aItTFF := U_BuscaItAnt(cTabela,cContrato,cRevAtu,(cAliasAux)->TFH_COD,dDataDe,dDataRev,.T.)
EndIf
(cAliasAux)->(DbSkip())
EndIf
(cAliasAux)->(DbCloseArea())
Case cTabela == "TFG"
cSql += " SELECT TFG.TFG_COD, TFG.TFG_CONREV ,TFG.TFG_QTDVEN,TFG.TFG_PRCVEN,TFG.TFG_PERINI,TFG.TFG_PERFIM FROM " + RetSqlName("TFG") + " TFG "
cSql += " WHERE TFG.D_E_L_E_T_ = ' ' AND "
cSql += " TFG.TFG_FILIAL = '" + xFilial("TFG") + "' AND "
cSql += " TFG.TFG_CONTRT = '" + cContrato + "' AND "
cSql += " TFG.TFG_CODSUB = '" + cCodTFF + "' "
cSql := ChangeQuery(cSql)
dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.)
If (cAliasAux)->(!EOF())
If (cAliasAux)->TFG_CONREV == cRevAtu
aAdd(aItTFF,{"TFG_COD",(cAliasAux)->TFG_COD})
aAdd(aItTFF,{"TFG_QTDVEN",(cAliasAux)->TFG_QTDVEN})
aAdd(aItTFF,{"TFG_PRCVEN",(cAliasAux)->TFG_PRCVEN})
If lRevAnt
If (cAliasAux)->TFG_PERINI < dToS(dDataDe)
aAdd(aItTFF,{"TFG_PERINI",dDataDe})
Else
aAdd(aItTFF,{"TFG_PERINI",sToD((cAliasAux)->TFG_PERINI)})
EndIf
aAdd(aItTFF,{"TFG_PERFIM",dDataRev})
Else
aAdd(aItTFF,{"TFG_PERINI",dDataRev})
aAdd(aItTFF,{"TFG_PERFIM",dDataRev})
EndIf
Else
aItTFF := U_BuscaItAnt(cTabela,cContrato,cRevAtu,(cAliasAux)->TFG_COD,dDataDe,dDataRev,.T.)
EndIf
(cAliasAux)->(DbSkip())
EndIf
(cAliasAux)->(DbCloseArea())
EndCase
Return aItTFF
//Faz o calculo conforme as datas informadas no array aTFF
User Function ValRetr(aTFF,nPerc,nValDiff)
Local nRet := 0
Local nX := 0
Local nValor := 0
Local nQtd := 0
For nX := 1 To Len(aTFF)
nValor := aTFF[nX][3][2]
nQtd := aTFF[nX][2][2]
If aTFF[nX][6][2] > 0
nRet += U_CalcMesTFF(nQtd,nValor,nPerc,nValDiff,aTFF[nX][6][2])
EndIf
If aTFF[nX][7][2] > 0
nRet += U_CalcDTFF(nQtd,nValor,nPerc,nValDiff,aTFF[nX][7][2])
EndIf
Next nX
nRet := Round(nRet,TamSX3("TFF_VLPRPA")[2])
Return nRet
//Realiza o calculo por mês do reajuste retroativo
User Function CalcMesTFF(nQtd,nValor,nPerc,nValDiff,nMes)
Local nVal := 0
If nPerc > 0
nVal := (nValor * (nPerc / 100)) * nQtd
nVal := nVal * nMes
ElseIf nValDiff > 0
nVal := (nValDiff * nMes) * nQtd
EndIf
Return nVal
//Realiza o calculo por dia do reajuste retroativo
User Function CalcDTFF(nQtd,nValor,nPerc,nValDiff,nDias)
Local nVal := 0
Local nValDias := 0
If nPerc > 0
nValDias := U_CalcValDias(nValor)
ElseIf nValDiff > 0
nValDias := U_CalcValDias(nValDiff)
EndIf
If nPerc > 0
nValDias := nValDias * nQtd
nVal := (nValDias * (nPerc / 100))
nVal := nVal * nDias
ElseIf nValDiff > 0
nVal := (nValDias * nDias) * nQtd
EndIf
Return nVal
//Retorna o valor diario de um reajuste para calculo
User Function CalcValDias(nValor)
Return (nValor / 30 )
//Faz o calculo para verificar o periodo que foi informado nos campos Data De e Data Até para realizar os calculos
User Function CeckMult(dDataDe,dDataAte,nMult)
If !Empty(dDataDe) .And. !Empty(dDataAte)
nMult := DateDiffMonth(dDataDe,dDataAte) + 1
EndIf
Return
//Valida se os campos de data serão preenchidos de forma correta
User Function VldDtRet(nPerc,dDataDe,dDataAte)
Local lRet := .T.
If nPerc > 0
If Empty(dDataDe)
MsgAlert("O campo Data de ? está vazio e deve ser preenchido para reajuste retroativo", "Atenção")
lRet := .F.
EndIf
If lRet .And. Empty(dDataAte)
MsgAlert("O campo Data Ate ? está vazio e deve ser preenchido para reajuste retroativo", "Atenção")
lRet := .F.
EndIf
If lRet .And. dDataAte < dDataDe
MsgAlert("O campo Data Ate ? deve ser maior que o campo Data De ?", "Atenção")
lRet := .F.
EndIf
EndIf
Return lRet
//Monta o array com as informações da TFF atuais quando não tem revisão criada
User Function GetTFFAtu(cTabela,cContrato,cRevAtu,cCodTFF,dDataDe,dDataAte)
Local cSql := ""
Local cAliasAux := GetNextAlias()
Local aItTFF := {}
Default lRevAnt := .F.
Do Case
Case cTabela == "TFF"
cSql += " SELECT TFF.TFF_COD, TFF.TFF_CONREV ,TFF.TFF_QTDVEN,TFF.TFF_PRCVEN,TFF.TFF_PERINI,TFF.TFF_PERFIM FROM " + RetSqlName("TFF") + " TFF "
cSql += " WHERE TFF.D_E_L_E_T_ = ' ' AND "
cSql += " TFF.TFF_FILIAL = '" + xFilial("TFF") + "' AND "
cSql += " TFF.TFF_CONTRT = '" + cContrato + "' AND "
cSql += " TFF.TFF_COD = '" + cCodTFF + "' "
cSql := ChangeQuery(cSql)
dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.)
If (cAliasAux)->(!EOF())
If (cAliasAux)->TFF_CONREV == cRevAtu
aAdd(aItTFF,{"TFF_COD",(cAliasAux)->TFF_COD})
aAdd(aItTFF,{"TFF_QTDVEN",(cAliasAux)->TFF_QTDVEN})
aAdd(aItTFF,{"TFF_PRCVEN",(cAliasAux)->TFF_PRCVEN})
If (cAliasAux)->TFF_PERINI < dToS(dDataDe)
aAdd(aItTFF,{"TFF_PERINI",dDataDe})
Else
aAdd(aItTFF,{"TFF_PERINI",sToD((cAliasAux)->TFF_PERINI)})
EndIf
aAdd(aItTFF,{"TFF_PERFIM",dDataAte})
EndIf
(cAliasAux)->(DbSkip())
EndIf
(cAliasAux)->(DbCloseArea())
Case cTabela == "TFH"
cSql += " SELECT TFH.TFH_COD, TFH.TFH_CONREV ,TFH.TFH_QTDVEN,TFH.TFH_PRCVEN,TFH.TFH_PERINI,TFH.TFH_PERFIM FROM " + RetSqlName("TFH") + " TFH "
cSql += " WHERE TFH.D_E_L_E_T_ = ' ' AND "
cSql += " TFH.TFH_FILIAL = '" + xFilial("TFH") + "' AND "
cSql += " TFH.TFH_CONTRT = '" + cContrato + "' AND "
cSql += " TFH.TFH_COD = '" + cCodTFF + "' "
cSql := ChangeQuery(cSql)
dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.)
If (cAliasAux)->(!EOF())
If (cAliasAux)->TFH_CONREV == cRevAtu
aAdd(aItTFF,{"TFH_COD",(cAliasAux)->TFH_COD})
aAdd(aItTFF,{"TFH_QTDVEN",(cAliasAux)->TFH_QTDVEN})
aAdd(aItTFF,{"TFH_PRCVEN",(cAliasAux)->TFH_PRCVEN})
If (cAliasAux)->TFH_PERINI < dToS(dDataDe)
aAdd(aItTFF,{"TFH_PERINI",dDataDe})
Else
aAdd(aItTFF,{"TFH_PERINI",sToD((cAliasAux)->TFH_PERINI)})
EndIf
aAdd(aItTFF,{"TFH_PERFIM",dDataAte})
EndIf
(cAliasAux)->(DbSkip())
EndIf
(cAliasAux)->(DbCloseArea())
Case cTabela == "TFG"
cSql += " SELECT TFG.TFG_COD, TFG.TFG_CONREV ,TFG.TFG_QTDVEN,TFG.TFG_PRCVEN,TFG.TFG_PERINI,TFG.TFG_PERFIM FROM " + RetSqlName("TFG") + " TFG "
cSql += " WHERE TFG.D_E_L_E_T_ = ' ' AND "
cSql += " TFG.TFG_FILIAL = '" + xFilial("TFG") + "' AND "
cSql += " TFG.TFG_CONTRT = '" + cContrato + "' AND "
cSql += " TFG.TFG_COD = '" + cCodTFF + "' "
cSql := ChangeQuery(cSql)
dbUseArea( .T., "TOPCONN", TCGENQRY(,,cSql),cAliasAux, .F., .T.)
If (cAliasAux)->(!EOF())
If (cAliasAux)->TFG_CONREV == cRevAtu
aAdd(aItTFF,{"TFG_COD",(cAliasAux)->TFG_COD})
aAdd(aItTFF,{"TFG_QTDVEN",(cAliasAux)->TFG_QTDVEN})
aAdd(aItTFF,{"TFG_PRCVEN",(cAliasAux)->TFG_PRCVEN})
If (cAliasAux)->TFG_PERINI < dToS(dDataDe)
aAdd(aItTFF,{"TFG_PERINI",dDataDe})
Else
aAdd(aItTFF,{"TFG_PERINI",sToD((cAliasAux)->TFG_PERINI)})
EndIf
aAdd(aItTFF,{"TFG_PERFIM",dDataAte})
EndIf
(cAliasAux)->(DbSkip())
EndIf
(cAliasAux)->(DbCloseArea())
EndCase
Return aItTFF
//Ajusta a Data final no Array
User Function AjItTFF(aItTFF,dDataAte,lEncerra,dDataEncerra,dDtFim, dDtIni)
Local nPos := Len(aItTFF)
If nPos > 0
If lEncerra
If dDataAte > dDataEncerra
aItTFF[nPos][5][2] := dDataEncerra
ElseIf dDataAte < dDataEncerra
aItTFF[nPos][5][2] := dDataAte
EndIf
Else
If dDtFim >= dDataAte
aItTFF[nPos][5][2] := dDataAte
ElseIf dDtFim <= dDataAte
aItTFF[nPos][5][2] := dDtFim
EndIf
If dDtIni >= aItTFF[nPos][4][2]
aItTFF[nPos][4][2] := dDtIni
EndIf
EndIf
EndIf
Return aItTFF
User Function ChkDtTFF(aItTFF, dDtfimTFF, dDataAte)
Local nPos := Len(aItTFF)
Local nX := 0
Local dDtIniRev
Local dDtFimRev
If nPos > 0
For nX := 1 To nPos
If dDataAte <= dDtfimTFF
If aItTFF[nX][5][2] < aItTFF[nX][4][2]
dDtIniRev := aItTFF[nX][4][2]
dDtFimRev := aItTFF[nX][5][2]
If nX > 1 .And. (nX + 1) <= nPos
aItTFF[nX-1][5][2] := aItTFF[nX][5][2]
aItTFF[nX+1][4][2] := aItTFF[nX][4][2]
aItTFF[nX][4][2] := dDtFimRev
aItTFF[nX][5][2] := dDtIniRev
EndIf
EndIf
Else
If aItTFF[nX][5][2] > dDtfimTFF
aItTFF[nX][5][2] := dDtfimTFF
EndIf
EndIf
Next nX
EndIf
Return aItTFF
//Coloca a cor azul no botão Aplicar
User Function ColorAplic()
Local cCssCor := "QPushButton{margin-top:1px; border-color:#1F739E; font:bold; border-radius:2px; background-color:#1F739E; color:#ffffff; border-style: outset; border-width:1px; }"
Return (cCssCor)
//Valida se os campos de Valor ou Percentual estão preenchidos
User Function VldCpoRe(nValid,nValor,cCampo)
Local lRet := .T.
If nValor > 0 .And. nValid > 0
lRet := .F.
MsgAlert("O campo " + cCampo + " não pode ser preenchido!")
EndIf
Return lRet
//Valida os campos quando utiliza o processo de Valor e não Percentual
User Function VldOpc(nValor,lValid,cCampo,cValCpo)
Local lRet := .T.
If nValor > 0 .And. lValid .And. Alltrim(SubStr(cValCpo,1,1)) == "1"
lRet := .F.
MsgAlert("O Campo " + cCampo + " não pode ser configurado com o valor " + cValCpo + " quando utilizar o campo Novo Valor (R$) " )
EndIf
Return lRet
User Function ChkCpoTGT()
Return TGT->( ColumnPos('TGT_DTINI') ) > 0 .AND. TGT->( ColumnPos('TGT_DTFIM') ) > 0 .AND. TGT->( ColumnPos('TGT_INDICE') ) > 0 .AND. TGT->( ColumnPos('TGT_VALREA') > 0 )
User Function ChkInd(nValPrc,nValRet)
Local nInd := 0
Local nDif := 0
nDif := nValRet - nValPrc
nInd := nDif / nValPrc
nInd := Round(nInd,TamSX3("TGT_INDICE")[2])
Return nInd
//Faz o calculo para retornar o valor de reajuste de cada mês
User Function ValRetMes(aTFF,nMes,nIndice,nValDiff)
Local aValores := {}
Local nX := 0
Local nQtd := 0
Local nRet := 0
Local nRetDias := 0
Local nValDias := 0
Local nDias := 0
Local nValBkp := nValDiff
For nX := 1 To Len(aTFF)
nValDiff := nValBkp
If aTFF[nX][6][2] <> 0 .Or. aTFF[nX][7][2] <> 0
nQtd := aTFF[nX][2][2]
If Month(aTFF[nX][4][2]) < nMes .And. Month(aTFF[nX][5][2]) > nMes
If nValDiff > 0
nValdiff := nValDiff - aTFF[nX][3][2]
nRet := (nValDiff * 1) * nQtd
ElseIf nIndice > 0
nRet := (aTFF[nX][3][2] * (nIndice / 100)) * nQtd
nRet := nRet * 1
EndIf
Else
If Month(aTFF[nX][4][2]) == nMes
If Month(aTFF[nX][4][2]) == nMes .And. Month(aTFF[nX][5][2]) == nMes
If nValDiff > 0
nValDiff := nValDiff - aTFF[nX][3][2]
nValDias := U_CalcValDias(nValDiff)
nDias := 30
nRetDias += (nValDias * nDias) * nQtd
ElseIf nIndice > 0
nValDias := U_CalcValDias(aTFF[nX][3][2])
nValDias := (nValDias * (nIndice / 100))
nDias := 30
nRetDias += (nValDias * nDias) * nQtd
EndIf
ElseIf Day(aTFF[nX][4][2]) > 1
If nValDiff > 0
nValDiff := nValDiff - aTFF[nX][3][2]
nValDias := U_CalcValDias(nValDiff)
nDias := (30 - Day(aTFF[nX][4][2])) + 1
nRetDias += (nValDias * nDias) * nQtd
Else
nValDias := U_CalcValDias(aTFF[nX][3][2])
nValDias := (nValDias * (nIndice / 100))
nDias := (30 - Day(aTFF[nX][4][2])) + 1
nRetDias += (nValDias * nDias) * nQtd
EndIf
Else
If nValDiff > 0
nValDiff := nValDiff - aTFF[nX][3][2]
nRet := (nValDiff * 1) * nQtd
ElseIf nIndice > 0
nRet := (aTFF[nX][3][2] * (nIndice / 100)) * nQtd
nRet := nRet * 1
EndIf
EndIf
ElseIf Month(aTFF[nX][5][2]) == nMes .And. Day(aTFF[nX][5][2]) > 1
If Day(aTFF[nX][5][2]) < 30
If nValDiff > 0
nValDiff := nValDiff - aTFF[nX][3][2]
nValDias := U_CalcValDias(nValDiff)
If Day(aTFF[nX][5][2]) == 1
nDias := Day(aTFF[nX][5][2])
Else
nDias := Day(aTFF[nX][5][2]) - 1
EndIf
nRetDias += (nValDias * nDias) * nQtd
ElseIf nIndice > 0
nValDias := U_CalcValDias(aTFF[nX][3][2])
nValDias := (nValDias * (nIndice / 100))
nDias := Day(aTFF[nX][5][2])
nRetDias += (nValDias * nDias) * nQtd
EndIf
Else
If nValDiff > 0
nValdiff := nValDiff - aTFF[nX][3][2]
nRet := (nValDiff * 1) * nQtd
ElseIf nIndice > 0
nRet := (aTFF[nX][3][2] * (nIndice / 100)) * nQtd
nRet := nRet * 1
EndIf
EndIf
EndIf
EndIf
EndIf
Next nX
If nRetDias > 0
nRet := Round(nRetDias,TamSX3("TFF_VLPRPA")[2])
Else
nRet := Round(nRet,TamSX3("TFF_VLPRPA")[2])
EndIf
aAdd(aValores,{ MesExtenso(nMes),nRet})
Return aValores
User Function GetValTFF(cTable,oModel,dDataDe,dDataAte,nValor,lEncerra,dDataEnce)
Local aItTFF := {}
Local aItens := {}
Local dIniAux := CTOD(" / / ")
Local dFimAux := CTOD(" / / ")
aAdd(aItTFF,{cTable+'_COD',oModel:GetValue(cTable+'_COD')})
aAdd(aItTFF,{cTable+'_QTDVEN',oModel:GetValue(cTable+'_QTDVEN')})
aAdd(aItTFF,{cTable+'_PRCVEN',nValor})
If oModel:GetValue(cTable+'_PERINI') <= dDataDe
aAdd(aItTFF,{cTable+'_PERINI',dDataDe})
Else
If Day(oModel:GetValue(cTable+'_PERINI')) > 30
dIniAux := oModel:GetValue(cTable+'_PERINI') - 1
Else
dIniAux := oModel:GetValue(cTable+'_PERINI')
EndIf
aAdd(aItTFF,{cTable+'_PERINI',dIniAux})
EndIf
If !lEncerra
If oModel:GetValue(cTable+'_PERFIM') >= dDataAte
aAdd(aItTFF,{cTable+'_PERFIM',dDataAte})
Else
If Day(oModel:GetValue(cTable+'_PERFIM')) > 30
dFimAux := oModel:GetValue(cTable+'_PERFIM') - 1
Else
dFimAux := oModel:GetValue(cTable+'_PERFIM')
EndIf
aAdd(aItTFF,{cTable+'_PERFIM',dFimAux})
EndIf
Else
If dDataEnce > dDataAte
aAdd(aItTFF,{cTable+'_PERFIM',dDataAte})
Else
If Day(dDataEnce) > 30
dFimAux := dDataEnce - 1
Else
dFimAux := dDataEnce
EndIf
aAdd(aItTFF,{cTable+'_PERFIM',dFimAux})
EndIf
EndIf
aAdd(aItens,aItTFF)
//Ajusta os itens para realizar o calculo dos dias
U_GetDtItens(@aItens)
Return aItens
User Function GetDtItens(aItTFF)
Local nX := 0
Local nMeses := 0
Local nDias := 0
//Realiza o calculo para verificar a quantidade de dias e meses serão realizados o calculo
For nX := 1 To Len(aItTFF)
If aItTFF[nX][4][2] <> aItTFF[nX][5][2] .Or. nX == Len(aItTFF)
If aItTFF[nX][5][2] > aItTFF[nX][4][2]
If Day(aItTFF[nX][4][2]) > 1
nMeses := DateDiffMonth(aItTFF[nX][4][2],aItTFF[nX][5][2]) - 1
nDias := (30 - Day(aItTFF[nX][4][2])) + 1
If Day(aItTFF[nX][5][2]) == 30
nMeses += 1
Else
nDias += Day(aItTFF[nX][5][2])
EndIf
Else
nMeses := DateDiffMonth(aItTFF[nX][4][2],aItTFF[nX][5][2])
If Day(aItTFF[nX][5][2]) == 30
nMeses += 1
Else
//Verifica se é fevereiro e é o ultimo dia do mês
If Month(aItTFF[nX][5][2]) == 2 .And. (Day(aItTFF[1][5][2]) == 28 .Or. Day(aItTFF[1][5][2]) == 29)
nMeses += 1
Else
nDias += Day(aItTFF[nX][5][2])
EndIf
EndIf
EndIf | ||||
Bloco de código | ||||
| ||||
#INCLUDE 'PROTHEUS.CH' User function a740GrdV() Local oView := PARAMIXB[1] //Viewdef If !isBlind() .AND. VALTYPE(oView) == 'O' .AND. isInCallStack("At870PRev") oView:AddUserButton("Reajuste Retroativo","",{|oView| U_RRetroat(oView)},,,) EndIf Return User Function RRetroat(oView) Local oModel Local oMdlTFJ Local oDlgSelect Local cFuncao := SPACE(TamSx3("TFF_FUNCAO")[1]) Local nPerc := 0 Local nMult := 0 Local cTodosLoc := "2" Local aOpcs := {"2 - Não","1 - Sim"} If VALTYPE(oView) == 'O' .AND. VALTYPE(oModel := oView:GetModel()) == 'O' oMdlTFJ := oModel:GetModel("TFJ_REFER") If oMdlTFJ:GetValue("TFJ_CNTREC") == '1' DEFINE MSDIALOG oDlgSelect FROM 0,0 TO 202,280 PIXEL TITLE "Reajuste Retroativo" @ 5, 9 SAY "Função" SIZE 30, 30 PIXEL oGetSRA := TGet():New( 015, 009, { | u | If(PCount() > 0, cFuncao := u, cFuncao) },oDlgSelect, ; 060, 010, "!@",{ || .T.}, 0, 16777215,,.F.,,.T.,,.F.,; If nDias >= 30 ,.F.,.F.,{|| .T.},.F.,.F. ,,"cFuncao",,,,.T. ) nDias := nDias - 30 oGetSRA:cF3 := 'SRJ' nMeses += 1 @ 30, 9 SAY "Percentual (%)" SIZE 50, 30 PIXEL EndIf Else oDataDe := TGet():New( 40, 009, { | u | If( PCount()nX == 0, nPerc, nPerc := u ) },oDlgSelect, ; Len(aItTFF) .And. aItTFF[nX][5][2] == aItTFF[nX][4][2] 060, 010, "@E 99.99",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"nPerc",,,,.T.) nMeses := 0 @ 30, 77 SAY "Multiplicador" SIZE 50, 30 PIXEL nDias := 1 oDataAte := TGet():New( 40, 077, { | u | If( PCount() ==Else 0, nMult, nMult := u ) },oDlgSelect, ; nMeses := 0 060, 010, "@E 99.99",, 0, 16777215,,.F.,,.T.,,.F.,,.F.,.F.,,.F.,.F. ,,"nMult",,,,.T.) @ 64,nDias 9:= SAY0 "Em todos os Locais?" SIZE 80, 30 PIXEL EndIf oCombo := TComboBox():New(63,70,{|u|if(PCount()>0,cTodosLoc:=u,cTodosLoc)},; EndIf aOpcs,40,10,oDlgSelect,,,,,,.T.,,,,,,,,,'cTodosLoc') EndIf oRefresh := TButton():New( 84, 010, "Aplicar",oDlgSelect,{|| U_AplicVl(oModel, cFuncao , nPerc, nMult, LEFT(cTodosLoc,1)) , oDlgSelect:End()}, 50,10,,,.F.,.T.,.F.,,.F.,,,.F. ) oExit := TButton():New( 84 , 095, "Sair",oDlgSelect,{|| oDlgSelect:End() }, 30,10,,,.F.,.T.,.F.,,.F.,,,.F. ) ACTIVATE MSDIALOG oDlgSelect CENTER Else MsgAlert("Opção disponível apenas para contratos Recorrentes") EndIf EndIf Return .T. User Function AplicVl(oModel, cFuncao , nPerc, nMult, cTodosLoc) Local lAllLoc := cTodosLoc == '1' Local oMdlTFL := oModel:GetModel("TFL_LOC") Local oMdlTFF := oModel:GetModel("TFF_RH") Local nX Local nY Local cLog := "" Local aSaveRows := FwSaveRows() Local nTotal := 0 Local nGrandTot := 0 Local nVal := 0 Local nValPrc := 0 For nX := 1 To oMdlTFL:Length() If lAllLoc oMdlTFL:GoLine(nX) EndIf For nY := 1 To oMdlTFF:Length() oMdlTFF:GoLine(nY)aAdd(aItTFF[nX],{"MESES",nMeses}) aAdd(aItTFF[nX],{"DIAS",nDias}) nMeses := 0 nDias := 0 Next nX Return aItTFF //Pega os valores e dias para realizar o calculo do valor retrotivo por mês, utilizado no relatorio TECR871 User Function GetDtTFF(cTable,nInd,cChave,cContr,dDataDe,dDataAte,lEncerra,dDataEnce) Local aItTFF := {} Local aItens := {} Local dIniAux := CTOD(" / / ") Local dFimAux := CTOD(" / / ") DbSelectArea(cTable) (cTable)->(DbSetOrder(nInd)) If (cTable)->(MsSeek(cChave)) aAdd(aItTFF,{cTable+'_COD',(&("(cTable)->" + cTable+'_COD'))}) aAdd(aItTFF,{cTable+'_QTDVEN',(&("(cTable)->" + cTable+'_QTDVEN'))}) aAdd(aItTFF,{cTable+'_PRCVEN',U_ValOriTFF((&("(cTable)->" + cTable+'_FILIAL')),(&("(cTable)->" + cTable+'_COD')),cContr,cTable,cTable+'_PRCVEN')}) If (&("(cTable)->" + cTable+'_PERINI')) <= dDataDe aAdd(aItTFF,{cTable+'_PERINI',dDataDe}) Else If Day((&("(cTable)->" + cTable+'_PERINI'))) > 30 dIniAux := (&("(cTable)->" + cTable+'_PERINI')) - 1 Else If oMdlTFF:GetValue("TFF_FUNCAO") == cFuncao .AND.dIniAux oMdlTFF:GetValue= (&("TFF_COBCTR") != '2'(cTable)->" + cTable+'_PERINI')) EndIf cLog += "Local: " + Alltrim(POSICIONE("ABS",1,xFilial("ABS") + oMdlTFL:GetValue("TFL_LOCAL"), "ABS_DESCRI")) + Chr(13) + Chr(10 aAdd(aItTFF,{cTable+'_PERINI',dIniAux}) EndIf If !lEncerra cLog += " - RH: " + oMdlTFF:GetValue("TFF_COD") + Chr(13) + Chr(10) If (&("(cTable)->" + cTable+'_PERFIM')) >= dDataAte cLog += " - Função: " + Alltrim(POSICIONE("SRJ",1,xFilial("SRJ") + oMdlTFF:GetValue("TFF_FUNCAO"), "RJ_DESC")) + Chr(13) + Chr(10) aAdd(aItTFF,{cTable+'_PERFIM',dDataAte}) Else cLog += " - Produto: " +If AlltrimDay((Posicione&("SB1",1,xFilial("SB1")(cTable)->" + oMdlTFF:GetValue("TFF_PRODUT"), "B1_DESC")) + Chr(13) + Chr(10) cTable+'_PERFIM'))) > 30 cLogdFimAux +:= (&("(cTable)->" + cTable+'_PERFIM')) - Valor Antigo (prox. parcela): R$ " + Alltrim(TRANSFORM( oMdlTFF:GetValue("TFF_VLPRPA") , "@e 999,999,999.99" )) + Chr(13) + Chr(10) 1 Else nTotaldFimAux := ROUND( (oMdlTFF:GetValue("TFF_VLPRPA") * (nPerc / 100)) * nMult , TamSX3("TFF_VLPRPA")[2] &("(cTable)->" + cTable+'_PERFIM')) nGrandTotEndIf += nTotal cLog += " - Valor Novo (prox. parcela): R$ " + Alltrim(TRANSFORM((oMdlTFF:GetValue("TFF_VLPRPA") + nTotal), "@e 999,999,999.99" )) +; aAdd(aItTFF,{cTable+'_PERFIM',dFimAux}) EndIf Else If dDataEnce > dDataAte " ( + R$ " + Alltrim(TRANSFORM(nTotal, "@e 999,999,999.99" )) + " )" + Chr(13) + Chr(10)aAdd(aItTFF,{cTable+'_PERFIM',dDataAte}) Else cLog += Chr(13If Day(dDataEnce) + Chr(10)> 30 EndIf Next nY dFimAux cLog:= +=dDataEnce REPLICATE("-",10)- 1 cLog += Chr(13) + Chr(10) IfElse !lAllLoc Exit EndIf Next nX cLog += REPLICATE("-",15) cLog += Chr(13) + Chr(10) cLog += "Valor adicional prox. parcela: R$ " + Alltrim(TRANSFORM(nGrandTot, "@e 999,999,999.99" )) AtShowLog(cLog,"Prévia de Valores",/*lVScroll*/,/*lHScroll*/,/*lWrdWrap*/,.F.) If MsgYesNo("Aplicar valores calculados?") For nX := 1 To oMdlTFL:Length() If lAllLoc oMdlTFL:GoLine(nX) EndIf For nY := 1 To oMdlTFF:Length() oMdlTFF:GoLine(nY) If oMdlTFF:GetValue("TFF_FUNCAO") == cFuncao .AND. oMdlTFF:GetValue("TFF_COBCTR") != '2' nVal := oMdlTFF:GetValue("TFF_VLPRPA") nValPrc := oMdlTFF:GetValue("TFF_PRCVEN") oMdlTFF:SetValue("TFF_PRCVEN",; ROUND((nValPrc + (nValPrc * (nPerc / 100))),; TamSX3("TFF_PRCVEN")[2])) oMdlTFF:SetValue("TFF_VLPRPA",; ROUND((nVal + ((nVal * (nPerc / 100)) * nMult)),; TamSX3("TFF_VLPRPA")[2])) EndIf Next nY If !lAllLoc Exit EndIf Next nX EndIf FwRestRows( aSaveRows ) Return dFimAux := dDataEnce EndIf aAdd(aItTFF,{cTable+'_PERFIM',dFimAux}) EndIf EndIf aAdd(aItens,aItTFF) //Ajusta os itens para realizar o calculo dos dias U_GetDtItens(@aItens) EndIf Return aItens //Pega o valor original da TFF antes do reajuste User Function ValOriTFF(cFilIt,cCodIt,cContr,cTabela,cCampo) Local cSql := "" Local cFields := "" Local cFrom := "" Local nValor := 0 Local cAliasIt := GetNextAlias() If cTabela == "TFF" cFields := "TFF.TFF_FILIAL,TFF.TFF_PRCVEN " cSql += " TFF.D_E_L_E_T_ = ' ' AND " cSql += " TFF.TFF_FILIAL = '" + cFilIt + "' AND " cSql += " TFF.TFF_CONTRT = '" + cContr + "' AND " cSql += " TFF.TFF_CODSUB = '" + cCodIt + "' " ElseIf cTabela == "TFG" cFields := "TFG.TFG_FILIAL,TFG.TFG_PRCVEN " cSql += " TFG.D_E_L_E_T_ = ' ' AND " cSql += " TFG.TFG_FILIAL = '" + cFilIt + "' AND " cSql += " TFG.TFG_CONTRT = '" + cContr + "' AND " cSql += " TFG.TFG_CODSUB = '" + cCodIt + "' " ElseIf cTabela == "TFH" cFields := "TFH.TFH_FILIAL,TFH.TFH_PRCVEN " cSql += " TFH.D_E_L_E_T_ = ' ' AND " cSql += " TFH.TFH_FILIAL = '" + cFilIt + "' AND " cSql += " TFH.TFH_CONTRT = '" + cContr + "' AND " cSql += " TFH.TFH_CODSUB = '" + cCodIt + "' " EndIf cFields := "%" + cFields + "%" cFrom := "%" + RetSqlName(cTabela) + " " + cTabela + "%" cSql := "%"+cSql+"%" BeginSql Alias cAliasIt SELECT %Exp:cFields% FROM %Exp:cFrom% WHERE %exp:cSql% EndSql If (cAliasIt)->(!Eof()) nValor := (cAliasIt)->&(cCampo) Endif (cAliasIt)->(DbCloseArea()) Return nValor |
04. DEMAIS INFORMAÇÕES
DSERSGS-10241 DT Criação de gatilho para preenchimento de valor pro-rata
DSERSGS-10968 DT Gatilho de pro-rata para o campo Dt.Fim
DT PE AT870Ant Antecipação do Contrato
DSERSGS-12603 DT Gatilho Escala x Hora Extra Planejada
DSERSGS-10243 DT Inclusão de gatilho para recuperar valor de hora extra
5. ASSUNTOS RELACIONADOS
- Não há.
...