;** REN_XML   ******************************************************************
;*  Renomear arquivo XML NFSe para garregar no site                            *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 27/07/2020 por Anivel Augusto Rodrigues
;Ultima Alteracao:   /  /     por 
;Motivo Alteracao: 


;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Renomear()
private arquivo, arquivonovo, numdoc, pos, pos2, comando, linha, arquivotmp

NR     =tmarray
View "NotaC"

for wi from 1 to tmarray

  Barra(tmarray, wi)
  Aguarde("Aguarde, processando "+BARRA_STRING)

  arquivo=rtrim(substr(Array_Registro[wi],25,100))   

  numdoc="???"

  arquivotmp=Privdir()+"tmppdf.xml"
  Deleta_Arquivo(arquivotmp)

  comando="COP|"+AjustaPasta(VSDGPASTAORIG)+arquivo+"|"+arquivotmp
  FileWrite        PrivDir()+"funcao2.txt" From comando+"\n"
  ExecVisecf(PrivDir()+"funcao2.txt","")
   
  if not ExisteArquivo(arquivotmp,0)
     then
          Grava_Erro("Arquivo nÆo foi renomeado -> "+arquivo)  
          loop
  endif
  
  FileRead arquivotmp to Linha
  pos=searchfrom(":numero>",linha,1)
  if pos>0
     then pos2=searchfrom("</",linha,pos)  
          if pos2>0
             then numdoc=Ltrim(Rtrim(substr(linha,pos+8,(pos2-pos-8))))
          endif
  endif   
  release vars linha
  
  if not E_Numerico(numdoc)
     then
          Grava_Erro("Nao encontrado o numero da NFSe neste arquivo -> "+arquivo)  
          loop
  endif   
  numdoc=AlinhM(numdoc,6)
  
  moveto "NotaC"
  moveto [Codigo da Empresa]
  locate "0001",numdoc,"A"
  if not retval
     then Grava_Erro("Nao encontado o numero da NFSe no Sistema ["+numdoc+"] neste arquivo -> "+arquivo)
     else
          arquivonovo=[Nome Fantasia EmitDest]+" - "+Tira_CharNum([CGC])+" - "+numdoc+".XML"
         
          comando="COP|"+AjustaPasta(VSDGPASTAORIG)+arquivo+"|"+AjustaPasta(VSDGPASTADEST)+arquivonovo
  
          FileWrite        PrivDir()+"funcao2.txt" From comando+"\n"
          ExecVisecf(PrivDir()+"funcao2.txt","")
           
          if ExisteArquivo(AjustaPasta(VSDGPASTADEST)+arquivonovo,0)
             then Array_Registro[wi]=substr(Array_Registro[wi],1,4)+arquivonovo
          endif
          sleep 1000   
  endif    

endfor

LimpaRodape(0)
endproc

;*******************************************************************************
;* Rotina grava erros                                                          *
;*******************************************************************************
Proc Grava_Erro(erro)
Private erro

If Not ENCONTRADO_INCONSISTENCIA
   Then FileWrite        ARQ_ERRO From  "\027x0\015"+
                                        "** Relatorio Renomear arquivos XML NFSe .XML: "+
                                        " **\n\n"
EndIf   
FileWrite Append ARQ_ERRO From  erro+"\n"

ENCONTRADO_INCONSISTENCIA=True
EndProc

;************************************
;* ROTINA PARA Ler/Gravacao Opcao   *
;************************************
Proc ConfOpcoes(Opcao)
Private Opcao

Switch
  Case Opcao="Ler":
       If IsFile("IR_RXML.SC")
           Then Play "IR_RXML"
       EndIf
       If Not IsAssigned(VSDGPASTAORIG)    Then VSDGPASTA="C:\\"    EndIf
       If Not IsAssigned(VSDGPASTADEST)    Then VSDGPASTA="C:\\"    EndIf
  Case Opcao="Gravar":
       FileWrite        "IR_RXML.sc" From ";****** Variaveis de Configura‡„o Caminho Vise Informatica"+"\n"
       FileWrite Append "IR_RXML.sc" From "VSDGPASTAORIG="+Chr(34)+AjustaPasta(VSDGPASTAORIG)+Chr(34)+"\n"
       FileWrite Append "IR_RXML.sc" From "VSDGPASTADEST="+Chr(34)+AjustaPasta(VSDGPASTADEST)+Chr(34)+"\n"
EndSwitch
EndProc ;

;*******************************************************************************
;* Carregar Lista                                                              *
;*******************************************************************************
Proc AjustaPasta(s)
Private s,ns,i

ns=""
For i From 1 to Len(s)
 If SubStr(s,i,1)=Chr(92) and
    SubStr(s,i,2)<>(Chr(92)+Chr(92))
    Then ns=ns+Chr(92)
 EndIf
 ns=ns+SubStr(s,i,1)
EndFor
Return ns
EndProc

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc ChecaPastas()

if substr(VSDGPASTAORIG,len(VSDGPASTAORIG),1)<>chr(92) then VSDGPASTAORIG=VSDGPASTAORIG+chr(92) endif
if substr(VSDGPASTADEST,len(VSDGPASTADEST),1)<>chr(92) then VSDGPASTADEST=VSDGPASTADEST+chr(92) endif

;if not ExisteArquivo(VSDGPASTAORIG,0)
;   Then Mensagem("NÆo existe Pasta Origem "+VSDGPASTAORIG)
;        Loop
;EndIf
;if not ExisteArquivo(VSDGPASTADEST,0)
;   Then Mensagem("NÆo existe Pasta Destino !"+VSDGPASTADEST)
;        Loop
;EndIf

return true
endproc

;*******************************************************************************
;* Carregar Lista                                                              *
;*******************************************************************************
Proc CarregarLista(arquivo)
private arquivo

DynArray Array_Registro[]

Wcs=0
Lista_DiretorioD(VSDGPASTAORIG,arquivo,"C")

For i from 1 to 7
  If Not IsFile(PrivDir()+"Dir.Txt")
     Then Sleep(1000)
          Loop
     Else Editor Open PrivDir()+"Dir.Txt"
          If ErrorCode()=27
             Then Sleep 1000
                  Loop
          EndIf
          
          While True
            Extrair_Linha()
            If IsBlank(ELinha) Then QuitLoop EndIf
            wcs=wcs+1
            Array_Registro[wcs]=SubStr(ELINHA,1,Len(ELINHA)-1)
          EndWhile
          CancelEdit

          QuitLoop
  EndIf
EndFor
ArrayElement=1
EndProc


;*******************************************************************************
;* Rotina ShowDialog para Imprimir em arquivo                                  *
;*******************************************************************************
Proc SD_Arquivo(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento

Temp=True
TECLA    =""
MSG_CAMPO=""

If Disparo="OPEN"
   Then AoCriarShowDialog()
        TiraSombraShowDialog()
        Campo="YES"
EndIf

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Temp=False
   Switch
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_Pastaorig"          : Campo="NO"
            Case Campo="TG_Pastadest"          : Campo="TG_Pastaorig" 
            Case Campo="TG_ARQUIVOS"           : Campo="TG_Pastadest"
            Case Campo="YES" Or Campo="NO"     : Campo="TG_Pastaorig"
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_Pastaorig"   : Campo="TG_Pastadest"
                      VSDGPASTAORIG=ControlValue("TG_Pastaorig")

                    Case Campo="TG_Pastadest"   : Campo="TG_ARQUIVOS"
                      VSDGPASTADEST=ControlValue("TG_Pastadest")

                    Case Campo="TG_ARQUIVOS"    : Campo="YES"
                  EndSwitch
          EndIf
   EndSwitch
EndIf
Switch
  Case Campo="TG_Pastaorig"    : MSG_CAMPO="informe a pasta origem !" 
  Case Campo="TG_Pastadest"    : MSG_CAMPO="informe a pasta destino !"
  Case Campo="TG_ARQUIVOS"     : MSG_CAMPO="rela‡Æo de arquivos !"
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

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

sys_valor()

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

VSDGPASTAORIG=""
VSDGPASTADEST=""

ConfOpcoes("Ler")

;-- tratando arquivo txt -------------------------------------------------------

Tipo_Ext =".XML"

limparodape(0)
ExibeRodape(1,"Aguarde, carregando arquivo(s) DANFE NFSe .PDF")
CarregarLista("*.XML")

;-------------------------------------------------------------------------------
tmarray=dynarraysize(Array_Registro)

limparodape(0)
While True

 ShowDialog "Renomear XML NFSe .XML p/ carregar no Site" Proc "SD_Arquivo"
   Trigger "OPEN","ARRIVE","UPDATE","SELECT"
    Key "ENTER","ESC",-152,-31,-32,-25,-20,-49,-83,
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140    
     @ 03,12   Height 22 Width 80

    Label  @ 00,01 "Caminho pasta Origem .PDF gerado eDOC:" For "TG_Pastaorig"
    Accept @ 01,01 Width 73 "A100" Tag "TG_Pastaorig" to VSDGPASTAORIG

    Label  @ 02,01 "Caminho pasta Destino .PDF renomeado para o Site:" For "TG_Pastadest"
    Accept @ 03,01 Width 73 "A100" Tag "TG_Pastadest" to VSDGPASTADEST

    Label  @ 05,00 "~L~ista de arquivos"  For "TG_ARQUIVOS"
    PickDynArray @06,01 Height 11 width 73
     Columns 1
      Array_Registro
       Tag "TG_ARQUIVOS"
        To ArrayElement

    @ 17,01 ?? ltrim(format("W6,EIC",tmarray)+" arquivo(s)")

    Pushbutton @ 18,25 width 11 "~O~k"         OK     Default Value "Ok" Tag "YES"        To BottonValue
    Pushbutton @ 18,38 width 11 "~C~ancela"    CANCEL                    Tag "NO"         To BottonValue

 EndDialog
 If Not Retval
    Then QuitLoop
 EndIf

 Aguarde("Aguarde processo")
 
 if not ChecaPastas() then loop endif

 ConfOpcoes("Gravar")

 If DynArraySize(Array_Registro)=0
    Then Mensagem("NÆo existe arquivo de origem !")
         Loop
 EndIf

 ENCONTRADO_INCONSISTENCIA=false
 ARQ_ERRO= Privdir()+"RENXML.ERR"
 Deleta_Arquivo(ARQ_ERRO)

 LimpAguarde()
 LimpAguardes()

 Renomear()

 LimpAguarde()
 LimpAguardes()

 if ENCONTRADO_INCONSISTENCIA
    then
         MSG=" //"
         MSG=MSG+"Relat¢rio de ocorrˆncia no processo !// //"
         MSG=MSG+"Verificar o relat¢rio se houve inconsistˆncias !"
         mensagem(MSG)
 
         DISPOSITIVO_OPCAO="V"
         PDFZEBRA = False
         
         ImpriArq(ARQ_ERRO)
    else     
         Mensagem("Processo concluido !// // Conferir resultados na Pasta "+VSDGPASTADEST)

 endif

EndWhile
ClearAll
Release Vars All
Release Procs All
