;** GVminas ********************************************************************
;* Gera‡Æo de arquivo projeto veste minas                                      *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 21/06/2013 por Anivel Augusto Rodrigues
;Ultima Alteracao: 01/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog.                  
;Ultima Alteracao: 19/11/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nome Vise Sistemas
;Ultima Alteracao: 24/03/2021 por Bruno Carvalho
;Motivo Alteracao: Alterado mensagem de confirma‡Æo ao gerar o arquivo p/ MensagemMP() 

;*******************************************************************************
;* Rotina p/ Selecionar Registros                                              *
;*******************************************************************************
Proc Seleciona()
ClearAll

;****** Vendas *****************************************************************
If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC") And
   IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI")
   Then
        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter
        Moveto [Codigo da Empresa      ] Example "cemp" TypeIn ", ~VSDGEMPRESA.."
        Moveto [Numero do Documento    ] Check Example "ndoc" 
        Moveto [Serie do Documento     ] Check Example "sdoc"
        Moveto [Data de Emissao        ] Check TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
        Moveto [Codigo                 ] Check 
        Moveto [Razao Social           ] Check 
        Moveto [CGC                    ] Check 
        Moveto [Cidade                 ] Check 
        Moveto [Uf                     ] Check 
        Moveto [Codigo do Representante] Check 
        Moveto [Descricao da Destinacao] TypeIn "..VEND.. or ..SERV.. or ..SAIDA.."
        Moveto [Tipo Movimento Estoque ] TypeIn "S"
        Moveto [Situacao               ] TypeIn "Not C"
        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI" Enter
        Moveto [Codigo da Empresa      ] Example "cemp"
        Moveto [Numero do Documento    ] Example "ndoc"
        Moveto [Serie do Documento     ] Example "sdoc"
        Moveto [Tipo do Item           ] TypeIn "P"
        Moveto [Quantidade             ] TypeIn "Calc Sum as Quantidade"
        Moveto [Preco Total            ] TypeIn "Calc Sum as Preco Total"
        Moveto [Situacao_Item          ] TypeIn "Not C"
        Do_It!
        ClearAll
        
        Adiciona_Dados()

EndIf

EndProc   ; (Seleciona)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Adiciona_Dados()

If IsEmpty("Answer")
   Then Return
EndIf

{Ask} {Answer}
Moveto [Numero do Documento    ] typeIn "_ndoc"
Moveto [Data de Emissao        ] typeIn "_dte"
Moveto [Razao Social           ] typeIn "_rz"  
Moveto [CGC                    ] typeIn "_cgc"  
Moveto [Cidade                 ] typeIn "_cid"  
Moveto [Uf                     ] typeIn "_uf"  
Moveto [Codigo do Representante] typeIn "_crep" 
Moveto [Quantidade             ] typeIn "_qtd" 
Moveto [Preco Total            ] typeIn "_vr" 
{Ask} {VMINAS} TypeIn "Fast Insert"
Moveto [DT_E_S                 ] typeIn "_dte"
Moveto [NOME                   ] typeIn "_rz"  
Moveto [CPF_CNPJ               ] typeIn "_cgc"  
Moveto [VL_TOTAL               ] typeIn "_vr" 
Moveto [QTDE                   ] typeIn "_qtd" 
Moveto [MUN                    ] typeIn "_cid"  
Moveto [UF                     ] typeIn "_uf"  
Moveto [NUM_DOC                ] typeIn "_ndoc"
Moveto [Codigo da Empresa      ] typeIn "~VSDGEMPRESA"
Moveto [Codigo do Representante] typeIn "_crep" 
Do_It!
ClearAll
   
EndProc


;*******************************************************************************
;* Rotina p/ processar Db temporaria                                           *
;*******************************************************************************
Proc Processa()

If IsEmpty("VMINAS")
   Then Mensagem("NÆo existem registros a processar !")
        Return
EndIf        

{Ask} {\\Sistemas\\Cadastro\\Cidades}
Moveto [Cidade                 ] TypeIn "_cid"
Moveto [Uf                     ] TypeIn "_uf"
Moveto [Codigo_Cidade          ] TypeIn "_ibge"          
{Ask} {VMINAS} TypeIn "Fast"
Moveto [MUN                    ] TypeIn "_cid"
Moveto [UF                     ] TypeIn "_uf"
Moveto [COD_MUN                ] TypeIn "changeto _ibge"          
Do_It!
ClearAll

{Ask} {\\Sistemas\\Cadastro\\Cidades}
Moveto [Cidade                 ] TypeIn "_cid"
Moveto [Uf                     ] TypeIn "_uf"
Moveto [Codigo_Cidade          ] TypeIn "_ibge"          
{Ask} {\\Sistemas\\Cadastro\\Empresas}
Moveto [Codigo da Empresa      ] TypeIn "_cemp"
Moveto [Razao Social Empresa   ] TypeIn "_rz"          
Moveto [CGC Empresa            ] TypeIn "_cgc"
Moveto [Cidade Empresa         ] TypeIn "_cid"
Moveto [Uf Empresa             ] TypeIn "_uf"
{Ask} {VMINAS} TypeIn "Fast"
Moveto [NOME_EMP               ] TypeIn "changeto _rz"            
Moveto [CPF_CNPJ_EMP           ] TypeIn "changeto _cgc"            
Moveto [COD_MUN_EMP            ] TypeIn "changeto _ibge"          
Moveto [Codigo da Empresa      ] TypeIn "_cemp"
Do_It!
ClearAll

{Ask} {\\Sistemas\\Cadastro\\Cidades}
Moveto [Cidade                 ] TypeIn "_cid"
Moveto [Uf                     ] TypeIn "_uf"
Moveto [Codigo_Cidade          ] TypeIn "_ibge"          
{Ask} {\\Sistemas\\Cadastro\\Represen}
Moveto [Codigo do Representante] typeIn "_crep" 
Moveto [Razao Social Represent ] TypeIn "_rz"          
Moveto [Cidade Represent       ] TypeIn "_cid"
Moveto [Uf Represent           ] TypeIn "_uf"
{Ask} {VMINAS} TypeIn "Fast"
Moveto [NOME_MULTI             ] TypeIn "changeto _rz"            
Moveto [NOME_VEND              ] TypeIn "changeto _rz"            
Moveto [COD_MUN_MULTI          ] TypeIn "changeto _ibge"          
Moveto [Codigo do Representante] typeIn "_crep" 
Do_It!
ClearAll

dadosok=true
;---- Define arquivo TXT ------------------------------------------------------- 
ARQ     ="\\Sistemas\\Exporta\\Dados\\"+"VMINAS.TXT"
ARQ_ERRO="\\Sistemas\\Exporta\\Dados\\"+"VMINAS.ERR"
ARQ_TEMP="\\Sistemas\\Exporta\\Dados\\VESTE_MINAS_"+VSDGEMPRESA+"_"+
         MONTA_STRING(Format("D13",VSDGDTINI),"N","A",08)+"_"+MONTA_STRING(Format("D13",VSDGDTFIM),"N","A",08)+".TXT"
      
Deleta_Arquivo(ARQ)
Deleta_Arquivo(ARQ_ERRO)
Deleta_Arquivo(ARQ_TEMP)

Grava_TXT()

If Not dadosok
   Then 
        MSG=    "Foram detectados erros nesta gera‡Æo !        //"
        MSG=MSG+"Verificar relatorios de erros !                   // //"
        Mensagem(MSG)

        DISPOSITIVO()
        If OK<>"" 
           Then
                Tabela_ERRO=Cria_Temp(PrivDir())
                Copy "\\Base\\Sistemas\\Estoque\\RM_tx160" Tabela_ERRO
        
                {Tools} {ExportImport} {Import} {ASCII} {AppendDelimited} TypeIn ARQ_ERRO Enter
                TypeIn Tabela_ERRO Enter ClearAll
                OPCAOPAG="Todas"
                IMPRIREL(Tabela_ERRO,"1")
        
                Delete Tabela_ERRO
        
                MSG=MSG+"  * Caso queira gerar o arquivo os dados  com//"
                MSG=MSG+"    erros passam a constar no arquivo;//"
                MSG=MSG+"  * Caso contrario o arquivo nÆo ser   gerada,//"
                MSG=MSG+"    corrija os erros e gere novamente.            // //"
                MSG=MSG+"Deseja gerar o arquivo assim mesmo ?"
                If ConfGeral(MSG)
                   Then dadosok=true
                EndIf   
        EndIf   
EndIf   

COR_MENSAGEM="1"
If Not dadosok
   Then MSG="NÆo foi gerado o arquivo !"
        Mensagem(MSG) 
   Else ;--- Arquivo Texto gerado ------------------------------------------------------
        cmd="REN "+ARQ+" "+ARQ_TEMP
        ExecVise(cmd)

        MSG="Gerado o arquivo: // //["+SubStr(Directory(),1,2)+ARQ_TEMP+"] // //"
        MSG=MSG+"Para o envio do arquivo utilizar o aplicativo DROPBOX."
        MensagemMP(MSG,SubStr(Directory(),1,2)+ARQ_TEMP)
        
EndIf
Release Vars COR_MENSAGEM

Close Printer

Deleta_Arquivo(ARQ)
Deleta_Arquivo(ARQ_ERRO)

Clearall

EndProc    ;  (Processa)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Grava_TXT()
Private linha

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

  Barra(NR, RecNo())
  Aguarde("Aguarde, processando dados "+BARRA_STRING)

  linha=      "|"
  linha=linha+[NOME_EMP]+"|"
  linha=linha+MONTA_STRING([CPF_CNPJ_EMP],"N","","")+"|"
  linha=linha+StrVal([COD_MUN_EMP])+"|"
  linha=linha+MONTA_STRING([DT_E_S],"DTDMA","","")+"|"
  linha=linha+[NOME]+"|"
  linha=linha+MONTA_STRING([CPF_CNPJ],"N","","")+"|"
  linha=linha+StrVal([COD_MUN])+"|"
  linha=linha+[NOME_MULTI]+"|"
  linha=linha+StrVal([COD_MUN_MULTI])+"|"
  linha=linha+MONTA_STRING(Format("W12.2,EIC",[VL_TOTAL]),"ND","","")+"|"
  linha=linha+MONTA_STRING(StrVal(Int([QTDE])),"N","","")+"|"
  linha=linha+[NOME_VEND]+"|"
  linha=linha+[MUN]+"|"
  linha=linha+[UF]+"|"
  linha=linha+[NUM_DOC]
  
	FileWrite Append ARQ From linha+"\n"

EndScan
ClearAll

EndProc

;*******************************************************************************
;* Rotina grava registro c/ erro                                               *
;*******************************************************************************
Proc Grava_Erro(erro)
Private erro,s

dadosok=false

FileWrite Append ARQ_ERRO From erro

Moveto "Retorno"
EndProc

;******************************************************************************
;*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
   Case NUMALF = "ND":
        If MSTRING=""        Then MSTRING="0,00" EndIf
        If RTrim(MSTRING)="" Then MSTRING="0,00" EndIf
        For I From 1 to Len(MSTRING)
            If (Asc(SubStr(MSTRING,I,1)) >= 48) And
               (Asc(SubStr(MSTRING,I,1)) <= 57) Or
               (Asc(SubStr(MSTRING,I,1)) = 44)
               Then M_NOVO = M_NOVO + SubStr(MSTRING,I,1)
            EndIf
        EndFor
   Case NUMALF = "D":
        MSTRING=AlinhM(LTrim(StrVal(MSTRING)),10)
        M_NOVO = SubStr(MSTRING,7,4)+
                 SubStr(MSTRING,4,2)+
                 SubStr(MSTRING,1,2)
   Case NUMALF = "DTAMD":
        M_NOVO=AlinhM(StrVal( Year(MSTRING)),4)+
               AlinhM(StrVal(Month(MSTRING)),2)+
               AlinhM(StrVal(  Day(MSTRING)),2)
        Return M_NOVO        
   Case NUMALF = "DTDMA":
        M_NOVO=AlinhM(StrVal(  Day(MSTRING)),2)+
               AlinhM(StrVal(Month(MSTRING)),2)+
               AlinhM(StrVal( Year(MSTRING)),4) 
        Return M_NOVO        
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
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     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="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"     :Campo="TG_DTINI"
                    Case Campo="TG_DTINI"       :Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"       :Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_DTFIM":
     MSG_CAMPO="Informe a Data Final"
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

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

If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf

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

While True

  ShowDialog "Exporta‡Æo de dados Projeto Veste Minas" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   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

    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(VSDGDTINI) Or
     IsBlank(VSDGDTFIM) 
     Then Mensagem("Data Invalida !")
          Loop
  EndIf

  If VSDGEMPRESA="0000" Or
     IsBlank(VSDGEMPRESA)   
     Then Mensagem("Empresa Invalida !")
          Loop
  EndIf

  ;-- Liberar apenas para clientes que pagarem 100,00 -- passar para susi fazer cobran‡a, pegar confirma‡Æo do cliente por e-mail !
  ;-- Cliente tem que instalar programa para transferencia de dados ver no - SINVESD 
  ;-- Para o envio do arquivo ser  necess rio a instala‡Æo do aplicativo DROPBOX* que enviar  os arquivos at‚ a central.
  If SYS_CODIGO_CLIENTE="0000" Or
     SYS_CODIGO_CLIENTE="0217"
     Then
     Else Mensagem("Rotina nÆo liberada!// //Verificar com suporte/gerˆncia da VISE SISTEMAS,//para libera‡Æo.")
          Loop
  EndIf        

  AGUARDE("Aguarde, processando dados")
  Empty("VMINAS")

  Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
  While Novo_Dir_Trab()
    Seleciona()
  EndWhile

  Processa()

  LimpaRodape(0)

EndWhile
ClearAll
Release Vars All
Release Procs All
