;** ExpCEF  ********************************************************************
;*  Exportacao de Titulos Cobranca CEF                                         *
;*******************************************************************************
;Autor: Visao/Vise
;Desenvolvido    : 20/01/2010 por Cleber Alves
;Ultima Alteracao: 21/01/2010 por Cleber Alves
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 25/01/2010 por Cleber Alves
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 03/02/2010 por Cleber Alves
;Motivo Alteracao: Ajustes campos numericos
;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: 10/09/2014 por Kamila Gomes
;Motivo Alteracao: Atualiza‡Ćo de layout 
;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))
     v11=NumVal(SubStr(Valor,11,1))
     v12=NumVal(SubStr(Valor,12,1))
     v13=NumVal(SubStr(Valor,13,1))
     v14=NumVal(SubStr(Valor,14,1))
     v1=v1*7
     v2=v2*6
     v3=v3*5
     v4=v4*4
     v5=v5*3
     v6=v6*2
     v7=v7*9
     v8=v8*8
     v9=v9*7
     v10=v10*6
     v11=v11*5
     v12=v12*4
     v13=v13*3
     v14=v14*2
     V=v1+v2+v3+v4+v5+v6+v7+v8+v9+v10+v11+v12+v13+v14
     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\\CEF"
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")
  cart=0
  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
    PEGA_CGCCPF([\Sistemas\Cadastro\Destinat->CGC])

    Moveto "Answer"
   ;Print File ARQ Format("W15,AR",CGCCPF)
   ;Print File ARQ Completa([Codigo da Empresa]+Completa([Codigo do Documento],3," ")+[Numero do Documento],015," ")
    Print File ARQ Completa([Codigo do Documento],3," ")+Completa(RTrim(SubStr([Numero do Documento],1,8)),8," ")+Completa([Codigo da Empresa],4," ")
   
    Print File ARQ Completa(Format("W14,AR",CGCCPF),15," ")
  
    Print File ARQ DATA2STR_S([Data de Vencimento])
    Print File ARQ DATA2STR_S([Data de Emissao   ])
    
    Print File ARQ AlinhM([ExpBco->Sigla da Especie],2)
    Print File ARQ Completa([ExpBco->Aceite],1,"S")
    Print File ARQ DATA2STR_S([Data_Inclusao])
    
    Print File ARQ Completa("",01,"0");Forma de Entrega 01

    Switch
       Case TIPO_CART2="0011": Print File ARQ Spaces(15)
       Case TIPO_CART2="0012" Or TIPO_CART2="0014":
            If Not IsBlank([Documento no Banco])
               Then DOC=AlinhM(RTRIM(SubStr([Documento no Banco],1,14)),14)
                    If Len(DOC)<14
											 Then Print File ARQ "000000000000000"
                       Else Dig=StrVal(CALCULAR_DIGITO(DOC))
                            DOC=DOC+Dig
                            Print File ARQ DOC
                    EndIf
							 Else Print File ARQ "000000000000000"
            EndIf
		EndSwitch
		Print File ARQ Spaces(2)
   ;Print File ARQ "09" ; codigo da moeda
    Print File ARQ VALOR2STR_S([Valor do Documento],15)
    If TIPO_CART2="0011" or TIPO_CART2="0012"
		   Then cart = 1
		        Print File ARQ cart   
		else cart = 2
		     Print File ARQ cart   
    EndIF 
     
    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)
       Case [Tipo Taxa de Juros]="A": VJUROSDIA=Round((VRBASE/365),2)
       Case [Tipo Taxa de Juros]="D": VJUROSDIA=Round((VRBASE),2)
       OtherWise                    : VJUROSDIA= 0
    EndSwitch
    
    Print File ARQ VALOR2STR_S(0,14);Valor Desconto
    Print File ARQ DATA2STR_S([Data de Vencimento]);Data Desconto
    Print File ARQ VALOR2STR_S(0,14);Valor Desconto
    Print File ARQ DATA2STR_S([Data de Vencimento]);Data Desconto
    Print File ARQ VALOR2STR_S(0,14);Valor Desconto
    Print File ARQ DATA2STR_S([Data de Vencimento]);Data Desconto    
    Print File ARQ VALOR2STR_S(0,15);Valor Multa
    Print File ARQ DATA2STR_S([Data de Vencimento]);Data Multa
    Print File ARQ VALOR2STR_S(VJUROSDIA,15);Valor do Juros
    Print File ARQ VALOR2STR_S(0,15);Valor Abatimen
    
    If TIPO_CART2="0014"
       Then Print File ARQ AlinhM(StrVal(NumVal([ExpBco->NDias Devolver ])),02)
       Else Print File ARQ AlinhM(StrVal(NumVal([ExpBco->NDias Protestar])),02)
    EndIf

    Print File ARQ Completa(Tira_CharNum([ExpBco->Mensagem ]),040," ")
    Print File ARQ Completa(Tira_CharNum([ExpBco->Mensagem2]),040," ")
    Print File ARQ Completa(Tira_CharNum([ExpBco->Mensagem3]),040," ")
    Print File ARQ Completa(Tira_CharNum([ExpBco->Mensagem4]),040," ")
    Print File ARQ Completa(Tira_CharNum([ExpBco->Mensagem5]),040," ")
    Print File ARQ Completa(Tira_CharNum([ExpBco->Mensagem6]),040," ")
    Print File ARQ Spaces(30);Avalista 
      
    If [\Sistemas\Cadastro\Destinat->Tipo Pessoa]="JURIDICA"
       Then Print File ARQ "J"
       Else Print File ARQ "F"
    EndIf
    Print File ARQ Completa("",14,"0") ;Cod Inscricao 14    
    ;Print File ARQ Spaces(1);tipo(Unico/Carne ) 1 
    Print File ARQ "1";tipo(Unico/Carne ) 1
    Print File ARQ Completa("",03,"0");/Total Parcelas 03
    Print File ARQ "N";Impresso (s/n) 01
    
    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 Spaces(7)
    Print File ARQS Completa(CGCCPF,15," ")
    Print File ARQS Spaces(15)
    
    If [\Sistemas\Cadastro\Destinat->Tipo Pessoa]="JURIDICA"
       Then Print File ARQS "J"
       Else Print File ARQS "F"
    EndIf
    Print File ARQS Completa(CGCCPF,15," ")        
    Print File ARQS Completa(Tira_CharNum([\Sistemas\Cadastro\Destinat->Razao Social]),040," ")
    Print File ARQS Completa(Tira_CharNum([\Sistemas\Cadastro\Destinat->Nome Fantasia EmitDest]),040," ")    
   
    
    Print File ARQS Completa(Tira_CharNum(END_COB),040," ")
    Print File ARQS Completa(Tira_CharNum(BAI_COB),015," ")
    Print File ARQS Completa(Tira_CharNum(CID_COB),015," ")
    Print File ARQS Completa(UF_COB,002," ")
    Print File ARQS AlinhM(CEP_COB,8)

    Print File ARQS Completa(Tira_CharNum([\Sistemas\Cadastro\Destinat->Telefone]),020," ")
    Print File ARQS Completa(Tira_CharNum([\Sistemas\Cadastro\Destinat->Endereco_Eletronico]),045," ")
    Print File ARQS Completa("",017,"0")
    ;;Print File ARQS "\n"
    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
