;** BxCxAuto *******************************************************************
;*  Baixa Automatica de titulos a receber                                      *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 24/12/2015 por Anivel Augusto Rodrigues
;Ultima Alteracao: 06/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 
;Ultima Alteracao: 22/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes E novos relatorios  clieant = "****"
;Ultima Alteracao: 25/01/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Variavel clieant = "****"
;Ultima Alteracao: 27/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes e inclusao altera‡Æo de calculo de juros           
;Ultima Alteracao: 28/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculo juros pralum                               
;Ultima Alteracao: 01/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Ndias taza de juros                                
;Ultima Alteracao: 24/02/2016 por Bruno Carvalho
;Motivo Alteracao: Verificado se h  registros para entÆo ser utilizado a rotina TIPOBAIXA()
;Ultima Alteracao: 30/03/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes DigitaC() Somar Itens
;Ultima Alteracao: 17/05/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado recibo de pagamento para empresa 0102 
;Ultima Alteracao: 14/06/2016 por Bruno Carvalho
;Motivo Alteracao: Quando OPCAO_FORM="1" na proc Controla_EdicaoC() ->  Moveto "BxautC"
;Ultima Alteracao: 15/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: inclusao de observacoes por titulo      
;Ultima Alteracao: 16/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado processo para gera‡Æo do [Numero do Lancamento] "Interno"                   
;Ultima Alteracao: 04/07/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Titulo Descontado               
;Ultima Alteracao: 25/07/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado recibo de pagamento para empresa 0280 
;Ultima Alteracao: 26/07/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado recibo de pagamento para empresa 0280 RB_0280
;Ultima Alteracao: 27/07/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado recibo de pagamento para empresa 0280 RB_0280B
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 27/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog 
;Ultima Alteracao: 28/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes showdialog TG_DESTINAT                  
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 19/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes teclas (F10)= -68
;Ultima Alteracao: 05/07/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao imprimir caso parƒmetro de impressÆo for RP_000B **Mostra titulos baixados e a ser pagos
;Ultima Alteracao: 26/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes obs cancelado/devolucao
;Ultima Alteracao: 15/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes justificativa cancelado/devolucao
;Ultima Alteracao: 22/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes gera‡Æo de titulo novo caso baixas por cancelamento
;Ultima Alteracao: 06/08/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes savetables
;Ultima Alteracao: 02/10/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes baixa valor comissao 0380
;Ultima Alteracao: 17/10/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes vrcomissao na baixa %comissao direto
;Ultima Alteracao: 08/03/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mensagem ao atualizar                         
;Ultima Alteracao: 14/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
;Ultima Alteracao: 28/05/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes lockrecord e fun‡Æo criar registro                  
;Ultima Alteracao: 16/07/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Rateio_Baixa_Automatica() *BIB_RAT
;Ultima Alteracao: 31/01/2020 por Bruno Carvalho             
;Motivo Alteracao: Adicionado processo para escolher mais de um tipo de carteira
;Ultima Alteracao: 31/01/2020 por Bruno Carvalho             
;Motivo Alteracao: Adicionado processo para escolher mais de uma forma de pagamento

;*******************************************************************************
;* Rotina para Localizar Registro Cabeca                                       *
;*******************************************************************************
Proc CHAVEC()

While True
  Moveto [Numero do Lote]
  End
  NLANC=[Numero do Lote]
  If OPCAO_FORM="1"
     Then Down
     Else PgDn PgDn
  EndIf

  SetaCorRegistro("Editar")
  While true
    LimpaVariaveis()
      
    TECLA=""
    MSGCAMPO=""
    AguardaTeclasPadrao()
  
    Switch
      Case RetVal=-33 : SemFuncoes()
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           While True
             LimpaVariaveis()
              
             If OPCAO_FORM="1"
                Then PAGINA("Bxautc","MR")
                Else PAGINA("Bxautc","MT")
             EndIf
             NLANC  =[Numero do Lote]
             If EDITAR="S"
                Then PickForm "F"
                     Echo Normal
                     Echo Off
                     If Checa_Controle([Numero_Controle_Dia])
                        Then CHAVEC=0
                             Controla_EdicaoC()
                        Else UnLockRecord
                     EndIf
                Else If EXCLUIR="S"
                         Then PickForm "F"
                              Echo Normal
                              Echo Off
                              If Checa_Controle([Numero_Controle_Dia])
                                 Then If QuerExcluir("") And Checa_Supervisor()
                                         Then CopytoArray REG_BXAUTC
                                              EXCLUSAO()
                                         Else UnLockRecord
                                      EndIf
                              EndIf
                         Else QuitLoop
                     EndIf
             EndIf
             If OPCAO_FORM="1"
                Then PickForm "1"
                Else PickForm "F"
             EndIf
             SetaPosForm()
           EndWhile
           QuitLoop
      Case RetVal="F3":
           If OPCAO_FORM="F"
              Then OPCAO_FORM="1"
              Else OPCAO_FORM="F"
           EndIf
           Del
           CHAVEC=6
           Return
      Case Retval="ESC":
           CHAVEC=9
           Del
           Return
      Case Retval="ENTER": 
           If Numero_Lancamento("","1")
              Then NLANC = PROXLANCTO_NLANC
                   Release Vars PROXLANCTO_NLANC
              Else QuitLoop
           EndIf
           If REG_ENTER
              Then PickForm "F"
                   Moveto [Numero do Lote]
                   Locate NLANC
                   CHAVEC=1
                   If Checa_Controle(SYS_CONTROLE_DIA)
                      Then Return
                      Else OPCAO_FORM="1"       
                   EndIf
              Else PickForm "F"
                   Locate NLANC
                   If Retval
                      Then CHAVEC=0
                      Else CHAVEC=1
                           End Pgdn PgDn
                           [Numero do Lote   ]=NLANC
                   EndIf
                   If IsLockRecord()
                      Then If CHAVEC=1 Then Del EndIf
                           If OPCAO_FORM="1"
                              Then PickForm "1"
                                   QuitLoop
                           EndIf
                      Else Echo Normal
                           Echo Off
                           If (CHAVEC=1 And Checa_Controle(SYS_CONTROLE_DIA)) Or
                              (CHAVEC=0 And Checa_Controle([Numero_Controle_Dia]))
                              Then Return
                           EndIf
                   EndIf
                   Return
           EndIf 
    EndSwitch          
    QuitLoop
  EndWhile
EndWhile
EndProc ;ChaveC()

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

Moveto "BxautC"

DIGITAC=True

if [Situacao]="ATUALIZADO"
   then
        Mensagem("Este lote j  foi atualizado !")
        
        If CHAVEC=0
           then somaitens()
        endif

        if checaparametros()
           then IMPRIME()
        endif   
        
        Tecla_Funcao=""
        DIGITAC =False
        CHAVEC =9

        Return
   else
        If CHAVEC=0
           then somaitens()
                return
        endif   
   
        Moveto [Data da Baixa]
endif

While True
  TECLA=" Esc=Retornar  "

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

  MSGCAMPO=Field()
  
  Switch
    Case Field()=""                : MSGCAMPO=""
    Case Field()="Codigo da Conta" : MSGCAMPO="Informe a Conta para baixa dos t¡tulos !"
    Case Field()="Data da Baixa"   : MSGCAMPO="Informe a Data para baixa dos t¡tulos !"
    Case Field()="Data Base"       : MSGCAMPO="Informe a Data Base para calculo de juros/desconto !"
  EndSwitch

  If Field()="Codigo da Conta"        
     Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
  EndIf

  If Field()="Codigo da Conta"
     Then Monta_Opcoes("Codigo da Conta","")
  EndIf

  Prompt TECLA

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

  Switch
  Case RetVal="F1":
       If Field()="Codigo da Conta"
          Then Seleciona_Opcoes("Codigo da Conta","CR")
       EndIf 

  Case RetVal="F8" or RetVal="DOWN":
       If CHAVEC = 0
          Then QuitLoop
          Else Loop
       EndIf
  Case Retval="ESC":
       Switch
       Case Field()="Data da Baixa": 
            If QuerDesfazer("")
               Then If CHAVEC=1
                       Then Exclusao()
                       Else Undo
                    EndIf
                    CHAVEC=9
                    QuitLoop
            EndIf
       Otherwise:
            Left
       EndSwitch
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVEC=0
          Then If QuerExcluir("deste lan‡amento") And Checa_Supervisor()
                  Then EXCLUSAO()
                       CHAVEC=9
                       QuitLoop
               EndIf
       EndIf
  Case Retval="ENTER":
       Switch
       Case Field()="Data da Baixa":
            If IsBlank([])
               Then [Data da Baixa]=Today()
            EndIf
            If Not IntervaloData([Data da Baixa])
               Then Loop
            EndIf
            moveto [Data Base]
       Case Field()="Data Base":
            If IsBlank([])
               Then [Data Base]=[Data da Baixa]
            EndIf
            Moveto [Codigo da Conta]
       Case Field()="Codigo da Conta":
            If Not Checa_Opcoes("Codigo da Conta",[]) or IsBlank([])
               Then Mensagem("Conta inv lida !")
                    Loop
            EndIf
            QuitLoop
       Otherwise:
            Right
       EndSwitch
  EndSwitch
EndWhile
EndProc  ; (DigitaC)

;*******************************************************************************
;* Rotina para Localizar Registro Item                                         *
;*******************************************************************************
Proc CHAVEI()

While True
  Moveto "BxautI"
  SomaItens()

  Moveto [Sequencia]
  End
  ITEM = [Sequencia]
  Down

  Opcao_Ver=False

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

  SetaCorRegistro("Editar")
  While True

      Prompt " Esc=Retornar  Alt+F=Fun‡”es  PgDn=Finalizar "
      MSGCAMPO=""

      Wait Field
           Until "ESC","ENTER","F7","HOME","UP","PGUP","PGDN","F3",
                 "F4","F5","F6","F8","F9","F10",-33,"F2",-68

     If RetVal=-33
     Then Echo Normal
          Echo Off
          ShowPopup " Fun‡”es " CENTERED
           "~I~mprimir   [F4] " : " Imprimir                        " : "F4",
           "~D~esconto   [F5] " : " Porcentagem/Valor de Desconto   " : "F5",
           "~J~uros      [F2] " : " Alterar a Taxa de Juros         " : "F2",
           "~S~ele‡„o    [F6] " : " Selecionar de T¡tulos           " : "F6",
           "~A~tualizar  [F8] " : " Atualizar baixa destes titulos  " : "F8",
           "~L~impa      [F9] " : " Limpa todos t¡tulos relacionados" : "F9",
           "Tipo ~B~aixa [F10]" : " Alterar Tipo de Baixa           " : "F10",
           "~C~ancelar        " : " Cancelar a Opera‡„o             " : "CANCELAR"
          EndMenu
           To MenuVar

          Echo Off
          If MenuVar="CANCELAR" or MenuVar="Esc"
              Then Loop
          EndIf

          RetVal=MenuVar
      endif

      Switch
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           Del
           While True
             PAGINA("Bxauti","MR")
             If EDITAR="S"
                Then        
                     CHAVEI = 0
                     ITEM   = [Sequencia]
                     Controla_EdicaoI()
                Else If EXCLUIR="S"
                        Then If QuerExcluir("")
                                Then del
                                Else UnLockRecord
                             EndIf
                        Else QuitLoop
                     EndIf
             EndIf

             SomaItens()           

             SetaPosForm()
           EndWhile
           QuitLoop
           
      Case RetVal="F10" or RetVal=-68 :
           Del
           TIPOBAIXA()
           
           QuitLoop
      Case RetVal="F4":
           Del

           If IMPRIME()
              Then 
                   DIGITAC =False
                   CHAVEI =99
                   Return
           endif
           quitloop        

      Case RetVal="F2" :
           Del
           JUROS()
           quitloop
           
      Case RetVal="F5" :
           Del
           DESCONTO()
           quitloop
           
      Case RetVal="F8": 
           Del                       
           If CONFGERAL("// "+ltrim(Format("W6,EIC",VCITENS))+" T¡tulo(s) totalizando "+ltrim(Format("W12.2,EIC",VRTOTREC))+"//"+
                        "Confirma baixa e atualiza‡„o(”es) deste(s) t¡tulo(s) ?")
              Then BAIXA()
                   DIGITAC =False
                   CHAVEI =99
                   Return
            EndIf   
            QuitLoop
              
      Case RetVal="F9": 
           Del                       
  
           If CONFGERAL("Confirma limpar todos estes t¡tulos ?")
              Then
                   while recordstatus("New")=False
                     del
                   endwhile    
            EndIf   
            QuitLoop
            
      Case RetVal="F6":
           Del
           Selecao()
           QuitLoop
           
      Case Retval="ESC":
           ;nÆo voltar !
           
      Case Retval="PGDN":
           Del
           
           if recordstatus("New")=true
              then Exclusao()
              
           endif
           
           DIGITAC =False
           CHAVEI =99
           Return
      Case RetVal="F3":
           Del
           Moveto [Sequencia]
           If RecordStatus("New")
              Then MENSAGEM("Sem Item p/ ver !")
                   QuitLoop
           EndIf
           Opcao_Ver=True
           CHAVEI=0
           Home
           ITEM=[Sequencia]
           Controla_EdicaoI()
           QuitLoop
      Case Retval="ENTER":
           If Not Seta_Sequencia(ITEM,True)
              Then Del
                   QuitLoop
           EndIf
           ITEM=[]
           Del
           Locate NLANC,ITEM
           If Retval
              Then CHAVEI=0
              Else quitloop
           EndIf
           Return
      EndSwitch
  EndWhile
EndWhile
EndProc  ; (CHAVEI)
                                                                    

;*******************************************************************************
;* Rotina p/ Selecionar e Ordenar Registros                                    *
;*******************************************************************************
Proc SELECIONA()
private seq

{Ask} {Duplic} Check
Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo da Conta        ] TypeIn "~VSDGCONTA.."
Moveto [Codigo do Destinatario ] TypeIn "~VSDGDESTINAT.."
Moveto [Codigo do Cobrador     ] TypeIn "~VSDGCOBRADOR.."
Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."
Switch
  Case ListaRegra_VSDGTPPAGTO_Ativo  : Moveto [Tipo do Pagamento] TypeIn ListaRegra_VSDGTPPAGTO
  Otherwise                          : Moveto [Tipo do Pagamento] TypeIn "~VSDGTPPAGTO.."
EndSwitch       
Switch                                                                                                                            
  Case ListaRegra_VSDGTPCART_Ativo  : Moveto [Tipo do Lancamento] TypeIn ListaRegra_VSDGTPCART
  Otherwise                         : Moveto [Tipo do Lancamento] TypeIn "~VSDGTPCART.."
EndSwitch     
Switch
  Case Not IsBlank(VSDGNCARREG):
    Moveto [Numero_Carregamento_Orig] TypeIn "~VSDGNCARREG.."
  OtherWise:
    If VSDGTPDATA="1"
       Then Moveto [Data de Emissao       ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
       Else Moveto [Data de Vencimento    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
    EndIf                                             
  
EndSwitch
Moveto [Saldo do Documento     ] TypeIn "> 0.01 "
Do_It!
ClearAll

If IsEmpty("Answer")=False
   Then If VSDGTPDATA="1"
           Then Sort "Answer" On "Codigo do Destinatario","Data de Emissao","Tipo do Documento","Numero do Documento"
           Else Sort "Answer" On "Codigo do Destinatario","Data de Vencimento","Tipo do Documento","Numero do Documento"
        EndIf
         
        seq=0
        CoEdit "bxautt","Answer"
        scan
          seq=seq+1
        
          moveto "bxautt"
          End
          Down
          [Numero do Lote         ]=NLANC
          [Sequencia              ]=seq
          [Numero do Lancamento   ]=[Answer->Numero do Lancamento   ]
          [Codigo da Empresa      ]=[Answer->Codigo da Empresa      ]
          [Codigo do Documento    ]=[Answer->Codigo do Documento    ]
          [Tipo do Documento      ]=[Answer->Tipo do Documento      ]
          [Numero do Documento    ]=[Answer->Numero do Documento    ]
          [Data de Emissao        ]=[Answer->Data de Emissao        ]
          [Data de Vencimento     ]=[Answer->Data de Vencimento     ]
          [Codigo do Destinatario ]=[Answer->Codigo do Destinatario ]
          [Razao Social           ]=[Answer->Razao Social           ]
          [Tipo do Pagamento      ]=[Answer->Tipo do Pagamento      ]

          [Valor do Documento     ]=[Answer->Valor do Documento     ]
          [Saldo do Documento     ]=[Answer->Saldo do Documento     ]
          
          [Data Limite Desconto   ]=[Answer->Data Limite Desconto   ]
          [Valor do Desconto      ]=[Answer->Valor do Desconto      ]
         
          [Multa                  ]=[Answer->Multa                  ]
          [Taxa de Juros          ]=[Answer->Taxa de Juros          ]
          [Tipo Taxa de Juros     ]=[Answer->Tipo Taxa de Juros     ]
          [NDias Taxa de Juros    ]=[Answer->NDias Taxa de Juros    ]
          [Valor de Juros         ]=[Answer->Valor de Juros         ]
          
          [Tipo do Lancamento     ]=[Answer->Tipo do Lancamento     ]
          [Descricao do Lancamento]=[Answer->Descricao do Lancamento]
          
          [Bx Tipo da Baixa      ]="NORMAL"

          if [Tipo do Pagamento  ]="TC" and
             Search("-TC",[Numero do Documento])>0
             then [Data de Vencimento]=VSDGDTBASE
                  [Bx Tipo da Baixa  ]="DEVOLUCAO"
          endif   

          AtualizaValores()           
          UnLockRecord
           
          moveto "answer"
        endscan
        
EndIf
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Rotina Dialog Desconto                                                      *
;*******************************************************************************
Proc SD_DialogDesconto(Disparo,Campo,Evento,Elemento)
Temp     =True
TECLA     =""
MSG_CAMPO=""

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 27:
          Temp=False
          Switch
             Case Campo="A_Descto"      : CancelDialog
             Case Campo="Descto"        : Campo="A_Descto"
          EndSwitch
      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
             Case Campo="A_Descto":
                  VSD_A_Descto=ControlValue("A_Descto")
                  If VSD_A_Descto>0
                     Then VSD_Descto=BlankNum()
                          AcceptDialog
                     Else VSD_A_Descto=BlankNum()
                          Campo="Descto"
                  EndIf
             Case Campo="Descto":
                  VSD_Descto=ControlValue("Descto")
                  AcceptDialog
           EndSwitch
   EndSwitch
EndIf

Switch
 Case Campo="A_Descto"        : 
      MSG_CAMPO="Digite a porcentagem de desconto"
 Case Campo="Descto"        : 
      MSG_CAMPO="Digite o valor de desconto sobre o total"     
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)

Return Temp
EndProc

;*******************************************************************************
;* Digitacao dos Dados do Desconto                                             *
;*******************************************************************************
Proc DESCONTO()
private vrdesconto, vrtotdesconto, vrdifdesconto, vrtotrec, PORCEN

VSD_A_Descto = blanknum()
VSD_Descto   = blanknum()                                                
                                                                                    
Showdialog "Calculo do Desconto" Proc "SD_DialogDesconto"                                   
   Trigger "OPEN","ARRIVE"                                                          
    Key "ENTER","ESC"                                                               
     @ 09,23 height 04 width 32                                                        
                                                                                    
   Label  @ 00,01 "%Desconto" For "A_Descto"                                        
   Accept @ 01,02 Width 10 "N" picture "#*#.[###]" Tag "A_Descto" to VSD_A_Descto    
                                                                                     
   Label  @ 00,18 "Valor" For "Descto"                                               
   Accept @ 01,15 Width 13 "$" picture "#*#.[##]" Tag "Descto" to VSD_Descto        

Enddialog                                                                            
Mouse Show
If Not RetVal
   Then Return
EndIf
 
Switch
  Case VSD_A_Descto > 0 : 
       PORCEN = VSD_A_Descto/100
       
  Case VSD_Descto > 0   : 
       vrtotrec=0
       scan
       
         If SubStr([Descricao do Lancamento],1,10)="DESCONTADA" 
            Then ; nÆo soma
            else
                 vrtotrec=vrtotrec+[Bx Valor do Recebimento]
         endif        
       endscan
   
       PORCEN = VSD_Descto/vrtotrec
       
  OtherWise             : 
       PORCEN = 0
       
EndSwitch

if PORCEN>0
   then 
        vrtotdesconto=0
        Scan
          if [Bx Tipo da Baixa]="NORMAL" and SubStr([Descricao do Lancamento],1,10)<>"DESCONTADA"
             then
                  vrdesconto = Round([Bx Valor do Recebimento]*PORCEN,2)
                  [Bx Valor do Recebimento]=[Bx Valor do Recebimento]-vrdesconto
                  [Bx Valor do Desconto   ]=[Bx Valor do Desconto   ]+Vrdesconto
                  [Bx Valor Juros_Desconto]=[Bx Valor Juros_Desconto]+(vrdesconto*-1)
                  
                  vrtotdesconto=vrtotdesconto+vrdesconto
                  AtualizaFormaBaixa()
          endif 
        EndScan
        
        if VSD_Descto>0
           then  vrdifdesconto=VSD_Descto-vrtotdesconto
                 if vrdifdesconto<>0
                    then
                         scan
                            If [Bx Tipo da Baixa]="NORMAL" and SubStr([Descricao do Lancamento],1,10)<>"DESCONTADA" and [Bx Valor do Recebimento]>=vrdifdesconto
                               Then [Bx Valor do Recebimento]=[Bx Valor do Recebimento]-vrdifdesconto
                                    [Bx Valor do Desconto   ]=[Bx Valor do Desconto   ]+vrdifdesconto
                                    [Bx Valor Juros_Desconto]=[Bx Valor Juros_Desconto]-(vrdifdesconto*-1)
                                    quitloop
                            EndIf
                         endscan
           
                 endif
        endif   
endif
        
EndProc

;*******************************************************************************
;* Rotina Dialog juros                                                         *
;*******************************************************************************
Proc SD_DialogJuros(Disparo,Campo,Evento,Elemento)
Temp     =True
TECLA     =""
MSG_CAMPO=""

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 27:
          Temp=False
          Switch
             Case Campo="Itxjuros"      : CancelDialog
             Case Campo="Itpjuros"      : Campo="Itxjuros"
             Case Campo="IFlag"         : Campo="Itpjuros"
          EndSwitch
      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
             Case Campo="Itxjuros":
                  VSD_txjuros=ControlValue("Itxjuros")
                  If VSD_txjuros>0
                     Then Campo="Itpjuros"
                     else fastmsg("Valor inv lido !")
                  EndIf
             Case Campo="Itpjuros":
                  VSD_tpjuros=ControlValue("Itpjuros")
                  If VSD_tpjuros<>""
                     Then 
                          vsd_msgjuros=""
                          Switch
                            Case VSD_tpjuros="D" : vsd_msgjuros=vsd_msgjuros+"Dia/"+strval(001)+" Dia"
                            Case VSD_tpjuros="M" : vsd_msgjuros=vsd_msgjuros+"Mˆs/"+strval(030)+" Dias"
                            Case VSD_tpjuros="A" : vsd_msgjuros=vsd_msgjuros+"Ano/"+strval(365)+" Dias"
                          EndSwitch 
                          Campo="IFlag"
                          
                     else fastmsg("Valor inv lido !")
                  EndIf
             Case Campo="IFlag":
                  AcceptDialog
           EndSwitch
   EndSwitch
EndIf

Switch
 Case Campo="Itxjuros"        : 
      MSG_CAMPO="Digite a porcentagem de juros"
 Case Campo="Itpjuros"        : 
      MSG_CAMPO="Digite o tipo de taxa de juros, Di ria/Mensal/Anual"     
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)

Return Temp
EndProc

;*******************************************************************************
;* Digitacao dos Dados do Juros                                                *
;*******************************************************************************
Proc JUROS()
private txjuros, tpjuros

VSDGDTBAIXA=[Bxautc->Data da Baixa]
VSDGDTBASE =[Bxautc->Data Base    ]

VSD_txjuros  = blanknum()
VSD_tpjuros  = ""                                                
VSD_msgjuros = ""                                                
VSD_Flag     = ""                                                
                                                                                    
Showdialog "Calculo do Juros" Proc "SD_DialogJuros"                                   
   Trigger "OPEN","ARRIVE"                                                          
    Key "ENTER","ESC"                                                               
     @ 09,20 height 04 width 38                                                        
                                                                                    
   Label  @ 00,01 "%Juros" For "Itxjuros"                                        
   Accept @ 01,02 Width 10 "N" picture "#*#.[###]" Tag "Itxjuros" to VSD_txjuros    
                                                                                     
   Label  @ 00,12 "Tipo" For "Itpjuros"                                               
   Accept @ 01,13 Width 4 "A1" picture "M,D,A" Tag "Itpjuros" to VSD_tpjuros        

   Label  @ 00,20 "" For "Imsgjuros"                                               
   Accept @ 01,16 Width 15 "A20" Tag "Imsgjuros" to VSD_msgjuros        

   Label  @ 00,32 "" For "IFlag"                                               
   Accept @ 01,32 Width 3 "A1" Tag "IFlag" to VSD_Flag        

Enddialog                                                                            
Mouse Show
If Not RetVal
   Then Return
EndIf
 
if VSD_txjuros>0 and VSD_tpjuros<>""
   then 
        Scan
          if [Bx Tipo da Baixa]="NORMAL" and SubStr([Descricao do Lancamento],1,10)<>"DESCONTADA"
             then
                  [Taxa de Juros     ]=VSD_txjuros
                  [Tipo Taxa de Juros]=VSD_tpjuros
                  [Valor de Juros    ]=blanknum()
                  Switch
                    Case VSD_tpjuros=""  : [NDias Taxa de Juros]=0
                    Case VSD_tpjuros="D" : [NDias Taxa de Juros]=1
                    Case VSD_tpjuros="M" : [NDias Taxa de Juros]=30
                    Case VSD_tpjuros="A" : [NDias Taxa de Juros]=365
                  EndSwitch 
                  AtualizaValores()
          endif 
        EndScan
endif
        
EndProc

;*******************************************************************************
;*Realiza Baixa Automatica Contas a pagar/ Conta Corrente                      *
;*******************************************************************************
Proc BAIXA()
private emprant, nlote

AUX_EMPRESA = "***"
NLOTE       = [BxautC->Numero do Lote ]
VSDGDTBAIXA = [Bxautc->Data da Baixa  ]
VSDGDTBASE  = [Bxautc->Data Base      ]
VSDGCONTA2  = [BxautC->Codigo da Conta]

ENCONTRADO_INCONSISTENCIA=false
ARQ_ERRO= Privdir()+"ATUALIZ.ERR"
Deleta_Arquivo(ARQ_ERRO)

Do_It!                              
ClearAll

{ask} {bxauti} check
moveto [numero do lote] typein "~NLOTE"
do_it!
ClearAll

AGUARDE("Aguarde, atualizando contas a receber e Caixa/Banco")

NR = NRecords("Answer")

View   "Bxautc"
View   "BxautI"
View   "Duplic"
View   "DupBaixa"
View   "DupRat"
View   "\\Sistemas\\CtaCor\\MovRat"
View   "\\Sistemas\\Cadastro\\FichaCli"
View   "\\Sistemas\\CtaCor\\MovCont"
View   "\\Sistemas\\CtaCor\\SaldCont"
CoEdit "Answer"
Scan 

  Barra(NR, recno())
  Aguarde("Aguarde, processando "+BARRA_STRING)

  while true   
    NLANC=[Numero do Lancamento]

    sm=   "Contas a Receber, lan‡amento "+NLANC+ " - "
    sm=sm+"Docto "+Format("W04,AL",[Codigo da Empresa  ])+"/"+
                   Format("W04,AL",[Codigo do Documento])+"/"+
                   Format("W10,AL",[Numero do Documento])+", "
    
    ;* Localiza Titulo ***
    Moveto "\\Sistemas\\CtaRec\\Duplic"
    Moveto [Numero do Lancamento]
    Locate NLANC
    if not retval
       then 
            Grava_Erro(sm+"t¡tulo nÆo encontado !")
            quitloop
       
       else
            if [Codigo da Empresa  ]<>[Answer->Codigo da Empresa  ]  or
               [Codigo do Documento]<>[Answer->Codigo do Documento]  or
               [Numero do Documento]<>[Answer->Numero do Documento]  
               then 
                    Grava_Erro(sm+"t¡tulo nÆo confere dados !")
                    quitloop
            endif
            
            if [Saldo do Documento]<=0.01
               then 
                    Grava_Erro(sm+"baixa n„o efetuada, t¡tulo j  liquidado !")
                    quitloop
            endif

            Moveto "\\Sistemas\\CtaRec\\Duplic"
            while IsLockrecord() endwhile
  
            ;* Gera Baixa ***
            bxok=true
            For I from 1 to 8
              NITEM=StrVal(I)
              
              Moveto "\\Sistemas\\CtaRec\\DupBaixa"
              Moveto [Numero do Lancamento]
              Locate NLANC,NITEM
              If Not Retval
                 Then End Down
                      [Numero do Lancamento]=NLANC
                      [Sequencia da Baixa  ]=NITEM
                      if not islockrecord()
                         then quitloop
                      endif
                      del
                 else 
                      if [Bx Sistema Gerador     ]="BX"   and
                         [Bx Tipo Docto Gerador  ]="ACF"  and
                         [Bx Numero Docto Gerador]=[Bxautc->Numero do Lote]
                         then bxok=false
                              Grava_Erro(sm+"baixa j  existe !")
                              quitloop
                      endif  
                 
                 
                      if i=8
                         then bxok=false
                              Grava_Erro(sm+"baixa n„o efetuada, mais de 9 baixas !")
                              quitloop
                      endif
                      
                           
              EndIf
            EndFor
            if not bxok
               then quitloop
            endif
                   
            [Codigo da Conta     ]=VSDGCONTA2
            [Codigo da Empresa   ]=[Duplic->Codigo da Empresa]
            [Data do Pagamento   ]=VSDGDTBAIXA
            [Valor do Recebimento]=[Answer->Bx Valor do Recebimento]
            [Valor do Desconto   ]=[Answer->Bx Valor do Desconto   ]
            [Valor do Juros      ]=[Answer->Bx Valor do Juros      ]
            [Tipo da Baixa       ]=[Answer->Bx Tipo da Baixa       ]
         
            switch
              case sys_codigo_cliente="0380":
                [Valor da Comissao]=NDecimal((([Valor do Recebimento]-[Valor do Juros])*[Duplic->TaxaComissao])/100,2)

              otherwise                     :
                TXCOMIS=((([Valor do Recebimento]+[Valor do Desconto])-[Valor do Juros])*100)/[Duplic->Saldo do Documento]
                [Valor da Comissao]=NDecimal(([Duplic->Saldo da Comissao]*TXCOMIS)/100,2)
    
            endswitch
         
            If PARAM_COMISSAO_JUROS_DESCTO="S"
               Then If [Valor do Juros] > 0
                       Then TXJUROS=([Valor do Juros]*100)/([Valor do Recebimento]+[Valor do Desconto]-[Valor do Juros])
                            [Valor da Comissao]=[Valor da Comissao]+NDecimal(([Valor da Comissao]*TXJUROS)/100,2)
                       Else If [Valor do Desconto]> 0
                               Then TXDESCTO=([Valor do Desconto]*100)/([Valor do Recebimento]+[Valor do Desconto]-[Valor do Juros])
                                    [Valor da Comissao]=[Valor da Comissao]-NDecimal(([Valor da Comissao]*TXDESCTO)/100,2)
                            EndIf
                    EndIf
            EndIf         
         
            [Codigo CCusto         ]=[Duplic->Codigo CCusto         ]
            [Codigo Plano_Conta    ]=[Duplic->Codigo Plano_Conta    ]
            
            If IsBlank([Codigo Plano_Conta])
               Then Switch
                      Case PARAM_PLANO_CONTA_DEBITO<>""  And [Duplic->Tipo do Pagamento]="CD" :
                           [Codigo Plano_Conta]=PARAM_PLANO_CONTA_DEBITO
                      Case PARAM_PLANO_CONTA_CREDITO<>"" And [Duplic->Tipo do Pagamento]="CT" :
                           [Codigo Plano_Conta]=PARAM_PLANO_CONTA_CREDITO
                      Case PARAM_PLANO_CONTA_CREDITO<>"" And [Duplic->Tipo do Pagamento]="CL" :
                           [Codigo Plano_Conta]=PARAM_PLANO_CONTA_CREDITO
                      Case [Data do Pagamento]=[Duplic->Data de Emissao] : 
                           If Not IsBlank(PARAM_PLANO_CONTA_AVISTA)
                              Then [Codigo Plano_Conta]=PARAM_PLANO_CONTA_AVISTA
                           EndIf     
                      OtherWise :  
                           If Not IsBlank(PARAM_PLANO_CONTA_APRAZO)
                              Then [Codigo Plano_Conta]=PARAM_PLANO_CONTA_APRAZO
                           EndIf
                    EndSwitch
            EndIf
           
            [Codigo do Historico   ]=""
            [Descricao do Historico]="REC. "+[Duplic->Tipo do Documento]+"/"+[Duplic->Numero do Documento]
         
            [Numero_Carregamento   ]=[Duplic->Numero_Carregamento_Orig]
 
            [Bx Sistema Gerador     ]="BX"
            [Bx Tipo Docto Gerador  ]="AUT"
            [Bx Numero Docto Gerador]=NLOTE
           
            if [Answer->Bx Tipo da Baixa       ]<>"NORMAL"
               then [Observacoes           ]=[Answer->Bx Tipo da Baixa]+" por Baixa Automatica."
                    [Descricao do Historico]="BAIXA "+[Answer->Bx Tipo da Baixa]+", "+[Duplic->Tipo do Documento]+"/"+[Duplic->Numero do Documento]   
            endif   

            if not isblank([Answer->Observacoes])
               then if not isblank([Observacoes])
                       then [Observacoes           ]=[Observacoes           ]+" - "
                    endif
                    [Observacoes           ]=[Observacoes           ]+[Answer->Observacoes]
            endif   

            Controle_Dia()
        
         ;* Atualiza Titulo ***
            Moveto "Duplic"
            [Saldo do Documento]=Round([Saldo do Documento]-
                                 (([DupBaixa->Valor do Recebimento]-
                                   [DupBaixa->Valor do Juros      ])+
                                   [DupBaixa->Valor do Desconto]),2)
            [Saldo da Comissao ]=Round([Saldo da Comissao ]-
                                  [DupBaixa->Valor da Comissao   ],2)
         
         
                     
            if [Answer->Bx Tipo da Baixa]="NORMAL" and SubStr([Answer->Descricao do Lancamento],1,10)<>"DESCONTADA"
               then RATEIO_BAIXA_AUTOMATICA="DUP"
                    Rateio_Baixa_Automatica("Seta_Valores")
                    Rateio_Baixa_Automatica("DupRat") 
               
                    ;* Atualiza Conta Corrente ***
                    ANOREF=StrVal(Year([\Sistemas\CtaRec\DupBaixa->Data do Pagamento]))
                    MESREF=StrVal(Month([\Sistemas\CtaRec\DupBaixa->Data do Pagamento]))
                    MESREF=ALINHM(MESREF, 2)
                 
                    Moveto "\\Sistemas\\CtaCor\\SaldCont"
                    While True
                      Moveto [Codigo da Conta]
                      Locate [\Sistemas\CtaRec\DupBaixa->Codigo da Conta],ANOREF,MESREF
                      If Not RetVal
                         Then End
                              Down
                              [Codigo da Conta]=[\Sistemas\CtaRec\DupBaixa->Codigo da Conta]
                              [Ano Referencia ]=ANOREF
                              [Mes Referencia ]=MESREF
                              [Saldo Inicial  ]=0
                              [Entradas       ]=0
                              [Saidas         ]=0
                              If IsLockRecord()
                                 Then Del
                              EndIf
                         Else If Not IsLockRecord()
                                 Then QuitLoop
                              EndIf
                      EndIf
                    EndWhile
                    [Entradas]=[Entradas]+[\Sistemas\CtaRec\DupBaixa->Valor do Recebimento]
                    UnLockRecord
                 
                    Moveto "\\Sistemas\\CtaCor\\MovCont"
                    While True
                      End
                      Moveto [Numero do Lancamento]
                      If Numero_Lancamento("Interno","Locked_Down")
                         Then NLANCMC = PROXLANCTO_NLANC
                              Release Vars PROXLANCTO_NLANC
                              quitloop
                      EndIf    
                    EndWhile
                    [Codigo da Conta       ]=[\Sistemas\CtaRec\DupBaixa->Codigo da Conta     ]
                    [Codigo da Empresa     ]=[\Sistemas\CtaRec\Duplic->Codigo da Empresa     ]
                    [Tipo de Operacao      ]="07"
                    [Data                  ]=[\Sistemas\CtaRec\DupBaixa->Data do Pagamento   ]
                    [Valor                 ]=[\Sistemas\CtaRec\DupBaixa->Valor do Recebimento]
                    [Valor do Desconto     ]=[\Sistemas\CtaRec\DupBaixa->Valor do Desconto   ]
                    [Valor do Juros        ]=[\Sistemas\CtaRec\DupBaixa->Valor do Juros      ]
                    [Codigo do Documento   ]=[\Sistemas\CtaRec\Duplic->Codigo do Documento   ]
                    [Numero do Documento   ]=[\Sistemas\CtaRec\Duplic->Numero do Documento   ]
                    [Codigo do EmitDest    ]=[\Sistemas\CtaRec\Duplic->Codigo do Destinatario]
                    [Codigo CCusto         ]=[\Sistemas\CtaRec\DupBaixa->Codigo CCusto       ]
                    [Codigo Plano_Conta    ]=[\Sistemas\CtaRec\DupBaixa->Codigo Plano_Conta  ]
                    [Codigo do Historico   ]=""
                    [Descricao do Historico]=[\Sistemas\CtaRec\DupBaixa->Descricao do Historico]
                    If [DupBaixa->Data do Pagamento]=[Duplic->Data de Emissao]
                       Then [Tipo do Lancamento    ]="I"
                       Else [Tipo do Lancamento    ]="J"
                    EndIf
                    [Data Competencia      ]=[\Sistemas\CtaRec\Duplic->Data de Emissao]
         
                    [Sistema Gerador       ]="CR"
                    [Empresa Gerador       ]=[\Sistemas\CtaRec\Duplic->Codigo da Empresa   ]
                    [Lancamento Gerador    ]=[\Sistemas\CtaRec\Duplic->Numero do Lancamento]
                    [Sequencia Gerador     ]=[\Sistemas\CtaRec\DupBaixa->Sequencia da Baixa]
         
                    Controle_Dia()
                    UnLockRecord
                    
                    Rateio_Baixa_Automatica("MovRat")
                 
                 ;* Atualiza Baixa com Lancamento do Conta Corrente ***
                    Moveto "DupBaixa"
                    [Lancamento Conta Corrente]=NLANCMC
                
            EndIf
            Moveto "\\Sistemas\\CtaRec\\Dupbaixa"
            If RecordStatus("Locked") Then UnLockRecord EndIf         

            ;* Ficha Financeira ***
            NDA=[DupBaixa->Data do Pagamento]-[Duplic->Data de Vencimento]
            If NDA>0
               Then Moveto "\\Sistemas\\Cadastro\\FichaCli"
                    Moveto [Codigo]
                    Locate [Duplic->Codigo do Destinatario]
                    If RetVal
                       Then While IsLockRecord() EndWhile
                            [Numero de Atrasos] = [Numero de Atrasos] + 1
                            If [Maior Atraso] < NDA
                               Then [Maior Atraso] = NDA
                                    [Data do Maior Atraso ]=[DupBaixa->Data do Pagamento   ]
                                    [Valor do Maior Atraso]=[DupBaixa->Valor do Recebimento]
                            EndIf
                            UnLockRecord
                    EndIf
            EndIf
         
            Moveto "BxautI"
            moveto [Numero do Lote]
            locate [answer->numero do lote],[answer->sequencia]
            if retval
               then [Bx Sequencia da Baixa]=NITEM
                    unlockrecord
            endif
    endif
    Moveto "\\Sistemas\\CtaRec\\Duplic"
    If RecordStatus("Locked") Then UnLockRecord EndIf         

    SaveTables       
    
    quitloop
  endwhile
   
  Moveto "Answer"
EndScan

Moveto "BxautC"
Moveto [Numero do lote]
Locate NLOTE
if retval
   then 
        if not ENCONTRADO_INCONSISTENCIA
           then 
                [Situacao]="ATUALIZADO"
                unlockrecord
                
                SaveTables
        endif   
endif        

Do_It!
ClearAll

LIMPAGUARDE()

if ENCONTRADO_INCONSISTENCIA
   then
        msg=    "Foi detectado erro na atualiza‡Æo !// //"
        msg=msg+"Este lote nÆo foi totalmente atualizado,//"
        msg=msg+"verificar   o   relat¢rio   de   erro  e//"
        msg=msg+"corrigi-los e depois atualizar novamente."
        mensagem(msg)

        DISPOSITIVO_OPCAO="V"
        PDFZEBRA = False
        
        ImpriArq(ARQ_ERRO)
        
   else MENSAGEM("Baixa/Atualiza‡Æo concluida!")
   
        GeraTitulo()
endif

Carrega_Tabelas()
Moveto "bxautc"
PickForm "F"
Moveto [Numero do Lote]
Locate NLOTE
if RetVal
   Then islockrecord()
endif

Moveto "bxauti"

if ENCONTRADO_INCONSISTENCIA
   then return false
   else return true
endif

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc GeraTitulo()
private NR, vrtituloscanc, obscanc, regduplic, CR_LANC

LimpaRodape(0)
ExibeRodape(1,"Aguarde, verificando baixas por cancelamento")

{ask} {bxauti}       
moveto [numero do lote        ] typein "~NLOTE"
moveto [Codigo da Empresa     ] Check
moveto [Codigo do Destinatario] Check
moveto [Bx Tipo da Baixa      ] typein "CANCELADO"
do_it!
ClearAll

NR = NRecords("Answer")
if NR>1 or isempty("Answer")
   then return
endif   

MSG=    "Esta baixa foi detectado como CANCELAMENTO !// //"
MSG=MSG+"Neste caso ‚ poss¡vel gerar um novo t¡tulo a receber//"
MSG=MSG+"referente ao total desta baixa.                     //"
MSG=MSG+"** Substitui‡Æo dos t¡tulos por outro **            //"
if not ConfGeral(MSG+"Deseja criar o novo lan‡amento ?")
   then return
endif   

LimpaRodape(0)
ExibeRodape(1,"Aguarde, gerando titulo no contas a receber")

{ask} {bxauti} check
moveto [numero do lote        ] typein "~NLOTE"
do_it!
ClearAll

obscanc      =""
vrtituloscanc=0

NR = NRecords("Answer")

View   "Duplic"
CoEdit "Answer"
Scan 

  Barra(NR, recno())
  Aguarde("Aguarde, processando "+BARRA_STRING)

  vrtituloscanc=vrtituloscanc+[Bx Valor do Recebimento]

  getrecord "Duplic" [Numero do Lancamento] to regduplic
  if retval
     then if search(regduplic["Documento Referente"],obscanc)=0
             then if not isblank(obscanc)
                     then obscanc=obscanc+", "+regduplic["Documento Referente"]
                     else obscanc="Ref: "+regduplic["Documento Referente"]
                  endif   
          endif   
  endif
        
endscan

Moveto "\\Sistemas\\CtaRec\\Duplic"
While True
  End
  Moveto [Numero do Lancamento]
  If Numero_Lancamento("Interno","Locked_Down")
     Then CR_LANC = PROXLANCTO_NLANC
          Release Vars PROXLANCTO_NLANC
          quitloop
  EndIf    
EndWhile
[Codigo da Conta         ]=VSDGCONTA2
[Codigo do Documento     ]="FAT"
[Numero do Documento     ]=NLOTE
[Codigo do Destinatario  ]=[Answer->Codigo do Destinatario]
[Data de Emissao         ]=VSDGDTBAIXA
[Data de Vencimento      ]=VSDGDTBAIXA
[Data a Receber          ]=VSDGDTBAIXA

[Sistema Gerador         ]="BX"

[Tipo Docto Gerador      ]="AUT"
[Numero Docto Gerador    ]=NLOTE
[Documento Referente     ]="DIVERSOS"

[Valor do Documento      ]=vrtituloscanc
[Saldo do Documento      ]=vrtituloscanc
[Tipo do Pagamento       ]="BO"
[Observacoes             ]=obscanc
[Data de Entrada         ]=VSDGDTBAIXA

[Tipo do Lancamento      ]="E"
[Descricao do Lancamento ]="CARTEIRA"

;-- Centro de Custo ---------------------------------------------------------------------------
switch
  case sys_codigo_cliente="0000" : 
    [Codigo CCusto]=""

  otherwise:
  
endswitch

;-- Plano de Conta ----------------------------------------------------------------------------
switch
  case sys_codigo_cliente="0000" : 
    [Codigo Plano_Conta]=""

  otherwise:
  
endswitch
;----------------------------------------------------------------------------------------------

Controle_Dia()
UnLockRecord

do_it!
ClearAll

LimpaRodape(0)
Mensagem("Fim  do processo!// //Verificar lan‡amento "+CR_LANC+" no conta a receber !")

endproc

;*******************************************************************************
;* Rotina De Impressao                                                         *
;*******************************************************************************
Proc IMPRIME()
                         
clieant = "****"

ShowPopup " Fun‡”es " CENTERED
 "~P~adrÆo      " : " Imprimir Rela‡Æo de t¡tulos do Lote      " : "Padrao",
 "~R~ecibo Pagto" : " Imprimir Recibo de Pagto e Atualiza Baixa" : "Comprovante",
 "~C~ancelar    " : " Cancelar a Opera‡„o                      " : "CANCELAR"
EndMenu
 To MenuVar

echo off
If MenuVar="CANCELAR" or MenuVar="Esc"
    Then Return false
EndIf

NLOTE     =[BxautC->Numero do Lote ]
VSDGDTBAIXA=[Bxautc->Data da Baixa]
VSDGDTBASE =[Bxautc->Data Base    ]

switch
  case MenuVar="Padrao":
   	DISPOSITIVO()
		If OK=""
		   Then
		        return false
    endif        
        
    Do_It!
    ClearAll

    play("RT_0001") 

  case MenuVar="Comprovante":
   ;If IsBlank(PARAM_RELAT)
   ;   Then
	 ;        msg=    "Empresa: "+regconta["Codigo da Empresa"]+", sem modelo de recibo !// //"
   ;        msg=msg+" - Utilit rios / Parƒmetros / Contas a Pagar//"
   ;        msg=msg+" - Lan‡amentos e Baixas de Titulos// //"
   ;        msg=msg+"Verificar com Suporte da Vise !"
   ;        Mensagem(msg)
	 ;        return false     
   ;endif   
       
    MSGDISPOSITIVO="Recibo"
		DispositivoI("RCB")
		If OK=""
		   Then
		        return false
    endif        
        
    if [Bxautc->Situacao]="EM ABERTO"
       then  
            if not Baixa()
               then return true
            endif   
    endif
            
    Do_It!
    ClearAll
     
    Switch
      case SYS_CODIGO_CLIENTE="0329" : PARAM_IMPRESSAO = "BXCXAUTO"
                                       Play("RP_0329C") 
      case SYS_CODIGO_CLIENTE="0102" : Play("RP_0102B")
      case SYS_CODIGO_CLIENTE="0280" : Play("RB_0280B")
      otherWise                      : If PARAM_RELAT = "RP_0000B"
                                          Then PARAM_IMPRESSAO = "BXCXAUTO"   
                                               Play("RP_0000B")
                                          Else ;PARAM_RELAT = Nem todos os scripts estÆo ajustado p/ BxCxAuto
                                               Play("RP_0001")
                                       EndIf   
    Endswitch   
endswitch           

Do_it!
ClearAll
LIMPAGUARDE()

Carrega_Tabelas()

return true
EndProc


;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()

INICIO_DIALOG=True
Moveto [Sequencia]
Locate NLANC,ITEM
CopyToArray Reg_bxauti

SincronizaDados_Baixa("Ler")
EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Rotina de Digitacao Dados a Vista                                           *
;*******************************************************************************
Proc Baixa_Dialog(Disparo,Campo,Evento,Elemento)
Private JANELA, WinArray5

Temp      = True
TECLA     =""
MSG_CAMPO =""

If INICIO_DIALOG
   Then       
        If CHAVEI=0
           Then Campo="I_TpBaixa"
        EndIf
       INICIO_DIALOG=False
EndIf
            
If Opcao_Ver Then Campo="I_Seq" EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
       Case Opcao_Ver=True:
            Temp=False
            Switch
              Case Evento["KeyCode"] =  27:
                   CancelDialog
              OtherWise:

                Mover_Reg=True
                Switch
                  Case Evento["KeyCode"] = -71:
                       If AtFirst()
                          Then Mover_Reg=False Beep
                          Else Home
                       EndIf
                  Case Evento["KeyCode"] = -79:
                       If AtLast()
                          Then Mover_Reg=False Beep
                          Else End
                       EndIf
                  Case Evento["KeyCode"] = -73:
                       If AtFirst()
                          Then Mover_Reg=False Beep
                          Else Up
                       EndIf
                  Case Evento["KeyCode"] = -81:
                       If AtLast()
                          Then Mover_Reg=False Beep
                          Else Down
                       EndIf
                EndSwitch
                If Mover_Reg=True
                   Then ITEM=[Sequencia]
                        Inicia_Registro()
                EndIf
            EndSwitch
      Case Evento["KeyCode"] = 9:
           Temp=False
       Case Evento["KeyCode"] = -63:
            Temp=False
            Edita_Memo("Observacoes",16,02,07,74,"Observa‡”es")
            VSD_I_ObsBaixa           =  [Observacoes]

      Case Evento["KeyCode"] = 27: 
           Temp=False
           Switch
             Case Campo="I_TpBaixa"           : 
                  If QuerDesfazer("")
                     Then ;-- tem que desfazer ------
                          CopyFromArray Reg_bxauti
                          SincronizaDados_Baixa("Ler")
                          CancelDialog
                          ;--------------------------
                  EndIf
             Case Campo="I_Vr_Pagto"           : Campo="I_TpBaixa"
             Case Campo="I_Vr_Juros"           : Campo="I_Vr_Pagto"
             Case Campo="I_Vr_Descto"          : Campo="I_Vr_Juros"
             Case Campo="I_Flag"               : Campo="I_TpBaixa"
           EndSwitch
      Case Evento["KeyCode"] = 13:  
           Temp=False
           If Checa_TAG()
              then
                   Switch
                     Case Campo="I_TpBaixa"           : Campo="I_Vr_Pagto"
                          VSD_I_TpBaixa=ControlValue("I_TpBaixa")
                          If IsBlank(VSD_I_TpBaixa)
                             Then VSD_I_TpBaixa="NORMAL"
                          EndIf
                     
                          If VSD_I_TpBaixa<>"NORMAL"
                             Then If not Edita_Memo("Observacoes",16,02,07,74,"Observa‡”es")
                                     Then Campo="I_TpBaixa"  
                                     Else VSD_I_ObsBaixa           =  [Observacoes]
                                          If VSD_I_TpBaixa="CANCELADO"
                                             Then 
                                                  VSD_I_Vr_Pagto =[Saldo do Documento]
                                                  VSD_I_Vr_Juros =blanknum()
                                                  VSD_I_Vr_Descto=blanknum()
                                                  Campo="I_Flag"
                                          EndIf
                                  EndIf  
                          EndIf
                          
                     Case Campo="I_Vr_Pagto"           : 
                          VSD_I_Vr_Pagto=ControlValue("I_Vr_Pagto")
                          If VSD_I_Vr_Pagto >0
                             Then 
                                  Switch
                                    Case VSD_I_TpBaixa="DEVOLUCAO":
                                    
                                      if VSD_I_Vr_Pagto<=[Saldo do Documento]
                                         then VSD_I_Vr_Juros =blanknum()
                                              VSD_I_Vr_Descto=blanknum()
                                              Campo="I_Flag"
                                         else fastmsg("Valor inv lido, maior que o saldo !")
                                      endif
                                    
                                    otherwise             : Campo="I_Vr_Juros"
                                  EndSwitch 
                             else fastmsg("Valor inv lido !")
                          EndIf
                     Case Campo="I_Vr_Juros"           : 
                          VSD_I_Vr_Juros=ControlValue("I_Vr_Juros")
                          If IsBlank(VSD_I_Vr_Juros) or 
                             VSD_I_Vr_Juros>=0
                             Then Campo="I_Vr_Descto"
                             else fastmsg("Valor inv lido !")
                          EndIf   
                     Case Campo="I_Vr_Descto"          :
                          VSD_I_Vr_Descto=ControlValue("I_Vr_Descto")
                          If isBlank(VSD_I_Vr_Descto) or VSD_I_Vr_Descto>=0
                             then Campo="I_Flag"
                             else fastmsg("Valor inv lido !")
                          EndIf
        
                     Case Campo="I_Flag"          :
                          AcceptDialog
        
                   EndSwitch
           endif
   EndSwitch
EndIf

;-- sempre sincronizar ----------
SincronizaDados_Baixa("Gravar")
;--------------------------------

Switch
  Case Campo="I_TpBaixa"    : MSG_CAMPO="N=NORMAL  D=DEVOLUCAO  C=CANCELADO"
EndSwitch

If Opcao_Ver=True
   Then TECLA="Home/End/PgDn/PgUp=Paginar  "
EndIf
TECLA=TECLA+"F5=Obs  "

Monta_Prompt(MSG_CAMPO,TECLA)

Mouse Hide
Return TEMP
EndProc  ; (Baixa_Dialog)

;*******************************************************************************
;* Rotina para Gravacao/Leitura Pagto a Vista                                  *
;*******************************************************************************
Proc SincronizaDados_Baixa(Funcao_Registro)
Private Funcao_Registro, vrtit

Switch
  Case Funcao_Registro="Gravar":
       [Bx Valor do Recebimento   ] =  VSD_I_Vr_Pagto
       [Bx Valor do Desconto      ] =  VSD_I_Vr_Descto
       [Bx Valor do Juros         ] =  VSD_I_Vr_Juros
       [Bx Tipo da Baixa          ] =  VSD_I_TpBaixa
       AtualizaFormaBaixa()
       VSD_I_FmBaixa            =  [Bx Forma da Baixa         ]
       
  Case Funcao_Registro="Ler":
       VSD_I_SEQ                =  [Sequencia                 ]
       VSD_I_Vr_Pagto           =  [Bx Valor do Recebimento   ]
       VSD_I_Vr_Descto          =  [Bx Valor do Desconto      ]
       VSD_I_Vr_Juros           =  [Bx Valor do Juros         ]
       VSD_I_TpBaixa            =  [Bx Tipo da Baixa          ]
       VSD_I_FmBaixa            =  [Bx Forma da Baixa         ]

       VSD_I_Docto              =  [Codigo da Empresa]+" "+[Tipo do Documento]+"/"+[Numero do Documento]
       VSD_I_Emissao            =  [Data de Emissao           ]
       VSD_I_Vencto             =  [Data de Vencimento        ]
       VSD_I_TPG                =  [Tipo do Pagamento         ]
       VSD_I_NDias              =  [Bx NDias                  ]
       VSD_I_Pessoa             =  [Codigo do Destinatario]+" "+[Razao Social]
       VSD_I_Vr_Original        =  [Valor do Documento        ]
       VSD_I_Vr_Saldo           =  [Saldo do Documento        ]
       VSD_I_ObsBaixa           =  [Observacoes]
       VSD_I_Carteira           =  [Descricao do Lancamento   ]
EndSwitch

EndProc  ; (SincronizaDados_Baixa)

;*******************************************************************************
;* Rotina para Lancamento a Vista                                              *
;*******************************************************************************
Proc Digita_Baixa()

VSDGDTBAIXA=[Bxautc->Data da Baixa]
VSDGDTBASE =[Bxautc->Data Base    ]

Showdialog "Dados da Baixa [      ]" Proc "Baixa_Dialog"
  Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea",
        "HOME","END","PGDN","PGUP","F5","F4"
    @ 7,3 height 13 width 73
                                                                  
  Accept @ -01,40 Width 6 "A3" Tag "I_Seq" To VSD_I_SEQ

  Label  @ 00,00 "Tipo da Baixa" For "I_TpBaixa"
  Accept @ 01,01 Width 13 "A12" picture "NORMAL,DEVOLUCAO,CANCELADO" Tag "I_TpBaixa" to VSD_I_TpBaixa

  Label  @ 00,14 "VrRecebimento" For "I_Vr_Pagto"
  Accept @ 01,15 Width 13 "$" picture "#*#.[##]" Tag "I_Vr_Pagto" to VSD_I_Vr_Pagto

  Label  @ 00,28 "VrJuros/Multa" For "I_Vr_Juros"
  Accept @ 01,29 Width 13 "$" picture "#*#.[##]" Tag "I_Vr_Juros" to VSD_I_Vr_Juros

  Label  @ 00,42 "Vr Descto" For "I_Vr_Descto"
  Accept @ 01,43 Width 13 "$" picture "#*#.[##]" Tag "I_Vr_Descto" to VSD_I_Vr_Descto

  Label  @ 00,56 "Forma da Baixa" For "I_FmBaixa"
  Accept @ 01,57 Width 11 "A8" picture "!*!" Tag "I_FmBaixa" to VSD_I_FmBaixa

  Accept @ 01,67 Width 1 "A1" picture "!" Tag "I_Flag" to VSD_I_Flag

  Label  @ 03,00 "Documento" For "I_Docto"
  Accept @ 04,01 Width 27 "A20" picture "!*!" Tag "I_Docto" to VSD_I_Docto

  Label  @ 03,28 "EmissÆo" For "I_Emissao"
  Accept @ 04,29 Width 13 "D" picture "#[#];.##;.##[##]" Tag "I_Emissao" to VSD_I_Emissao

  Label  @ 03,42 "Vencto" For "I_Vencto"
  Accept @ 04,43 Width 13 "D" picture "#[#];.##;.##[##]" Tag "I_Vencto" to VSD_I_Vencto 

  Label  @ 03,56 "TPG" For "I_TPG"
  Accept @ 04,57 Width 04 "A2" picture "!*!" Tag "I_TPG" to VSD_I_TPG

  Label  @ 03,61 "N§ Dias" For "I_NDias"
  Accept @ 04,62 Width 08 "N" picture "#*#" Tag "I_NDias" to VSD_I_NDias

  Label  @ 05,00 "Pessoa" For "I_Pessoa"
  Accept @ 06,01 Width 41 "A50" picture "!*!" Tag "I_Pessoa" to VSD_I_Pessoa

  Label  @ 05,42 "Vr Original" For "I_Vr_Original"
  Accept @ 06,43 Width 13 "$" picture "#*#.[##]" Tag "I_Vr_Original" to VSD_I_Vr_Original

  Label  @ 05,56 "Saldo T¡tulo" For "I_Vr_Saldo"
  Accept @ 06,57 Width 13 "$" picture "#*#.[##]" Tag "I_Vr_Saldo" to VSD_I_Vr_Saldo

  Label  @ 07,28 "Carteira" For "I_Carteira"
  Accept @ 08,29 Width 27 "A20" picture "!*!" Tag "I_Carteira" to VSD_I_Carteira

  @ 07,57 ?? "Saldo Residual"
  @ 08,57 ?? Format("W12.2,EIC",[BX Saldo Residual]) 
   
  PaintCanvas Attribute  47 08, 57, 08, 69

  Label  @ 09,00 "Observa‡äes.." For "I_ObsBaixa"
  Accept @ 10,01 Width 69 "A70" picture "!*!" Tag "I_ObsBaixa" to VSD_I_ObsBaixa

Enddialog
if retval
   then SincronizaDados_Baixa("Gravar")
        UnLockRecord
endif

Mouse Show
EndProc  ; (Digita_Baixa)



;------- Justificativa Baixa ---------------------------------------------------

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc JB_Dialog(Disparo,Campo,Evento,Elemento)
private Disparo,Campo,Evento,Elemento, temp  
Temp      = True
TECLA     = ""
MSG_CAMPO = ""

If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_JUST"          : CancelDialog
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_JUST"        : 
                         VSDGJUST=ControlValue("TG_JUST")
                         AcceptDialog
                  EndSwitch
          EndIf
   EndSwitch
EndIf

Switch
  Case Campo="TG_JUST" :  MSG_CAMPO="Informe a Justificativa"
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc     ;  (JC_Dialog)

;*******************************************************************************
;* Show Dialog JC_Digita                                                       *
;*******************************************************************************
Proc JB_Digita(Tipo)
Private TabAnt, CampoAnt, Tipo

LimpAguarde()
MSGCAMPO=""
VSDGJUST=""

ShowDialog "Justificativa "+Tipo Proc "JB_Dialog"
Trigger "OPEN","ARRIVE"
Key "ENTER","ESC"
@ 10,08   Height 04 Width 75

  Label  @ 00,00 "Observa‡Æo " For "TG_JUST"
  Accept @ 01,01 Width 71 "A255"  Picture "!*!" Tag "TG_JUST" To VSDGJUST  
  
EndDialog
If Retval 
   Then Return True
   else Return False
EndIf 

EndProc    ;  (JB_Digita)

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc TIPOBAIXA()

If RecordStatus("New")
  Then Mensagem("N„o h  lan‡amentos a serem processados !")
       Return 
EndIf

Echo Normal
Echo Off
ShowPopup " Tipo da Baixa " CENTERED
 "~N~ORMAL      ": " Baixa Normal                     " :"NORMAL",
 "~D~EVOLU€¶O   ": " Baixa por Devolu‡Æo              " :"DEVOLUCAO",
 "~C~ANCELADO   ": " Baixa por Cancelamento           " :"CANCELADO"
EndMenu
To MenuVar
Echo Off

If MenuVar="Esc"
   Then return
EndIf

if MenuVar="DEVOLUCAO" or
   MenuVar="CANCELADO"
   then
        If not JB_Digita(MenuVar)
           then return
        endif   
endif   

VSDGDTBAIXA=[Bxautc->Data da Baixa]
VSDGDTBASE =[Bxautc->Data Base    ]

scan

  if [Bx Tipo da Baixa ]="DEVOLUCAO" and
     [Tipo do Pagamento]="TC"        and
     Search("-TC",[Numero do Documento])>0
     then loop
  endif   

  [Bx Tipo da Baixa]=MenuVar

  if [Bx Tipo da Baixa ]="DEVOLUCAO" or
     [Bx Tipo da Baixa ]="CANCELADO"
     then [Observacoes     ]=VSDGJUST
  endif   
  
  AtualizaValores()
  unlockrecord

endscan
                                         
EndProc ;SomaItens()


;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc AtualizaValores()
private VRJUROS, VRDESCT, TXM, TXJ, NDA, vrtit,
        INDICE, AUX_VALOR, AUX_NDIAS

;-- calculando novos valores ----------------------------------------
VRJUROS=blanknum() 
VRDESCT=blanknum()
NDA    =0

if [BX Tipo da Baixa]="NORMAL"
   then 
        Switch
          Case sys_Codigo_Cliente="0377" : ;Pralum

            NDA      =VSDGDTBASE-[Data de Vencimento]
            AUX_NDIAS=NDA

            if AUX_NDIAS>0
               then TXM=[Multa]

                    INDICE    = ndecimal( ( 100 -  ( AUX_NDIAS * [Taxa de Juros] ) /[NDias Taxa de Juros]  ) , 3 ) /100
                    AUX_VALOR = ndecimal(([Saldo do Documento] / INDICE),2) - [Saldo do Documento]
                    VRJUROS   = AUX_VALOR
            endif   

            if AUX_NDIAS<0
               then TXM=0        
                    AUX_NDIAS=NDA*-1 

                    INDICE    = ndecimal( ( 100 -  ( AUX_NDIAS * [Taxa de Juros] ) /[NDias Taxa de Juros]  ) , 3 ) /100
                    AUX_VALOR = ndecimal(([Saldo do Documento] * INDICE),2) - [Saldo do Documento]
                    VRDESCT   = AUX_VALOR *-1

            endif   
        
          OtherWise: ;PadrÆo
            If [Data de Vencimento]<VSDGDTBASE
              Then NDA=VSDGDTBASE-[Data de Vencimento]
                   TXM=[Multa]
              Else NDA=0
                   TXM=0
            EndIf
            
            If [Data Limite Desconto]>=VSDGDTBASE
              Then VRDESCT=[Valor do Desconto]
            EndIf
            
            If [Taxa de Juros]>0
              Then TXJ=([Taxa de Juros]/[NDias Taxa de Juros])*NDA
                   VRJUROS=Round((([Saldo do Documento]*TXJ)/100)+([Saldo do Documento]*TXM/100),2)
              Else VRJUROS=Round((([Valor de Juros]/[NDias Taxa de Juros])*NDA),2)
                   VRJUROS=VRJUROS+Round((([Saldo do Documento]*TXM)/100),2)
            EndIf
          
        endSwitch
EndIf

if SubStr([Descricao do Lancamento],1,10)="DESCONTADA"
   then VRJUROS=0
        VRDESCT=0
endif        

[Bx NDias               ]=NDA
[Bx Valor do Recebimento]=([Saldo do Documento]+VRJUROS)-VRDESCT
[Bx Valor do Juros      ]=VRJUROS
[Bx Valor do Desconto   ]=VRDESCT
[Bx Valor Juros_Desconto]=VRJUROS+(VRDESCT*-1)
AtualizaFormaBaixa()

EndProc ;AtualizaValores()

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc AtualizaFormaBaixa()
private vrtit

switch
 case [BX Tipo da Baixa]="NORMAL":
   [BX Valor Juros_Desconto]=[Bx Valor do Juros]+([Bx Valor do Desconto]*-1)
   
 case [BX Tipo da Baixa]="CANCELADO" or
      [BX Tipo da Baixa]="DEVOLUCAO":
   [Bx Valor do Juros      ]=blanknum()
   [Bx Valor do Desconto   ]=blanknum()
   [BX Valor Juros_Desconto]=blanknum()
  
endswitch

[BX Saldo Residual         ]=[Saldo do Documento]-(([BX Valor do Recebimento]-[Bx Valor do Juros])+[Bx Valor do Desconto])

if [BX Saldo Residual     ]>0
  then [Bx Forma da Baixa ]="PARCIAL"
  else [Bx Forma da Baixa ]="TOTAL"
       [Bx Saldo Residual ]=0
endif

if [Bx Valor do Juros      ]=0 then [Bx Valor do Juros      ]=blanknum() endif
if [Bx Valor do Desconto   ]=0 then [Bx Valor do Desconto   ]=blanknum() endif
if [Bx Valor Juros_Desconto]=0 then [Bx Valor Juros_Desconto]=blanknum() endif

EndProc ;AtualizaFormaBaixa()

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc SomaItens()
private vrsoma1, vrsoma2, ndias, vr1, 
        M_DIAREF,M_DIAREFI, M_DIAREFD

Moveto "Bxautt" SetaCorRegistro("Invisivel") 

echo off

VSDGDTBAIXA=[Bxautc->Data da Baixa]
VSDGDTBASE =[Bxautc->Data Base    ]

vrsoma1=0 
vrsoma2=0

VRTOTREC =blanknum()
VRTOTTIT =blanknum()
VRTOTJD  =blanknum()
DTMEDIA  =blankdate() 
VCITENS  =blanknum()

Moveto "Bxauti" 
scan

  if not isblank([numero do lancamento])
     then
          VRTOTTIT =VRTOTTIT +[Saldo do Documento     ]
          VRTOTREC =VRTOTREC +[Bx Valor do Recebimento]
          VRTOTJD  =VRTOTJD  +[Bx Valor Juros_Desconto]
        
          if not isblank([Numero do Lancamento])
             then VCITENS  =VCITENS  +1
          endif   
        
          ndias=[Data de Vencimento]-VSDGDTBASE
          If ndias=0
             Then vr1=[Saldo do Documento]        
             Else vr1=[Saldo do Documento]*ndias 
          EndIf
        
          vrsoma1=vrsoma1+vr1
          vrsoma2=vrsoma2+[Saldo do Documento]
  endif
endscan

M_DIAREF     = Round( ( vrsoma1 / vrsoma2 ), 3 )
M_DIAREFI    = Int( M_DIAREF )
M_DIAREFD    = M_DIAREF - M_DIAREFI
If M_DIAREFD > 0.51
   Then M_DIAREFI = M_DIAREFI + 1
EndIf

DTMEDIA=VSDGDTBASE+M_DIAREFI

echo Normal
echo off

EndProc ;SomaItens()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA    =""
MSG_CAMPO=""
                                 
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] = -60 Or 
          Evento["KeyCode"] = "F2" : If Campo="TG_TPCART" Or Campo="TG_TPPAGTO"                      
                                        Then ListaRegra_F2() 
                                     EndIf     
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_CONTA"         : Campo="TG_EMPRESA"
            Case Campo="TG_DESTINAT"      : Campo="TG_CONTA"
            Case Campo="TG_REPRESEN"      : Campo="TG_DESTINAT"
            Case Campo="TG_TPPAGTO"       : Campo="TG_REPRESEN"
            Case Campo="TG_COBRADOR"      : Campo="TG_TPPAGTO"
            Case Campo="TG_TPCART"        : Campo="TG_COBRADOR"
            Case Campo="TG_NCARREG"       : Campo="TG_TPCART" 
            Case Campo="TG_TPDATA"        : Campo="TG_NCARREG"
            Case Campo="TG_DTINI"         : Campo="TG_TPDATA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="YES" Or        
                 Campo="NO"               : Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"    : Campo="TG_CONTA"
                    Case Campo="TG_CONTA"      : Campo="TG_DESTINAT"
                    Case Campo="TG_DESTINAT"   : Campo="TG_REPRESEN"
                    Case Campo="TG_REPRESEN"   : Campo="TG_TPPAGTO"
                    Case Campo="TG_TPPAGTO"    : Campo="TG_COBRADOR"
                    Case Campo="TG_COBRADOR"   : Campo="TG_TPCART"
                    Case Campo="TG_TPCART"     : Campo="TG_NCARREG"
                    Case Campo="TG_NCARREG"    :
                         If Not IsBlank(VSDGNCARREG)
                            Then VSDGTPDATA =""
                                 VSDGDTINI  =BlankDate()
                                 VSDGDTFIM  =BlankDate()
                                 Campo="YES"
                            Else Campo="TG_TPDATA"
                         EndIf
                                    
                    Case Campo="TG_TPDATA"     :
                      VSDGTPDATA=ControlValue("TG_TPDATA")
                      If IsBlank(VSDGTPDATA)
                         Then VSDGTPDATA="1"
                      EndIf
                      If VSDGTPDATA="1"
                         Then VSDGNOMTPDATA="EMISSAO"
                         Else VSDGNOMTPDATA="VENCIMENTO"
                      EndIf
                      Campo="TG_DTINI"
                    Case Campo="TG_DTINI"      : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"      : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf     
Switch
  Case Campo="TG_TPDATA"  : MSG_CAMPO="1 = EMISSAO  2=VENCIMENTO"
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)

Return Temp
EndProc


;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc Selecao()
private titexiste, reg_bxautt, listavazia

Echo Normal
Echo Off

VSDGDTBAIXA=[Bxautc->Data da Baixa]
VSDGDTBASE =[Bxautc->Data Base    ]

;-- deleta answer linked e temporaria, bxautt ‚ uma tabela linked temporaria nÆo fica dados gravados
Moveto "bxautt"
While RecordStatus("New")=False
  del
EndWhile

Do_It!

VSDGEMPRESA   ="" VSDGNOMEMP     =""
VSDGCONTA     ="" VSDGNOMCONTA   =""
VSDGDESTINAT  ="" VSDGNOMDEST    =""
VSDGREPRESEN  ="" VSDGNOMREPR    =""
VSDGTPPAGTO   ="" VSDGNOMTPPAGTO =""
VSDGTPCART    ="" VSDGNOMCART    =""
VSDGCOBRADOR  ="" VSDGNOMCOBRADOR=""
VSDGNCARREG   ="" VSDGNOMNCARREG =""
VSDGTPDATA    ="" VSDGNOMTPDATA  =""
VSDGDTINI     =BlankDate()
VSDGDTFIM     =BlankDate()

ListaRegra_TGAtivado="[TG_TPCART],[TG_TPPAGTO]" 

While True
  ShowDialog "Filtrar T¡tutos" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140, -60, "F2"  
   @ 05,12   Height 15 Width 72

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA" To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMP" To VSDGNOMEMP
    
    Label  @ 02,00 "Conta"  For "TG_CONTA"
    Accept @ 03,01 Width 07 "A4"  Picture "#*#" Tag "TG_CONTA" To VSDGCONTA
    Accept @ 03,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMCONT" To VSDGNOMCONTA

    Label  @ 04,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 05,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 05,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMCLI" To VSDGNOMDEST

    Label  @ 06,00 "Representante"  For "TG_REPRESEN"
    Accept @ 07,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_REPRESEN" To VSDGREPRESEN
    Accept @ 07,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMREPR"  To VSDGNOMREPR

    Label  @ 08,00 "Forma de Pagamento"  For "TG_TPPAGTO"
    Accept @ 09,03 Width 05 "A2"  Picture "!*!" Tag "TG_TPPAGTO"    To VSDGTPPAGTO
    Accept @ 09,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMTPPG"    To VSDGNOMTPPAGTO

    Label  @ 00,35 "Cobrador"  For "TG_COBRADOR"
    Accept @ 01,36 Width 07 "A4"  Picture "#*#" Tag "TG_COBRADOR" To VSDGCOBRADOR
    Accept @ 01,44 Width 25 "A30" Picture "!*!" Tag "TG_NOMCOBRADOR"  To VSDGNOMCOBRADOR

    Label  @ 02,35 "Tipo de Carteira"  For "TG_TPCART"
    Accept @ 03,39 Width 04 "A1"  Picture "!" Tag "TG_TPCART"  To VSDGTPCART
    Accept @ 03,44 Width 25 "A20" Picture "!*!" Tag "TG_NOMCART" To VSDGNOMCART

    Label  @ 04,35 "Carregamento" For "TG_NCARREG"
    Accept @ 05,36 Width 09  "A6"  Picture "[&,#][#*#]" Tag "TG_NCARREG"    To VSDGNCARREG
    Accept @ 05,44 Width 25 "A20" Picture "!*!" Tag "TG_NOMNCARREG" To VSDGNOMNCARREG

    Label  @ 06,35 "Op‡äes de Datas" For "TG_TPDATA"
    Accept @ 07,39 Width 04 "A1"  Picture "1,2"  Tag "TG_TPDATA"     To VSDGTPDATA
    Accept @ 07,44 Width 25 "A18" Picture "!*!"  Tag "TG_NOMOTPDATA" To VSDGNOMTPDATA

    Label  @ 08,35 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 09,38 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 09,51 "at‚" For "TG_DTFIM"
    Accept @ 09,56 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Pushbutton @ 11,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 11,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGNCARREG) And VSDGDTFIM=BlankDate()
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf

  AGUARDE("Aguarde, selecionando t¡tulos")
  SELECIONA()
  
  Echo Normal
  Echo Off

  quitloop
EndWhile

ClearAll

Carrega_Tabelas()
Moveto "bxautc"
PickForm "F"
Moveto [Numero do Lote]
Locate NLANC
if RetVal
   Then islockrecord()
endif

Moveto "bxauti"
listavazia=recordstatus("New")

Moveto "bxautt"
if recordstatus("New")=false
   then
        scan
          copytoarray reg_bxautt
        
          titexiste=false
          moveto "bxauti"

          if not listavazia
             then 
                  scan
                    if [numero do lancamento]=reg_bxautt["numero do lancamento"]
                       then titexiste=true
                            quitloop
                    endif        
                  endscan
          endif
          
          if not titexiste
             then
                  end
                  down
        
                  ITEM=ITEM+1
                  copyfromarray reg_bxautt
                  [Sequencia]=ITEM
                  unlockrecord
          endif
        
          Moveto "bxautt"
        endscan
   
        Moveto "bxautt"
        While RecordStatus("New")=False
          del
        EndWhile
        
endif
Moveto "bxautI"

LimpAguarde()
EndProc ; 

;*******************************************************************************
;* Exclusao dos itens                                                          *
;*******************************************************************************
Proc EXCLUSAO()

Moveto "BXautC"
if [Situacao]="ATUALIZADO"
   then
        Mensagem("Este lote j  foi atualizado !")
        return
endif

Moveto "Bxautt"
While RecordStatus("New")=False
  del
EndWhile

Moveto "BxautI"
While RecordStatus("New")=False
  del
EndWhile

Moveto "BXautC"
If RecordStatus("Locked") Then UnLockRecord EndIf
Del
EndProc  ; (Exclusao)

;*******************************************************************************
;* Rotina para zerar variaveis somatorias do form                              *
;*******************************************************************************
Proc LimpaVariaveis()
private tipo

;-- Variaveis usadas para totalizar no form ------------------------------------

VRTOTREC =blanknum()
VRTOTTIT =blanknum()
VRTOTJD  =blanknum()
DTMEDIA  =blankdate() 
VCITENS  =blanknum()

;-------------------------------------------------------------------------------

EndProc  ; (LimpaVariaveis)

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()

if [Bx Tipo da Baixa ]="DEVOLUCAO"       and
   [Tipo do Pagamento]="TC"              and
   Search("-TC",[Numero do Documento])>0
   then mensagem("T¡tulo de Credito nÆo pode ser alterado !")
        unlockrecord
        return
endif   

if SubStr([Descricao do Lancamento],1,10)="DESCONTADA" 
   then mensagem("T¡tulo com carteira DESCONTADA, nÆo pode ser alterado !")
        unlockrecord
        return
endif   

Inicia_Registro()
Digita_Baixa()  
Moveto "Bxauti"
If RecordStatus("Locked") Then UnLockRecord EndIf
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro cabeca                             *
;*******************************************************************************
Proc Controla_EdicaoC()

CopytoArray REG_BXAUTC

DIGITAC=True
While DIGITAC
  SetaCorRegistro("Editar")
  DIGITAC()
  If CHAVEC=9
     Then QuitLoop
  EndIf
  If CHAVEC=1
     Then Controle_Dia()
          [Situacao]="EM ABERTO"
  EndIf
  SetaCorRegistro("Padrao")
  
  if Not checaparametros()
     then
          if CHAVEC=1

             then loop
             else quitloop

          endif   
  endif

  Moveto "Bxauti"
  While True
    CHAVEI()
    If CHAVEI=9 Or CHAVEI=99
       Then QuitLoop
    EndIf
  EndWhile
  Moveto "BxautC"
  If CHAVEI=99
     Then QuitLoop
  Endif
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="1"
   Then Moveto "BxautC"
        PickForm "1"
EndIf
EndProc

;*******************************************************************************
;* Carrega Parametros P_Duplic                                                 *
;*******************************************************************************
Proc getp_duplic(empresa)
private empresa, regp_duplic, msg

getrecord "\\sistemas\\ctarec\\P_Duplic" empresa to regp_duplic
if not retval                                                   
   Then
        msg=    "// Empresa ["+empresa+"] sem configura‡Æo de parƒmetros !// //"
        msg=msg+" - Utilit rios / Parƒmetros / Contas a Receber//"
        msg=msg+" - Lan‡amentos e Baixas de T¡tulos            // //"
        msg=msg+"Verificar com Suporte da Vise !"
        Mensagem(msg)

        release vars empresa, regp_duplic, msg
        Return False
   else     
        PARAM_RELAT                    =regp_duplic["Impressao_Recibo"        ]
        PARAM_UTILIZA_JUROS_DEVIDO     =regp_duplic["Utiliza_Juros_Devido"    ]
        PARAM_UTILIZA_COMISSAO         =regp_duplic["Utiliza_Comissao"        ]
        PARAM_UTILIZA_NUM_CARREGAMENTO =regp_duplic["Utiliza_Num_Carregamento"]
        PARAM_UTILIZA_FORMAS_RECEBER   =regp_duplic["Utiliza_Formas_Receber"  ]
        PARAM_HISTORICO_DEFAULT        =regp_duplic["Historico_Default"       ]
        PARAM_PLANO_CONTA_DCC          =regp_duplic["Plano_Conta_DCC"         ]
        PARAM_PLANO_CONTA_AVISTA       =regp_duplic["Plano_Conta_AVista"      ]
        PARAM_PLANO_CONTA_APRAZO       =regp_duplic["Plano_Conta_APrazo"      ]
        PARAM_PLANO_CONTA_DEBITO       =regp_duplic["Plano_Conta_Debito"      ]
        PARAM_PLANO_CONTA_CREDITO      =regp_duplic["Plano_Conta_Credito"     ]
        PARAM_COMISSAO_JUROS_DESCTO    =regp_duplic["Comissao_Juros_Descto"   ]
        PARAM_CTA_BAIXA_IGUAL_LANCTO   =regp_duplic["Cta_Baixa_Igual_Lancto"  ]
        PARAM_CONTA_CAIXA              =regp_duplic["COdigo_Conta_Caixa"      ]
endif

release vars empresa, regp_duplic, msg
Return True
EndProc ; (getp_duplic)

;*******************************************************************************
;* GetConta                                                                    *
;*******************************************************************************
Proc getconta(conta, msg)
private conta, msg

getrecord "\\sistemas\\ctacor\\conta" conta to regconta
if not retval                                                   
   Then
        if msg<>"SM"
           then if msg=""
                   then msg=    "Conta ["+conta+"] nÆo cadastrada !// //"
                        msg=msg+"Verificar o Cadastro !"
                endif
                Mensagem(msg)
        endif                

        release vars conta, regconta, msg
        Return False
endif

release vars conta, msg
Return True
EndProc ; (getconta)

;*******************************************************************************
;* GetDestinat                                                                 *
;*******************************************************************************
Proc getDestinat(pessoa, msg)
private pessoa, msg

getrecord "\\sistemas\\cadastro\\destinat" pessoa to regdestinat
if not retval                                                   
   Then
        if msg<>"SM"
           then if msg=""
                   then msg=    "Pessoa ["+pessoa+"] nÆo cadastrada !// //"
                        msg=msg+"Cliente/Fornecedor/Outros..// //"
                        msg=msg+"Verificar o Cadastro !"
                endif
                Mensagem(msg)
        endif                

        release vars pessoa, regdestinat, msg
        Return False
endif

release vars pessoa, msg
Return True
EndProc ; (getDestinat)

;*******************************************************************************
;* Checa parametros                                                            *
;*******************************************************************************
Proc checaparametros()

if not getconta([Bxautc->Codigo da Conta],"")
   then return false
   else if not getp_duplic(regconta["Codigo da Empresa"]) 
           then return false 
        endif   
endif

return True
EndProc ; (checaparametros)

;*******************************************************************************
;* Rotina grava erros                                                          *
;*******************************************************************************
Proc Grava_Erro(erro)
Private erro

If Not ENCONTRADO_INCONSISTENCIA
   Then FileWrite        ARQ_ERRO From  "\027x0\015"+
                                        "** Relatorio de erro - Baixa Automatica "+
                                        nlote+" **\n\n"
EndIf   
FileWrite Append ARQ_ERRO From  erro+"\n"

ENCONTRADO_INCONSISTENCIA=True
EndProc

;*******************************************************************************
;* Rotina para Carregar Tabelas                                                *
;*******************************************************************************
Proc Carrega_Tabelas()

View NoWindow "Bxautt"
View NoWindow "BxautI"
CoEdit NoWindow "BxautC"

Moveto "Bxauti" SetaCorRegistro("Padrao")
Moveto "BxautC" SetaCorRegistro("Padrao")

;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Do_It!
        return False
EndIf

Return True
EndProc   ; (Carrega_Tabelas)

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Cadastro\\Bib_Parm,"+
        "\\Sistemas\\CtaCor\\Bib_Rat"
        
SYS_VALOR()

If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CONTROLE_DIA) Then SYS_CONTROLE_DIA="" EndIf

; tabela bxautt tem que ter a estrutura igual a tabela bxauti
; tabela bxautt temporaria e com linked com bxautc so campo usando campo sequencia no form

MSG_CAMPO=""
LimpaVariaveis()

If Carrega_Tabelas()
   Then 
        If Verifica_NRegistros("Bxauti")
           Then COR_MENSAGEM="1"
                Mensagem(MSG_TABELA)
                Release Vars COR_MENSAGEM,MSG_TABELA
           Else Release Vars MSG_TABELA     
        EndIf    
   
        PickForm "1"
        OPCAO_FORM="1"
        While True
          CHAVEC()
          If CHAVEC=9
             Then QuitLoop
          EndIf
          If CHAVEC=6
             Then If OPCAO_FORM="F"
                     Then PickForm "F"
                     Else PickForm "1"
                  EndIf
                  Loop
          EndIf
          Controla_EdicaoC()
        EndWhile
EndIf
Do_It!
ClearAll
Release Vars All
Release Procs All
