;** Mediac *********************************************************************
;*  Realiza Media de Cheques Acerto                                            *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 27/01/1999 por Anivel Augusto Rodrigues   
;Ultima Alteracao: 09/02/2004 por Karen Lauar Nery
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues                                             
;Motivo Alteracao: Inclusao Controla_Edicao                                                            
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues                                             
;Motivo Alteracao: Ajustes Seta_Sequencia                                                              
;Ultima Alteracao: 30/12/2010 por Bruno Carvalho                                                       
;Motivo Alteracao: Ajustes Novo Layout de Teclas                                                       
;Ultima Alteracao: 14/12/2015 por Bruno Carvalho                                                       
;Motivo Alteracao: Adicionado TxMensal                                                                 
;Ultima Alteracao: 18/12/2015 por Bruno Carvalho                                                       
;Motivo Alteracao: Adicionado CHAVEC=0 para executar Verifica_Lancamento() na proc DIGITAC()           
;Ultima Alteracao: 19/12/2015 por Bruno Carvalho                                                       
;Motivo Alteracao: Adicionado Numero do Lancamento
;Ultima Alteracao: 08/01/2016 por Bruno Carvalho                                                       
;Motivo Alteracao: Ajustado processo p/ identificar sabado, domingos e feriados no calculo 
;Ultima Alteracao: 12/01/2016 por Bruno Carvalho                                                       
;Motivo Alteracao: Novos ajustes p/ controle de numero de dias de acordo com a data de acerto e a data de vencto 
;Ultima Alteracao: 15/01/2016 por Bruno Carvalho                                                       
;Motivo Alteracao: Adicionado op‡Æo para calculo de juros simples e juros composto 
;Ultima Alteracao: 26/01/2016 por Bruno Carvalho                                                       
;Motivo Alteracao: Removido a op‡Æo para calculo de juros simples e juros composto
;Ultima Alteracao: 26/01/2016 por Bruno Carvalho                                                       
;Motivo Alteracao: Aidiconado PARAM_UTILIZA_JUROS (conforme regra do cliente ou juros simples), 
;                             PARAM_SABDOM_VENCTO (utiliza sabado/domingo na data de vencimento),
;Ultima Alteracao: 28/01/2016 por Bruno Carvalho                                                       
;Motivo Alteracao: Ajustes realizados na empresa #0377# conforme solicita‡äes do usu ro
;Ultima Alteracao: 29/01/2016 por Bruno Carvalho                                                       
;Motivo Alteracao: Ajsutes regra de calculo de juros/desconto #0377# conforme BXCXAUTO
;Ultima Alteracao: 29/01/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ impressÆo conforme parƒmetro passado como "" **Erro apontando p/ MEDIAC, tabela que no momento da impress„o nÆo ‚ visualizada
;Ultima Alteracao: 24/06/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes de regra de calculo utilizado no cliente #0377# p/ o cliente #0233#
;Ultima Alteracao: 23/08/2016 por Anivel Augusto Rodrigues                                             
;Motivo Alteracao: Ajustes parametros sys_Codigo_Cliente 0157                                                             
;Ultima Alteracao: 07/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes cor editar
;Ultima Alteracao: 03/01/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado Cliente_Inativo()

;*******************************************************************************
;* Rotina para Localizar Registro Cabeca                                       *
;*******************************************************************************
Proc CHAVEC()                       
While True
  COPIOU_REGISTRO=False
  
  Moveto [Numero do Lancamento]
  End
  LANCTO=[Numero do Lancamento]
  If OPCAO_FORM="F"
     Then Down
     Else PgDn  
  EndIf

  SetaCorRegistro("Editar")
  While true

  VCITENS=0
  TECLA=""
  AguardaTeclasPadrao()                 

  Switch
      Case RetVal=-33 : SemFuncoes()
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           Del
           While True
             VCITENS=0
           
             If OPCAO_FORM="F"
                Then PAGINA("MediaC","MR")
                Else PAGINA("MediaC","MT")
             EndIf
             LANCTO=[Numero do Lancamento]
             Switch
               Case EDITAR="S":
                    PickForm "1"
                    Echo Normal
                    Echo Off
                    CHAVEC=0
                    Controla_EdicaoC()
               Case EXCLUIR="S":
                    PickForm "1"
                    Echo Normal
                    Echo Off
                    If Checa_Supervisor()
                       Then If QuerExcluir("")
                               Then OK="S"
                               Else OK="N"
                            EndIf
                            If OK="S"
                               Then EXCLUSAO()
                               Else UnLockRecord
                            EndIf
                       Else UnLockRecord
                    EndIf
               OtherWise: QuitLoop
             EndSwitch
             If OPCAO_FORM="F"
                Then PickForm "F"
                Else PickForm "1"
             EndIf
             SetaPosForm()
           EndWhile
           QuitLoop
      Case RetVal="F3":
           If OPCAO_FORM="1"
              Then OPCAO_FORM="F"
              Else OPCAO_FORM="1"
           EndIf
           Del
           CHAVEC=6
           Return
      Case Retval="ESC":
           CHAVEC=9
           Del
           Return
      Case Retval="ENTER": 
           If IsBlank([])
              Then If LANCTO = 99999
                      Then Mensagem("Faixa de c¢digo livre excedida !")
                           Del
                           QuitLoop         
                   EndIf
                   If IsBlank(LANCTO)
                      Then []=1
                      Else []=LANCTO+1
                   EndIf     
              Else If Len([]) > 5
                      Then Mensagem("O n£mero do lan‡amento ‚ inv lido !")
                           Del
                           QuitLoop
                   EndIf     
           EndIf
           LANCTO_ANT = LANCTO
           LANCTO=[]
           If LANCTO_ANT<>"" And (LANCTO_ANT <> "" And LANCTO_ANT > 0) 
              Then If (NumVal(LANCTO) > NumVal(LANCTO_ANT)+1)
                      Then Mensagem("O n£mero do lan‡amento dever  ser sequencial !")
                           Del
                           QuitLoop
                   EndIf        
           EndIf
           Release Vars LANCTO_ANT
           Del
           PickForm "1"
           Locate LANCTO
           If Retval
              Then CHAVEC=0
              Else CHAVEC=1
                   End Pgdn
                   [Numero do Lancamento ]=LANCTO
           EndIf
           If Not IsLockRecord()
              Then Echo Normal
                   Echo Off
                   Return
           EndIf
           If CHAVEC=1
              Then Del
           EndIf
           If OPCAO_FORM="F"
              Then PickForm "F"
           EndIf
           QuitLoop
      EndSwitch
  EndWhile
EndWhile

EndProc  ; (ChaveC)

;******************************************************************************
;* Rotina para Digitacao da Cabeca                                            *
;******************************************************************************
Proc DIGITAC()

DIGITAC=True

If CHAVEC=0
   Then CALCULA("P")
        Moveto "MediaC"
EndIf

If CHAVEC=0
   Then Calcula_Cheques()
EndIf

Moveto [Codigo]
While True
      TECLA=" Esc=Retornar  "

      If CHAVEC=0
         Then TECLA=TECLA+"F8/=Cheques  Del=Excluir  "
      EndIf

      Prompt TECLA


       MSGCAMPO=Field()

      Switch
        Case Field()="Taxa Mensal"     : MSGCAMPO="Taxa Mensal"
        Case Field()="Codigo"          : MSGCAMPO="C¢digo do Cliente"
        Case Field()="Data"            : MSGCAMPO="Data p/ Acerto"
      EndSwitch  
        
      Wait Field
           Until "F1","ESC","ENTER","F8","DEL","FIELDVIEW","F35","DOWN"

      Switch
      Case RetVal="F1":
         If Field()="Codigo"
            Then CONSULTAF1()
         EndIf
      Case RetVal="F8" or RetVal="DOWN":
           If CHAVEC = 0
              Then QuitLoop
              Else Loop
           EndIf
      Case Retval="ESC":
           Switch
           Case Field()="Codigo":
                If QuerDesfazer("")
                   Then If CHAVEC = 1
                           Then EXCLUSAO()
                           Else Undo
                        EndIf
                        CHAVEC=9
                        QuitLoop
                EndIf
           Case Field()="Data"          : Moveto [Codigo]
           Case Field()="Taxa Mensal"   : Moveto [Data]     
           Otherwise:
                Left
           EndSwitch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEC=0
              Then If QuerExcluir("")
                      Then EXCLUSAO()
                           CHAVEC=9
                           QuitLoop
                   EndIf
           EndIf
      Case Retval="ENTER":
           Switch
           Case Field()="Codigo"        : If IsBlank([Codigo])
                                             Then Loop 
                                             Else If CHAVEC=1
                                                     Then If Cliente_Inativo([Codigo])
                                                             Then Loop
                                                          EndIf   
                                                  EndIf          
                                                  Moveto [Data]
                                          EndIf
           Case Field()="Data"          : If IsBlank([Data])   Then [Data]=Today()EndIf
                                          Moveto [Taxa Mensal]
           Case Field()="Taxa Mensal"   : If CHAVEC=0 
                                             Then Verifica_Lancamento("Checagem")
                                          EndIf     
                                          QuitLoop
           EndSwitch
      EndSwitch
EndWhile



EndProc  ; (DigitaC)

;*******************************************************************************
;* Rotina para Localizar Registro Item                                         *
;*******************************************************************************
Proc Calcula_Cheques()
Private ANT_CAMPO,ANT_TAB

ANT_TAB   = Table()
ANT_CAMPO = Field() 

Moveto "MediaI"
Moveto [Valor            ] VSVRValor    = ImageCSum()
Moveto [Valor do Juros   ] VSVRJuros    = ImageCSum()
Moveto [Valor do Desconto] VSVRDesconto = ImageCSum()
Moveto [Valor Total      ] VSVRTotal    = ImageCSum()

Moveto ANT_TAB
Moveto Field ANT_CAMPO

EndProc ; Calcula_Cheques()

;*******************************************************************************
;* Rotina para Localizar Registro Item                                         *
;*******************************************************************************
Proc CHAVEI()
Moveto "MediaI"

While True
  Calcula_Cheques()
  
  Moveto [Sequencia]
  End
  ITEM = [Sequencia]
  Down

  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  SetaCorRegistro("Editar")
  While True

      Prompt " Esc=Retornar  F7=Paginar  PgDn=Finalizar  F4=Imprime  "

      Wait Field
           Until "ESC","ENTER","F7","HOME","UP","PGUP","PGDN","F4"

      Switch
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           Del
           While True
             PAGINA("MediaI","MR")
             If EDITAR="S"
                Then CHAVEI = 0
                     ITEM   = [Sequencia]
                     Controla_EdicaoI()
                Else If EXCLUIR="S"
                        Then If QuerExcluir("")
                                Then ATUA_REF()
                                Else UnLockRecord
                             EndIf
                        Else QuitLoop
                     EndIf
             EndIf
             SetaPosForm()
           EndWhile
           QuitLoop
      Case Retval="F4" :
           Del
           IMPRIME()
           CHAVEI=8
           Return
      Case Retval="PGDN" :
           Del
           CHAVEI=8
           If RecordStatus("New")
              Then Mensagem("Tabela sem Registros !")
                   Exclusao()
           EndIf
           Return
      Case Retval="ESC":
           Del
           CHAVEI=9
           If RecordStatus("New")
              Then Mensagem("Tabela sem Registros !")
                   Exclusao()
                   CHAVEI=8
           EndIf
           Return
      Case Retval="ENTER":
           If Not Seta_Sequencia(ITEM,True)
              Then Del
                   QuitLoop
           EndIf
           ITEM=[]
           Del
           Locate LANCTO,ITEM
           If Retval
              Then CHAVEI=0
              Else CHAVEI=1
                   End Down
                   [Numero do Lancamento]=LANCTO
                   [Sequencia           ]=ITEM
                   UnLockRecord
                   Locate LANCTO,ITEM
           EndIf
           Return
      EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DIGITAI()
Moveto [Data Vencimento]
While True
      TECLA=" Esc=Retornar  "

      If CHAVEC=0
         Then TECLA=TECLA+"Del=Excluir  "
      EndIf

      Prompt TECLA

      Wait Field
           Until "F1","ESC","ENTER","F8","DEL","FIELDVIEW","F35","DOWN"

      Switch
      Case Retval="ESC":
           Switch
           Case Field()="Data Vencimento":
                If QuerDesfazer("")
                   Then If CHAVEI=1
                           Then Del
                           Else Undo
                        EndIf
                        CHAVEI=9
                        QuitLoop
                EndIf
           Otherwise:
                Left
           EndSwitch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEC=0
              Then If QuerExcluir("")
                      Then ATUA_REF()
                           CHAVEI=9
                           QuitLoop
                   EndIf
           EndIf
      Case Retval="ENTER":
           If IsBlank([]) Then Loop EndIf
           Switch
           Case Field()="Valor":
                VERIFICA_DATA()
                Verifica_Lancamento("")
                Calcula_Cheques()
                QuitLoop
           Otherwise:
                Right
           EndSwitch
      EndSwitch
EndWhile
Moveto "MediaC"
EndProc  ; (DigitaI)

;*******************************************************************************
;* Exclusao de Itens                                                           *
;*******************************************************************************
Proc EXCLUSAO()

OPCAO_FORM="F"
Moveto "MediaI"
While RecordStatus("New")=False
      Del
EndWhile
Moveto "MediaC"
Del
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf


EndProc  ; (Exclusao)

;*******************************************************************************
;* Funcao que calcula a media                                                  *
;*******************************************************************************
Proc CALCULA(TIPO)
Moveto "MediaI"
Moveto [Valor]
VALOR_TOTAL=ImageCSum()

Moveto "MediaC"
[Valor Total]=VALOR_TOTAL
UnLockRecord

Moveto "MediaI"
Moveto [Valor_Multiplicado]
M_VALORM   =ImageCSum()

If TIPO = "G"
   Then M_DIAREF     = Round( ( M_VALORM / VALOR_TOTAL ), 3 )
        M_DIAREFI    = Int( M_DIAREF )
        M_DIAREFD    = M_DIAREF - M_DIAREFI
        If M_DIAREFD > 0.51
           Then M_DIAREFI = M_DIAREFI + 1
        EndIf

        Moveto "MediaC"
        If Not IsBlank( [Data de Referencia] )
           Then [Data Media] = [Data de Referencia] + M_DIAREFI
           Else [Data Media] = BlankDate()
        EndIf
        Moveto "MediaI"
EndIf

EndProc  ; (Calcula)

;*******************************************************************************
;* Funcao que verifica a data de referencia quando o iten e excluido           *
;*******************************************************************************
Proc ATUA_REF()
Private seq
Moveto "MediaI"
M_DATAREF = [Data Vencimento]
Del
Seq=[Sequencia]

Moveto "Mediac"
[Data de Referencia]=BlankDate()
[Data Media        ]=BlankDate()
[Valor Total       ]=0
Moveto "MediaI"
Scan
   VERIFICA_DATA()
   Moveto "MediaI"
EndScan
Moveto [Sequencia]
Locate SEQ
EndProc

;*******************************************************************************
;* Rotina para processamento da informacao                                     *
;*******************************************************************************
Proc Processa()
Private AUX_VRDESCTO,AUX_VRJUROS,AUX_VRTOTAL,AUX_NDIAS,AUX_DTREAL,SEQ,DIA,NDIAS,
        VR_DES_JUR

{Ask} {MediaI} Check
Moveto [Numero do Lancamento] TypeIn "~LANCTO"
Do_It!
ClearAll

{Ask} {Answer}
Moveto [Numero do Lancamento] Example "NLanc"
Moveto [Codigo              ] Example "Cod"
Moveto [Sequencia           ] Example "Seq"
Moveto [Data Vencimento     ] Example "DtV"
Moveto [Valor               ] Example "Vr"
Moveto [Valor_Multiplicado] Example "VrM"
{Ask} TypeIn Tabela Enter TypeIn "Fast Insert" 
Moveto [Numero do Lancamento] Example "NLanc"
Moveto [Codigo              ] Example "Cod"
Moveto [Sequencia           ] Example "Seq"
Moveto [Data Vencimento     ] Example "DtV"
Moveto [Valor               ] Example "Vr"
Moveto [Valor_Multiplicado  ] Example "VrM"
Do_It!
ClearAll

Delete "Answer"

GetRecord "\\Sistemas\\Cheqrec\\MediaC" LANCTO To REG_MEDIAC
View "\\Sistemas\\Cheqrec\\MediaI"
View "\\Sistemas\\Cadastro\\Feriados"
CoEdit Tabela
Scan
  LANCTO = [Numero do Lancamento]
  SEQ    = [Sequencia]
  
  Calcula_Vencto("")
  
  AUX_VRDESCTO = [Valor do Desconto]
  AUX_VRJUROS  = [Valor do Juros   ]
  AUX_VRTOTAL  = [Valor Total      ]
  AUX_NDIAS    = [Numero de Dias   ]
  AUX_DTREAL   = [Data Real        ]
  
  Moveto "\\Sistemas\\Cheqrec\\MediaI"
  Moveto [Numero do Lancamento]
  Locate LANCTO,SEQ
  If RetVal
     Then [Valor do Desconto] = BlankNum()
          [Valor do Juros   ] = BlankNum()
          [Valor Total      ] = BlankNum()
          [Numero de Dias   ] = BlankNum()
          
          [Valor do Juros   ]=AUX_VRJUROS
          [Valor do Desconto]=AUX_VRDESCTO
          [Valor Total      ]=AUX_VRTOTAL
          [Numero de Dias   ]=AUX_NDIAS
          [Data Real        ]=AUX_DTREAL
          UnLockRecord
  EndIf
  Release Vars AUX_VRDESCTO,AUX_VRJUROS,AUX_VRTOTAL,AUX_NDIAS,AUX_DTREAL 
  Moveto Tabela
EndScan
Do_It!
ClearAll

EndProc ;Processa()

;*******************************************************************************
;* Funcao que verifica a data de referencia                                    *
;*******************************************************************************
Proc IMPRIME()
Private AUX_MSG,Tabela
AUX_MSG = ""
Do_It!
DISPOSITIVO()
If OK<>""
   Then AGUARDE("Aguarde, gerando o relat¢rio")
        Tabela = Cria_Temp(PrivDir())
        Copy "\\Base\\Sistemas\\Cheqrec\\RM_0025" Tabela
        
        Processa()
        If Not IsEmpty(Tabela)
           Then IMPRIREL(Tabela,"R")
           Else AUX_MSG = "N„o h  registros a processar!" 
        EndIf
        Delete Tabela
EndIf
ClearAll
CoEdit "MediaC"
PickForm "1"
Moveto [Numero do Lancamento]
Locate LANCTO
Moveto "MediaI"

If AUX_MSG<>""
   Then Mensagem(AUX_MSG)
EndIf   

EndProc  ; (Imprime)

;*******************************************************************************
;* Funcao que verifica a data de referencia                                    *
;*******************************************************************************
Proc Verifica_Lancamento(PARAM)
Private ANT_TAB,ANT_CAMPO,DIA,NDIAS,REG_FERIADO,DATA_REAL

ANT_TAB   = Table()
ANT_CAMPO = Field()

AGUARDE("Aguarde, calculando desconto/juros ")

Moveto "MediaI"
If PARAM="Checagem"
   Then Home
        Scan
          [Valor do Desconto] = BlankNum()
          [Valor do Juros   ] = BlankNum()
          [Valor Total      ] = BlankNum()
          [Numero de Dias   ] = BlankNum()
        EndScan
        Home
  Else  [Valor do Desconto] = BlankNum()
        [Valor do Juros   ] = BlankNum()
        [Valor Total      ] = BlankNum()
        [Numero de Dias   ] = BlankNum()     
EndIf

While True
  Calcula_Vencto("Verifica")

  If PARAM<>"Checagem" Then QuitLoop EndIf
  Skip
  If Eot() Then QuitLoop EndIf
EndWhile

Moveto ANT_TAB
Moveto Field ANT_CAMPO

EndProc  ;Verifica_Lancamento()

;*******************************************************************************
;* Funcao que calcula o vencto e atribui juros ou desconto                     *
;*******************************************************************************
Proc Calcula_Vencto(PARAM)
Private ANT_TAB,ANT_CAMPO,DIA,NDIAS,REG_FERIADO,DATA_REAL

ANT_TAB   = Table()
ANT_CAMPO = Field()

AGUARDE("Aguarde, calculando desconto/juros ")

If PARAM="Verifica"
   Then VENCTO = [Data Vencimento]
        DATA   = [MediaC->Data]
        TAXA   = [MediaC->Taxa Mensal]
        VALOR  = [Valor]
   Else VENCTO = [Data Vencimento]
        DATA   = REG_MEDIAC["Data"]
        TAXA   = REG_MEDIAC["Taxa Mensal"]
        VALOR  = [Valor]  
EndIf

NDIAS = 0  
If PARAM_UTILIZA_FERIADO="S" And PARAM_SABDOM_VENCTO="S" 
   Then GetRecord "\\Sistemas\\Cadastro\\Feriados" VENCTO To REG_FERIADO
        If Retval
           Then If REG_FERIADO["Dias a Receber"] > 0
                   Then NDIAS = REG_FERIADO["Dias a Receber"]
                        VENCTO = VENCTO + NDIAS
                EndIf   
        EndIf
EndIf       
  
If NDIAS = 0
   Then If PARAM_SABDOM_VENCTO="S" 
           Then If Dow(VENCTO)="Sat"
                   Then NDIAS = NDIAS + 2
                   Else If Dow(VENCTO)="Sun"
                           Then NDIAS = NDIAS + 1
                        EndIf
                EndIf         
                VENCTO = VENCTO + NDIAS
        EndIf
EndIf
NDIAS = DATA - VENCTO

DATA_REAL   = VENCTO
[Data Real] = DATA_REAL
If NDIAS<>0
   Then [Numero de Dias ] = NDIAS
EndIf   
NUMERO_DIA = NDIAS

Switch
  Case PARAM_UTILIZA_JUROS="F_0377" : ;Formula Cliente 0377
       [Valor Total] = [Valor]
       AUX_NDIAS = NUMERO_DIA
       If AUX_NDIAS>0                 
          Then INDICE    = ndecimal( ( 100 -  ( AUX_NDIAS * TAXA) /30  ) , 3 ) /100
               AUX_VALOR = ndecimal(([Valor] / INDICE),2) - [Valor]
               VRJUROS   = AUX_VALOR
               [Valor do Juros   ] = AUX_VALOR
               [Valor Total      ] = [Valor]+AUX_VALOR
       EndIf  
       If AUX_NDIAS<0
          Then AUX_NDIAS = NUMERO_DIA*-1
               INDICE    = ndecimal( ( 100 -  ( AUX_NDIAS * TAXA) /30  ) , 3 ) /100
               AUX_VALOR = ndecimal(([Valor] * INDICE),2) - [Valor]
               [Valor do Desconto] = AUX_VALOR*-1
               [Valor Total      ] = [Valor]+AUX_VALOR
       EndIf
  OtherWise                         : ;Juros Simples
  VR_DES_JUR = Round(([Valor]*((TAXA/30)*[Numero de Dias]))/100,2)
  If VR_DES_JUR <> 0
     Then If (DATA - VENCTO) < 0
             Then [Valor do Desconto] = VR_DES_JUR*-1
                  [Valor Total      ] = [Valor]-(VR_DES_JUR*-1)
             Else [Valor do Juros   ] = VR_DES_JUR
                  [Valor Total      ] = [Valor]+VR_DES_JUR
          EndIf
     Else [Valor Total] = [Valor]
  EndIf        
EndSwitch  

If (DATA - VENCTO) < 0
   Then [Numero de Dias ] = NUMERO_DIA
   Else [Numero de Dias ] = NUMERO_DIA
EndIf   
If [Numero de Dias] = 0 Then [Numero de Dias] = BlankNum() EndIf     

EndProc  ;Verifica_Lancamento()

;*******************************************************************************
;* Funcao que verifica a data de referencia                                    *
;*******************************************************************************
Proc VERIFICA_DATA()
Private Seq
N_REGI = NRECORDS("MediaI")
If N_REGI > 0
   Then
        Seq=[Sequencia]

        MDATA  = [Data Vencimento]
        Moveto  "MediaC"
        Moveto  [Data de Referencia]

         If IsBlank([Data de Referencia])
            Then [Data de Referencia] = MDATA
            Else If [Data de Referencia] > MDATA
                    Then [Data de Referencia] = MDATA
                    Else MDATA = [Data de Referencia]
                 EndIf
         EndIf
         Moveto "MediaI"
         Scan
             If IsBlank([Data Vencimento])
                Then QuitLoop
             EndIf

             MDIA = [Data Vencimento] - MDATA
             If MDIA=0
                Then [Valor_Multiplicado] = [Valor]
                Else [Valor_Multiplicado] = [Valor] * MDIA
             EndIf
             UnLockRecord
         EndScan
         CALCULA("G")

         Moveto [Sequencia]
         Locate SEQ

EndIf
EndProc   ; (Verifica_Data)

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
DIGITAI()
Moveto "MediaI"
If RecordStatus("Locked") Then UnLockRecord EndIf         
Endproc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
While True
   SetaCorRegistro("Editando")
   DIGITAC()
   If CHAVEC=9 Then QuitLoop EndIf
   Moveto [Data de Referencia]
   SetaCorRegistro("Padrao")
   While True
       CHAVEI()
       If CHAVEI=9 Or CHAVEI=8 Then QuitLoop EndIf
       Controla_EdicaoI()
   EndWhile
   SetaCorRegistro("Padrao")
   Moveto "MediaC"
   If CHAVEI=8 Then QuitLoop EndIf
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf
Endproc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bib_Proc"
SYS_VALOR()
CoEdit "MediaC"
PickForm "F"
OPCAO_FORM="F"
    
If SYS_CODIGO_CLIENTE = "0377" Or SYS_CODIGO_CLIENTE="0233"
   Then PARAM_UTILIZA_JUROS   = "F_0377"     ;*** Formula Cliente 0377 *********
        PARAM_UTILIZA_FERIADO = "S"
        PARAM_SABDOM_VENCTO   = "S"          ;Sabados e Domingos p/ a Data de Vencimento
   Else PARAM_UTILIZA_JUROS   = "S"          ;*** Juros Simples* ***************
        PARAM_UTILIZA_FERIADO = "N"
        PARAM_SABDOM_VENCTO   = "S"          ;Sabados e Domingos p/ a Data de Vencimento
EndIf   

If SYS_CODIGO_CLIENTE = "0157"
   Then PARAM_UTILIZA_FERIADO = "S"
        PARAM_SABDOM_VENCTO   = "S"          ;Sabados e Domingos p/ a Data de Vencimento
EndIf   

While True
  CHAVEC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then If OPCAO_FORM="F"
             Then PickForm "F"
             Else PickForm "1"
                 OPCAO_FORM="1"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
