;** ExpBrad ********************************************************************
;*  Exportacao de Titulos Cobranca BRADESCO                                    *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 24/07/2008 por Anivel Augusto Rodrigues
;Ultima Alteracao: 29/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 07/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mensagens
;Ultima Alteracao: 02/09/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Documento no Banco
;Ultima Alteracao: 27/05/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Quem Imprime Bloqueto
;Ultima Alteracao: 03/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Usar endereco de cobranca
;Ultima Alteracao: 08/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Nova Pasta, Novos Arquivos
;Ultima Alteracao: 01/12/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Ćo de "ExecVise -> Vexe"
;Ultima Alteracao: 24/03/2021 por Bruno Carvalho
;Motivo Alteracao: Alterado mensagem de confirma‡Ćo ao gerar o arquivo p/ MensagemMP()

;******************************************************************************
; CONVERTE DATA DE GRAVACAO PARA STRING                                       *
;******************************************************************************
PROC DATA2STR_S(DATA)
DTGRAV=AlinhM(LTrim(Format("D13",DATA)),10)
DTGRAV=SUBSTR(DTGRAV,1,2)+SUBSTR(DTGRAV,4,2)+SUBSTR(DTGRAV,7,4)
RETURN DTGRAV
ENDPROC                                       

;********************************************************************************
;* CONVERTE VALOR PARA STRING                                                  *
;********************************************************************************
PROC VALOR2STR_S(VALOR,TAM)
VRTIT=STRVAL(VALOR)
PART1=LEN(VRTIT)-3
PART2=LEN(VRTIT)-1
VRTIT=SUBSTR(VRTIT,1,PART1)+SUBSTR(VRTIT,PART2,2)
VRTIT=FILL("0",TAM-LEN(VRTIT))+VRTIT
RETURN VRTIT
ENDPROC

;********************************************************************************
;* TIRA FORMAT do CGC/CPF                                                      *
;********************************************************************************
PROC PEGA_CGCCPF(VALOR)

CGCCPF=""
TIPOP =""
If SubStr(VALOR,03,1)="." and
   SubStr(VALOR,07,1)="." and
   SubStr(VALOR,11,1)="/" and
   SubStr(VALOR,16,1)="-"
   Then TIPOP  ="J"
        CGCCPF=SubStr(VALOR,01,2)+
               SubStr(VALOR,04,3)+
               SubStr(VALOR,08,3)+
               SubStr(VALOR,12,4)+
               SubStr(VALOR,17,2)
   Else If SubStr(VALOR,04,1)="." and
           SubStr(VALOR,08,1)="." and
           SubStr(VALOR,12,1)="-"
           Then TIPOP  ="F"
                CGCCPF=SubStr(VALOR,01,3)+
                       SubStr(VALOR,05,3)+
                       SubStr(VALOR,09,3)+
                       SubStr(VALOR,13,2)
        EndIf
EndIf
EndProc

;********************************************************************************
;* CALCULA O DIGITO VERIFICADOR DA BOLETA                                      *
;********************************************************************************
Proc CALCULAR_DIGITO(Valor)
     v1=NumVal(SubStr(Valor,1,1))
     v2=NumVal(SubStr(Valor,2,1))
     v3=NumVal(SubStr(Valor,3,1))
     v4=NumVal(SubStr(Valor,4,1))
     v5=NumVal(SubStr(Valor,5,1))
     v6=NumVal(SubStr(Valor,6,1))
     v7=NumVal(SubStr(Valor,7,1))
     v8=NumVal(SubStr(Valor,8,1))
     v9=NumVal(SubStr(Valor,9,1))
     v10=NumVal(SubStr(Valor,10,1))
     v1=v1*3
     v2=v2*2
     v3=v3*9
     v4=v4*8
     v5=v5*7
     v6=v6*6
     v7=v7*5
     v8=v8*4
     v9=v9*3
     v10=v10*2
     V=v1+v2+v3+v4+v5+v6+v7+v8+v9+v10
     Dgt=11-(MOD(V,11))
     If Dgt>9
        Then Dgt=0
     EndIf

     Return Dgt
EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
Aguardes("Aguarde, Gerando exporta‡„o")

DRIVE=SubStr(Directory(),1,2)

PASTA="\\SISTEMAS\\EXPORTA\\BANCOS"
If DirExists(PASTA)=0
   Then Cria_Pasta(PASTA)
        Sleep 2000
EndIf
PASTA="\\SISTEMAS\\EXPORTA\\BANCOS\\BRADESCO"
If DirExists(PASTA)=0
   Then Cria_Pasta(PASTA)
        Sleep 2000
EndIf

ARQ =PASTA+"\\T.TXT"
ARQS=PASTA+"\\S.TXT"
Deleta_Arquivo(ARQ)
Deleta_Arquivo(ARQS)

ExpOk=True
While True

  {Ask} {Duplic} Check
  Moveto [Numero do Lancamento] Example "nlanc"
  {Ask} {AltTitI} 
  Moveto [Numero do Lote      ] TypeIn NLote
  Moveto [Numero do Lancamento] Example "nlanc"
  Do_It!
  ClearAll

  If IsEmpty("Answer")
     Then Mensagem("N„o existem registros a processar !")
          ExpOk=False
          QuitLoop
  EndIf

  View "\\Sistemas\\Cadastro\\Destinat"
  View "\\Sistemas\\Cadastro\\Empresas"
  View "\\Sistemas\\Ctacor\\Conta"
  View "ExpBco"
  View "AltTitC"
  View "Answer"

  Moveto "AltTitC"
  Moveto [Numero do Lote]
  Locate NLote
  If Not RetVal
     Then Mensagem("Lote "+NLOTE+" n„o Encontrado, Erro !")
          ExpOk=False
          QuitLoop
  EndIf

  Moveto "\\Sistemas\\Ctacor\\Conta"
  Moveto [Codigo da Conta]
  Locate [Answer->Codigo da Conta]
  If Not RetVal
     Then Mensagem("Conta "+[Answer->Codigo da Conta]+" n„o Encontrada, Erro !")
          ExpOk=False
          QuitLoop
  EndIf

  Moveto "\\Sistemas\\Cadastro\\Empresas"
  Moveto [Codigo da Empresa]
  Locate [Answer->Codigo da Empresa]
  If Not RetVal
     Then Mensagem("Empresa "+[Answer->Codigo da Empresa]+" n„o Encontrada, Erro !")
          ExpOk=False
          QuitLoop
  EndIf

  Moveto "ExpBco"
  Moveto [Codigo da Conta]
  Locate [Answer->Codigo da Conta],[AltTitC->Tipo do Lancamento]
  If Not RetVal
     Then Mensagem("Conta/Parametros "+[Answer->Codigo da Conta]+" n„o Encontrado, Erro !")
          ExpOk=False
          QuitLoop
  EndIf

  ;*** Titulos ***
  Open Printer
  NR=NRecords("Answer")
  Moveto "Answer"
  Scan
    Barra(NR, RecNo())
    Aguarde("Aguarde, Exportando Titulos "+BARRA_STRING)

    Moveto "\\Sistemas\\Cadastro\\Destinat"
    Moveto [Codigo]
    Locate [Answer->Codigo do Destinatario]
    If Not RetVal
       Then Mensagem("Cliente "+[Answer->Codigo do Destinatario]+" n„o Encontrado, Erro !")
            Moveto "Answer"
            Loop
    EndIf

    Moveto "Answer"
    PEGA_CGCCPF([\Sistemas\Cadastro\Destinat->CGC])
    Print File ARQ Format("W15,AL",CGCCPF)
    PEGA_CGCCPF([\Sistemas\Cadastro\Empresas->CGC Empresa])
    Switch
      Case SYS_CODIGO_CLIENTE="0126" And CGCCPF="04492460000135":
           CGCCPF="044924600001-35"
    EndSwitch
    Print File ARQ Format("W15,AL",CGCCPF)
;;;;Print File ARQ Completa([Codigo da Empresa]+Completa([Codigo do Documento],3," ")+[Numero do Documento],015," ")
    Print File ARQ SubStr([Tipo do Documento],1,2)
    Print File ARQ Completa(RTrim(SubStr([Numero do Documento],1,8)),08," ")
    If Not IsBlank([Documento no Banco])
       Then Print File ARQ SubStr([Documento no Banco],4,12)
       Else Print File ARQ "000000000000"
    EndIf
    Print File ARQ DATA2STR_S([Data de Vencimento])
    Print File ARQ DATA2STR_S([Data de Emissao])
    Print File ARQ "00000000"
    Print File ARQ VALOR2STR_S([Valor do Documento],13)
    Print File ARQ VALOR2STR_S(0,13)
    Print File ARQ VALOR2STR_S(0,10)
    Print File ARQ VALOR2STR_S(0,13)

    TXJUROS=[Taxa de Juros]
    If Not IsBlank([Taxa de Juros])
       Then VRBASE =([Valor do Documento]*[Taxa de Juros])/100
       Else VRBASE =[Valor de Juros]
    EndIf

    Switch
       Case [Tipo Taxa de Juros]="M": VJUROSDIA=Round(VRBASE/30,2)
                                      TJUROSDIA=TXJUROS/30
       Case [Tipo Taxa de Juros]="A": VJUROSDIA=Round(VRBASE/365,2)
                                      TJUROSDIA=TXJUROS/365
       Case [Tipo Taxa de Juros]="D": VJUROSDIA=Round(VRBASE,2)
                                      TJUROSDIA=TXJUROS
       OtherWise                    : VJUROSDIA= 0
    EndSwitch

    If VJUROSDIA>0
       Then MSGJUROS="JUROS DE "+LTrim(RTrim(StrVal(TJUROSDIA)))+"% AO DIA"
       Else MSGJUROS=""
    EndIf

    Print File ARQ VALOR2STR_S(VJUROSDIA,13)
    Print File ARQ VALOR2STR_S(0,13)
    Print File ARQ AlinhM([ExpBco->Sigla da Especie],2)
    If Not IsBlank([Documento no Banco])
       Then Print File ARQ "E"
       Else
            If [ExpBco->Impressao pelo Banco]="3"
               Then Print File ARQ "B"
               Else Print File ARQ "E"
            EndIf

    EndIf
    Print File ARQ Completa([ExpBco->Aceite],1,"S")
    Print File ARQ AlinhM(StrVal([ExpBco->NDias Protestar]),2)
    Print File ARQ Completa(MSGJUROS,080," ")
    Print File ARQ Completa([ExpBco->Mensagem ],040," ")
    Print File ARQ Completa([ExpBco->Mensagem2],040," ")
    Print File ARQ Completa([ExpBco->Mensagem3],040," ")
    Print File ARQ Completa([ExpBco->Mensagem4],040," ")
    Print File ARQ Completa([ExpBco->Mensagem5],040," ")
    Print File ARQ Completa([ExpBco->Mensagem6],040," ")
    FileWrite Append ARQ From "\n"
  EndScan


  ;*** Sacados ***
  {Ask} {Answer}
  Moveto [Codigo do Destinatario] Check
  Do_It!
  ClearAll

  Open Printer
  NR=NRecords("Answer")
  View "\\Sistemas\\Cadastro\\Destinat"
  View "\\Sistemas\\Cadastro\\End_Cob"
  View "Answer"
  Scan
    Barra(NR, RecNo())
    Aguarde("Aguarde, Exportando Sacados "+BARRA_STRING)

    Moveto "\\Sistemas\\Cadastro\\Destinat"
    Moveto [Codigo]
    Locate [Answer->Codigo do Destinatario]
    If Not RetVal
       Then Mensagem("Cliente "+[Answer->Codigo do Destinatario]+" n„o Encontrado, Erro !")
            Moveto "Answer"
            Loop
    EndIf
    PEGA_CGCCPF([\Sistemas\Cadastro\Destinat->CGC])

    END_COB=[Endereco]
    BAI_COB=[Bairro  ]
    CEP_COB=Tira_CharNum([CEP])
    CID_COB=[Cidade  ]
     UF_COB=[UF      ]
    

    Moveto "\\Sistemas\\Cadastro\\End_Cob"
    Moveto [Codigo]
    Locate [Answer->Codigo do Destinatario]
    If RetVal
       Then If Not IsBlank([Endereco de Cobranca]) And
               [Endereco de Cobranca]<>"O MESMO"
               Then END_COB=[Endereco de Cobranca]
                    BAI_COB=[Bairro de Cobranca  ]
                    CEP_COB=Tira_CharNum([CEP de Cobranca])
                    CID_COB=[Cidade de Cobranca  ]
                     UF_COB=[UF de Cobranca      ]
            EndIf
    EndIf   

    Moveto "Answer"
    Print File ARQS Completa(CGCCPF,15," ")
    Print File ARQS Completa([\Sistemas\Cadastro\Destinat->Razao Social],040," ")
    If [\Sistemas\Cadastro\Destinat->Tipo Pessoa]="JURIDICA"
       Then Print File ARQS "02"
       Else Print File ARQS "01"
    EndIf
    Print File ARQS AlinhM(CGCCPF,15)

    Print File ARQS Completa(END_COB,040," ")
    Print File ARQS Completa(CID_COB,015," ")
    Print File ARQS Completa(BAI_COB,015," ")
    Print File ARQS Completa( UF_COB,002," ")
    Print File ARQS AlinhM(CEP_COB,8)

    Print File ARQS Completa("",006," ")
    Print File ARQS Completa("",008," ")
    Print File ARQS Completa("",005," ")
    Print File ARQS Completa("",001,"0")
    Print File ARQS Completa("",001,"0")
    FileWrite Append ARQS From "\n"
  EndScan

  QuitLoop
EndWhile
If Not ExpOk
   Then Mensagem("Exporta‡„o n„o executada !")
        Deleta_Arquivo(ARQ)
        Deleta_Arquivo(ARQS)
   Else 
        DIA =AlinhM(StrVal(Day(Today())),2)+AlinhM(StrVal(Month(Today())),2)+SubStr(StrVal(Year(Today())),3,2)
        HORA=Substr(Time(),1,2)+Substr(Time(),4,2)
        ARQ2=PASTA+"\\TIT."+DIA+"."+HORA+".TXT"
        Deleta_Arquivo(ARQ2)
     
        cmd="REN "+ARQ+" \""+ARQ2+"\""
        ExecVise(cmd)
        Deleta_Arquivo(ARQ)
            
        ARQ3=PASTA+"\\SAC."+DIA+"."+HORA+".TXT"
        Deleta_Arquivo(ARQ3)
     
        cmd="REN "+ARQS+" \""+ARQ3+"\""
        ExecVise(cmd)
        Deleta_Arquivo(ARQS)
            
        MSG = "Fim do processo! // //Arquivos gerados em: // //"+DRIVE+ARQ2+"//"+DRIVE+ARQ3
        MensagemMP(MSG,DRIVE+ARQ2)

EndIf

LimpAguardes()
LimpAguarde()

ClearAll
Release Vars NREG, TIPOP, CGCCPF, ExpOk
Release Procs DATA2STR_S, VALOR2STR_S, PEGA_CGCCPF
