;** RestauNE *******************************************************************
;*  Restaura‡ao das Notas Fiscais de Entrada                                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 30/09/1999 por Anivel Augusto Rodrigues
;Ultima Alteracao: 06/02/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes GW
;Ultima Alteracao: 31/08/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Validacoes
;Ultima Alteracao: 24/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 18/03/2010 por Cleber Alves
;Motivo Alteracao: Indice Preco de Venda
;Ultima Alteracao: 15/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Layout e Pacote
;Ultima Alteracao: 27/06/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo Arj para c:\Arj
;Ultima Alteracao: 01/12/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo de "ExecVise -> Vexe","Arj > Varj"
;Ultima Alteracao: 07/12/2011 por Karina Andrade
;Motivo Alteracao: Renomear Pacote ap¢s importa‡Æo concluida
;Ultima Alteracao: 08/12/2011 por Karina Andrade
;Motivo Alteracao: Nova nomeclatura pacote importado
;Ultima Alteracao: 03/01/2012 por Karina Andrade
;Motivo Alteracao: Ajustes nome pacote importado
;Ultima Alteracao: 07/05/2012 por Bruno Carvalho
;Motivo Alteracao: Add Sleep na rotina onde ‚ processado o ARJ
;Ultima Alteracao: 19/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo gravar drive padrao
;Ultima Alteracao: 03/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Layout                   
;Ultima Alteracao: 29/05/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustes para a extra‡Æo e finaliza‡Æo do arquivo de importa‡Æo
;Ultima Alteracao: 19/06/2015 por Kamila Gomes
;Motivo Alteracao: Inclusao tabela NotaEIA
;Ultima Alteracao: 01/07/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes tabela NotaEIA
;Ultima Alteracao: 21/05/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" -> [Indice Preco de Venda]
;Ultima Alteracao: 16/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Documentos Referenciados Entradas     
;Ultima Alteracao: 16/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado processo para gera‡Æo do [Numero do Lancamento] "Interno"    
;Ultima Alteracao: 18/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 05/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog 
;Ultima Alteracao: 04/07/2017 por Rafael Matos
;Motivo Alteracao: Substituido Busca_Lookup por GetRecord                  
;Ultima Alteracao: 04/08/2017 por Bruno Carvalho
;Motivo Alteracao: Ao mover para a "Tmp_ner" foi corrigido de RegCP para Regner  ao gravar o NUMEROL
;Ultima Alteracao: 08/08/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado Gera_Log()
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() 
;Ultima Alteracao: 13/19/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes empresa 0051
;Ultima Alteracao: 14/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
;Ultima Alteracao: 03/06/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ verificar a unidade de origem -> Verifica_Arquivo() e add vari vel de travamento PARAM_TRAVA_UNIDADE
;Ultima Alteracao: 05/07/2019 por Bruno Carvalho
;Motivo Alteracao: Permitir utilizar a mesma unidade de origem ao realizar importa‡Æo/exporta‡Æo de dados -> PARAM_TRAVA_UNIDADE=False p/ #0006# e #0029#
;Ultima Alteracao: 21/08/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes AgrupaBEntrada()
;Ultima Alteracao: 12/12/2019 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes p/ #0391# conforme ‚ utilizado na empresa #0388# 
;Ultima Alteracao: 14/01/2020 por Kamila Gomes
;Motivo Alteracao: Permitir utilizar a mesma unidade de origem ao realizar importa‡Æo/exporta‡Æo de dados -> PARAM_TRAVA_UNIDADE=False p/ #0266# 

;*******************************************************************************
;* ROTINA PROCESSA  -> realiza o processamento da Restaura‡ao                  *
;*******************************************************************************
Proc PROCESSA()

If Not IsTable(VSDGDRIVE+"\\NotaeC")  Or
   Not IsTable(VSDGDRIVE+"\\NotaeI")  Or
   Not IsTable(VSDGDRIVE+"\\NotaeCp") Or
   Not IsTable(VSDGDRIVE+"\\NotaeCv") Or
   Not IsTable(VSDGDRIVE+"\\NotaeIA") Or
   Not IsTable(VSDGDRIVE+"\\NotaeR")
   Then Mensagem("Na Unidade "+VSDGDRIVE+" n„o contem Notas !")
        Return False
EndIf

{Ask} TypeIn VSDGDRIVE+"\\NotaeC" Enter Check
Moveto [Codigo da Empresa    ] TypeIn "~VSDGEMPRESA.."
Moveto [Data de Entrada      ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
Moveto [Codigo do Documento  ] TypeIn "~VSDGTPDOCTO.."
Do_It!
ClearAll

If IsEmpty("Answer")
   Then Mensagem("Per¡odo ou Empresa Informado n„o ‚ o mesmo de origem !")
        Return False
EndIf

AGUARDE("Aguarde, Restaurando Notas de Entrada")
ClearAll

If IsTable("Tmp_nec")   Then Delete "Tmp_nec"   EndIf
If IsTable("Tmp_nei")   Then Delete "Tmp_nei"   EndIf
If IsTable("Tmp_necp")  Then Delete "Tmp_necp"  EndIf
If IsTable("Tmp_necv")  Then Delete "Tmp_necv"  EndIf
If IsTable("Tmp_neia")  Then Delete "Tmp_neia"  EndIf
If IsTable("Tmp_ner")   Then Delete "Tmp_ner"   EndIf

Copy Drive+"\\Notaec"   "Tmp_nec"

If (SYS_CODIGO_CLIENTE="0388" Or
    SYS_CODIGO_CLIENTE="0427" Or
    SYS_CODIGO_CLIENTE="0390" Or
    SYS_CODIGO_CLIENTE="0396" Or
    SYS_CODIGO_CLIENTE="0345" Or
    SYS_CODIGO_CLIENTE="0408" Or
    SYS_CODIGO_CLIENTE="0429" Or
    SYS_CODIGO_CLIENTE="0391")  
;;;;SYS_CODIGO_CLIENTE="0432")
    Then 
         AgrupaBEntrada()
    Else 
         Copy Drive+"\\Notaei"   "Tmp_nei"
EndIf

Copy Drive+"\\Notaecp"  "Tmp_necp"
Copy Drive+"\\Notaecv"  "Tmp_necv"
Copy Drive+"\\Notaeia"  "Tmp_neia"
Copy Drive+"\\Notaer"   "Tmp_ner"

NregLidos=0
NregGrava=0
NregExist=0
NregInval=0

NR = NRecords("Tmp_nec")
View "Cotacao"
View "NotaEC"
View "NotaEI"
View "NotaECP"
View "NotaECV"
View "NotaEIA"
View "NotaER"

View "Tmp_neI"
View "Tmp_neCP"
View "Tmp_neCV"
View "Tmp_neIA"
View "Tmp_neR"

View NOWINDOW "\\Sistemas\\Vendas\\Tbprcab"    ImageRights ReadOnly
View NOWINDOW "\\Sistemas\\Cadastro\\Historic" ImageRights ReadOnly
View NOWINDOW "\\Sistemas\\Cadastro\\Represen" ImageRights ReadOnly
View NOWINDOW "\\Sistemas\\Cadastro\\Empresas" ImageRights ReadOnly
View NOWINDOW "\\Sistemas\\Cadastro\\Cfo"      ImageRights ReadOnly
View NOWINDOW "\\Sistemas\\Ctacor\\CCusto"     ImageRights ReadOnly 
View NOWINDOW "\\Sistemas\\Estoque\\Aplic"     ImageRights ReadOnly 
View NOWINDOW "\\Sistemas\\Estoque\\Cores"     ImageRights ReadOnly 
View NOWINDOW "\\Sistemas\\Estoque\\Itens"     ImageRights ReadOnly 
View NOWINDOW "\\Sistemas\\Estoque\\Iten_Com"  ImageRights ReadOnly 

CoEdit "Tmp_neC"

Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Importando Notas "+BARRA_STRING)

  NregLidos=NregLidos+1

  NUMEROL_ORIGINAL=[Numero do Lancamento]
  CODIGO          =[Codigo             ]
  NOTAFISC        =[Numero do Documento]
  SERIE           =[Serie do Documento ]
  CopyToArray RegCab

  Moveto "NotaEC"
  Moveto [Codigo]
  Locate IndexOrder By "NotaEC01" CODIGO,NOTAFISC,SERIE
  If RetVal
     then NregExist=NregExist+1
          Moveto "Tmp_neC"
          Loop
  EndIf

  While True
    End
    Moveto [Numero do Lancamento]
    If Numero_Lancamento("Interno","Locked_Down")
       Then NUMEROL = PROXLANCTO_NLANC
            Release Vars PROXLANCTO_NLANC
            quitloop
    EndIf    
  EndWhile

 ;While True
 ;  End
 ;  Moveto [Numero do Lancamento]
 ;  If Numero_Lancamento("Interno","")
 ;     Then NUMEROL = PROXLANCTO_NLANC
 ;          Release Vars PROXLANCTO_NLANC
 ;  EndIf
 ;  Down
 ;  [Numero do Lancamento]=NUMEROL
 ;  If Not IsLockRecord()
 ;     Then QuitLoop
 ;  EndIf
 ;EndWhile

  GetRecord "\\Sistemas\\Cadastro\\Destinat" RegCab["Codigo"] To Reg_Busca_Lookup 
  If Not Retval
     Then NregInval=NregInval+1
          MSG=    "Emitente/Destinat rio n„o cadastrado !// //"
          MSG=MSG+"Nota: "+RegCab["Tipo do Documento"]+"/"+RegCab["Numero do Documento"]
          MSG=MSG+"   Codigo: "+RegCab["Codigo"]+"// //"
          MSG=MSG+"Lan‡amento inv lido, n„o ser  importado !"
          Mensagem(MSG)
          Del
          Moveto "Tmp_neC"
          Loop
  EndIf

  NregGrava=NregGrava+1
  RegCab["Numero do Lancamento"] = NUMEROL
  RegCab["Numero_Controle_Dia"]  = ""
  RegCab["Numero_Carregamento"]  = ""
  RegCab["Lookup_NotaC"]         = ""
  RegCab["Numero da OC"]         = ""
  If Not IsBlank(RegCab["Codigo da Tabela"])
     Then GetRecord "\\Sistemas\\Vendas\\Tbprcab" RegCab["Codigo da Tabela"] To Reg_Busca_Lookup
          If Not Retval
             Then RegCab["Codigo da Tabela"]=""
          EndIf
  EndIf
  If Not IsBlank(RegCab["Codigo do Representante"])
     Then GetRecord "\\Sistemas\\Cadastro\\Represen" RegCab["Codigo do Representante"] To Reg_Busca_Lookup
          If Not Retval
             Then RegCab["Codigo do Representante"]=""
          EndIf
  EndIf
  If Not IsBlank(RegCab["Codigo da Empresa"])
     Then GetRecord "\\Sistemas\\Cadastro\\Empresas" RegCab["Codigo da Empresa"] To Reg_Busca_Lookup
          If Not Retval
             Then RegCab["Codigo da Empresa"]=""
          EndIf
  EndIf
  CopyFromDynArray RegCab

  If SYS_CODIGO_CLIENTE="0051"
     Then [Codigo da Empresa]    ="0005"
  EndIf
  If SYS_CODIGO_CLIENTE="0130"
     Then [Codigo da Empresa]    ="0001"
  EndIf
  UnLockRecord

  ;;***** Itens da Nota *****
  Moveto "Tmp_neI"
  Moveto [Numero do Lancamento]
  Locate NUMEROL_ORIGINAL
  While [Numero do Lancamento]=NUMEROL_ORIGINAL
    CopyToDynArray RegItem
    Moveto "NotaEI"
    Moveto [Numero do Lancamento]
    End
    Down

    RegItem["Codigo da Empresa"]       =RegCab["Codigo da Empresa"]
    RegItem["Numero do Lancamento"]    =NUMEROL
    RegItem["Lookup_Codigo_Fornecedor"]=""
    RegItem["Lookup_Tabela_Preco"]     =""
    If Not IsBlank(RegItem["Codigo CCusto"])
       Then GetRecord "\\Sistemas\\Ctacor\\CCusto" RegItem["Codigo CCusto"] To Reg_Busca_Lookup
            If Not Retval
               Then RegItem["Codigo CCusto"]=""
            EndIf
    EndIf
    If Not IsBlank(RegItem["Aplicacao"])
       Then GetRecord "\\Sistemas\\Estoque\\Aplic" RegItem["Aplicacao"] To Reg_Busca_Lookup
            If Not Retval
               Then RegItem["Aplicacao"]=""
            EndIf
    EndIf
    If Not IsBlank(RegItem["Codigo da Cor_Tecido"])
       Then GetRecord "\\Sistemas\\Estoque\\Cores" RegItem["Codigo da Cor_Tecido"] To Reg_Busca_Lookup
            If Not Retval
               Then RegItem["Codigo da Cor_Tecido"]=""
            EndIf
    EndIf
    If Not IsBlank(RegItem["Codigo do Item"])
       Then GetRecord "\\Sistemas\\Estoque\\Itens" RegItem["Codigo do Item"] To Reg_Busca_Lookup
            If Not Retval
               Then RegItem["Codigo do Item"]=""
               Else If SYS_CODIGO_CLIENTE = "0102" 
                       Then GetRecord "\\Sistemas\\Estoque\\Iten_Com" RegItem["Codigo do Item"] To REG_ITEMCOMP        
                            If RetVal
                               Then RegItem["Indice Preco de Venda"] = REG_ITEMCOMP["Indice Preco de Venda"]
                               Else RegItem["Indice Preco de Venda"] = 0
                            EndIf  
                    EndIf
            EndIf  
    EndIf
    CopyFromDynArray RegItem
    UnLockrecord
    Cotacao()

    Moveto "Tmp_neI"
    Skip
    If EOT() Then QuitLoop EndIf
  EndWhile

  ;;***** A Vista da Nota *****
  Moveto "Tmp_neCV"
  Moveto [Numero do Lancamento]
  Locate NUMEROL_ORIGINAL
  While [Numero do Lancamento]=NUMEROL_ORIGINAL
    CopyToDynArray RegCV
    Moveto "NotaECV"
    Moveto [Numero do Lancamento]
    End
    Down

    RegCV["Codigo da Empresa"]         =RegCab["Codigo da Empresa"]
    RegCV["Numero do Lancamento"]      = NUMEROL
    RegCV["Numero do Lancamento CxBc"] = ""
    RegCV["Codigo da Conta"]           = ""
    RegCV["Tipo da Conta"]             = ""
    RegCV["Descricao da Conta"]        = ""

    If Not IsBlank(RegCV["Codigo do Historico"])
       Then GetRecord "\\Sistemas\\Cadastro\\Historic" RegCV["Codigo do Historico"] To Reg_Busca_Lookup
            If Not Retval
               Then RegCV["Codigo do Historico"]=""
            EndIf
    EndIf
    If Not IsBlank(RegCV["Codigo Plano_Conta"])
       Then GetRecord "\\Sistemas\\Ctacor\\Plcontas" RegCV["Codigo Plano_Conta"] To Reg_Busca_Lookup
            If Not Retval
               Then RegCV["Codigo Plano_Conta"]=""
            EndIf
    EndIf
    If Not IsBlank(RegCV["Codigo CCusto"])
       Then GetRecord "\\Sistemas\\Ctacor\\CCusto" RegCV["Codigo CCusto"] To Reg_Busca_Lookup
            If Not Retval
               Then RegCV["Codigo CCusto"]=""
            EndIf
    EndIf
    CopyFromDynArray RegCV
    UnLockrecord

    Moveto "Tmp_neCV"
    Skip
    If EOT() Then QuitLoop EndIf
  EndWhile

  ;;***** A Prazo da Nota *****
  Moveto "Tmp_neCP"
  Moveto [Numero do Lancamento]
  Locate NUMEROL_ORIGINAL
  While [Numero do Lancamento]=NUMEROL_ORIGINAL
    CopyToDynArray RegCP
    Moveto "NotaECP"
    Moveto [Numero do Lancamento]
    End
    Down

    RegCP["Codigo da Empresa"]        =RegCab["Codigo da Empresa"]
    RegCP["Numero do Lancamento"]     =NUMEROL
    RegCP["Numero Lancamento Titulos"]=""
    RegCP["Codigo da Conta"]          =""
    RegCP["Descricao da Conta"]       =""
    RegCP["Lookup_Feriado"]           =BlankDate()
    If Not IsBlank(RegCP["Codigo Plano_Conta"])
       Then GetRecord "\\Sistemas\\Ctacor\\Plcontas" RegCP["Codigo Plano_Conta"] To Reg_Busca_Lookup
            If Not Retval
               Then RegCP["Codigo Plano_Conta"]=""
            EndIf
    EndIf
    If Not IsBlank(RegCP["Codigo CCusto"])
       Then GetRecord "\\Sistemas\\Ctacor\\CCusto" RegCP["Codigo CCusto"] To Reg_Busca_Lookup
            If Not Retval
               Then RegCP["Codigo CCusto"]=""
            EndIf
    EndIf
    CopyFromDynArray RegCP
    UnLockrecord

    Moveto "Tmp_neCP"
    Skip
    If EOT() Then QuitLoop EndIf
  EndWhile
  
  ;;***** Inf. Adic. da Nota *****
  Moveto "Tmp_neIA"
  Moveto [Numero_do_Lancamento]
  Locate NUMEROL_ORIGINAL
  While [Numero_do_Lancamento]=NUMEROL_ORIGINAL
    CopyToDynArray RegNeIA
    Moveto "NotaEIA"
    Moveto [Numero_do_Lancamento]
    End
    Down

    RegNeIA["Numero_do_Lancamento"]    =NUMEROL
    
    CopyFromDynArray RegNeIA
    UnLockrecord

    Moveto "Tmp_neIA"
    Skip
    If EOT() Then QuitLoop EndIf
  EndWhile
  
  ;;***** documentos referenciados
  Moveto "Tmp_ner"
  Moveto [Numero do Lancamento]
  Locate NUMEROL_ORIGINAL
  While [Numero do Lancamento]=NUMEROL_ORIGINAL
    CopyToDynArray Regner 
    Moveto "NotaER"
    Moveto [Numero do Lancamento]
    End
    Down

    Regner["Numero do Lancamento"]=NUMEROL
    
    CopyFromDynArray Regner 
    UnLockrecord

    Moveto "Tmp_neR"
    Skip
    If EOT() Then QuitLoop EndIf
  EndWhile

  Moveto "Tmp_neC"
EndScan
Do_It!
ClearAll
IMPNFE=True
Return True
EndProc

;*******************************************************************************
;* Rotina para Agrupar os Itens                                   *
;*******************************************************************************
Proc AgrupaBEntrada()
 
If IsTable("\\sistemas\\Estoque\\EITEMP")
   Then Delete "\\sistemas\\Estoque\\EITEMP"
Endif
                                                    
TabelaEI=Drive+"\\Notaei"

Copy  TabelaEI "\\sistemas\\Estoque\\EITEMP"

Coedit "EITEMP"
Scan
  CODNOVO=[Codigo do Item]
     
  if SYS_CODIGO_CLIENTE="0388" Or
     SYS_CODIGO_CLIENTE="0427" Or
     SYS_CODIGO_CLIENTE="0390" Or
     SYS_CODIGO_CLIENTE="0396" Or
     SYS_CODIGO_CLIENTE="0345" Or
     SYS_CODIGO_CLIENTE="0408" Or
     SYS_CODIGO_CLIENTE="0391" Or
;;;;;SYS_CODIGO_CLIENTE="0432" Or
     SYS_CODIGO_CLIENTE="0429"   
     Then
          If [Tipo do Item        ]= "T" And [Codigo da Cor_Tecido]<> ""
             then CODNOVO=PegaCodigoRaiz(CODNOVO) 
          endif   

          If [Tipo do Item        ]= "P" And [Codigo da Cor_Tecido]<> "" and 
             (SYS_CODIGO_CLIENTE="0388" or SYS_CODIGO_CLIENTE="0427"  or SYS_CODIGO_CLIENTE="0429" or SYS_CODIGO_CLIENTE="0391")
             then CODNOVO=PegaCodigoRaiz(CODNOVO) 
          endif   

          If [Tipo do Item        ]= "M" And [Codigo da Cor_Tecido]<> "" and 
          (SYS_CODIGO_CLIENTE="0388" or SYS_CODIGO_CLIENTE="0427" or SYS_CODIGO_CLIENTE="0391")
             then CODNOVO=PegaCodigoRaiz(CODNOVO) 
          endif   
  EndIf
   
  [Codigo do Item]=CODNOVO 
EndScan
Do_It!

ClearAll

Copy "\\Sistemas\\Estoque\\EITEMP" "\\Sistemas\\Estoque\\Tmp_neI"
ClearAll
Delete "EITEMP" 

EndProc

;*******************************************************************************
;* Atualiza Cotacao de Preco                                                   *
;*******************************************************************************
Proc COTACAO()
If [NotaEC->Tipo de Operacao]<>"C"
   Then Return
EndIf

If Not IsBlank([Codigo do Item]) And [Tipo do Item]<>"C" And [Tipo do Item]<>"D"
   Then Moveto "Cotacao"
        Moveto [Codigo do Item]
        Locate [NotaEI->Codigo do Item],[NotaEC->Codigo]
        If Not RetVal
           Then
                GetRecord "\\Sistemas\\Estoque\\Itens" [NotaEI->Codigo do Item] To Reg_Busca_Lookup
                If Not Retval
                   Then UnLockRecord
                        Return
                EndIf

                GetRecord "\\Sistemas\\Cadastro\\Destinat" [NotaEC->Codigo] To Reg_Busca_Lookup
                If Not Retval
                   Then UnLockRecord
                        Return
                EndIf

                End Down
                [Codigo do Item]=[NotaEI->Codigo do Item]
                [Codigo        ]=[NotaEC->Codigo        ]
        Endif
        If [NotaEI->Valor Desconto Total]>0
           Then [Valor Unitario]=[NotaEI->Preco Unitario]-([NotaEI->Valor Desconto Total]/[NotaEI->Quantidade])
           Else [Valor Unitario]=[NotaEI->Preco Unitario]
        EndIf
        [Data de Compra     ]=[NotaEC->Data de Entrada    ]
        [Quantidade         ]=[NotaEI->Quantidade         ]
        [Numero do Documento]=[NotaEC->Numero do Documento]
        [Tipo do Documento  ]=[NotaEC->Tipo do Documento  ]
        UnLockRecord
EndIf
EndProc

;*******************************************************************************
;* ROTINA PARA DELETAR ARQUIVOS                                                *
;*******************************************************************************
Proc Deleta_Arquivos()

Deleta_Arquivo(VSDGDRIVE+"\\NOTAEC.*")
Deleta_Arquivo(VSDGDRIVE+"\\NOTAEI.*")
Deleta_Arquivo(VSDGDRIVE+"\\NOTAECP.*")
Deleta_Arquivo(VSDGDRIVE+"\\NOTAECV.*")
Deleta_Arquivo(VSDGDRIVE+"\\NOTAEIA.*")
Sleep 2000 

EndProc ;Deleta_Arquivos()

;*******************************************************************************
;* Rotina para gerar o log de registro por usu rio                             *
;*******************************************************************************
Proc Gera_Log()          
;---- Gravando LOG ---------------------------------------------------
If VSDGDTINI<>BlankDate()
   Then AUX_DATA = ", periodo de "+StrVal(VSDGDTINI)+" ate "+StrVal(VSDGDTFIM)
   Else AUX_DATA = ", periodo ate "+StrVal(VSDGDTFIM)
EndIf   

If VSDGDTREF<>BlankDate()
   Then AUX_DTREF = ", data de transa‡„o em "+StrVal(VSDGDTREF)
   Else AUX_DTREF = ""
EndIf

AUX_OPCAO = ""
If VSDGTPDOCTO<>"" Then AUX_OPCAO = ", Tipo do Documento: "+VSDGTPDOCTO+" "+VSDGNOMTPDOCTO EndIf

Grava_LogEx("RestauNE")  

EndProc ;Gera_Log()   

;*******************************************************************************
;* Rotina para Verificar o Nome do Arquivo                                     *
;*******************************************************************************          
Proc Verifica_Arquivo()
Private Array_Arquivo,wcs,ELinha,MSG

Aguarde("Aguarde, verificando o arquivo")          
          
;ARQ_ARJ="PT_NFE_"+CODEMP+"_"+
;        AlinhM(StrVal(Year(VSDGDTREF)),4) +
;        AlinhM(StrVal(Month(VSDGDTREF)),2)+
;        AlinhM(StrVal(Day(VSDGDTREF)),2)  +
;        ".ARJ"          
          
DynArray Array_Arquivo[]

Wcs=0
If IsFile(PrivDir()+"Dir.Txt")
   Then Deleta_Arquivo(PrivDir()+"Dir.Txt")
EndIf

Lista_DiretorioF(VSDGDRIVE+"\\","PT*.ARJ")

If Not IsFile(PrivDir()+"Dir.Txt")
   Then Sleep(1000)
        Return False
   Else Editor Open PrivDir()+"Dir.Txt"
        If ErrorCode()=27
           Then Sleep 1000
                Return False
        EndIf
        wcs=0
        While True
          Extrair_Linha()
          If IsBlank(ELinha) Then QuitLoop EndIf
          wcs=wcs+1
          Array_Arquivo[wcs] = Completa(SubStr(ELINHA,1,Len(ELINHA)-1),40," ")+" "
        EndWhile
        CancelEdit
EndIf     

ARQ_ARJ = ""
If DynArraySize(Array_Arquivo)=0
   Then Mensagem("Arquivo de importa‡Æo nÆo foi localizado!") 
        Return False
   Else MSG = ""
        For wi From 1 To DynArraySize(Array_Arquivo)
          If Upper(SubStr(Array_Arquivo[wi],1,2))="PT"   And
             Upper(SubStr(Array_Arquivo[wi],5,2))="NE"   And
             Upper(SubStr(Array_Arquivo[wi],8,4))=CODEMP And
             Upper(SubStr(Array_Arquivo[wi],13,4))=AlinhM(StrVal(Year(VSDGDTREF)),4)  And
             Upper(SubStr(Array_Arquivo[wi],17,2))=AlinhM(StrVal(Month(VSDGDTREF)),2) And
             Upper(SubStr(Array_Arquivo[wi],19,2))=AlinhM(StrVal(Day(VSDGDTREF)),2)
             Then ARQ_ARJ = Array_Arquivo[wi]
                  If PARAM_TRAVA_UNIDADE
                     Then If Upper(SubStr(Array_Arquivo[wi],4,1)) = SubStr(Upper(Directory()),1,1)
                             Then MSG = "NÆo ‚ poss¡vel importar o arquivo na unidade de origem!"
                             Else MSG = ""           
                          EndIf
                     Else QuitLoop     
                  EndIf
          EndIf
        EndFor
        If MSG<>""
           Then Mensagem(MSG)
                Return False
        EndIf   
        Release Vars Array_Arquivo,MSG
        If ARQ_ARJ=""
           Then Mensagem("Arquivo de importa‡Æo nÆo foi localizado!")
                Return False
        EndIf
EndIf

Return True                  
                  
EndProc ;Verifica_Arquivo()                

;*******************************************************************************
;* 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"] <= -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"] =  27:
          Temp=False                                                           
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_TPDOCTO"       : Campo="TG_EMPRESA" 
            Case Campo="TG_DTINI"         : Campo="TG_TPDOCTO"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_DTREF"         : Campo="TG_DTFIM" 
            Case Campo="TG_DRIVES"        : Campo="TG_DTREF"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch                                                                       
                    Case Campo="TG_EMPRESA" : Campo="TG_TPDOCTO"
                    Case Campo="TG_TPDOCTO" : Campo="TG_DTINI" 
                    Case Campo="TG_DTINI"   :
                         If Isblank(VSDGDTINI)
                            Then Mensagem("Data inicial invalida !")
                                 Campo="TG_DTINI"
                            Else Campo="TG_DTFIM"
                         EndIf
                    Case Campo="TG_DTFIM"   :
                         If IsBlank(VSDGDTFIM) or
                            VSDGDTFIM<VSDGDTINI
                            Then Mensagem("Data final invalida !")
                            Else Campo="TG_DTREF"
                         EndIf

                    Case Campo="TG_DTREF"   : Campo="TG_DRIVES"
                    Case Campo="TG_DRIVES"   :
                         VSDGDRIVE=ControlValue("TG_DRIVES")
                         Campo="YES"
                  EndSwitch
          EndIf
   EndSwitch
EndIf
Switch
  Case Campo="TG_DTREF" :
       MSG_CAMPO="Informe a data da Transa‡„o"
  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()
SYS_VALOR()
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf

If SYS_CODIGO_CLIENTE = "0006" Or
   SYS_CODIGO_CLIENTE = "0029" Or
   SYS_CODIGO_CLIENTE = "0266"
   Then PARAM_TRAVA_UNIDADE = False
   Else PARAM_TRAVA_UNIDADE = True
EndIf
VSDGEMPRESA         = ""
VSDGTPDOCTO         = ""
VSDGDTINI           = BlankDate()
VSDGDTFIM           = Today()-1
VSDGDTREF           = BlankDate()

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

While True
  ShowDialog "Importa‡„o de Notas de Entrada [Estoque]" 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 13 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 "Tipo do Documento"  For "TG_TPDOCTO"
    Accept @ 03,01 Width 07 "A4"  Picture "!*!" Tag "TG_TPDOCTO" To VSDGTPDOCTO
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMTPDOCTO"  To VSDGNOMTPDOCTO

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

    Label  @ 06,00 "Data Transa‡„o" For "TG_DTREF"
    Accept @ 07,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTREF" To VSDGDTREF

    Label  @ 00,35 "Drives:" For "TG_DRIVES"
    PickDynArrayIndex @ 01,36 Height 4 width 33
     Columns 7
      Array_Drives
       Tag "TG_DRIVES"
        To VSDGDRIVE

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

  EndDialog
  DRIVE=VSDGDRIVE
  If Not RetVal Then QuitLoop EndIf
  IMPNFE=False
  
  SetDir "\\Sistemas\\Estoque"
  
  Deleta_Arquivos()
  
  If VSDGEMPRESA="" 
    Then CODEMP="0000" 
    Else CODEMP=VSDGEMPRESA
  EndIf

  If Not Verifica_Arquivo()
     Then Loop 
  EndIf
  
  Gera_Log()
  Aguarde("Aguarde, descompactando o arquivo "+ARQ_ARJ)
  FileWrite PrivDir()+"funcmd.txt" From "CMD|"+"c:\\vise\\Varj.exe e -y "+VSDGDRIVE+"\\"+ARQ_ARJ+" "+VSDGDRIVE+"\\"+"\n"        
  ExecVisecf(PrivDir()+"funcmd.txt","")
  Sleep 3000
  
  If Processa()
     Then MSG="Opera‡ao Finalizada.//"
          MSG=MSG+"//Registros Lidos        : "+Format("W5,EIC",NregLidos)
          MSG=MSG+"//Registros Gravados     : "+Format("W5,EIC",NregGrava)
          MSG=MSG+"//Registros j  Existentes: "+Format("W5,EIC",NregExist)
          MSG=MSG+"//Registros Inv lidos    : "+Format("W5,EIC",NregInval)
          MSG=MSG+"// //NÆo esque‡a de Reprocessar o Estoque !"
          Mensagem(MSG)

  EndIf
  Deleta_Arquivos()
  LimpAguarde()
  
  If IMPNFE
     Then ARQ_IMP=VSDGDRIVE+"\\IMPORTADO_"+
                  Substr(ARQ_ARJ,1,20)+"_"+
                  Substr(Time(),1,2)  +
                  Substr(Time(),4,2)  +
                  Substr(Time(),7,2)  +
                  ".ARJ"
  
          Aguarde("Aguarde, renomeando arquivo importado")
          ExecVise("REN "+VSDGDRIVE+"\\"+ARQ_ARJ+" \""+ARQ_IMP+"\"")
          Sleep 1000     
          
          MSG="Opera‡ao Finalizada.// //"
          MSG=MSG+"NÆo esque‡a de Reprocessar o Estoque !"
     Else MSG="Opera‡„o Cancelada !"
  EndIf   
  Mensagem(MSG)

  If IsTable("Tmp_nec")  Then Delete "Tmp_nec"   EndIf
  If IsTable("Tmp_nei")  Then Delete "Tmp_nei"   EndIf
  If IsTable("Tmp_necp") Then Delete "Tmp_necp"  EndIf
  If IsTable("Tmp_necv") Then Delete "Tmp_necv"  EndIf
  If IsTable("Tmp_neia") Then Delete "Tmp_neia"  EndIf
  LimpAguarde()
  
EndWhile
ClearAll
Release Vars All
Release Procs All
