;** Imp_PNS ********************************************************************
;*  Importacao de Pedidos Note->Server Vise Vendas                             *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 17/12/2008 por Anivel Augusto Rodrigues
;Ultima Alteracao: 13/07/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao PedidoG

;*******************************************************************************
;* Rotina Importa Pedidos                                                      *
;*******************************************************************************
Proc Pedidos()

If Not IsTable(VSDGDRIVE+PASTA+"\\PedidoC") Or
   Not IsTable(VSDGDRIVE+PASTA+"\\PedidoI") Or
   Not IsTable(VSDGDRIVE+PASTA+"\\PedidoV") Or
   Not IsTable(VSDGDRIVE+PASTA+"\\PedidoG")
   Then Mensagem("Na Pasta "+VSDGDRIVE+PASTA+" n„o contem Pedidos !")
        Return
EndIf

ClearAll

AGUARDE("Aguarde, Restaurando Pedidos")
SetDir "\\Sistemas\\Vendas"

LidoPed=0
SyncPed=0
ImpoPed=0
LidoCli=0
NregPed=0

NR = NRecords(VSDGDRIVE+PASTA+"\\PedidoC")
NregPed=NR
debug
View "\\Sistemas\\Cadastro\\Destinat"
View "PedidoC"
View "PedidoI"
View "PedidoG"
View "PedidoV"
View   VSDGDRIVE+PASTA+"\\Destinat"
View   VSDGDRIVE+PASTA+"\\PedidoI"
View   VSDGDRIVE+PASTA+"\\PedidoG"
View   VSDGDRIVE+PASTA+"\\PedidoV"
CoEdit VSDGDRIVE+PASTA+"\\PedidoC"
Scan
  Copytoarray REG_PEDIDOC
  Copytoarray REG_PEDIDOCTEMP

  Barra(NR, RecNo())
  Aguarde("Aguarde, Importando Pedidos "+BARRA_STRING)

  LidoPed=LidoPed+1

;**** Pedidos Original ****
  PEDORIG=REG_PEDIDOC["Codigo do Representante"]+"."+REG_PEDIDOC["Numero do Pedido"]
  PED_OK=True
  Moveto "PedidoC"
  Moveto [Numero Pedido Origem]
  Locate PEDORIG
  If RetVal
     Then While True
            If [Situacao do Pedido]<>"CANCELADO"
               Then If [Codigo do Representante]=REG_PEDIDOC["Codigo do Representante"] And
                       [Data de Emissao        ]=REG_PEDIDOC["Data de Emissao"]
                       Then SyncPed=SyncPed+1
                            PED_OK=False
                            QuitLoop
                    EndIf
            EndIf
            Skip
            If EOT() Then Quitloop EndIf
            Locate Next PEDORIG
            If Not RetVal
               Then QuitLoop
            EndIf
          EndWhile
  EndIf
  If Not PED_OK
     Then Moveto VSDGDRIVE+PASTA+"\\PedidoC"
          Loop
  EndIf

;**** Clientes ****
  ClienteOk=False
  Moveto "\\Sistemas\\Cadastro\\Destinat"
  Moveto [Codigo]
  Locate REG_PEDIDOC["Codigo"]
  If RetVal
     Then If [CGC]=REG_PEDIDOC["CGC"]
             Then CODCLI=[Codigo]
                  ClienteOk=True
          EndIf
  EndIf
  If Not ClienteOK
     Then LidoCli=LidoCli+1
          Moveto "\\Sistemas\\Cadastro\\Destinat"
          Moveto [CGC]
          Locate REG_PEDIDOC["CGC"]
          If RetVal
             Then CODCLI=[Codigo]
                  REG_PEDIDOCTEMP["Observacao do Pedido"]="** CLIENTE CODIGO ATUALIZADO ** "+
                                                          REG_PEDIDOCTEMP["Observacao do Pedido"]
             Else If Not CriaCliente()
                     Then CODCLI=""
                          REG_PEDIDOCTEMP["Observacao do Pedido"]="** CLIENTE NAO CADASTRADO ** "+
                                                                  REG_PEDIDOCTEMP["Observacao do Pedido"]
                     Else REG_PEDIDOCTEMP["Observacao do Pedido"]="** CLIENTE NOVO ** "+
                                                                  REG_PEDIDOCTEMP["Observacao do Pedido"]
                  EndIf
          EndIf
  EndIf

;**** Pedidos ****
  Moveto "PedidoC"
  Moveto [Numero do Pedido]
  While True
    End
    If IsBlank([Numero do Pedido])
       Then NPED="000001"
       Else NPED=AlinhM(StrVal(NumVal([Numero do Pedido])+1),6)
    EndIf
    Down
    [Numero do Pedido]=NPED
    If IsLockRecord()
       Then Del
       Else QuitLoop
    EndIf
  EndWhile

  ImpoPed=ImpoPed+1
  REG_PEDIDOCTEMP["Numero do Pedido"       ]=NPED
  REG_PEDIDOCTEMP["Numero Pedido Origem"   ]=PEDORIG
  REG_PEDIDOCTEMP["Codigo"                 ]=CODCLI
  REG_PEDIDOCTEMP["Numero_Controle_Dia"    ]=""
  
  CopyFromArray REG_PEDIDOCTEMP
  Controle_Dia()
  If Not ClienteOk Then
     [Codigo                  ]=""
     [Codigo do Representante ]=""
     [Codigo da Transportadora]=""
     [Codigo                  ]=REG_PEDIDOCTEMP["Codigo"                  ]
     [Codigo do Representante ]=REG_PEDIDOCTEMP["Codigo do Representante" ]
     [Codigo da Transportadora]=REG_PEDIDOCTEMP["Codigo da Transportadora"]
  EndIf
  UnLockRecord


;**** Itens ****
  Moveto VSDGDRIVE+PASTA+"\\PedidoI"
  Moveto [Numero do Pedido]
  Locate REG_PEDIDOC["Numero do Pedido"]
  If RetVal
     Then While [Numero do Pedido]=REG_PEDIDOC["Numero do Pedido"]
            Copytoarray REG_PEDIDOI
            REG_PEDIDOI["Numero do Pedido"]=NPED

            Moveto "PedidoI"
            End
            Down
            CopyfromArray REG_PEDIDOI
            UnLockRecord

            Moveto VSDGDRIVE+PASTA+"\\PedidoI"
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf

;**** Itens Grade ****
  Moveto VSDGDRIVE+PASTA+"\\PedidoG"
  Moveto [Numero do Pedido]
  Locate REG_PEDIDOC["Numero do Pedido"]
  If RetVal
     Then While [Numero do Pedido]=REG_PEDIDOC["Numero do Pedido"]
            Copytoarray REG_PEDIDOI
            REG_PEDIDOI["Numero do Pedido"]=NPED

            Moveto "PedidoG"
            End
            Down
            CopyfromArray REG_PEDIDOI
            UnLockRecord

            Moveto VSDGDRIVE+PASTA+"\\PedidoG"
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf


;**** Vencimentos ****
  Moveto VSDGDRIVE+PASTA+"\\PedidoV"
  Moveto [Numero do Pedido]
  Locate REG_PEDIDOC["Numero do Pedido"]
  If RetVal
     Then While [Numero do Pedido]=REG_PEDIDOC["Numero do Pedido"]
            Copytoarray REG_PEDIDOV
            REG_PEDIDOV["Numero do Pedido"]=NPED

            Moveto "PedidoV"
            End
            Down
            CopyfromArray REG_PEDIDOV
            UnLockRecord

            Moveto VSDGDRIVE+PASTA+"\\PedidoV"
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf

  Moveto VSDGDRIVE+PASTA+"\\PedidoC"

EndScan
Do_It!
ClearAll
EndProc


;*******************************************************************************
;* Rotina Importa Clientes                                                     *
;*******************************************************************************
Proc CriaCliente()

Moveto VSDGDRIVE+PASTA+"\\Destinat"
Moveto [Codigo]
Locate REG_PEDIDOC["Codigo"]
If RetVal
   Then Copytoarray REG_CLIENTE
   Else Moveto "\\Sistemas\\Cadastro\\Destinat"
        Return False
EndIf

Moveto "\\Sistemas\\Cadastro\\Destinat"
Moveto [Codigo]
If Not Proximo_Codigo("C")
   Then Return False
Endif
REG_CLIENTE["CODIGO"]=CODCLI
CopyFromArray REG_CLIENTE
UnLockRecord

Return True
EndProc


;*******************************************************************************
;* Rotina para Gerar Proximo Codigo no Intervalo                               *
;*******************************************************************************
Proc Proximo_Codigo(Tipo)
Private codreg, newreg

If PARAM_REUTILIZA<>"S"
   Then While True
          End
          CODCLI=AlinhM(StrVal(NumVal([Codigo])+1),4)
          Down
          [Codigo]=CODCLI
          If IsLockRecord()
             Then Del
             Else Locate CODCLI
                  Return True
          EndIf
        EndWhile
EndIf

Home
CodLivre=NumVal(PARAM_INICIAL)
Moveto [Codigo]
Locate IndexOrder by "Codigo" BestMatch AlinhM(PARAM_INICIAL,4)
While True
   If CodLivre<=NumVal(PARAM_FINAL) and CodLivre>=NumVal(PARAM_INICIAL)
      Then If CodLivre=NumVal([Codigo])
              Then CodLivre=NumVal([Codigo])+1
                   Skip
              Else Ins
                   CODCLI=Alinhm(StrVal(CodLivre),4)
                   [Codigo]=CODCLI
                   If IsLockRecord()
                      Then Del
                           Skip
                      Else Locate CODCLI
                           Return True
                   EndIf
           EndIf
           If EOT()
              Then Loop
           EndIf
      Else Mensagem("Fim dos codigos livres!!")
           Return False
   EndIf
EndWhile

EndProc

;*******************************************************************************
;* Rotina Substitui                                                            *
;*******************************************************************************
Proc Carrega_Parametros()
View NoWindow "\\Sistemas\\Cadastro\\P_Dest"
If IsEmpty("\\Sistemas\\Cadastro\\P_Dest")
   Then CoEditKey
        [Utiliza_CGC_Cliente]="N"
        Do_It!
EndIf
PARAM_CGC_CLIENTE   =[Utiliza_CGC_Cliente]
PARAM_CGC_FORNECEDOR=[Utiliza_CGC_Fornecedor]
PARAM_REUTILIZA     =[Reutiliza_Cod      ]
PARAM_INICIAL       =[Cliente_Inicial    ]
PARAM_FINAL         =[Cliente_Final      ]
PARAM_AUT           =[Utiliza_Autorizacao]
ClearImage

EndProc ; (Carrega_Parametros)







Proc CarregarLista()

DynArray Array_Registro[]

Wcs=0
If IsFile(VSDGDRIVE+"\\Dir.Txt")
   Then Deleta_Arquivo(VSDGDRIVE+"\\Dir.Txt")
EndIf
;cmd="c:\vise\util\Execvise Comando Dir "+VSDGDRIVE+PASTA+"\\PTNT*.ARJ /B >"+VSDGDRIVE+"\\Dir.Txt"
;Executa_Programa(cmd)
;Sleep 1000

comando="Dir "+VSDGDRIVE+PASTA+"\\PTNT*.ARJ /B >"+VSDGDRIVE+"\\Dir.Txt"
@ 22,00 Run NoRefresh comando
Sleep 1000

For i from 1 to 7
  If Not IsFile(VSDGDRIVE+"\\Dir.Txt")
     Then Sleep(1000)
          Loop
     Else Editor Open VSDGDRIVE+"\\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] = Completa(SubStr(ELINHA,1,Len(ELINHA)-1),40," ")+" "
          EndWhile
          CancelEdit

          QuitLoop
  EndIf
EndFor

Endproc

;*******************************************************************************
;* 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_Registro"      : Campo="NO"
            Case Campo="YES" Or Campo="NO": Campo="TG_Registro"
          EndSwitch
     Case Evento["KeyCode"] = 32 And Campo="TG_Registro":
          Temp=False
          If SubStr(Array_Registro[ControlValue("TG_Registro")],41,1)=" "
             Then Array_Registro[ControlValue("TG_Registro")]=SubStr(Array_Registro[ControlValue("TG_Registro")],1,40)+"X"
             Else Array_Registro[ControlValue("TG_Registro")]=SubStr(Array_Registro[ControlValue("TG_Registro")],1,40)+" "
          EndIf
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_Registro": Campo="YES"
                  EndSwitch
          EndIf
   EndSwitch
EndIf
Switch
  Case Campo="TG_Registro":
     MSG_CAMPO="Selecione o arquivo"
     TECLA="Barra de Espa‡o=Marca/Desmarca  "
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

Carrega_Parametros()

VSDGDRIVE=SubStr(Directory(),1,2)
PASTA="\\note\\importa"

While True

  CarregarLista()

  If DynArraySize(Array_Registro)=0
     Then Mensagem("Pasta '"+VSDGDRIVE+PASTA+"' n„o tem arquivos p/ importa‡„o !")
          QuitLoop
  EndIf

  ShowDialog "Importa‡„o/Pedidos Server<-Note Vise Vendas" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",32,
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 02,12   Height 14 Width 56

  @ 00,02 ?? "Lista de arquivos"
  PickDynArray @1,01 Height 08 width 53
   Columns 1
    Array_Registro
     Tag "TG_Registro"
      To ArrayElement

    Pushbutton @ 10,17 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 10,29 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If DirExists(PASTA)=0
     Then Mensagem("Pasta '"+VSDGDRIVE+PASTA+"' n„o existe !// //Impossivel importa‡„o !")
          Loop

  EndIf

 wcs=0
 For wc from 1 to DynArraySize(Array_Registro)

  If SubStr(Array_Registro[wc],41,1)<>"X"
     Then Loop
  EndIf
  wcs=wcs+1
  ARQ=VSDGDRIVE+"\\NOTE\\IMPORTA\\"+RTrim(SubStr(Array_Registro[wc],1,40))

  If Not IsFile(ARQ)
     Then MSG="Pacote p/ importa‡„o n„o encontrado !// //"
          MSG=MSG+"Arquivo em '"+ARQ+"'// //"
          MSG=MSG+"Verifique !"
          Mensagem(MSG)
          Loop
  EndIf

  Aguarde("Aguarde, Descompactando pacote de importa‡„o de "+ARQ)
  Deleta_Arquivo(VSDGDRIVE+PASTA+"\\*.DB")
  Deleta_Arquivo(VSDGDRIVE+PASTA+"\\*.PX")
  Deleta_Arquivo(VSDGDRIVE+PASTA+"\\*.MB")
  Sleep 2000

  CODREP=SubStr(Array_Registro[wc],5,4)
  View "\\Sistemas\\Cadastro\\Represen"
  Moveto [Codigo do Representante]
  Locate CODREP
  If Not RetVal
     Then Mensagem("Vendedor '"+CODREP+"' n„o Cadastrado !")
          ClearImage
          Loop
     Else NOMREP=[Nome Fantasia Represent]
  EndIf
  ClearImage

  Executa_Programa("arj e -y "+ARQ+" "+VSDGDRIVE+PASTA+"\\")
  Sleep 2000

  Aguarde("Aguarde, Importando Dados "+CODREP+" - "+NOMREP)


  ARQR=VSDGDRIVE+"\\NOTE\\IMPORTA\\"+
               "Importado PTNT"+CODREP+" em "+

                AlinhM(StrVal(Day(Today())),2)  +
                AlinhM(StrVal(Month(Today())),2)+"-"+

                SubStr(StrVal(Time()),1,2)+
                SubStr(StrVal(Time()),4,2)+

                ".ARJ"

  Pedidos()

  Deleta_Arquivo(VSDGDRIVE+PASTA+"\\*.DB")
  Deleta_Arquivo(VSDGDRIVE+PASTA+"\\*.PX")
  Deleta_Arquivo(VSDGDRIVE+PASTA+"\\*.MB")

  Executa_Programa("c:\\Execvise Renomeia "+ARQ+" \""+ARQR+"\"")
  Sleep 2000

  If NregPed=0
     Then MSG="N„o existem Pedidos no arquivo: "+ARQ+" !// //"
     Else MSG="Resumo do Arquivo:// //"
          MSG=MSG+Format("W5,EIC",LidoPed)+" pedidos lidos           //"
          MSG=MSG+Format("W5,EIC",SyncPed)+" pedidos j  Sincronizados//"
          MSG=MSG+Format("W5,EIC",ImpoPed)+" pedidos importados      // //"
          MSG=MSG+Format("W5,EIC",LidoCli)+" clientes atualizados    // //"
  EndIf
  MSG=MSG+"Se por algum motivo precisar repetir este processo//"
  MSG=MSG+"para este Vendedor, verificar arquivo: //"+ARQR
  Mensagem(MSG)

  LimpAguarde()

 EndFor

 If wcs=0
    Then MSG="Voce n„o selecionou qual(is) Pacote(s) p/ Importa‡„o !// //"
         MSG=MSG+"Observe como selecionar o arquivo desejado !// //"
         MSG=MSG+"Verifique !"
         Mensagem(MSG)
    Else Mensagem("Fim do Processo !")
 EndIf

EndWhile
ClearAll
Release Vars All
Release Procs All
