;* MsRecib**********************************************************************
;*                Cadastro de Mensagens para Recibo                            *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 01/11/2016 por Rafael Matos 
;Ultima Alteracao: 16/04/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado biblioteca "Bib_Bloq" 

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVE()
While True
  Moveto [Codigo_MsgRecibo]
  End
  COD=[Codigo_MsgRecibo]
  If OPCAO_FORM="F"
     Then Down
     Else PgDn
  EndIf
  Moveto [Codigo_MsgRecibo]

  SetaCorRegistro("Editar")
  While true

  TECLA=""
  AguardaTeclasPadrao()

    Switch
      Case RetVal=-33 : SemFuncoes()
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal="F3": 
           If OPCAO_FORM="F"
              Then OPCAO_FORM="1"
              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("MsgRecib","MR")
                Else PAGINA("MsgRecib","MT")
             EndIf
             If EDITAR="S"
                Then COD=[Codigo_MsgRecibo]
                     CHAVE=0
                     PickForm "1"
                     Controla_EdicaoC()
                Else If EXCLUIR="S"
                        Then If QuerExcluir("")
                                Then PickForm "1"
                                     del
                                Else UnLockRecord
                             EndIf
                             If OPCAO_FORM="F"
                                Then PickForm "F"
                                Else PickForm "1"
                             EndIf
                        Else QuitLoop
                     EndIf
             EndIf
             SetaPosForm()
           EndWhile
           QuitLoop
      Case Retval="ESC":
           CHAVE=9
           Del
           Return
      Case RetVal="ENTER":
           If Numero_Lancamento("","F")
              Then COD = PROXLANCTO_NLANC
                   Release Vars PROXLANCTO_NLANC 
              Else QuitLoop
           EndIf

           PickForm "1"
           Moveto [Codigo_MsgRecibo]
           If PROXIMO_LANCTO_REG_ACHOU
              Then CHAVE=0
              Else CHAVE=1
           EndIf
           Return 
      EndSwitch
  EndWhile
EndWhile

EndProc  ; (CHAVE)

;*******************************************************************************
;* Rotina para Digitacao das Informacoes                                       *
;*******************************************************************************
Proc DIGITA()

Moveto [Descricao_MsgRecibo]
While True

      TECLA=" Esc=Retornar  "

      If CHAVE=0
         Then TECLA=TECLA+"Del=Excluir  PgDn=Finalizar  "
         Else TECLA=TECLA+"PgDn=Finalizar  "
      EndIf

      Prompt TECLA

      MSGCAMPO=""
      Switch
        Case Field()="Descricao_MsgRecibo"         : MSGCAMPO="Descri‡Æo da Mensagem para Recibo"      
        Case Field()="PeriodoVigenciaInicial"      : MSGCAMPO="Periodo de Vigencia Inicial"
        Case Field()="PeriodoVigenciaFinal"        : MSGCAMPO="Periodo de Vigencia Final"
        Case Field()="MsgRecibo_Inativo"           : MSGCAMPO="Mensagem de Recibo Inativa? Sim/NÆo"
        Case Field()="Mes"                         : MSGCAMPO="Mˆs de Vigˆncia da Mensagem"
        Case Field()="TipoDeMensagem"              : MSGCAMPO="F1=Consultar Tipos"
        Case Field()="Mensagem_MsgRecibo"          : MSGCAMPO="Digite uma Mensagem"
      EndSwitch                                     

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

      Switch
           
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case RetVal="DEL" :
           If CHAVE=0
              Then If QuerExcluir("")
                      Then del
                           QuitLoop
                   EndIf
           EndIf
      
      Case RetVal="F1":
       Switch
         Case Field()="TipoDeMensagem" :
              MSGCAMPO=""
              Echo Normal
              Echo Off
              ShowPopup " Tipo de Mensagem " CENTERED
                "1 - FIXA TODOS OS MESES"      :      "Tipo de Mensagem: FIXA TODOS OS MESES"     :     "1",
                "2 - FIXA NO MÒS        "      :      "Tipo de Mensagem: FIXA NO MÒS        "     :     "2",
                "3 - PERIODO ESPECIFICO "      :      "Tipo de Mensagem: PERÖODO ESPECIFICO "     :     "3",
                "4 - ANIVERSARIO        "      :      "Tipo de Mensagem: ANIVERSARIO        "     :     "4",
                Separator,
                "~C~ancelar " : " Cancelar a Opera‡Æo               ": "CANCELAR"
              EndMenu
              To MenuVar
              Echo off
         
              If MenuVar="CANCELAR" or MenuVar="Esc"
                 Then Loop
              EndIf
              [] = MenuVar
       EndSwitch
      
           
      Case Retval="PGDN":
           If IsBlank   ([Descricao_MsgRecibo])   Or
              IsBlank   ([Mensagem_MsgRecibo])
              Then Loop
              Else CHAVE=9
                   QuitLoop
           EndIf        
      Case Retval="ESC":
           Switch
              Case Field()="Descricao_MsgRecibo"         :   
                   If QuerDesfazer("")
                      Then If CHAVE=1
                              Then Del
                              Else If RecordStatus("Modified")
                                      Then Undo
                                   EndIf
                           EndIf
                           CHAVE=9
                           QuitLoop
                   EndIf
              Case Field()="PeriodoVigenciaInicial"       : Moveto [TipoDeMensagem]
              Case Field()="PeriodoVigenciaFinal"         : Moveto [PeriodoVigenciaInicial] 
              Case Field()="MsgRecibo_Inativo"            : 
                    Switch
                      Case [TipoDeMensagem]="1"  :  Moveto [TipoDeMensagem]                                                     
                      Case [TipoDeMensagem]="2"  :  Moveto [Mes]
                      Case [TipoDeMensagem]="3"  :  Moveto [PeriodoVigenciaFinal]
                      Case [TipoDeMensagem]="4"  :  Moveto [TipoDeMensagem]
                    EndSwitch 
              
              Case Field()="Mensagem_MsgRecibo"           : Moveto [MsgRecibo_Inativo]
              Case Field()="Mes"                          : Moveto [TipoDeMensagem]
              OtherWise                                   : Left
           EndSwitch
      Case Retval="ENTER":
           Switch
              Case Field()="Descricao_MsgRecibo"            :
                   If IsBlank([Descricao_MsgRecibo])
                      Then Loop
                      Else Moveto [TipoDeMensagem]
                   EndIf   
                   
                   
              Case Field()="TipoDeMensagem"                     :    
                   Switch
                      Case [TipoDeMensagem]="1"  :  Moveto [MsgRecibo_Inativo]
                                                [Mes                   ]=""
                                                [PeriodoVigenciaInicial]=BlankDate()
                                                [PeriodoVigenciaFinal  ]=BlankDate()
                                                     
                      
                      Case [TipoDeMensagem]="2"  :  Moveto [Mes]
                                                [PeriodoVigenciaInicial]=BlankDate()
                                                [PeriodoVigenciaFinal  ]=BlankDate()
                                         
                      Case [TipoDeMensagem]="3"  :  Moveto [PeriodoVigenciaInicial]
                                                [Mes                   ]=""
                                                 
                      Case [TipoDeMensagem]="4"  :  Moveto [MsgRecibo_Inativo]
                                                MENSAGEM("Somente pode haver uma Mensagem do Tipo Anivers rio, tenha certeza que nÆo existe outra antes de gravar.")
                                                [Mes                   ]=""
                                                [PeriodoVigenciaInicial]=BlankDate()
                                                [PeriodoVigenciaFinal  ]=BlankDate()
                                                
                      OtherWise              :  Loop                                                                                                                                
                   EndSwitch
               
               Case Field()="Mes"           : 
                   If Numval([Mes]) <1 or Numval([Mes])>12 or IsBlank([Mes])
                      Then FastMsg("Mˆs Inv lido")
                           Loop
                      Else [Mes] = AlinhM([Mes],2)
                           Moveto [MsgRecibo_Inativo]
                   EndIf     
                      
              Case Field()="PeriodoVigenciaInicial"         :  
                   If IsBlank([PeriodoVigenciaInicial])
                      Then [PeriodoVigenciaInicial]=Today()
                   EndIf
                   Moveto [PeriodoVigenciaFinal]     
              Case Field()="PeriodoVigenciaFinal"           : 
                   If IsBlank([PeriodoVigenciaFinal])
                      Then Loop
                      Else Moveto [MsgRecibo_Inativo]
                   EndIf
              Case Field()="MsgRecibo_Inativo"                 : 
                   If IsBlank([MsgRecibo_Inativo])
                      Then [MsgRecibo_Inativo] = "N"      
                   EndIf
                   Moveto [Mensagem_MsgRecibo]     
              Case Field()="Mensagem_MsgRecibo"             : 
                   If IsBlank([Mensagem_MsgRecibo])
                      Then Loop
                      Else Moveto [Descricao_MsgRecibo]
                   EndIf                       
              OtherWise                               : Right
           EndSwitch
      EndSwitch
EndWhile
EndProc

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

If Not IsBlank(Cod)
   Then Cod=AlinhO(Cod)
   Else COD="0" 
EndIf  

If []="" Or COD="0"
   Then COD=Novo_Codigo(AlinhM(COD,3))
EndIf   

Return COD

EndProc ;Checa_Codigo 

;******************************************************************************
;** Rotina Alinhamento Especial Codigo Destinat Letras e Numeros            ***
;******************************************************************************
proc AlinhO(Vr)
Private Vr

If Len(vr)<3 And SubStr(vr,1,1)>"9"
   Then vr=SubStr(vr,1,1)+AlinhM(SubStr(vr,2,2),2)     
   Else vr=AlinhM(vr,3)			   
EndIf	  
Return Vr

EndProc ;AlinhO()

;*******************************************************************************
;* Rotina para Criar Novo C¢digo                                               *
;*******************************************************************************
Proc Novo_Codigo(COD)
Private COD

Vr=SubStr(COD,1,1)
If vr>"9" or COD="999"
   Then If SubStr(COD,2,2)="99"
	         Then Switch
					        Case vr="9" : COD="A00"
					        Case vr="Z" : Mensagem("Fim de codigo disponivel !")
                                COD=""
					        OtherWise   : COD=Chr(asc(vr)+1)+"00"
					      EndSwitch
					 Else cod=vr+AlinhM(StrVal(NumVal(SubStr(cod,2,2))+1),2)     
				EndIf	      
   Else cod=AlinhM(StrVal(NumVal(cod)+1),3)
EndIf

Return COD 

EndProc;Checa_Codigo()

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
DIGITA()
Moveto "MsgRecib"
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,"+
        "\\Sistemas\\Cadastro\\Bib_Proc,"+
        "\\Sistemas\\Cadastro\\Bib_Bloq"

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