;** RT_0000 ********************************************************************
;*  Rela‡ao PadrÆo Acerto Financeiro                                           *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 08/01/2016 por Anivel Augusto Rodrigues
;Ultima Alteracao: 01/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Cheques
;Ultima Alteracao: 12/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes e inclusao Data Base                               
;Ultima Alteracao: 12/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NDias/DataBase/TxJUros                             
;Ultima Alteracao: 09/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes contador lin                             
;Ultima Alteracao: 12/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nome grupotitulos()                       
;Ultima Alteracao: 09/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes cheques emitidos + Cobrador                                          
;Ultima Alteracao: 11/07/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: inclusao de observacoes por titulo                         
;Ultima Alteracao: 26/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Taxa de Juros por Aba                              
;Ultima Alteracao: 29/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao da Conta                              
;Ultima Alteracao: 06/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao TipoAplicacaoDeJuros                  
;Ultima Alteracao: 30/05/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo totalizar no acerto baixas de CANCELADO, DEVOLUCAO contas a pagar/receber
;Ultima Alteracao: 09/04/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes obs
;Ultima Alteracao: 03/09/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ imprimir casa de milhÆo *****  

;*******************************************************************************
;* Rotina para impressao                                                    ****
;*******************************************************************************
Proc Imprimir()

tpag=64
pag =0
lin =0

impcabecalhot =false
impcabecalhoc =false
impcabecalhoce=false

moveto "bxautir"
cabecalho()

moveto "bxautir"
Moveto [Numero do Lote]
Locate nlote
if RetVal
   then 
        cabecalho2()
        zeragrupo()
        grupotitulos()
        while [Numero do Lote]=[Bxautc->numero do Lote] 

          titulos()

          Moveto "Bxautir"
          skip
          if eot() then quitloop endif
        endwhile
        totalizagrupo()
endif      

moveto "bxautip"
Moveto [Numero do Lote]
Locate nlote
if RetVal
   then 
        cabecalho2()
        zeragrupo()
        grupotitulos()
        while [Numero do Lote]=[Bxautc->numero do Lote] 

          titulos()

          Moveto "Bxautip"
          skip
          if eot() then quitloop endif
       endwhile
       totalizagrupo()
endif

moveto "bxautie"
Moveto [Numero do Lote]
Locate nlote
if RetVal
   then 
        cabecalho2()
        zeragrupo()
        grupotitulos()
        while [Numero do Lote]=[Bxautc->numero do Lote] 

          Cheques()

          Moveto "Bxautie"
          skip
          if eot() then quitloop endif
       endwhile
       totalizagrupo()
endif

moveto "bxautis"
Moveto [Numero do Lote]
Locate nlote
if RetVal
   then 
        cabecalho2()
        zeragrupo()
        grupotitulos()
        while [Numero do Lote]=[Bxautc->numero do Lote] 

          Cheques()

          Moveto "Bxautis"
          skip
          if eot() then quitloop endif
       endwhile
       totalizagrupo()
endif

moveto "bxautice"
Moveto [Numero do Lote]
Locate nlote
if RetVal
   then 
        cabecalho2()
        zeragrupo()
        grupotitulos()
        while [Numero do Lote]=[Bxautc->numero do Lote] 

          ChequesEmitidos()

          Moveto "Bxautice"
          skip
          if eot() then quitloop endif
       endwhile
       totalizagrupo()
endif

Rodape()      

EndProc ;IMPRP()


;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc grupotitulos()
private tit

switch
  case table()="Bxautir"  : tit="Titulos a Receber"
  case table()="Bxautip"  : tit="Titulos a Pagar"
  case table()="Bxautie"  : tit="Cheques Recebidos"
  case table()="Bxautis"  : tit="Cheques Utilizados"
  case table()="Bxautice" : tit="Cheques Emitidos"
endswitch
imprimelinha(CI_INEG+tit+CI_FNEG)

endproc

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc totalizagrupo()
private s, dtm, tit, ntit, ndias

tit  =""
dtm  =blankdate()
ntit =blanknum()
ndias=blanknum()

switch
  case table()="Bxautir" :
    tit  = " Titulos "
    dtm  =[Bxautc->Data_Media_Receber]
    ntit =VCITENS_R
    ndias=[Bxautc->NDias_Receber     ]
  
  case table()="Bxautip" : 
    tit  = " Titulos "
    dtm  =[Bxautc->Data_Media_Pagar  ]
    ntit =VCITENS_P
    ndias=[Bxautc->NDias_Pagar       ]
    
  case table()="Bxautie" : 
    tit  = " Cheques "
    dtm  =[Bxautc->Data_Media_CHRecebido  ]
    ntit =VCITENS_ECH
    ndias=[Bxautc->NDias_CHRecebido   ]
    tvrresid=blankNum()
    
  case table()="Bxautis" : 
    tit  = " Cheques "
    dtm  =[Bxautc->Data_Media_CHUtilizado]
    ntit =VCITENS_SCH
    ndias=[Bxautc->NDias_CHUtilizado     ]
    tvrresid=blankNum()
    
  case table()="Bxautice" : 
    tit  = " Cheques Emitidos "
    dtm  =blankdate()
    ntit =VCITENS_CE 
    ndias=blanknum()
    tvrsaldo=blanknum()
    tvroperac=blanknum()
    tvrjuros=VRTOT_CE
    tvrdescto=blanknum()
    tvrresid=blankNum()
    
endswitch

s=CI_INEG+Format("W19,AL"   ,"Total"+Format("W5,EIC",ntit)+tit)+
  "DTM "+
  Format("W10,AR",Format("D13"      ,dtm      ))+
  Format("W7,EIC",ndias )+"    "+
  Format("W13.2,EIC",tvrsaldo )+
  Format("W13.2,EIC",tvroperac)+
  Format("W19.2,EIC",tvrjuros )+
  Format("W12.2,EIC",tvrdescto)+
  spaces(23)+
  Format("W12.2,EIC",tvrresid )+CI_FNEG

imprimelinha(s)
imprimelinha("")

endproc

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc zeragrupo()

tvrsaldo =0
tvroperac=0
tvrjuros =0
tvrdescto=0
tvrresid =0

endproc

;*******************************************************************************
;* Cabe‡alho                                                                   *
;*******************************************************************************
Proc CABECALHO()
private s

pag=pag+1
lin=0

imprimelinha("")
imprimelinha(CI_15CPP+CI_6LPP+Format("W50,AL",NOMEMPRESA)+Format("W50,AC","RELACAO P/ ACERTO FINANCEIRO")+
             Format("W036,AR","Emissao: "+Format("D13",Today())+"-"+SubStr(StrVal(Time()),1,5)))

imprimelinha(Fill("=",136))

imprimelinha("")

imprimelinha("No Lote...........: "+CI_IEXP+[Bxautc->Numero do Lote]+CI_FEXP+spaces(05)+
             "Data Acerto: "+Format("D13",[Bxautc->Data da Baixa])+spaces(05)+
             "Data Base: "+Format("D13",[Bxautc->Data Base])+spaces(13)+
             "Juros%: "+MSGJUROS)

imprimelinha("Conta.............: "+Format("W78,AL",[Bxautc->Codigo da Conta]+" "+[Bxautc->Descricao da Conta]) +"ApJuros: "+[Bxautc->TipoAplicacaoDeJuros])
imprimelinha("Pessoa............: "+Format("W77,AL",[Bxautc->Codigo]+" "+[Bxautc->Razao Social])+"Situa‡Æo: "+[Bxautc->Situacao])
imprimelinha("Endereco..........: "+regdestinat["Endereco"]+" \\"+regdestinat["Bairro"]+" \\"+
                                    regdestinat["Cidade"]+"  \\"+regdestinat["telefone"])
imprimelinha("Cobrador..........: "+Format("W25,AL",[Bxautc->Codigo do Cobrador]+" "+[Bxautc->Descricao do Cobrador]))
imprimelinha("")

EndProc ;CABECALHO()   

;*******************************************************************************
;* Cabe‡alho2                                                                   *
;*******************************************************************************
Proc CABECALHO2()
private s

switch
  case table()="Bxautir" or table()="Bxautip" : 
  
    if impcabecalhot
       then return
    endif   
  
    imprimelinha("Lancto Documento         Vencto    NDias TPG        Saldo   VrOperacao %Juros       Juros    Desconto Tipo Baixa Forma Baixa     Residuo")
    imprimelinha("------ --------------- ---------- ------ --- ------------ ------------ ------ ----------- ----------- ---------- ----------- -----------")
    ;             123456 XXXX 1234567890 99/99/9999       XX123456789012123456789012123456789012123456789012 1234567890 12345678901123456789012
    
    impcabecalhot=true
    
  case table()="Bxautie" or table()="Bxautis" :
  
    if impcabecalhoc
       then return
    endif   
                                                                  
    imprimelinha("Lancto Banco/Cheque      Vencto   NDias             Valor   Atualizado %Juros       Juros    Desconto Titular                           ")
    imprimelinha("------ --------------- ---------- ---------  ------------ ------------ ------ ----------- ----------- ----------------------------------")
    ;             123456 XXXX 1234567890 99/99/9999 XX123456789012123456789012123456789012123456789012       1234567890123456789012345678901234
    
    impcabecalhoc=true
    
  case table()="Bxautice":
  
    if impcabecalhoce
       then return
    endif   
   
    imprimelinha("Conta                               Cheque             Pre-Datado                 Valor")
    imprimelinha("----------------------------------- ------------------ ------------ -------------------")
    ;             1234 123456789012345678901234567890 12345678901 123456 X 99/99/9999 123456789012
    
    impcabecalhoce=true
    
endswitch

EndProc ;CABECALHO2()   


;*******************************************************************************
;* Impressao dos Titulos                                                       *
;*******************************************************************************
Proc Titulos()
private s

s=Format("W07,AL"   ,[Numero do Lancamento])+
  Format("W05,AL"   ,[Tipo do Documento   ])+
  Format("W11,AL"   ,[Numero do Documento ])+
  Format("D13"      ,[Data de Vencimento  ])+
  Format("W7,EIC"   ,[Bx NDias            ])+  
  Format("W04,AL"   ," "+[Tipo do Pagamento])+
  Format("W13.2,EIC",[Saldo do Documento  ])+
  Format("W13.2,EIC",[Bx Valor do Recebimento])+
  Format("W07.2,EIC",[Taxa de Juros       ])+
  Format("W12.2,EIC",[Bx Valor do Juros   ])+
  Format("W12.2,EIC",[Bx Valor do Desconto])+
  Format("W11,AL"   ," "+[BX Tipo da Baixa   ])+
  Format("W12,AL"   ," "+[BX Forma da Baixa  ])+
  Format("W12.2,EIC",[Bx Saldo Residual   ])

imprimelinha(s)

if not isblank([Observacoes])
   then imprimelinha(spaces(07)+substr([Observacoes],1,129))
endif   

tvrsaldo =tvrsaldo +[Saldo do Documento     ]
if [Bx Tipo da Baixa]="NORMAL"
   then tvroperac=tvroperac+[Bx Valor do Recebimento]
endif   
tvrjuros =tvrjuros +[Bx Valor do Juros      ]
tvrdescto=tvrdescto+[Bx Valor do Desconto   ]
tvrresid =tvrresid +[Bx Saldo Residual      ]

EndProc ;Titulos()

;*******************************************************************************
;* Impressao dos Cheques                                                       *
;*******************************************************************************
Proc cheques()
private s

s=Format("W07,AL"   ,[Numero do Lancamento])+
  Format("W05,AL"   ,[Codigo_Banco        ])+
  Format("W11,AL"   ,[Numero_Cheque       ])+
  Format("D13"      ,[Data Vencimento     ])+
  Format("W7,EIC"   ,[Bx NDias            ])+"    "+ 
  Format("W13.2,EIC",[Valor                  ])+
  Format("W13.2,EIC",[Bx Valor do Recebimento])+
  Format("W07.2,EIC",[Taxa de Juros       ])+
  Format("W12.2,EIC",[Bx Valor do Juros   ])+
  Format("W12.2,EIC",[Bx Valor do Desconto])+
  Format("W34,AL"   ," "+[CPF]+" "+[Titular_Cheque])

imprimelinha(s)

tvrsaldo =tvrsaldo +[Valor                  ]
tvroperac=tvroperac+[Bx Valor do Recebimento]
tvrjuros =tvrjuros +[Bx Valor do Juros      ]
tvrdescto=tvrdescto+[Bx Valor do Desconto   ]
tvrresid =tvrresid +0


EndProc ;Cheques()

;*******************************************************************************
;* Impressao dos Cheques Emitidos                                              *
;*******************************************************************************
Proc chequesEmitidos()
private s

s=Format("W05,AL"   ,[Codigo da Conta])+
  Format("W31,AL"   ,[Descricao da Conta])+
  Format("W12,AL"   ,[Numero do Cheque    ])+
  Format("W07,AL"   ,[Serie do Cheque     ])+
  Format("W12,AR",Format("D13"      ,[Data Cheque Pre-Datado]))+
  Format("W20.2,EIC",[Valor                  ])

imprimelinha(s)

tvrsaldo =tvrsaldo +[Valor                  ]

EndProc ;chequesEmitidos()

;*******************************************************************************
;* Impressao dos Rodap‚                                                        *
;*******************************************************************************
Proc RODAPE()
private s,i, sd1, sd2, stg

imprimelinha(Fill("-",136))

imprimeobs()

sd1="Diferenca "
if [Bxautc->Valor_Diferenca1]>0 then sd1=sd1+"A Receber" endif
if [Bxautc->Valor_Diferenca1]<0 then sd1=sd1+"A Pagar"   endif
sd1=sd1+Fill(".",24)
sd1=Format("W24,AL",sd1)

sd2="Diferenca "
if [Bxautc->Valor_Diferenca2]>0 then sd2=sd2+"A Receber" endif
if [Bxautc->Valor_Diferenca2]<0 then sd2=sd2+"A Pagar"   endif
sd2=sd2+Fill(".",24)                                  
sd2=Format("W24,AL",sd2)

stg="  ( )Titulo Gerado TC/PROM"
switch
  case [Bxautc->Valor_TCGerado           ]>0 and [Bxautc->Tipo_TCGerado]="R" : stg="  (-)Promissoria Gerada" 
  case [Bxautc->Valor_TCGerado           ]>0 and [Bxautc->Tipo_TCGerado]="P" : stg="  (+)Titulo Credito Gerado"
endswitch
stg=stg+Fill(".",29)                                  
stg=Format("W29,AL",stg)

imprimelinha("")

s="  (+)Titulos a Receber......."+Format("W13.2,EIC",[Bxautc->Total_Receber   ])+
  "  (-)Titulos a Pagar........."+Format("W13.2,EIC",[Bxautc->Total_Pagar     ])+
  "  (=)"+sd1                    +Format("W13.2,EIC",[Bxautc->Valor_Diferenca1]) 

imprimelinha(s)
imprimelinha("")

s="  (+)Cheques Recebidos......."+Format("W13.2,EIC",[Bxautc->Total_Cheque_Recebido   ])+
  "  (-)Cheques Utilizados......"+Format("W13.2,EIC",[Bxautc->Total_Cheque_Utilizado  ])+
  "  (-)Cheques Emitidos........"+Format("W13.2,EIC",[Bxautc->Total_Cheque_Emitido    ])
  
imprimelinha(s)

s="  (+)Outros Valores Recebidos"+Format("W13.2,EIC",[Bxautc->OutrosValores_Recebido   ])+
  "  (-)Outros Valores Pagos...."+Format("W13.2,EIC",[Bxautc->OutrosValores_Pago       ])+
  "  (=)"+sd2                    +Format("W13.2,EIC",[Bxautc->Valor_Diferenca2]) 

imprimelinha(s)
imprimelinha("")

s="  (-)Valor do Troco Realizado"+Format("W13.2,EIC",[Bxautc->Valor_Troco              ])+
  stg                            +Format("W13.2,EIC",[Bxautc->Valor_TCGerado           ])+
  "  (=)Saldo do Acerto........."+Format("W13.2,EIC",[Bxautc->SaldoAcerto     ])  

imprimelinha(s)                                                               
imprimelinha("")

imprimelinha(Fill("=",136)+CI_10CPP+CI_6LPP)

EndProc ;RODAPE()


;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc imprimelinha(s)

If (lin+1)>=tpag
   Then 
        Print File ARQIMP "\f"+"\n"

        impcabecalhot=false
        impcabecalhoc=false
        
        cabecalho()
        cabecalho2()
        
        grupotitulos()
EndIf

Print File ARQIMP s+"\n"
lin=lin+1

endproc

;*******************************************************************************
;* Rotina de Impressao de Observa‡äes                                          *
;*******************************************************************************
proc imprimeobs()
private TamObs, nlobs, posobs, i, s

TamObs=136

s="Obs: "+Tira_QuebraLinha([Bxautc->Observacoes])

nlobs=Len(s)/tamobs
If nlobs-Int(nlobs)>0
   Then nlobs=Int(nlobs)+1
   Else nlobs=Int(nlobs)
EndIf

posobs=1
For i from 1 to nlobs
  imprimelinha(SubStr(s,posobs,tamobs))                                                               
  posobs=posobs+tamobs
EndFor

endproc
 
;*******************************************************************************
;* Rotina Principal                                                            *
;*****************+*************************************************************
If Not IsAssigned(NOMEMPRESA)           Then NOMEMPRESA=""           EndIf
If Not IsAssigned(Sys_Reset_Impressora) Then Sys_Reset_Impressora="" EndIf


ARQIMP = PrivDir()+"RT_0000.TXT"
Switch
  Case OK="A": ARQIMP = DIREPORT+ARQUIVO+".TXT"
EndSwitch
Deleta_Arquivo(ARQIMP)

View "BxautC"
View "Bxautir"
View "Bxautip"
View "Bxautie"
View "Bxautis"
View "Bxautice"

Moveto "bxautc"
Moveto [Numero do Lote]
Locate nlote
if RetVal
   Then 
        AGUARDE("Imprimindo Rela‡Æo do Lote -> "+[Bxautc->Numero do Lote])
        
        Imprimir()

        ImpriArq(ARQIMP)
        
        LIMPAGUARDE()
        
        Mensagem("Impress„o Concluida !")        
endif
ClearAll
Release vars tpag, pag, lin,
             tvrsaldo, tvroperac, tvrjuros, tvrdescto, tvrresid,
             impcabecalho2

Release Procs imprimir, grupotitulos, totalizagrupo, zeragrupo, rodape, Titulos, cabecalho, cabecalho2, 
              imprimelinha,
              chequesEmitidos,imprimeobs
