;** Tpgrade ********************************************************************
;*  Manutencao Cadastro de Familia                                             *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/12/95 por Anivel Augusto Rodrigues
;Ultima Alteracao: 06/07/06 por Antonio Marcelo Alves
;Motivo Alteracao: Novo Fomulario (cadastro de grades)
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 03/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas 
;Ultima Alteracao: 15/02/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes SetaCorRegistro("Editando") 
;Ultima Alteracao: 15/05/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes validacao de dados
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() p/ gravar log de erros ao excluir registros
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVE()
Moveto [Codigo da Grade]
End
SEQ = [Codigo da Grade]
Down
Down
Moveto[Codigo da Grade]
MSG=Field()

While true
  SetaCorRegistro("Editar")

  TECLA=""
  AguardaTeclasPadrao()

   Switch
      Case RetVal=-33 : SemFuncoes()
      Case RetVal="F3": SemFicha()
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           While True
             PAGINA2("Tpgrade","MR")
             If EDITAR="S"
                Then CHAVE=0
                     Atencao()
                     Controla_EdicaoC()
                Else If EXCLUIR="S"
                        Then Atencao()
                             If QuerExcluir("")
                                Then Grava_LogEx("Tipo de Grade")
                                     DEL
                                Else UnLockRecord
                             EndIf
                        Else Moveto [Codigo da Grade]
                             End
                             SEQ = [Codigo da Grade]
                             Down
                             Down
                             Moveto [Codigo da Grade]
                             QuitLoop
                     EndIf
             EndIf
             SetaPosForm()
           EndWhile
      Case Retval="ESC":
           CHAVE=9
           QuitLoop
      Case Retval="ENTER":
           If IsBlank([])
              Then If IsBlank(SEQ)
                      Then SEQ="A"
                      Else SEQ=CHR(ASC(SEQ)+1)
                    EndIf
                    []=SEQ
          EndIf

           CODIGO=[]
           Del
           Locate CODIGO
           If Retval
              Then CHAVE=0
                   Atencao()
              Else CHAVE=1
                   Atencao()
                   End Down Down
                   [Codigo da Grade]=CODIGO
           EndIf
           If IsLockRecord()
              Then End
                   SEQ=[Codigo da Grade]
                   Down
                   Down
                   Moveto [Codigo da Grade]
           EndIF
           Quitloop
      EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Rotina para Digitacao das Informacoes                                       *
;*******************************************************************************
Proc DIGITA()
SetaCorRegistro("Editando")

Moveto [Descricao da Grade]
While True

      TECLA=" Esc=Retornar  "
      
      MSG=Field()
      switch
        Case Field()="Titulo Grade1"  : MSG="Coluna 1  - TĄtulo para a grade                    "
        Case Field()="Titulo Grade2"  : MSG="Coluna 2  - TĄtulo para a grade                    "
        Case Field()="Titulo Grade3"  : MSG="Coluna 3  - TĄtulo para a grade                    "
        Case Field()="Titulo Grade4"  : MSG="Coluna 4  - TĄtulo para a grade                    "
        Case Field()="Titulo Grade5"  : MSG="Coluna 5  - TĄtulo para a grade                    "
        Case Field()="Titulo Grade6"  : MSG="Coluna 6  - TĄtulo para a grade                    "
        Case Field()="Titulo Grade7"  : MSG="Coluna 7  - TĄtulo para a grade                    "
        Case Field()="Titulo Grade8"  : MSG="Coluna 8  - TĄtulo para a grade                    "
        Case Field()="Titulo Grade9"  : MSG="Coluna 9  - TĄtulo para a grade                    "
        Case Field()="Titulo Grade10" : MSG="Coluna 10 - TĄtulo para a grade                    "
        Case Field()="Titulo Grade11" : MSG="Coluna 11 - TĄtulo para a grade                    "
        Case Field()="Titulo Grade12" : MSG="Coluna 12 - TĄtulo para a grade                    "
        
        Case Field()="Codigo Item1"   : MSG="Coluna 1  - éltimos dĄgitos para o cądigo do item  " 
        Case Field()="Codigo Item2"   : MSG="Coluna 2  - éltimos dĄgitos para o cądigo do item  " 
        Case Field()="Codigo Item3"   : MSG="Coluna 3  - éltimos dĄgitos para o cądigo do item  " 
        Case Field()="Codigo Item4"   : MSG="Coluna 4  - éltimos dĄgitos para o cądigo do item  " 
        Case Field()="Codigo Item5"   : MSG="Coluna 5  - éltimos dĄgitos para o cądigo do item  " 
        Case Field()="Codigo Item6"   : MSG="Coluna 6  - éltimos dĄgitos para o cądigo do item  " 
        Case Field()="Codigo Item7"   : MSG="Coluna 7  - éltimos dĄgitos para o cądigo do item  " 
        Case Field()="Codigo Item8"   : MSG="Coluna 8  - éltimos dĄgitos para o cądigo do item  " 
        Case Field()="Codigo Item9"   : MSG="Coluna 9  - éltimos dĄgitos para o cądigo do item  " 
        Case Field()="Codigo Item10"  : MSG="Coluna 10 - éltimos dĄgitos para o cądigo do item  " 
        Case Field()="Codigo Item11"  : MSG="Coluna 11 - éltimos dĄgitos para o cądigo do item  " 
        Case Field()="Codigo Item12"  : MSG="Coluna 12 - éltimos dĄgitos para o cądigo do item  " 
        
      endswitch

      If CHAVE=0
         Then TECLA=TECLA+"Del=Excluir  "
      EndIf

      Prompt TECLA
      Wait Field
         Message(MSG)
           Until "ESC","ENTER","DEL","FIELDVIEW","F35"

      Switch

      Case Retval="ESC":
           Switch
             Case Field()="Descricao da Grade":
                   If QuerDesfazer("")
                      Then If CHAVE=1
                             Then Del
                             Else Undo
                          Endif
                          CHAVE=9
                          QuitLoop
                  EndIf
             Case Field()="Codigo Item1" : Moveto [Titulo Grade1]   
             Case Field()="Codigo Item2" : Moveto [Titulo Grade2]   
             Case Field()="Codigo Item3" : Moveto [Titulo Grade3]   
             Case Field()="Codigo Item4" : Moveto [Titulo Grade4]   
             Case Field()="Codigo Item5" : Moveto [Titulo Grade5]   
             Case Field()="Codigo Item6" : Moveto [Titulo Grade6]   
             Case Field()="Codigo Item7" : Moveto [Titulo Grade7]   
             Case Field()="Codigo Item8" : Moveto [Titulo Grade8]   
             Case Field()="Codigo Item9" : Moveto [Titulo Grade9]   
             Case Field()="Codigo Item10": Moveto [Titulo Grade10]  
             Case Field()="Codigo Item11": Moveto [Titulo Grade11]  
             Case Field()="Codigo Item12": Moveto [Titulo Grade12]  

             Case Field()="Titulo Grade12" : Moveto [Codigo Item11] 
             Case Field()="Titulo Grade11" : Moveto [Codigo Item10] 
             Case Field()="Titulo Grade10" : Moveto [Codigo Item9]  
             Case Field()="Titulo Grade9"  : Moveto [Codigo Item8]  
             Case Field()="Titulo Grade8"  : Moveto [Codigo Item7]  
             Case Field()="Titulo Grade7"  : Moveto [Codigo Item6]  
             Case Field()="Titulo Grade6"  : Moveto [Codigo Item5]  
             Case Field()="Titulo Grade5"  : Moveto [Codigo Item4]  
             Case Field()="Titulo Grade4"  : Moveto [Codigo Item3]  
             Case Field()="Titulo Grade3"  : Moveto [Codigo Item2]  
             Case Field()="Titulo Grade2"  : Moveto [Codigo Item1]  
             Case Field()="Titulo Grade1"  : Moveto [Descricao da Grade]  
             OtherWise                     : Left
           EndSwitch
      Case Retval="ENTER":
           Switch
             Case Field()="Descricao da Grade":
                  If not IsBlank([])
                     Then Moveto [Titulo Grade1]
                     else fastmsg("Valor invalido!")
                  endif    

             Case Field()="Titulo Grade1" : Moveto [Codigo Item1]     
             Case Field()="Titulo Grade2" : Moveto [Codigo Item2]     
             Case Field()="Titulo Grade3" : Moveto [Codigo Item3]     
             Case Field()="Titulo Grade4" : Moveto [Codigo Item4]     
             Case Field()="Titulo Grade5" : Moveto [Codigo Item5]     
             Case Field()="Titulo Grade6" : Moveto [Codigo Item6]     
             Case Field()="Titulo Grade7" : Moveto [Codigo Item7]     
             Case Field()="Titulo Grade8" : Moveto [Codigo Item8]     
             Case Field()="Titulo Grade9" : Moveto [Codigo Item9]     
             Case Field()="Titulo Grade10": Moveto [Codigo Item10]    
             Case Field()="Titulo Grade11": Moveto [Codigo Item11]    
             Case Field()="Titulo Grade12": Moveto [Codigo Item12]    

             Case Field()="Codigo Item1"  : if validacolunagrade([Titulo Grade1 ],[Codigo Item1 ]) then Moveto [Titulo Grade2 ] endif
             Case Field()="Codigo Item2"  : if validacolunagrade([Titulo Grade2 ],[Codigo Item2 ]) then Moveto [Titulo Grade3 ] endif
             Case Field()="Codigo Item3"  : if validacolunagrade([Titulo Grade3 ],[Codigo Item3 ]) then Moveto [Titulo Grade4 ] endif
             Case Field()="Codigo Item4"  : if validacolunagrade([Titulo Grade4 ],[Codigo Item4 ]) then Moveto [Titulo Grade5 ] endif
             Case Field()="Codigo Item5"  : if validacolunagrade([Titulo Grade5 ],[Codigo Item5 ]) then Moveto [Titulo Grade6 ] endif
             Case Field()="Codigo Item6"  : if validacolunagrade([Titulo Grade6 ],[Codigo Item6 ]) then Moveto [Titulo Grade7 ] endif
             Case Field()="Codigo Item7"  : if validacolunagrade([Titulo Grade7 ],[Codigo Item7 ]) then Moveto [Titulo Grade8 ] endif
             Case Field()="Codigo Item8"  : if validacolunagrade([Titulo Grade8 ],[Codigo Item8 ]) then Moveto [Titulo Grade9 ] endif
             Case Field()="Codigo Item9"  : if validacolunagrade([Titulo Grade9 ],[Codigo Item9 ]) then Moveto [Titulo Grade10] endif
             Case Field()="Codigo Item10" : if validacolunagrade([Titulo Grade10],[Codigo Item10]) then Moveto [Titulo Grade11] endif
             Case Field()="Codigo Item11" : if validacolunagrade([Titulo Grade11],[Codigo Item11]) then Moveto [Titulo Grade12] endif
             Case Field()="Codigo Item12" : if validacolunagrade([Titulo Grade12],[Codigo Item12]) then quitloop                endif

           EndSwitch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVE=0
              Then If QuerExcluir("")
                      Then Grava_LogEx("Tipo de Grade")
                           DEL
                           QuitLoop
                   EndIf
           EndIf
      EndSwitch
EndWhile
EndProc

;*******************************************************************************
;*  ROTINA PARA                                                                *
;*******************************************************************************
Proc validacolunagrade(titulo, codigo)
private vrok, msgok

vrok =true
msgok="Valor(es) inv lido(s) nesta coluna !"

switch
  case isblank(titulo)     and not isblank(codigo)         : vrok=false
  case not isblank(titulo) and     isblank(codigo)         : vrok=false
  case not isblank(titulo) and     codigo="0"              : vrok=false msgok="Valor  0 nÆo  permitido !"
  case not isblank(titulo) and     codigo="00"             : vrok=false msgok="Valor 00 nÆo  permitido !"
  case not isblank(titulo) and     
       not ConteudoNumerico(codigo)                        : vrok=false
endswitch

if not vrok
   then fastmsg(msgok)
endif

return vrok
endproc

;*******************************************************************************
;*  ROTINA PARA                                                                *
;*******************************************************************************
Proc atencao()

COR_MENSAGEM="1"

MSG=    "Se voc incluir, alterar ou excluir esta grade observe:  //"
MSG=MSG+" - como ficam as referncias j  cadastradas,             //"
MSG=MSG+" - como ficam os pedidos j  lanados,                    //"
MSG=MSG+"   ** no caso de pedidos em aberto **                    // //"

MSG=MSG+"As referncias e pedidos devem ser corrigidos pois:      //"
MSG=MSG+" - o sistema no faz isso automaticamente,               //"
MSG=MSG+" - erros de itens no cadastrados vo ocorrer,           //"
MSG=MSG+" - erros de grade da referncia vo ocorrer,             // //"

MSG=MSG+" ** Ao criar nova grade faa primeiro um planejamento    //"
MSG=MSG+"    para evitar maiores transtornos.                     // //"
MSG=MSG+"Para maiores esclarecimentos contacte o suporte da Vise !"

Mensagem(MSG)

EndProc

;*******************************************************************************
;*  ROTINA PARA PAGINACAO DE TABELA EM FORM                                    *
;*******************************************************************************
Proc Pagina2(TABIDA,TIPO)

If RecordStatus("New")=True
   Then Del
EndIf

EDITAR="N"
EXCLUIR="N"
If RecordStatus("New")
   Then MENSAGEM("Tabela sem Registros !")
        Return
EndIf

Moveto TABIDA

If TIPO="MR"
   Then Switch
          Case RetVal="F7" or RetVal="HOME":
               Home
          Case RetVal="PGUP":
               PgUp
        EndSwitch
   Else Switch
          Case RetVal="F7" or RetVal="HOME":
               Home
          Case RetVal="UP":
               Return
        EndSwitch
EndIf

ImageRights ReadOnly
MSG="Codigo da grade"
SetaCorRegistro("Paginar")
While True

   If TIPO="MR"
      Then Prompt " Esc=Retornar  Enter=Editar  Del=Excluir  Ctrl+Z=Pesquisar  Alt+Z=Prąximo"
      Else Prompt " Esc=Retornar  F9=Editar  Del=Excluir  Ctrl+Z=Pesquisar  Alt+Z=Prąximo"
   EndIf

   Wait Table
   Message(MSG)
     Until "F1","F2","F9","F35","ESC","ENTER","DEL","Down","Up","FIELDVIEW","ZOOM","ZOOMNEXT"

     If RetVal = "F1"
        Then Loop
     EndIf

     If RetVal = "ZOOM"
        Then PESQUISA()
             Loop
     EndIf
     If RetVal = "ZOOMNEXT"
        Then PESQUISACON()
             Loop
     EndIf
     If Retval = "ESC"
        Then QuitLoop
     EndIf
     If Retval = "Down"
        Then If TIPO = "MR"
                Then If Not AtLast()
                        Then Down Down
                Moveto[Codigo da grade]
                MSG="Codigo da grade"
                        Else QuitLoop
                     EndIf
                Else Right
             EndIf
     EndIf
     If Retval = "Up"
        Then If TIPO = "MR"
                Then Up Up
                Moveto[Codigo da grade]
                MSG="Codigo da grade"
                Else Left
             EndIf
     EndIf
     If Retval = "F9" Or Retval = "F2" Or Retval = "ENTER"
        Then If RetVal="ENTER" And TIPO="MT"
                Then Loop
             EndIf
             If Not IsLockRecord()
                Then EDITAR="S"
                     PegaposForm()
                     QuitLoop
             EndIf
     EndIf
     If Retval = "DEL"
        Then If Not IsLockRecord()
                Then EXCLUIR="S"
                     QuitLoop
             EndIf
     EndIf
EndWhile
ImageRights
SetaCorRegistro("Editar")
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
DIGITA()
If RecordStatus("Locked") Then UnLockRecord EndIf         
Endproc

;*************************************************
;* Rotina Principal                              *
;*************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bib_Proc"
CoEdit "TpGrade"
PickForm "F"
While True
  CHAVE()
  If CHAVE=9
     Then QuitLoop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
