;** DestFone *******************************************************************
;*  Rotina p/ Alterar/Incluir/Remover outros telefones                         *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 16/10/2020 por Bruno Carvalho          
;Ultima Alteracao: 21/10/2020 por Bruno Carvalho                 
;Motivo Alteracao: Ajustes p/ permitir excluir registro da lista de telefones

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc FONE_ADD_SDDialog(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento
            
Temp=True
MSG_CAMPO=""                      
TECLA=""

If FONE_INICIO_DIALOG2
   Then Campo = "TG_IDENTIFICACAO"
        FONE_INICIO_DIALOG2=False
EndIf     

If Disparo="CLOSE"
   then CancelDialog
        Return Temp
endif

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: Temp=False
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_IDENTIFICACAO" : CancelDialog
            Case Campo="TG_FONE"          : Campo="TG_IDENTIFICACAO"
            Case Campo="TG_FLAG2"         : Campo="TG_FONE"
          EndSwitch                                    
     Case Evento["KeyCode"] = 13:    
          Temp=False
          Switch
             Case Campo="TG_IDENTIFICACAO" : Campo="TG_FONE" 
                  VSDGIDENTIFICACAO=ControlValue("TG_IDENTIFICACAO")     

             Case Campo="TG_FONE" :  
                  VSDGFONE=ControlValue("TG_FONE")
                  If IsBlank(VSDGFONE)
                     Then FastMsg("Informe o Telefone!")
                     Else VALIDA_FONE_SHOWDIALOG = True 
                          If Valida_Telefone(VSDGFONE)
                             Then Campo="TG_FLAG2"
                          EndIf    
                  EndIf
             Case Campo="TG_FLAG2" : 
                      FONE_MontaArray("GRAVAR",VSD_I_SEQ,VSDGIDENTIFICACAO,VSDGFONE)
                  AcceptDialog     
          EndSwitch
   EndSwitch
EndIf

Switch
  Case Campo="TG_FONE"  : MSG_CAMPO = "Telefone/Celular"
  Case Campo="TG_FLAG2" : MSG_CAMPO = "Pausa para Prosseguir"                                                
Endswitch
TECLA    = "//Esc=Retornar  Enter=Avan‡ar/Gravar"

RefreshDialog
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;FONE_ADD_SDDialog()

;*******************************************************************************
;* Rotina Principal De Reajuste de Preco                                       *
;*******************************************************************************
Proc FONE_Adiciona(PARAM)                

While True
  If CHAMA
     Then Registro="Existe"
          SetaIndex(ArrayElement)
          PegaSeqIndex(IndexFone)
     Else Registro="Novo" 
          
          SetaIndex(0)
          SetaSeq(0)
          For c From 1 To DynArraySize(ARRAY_FONE)
            SetaIndex(c)
            PegaSeqIndex(c)
          EndFor
          SetaIndex(IndexFone+1)
          SetaSeq(NumVal(VSD_I_SEQ)+1)
  EndIf
  
  FONE_INICIO_DIALOG2= True
  VSDGFLAG2          = ""
  VSDGFONE           = ""
  VSDGIDENTIFICACAO  = ""
  FONE_NOME          = ""
  If PARAM="Alterar"
     THen If IsBlank(FONE_Indice) 
             Then Return
          EndIf
          FONE_NOME=FONE_MontaArray("PEGARFONE"  ,FONE_Indice,"","")

          VSDGFONE          = FONE_MontaArray("PEGARVRFONE",FONE_Indice,"","")
          VSDGIDENTIFICACAO = FONE_MontaArray("PEGARVRIDENT",FONE_Indice,"","")
     Else      
  EndIf             

  ShowDialog "Informe o valor" Proc "FONE_ADD_SDDialog"
  Trigger "OPEN","CLOSE","ARRIVE"                                            
    Key "F1","ENTER","ESC"
      @ 00,01 Height 06 Width 79
  
     Label  @ 00,00 "Identifica‡„o para o Telefone "+FONE_NOME  For "TG_IDENTIFICACAO"
     Accept @ 01,01 Width 23 "A20" Picture "!*!" Tag "TG_IDENTIFICACAO" To VSDGIDENTIFICACAO
        
     Label  @ 02,00 "Telefone "+FONE_NOME  For "TG_FONE"
     Accept @ 03,01 Width 73 "A100" Picture "!*!" Tag "TG_FONE" To VSDGFONE
          
     Label  @ 02,73 ""  For "TG_FLAG2"
     Accept @ 03,73 Width 1 "A3" Tag "TG_FLAG2" To VSDGFLAG2
     
  EndDialog
    
  QuitLoop
EndWhile  

Campo="TG_FONES"
Mouse Show

EndProc ;FONE_Adiciona()
                         
;*******************************************************************************
;* Exclusao das Informa‡äes Adicionais do Item                                 *
;*******************************************************************************
Proc FONE_Exclusao_Lista(indice)
private tipo, indice, ii, CONTADOR

SetaIndex(ArrayElement)
PegaSeqIndex(IndexFone)
If DynArraySize(ARRAY_FONE)>0 And ConfGeral("Confirma a exclus„o deste registro ?")
   Then DynArray AUX_ARRAY_FONE[]
        CONTADOR = 0
        For ii From 1 To DynArraySize(ARRAY_FONE)
           If IsAssigned(ARRAY_FONE[ii])
              Then CONTADOR = CONTADOR + 1
                   AUX_ARRAY_FONE[CONTADOR] = ARRAY_FONE[ii]
           EndIf  
        EndFor
   
        FONE_SEQ=NumVal(FONE_MontaArray("SEQ",IndexFone,"",""))
        
        Moveto FONE_TabelaOrigem
        KeyPress "F7"
        Window Select JanelaFONE
        Moveto [Codigo]
        Locate VSDGPESSOA,NumVal(FONE_SEQ)
        If Retval
           Then Del
        EndIf
        UnLockRecord

        ;---- Ajustando a Sequencia dos Outros Telefones -----------------------
        SEQ = 0
        Moveto [Codigo]
        Locate VSDGPESSOA
        If Retval
           Then While [Codigo] = VSDGPESSOA
                  SEQ = SEQ + 1
                  [Sequencia] = SEQ
                  Skip
                  If Eot() Then QuitLoop EndIf 
                EndWhile
        EndIf   
        UnLockRecord   
        
        ;---- Carregando o Array da Lista --------------------------------------
        Release Vars ARRAY_FONE
        DynArray ARRAY_FONE[]
        
        Moveto [Codigo]
        Locate VSDGPESSOA
        If Retval
           Then While [Codigo] = VSDGPESSOA 
                  FONE_MontaArray("GRAVAR",[Sequencia],[Identificacao],[Telefone]) 
                  Skip
                  If Eot() Then QuitLoop EndIf
                EndWhile 
        EndIf 
EndIf

EndProc   ;  FONE_Exclusao_Lista()       

;*******************************************************************************
;* Controle do ShowDialog                                                      *
;*******************************************************************************
Proc FONE_SDDialog(Disparo,Campo,Evento,Elemento)         
Private Disparo,Campo,Evento,Elemento

Temp             = True
MSG_CAMPO        = ""                                               
TECLA            = ""
                                     
If FONE_INICIO_DIALOG
   Then Campo = "TG_FONES"
        FONE_INICIO_DIALOG=False
EndIf
     
switch
  case Disparo="OPEN"      :
    AoCriarShowDialog()
            
  case Disparo="CLOSE"     :
    CancelDialog

  case Disparo="SELECT"    :  
    Temp=True
    CHAMA=False    
    FONE_Indice = ControlValue("TG_FONES")
    FONE_Adiciona("Alterar")    
  case Disparo="EVENT" And Evento["Type"]="KEY" :
       Switch
          Case Evento["KeyCode"] =-82 :
              Temp=False
              CHAMA=False
              FONE_Adiciona("Incluir")
         Case Evento["KeyCode"] = -83 :
              If DynArraySize(ARRAY_FONE)>0
                 Then indicelista=ArrayElement
                      FONE_Exclusao_Lista(ArrayElement)             
                      ArrayElement=indicelista  
              EndIf        
         Case Evento["KeyCode"] =   9 : Temp=False
         Case Evento["KeyCode"] =  27 :
              Temp=False
              Switch
                Case Campo="TG_FONES"     : CancelDialog
              EndSwitch
         Case Evento["KeyCode"] = 13:
              Temp=False
              Switch
                Case Campo="TG_FONES" And DynArraySize(ARRAY_FONE)>0: 
                     FONE_Indice = ControlValue("TG_FONES")
                     CHAMA=True
                     FONE_Adiciona("Alterar")
              EndSwitch
       EndSwitch
endswitch

MSG_CAMPO="Selecione o item desejado"
TECLA    = "//Esc=Retornar  Ins=Incluir  Enter=Alterar  Del=Excluir"

RefreshDialog
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;FONE_SDDialog()

;*******************************************************************************
;*  Processos                                                                  *
;*******************************************************************************
Proc SetaIndex(c)
Private c
 IndexFone=NumVal(c)
EndProc

Proc SetaSeq(c)
Private c                                             
 VSD_I_SEQ=AlinhM(StrVal(c),2)
EndProc

Proc PegaSeqIndex(c)
Private c
 SetaSeq(SubStr(ARRAY_FONE[c],1,2))
EndProc

;*******************************************************************************
;* Edi‡Æo do recebimento da Ordem de Compra                                    *
;*******************************************************************************
Proc TELEFONE()
FONE_INICIO_DIALOG=True

LimpaRodape(0)

Echo Normal
Echo Off
ShowDialog "Outros Telefones" Proc "FONE_SDDialog"
Trigger "OPEN","ARRIVE","CLOSE","SELECT"
Key "F1","ENTER","ESC","INS",-82,-83
     @ 06,10   Height 08 Width 79

    Label @ 00,00 "Seq Identifica‡Æo        Telefone            "  For "TG_FONES"
                  ;123 12345678901234567890 12345678901234567890

    PickDynArray @01,01 Height 5 width 75
      Columns 1
       ARRAY_FONE
        Tag "TG_FONES"
         To ARRAYELEMENT
         
EndDialog

;If Not RetVal
;   Then Switch
;          Case Registro="Existe" : Undo
;                                   UnLockRecord
;          Case Registro="Novo"   : Del
;        EndSwitch
;           
;EndIf   
;Mouse Show

EndProc ;Telefone()

;*******************************************************************************
;* Fun‡äes Telefone                                                            *
;*******************************************************************************
Proc FONE_MontaArray(oper,indice,s,s2)
private oper,indice,s

indice = NumVal(indice)
Result=""
switch
  case oper="GRAVAR"       : ARRAY_FONE[indice] = Format("W2",AlinhM(strVal(indice),2))+Spaces(1)+  
                                                  Format("W20,AL",rtrim(s)) + Spaces(1) + Format("W20,AL",rtrim(s2))                                 
  
  case oper="SEQ"          : Result=rtrim(substr(ARRAY_FONE[indice],01,02))       
  
  case oper="PEGARVRIDENT" : Result=rtrim(substr(ARRAY_FONE[indice],4,20))         

  case oper="PEGARVRFONE"  : Result=rtrim(substr(ARRAY_FONE[indice],25,20)) 
  
endswitch

Return Result
EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
If SysMode()="Main"
   Then AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
        Mensagem("Processo executado no script DestCli!")
        Release Vars All
        Release Procs All
        Return
EndIf

If Not IsAssigned(FONE_PARAM_ROTINA)     Then FONE_PARAM_ROTINA=""        EndIf

Release Vars JanelaFONE,ARRAY_FONE

FONE_TabelaOrigem = Table()
FONE_CampoOrigem  = Field()

VSDGPESSOA = [Codigo]
FONETitulo = [Codigo] + "-" + [Nome Fantasia EmitDest]

DynArray ARRAY_FONE[]

UnLockRecord
Moveto FONE_TabelaOrigem
IsLockRecord()

JanelaFONE = AbrirTabela("\\Sistemas\\Cadastro\\DestFone","Add",1,0,1,15)
Window Select JanelaFONE
Moveto [Codigo]
Locate VSDGPESSOA
If Retval
   Then While [Codigo] = VSDGPESSOA
          FONE_MontaArray("GRAVAR",[Sequencia],[Identificacao],[Telefone]) 
          Skip
          If Eot() Then QuitLoop EndIf
        EndWhile 
EndIf    

Moveto FONE_TabelaOrigem
KeyPress "F7"

CHAMA=False
TELEFONE()  

Moveto FONE_TabelaOrigem
KeyPress "F7"
Window Select JanelaFONE
Moveto [Codigo]
For FONE_wi From 1 To DynArraySize(ARRAY_FONE)
  FONE_SEQ=NumVal(FONE_MontaArray("SEQ",FONE_wi,"",""))
  Locate VSDGPESSOA,NumVal(FONE_SEQ)
  If Retval
     Then 
          switch
            case FONE_MontaArray("PEGARVRFONE",FONE_wi,"","")="" And        
                 FONE_MontaArray("PEGARVRIDENT",FONE_wi,"","")=""     :
              Del

            case FONE_MontaArray("PEGARVRFONE",FONE_wi,"","")<>[Telefone             ] Or        
                 FONE_MontaArray("PEGARVRIDENT",FONE_wi,"","")<>[Identificacao]     : 
               [Telefone     ]=FONE_MontaArray("PEGARVRFONE",FONE_wi,"","")  
               [Identificacao]=FONE_MontaArray("PEGARVRIDENT",FONE_wi,"","") unlockrecord
          endswitch
     Else     
          switch
            case FONE_MontaArray("PEGARVRFONE",FONE_wi,"","")<>"" Or        
                 FONE_MontaArray("PEGARVRIDENT",FONE_wi,"","")<>""    :   
              end down
              [Codigo       ]=VSDGPESSOA
              [Sequencia    ]=NumVal(FONE_SEQ)
              [Telefone     ]=FONE_MontaArray("PEGARVRFONE",FONE_wi,"","")
              [Identificacao]=FONE_MontaArray("PEGARVRIDENT",FONE_wi,"","") unlockrecord
          endswitch
  endif        
endfor
Do_It!
ClearImage

Moveto FONE_TabelaOrigem
CoeditKey
KeyPress "F7"
Moveto Field FONE_CampoOrigem

Release Vars FONE_PARAM_ROTINA,JanelaFONE,
             ARRAY_FONE,FONE_wi,
             FONE_INICIO_DIALOG, FONE_INICIO_DIALOG2, FONETitulo,FONE_Indice,
             FONE_SEQ,
             FONE_TabelaOrigem,FONE_CampoOrigem
             
Release Procs FONE_ADD_SDDialog,FONE_Adiciona,FONE_SDDialog,TELEFONE,FONE_MontaArray,FONE_Exclusao_Lista,
              SetaIndex,SetaSeq,PegaSeqIndex