;** ExpBB2  ********************************************************************
;*  Exportacao de Titulos Cobranca BB                                          *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 17/12/2002 por Anivel Augusto Rodrigues
;Ultima Alteracao: 08/06/2005 por Jose Luis Ameno da Silva
;Motivo Alteracao: Ajustes Novo Layout
;Ultima Alteracao: 13/08/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Deleta_Arquivo
;Ultima Alteracao: 16/10/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checa CGC
;Ultima Alteracao: 07/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Indice Inddup1/Duplic
;Ultima Alteracao: 24/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Saldo do Documento
;Ultima Alteracao: 28/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Empresa TN
;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: 27/05/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Incluir Bairro            
;Ultima Alteracao: 24/09/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes layout CBR600 + Avalista quando Descontada             
;Ultima Alteracao: 08/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Nova Pasta, Novos Arquivos
;Ultima Alteracao: 26/08/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes lerar avalista pra outras situa‡äes       
;Ultima Alteracao: 01/12/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Empresa TN
;Ultima Alteracao: 01/12/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Ćo de "ExecVise -> Vexe"
;Ultima Alteracao: 07/12/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Lupus conta 0006
;Ultima Alteracao: 20/01/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao DT Limite e Valor para Desconto
;Ultima Alteracao: 22/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Empresa ModaMil
;Ultima Alteracao: 12/07/2012 por Nikolas
;Motivo Alteracao: Ajustes Empresa MigTextil
;Ultima Alteracao: 31/10/2017 por Bruno Carvalho
;Motivo Alteracao: Removido "Altcontc" -> GeraTXT()
;Ultima Alteracao: 22/11/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mensagem boleto com dup por agrupamento
;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

;*******************************************************************************
;* Rotina tira string de Observacao da Duplicata                               *
;*******************************************************************************
Proc TirarMensagemObsDuplic(si,sf)
private s, si, sf, posini, posfim, tamanhoobs

s=""
posini=SearchFrom(si,[Answer->Observacoes],1)
If posini>0                   
   Then posfim=SearchFrom(sf,[Observacoes],posini)
        If posfim>0       
           Then tamanhoobs=(posfim-posini)-1
                s=SubStr([Observacoes],posini+1,tamanhoobs)
        EndIf
EndIf

return s
Endproc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
Proc GeraTXT()
private sobs 

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

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

{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
        Return  
EndIf

View "\\Sistemas\\Vendas\\Estados"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\End_cob"
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
        Return  
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
        Return  
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
        Return  
EndIf
PEGA_CGCCPF([\Sistemas\Cadastro\Empresas->CGC Empresa])
CGCCPF_EMP=CGCCPF
TIPOP_EMP =TIPOP
RAZAO_EMP =[\Sistemas\Cadastro\Empresas->Razao Social Empresa]

;***** AVALISTA **************************
CGCCPF_AV=""
TIPOP_AV =""
RAZAO_AV =""
If TABEXP="TITU"                      And 
   Not IsBlank([AltTitC->Codigo_Empresa_Avalista]) And
   ([AltTitC->Codigo da Empresa]<>[AltTitC->Codigo_Empresa_Avalista])
   Then
        Moveto "\\Sistemas\\Cadastro\\Empresas"
        Moveto [Codigo da Empresa]
        Locate [AltTitC->Codigo_Empresa_Avalista]
        If Not RetVal
           Then Mensagem("Empresa Avalista "+[AltTitC->Codigo_Empresa_Avalista]+" n„o Encontrada, Erro !")
                ExpOk=False
                Return  
        EndIf
        PEGA_CGCCPF([\Sistemas\Cadastro\Empresas->CGC Empresa])
        CGCCPF_AV=CGCCPF
        TIPOP_AV =TIPOP
        RAZAO_AV =[\Sistemas\Cadastro\Empresas->Razao Social Empresa]
EndIf

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

NREG=1

;*** Header ***

Switch
  Case SYS_CODIGO_CLIENTE="0185" And [Answer->Codigo da Conta]="0003":
       CGCCPF_EMP="87703599620"
       RAZAO_EMP ="REGINALDO SERGIO PEREIRA"
       TIPOP_EMP ="F"
  Case SYS_CODIGO_CLIENTE="0222" And
       Upper(SubStr(Directory(),1,2))="X:" And 
       [Answer->Codigo da Conta]="0006":
       CGCCPF_EMP="14156552000106"
       RAZAO_EMP ="UBERALDO PEREIRA FLORA"
       TIPOP_EMP ="J"
  Case SYS_CODIGO_CLIENTE="0051" And
       Upper(SubStr(Directory(),1,2))="X:" And 
       [Answer->Codigo da Conta]="1003":
       CGCCPF_EMP="08542319000150"
       RAZAO_EMP ="IMOB. N.SENHORA DE LOUDES LTDA"
       TIPOP_EMP ="J"

  Case SYS_CODIGO_CLIENTE="0228" And
       Upper(SubStr(Directory(),1,2))="X:" And 
       [Answer->Codigo da Conta]="0006":
       CGCCPF_EMP="54724783672"
       RAZAO_EMP ="AGUILAR ANTONIO DE SOUZA"
       TIPOP_EMP ="F"

EndSwitch

NREG=1
Open Printer
Print File ARQ "00"
If TIPOP_EMP="J"
   Then Print File ARQ "02"
   Else Print File ARQ "01"
EndIf
Print File ARQ Completa(CGCCPF_EMP,014," ")
Print File ARQ Completa(RAZAO_EMP,030," ")
Print File ARQ "CBR600"                       ; Tipo Formato do Arquivo
Print File ARQ Completa("" ,046,"0")
Print File ARQ Completa("" ,200,"0")
Print File ARQ Completa("" ,200,"0")
Print File ARQ "\n"


;*** 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"
  Print File ARQ "01"

  If Len([ExpBco->Convenio])<=6
     Then Print File ARQ ALINHM([ExpBco->Convenio],6)                 ; Convenio
     Else Print File ARQ "000000"                                     ; Convenio
  EndIf
  Print File ARQ ALINHM(SubStr([ExpBco->Carteira],1,2),2)     ; Carteira
  Print File ARQ ALINHM(SubStr([ExpBco->Carteira],4,3),3)     ; Variacao
  
  If SYS_CODIGO_CLIENTE="0059"
     Then Print File ARQ Completa("0"+[Numero do Documento],010," ")
     Else Print File ARQ Completa([Numero do Documento],010," ")
  EndIf   

  If [ExpBco->Impressao pelo Banco]<>"1"
     Then Print File ARQ Completa("",020,"0")
     Else Print File ARQ Completa(RTrim([Documento no Banco]),20," ")
  EndIf

  If SYS_CODIGO_CLIENTE="0059"
     Then Print File ARQ Completa([Codigo da Empresa]+"-"+Completa([Codigo do Documento],7," ")+"-"+"0"+[Numero do Documento],025," ")
     Else Print File ARQ Completa([Codigo da Empresa]+"-"+Completa([Codigo do Documento],7," ")+"-"+[Numero do Documento],025," ")
  EndIf   
  Print File ARQ Completa([ExpBco->Sigla da Especie],005," ")
  Print File ARQ DATA2STR_S([Data de Emissao])
  Print File ARQ DATA2STR_S([Data de Vencimento])
  Print File ARQ VALOR2STR_S([Saldo do Documento],13)
  Print File ARQ "09   "
  Print File ARQ Completa("",013,"0")
  Print File ARQ Completa([ExpBco->Aceite],1,"N")

  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(VJUROSDIA,13)
  Print File ARQ DATA2STR_S([Data Limite Desconto])
  Print File ARQ VALOR2STR_S([Valor do Desconto],13)
  Print File ARQ Completa("",13," ")
  If [ExpBco->NDias Protestar]="00"
     Then Print File ARQ "  "
     Else Print File ARQ AlinhM(StrVal([ExpBco->NDias Protestar]),2)
  Endif
  switch
    case sys_codigo_Cliente="0034":
      sobs=TirarMensagemObsDuplic("[REF NF","]")+[ExpBco->Mensagem]
      Print File ARQ Completa(substr(sobs,1,40),040," ")      
      
    otherwise:
      Print File ARQ Completa([ExpBco->Mensagem],040," ")

  endswitch
  If Len([ExpBco->Convenio])>6
     Then Print File ARQ ALINHM([ExpBco->Convenio],9)                 ; Convenio
     Else Print File ARQ Completa("",09,"0")     ;;PREENCHER COM 0 OU " "?
  EndIf
  Print File ARQ "2"            ;CODIGO DA MULTA
  Print File ARQ DATA2STR_S([Data de Vencimento])   ;DATA DA MULTA
  Print File ARQ VALOR2STR_S([Multa],13)    ;VALOR DA MULTA
  Print File ARQ Completa("",009," ")

  Switch                                         ;TIPO DE INSCRICAO DO AVALISTA
    Case TIPOP_AV="J" : Print File ARQ "02"                       
    Case TIPOP_AV="F" : Print File ARQ "01"                       
    OtherWise         : Print File ARQ "  "
  EndSwitch  
  Print File ARQ Completa(CGCCPF_AV,014," ")    ;INSCRICAO DO AVALISTA
  Print File ARQ Completa(RAZAO_AV ,037," ")    ;NOME DO AVALISTA

  If [ExpBco->Impressao pelo Banco]="1"
     Then Print File ARQ "N"
     Else Print File ARQ "S"
  EndIf

  If TIPOP="J"                         ;TIPO DE INSCRICAO DO CLIENTE
     Then Print File ARQ "02"
     Else Print File ARQ "01"
  EndIf
  Print File ARQ Completa(CGCCPF,014," ")
  Print File ARQ Completa([\Sistemas\Cadastro\Destinat->Razao Social],037," ")

  Print File ARQ Completa(END_COB,037," ")
  Print File ARQ AlinhM(CEP_COB,8)
  Print File ARQ Completa(CID_COB,015," ")
  Print File ARQ Completa( UF_COB,002," ")
  Print File ARQ Completa(BAI_COB,015," ")
  Print File ARQ Completa(     "",025," ")

;;; Print File ARQ Completa([\Sistemas\Vendas\Estados->Descricao],040," ")

  Print File ARQ Completa("",008," ")          ;DATA PAGAMENTO BAIXA
  Print File ARQ Completa("",013,"0")          ;DATA PAGAMENTO BAIXA

  Print File ARQ AlinhM([ExpBco->Modalidade],2)

  If [ExpBco->Impressao pelo Banco]="2"
     Then Print File ARQ "09"                          ;ESTADO DO TITULO
     Else Print File ARQ "00"                          ;ESTADO DO TITULO
  EndIf

  Print File ARQ Completa("",016,"0")          ;USO DO BANCO
  Print File ARQ "\n"

  NREG=NREG+1
EndScan

;*** Trailer ***
Print File ARQ "99"
Print File ARQ ALINHM(StrVal(NREG),6)
Print File ARQ Completa("" ,092,"0")
Print File ARQ Completa("" ,200,"0")
Print File ARQ Completa("" ,200,"0")

FileWrite Append ARQ From "\n"

EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
ExpOk=True
GeraTXT()
If Not ExpOk
   Then Mensagem("Exporta‡„o n„o executada !")
        Deleta_Arquivo(ARQ)
   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+"\\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, VALOR2STR_S, PEGA_CGCCPF, GERATXT
