;** SW_Clie  *******************************************************************
;*  Consulta de CLientes                                                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 13/09/2019 por Anivel Augusto Rodrigues
;Ultima Alteracao:   /  /     por 
;Motivo Alteracao: 

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc SW_Clie_CHAVE()
While True      
     
;** Criando Registro Master **
  While True
     End
     SW_Clie_SeqMaster=[Sequencia Master]+1
     CtrlPgDn
     [Sequencia Master]=SW_Clie_SeqMaster
     LockRecord
     If RetVal Then QuitLoop EndIf
  EndWhile

  [PesquisaOpcao         ]=VSDGCOPPESQ
  [PesquisaTexto         ]=VSDGCTXPESQ

  Moveto [PesquisaTexto]

  While True

  TECLA=" Esc=Retornar  Enter=Avan‡ar  "
  MSGCAMPO=""
  switch
    case field()="PesquisaTexto"         : MSGCAMPO=" Informe o valor a pesquisar (..), [F1]=Op‡äes de pesquisa"
    case field()="PesquisaLookup_Cidades": MSGCAMPO="Cidade, [F1]=Consultar tabela"
  endswitch

  if substr([PesquisaOpcao],1,1)="6"
     then titcidade               ="Cidade"
          [PesquisaLookup_Cidades]=VSDGCCIDADE
     
     else titcidade               =""
          [PesquisaLookup_Cidades]=""
  endif        


  Prompt TECLA
  SetaCorRegistro("Editando")
  Wait Field
       Until "ESC","ENTER","F1","FIELDVIEW","F35"

  Switch
      Case Retval="F1":
           if Field()="PesquisaTexto"
             Then ShowPopup " Op‡”es " @ 09,27
                   "1-Raz„o Social    " : "Localizar pela Raz„o Social do Cliente     " : "1-Raz„o Social",
                   "2-C¢digo          " : "Localizar pelo C¢digo do Cliente           " : "2-C¢digo",
                   "3-CNPJ/CPF        " : "Localizar pelo CPF/CNPJ do Cliente         " : "3-CNPJ/CPF",
                   "4-Nome Fantasia   " : "Localizar pelo Nome Fantasia do Cliente    " : "4-Nome Fantasia",
                   "5-Conta Cont bil  " : "Localizar pela Conta Contabil              " : "5-Conta Cont bil",
                   "6-RazÆo/Cidade    " : "Localizar pela Raz„o Social e Cidade       " : "6-RazÆo/Cidade"
                  EndMenu
                   To VSDGCOPPESQ
                  If RetVal
                     Then [PesquisaOpcao]=VSDGCOPPESQ
                          
                          if substr([PesquisaOpcao],1,1)="6"
                             then
                                  If IsAssigned(VSDGCCIDADE) 
                                     then [PesquisaLookup_Cidades]=VSDGCCIDADE
                                  endif   
                          endif   
                  EndIf
           endif 

           if Field()="PesquisaLookup_Cidades"
              then if CONSULTAF1()
                      then VSDGCCIDADE=[PesquisaLookup_Cidades]
                   endif    
           endif   
      Case Retval="ESC":
           switch
             case field()="PesquisaTexto":
               SW_Clie_CHAVE=9
               Del
               Return

             case field()="PesquisaLookup_Cidades":
               moveto [PesquisaTexto]

           endswitch
      
      Case Retval="ENTER":
           If IsBlank([])
              Then Loop
           EndIf
      
           switch
             case field()="PesquisaOpcao":
               VSDGCOPPESQ=[]
               moveto [PesquisaTexto]
               loop

             case field()="PesquisaTexto":
               VSDGCTXPESQ=[]

               if substr([PesquisaOpcao],1,1)="6"
                  then moveto [PesquisaLookup_Cidades]
                       loop
               endif        
               
             case field()="PesquisaLookup_Cidades":
               VSDGCCIDADE=[]

           endswitch
             
           SW_Clie_CHAVE=0   
           SW_Clie_Exclusao()
           if not SW_Clie_Selecionar() then moveto [PesquisaTexto] loop endif

           return
      EndSwitch
   EndWhile
EndWhile
EndProc

;*******************************************************************************
;* Selecionar Dados                                                            *
;*******************************************************************************
Proc SW_Clie_Selecionar()
Private wc, regok

LimpaRodape(0)
Aguarde("Aguarde, Selecionando Registros")

wc=0
SW_Clie_oppesq=substr(VSDGCOPPESQ,1,1)

DynArray SW_Clie_Array_Registro[]

Moveto [PesquisaLookup_Destinat]
Ativa_Lookup()

SW_Clie_LocPrimeiro()
If RetVal
   Then primeira_tentativa=Recno()
        While True

          If (VERIFICA_CONSULTA= "FATURA" And [Tipo]<>"O") Or
             (VERIFICA_CONSULTA<>"FATURA" And [Tipo]="C")
             Then 
                  regok=true
                  if SW_Clie_oppesq="6"
                     then if [Cidade]<>VSDGCCIDADE
                             then regok=false
                          endif
                  endif
                  
                  if regok
                     then
                          wc=wc+1
                          SW_Clie_Array_Registro[wc] =[Codigo]
                  endif        
          Endif
          Skip
          If EOT()
             Then SW_Clie_LocPrimeiro()
             Else SW_Clie_LocProximo()
          EndIf
          If Not RetVal Then QuitLoop EndIf
          If Recno()=Primeira_tentativa Then QuitLoop Endif
        EndWhile
EndIf
KeyPress "ESC"

Moveto "Sw_ClieC"
If wc=0
   Then Mensagem("Pesquisa sem Registro !")
        LimpaRodape(0)
        Return False
EndIf

for wc from 1 to dynarraysize(SW_Clie_Array_Registro)

  Moveto "Sw_ClieI"
  End Down
  [Sequencia Master       ]=SW_Clie_SeqMaster
  [Sequencia Detail       ]=wc
  [Codigo                 ]=SW_Clie_Array_Registro[wc]
  
  If substr(VSDGCOPPESQ,1,1)="4"
     Then [Razao Social]=[Nome Fantasia EmitDest]
  Endif
                  
endfor

Moveto "Sw_ClieC"
[PesquisaNRegistros       ]=dynarraysize(SW_Clie_Array_Registro)

LimpaRodape(0)
Return True
EndProc ; (Seleciona2)

Proc SW_Clie_LocPrimeiro()

Home
Switch
  Case SW_Clie_oppesq="1" or
       SW_Clie_oppesq="6" : Moveto [Razao Social]
                            OrderTable {Razao Social}
                            Home
                            Locate IndexOrder by "razao social" Pattern VSDGCTXPESQ

  Case SW_Clie_oppesq="2" : If Search("..",VSDGCTXPESQ)=0
                               Then Moveto [Codigo]
                                    Locate VSDGCTXPESQ
                               Else Moveto [Codigo]
                                    OrderTable {Codigo}
                                    Home
                                    Locate IndexOrder by "codigo" Pattern VSDGCTXPESQ
                            EndIf
  Case SW_Clie_oppesq="3" : Moveto [CGC]
                            OrderTable {CGC}
                            Home
                            Locate IndexOrder by "cgc" Pattern VSDGCTXPESQ

  Case SW_Clie_oppesq="4" : Moveto [Nome Fantasia EmitDest]
                            OrderTable {Nome Fantasia EmitDest}
                            Home
                            Locate IndexOrder by "nome fantasia emitdest" Pattern VSDGCTXPESQ

  Case SW_Clie_oppesq="5" : Moveto [Conta Contabil]
                            OrderTable {Conta Contabil}
                            Home
                            Locate IndexOrder by "conta contabil" Pattern VSDGCTXPESQ

EndSwitch

Endproc

Proc SW_Clie_LocProximo()
Switch
  Case SW_Clie_oppesq="1" : Locate IndexOrder by "razao social" Next Pattern VSDGCTXPESQ
  Case SW_Clie_oppesq="2" : If Search("..",VSDGCTXPESQ)=0
                               Then Locate Next VSDGCTXPESQ
                               Else Locate IndexOrder by "codigo" Next Pattern VSDGCTXPESQ
                            EndIf
  Case SW_Clie_oppesq="3" : Locate IndexOrder by "cgc" Next Pattern VSDGCTXPESQ
  Case SW_Clie_oppesq="4" : Locate IndexOrder by "nome fantasia emitdest" Next Pattern VSDGCTXPESQ
  Case SW_Clie_oppesq="5" : Locate IndexOrder by "conta contabil" Next Pattern VSDGCTXPESQ  
EndSwitch
Endproc



;*******************************************************************************
;*  ROTINA PARA PAGINACAO DE TABELA EM FORM                                    *
;*******************************************************************************
Proc SW_Clie_Pagina(TabIda,Tipo)
Private TABIDA,TIPO

While True
  tcwait=""
  
  Mouse Show
  Moveto TABIDA
  If RecordStatus("New")=True
     Then Del
  EndIf
  
  tpform =TIPO
  
  EDITAR ="N"
  EXCLUIR="N"
  If RecordStatus("New")
     Then If SubStr(TIPO,1,2)="MT"
             Then MENSAGEM("Tabela sem Registros !")
          EndIf   
  EndIf
  
  If SubStr(TIPO,1,2)="MR"
     Then Switch
            Case RetVal="F7" or RetVal="HOME":
                 Home
            Case RetVal="PGUP":
                 PgUp
          EndSwitch
     Else Switch
            Case RetVal="F7" or RetVal="HOME":
                 Home
          EndSwitch
  EndIf
  TABIDA=Table()
  
  ImageRights ReadOnly
  SetaCorRegistro("Paginar")

  MSGCAMPO=" Esc=Retornar  Ins/Enter=Incluir  "
  prompt ""
  
  SpeedBar "["+Chr(17)+"]"       :"ESC",
             "~Localizar~"       :"ZOOM",
             "~Loc~|"+Chr(16)    :"ZOOMNEXT",
             "~?~"               :-94,
             "|"+Chr(17)         :"HOME",
             Chr(17)             :"PGUP",
             Chr(16)             :"PGDN",
             Chr(16)+"|"         :"END"
                    
  FIELD_LOCATE=Field()
  TEXTO_LOCATE=""
                                        
  wait workspace
    proc "SW_Clie_wait_pagina"
    trigger "ALL"
    Message "ALL"
    Key "ALL"
  endwait
  ClearSpeedBar

  RetVal=tcwait                       

  If Retval="ESC" 
    Then RetVal=-115
  EndIf

  return


EndWhile

EndProc  

;*******************************************************************************
;* Rotina Wait p/ Pagina()                                                     *
;*******************************************************************************
proc SW_Clie_Wait_Seta_Valores(codpess)

Moveto "Sw_ClieC"
[COdigo]=codpess

Moveto "Sw_ClieI"

EndProc  

;*******************************************************************************
;* Rotina Wait p/ Pagina()                                                     *
;*******************************************************************************
proc SW_Clie_wait_pagina(triggertype,event,cyclenumber)
private triggertype,event,cyclenumber,ncampo,nrec

Switch
  Case triggertype="OPEN"      : SW_Clie_Wait_Seta_Valores([Codigo]) 
  Case triggertype="ARRIVEROW" : SW_Clie_Wait_Seta_Valores([Codigo]) 
EndSwitch


If triggertype="TOUCHRECORD" And Event["TYPE"]="MOUSE"
   Then  Return 1
EndIf

If Event["TYPE"]="KEY" And triggertype="EVENT"
   Then Switch
          Case event["KEYCODE"]=-94:
               MSG=    "      Esc= Voltar                                                //"
               MSG=MSG+"    Alt+F= Fun‡”es                                               //"
               MSG=MSG+"   Ctrl+Z= Localizar registro                                    //"
               MSG=MSG+"    Alt+Z= Localizar pr¢ximo registro                            // //"

               MSG=MSG+"     Home= primeiro registro     Up"+Chr(25)+"= registro anterior          //"
               MSG=MSG+"      End= £ltimo registro     Down"+Chr(24)+"= Pr¢ximo registro           //"
               MSG=MSG+"  Page Up= P gina anterior     * Ctrl+Page Up                    //"
               MSG=MSG+"Page Down= Pr¢xima p gina      * Ctrl+Page Down                  // //"
               
               MSG=MSG+"* Para localizar r pido bastar teclar no campo desejado! //"
               MSG=MSG+"       BackSpace= Limpa um caracter/localiza r pido      //"
               MSG=MSG+"  Ctrl+BackSpace= Limpar/localiza r pido                 // //"
               MSG=MSG+"  Ctrl+F1= Ajuda/Teclas [?]                                       "
               MsgHelp("Teclas/Fun‡”es",MSG)
               return 1

          Case Event["KEYCODE"]=Asc("ZOOM"):
               PESQUISA()
               prompt TEXTO_LOCATE
               
               SW_Clie_Wait_Seta_Valores([Codigo])               
               return 1

          Case Event["KEYCODE"]=Asc("ZOOMNEXT"):
               PESQUISACON()

               SW_Clie_Wait_Seta_Valores([Codigo])               
               return 1

          Case Event["KEYCODE"]=Asc("ESC"):
               tcwait="ESC"
               Return 2

          Case Event["KEYCODE"]=Asc("DEL"):
               Return 1

          Case Event["KEYCODE"]=Asc("INS") Or
               Event["KEYCODE"]=Asc("ENTER"):
               Sw_Cliente_Pesquisado=[Codigo]
               Return 2
               
          Case Event["KEYCODE"]=Asc("CTRLBACKSPACE"):
               TEXTO_LOCATE=""
               prompt TEXTO_LOCATE
               
               Return 1 

          Case Event["KEYCODE"]=Asc("BACKSPACE"):
               If Field()<>FIELD_LOCATE
                  Then FIELD_LOCATE=Field()
                       TEXTO_LOCATE=""
                       prompt TEXTO_LOCATE
               Endif        

               TEXTO_LOCATE=SubStr(TEXTO_LOCATE,1,Len(TEXTO_LOCATE)-1)
               prompt TEXTO_LOCATE
               
               If Not IsBlank(TEXTO_LOCATE)
                  Then Zoom Select TEXTO_LOCATE+".."
               EndIf   

               SW_Clie_Wait_Seta_Valores([Codigo])               
               Return 1

          Case (Event["KEYCODE"]>=32 And Event["KEYCODE"]<=125):
               If Field()<>FIELD_LOCATE
                  Then FIELD_LOCATE=Field()
                       TEXTO_LOCATE=""
                       prompt TEXTO_LOCATE
               Endif        

               TEXTO_LOCATE=TEXTO_LOCATE+UPPER(Chr(Event["KEYCODE"]))
               prompt TEXTO_LOCATE
               Zoom Select TEXTO_LOCATE+".."

               SW_Clie_Wait_Seta_Valores([Codigo])               
               return 1
               

          OtherWise:
               Return 0

      EndSwitch
endif

return 0

EndProc

;*******************************************************************************
;* Exclusao de Registros                                                       *
;*******************************************************************************
Proc SW_Clie_EXCLUSAO()

Moveto "Sw_ClieC"
ImageRights
If RecordStatus("Locked") Then UnLockRecord EndIf         

Moveto "Sw_ClieI"
ImageRights
While RecordStatus("New")=False
  Del
EndWhile

Moveto "Sw_ClieC"
[PesquisaNRegistros       ]=blanknum()

EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro cabeca                             *
;*******************************************************************************
Proc SW_Clie_Controla_EdicaoC()

SetaCorRegistro("Padrao")

RetVal="F7"
SW_Clie_Pagina("Sw_ClieI" ,"MR")
SetaCorRegistro("Padrao")

SW_Clie_EXCLUSAO()
Del

EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************

Echo Off 
SW_Clie_Tabela=Table()
SW_Clie_NCampo=Field()
Unlockrecord
FormKey
while Islockrecord() endwhile

{TableAdd} {Sw_ClieC}
PickForm "F"

If not IsAssigned(OP_INSERT_ITEM)     Then OP_INSERT_ITEM=False         EndIf
If not IsAssigned(VSDGCOPPESQ)        Then VSDGCOPPESQ="1-Raz„o Social" EndIf
If not IsAssigned(VSDGCTXPESQ)        Then VSDGCTXPESQ=""               EndIf
If not IsAssigned(VSDGCCIDADE)        Then VSDGCCIDADE=""               EndIf
If Not IsAssigned(VERIFICA_CONSULTA)  Then VERIFICA_CONSULTA=""         EndIf

Sw_Cliente_Pesquisado=""
While True
  SW_Clie_CHAVE()
  If SW_Clie_CHAVE=9 Then QuitLoop EndIf
  
  SW_Clie_Controla_EdicaoC()
  if Sw_Cliente_Pesquisado<>"" then QUitloop endif
 
EndWhile

Echo Off 
Moveto "Sw_ClieC"
Do_It!
Moveto "Sw_ClieC" ClearImage

Moveto Sw_Clie_Tabela
CoeditKey
while Islockrecord() endwhile
FormKey
moveto field SW_Clie_NCampo

LimpaRodape(0)

Release Vars SW_Clie_CHAVE, SW_Clie_SeqMaster, SW_Clie_oppesq, SW_Clie_Tabela, SW_Clie_NCampo,
             tcwait, tpform,
             SW_Clie_Array_Registro

Release Procs SW_Clie_CHAVE, SW_Clie_Controla_EdicaoC, SW_Clie_EXCLUSAO,   
              SW_Clie_Pagina, SW_Clie_wait_pagina, SW_Clie_Wait_Seta_Valores,
              SW_Clie_Selecionar, SW_Clie_LocPrimeiro, SW_Clie_LocProximo 
              
              
