;** Gereqfax *******************************************************************
;*  Exportacao de dados p/ EquiFax                                             *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 30/09/2005 por Anivel Augusto Rodrigues
;Ultima Alteracao: 06/10/2005 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Negativacao
;Ultima Alteracao: 14/08/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Deleta_Arquivo
;Ultima Alteracao: 06/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 24/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog   
;Ultima Alteracao: 29/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes MensagemCheckBoxes()                
;Ultima Alteracao: 28/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes drive raiz para privdir()
;Ultima Alteracao: 19/01/2021 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes ShowDialog
;Ultima Alteracao: 24/03/2021 por Bruno Carvalho
;Motivo Alteracao: Alterado mensagem de confirma‡Æo ao gerar o arquivo p/ MensagemMP()

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc Selecionar()
LimpAguarde()
ClearAll

Aguarde("Aguarde, Processando dados "+Tipo+"/"+Pessoa+"..")

{Ask} {\\Sistemas\\Cadastro\\Destinat} Check
Moveto [Codigo     ] Example "cdcli"
Moveto [Tipo Pessoa] TypeIn "~Pessoa"
Switch
  Case Tipo="EM ABERTO":
       {Ask} {\\Sistemas\\Ctarec\\Duplic} Check
       Moveto [Codigo do Destinatario] Example "cdcli"
       Moveto [Data de Emissao       ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
       Moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
  Case Tipo="VENCIDOS":
       {Ask} {\\Sistemas\\Ctarec\\Duplic} Check
       Moveto [Codigo do Destinatario] Example "cdcli"
       Moveto [Data de Emissao       ] TypeIn "<=~VSDGDTFIM"
       Moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
       Moveto [Saldo do Documento    ] TypeIn "> 0.01"
  Case Tipo="BAIXADOS":
       {Ask} {\\Sistemas\\Ctarec\\Duplic} Check
       Moveto [Numero do Lancamento  ] Example "nlanc"
       Moveto [Codigo do Destinatario] Example "cdcli"
       Moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
       {Ask} {\\Sistemas\\Ctarec\\DupBaixa} Check
       Moveto [Numero do Lancamento  ] Example "nlanc"
       Moveto [Data do Pagamento     ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
       Moveto [Tipo da Baixa         ] TypeIn "Not CANCELADO"
  Case Tipo="CANCELADOS":
       {Ask} {\\Sistemas\\Ctarec\\Duplic} Check
       Moveto [Numero do Lancamento  ] Example "nlanc"
       Moveto [Codigo do Destinatario] Example "cdcli"
       Moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
       {Ask} {\\Sistemas\\Ctarec\\DupBaixa} Check
       Moveto [Numero do Lancamento  ] Example "nlanc"
       Moveto [Data do Pagamento     ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
       Moveto [Tipo da Baixa         ] TypeIn "CANCELADO"
EndSwitch
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Rotina p/ gerar arquivos                                                    *
;*******************************************************************************
Proc Gera_Arquivo()

If IsEmpty("Answer")
   Then Return
Endif
ContOk=ContOk+1

View "Answer"
NR = NRecords("Answer")
Scan

  Barra(NR, RecNo())
  Aguarde("Aguarde, Incluindo Equifax "+Tipo+"/"+Pessoa+" "+BARRA_STRING)

  If Pessoa="JURIDICA"
     Then GRAVA_PJ()
     Else GRAVA_PF()
  EndIf

EndScan
ClearAll

EndProc


;********************************************************************************
;* Grava Pessoa Juridica                                                       *
;********************************************************************************
Proc GRAVA_PJ()
Switch
  Case Tipo="VENCIDOS"   : Print File ARQ "U"
  Case Tipo="CANCELADOS" : Print File ARQ "B"
  OtherWise              : Print File ARQ "J"
EndSwitch
Print File ARQ MONTA_STRING([CGC],"N","A",14)
Print File ARQ Completa([Razao Social],55," ")
Print File ARQ Completa([Nome Fantasia EmitDest],55," ")
Print File ARQ "M"
Print File ARQ Completa([Endereco],70," ")
Print File ARQ Completa([Cidade],30," ")
Print File ARQ Completa([UF],2," ")
Print File ARQ MONTA_STRING([CEP],"N","A",8)
;;If SubStr([Telefone],1,1)="(" or SubStr([Telefone],1,1)="["
;;   Then Print File ARQ Completa(SubStr([Telefone],1,4),4," ")
;;        Print File ARQ Completa(SubStr([Telefone],5,10),10," ")
;;   Else
        Print File ARQ Completa("",4," ")
        Print File ARQ Completa(SubStr([Telefone],1,10),10," ")
;;EndIf
;;If SubStr([Fax],1,1)="(" or SubStr([Fax],1,1)="["
;;   Then Print File ARQ Completa(SubStr([Fax],1,4),4," ")
;;        Print File ARQ Completa(SubStr([Fax],5,10),10," ")
;;   Else
        Print File ARQ Completa("",4," ")
        Print File ARQ Completa(SubStr([Fax],1,10),10," ")
;;EndIf
Print File ARQ Completa([Endereco_Eletronico],50," ")
If Not IsBlank([Data_Cadastro])
   Then Print File ARQ AlinhM(StrVal(Month([Data_Cadastro])),2)+
                       AlinhM(StrVal(Year([Data_Cadastro])),4)
   Else Print File ARQ Completa("",6," ")
EndIf
Print File ARQ Completa([Numero do Documento     ],12," ")
Switch
  Case [Tipo do Documento]="DUP" : Print File ARQ "D"
  Case [Tipo do Documento]="ROM" : Print File ARQ "F"
  OtherWise                      : Print File ARQ "O"
EndSwitch
Print File ARQ Completa("R$",4," ")
Print File ARQ Valor_Str([Valor do Documento     ],13,2)
If Tipo="BAIXADOS" Or Tipo="CANCELADOS"
   Then Print File ARQ Valor_Str(([Valor do Recebimento]-[Valor do Juros])+[Valor do Desconto],13,2)
   Else Print File ARQ Completa("",13," ")
EndIf
Print File ARQ AlinhM(StrVal(Day([Data de Emissao])),2)+
               AlinhM(StrVal(Month([Data de Emissao])),2)+
               AlinhM(StrVal(Year([Data de Emissao])),4)
Print File ARQ AlinhM(StrVal(Day([Data de Vencimento])),2)+
               AlinhM(StrVal(Month([Data de Vencimento])),2)+
               AlinhM(StrVal(Year([Data de Vencimento])),4)
If Tipo="BAIXADOS" Or Tipo="CANCELADOS"
   Then Print File ARQ AlinhM(StrVal(Day([Data do Pagamento])),2)+
                       AlinhM(StrVal(Month([Data do Pagamento])),2)+
                       AlinhM(StrVal(Year([Data do Pagamento])),4)
   Else Print File ARQ Completa("",08," ")
EndIf
Print File ARQ "\n"
EndProc

;********************************************************************************
;* Grava Pessoa Fisica                                                         *
;********************************************************************************
Proc GRAVA_PF()
Switch
  Case Tipo="VENCIDOS"   : Print File ARQ "I"
  Case Tipo="CANCELADOS" : Print File ARQ "A"
  OTherWise              : Print File ARQ "F"
EndSwitch
Print File ARQ MONTA_STRING([CGC],"N","A",11)
Print File ARQ MONTA_STRING([IE],"N","A",20)
Print File ARQ Completa("",4," ")
Print File ARQ Completa([Razao Social],55," ")
Print File ARQ "R"
Print File ARQ Completa([Endereco],70," ")
Print File ARQ Completa([Cidade],30," ")
Print File ARQ Completa([UF],2," ")
Print File ARQ MONTA_STRING([CEP],"N","A",8)
;;If SubStr([Telefone],1,1)="(" or SubStr([Telefone],1,1)="["
;;   Then Print File ARQ Completa(SubStr([Telefone],1,4),4," ")
;;        Print File ARQ Completa(SubStr([Telefone],5,10),10," ")
;;   Else
        Print File ARQ Completa("",4," ")
        Print File ARQ Completa(SubStr([Telefone],1,10),10," ")
;;EndIf
;;If SubStr([Fax],1,1)="(" or SubStr([Fax],1,1)="["
;;   Then Print File ARQ Completa(SubStr([Fax],1,4),4," ")
;;        Print File ARQ Completa(SubStr([Fax],5,10),10," ")
;;   Else
        Print File ARQ Completa("",4," ")
        Print File ARQ Completa(SubStr([Fax],1,10),10," ")
;;EndIf
Print File ARQ Completa([Endereco_Eletronico],50," ")
If Not IsBlank([Data_Cadastro])
   Then Print File ARQ AlinhM(StrVal(Month([Data_Cadastro])),2)+
                       AlinhM(StrVal(Year([Data_Cadastro])),4)
   Else Print File ARQ Completa("",6," ")
EndIf
Print File ARQ Completa([Numero do Documento     ],12," ")
Switch
  Case [Tipo do Documento]="DUP" : Print File ARQ "D"
  Case [Tipo do Documento]="ROM" : Print File ARQ "F"
  OtherWise                      : Print File ARQ "O"
EndSwitch
Print File ARQ Completa("R$",4," ")
Print File ARQ Valor_Str([Valor do Documento     ],13,2)
If Tipo="BAIXADOS" Or Tipo="CANCELADOS"
   Then Print File ARQ Valor_Str(([Valor do Recebimento]-[Valor do Juros])+[Valor do Desconto],13,2)
   Else Print File ARQ Completa("",13," ")
EndIf
Print File ARQ AlinhM(StrVal(Day([Data de Emissao])),2)+
               AlinhM(StrVal(Month([Data de Emissao])),2)+
               AlinhM(StrVal(Year([Data de Emissao])),4)
Print File ARQ AlinhM(StrVal(Day([Data de Vencimento])),2)+
               AlinhM(StrVal(Month([Data de Vencimento])),2)+
               AlinhM(StrVal(Year([Data de Vencimento])),4)
If Tipo="BAIXADOS" Or Tipo="CANCELADOS"
   Then Print File ARQ AlinhM(StrVal(Day([Data do Pagamento])),2)+
                       AlinhM(StrVal(Month([Data do Pagamento])),2)+
                       AlinhM(StrVal(Year([Data do Pagamento])),4)
   Else Print File ARQ Completa("",08," ")
EndIf
Print File ARQ "\n"
EndProc

;********************************************************************************
;* CONVERTE VALOR PARA STRING                                                  *
;********************************************************************************
Proc Valor_Str(Valor,Tam,Dec)
Private VrTit,Valor,Tam,Dec,Part1,Part2
VrTit=StrVal(Valor)
If SearchFrom(".",VrTit,1)>0
   Then Part1=SubStr(VrTit,1,SearchFrom(".",VrTit,1)-1)
        Part2=SubStr(VRTit,SearchFrom(".",VrTit,1)+1,Dec)
        Part2=PART2+Fill(0,DEC-Len(Part2))
   Else Part1=VrTit
        Part2=Fill(0,Dec)
EndIf
Vrtit=Part1+Part2
VrTit=Fill("0",Tam-Len(VrTit))+VrTit
Return VrTit
EndProc  ; (Valor_Str)

;******************************************************************************
;*Procedimento responsavel pela montagem do cgc/cpf
;******************************************************************************
Proc MONTA_STRING(MSTRING,NUMALF,OP,TM)
M_NOVO = ""
Switch
   Case NUMALF = "N":
        For I From 1 to Len(MSTRING)
            If (Asc(SubStr(MSTRING,I,1)) >= 48) And
               (Asc(SubStr(MSTRING,I,1)) <= 57)
               Then M_NOVO = M_NOVO + SubStr(MSTRING,I,1)
            EndIf
        EndFor
   Case NUMALF = "A":
        For I From 1 to Len(MSTRING)
            If (Asc(SubStr(MSTRING,I,1)) >= 065) And
               (Asc(SubStr(MSTRING,I,1)) <= 122)
               Then M_NOVO = M_NOVO + SubStr(MSTRING,I,1)
            EndIf
        EndFor
   Case NUMALF = "AN":
        For I From 1 to Len(MSTRING)
            If (Asc(SubStr(MSTRING,I,1)) >= 065) And
               (Asc(SubStr(MSTRING,I,1)) <= 122) Or
               (Asc(SubStr(MSTRING,I,1)) >= 48) And
               (Asc(SubStr(MSTRING,I,1)) <= 57)
               Then M_NOVO = M_NOVO + SubStr(MSTRING,I,1)
            EndIf
        EndFor
EndSwitch
If Len(M_NOVO)>TM
   Then M_NOVO=""
EndIf
IF OP="A"
   Then M_NOVO=ALINHM(M_NOVO,TM)
EndIf

Return(M_NOVO)
EndProc ; (Monta_String)


;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA    =""
MSG_CAMPO=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_DTINI"         : Campo="TG_EMPRESA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_OPNEG"         : Campo="TG_DTFIM"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
          SYS_TECLA_ACIONADA=Evento["KeyCode"]
          Seta_Tecla_Acionada()
          CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"    :
                         If IsBlank(VSDGEMPRESA)
                            Then Mensagem("Empresa Invalida !")
                            Else Campo="TG_DTINI"
                         EndIf
                    Case Campo="TG_DTINI"      :
                         If VSDGDTINI=BlankDate()
                            Then Mensagem("Data Inicial Invalida !")
                            Else Campo="TG_DTFIM"
                         EndIf
                    Case Campo="TG_DTFIM"      : Campo="TG_OPNEG"
                    Case Campo="TG_OPNEG"      : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA":
       MSG_CAMPO="Informe uma Empresa"
  Case Campo="TG_DTINI":
       MSG_CAMPO="Informe a Data Inicial"
  Case Campo="TG_OPNEG":
       MensagemCheckBoxes()
       
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"

LimpAguarde()
VSDGEMPRESA=""
VSDGDTINI  =BlankDate()
VSDGDTFIM  =BlankDate()

Array TG_OPNEG[1]
TG_OPNEG[1]="Gerar VENCIDOS/CANCELADOS"

Array CheckTG_OPNEG[ArraySize(TG_OPNEG)]
CheckTG_OPNEG[1]=False

While True
  ShowDialog "Remessa de dados p/ Equifax" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140
   @ 03,18   Height 09 Width 72

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA" To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMP" To VSDGNOMEMP

    Label  @ 02,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 03,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 03,16 "at‚" For "TG_DTFIM"
    Accept @ 03,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 00,35 "Negativa‡Æo"  For "TG_OPNEG"
    CheckBoxes @ 01,35 Height 1 Width 33 Tag "TG_OPNEG"
    TG_OPNEG[1] to CheckTG_OPNEG[1]

    Pushbutton @ 05,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 05,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog

  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGEMPRESA)
     Then Mensagem("Selecione uma empresa !")
          Loop
  EndIf
  If VSDGDTFIM=BlankDate() Or
     VSDGDTINI=BlankDate()
     Then Mensagem("Data Invalida !")
          Loop
  EndIf

  VSDGPASTA="\\Sistemas\\Exporta\\Dados\\"
  While True
    If DirExists(VSDGPASTA)=0
       Then
            Cria_Pasta(VSDGPASTA)
            Sleep 5000
            Loop
       Else QuitLoop
    EndIf
  EndWhile
  ARQ=VSDGPASTA+"EQUIFAX.TXT"
  Deleta_Arquivo(ARQ)

  contok=0
  For icp From 1 to 2
    Switch
      Case icp=1: Pessoa="JURIDICA"
      Case icp=2: Pessoa="FISICA"
    EndSwitch
    For itp From 1 to 4
      Switch
        Case itp=1: Tipo="EM ABERTO"
        Case itp=2: Tipo="VENCIDOS"
        Case itp=3: Tipo="BAIXADOS"
        Case itp=4: Tipo="CANCELADOS"
      EndSwitch
      If Not CheckTG_OPNEG[1]
         Then If Tipo="BAIXADOS" Or
                 Tipo="CANCELADOS"
                 Then Loop
              EndIf
      EndIF
      Selecionar()
      Gera_Arquivo()
    EndFor
  EndFor

  If Contok=0
     Then Mensagem("N„o existem registros a processar !")
     Else MSG = "Arquivo gerado em "+SubStr(Directory(),1,2)+ARQ
          MensagemMP(MSG,SubStr(Directory(),1,2)+ARQ)
          Close Printer
  EndIf

EndWhile
ClearAll
Release Vars All
Release Procs All
