;** DestOut  *******************************************************************
;*  Manutencao Cadastro de Outros                                              *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/12/1995 por Anivel Augusto Rodrigues
;Ultima Alteracao: 21/06/2004 por Davi Pereira Carrano
;Motivo Alteracao: Checa Supervisor
;Ultima Alteracao: 17/09/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Intervalo de codigo automatico
;Ultima Alteracao: 17/12/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Proximo_codigo        
;Ultima Alteracao: 21/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Contrala_Edicao()
;Ultima Alteracao: 30/06/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste Proximo_Codigo()
;Ultima Alteracao: 29/06/2009 por Antonio Marcelo Alves
;Motivo Alteracao: Inclusao Novos Campos/Layout
;Ultima Alteracao: 12/03/2010 por Cleber Alves
;Motivo Alteracao: Ajustes MsgCampo
;Ultima Alteracao: 30/06/2010 por Bruno Carvalho
;Motivo Alteracao: Add Proc Novo Codigo e Checagem do C¢digo
;Ultima Alteracao: 16/07/2010 por Bruno Carvalho
;Motivo Alteracao: Novos Campos/Layout  
;Ultima Alteracao: 29/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas
;Ultima Alteracao: 28/01/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes visualizar em ordem de c¢digo/nome + fun‡Æo
;Ultima Alteracao: 08/11/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes vari vel MSGCAMPO
;Ultima Alteracao: 18/08/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Cadastro de Email" -> op‡Æo Alt +E
;Ultima Alteracao: 06/05/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes atividade
;Ultima Alteracao: 16/09/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mensagem tipo pessoa

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVE()
While True

  Switch
    Case ORDENARPOR="NOME" :
      Moveto [Razao Social]
      Menu {Image} {OrderTable} Enter {Razao Social}  
    OtherWise              :
      Moveto [Codigo]
      Menu {Image} {OrderTable} Enter {Codigo}  
  EndSwitch

  End
  SEQ=[Codigo]                                                                                                                                      

  If OPCAO_FORM="F"
    Then Down
    Else PgDn
  EndIf

  Moveto [Codigo]

  SetaCorRegistro("Editar")
  While True

  MSGCAMPO=""
  TECLA=""
  AguardaTeclasPadrao()

  If RetVal=-33
     Then Echo Normal
          Echo Off
          ShowPopup " Fun‡”es " CENTERED
           "Ordenar nome/razÆo social": " Ordenar por nome/razÆo social    " : "ORD_NOME",
           "Ordenar c¢digo           ": " Ordenar por c¢digo               " : "ORD_COD",
           Separator,
           "~C~ancelar               ": " Cancelar a Opera‡„o              " : "CANCELAR"
          EndMenu
          To MenuVar
          Echo Off
          
          If MenuVar="CANCELAR" or MenuVar="Esc"
             Then Loop
          EndIf                                         
          RetVal=MenuVar
          
          Switch
            Case MenuVar="ORD_COD"  : ORDENARPOR="CODIGO" QuitLoop
            Case MenuVar="ORD_NOME" : ORDENARPOR="NOME"   QuitLoop
          EndSwitch
          
  EndIf

  Switch
   Case RetVal=-94 : MsgTeclasPadrao()
   Case RetVal="F3":
        If OPCAO_FORM="F"
           Then OPCAO_FORM="3"
           Else OPCAO_FORM="F"
        EndIf
        Del
        CHAVE=5
        Return
   Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
        While True
          If OPCAO_FORM="F"
             Then PAGINA("Destinat","MR")
             Else PAGINA("Destinat","MT")
          EndIf
          CODIGO=[Codigo]
          If EDITAR="S"
             Then PickForm "3"
                  CHAVE=0
                  Controla_EdicaoC()
             Else If EXCLUIR="S"
                    Then If not ChecaTipoDeRegistro()
                            Then 
                                 UnLockRecord
                            Else If Checa_Supervisor()
                                    Then If QuerExcluir("")
                                            Then PickForm "3"
                                                 EXCLUSAO()
                                            Else UnLockRecord
                                         EndIf
                                    Else UnLockRecord
                                 EndIf
                                 If OPCAO_FORM="1"
                                    Then PickForm "10"
                                    Else PickForm "F"
                                 EndIf
                         EndIf
                    Else QuitLoop
                  EndIf
          EndIf
          SetaPosForm()
        EndWhile
        QuitLoop                      
   Case Retval="ESC":
        CHAVE=9
        Del
        Return
   Case Retval="ENTER":
        CODIGO=[Codigo]
        Del

        Moveto [Codigo]
        Menu {Image} {OrderTable} Enter {Codigo}  

        CODIGO=Checa_Codigo(CODIGO)
        If IsBlank(CODIGO)
           Then QuitLoop
        EndIf   
        PickForm "3"

        Moveto [Codigo]
        Locate CODIGO
        If Retval
           Then CHAVE=0
           Else CHAVE=1
                End PgDn
                [Codigo       ] = CODIGO
                [Tipo         ] = "O"
        EndIf
        If IsLockRecord()
           Then If OPCAO_FORM="F"
                   Then PickForm "F"
                        QuitLoop
                EndIf
        EndIf
        Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (Chave)

;*******************************************************************************
;* Rotina para Checagem do tipo de registro                                    *
;*******************************************************************************
Proc ChecaTipoDeRegistro()
private msg, msg1

Echo Normal
Echo Off
         
If [Tipo]<>"O"
   Then 
        msg="Pessoa cadastrada como tipo "
        switch
          case [Tipo]="E" : msg1="Empresa/Filial" 
          case [Tipo]="C" : msg1="Clientes" 
          case [Tipo]="F" : msg1="Fornecedores" 
          case [Tipo]="O" : msg1="Outros" 
        endswitch
        msg=msg+"[ "+msg1+" ] !// //"
        msg=msg+"Para manuten‡Æo desta pessoa use o Cadastro de "+msg1
        MENSAGEM(msg)
        return false
endif        

return true
EndProc


;*******************************************************************************
;* Rotina para Checagem do C¢digo                                              *
;*******************************************************************************
Proc Checa_Codigo(cod)
Private cod

If Not IsBlank(cod)
   Then cod=AlinhE(cod)
EndIf   
If PARAM_REUTILIZA="S"
   Then  cod=Proximo_Codigo(Cod)
   Else If IsBlank(cod)
           Then End
                cod=Novo_Codigo()
        EndIf
EndIf
Return cod
EndProc

;*******************************************************************************
;* Rotina para Criar Novo C¢digo                                               *
;*******************************************************************************
proc Novo_Codigo()
Private cod,vr

cod=[Codigo]
If IsBlank(cod)
   Then cod="0"
EndIf  
vr=SubStr(cod,1,1)
If vr>"9" or cod="9999"
   Then If SubStr(cod,2,3)="999"
	         Then Switch
					        Case vr="9" : cod="A000"
					        Case vr="Z" : Mensagem("Fim de codigo disponivel !")
									              cod=""
					        OtherWise   : cod=Chr(asc(vr)+1)+"000"
					      EndSwitch
					 Else cod=AlinhE(vr+StrVal(NumVal(SubStr(cod,2,3))+1))     
				EndIf	      
   Else cod=AlinhE(StrVal(NumVal(cod)+1))
EndIf

Return cod 
EndProc

;*******************************************************************************
;* Rotina para Gerar Proximo Codigo no Intervalo                               *
;*******************************************************************************
Proc Proximo_Codigo(cod)
Private cod, CodLivre

If IsBlank(PARAM_INICIAL) Or PARAM_INICIAL="0000"
   Then PARAM_INICIAL="0001"
EndIf

If Not IsBlank(cod)
   Then Moveto [Codigo]
        Locate cod   
        If retval
           Then Return cod  
           Else If cod>=AlinhE(PARAM_INICIAL) And cod<=AlinhE(PARAM_FINAL)
                   Then Return cod 
                   Else Mensagem("C¢digo "+cod+" fora do Intervalo !!")
                        Return ""    
                EndIf
        EndIf
EndIf

Home
CodLivre=AlinhE(PARAM_INICIAL)
Moveto [Codigo]
Locate IndexOrder by "Codigo" BestMatch AlinhE(PARAM_INICIAL)
While True
   If CodLivre<=AlinhE(PARAM_FINAL) and CodLivre>=AlinhE(PARAM_INICIAL)
      Then 
					 If CodLivre=[Codigo]
              Then CodLivre=Novo_Codigo()
                   Skip
              Else cod=CodLivre
                   Return cod
           EndIf
           If EOT()
              Then Loop
           EndIf
      Else Mensagem("Fim dos c¢digos livres!!")
           Return ""
   EndIf
EndWhile

EndProc

;*******************************************************************************
;* Rotina para Digitacao das Informacoes                                       *
;*******************************************************************************
Proc DIGITA()
If not ChecaTipoDeRegistro()
   Then Return
EndIf

Moveto [Nome Fantasia EmitDest]
While True

  MSGCAMPO=Field()
  Switch
    Case Field()="Inativo"                : MSGCAMPO="Inativo ? (Sim/N„o)"
    Case Field()="Data_Cadastro"          : MSGCAMPO="Data do Cadastro"
    Case Field()="Codigo CCusto"          : MSGCAMPO="Codigo do Centro de Custo"
    Case Field()="Codigo Plano_Conta"     : MSGCAMPO="Codigo do Plano de Conta"
  EndSwitch

  TECLA=" Esc=Retornar  "
  If Field()="Codigo CCusto"      or
     Field()="Codigo Plano_Conta" or
     Field()="Codigo Atividade"     
     Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
  Endif
  If CHAVE=0
     Then TECLA=TECLA + "Del=Excluir  "
     Else TECLA=TECLA + "             "
  EndIf
  TECLA=TECLA + "PgDn=Finalizar  "

  Prompt TECLA

  Wait Field
       Until "ESC","ENTER","DEL","FIELDVIEW","F1","F35","PGDN",-33,-18

     If RetVal=-33   
        Then MSGCAMPO=""
             
             Echo Normal
             Echo Off
             ShowPopup " Fun‡”es " CENTERED
              "Outros Email               ": " Inclus„o/altera‡„o de outros email" : "Alt+E",
              Separator,
              "~C~ancelar                 " : " Cancelar a Opera‡„o               ": "CANCELAR"
            EndMenu
            To MenuVar
            Echo Off

             If MenuVar="CANCELAR" or MenuVar="Esc"
                Then Loop
             EndIf

             RetVal=MenuVar
      EndIf

  Switch
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case RetVal=-18 Or RetVal="Alt+E" : EMAIL_PARAM_ROTINA="DESTINAT" 
                                      Play "\\Sistemas\\Cadastro\\DestMail"                               
  Case RetVal="F1":
       If Field()="Codigo CCusto"      or
          Field()="Codigo Plano_Conta" or
          Field()="Codigo Atividade"     
          Then CONSULTAF1()
       Endif
  Case Retval="ESC":
       Switch
         Case Field()="Nome Fantasia EmitDest":
              If QuerDesfazer("")
                 Then If CHAVE=1
                         Then Del
                         Else Undo
                      EndIf
                      QuitLoop
              EndIf
         Case Field()="Inativo"           : Moveto [Data_Cadastro] 
         Case Field()="Data_Cadastro"     : Moveto [Nome Fantasia EmitDest] 
         Case Field()="Razao Social"      : Moveto [Inativo]
         Case Field()="Codigo Atividade":
            If IsBlank([])
               Then [Descricao Atividade]=""
            EndIf
            Moveto [Conta Contabil]
         Case Field()="Codigo Plano_Conta": Moveto [Codigo Atividade]
            If IsBlank([Codigo Plano_Conta])
               Then [Descricao Plano_Conta]=""
            EndIf
         Case Field()="Codigo CCusto"     : Moveto [Codigo Plano_Conta]
            If IsBlank([Codigo CCusto])
               Then [Descricao CCusto]=""
            EndIf
         Otherwise:
              Left
       EndSwitch
  Case Retval="ENTER":
       [Data da Manutencao]=Today()
       [Hora da Manutencao]=Time()
       [Chapa             ] =  SYS_CHAPA_USUARIO

       Switch
       Case Field() = "Nome Fantasia EmitDest":
            If IsBlank([]) Then Loop EndIf
            Moveto [Data_Cadastro]       
       Case Field()="Data_Cadastro":
            If IsBlank([])
               Then []=Today()
            EndIf
            Moveto [Inativo]
       Case Field()="Inativo":
            If IsBlank([]) Then []="N" EndIf
            Moveto [Razao Social]
       Case Field() = "Conta Contabil":   
            moveto [Codigo Atividade] 

       Case Field()="Codigo Atividade":
            If IsBlank([])
               Then [Descricao Atividade]=""
            EndIf
            Moveto [Codigo Plano_Conta]
       Case Field() = "Codigo Plano_Conta":
            If IsBlank([])
               Then [Descricao Plano_Conta]=""
            EndIf
            Moveto [Codigo CCusto]
       Case Field()="Codigo CCusto":
            If IsBlank([])
               Then [Descricao CCusto]=""
            EndIf
            If CHAVE=1
               Then UnLockRecord
            EndIf
            CHAVE=0
            Moveto [Nome Fantasia EmitDest]
       Otherwise:
            Right
       EndSwitch
  Case Retval="PGDN":
       QuitLoop
  Case Retval="DEL":
       If CHAVE=0
          Then If Checa_Supervisor()
                  Then If QuerExcluir("")
                          Then EXCLUSAO()
                               QuitLoop
                       EndIf
               EndIf
       EndIf
  EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Exclusao de Registros                                                       *
;*******************************************************************************
Proc EXCLUSAO()
If not ChecaTipoDeRegistro()
   Then Return
EndIf
Del
EndProc

;*******************************************************************************
;* Rotina Substitui                                                            *
;*******************************************************************************
Proc Carrega_Parametros()
View NoWindow "P_Dest"
If IsEmpty("P_Dest")
   Then CoEditKey
        [Reutiliza_Cod]="N"
        Do_It!
EndIf
PARAM_REUTILIZA     =[Reutiliza_Cod ]
PARAM_INICIAL       =[Outros_Inicial]
PARAM_FINAL         =[Outros_Final  ]
ClearImage

EndProc ; (Carrega_Parametros)

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
DIGITA()
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf
EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO="9999" EndIf

Carrega_Parametros()

View NoWindow "DestMail"  SetaCorRegistro("Padrao")
CoEdit "Destinat"
PickForm "F"

OPCAO_FORM="F"
ORDENARPOR="NOME"

While True
  CHAVE()
  If CHAVE=5
     Then If OPCAO_FORM="F"
             Then PickForm "F"
             Else PickForm "3"
          EndIf
          Loop
  EndIf
  If CHAVE=9
     Then QuitLoop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
