;** GerOFNFe **************************************************************************
;*  Gera OF p/ emissÆo de NF-e                      Auditoria                         *
;**************************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 14/07/2010 por Anivel Augusto Rodrigues
;Ultima Alteracao: 11/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Destinacao/Itens
;Ultima Alteracao: 30/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Diretorio PrivDir()
;Ultima Alteracao: 19/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Limpa CODIGO_USUARIO de origem
;Ultima Alteracao: 19/10/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes para exigir dados nos campos EMPRESA e DESTIN
;Ultima Alteracao: 30/11/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo de "ExecVise -> Vexe"
;Ultima Alteracao: 01/02/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP Item                       
;Ultima Alteracao: 10/04/2012 por Karina Andrade
;Motivo Alteracao: Ajustes CFOP Item  

;*******************************************************************************
;* Rotina para transferir dados de OF para outra OF                            *
;*******************************************************************************
Proc Transfere_Dados_OF()
ClearAll

AGUARDE("Aguarde, verificando dados em "+VSDGDRIVE)

For wwi From 1 to 4 
 Switch
   Case wwi=1 : id="C" 
   Case wwi=2 : id="I" 
   Case wwi=3 : id="V" 
   Case wwi=4 : id="D" 
 EndSwitch
 ArqOrig=VSDGDRIVE+"\\"+VSDGEMPRESA+"_"+NDOCTO+id
 
 ARQ=VSDGDRIVEPriv+NDOCTO+id
 If IsTable(ARQ)
    Then Delete ARQ
 EndIf   

 Xcopia_Arquivo(ARQOrig+".* "+ARQ+".*")
 Sleep(1000)
EndFor

TabelaC=VSDGDRIVEPriv+NDOCTO+"C"
TabelaI=VSDGDRIVEPriv+NDOCTO+"I"
TabelaV=VSDGDRIVEPriv+NDOCTO+"V"
TabelaD=VSDGDRIVEPriv+NDOCTO+"D"

If Not IsTable(TabelaC) Or
   Not IsTable(TabelaI) Or
   Not IsTable(TabelaV) Or
   Not IsTable(TabelaD)
   Then Mensagem("Na Unidade "+VSDGDRIVE+" n„o contem dados !")
        Return False
EndIf


View TabelaC
MSG="Documento p/ emissÆo da NF-e://"
MSG=MSG+Completa("//Documento: "+[Numero Nota Gerada]+"/"+[Serie Nota Gerada],50," ")
MSG=MSG+Completa("//EmissÆo  : "+Format("D13",[Data de Emissao]),50," ")
MSG=MSG+Completa("//Cliente  : "+[Codigo]+"/"+[Razao Social],50," ")
MSG=MSG+Completa("//Valor    : "+LTrim(Format("W12.2,EIC",[Valor Nota Fiscal])),50," ")
MSG=MSG+"// //Confirma restaurar este documento ?"
If Not ConfGeral(MSG)
   Then ClearAll
        Return False
EndIf      

AGUARDE("Aguarde, Restaurando dados de "+VSDGDRIVE)

CoEdit "FaturaI","FaturaV","FaturaC",
       "\\Sistemas\\Cadastro\\Destinat",
       TabelaC, TabelaI, TabelaV, TabelaD

Moveto TabelaD
CopyToArray RegClie
Moveto "\\Sistemas\\Cadastro\\Destinat"
While True
  Moveto [Codigo]
  Locate RegClie["Codigo"]
  If Not RetVal
     Then End
          Down
          If Not IsLockRecord()
             Then CopyFromArray RegClie 
                  [Tipo                  ]=RegClie["Tipo"] 
                  [Nome Fantasia EmitDest]=RegClie["Nome Fantasia EmitDest"]
                  [Tipo Pessoa           ]=RegClie["Tipo Pessoa"]
                  [Consumidor Final      ]=RegClie["Consumidor Final"]
                  [Razao Social          ]=RegClie["Razao Social"]
                  [Endereco              ]=RegClie["Endereco"]
                  [Bairro                ]=RegClie["Bairro"]
                  [CEP                   ]=RegClie["CEP"]
                  [Cidade                ]=RegClie["Cidade"]
                  [UF                    ]=RegClie["UF"]
                  [CGC                   ]=RegClie["CGC"]
                  [IE                    ]=RegClie["IE"]
                  [Telefone              ]=RegClie["Telefone"]
             Else Del
          EndIf
     Else If Not IsLockRecord()
             Then CopyFromArray RegClie
                  QuitLoop
          EndIf   
  EndIf
EndWhile
UnLockRecord

Moveto TabelaC
CopyToArray RegCab

Moveto "FaturaC"
While True
  End
  ORDFAT=[Numero da OF]
  If IsBlank(ORDFAT)
     Then ORDFAT="1"
     Else ORDFAT=StrVal(NumVal(ORDFAT)+1)
  EndIf
  ORDFAT=ALINHM(ORDFAT,6)
  Moveto [Numero da OF]
  Locate ORDFAT
  If Not Retval
     Then End Down
          RegCab["Numero da OF"            ]=ORDFAT
          RegCab["Codigo da Destinacao"    ]=""
          RegCab["Docto Nota Gerada"       ]=""
          RegCab["Serie Nota Gerada"       ]=""
          RegCab["Numero Nota Gerada"      ]=""
          RegCab["Numero Nota Original"    ]=""
          RegCab["Sistema Gerador"         ]=""
          RegCab["Numero Lancamento Cheque"]=""
          RegCab["Situacao do Pedido"      ]=""
          RegCab["Situacao do Orcamento"   ]=""
          RegCab["Situacao do Cliente"     ]=""
          RegCab["Numero Pedido_Orcamento" ]=""
          RegCab["Numero do Pedido"        ]=""
          RegCab["Numero do Orcamento"     ]=""
          RegCab["Numero_Carregamento"     ]=""
          RegCab["Codigo_Usuario"          ]=""
          RegCab["Numero_Controle_Dia"     ]=""
          CopyFromArray RegCab
          If Not IsLockRecord()
             Then QuitLoop
             Else Del
          EndIf
  EndIf
EndWhile
[Codigo da Empresa       ]=VSDGEMPRESA2
[Codigo da Destinacao    ]=VSDGDESTIN
Controle_Dia()

Moveto "FaturaI"
Moveto [Numero da Of]
Locate ORDFAT
If RetVal
   Then While True
          Del
          Locate Next ORDFAT
          If Not RetVal
             Then QuitLoop
          EndIf
        EndWhile
EndIf

Moveto "FaturaV"
Moveto [Numero da Of]
Locate ORDFAT
If RetVal
   Then While True
          Del
          Locate Next ORDFAT
          If Not RetVal
             Then QuitLoop
          EndIf
        EndWhile
EndIf

Moveto TabelaI
Scan
  CopyToArray RegIt
  
  Moveto "FaturaI"
  End
  Down
  RegIt["Numero da OF"]=ORDFAT
  CopyFromArray RegIt
  [Codigo do Item     ]=""
  [Codigo do Item     ]=RegIt["Codigo do Item"]
  [CFO                ]=[FaturaC->CFO         ]
;  Switch
;    Case [Tipo do Item]="P" And [CFO]="5102": [CFO]="5101"
;    Case [Tipo do Item]="T" And [CFO]="5101": [CFO]="5102"
;  EndSwitch
  UnLockRecord

  Moveto TabelaI
EndScan

Moveto TabelaV
Scan
  CopyToArray RegVen
  
  Moveto "FaturaV"
  End
  Down
  RegVen["Numero da OF"]=ORDFAT
  CopyFromArray RegVen
  UnLockRecord

  Moveto TabelaV
EndScan

Do_It!
ClearAll

Delete TabelaC
Delete TabelaI
Delete TabelaV
Delete TabelaD

ExecVise("DelF "+VSDGDRIVE+"\\ "+VSDGEMPRESA+"_"+NDOCTO+"*.*")

Limpaguarde()

Return True
EndProc  ; (Transfere_Dados_Nota)


;*******************************************************************************
;* Rotina para carregar lista de arquivos                                      *
;*******************************************************************************
Proc CarregarLista()
Wcs=0
Lista_DiretorioF(VSDGDRIVE+"\\",VSDGEMPRESA+"_*C.DB")
Sleep 1000

DynArray Array_Registro[]
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] = Completa(SubStr(ELINHA,1,Len(ELINHA)-1),12," ")+"  "
          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_EMPRESA"       : Campo="NO"
            Case Campo="TG_EMPRESA2"      : Campo="TG_EMPRESA"
            Case Campo="TG_DESTIN"        : Campo="TG_EMPRESA2"
            Case Campo="TG_DRIVES"        : Campo="TG_DESTIN"
            Case Campo="TG_Registro"      : Campo="TG_DRIVES"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case Evento["KeyCode"] = 32 And Campo="TG_Registro":
          Temp=False
          If SubStr(Array_Registro[ControlValue("TG_Registro")],14,1)=" "
             Then Array_Registro[ControlValue("TG_Registro")]=SubStr(Array_Registro[ControlValue("TG_Registro")],1,13)+"X"
             Else Array_Registro[ControlValue("TG_Registro")]=SubStr(Array_Registro[ControlValue("TG_Registro")],1,13)+" "
          EndIf
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"  : 
                         If Not IsBlank(VSDGEMPRESA)
                            Then Campo="TG_EMPRESA2"
                            Else VSDGNOMEMP=""
                         EndIf 
                    Case Campo="TG_EMPRESA2" :
                         If Not IsBlank(VSDGEMPRESA2)
                            Then Campo="TG_DESTIN"
                            Else VSDGNOMEMP2=""
                         EndIf                     
                    Case Campo="TG_DESTIN"   : 
                         If Not IsBlank(VSDGDESTIN)
                            Then Campo="TG_DRIVES"
                            Else VSDGNOMDESTIN=""
                         EndIf      
                    Case Campo="TG_DRIVES"   : Campo="TG_Registro"
                         VSDGDRIVE=ControlValue("TG_DRIVES")
                          CarregarLista()
                          If DynArraySize(Array_Registro)>0
                             Then Campo="TG_Registro"
                             Else Mensagem(VSDGDRIVE+" n„o tem arquivos p/ importa‡„o !")
                                  Campo="TG_EMPRESA"
                          EndIf
                    Case Campo="TG_Registro": Campo="YES"
                  EndSwitch
          EndIf
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA" Or Campo="TG_EMPRESA2":
     MSG_CAMPO="Informe a Empresa"
  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

VSDGEMPRESA =""
VSDGNOMEMP  =""
VSDGEMPRESA2=""
VSDGNOMEMP2 =""
VSDGDESTIN  =""
 
DynArray Array_Drives[]
SysInfo Drives To Array_Drives
;VSDGDRIVE=SubStr(Directory(),1,2)
VSDGDRIVE    ="N:"
VSDGDRIVEPriv=PrivDir()

DynArray Array_Registro[]

While True

  ShowDialog "Importa‡„o de documento p/ emissÆo NF-e" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",32,
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 17 Width 52

    Label  @ 00,00 "Empresa Origem"  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 "Empresa Destino"  For "TG_EMPRESA2"
    Accept @ 03,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA2" To VSDGEMPRESA2
    Accept @ 03,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMEMP2" To VSDGNOMEMP2

    Label  @ 04,01 "Destinacao"  For "TG_DESTIN"
    Accept @ 05,02 Width 06 "A3"  Picture "#*#" Tag "TG_DESTIN"    To VSDGDESTIN
    Accept @ 05,09 Width 33 "A30" Picture "!*!" Tag "TG_NOMDESTIN" To VSDGNOMDESTIN

    Label  @ 06,00 "Drives:" For "TG_DRIVES"
    PickDynArrayIndex @ 07,02 Height 5 width 05
     Columns 1
      Array_Drives
       Tag "TG_DRIVES"
        To VSDGDRIVE

    @ 06,09 ?? "Lista"
    PickDynArray @7,09 Height 05 width 23
     Columns 1
      Array_Registro
       Tag "TG_Registro"
        To ArrayElement

    Pushbutton @ 13,14 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 13,26 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGEMPRESA) Or
     IsBlank(VSDGEMPRESA2)
     Then Mensagem("Informe a Empresa Origem/Destino !")
          Loop
  EndIf        
  If IsBlank(VSDGDESTIN)
     Then Mensagem("Informe a Destina‡„o !")
          Loop
  EndIf        

  wcs=0
  For wc from 1 to DynArraySize(Array_Registro)
    If SubStr(Array_Registro[wc],14,1)<>"X"
       Then Loop
    EndIf
    wcs=wcs+1
    NDOCTO=SubStr(Array_Registro[wc],6,6)
    Transfere_Dados_OF()
  EndFor
  
  If wcs=0
    Then MSG="Voce n„o selecionou qual(is) arquivo(s) p/ Importa‡„o !// //"
         MSG=MSG+"Observe como selecionar o arquivo desejado !// //"
         MSG=MSG+"Verifique !"
         Mensagem(MSG)
    Else MENSAGEM("Opera‡„o Finalizada !// //Gerado nova(s) OF(s), verificar !")
  EndIf
  CarregarLista()
EndWhile
ClearAll
Release Vars All
Release Procs All
