;** 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 Substitui‡Ćo Editor novo arquivo por FileWrite

;*******************************************************************************
;* 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")
   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

Copy Drive+"\\Notaec"   "Tmp_nec"
Copy Drive+"\\Notaei"   "Tmp_nei"
Copy Drive+"\\Notaecp"  "Tmp_necp"
Copy Drive+"\\Notaecv"  "Tmp_necv"

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

NR = NRecords("Tmp_nec")
View "Cotacao"
View "NotaEC"
View "NotaEI"
View "NotaECP"
View "NotaECV"
View "Tmp_neCP"
View "Tmp_neCV"
View "Tmp_neI"
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
    Moveto [Numero do Lancamento]
    End
    If [Numero do Lancamento]=""
       Then NUMEROL="000001"
       Else NUMEROL=AlinhM(StrVal(NumVal([Numero do Lancamento])+1),6)
    EndIf
    Down
    [Numero do Lancamento]=NUMEROL
    If Not IsLockRecord()
       Then QuitLoop
    EndIf
  EndWhile

  Moveto [Codigo]
  If Not Busca_Lookup("Codigo",RegCab["Codigo"],"SM")
     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 SYS_CODIGO_CLIENTE="0001"
     Then RegCab["Codigo da Empresa"]    ="0005"
          RegCab["Nome Fantasia Empresa"]="MINASLACK COMERCIAL"
  EndIf
  If SYS_CODIGO_CLIENTE="0130"
     Then RegCab["Codigo da Empresa"]    ="0001"
          RegCab["Nome Fantasia Empresa"]="GW ENTRETELAS"
  EndIf
  If Not IsBlank(RegCab["Codigo da Tabela"])
     Then Moveto [Codigo da Tabela]
          If Not Busca_Lookup("Codigo da Tabela",RegCab["Codigo da Tabela"],"")
             Then RegCab["Codigo da Tabela"]=""
          EndIf
  EndIf
  If Not IsBlank(RegCab["Codigo do Representante"])
     Then Moveto [Codigo do Representante]
          If Not Busca_Lookup("Codigo do Representante",RegCab["Codigo do Representante"],"")
             Then RegCab["Codigo do Representante"]=""
          EndIf
  EndIf
  If Not IsBlank(RegCab["Codigo da Empresa"])
     Then Moveto [Codigo da Empresa]
          If Not Busca_Lookup("Codigo da Empresa",RegCab["Codigo da Empresa"],"")
             Then RegCab["Codigo da Empresa"]=""
          EndIf
  EndIf
  CopyFromDynArray RegCab
  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 Moveto [Codigo CCusto]
            If Not Busca_Lookup("Codigo CCusto",RegItem["Codigo CCusto"],"")
               Then RegItem["Codigo CCusto"]=""
            EndIf
    EndIf
    If Not IsBlank(RegItem["Aplicacao"])
       Then Moveto [Aplicacao]
            If Not Busca_Lookup("Aplicacao",RegItem["Aplicacao"],"")
               Then RegItem["Aplicacao"]=""
            EndIf
    EndIf
    If Not IsBlank(RegItem["Codigo da Cor_Tecido"])
       Then Moveto [Codigo da Cor_Tecido]
            If Not Busca_Lookup("Codigo da Cor_Tecido",RegItem["Codigo da Cor_Tecido"],"")
               Then RegItem["Codigo da Cor_Tecido"]=""
            EndIf
    EndIf
    If Not IsBlank(RegItem["Codigo do Item"])
       Then Moveto [Codigo do Item]
            If Not Busca_Lookup("Codigo do Item",RegItem["Codigo do Item"],"")
               Then RegItem["Codigo do Item"]=""
            Else If SYS_CODIGO_CLIENTE = "0102" Then    
               RegItem["Indice Preco de Venda"]=REG_BUSCA_LOOKUP["Indice Preco de Venda"]
            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 Moveto [Codigo do Historico]
            If Not Busca_Lookup("Codigo do Historico",RegCV["Codigo do Historico"],"")
               Then RegCV["Codigo do Historico"]=""
            EndIf
    EndIf
    If Not IsBlank(RegCV["Codigo Plano_Conta"])
       Then Moveto [Codigo Plano_Conta]
            If Not Busca_Lookup("Codigo Plano_Conta",RegCV["Codigo Plano_Conta"],"")
               Then RegCV["Codigo Plano_Conta"]=""
            EndIf
    EndIf
    If Not IsBlank(RegCV["Codigo CCusto"])
       Then Moveto [Codigo CCusto]
            If Not Busca_Lookup("Codigo CCusto",RegCV["Codigo CCusto"],"")
               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 Moveto [Codigo Plano_Conta]
            If Not Busca_Lookup("Codigo Plano_Conta",RegCP["Codigo Plano_Conta"],"")
               Then RegCP["Codigo Plano_Conta"]=""
            EndIf
    EndIf
    If Not IsBlank(RegCP["Codigo CCusto"])
       Then Moveto [Codigo CCusto]
            If Not Busca_Lookup("Codigo CCusto",RegCP["Codigo CCusto"],"")
               Then RegCP["Codigo CCusto"]=""
            EndIf
    EndIf
    CopyFromDynArray RegCP
    UnLockrecord

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

  Moveto "Tmp_neC"
EndScan
Do_It!
ClearAll
IMPNFE=True
Return True
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
                Moveto [Codigo do Item]
                If Not Busca_Lookup("Codigo do Item",[NotaEI->Codigo do Item],"")
                   Then Return
                EndIf

                Moveto [Codigo]
                If Not Busca_Lookup("Codigo",[NotaEC->Codigo],"")
                   Then 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                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA    =""
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_DTREF"         : Campo="TG_EMPRESA" 
            Case Campo="TG_TPDOCTO"       : Campo="TG_DTREF" 
            Case Campo="TG_DTINI"         : Campo="TG_TPDOCTO"
            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"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch                                                                       
                    Case Campo="TG_EMPRESA" : Campo="TG_DTREF"
                    Case Campo="TG_DTREF"   : 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_DRIVES"
                         EndIf
                    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

Proc Deleta_Arquivos()

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

EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
LimpAguarde()
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  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 Notas [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 47
   
    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA" To VSDGEMPRESA
    Accept @ 01,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMEMP" To VSDGNOMEMP

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

    Label  @ 04,00 "Tipo do Documento"  For "TG_TPDOCTO"
    Accept @ 05,01 Width 07 "A4"  Picture "!*!" Tag "TG_TPDOCTO" To VSDGTPDOCTO
    Accept @ 05,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMTPDOCTO"  To VSDGNOMTPDOCTO

    Label  @ 06,00 "Perˇodo Referente" For "TG_DTINI"
    Label  @ 07,00 "de" For "TG_DTINI"                                                                   
    Accept @ 07,04 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 07,17 "at‚" For "TG_DTFIM"
    Accept @ 07,22 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 00,37 "Drives:" For "TG_DRIVES"
    PickDynArrayIndex @ 01,38 Height 7 width 05
    Columns 1
    Array_Drives
    Tag "TG_DRIVES"
    To VSDGDRIVE

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

  ARQ_ARJ="PT_NFE_"+CODEMP+"_"+
          AlinhM(StrVal(Year(VSDGDTREF)),4) +
          AlinhM(StrVal(Month(VSDGDTREF)),2)+
          AlinhM(StrVal(Day(VSDGDTREF)),2)  +
          ".ARJ"

	Aguarde("Aguarde, Descompactando arquivos de "+VSDGDRIVE+"\\"+ARQ_ARJ)
  Executa_Programa("c:\\vise\\Varj.exe e -y "+VSDGDRIVE+"\\"+ARQ_ARJ+" "+VSDGDRIVE+"\\")
  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"
  
          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
  
  LimpAguarde()
  
EndWhile
ClearAll
Release Vars All
Release Procs All
