;** Gera_Sci *******************************************************************
;*  Exportacao de dados p/ SCI                                                 *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 03/11/1998 por Anivel Augusto Rodrigues
;Ultima Alteracao: 25/03/2004 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 15/08/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Run
;Ultima Alteracao: 01/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog.                  
;Ultima Alteracao: 06/12/2016 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 GERA_SCI()
LimpAguarde()
Aguarde("Aguarde, Processando Dados Para Informa‡äes SCI..")
ClearAll

Empty("\\Sistemas\\Exporta\\Tmp_Sci")
Contador="0"

LimpAguarde()
Aguarde("Aguarde, Processando Notas A Vista")
DIRETORIO="\\Sistemas\\Vendas"
GERA_INFO("N")
Do_It!
ClearAll

LimpAguarde()
Aguarde("Aguarde, Processando T¡tulos em Aberto")
SetDir "\\Sistemas\\Exporta"
DIRETORIO="\\Sistemas\\CtaRec"
GERA_INFO("D")
Do_It!
ClearAll

LimpAguarde()
Aguarde("Aguarde, Processando T¡tulos Pagos no Periodo")
SetDir "\\Sistemas\\Exporta"
DIRETORIO="\\Sistemas\\CtaRec"
GERA_INFO("R")
Do_It!
ClearAll
SetDir "\\Sistemas\\Exporta"
LimpAguarde()

If Not IsEmpty("Tmp_Sci")
   Then GERA_ARQUIVO()
   Else MENSAGEM("NÆo Existe Registro a Serem Processado")
EndIf

EndProc


;********************************************************************************
;* Rotina Responsavel em extrair as Informacaoes de Notas Ou Diplicatas         *
;********************************************************************************
Proc GERA_INFO(NODUP)
Private NODUP
Setdir DIRETORIO

Switch
     Case NODUP="N":
          {Ask} {Notac} Check
          Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
          Moveto [Data de Emissao        ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
          Moveto [Situacao               ] TypeIn "Not C"
          Moveto [Descricao da Destinacao] TypeIn "..VEND.."
          Moveto [Tipo de Pagamento      ] TypeIn "V"
          Do_It!
          ClearAll
          If Not IsEmpty("Answer")
             Then GRAVA_INFO("N")
             Else MENSAGEM("N„o Existe Registro a Processar, Notas A Vista !")
          EndIf
     Case NODUP="D":
          {Ask} {Duplic} Check
          Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
          Moveto [Saldo do Documento     ] TypeIn "> 0"
          Do_It!
          ClearAll
          If Not IsEmpty("Answer")
             Then GRAVA_INFO("D")
             Else MENSAGEM("N„o Existe Registro a Processar, Duplicatas em Aberto !")
          EndIf
     Case NODUP="R":
          {Ask} {Duplic} Check
          Moveto [Numero do Lancamento   ] Example "A"
          Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
          Moveto [Saldo do Documento     ] TypeIn "0"
          {Ask} {DupBaixa}
          Moveto [Numero do Lancamento   ] Example "A"
          Moveto [Data do Pagamento      ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
          Do_It!
          ClearAll
          If Not IsEmpty("Answer")
             Then GRAVA_INFO("D")
             Else MENSAGEM("N„o Existe Registro a Processar, Duplicatas Recebidas no Periodo !")
          EndIf
EndSwitch
EndProc

;********************************************************************************
;* Rotina Responsavel em gravar as informacoes no arquivo temporario            *
;********************************************************************************
Proc GRAVA_INFO(NODUP)
Switch
     Case NODUP="N":

          View "Answer"
          View "\\Sistemas\\Cadastro\\FichaCli"
          View "\\Sistemas\\Cadastro\\Destinat"
          Coedit "\\Sistemas\\Exporta\\Tmp_Sci"
          Moveto "Answer"

          Scan
             MCGC=""
             MCGC=MONTA_CGC([Answer->CGC])

             If IsBlank(MCGC)
                Then Moveto "Answer"
                     Loop
             EndIf

             Moveto "\\Sistemas\\Exporta\\Tmp_Sci"
             End Down
             Contador=StrVal(NumVal(Contador)+1)

             [Sequencia                 ]=AlinhM(Contador,6)
             If SubStr([Answer->Tipo Pessoa],1,1)="F"
                Then [Tipo ]="F"
                Else [Tipo ]="J"
             EndIf

             [Cgc_Cpf                            ]=MCGC

             MOVE_DADOS_BRANCOS()

             Moveto "\\Sistemas\\Cadastro\\FichaCli"
             Moveto [Codigo]
             Locate [Answer->Codigo]
             Moveto "\\Sistemas\\Exporta\\Tmp_Sci"
             If Not RetVal
                Then [Cliente Desde     ]=Spaces(06)
                Else If IsBlank([\Sistemas\Cadastro\Fichacli->Data da Primeira Compra])
                        Then [Cliente Desde     ]=Spaces(06)
                        Else [Cliente Desde     ]=AlinhM( StrVal(Month([\Sistemas\Cadastro\Fichacli->Data da Primeira Compra])),2)+
                                                  StrVal(Year([\Sistemas\Cadastro\Fichacli->Data da Primeira Compra]))
                     EndIf
             EndIf

             [Numero Identificador      ]=Format("W12,AL",[Answer->Numero do Documento])
             [Natureza Titulo           ]="N"
             [Moeda                     ]="R$"

             [Valor Inteiro             ]=VALOR_STR([Answer->Valor Nota Fiscal],13,2)
             [Valor Pago                ]=VALOR_STR([Answer->Valor Nota Fiscal],13,2)

             [Data da Venda             ]=AlinhM(StrVal(Day([Answer->Data de Emissao])),2)+
                                          AlinhM(StrVAl(Month([Answer->Data de Emissao])),2)+
                                          StrVal(Year([Answer->Data de Emissao]))

             [Data de Vencimento        ]=AlinhM(StrVal(Day([Answer->Data de Emissao])),2)+
                                          AlinhM(StrVAl(Month([Answer->Data de Emissao])),2)+
                                          StrVal(Year([Answer->Data de Emissao]))

             [Data de Pagamento         ]=AlinhM(StrVal(Day([Answer->Data de Emissao])),2)+
                                          AlinhM(StrVAl(Month([Answer->Data de Emissao])),2)+
                                          StrVal(Year([Answer->Data de Emissao]))

             Moveto "Answer"

          EndScan

     Case NODUP="D":

          View "Answer"
          View "\\Sistemas\\Cadastro\\FichaCli"
          View "\\Sistemas\\Cadastro\\Destinat"
          View "\\Sistemas\\CtaRec\\DupBaixa"
          Coedit "\\Sistemas\\Exporta\\Tmp_Sci"
          Moveto "Answer"

          Scan

             Moveto "\\Sistemas\\Cadastro\\Destinat"
             Moveto [codigo]
             Locate [Answer->Codigo do Destinatario]
             If Not RetVal
                Then Moveto "Answer"
                     Loop
             EndIf

             MCGC=MONTA_CGC([\Sistemas\Cadastro\Destinat->CGC])

             If IsBlank(MCGC)
                Then Moveto "Answer"
                     Loop
             EndIf

             Moveto "\\Sistemas\\Exporta\\Tmp_Sci"
             End Down
             Contador=StrVal(NumVal(Contador)+1)
             [Sequencia                          ]=AlinhM(Contador,6)

             If SubStr([\Sistemas\Cadastro\Destinat->Tipo Pessoa],1,1)="F"
                Then [Tipo ]="F"
                Else [Tipo ]="J"
             EndIf

             [Cgc_Cpf                            ]=MCGC

             MOVE_DADOS_BRANCOS()

             Moveto "\\Sistemas\\Cadastro\\FichaCli"
             Moveto [Codigo]
             Locate [Answer->Codigo do Destinatario]
             Moveto "\\Sistemas\\Exporta\\Tmp_Sci"
             If Not RetVal
                Then [Cliente Desde     ]=Spaces(06)
                Else If IsBlank([\Sistemas\Cadastro\Fichacli->Data da Primeira Compra])
                        Then [Cliente Desde     ]=Spaces(06)
                        Else [Cliente Desde     ]=AlinhM( StrVal(Month([\Sistemas\Cadastro\Fichacli->Data da Primeira Compra])),2)+
                                                  StrVal(Year([\Sistemas\Cadastro\Fichacli->Data da Primeira Compra]))
                     EndIf
             EndIf

             [Numero Identificador      ]=Format("W12,AL",[Answer->Numero do Documento])
             [Natureza Titulo           ]="D"
             [Moeda                     ]="R$"

             [Valor Inteiro             ]=VALOR_STR([Answer->Valor do Documento],13,2)

             If [Answer->Saldo do Documento] > 0
                Then [Valor Pago       ]=Spaces(13)
                     [Data de Pagamento]=Spaces(08)
                Else Moveto "\\Sistemas\\CtaRec\\DupBaixa"
                     Moveto [Numero do Lancamento]
                     Locate [Answer->Numero do Lancamento]
                     Moveto "\\Sistemas\\Exporta\\Tmp_Sci"
                     If Not RetVal
                        Then [Valor Pago        ]=Spaces(13)
                             [Data de Pagamento ]=Spaces(08)
                        Else [Valor Pago        ]=VALOR_STR([\Sistemas\Ctarec\DupBaixa->Valor do Recebimento],13,2)
                             [Data de Pagamento ]=AlinhM(StrVal(Day([\Sistemas\Ctarec\DupBaixa->Data do Pagamento])),2)+
                                                  AlinhM(StrVal(Month([\Sistemas\Ctarec\DupBaixa->Data do Pagamento])),2)+
                                                  StrVal(Year([\Sistemas\Ctarec\DupBaixa->Data do Pagamento]))

                     EndIf
             EndIf
             [Data da Venda             ]=AlinhM(StrVal(Day([Answer->Data de Emissao])),2)+
                                          AlinhM(StrVAl(Month([Answer->Data de Emissao])),2)+
                                          StrVal(Year([Answer->Data de Emissao]))


             [Data de Vencimento        ]=AlinhM(StrVal(Day([Answer->Data de Vencimento])),2)+
                                          AlinhM(StrVAl(Month([Answer->Data de Vencimento])),2)+
                                          StrVal(Year([Answer->Data de Vencimento]))

             Moveto "Answer"

          EndScan

EndSwitch
EndProc


;********************************************************************************
;* MONTA O CGC SEM PONTOS/BARRAS/TRACO                                         *
;********************************************************************************
Proc MONTA_CGC(MM_CGC)
MCGC=""
For I From 1 To Len(MM_CGC)
    If Substr(MM_CGC,I,1)="1" Or
       Substr(MM_CGC,I,1)="2" Or
       Substr(MM_CGC,I,1)="3" Or
       Substr(MM_CGC,I,1)="4" Or
       Substr(MM_CGC,I,1)="5" Or
       Substr(MM_CGC,I,1)="6" Or
       Substr(MM_CGC,I,1)="7" Or
       Substr(MM_CGC,I,1)="8" Or
       Substr(MM_CGC,I,1)="9" Or
       Substr(MM_CGC,I,1)="0"
       Then MCGC=MCGC+Substr(MM_CGC,I,1)
    EndIf
EndFor
Return (MCGC)
EndProc


;********************************************************************************
;* PREENCHE DADOS COM VALOES EM BRANCO                                         *
;********************************************************************************
Proc MOVE_DADOS_BRANCOS()
[Rg                                 ]=Spaces(20)
[Emissor Rg                         ]=Spaces(04)
[Razao Social_Nome                  ]=Spaces(55)
[Nome Fantasia                      ]=Spaces(55)
[Natureza Endereco                  ]=Spaces(01)
[Endereco                           ]=Spaces(70)
[Cidade                             ]=Spaces(30)
[Uf                                 ]=Spaces(02)
[Cep                                ]=Spaces(08)
[Ddd Telefone                       ]=Spaces(04)
[Telefone                           ]=Spaces(10)
[Ddd Fax                            ]=Spaces(04)
[Fax                                ]=Spaces(10)
[E-mail                             ]=Spaces(50)
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(" ",Tam-Len(VrTit))+VrTit
Return vrtit
EndProc

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

{Ask} {Tmp_Sci} Check
Moveto [Tipo] TypeIn "J"
Do_It!
ClearAll

If Not IsEmpty("Answer")
   Then Deleta_Arquivo(ARQJ)
        LimpAguarde()
        Aguarde("Gerando Informa‡äes -> Pessoa Jur¡dica")
        Gera("J")
        Renomeia_Arquivo(ARQ +" "+ ARQJ)
EndIf

{Ask} {Tmp_Sci} Check
Moveto [Tipo] TypeIn "F"
Do_It!
ClearAll

If Not IsEmpty("Answer")
   Then Deleta_Arquivo(ARQF)
        Gera("F")
        LimpAguarde()
        Aguarde("Gerando Informa‡äes -> Pessoa F¡sica")
        Renomeia_Arquivo(ARQ+"  "+ARQF)
EndIf

LimpAGuarde()
EndProc

;*******************************************************************************
;* ROTINA COPIA p/ DISCO                                                       *
;*******************************************************************************
Proc GERA_DISCO()
Private ARQ_AUX

ARQ_AUX=""
If IsFile("\\Sistemas\\Exporta\\Dados\\"+ARQ)
   Then If FileSize("\\Sistemas\\Exporta\\Dados\\"+ARQ)<DriveSpace(SubStr(VSDGDRIVES,1,1))
           Then ARQ_AUX=ARQ 
                Aguarde("Copiando "+ARQ+" p/ "+VSDGDRIVE)
                Copia_Arquivo("\\Sistemas\\Exporta\\Dados\\" + ARQ + " " + VSDGDRIVE + ARQ)
                LimpAguarde()
           Else Mensagem("Aten‡„o, p/ Copiar o arquivo o espa‡o no drive selecionado ‚ insuficiente")
                Return
        EndIf
Endif

If IsFile("\\Sistemas\\Exporta\\Dados\\"+ARQJ)
   Then If FileSize("\\Sistemas\\Exporta\\Dados\\"+ARQJ)<DriveSpace(SubStr(VSDGDRIVE,1,1))
           Then ARQ_AUX=ARQJ 
                Aguarde("Copiando "+ARQJ+" p/ "+VSDGDRIVE)
                Copia_Arquivo("\\Sistemas\\Exporta\\Dados\\" + ARQJ + " " + VSDGDRIVE + ARQJ)
                LimpAguarde()
           Else Mensagem("Aten‡„o, p/ Copiar o arquivo o espa‡o no drive selecionado ‚ insuficiente")
                Return

        EndIf                        
Endif

If IsFile("\\Sistemas\\Exporta\\Dados\\"+ARQF)
   Then If FileSize("\\Sistemas\\Exporta\\Dados\\"+ARQF)<DriveSpace(SubStr(VSDGDRIVE,1,1))
           Then ARQ_AUX=ARQF 
                Aguarde("Copiando "+ARQF+" p/ "+VSDGDRIVE)
                Copia_Arquivo("\\Sistemas\\Exporta\\Dados\\" + ARQF + " " + VSDGDRIVE + ARQF)
                LimpAguarde()
           Else Mensagem("Aten‡„o, p/ Copiar o arquivo o espa‡o no drive selecionado ‚ insuficiente")
                Return
        EndIf
Endif

If ARQ_AUX<>""
   Then MensagemMP("Gerado o arquivo// //"+VSDGDRIVE+"\\"+ARQ_AUX,VSDGDRIVE+"\\"+ARQ_AUX)
EndIf   

EndProc

;*******************************************************************************
;* ROTINA QUE GERA O ARQUIVO .TXT                                              *
;*******************************************************************************
Proc GERA(TIPOP)

ARQ="\\Sistemas\\Exporta\\Dados\\AUXILIAR.TXT"

Deleta_Arquivo(ARQ)

View "Answer"

Scan

   Print File ARQ COMPLETA([Tipo],01," ")

   If TIPOP = "J"
      Then Print File ARQ COMPLETA([Cgc_Cpf],14," ")
      Else Print File ARQ COMPLETA([Cgc_Cpf],11," ")
           Print File ARQ Spaces(20)
           Print File ARQ Spaces(04)
   EndIf

   Print File ARQ Spaces(55)
   If TIPOP = "J"
      Then Print File ARQ Spaces(55)
   EndIf

   Print File ARQ Spaces(01)
   Print File ARQ Spaces(70)
   Print File ARQ Spaces(30)
   Print File ARQ Spaces(02)
   Print File ARQ Spaces(08)
   Print File ARQ Spaces(04)
   Print File ARQ Spaces(10)
   Print File ARQ Spaces(04)
   Print File ARQ Spaces(10)
   Print File ARQ Spaces(50)
   Print File ARQ COMPLETA([Cliente Desde],06," ")
   Print File ARQ COMPLETA([Numero Identificador],12," ")
   Print File ARQ COMPLETA([Natureza Titulo],01," ")
   Print File ARQ COMPLETA([Moeda],04," ")
   Print File ARQ COMPLETA([Valor Inteiro],13," ")
   Print File ARQ COMPLETA([Valor Pago   ],13," ")
   Print File ARQ COMPLETA([Data da Venda],08," ")
   Print File ARQ COMPLETA([Data de Vencimento],08," ")
   Print File ARQ COMPLETA([Data de Pagamento],08," ")+"\n"

EndScan
ClearAll

EndProc

;*******************************************************************************
;* 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_DRIVES"        : 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_DRIVES"
                    Case Campo="TG_DRIVES"   :
                         VSDGDRIVE=ControlValue("TG_DRIVES")
                         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_DRIVES":
       MSG_CAMPO="Selecione o drive desejado !"
       TECLA=Chr(27)+""+Chr(26)+"=Selecionar  "

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

ARQ  =""
ARQJ ="JURIDICO.TXT"
ARQF ="FISICO.TXT"

DynArray Array_Drives[]
SysInfo Drives To Array_Drives
VSDGDRIVE=SubStr(Directory(),1,2)

While True
  ShowDialog "Exporta‡„o de dados p/ SCI" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140
   @ 05,12   Height 10 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 "Drives:" For "TG_DRIVES"
    PickDynArrayIndex @ 01,36 Height 4 width 33
     Columns 7
      Array_Drives
       Tag "TG_DRIVES"
        To VSDGDRIVE

    Pushbutton @ 06,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 06,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

  View "\\Sistemas\\Cadastro\\Empresas"
  Moveto [Codigo da Empresa]
  Locate VSDGEMPRESA
  If Not RetVal
     Then MENSAGEM("Empresa N„o Cadastrada")
          Loop
  EndIf
  PREFIXO=SubStr([Conta Contabil Empresa],1,3)
  ClearAll

  GERA_SCI()

  GERA_DISCO()

  MENSAGEM("Fim da Opera‡„o !")

EndWhile
ClearAll
Release Vars All
Release Procs All
