;** ExpSant ********************************************************************
;*  Exportacao de Titulos Cobranca Santander                                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 02/06/2011 por Anivel Augusto Rodrigues
;Ultima Alteracao: 07/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Controle numero boleto no banco
;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)
RETURN DTGRAV
ENDPROC                                       

;********************************************************************************
;* CONVERTE VALOR PARA STRING                                                  *
;********************************************************************************
PROC VALORSTR(VALOR,TAM,NDEC)

If IsBlank(Valor) Then Valor=0 EndIf
Switch
 Case NDEC=0 : VRTIT=Tira_CharNum(Format("W13.2,EI",VALOR))
 Case NDEC=1 : VRTIT=Format("W13.1,EI",VALOR)
 Case NDEC=2 : VRTIT=Format("W13.2,EI",VALOR)
 Case NDEC=3 : VRTIT=Format("W13.3,EI",VALOR)
EndSwitch
VRTIT=RTrim(LTrim(VRTIT))
VRTIT=AlinhM(VRTIT,TAM)
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)
Private Dgt, v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12

 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))

 v1= v1*5
 v2= v2*4
 v3= v3*3
 v4= v4*2
 v5= v5*9
 v6= v6*8
 v7= v7*7
 v8= v8*6
 v9= v9*5
v10=v10*4
v11=v11*3
v12=v12*2

V=v1+v2+v3+v4+v5+v6+v7+v8+v9+v10+v11+v12
Dgt=11-(MOD(V,11))
If Dgt>9
   Then Dgt=0
EndIf

Return StrVal(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\\SANTANDR"
If DirExists(PASTA)=0
   Then Cria_Pasta(PASTA)
        Sleep 2000
EndIf

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

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 QuitLoop
  EndIf
  
  View "\\Sistemas\\Vendas\\Estados"
  View "\\Sistemas\\Cadastro\\Destinat"
  View "\\Sistemas\\Cadastro\\End_cob"
  View "\\Sistemas\\Cadastro\\Empresas"
  View "\\Sistemas\\Ctacor\\Conta"
  View "AltTitC"
  View "Duplic"
  View "ExpBco"
  CoEdit "Answer"

  Moveto "AltTitC"
  Moveto [Numero do Lote]
  Locate NLote
  If Not RetVal
     Then Mensagem("Lote "+NLOTE+" n„o Encontrado, Erro !")
          ExpOk=False
          QuitLoop
  EndIf
  If [Tipo Taxa de Juros]<>"M"
     Then Mensagem("Informe taxa de juros mensal Santander, verifique o Bordˆro !")
          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
  DOC      =[ExpBco->Proximo Nosso Numero]

  NREG=1


  ;*** Header ***
  PEGA_CGCCPF([\Sistemas\Cadastro\Empresas->CGC Empresa])
  RAZAO_EMP=[\Sistemas\Cadastro\Empresas->Razao Social Empresa]

  Open Printer

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


    Moveto "\\Sistemas\\Cadastro\\Destinat"
    Moveto [Codigo]
    Locate [Answer->Codigo do Destinatario]
    If Not RetVal
			 Then MSG="Cliente "+[Answer->Codigo do Destinatario]+" n„o Encontrado !// //"
						MSG=MSG+"Boleta n„o foi gerada, verificar !"
            Mensagem(MSG)
            Moveto "Answer"
            Loop
    EndIf
    
    
    If IsBlank([\Sistemas\Cadastro\Destinat->CGC]) Or
       Not Checa_CGC_CPF_Formatado([\Sistemas\Cadastro\Destinat->CGC]) Or
       [\Sistemas\Cadastro\Destinat->CGC]="00.000.000/0000-00" Or
       [\Sistemas\Cadastro\Destinat->CGC]="000.000.000-00" 
			 Then MSG="Cliente "+[Answer->Codigo do Destinatario]+" com CPF/CNPJ Inv lido !// //"
						MSG=MSG+"Boleta n„o foi gerada, verificar !"
            Mensagem(MSG)
            Moveto "Answer"
            Loop
    EndIf   
    
    PEGA_CGCCPF([\Sistemas\Cadastro\Destinat->CGC])

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

    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]
                    CEP_COB=Tira_CharNum([CEP de Cobranca])
                    CID_COB=[Cidade de Cobranca  ]
                     UF_COB=[UF de Cobranca      ]
                    BAI_COB=[Bairro de Cobranca  ]
            EndIf
    EndIf   

    Moveto "\\Sistemas\\Vendas\\Estados"
    Moveto [UF]
    Locate UF_COB
    If Not RetVal
       Then Mensagem("Descricao Estado "+UF_COB+" n„o Encontrado, Erro !")
            Moveto "Answer"
            Loop
    EndIf

    Moveto "Answer"

    If Not IsBlank([Documento no Banco])
       Then DOCBCO=[Documento no Banco]
       Else DIG=CALCULAR_DIGITO(AlinhM(StrVal(DOC),12))
            DOCBCO=AlinhM(StrVal(DOC),12)+DIG 
    EndIf    

    Print File ARQ AlinhM([ExpBco->Sigla da Especie],4)
    Print File ARQ SubStr([ExpBco->Carteira],1,1)     ; Carteira
    Print File ARQ Completa(Completa([Codigo do Documento],4," ")+"-"+[Numero do Documento],016," ")
    Print File ARQ DOCBCO
    Print File ARQ DATA2STR_S([Data de Emissao])
    Print File ARQ DATA2STR_S([Data de Vencimento])
    Print File ARQ VALORSTR([Valor do Documento],13,2)
    Print File ARQ "0000"
    Print File ARQ "00/00/0000"
    Print File ARQ VALORSTR(0,13,2)

    If Not IsBlank([Taxa de Juros])
       Then VRBASE=[Taxa de Juros]
            CODJUR="0002"
            DTCJUR=[Data de Vencimento]+1
       ELSE VRBASE=0
            CODJUR="0003"
            DTCJUR=BlankDate()
    EndIf

    Print File ARQ AlinhM(CODJUR,10)
    Print File ARQ DATA2STR_S(DTCJUR)
    Print File ARQ VALORSTR(VRBASE,04,0)
		Print File ARQ "0002"                             ;CODIGO DA BAIXA
		Print File ARQ Completa("",004,"0")               ;N. DIAS PARA BAIXA
    If [ExpBco->NDias Protestar]="00"
       Then Print File ARQ "0000"
            Print File ARQ "0000"
       Else Print File ARQ "0001"
            Print File ARQ AlinhM(StrVal([ExpBco->NDias Protestar]),4)
    Endif
    Print File ARQ VALORSTR(0,13,2)                  ;VR ABATIMENTO
;Multa
    Print File ARQ "2"                                ;CODIGO DA MULTA
    If [Multa]>0
       Then Print File ARQ DATA2STR_S([Data de Vencimento]+NumVal([ExpBco->NDias Protestar]))   ;DATA DA MULTA
            Print File ARQ VALORSTR([Multa],13,2)            ;VALOR DA MULTA
       Else Print File ARQ "00/00/0000"
            Print File ARQ VALORSTR(0,13,2)
    EndIf
;Ficha compensacao
    Print File ARQ Completa("",040," ") ;Ficha compensacao linha 1
    Print File ARQ Completa("",040," ") ;Ficha compensacao linha 2
    Print File ARQ Completa("",040," ") ;Ficha compensacao linha 3
;Recibo
		Print File ARQ Completa([ExpBco->Mensagem ],0100," ")
		Print File ARQ Completa([ExpBco->Mensagem2],0100," ")
		Print File ARQ Completa([ExpBco->Mensagem3],0100," ")
		Print File ARQ Completa([ExpBco->Mensagem4],0100," ")
    Print File ARQ Completa([ExpBco->Mensagem5],0100," ")
    Print File ARQ Completa([ExpBco->Mensagem6],0100," ")
;Avalista
    Print File ARQ Completa("",040," ")    ;NOME DO AVALISTA
    Print File ARQ Completa("",014," ")    ;INSCRICAO DO AVALISTA
;Sacado
    Print File ARQ Completa(CGCCPF,014," ")
    Print File ARQ Completa([\Sistemas\Cadastro\Destinat->Codigo      ],025," ")
    Print File ARQ Completa([\Sistemas\Cadastro\Destinat->Razao Social],040," ")
    Print File ARQ Completa(END_COB,040," ")
    Print File ARQ Completa(BAI_COB,015," ")
    Print File ARQ Completa(CID_COB,015," ")
    Print File ARQ Completa( UF_COB,002," ")
    Print File ARQ AlinhM(CEP_COB,8)
    Print File ARQ "\n"

    NREG=NREG+1

    If IsBlank([Documento no Banco])
       Then [Documento no Banco]=DOCBCO
            UnLockRecord

            DOC=DOC+1
            
            Moveto "Duplic"
            Moveto [Numero do Lancamento]
            Locate [Answer->Numero do Lancamento]
            If RetVal
               Then [Documento no Banco]=DOCBCO
                    UnLockRecord
            EndIf    
            SaveTables
    EndIf    

    Moveto "Answer"
  EndScan

  FileWrite Append ARQ From ""

  QuitLoop
EndWhile

If IsEmpty("Answer")
   Then Mensagem("N„o existem registros a processar !")
   Else If Not ExpOk
           Then Mensagem("Exporta‡„o n„o executada !")
                Deleta_Arquivo(ARQ)
        EndIf
        If NREG>1
           Then Moveto "ExpBco"
                [Proximo Nosso Numero]=DOC
                UnLockRecord
        EndIf
        Do_It!
        
        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+"\\REM."+DIA+"."+HORA+".TXT"
        Deleta_Arquivo(ARQ2)
     
        cmd="REN "+ARQ+" \""+ARQ2+"\""
        ExecVise(cmd)
        Deleta_Arquivo(ARQ)
            
        MSG = "Fim do processo! // //Arquivo gerado em: // //"+DRIVE+ARQ2
        MensagemMP(MSG,DRIVE+ARQ2)

EndIf

LimpAguardes()
LimpAguarde()

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