;** PED_GRP ********************************************************************
;*  Ajusta cores para itens relacionados a grupos vinculados a regras          *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/04/2021 por Bruno Carvalho
;Ultima Alteracao: 16/04/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado biblioteca "Bib_Bloq" 

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

FACA_DIGITAC  =True
INICIO_PAGINA =True
VSPORC        =BlankNum()

While True
  End
  Moveto [CodigoDaRegra]
  NLANC = [CodigoDaRegra]
  If OPCAO_FORM="F"
    Then Down
    Else CtrlPgDn
  EndIf 
  Moveto [CodigoDaRegra]
  SetaCorRegistro("Editar")
  While True
    Finalizar=False
    TECLA=""
                                                     
    AguardaTeclasPadrao() 
    Switch
      Case RetVal=-33 : SemFuncoes()
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal=-33 : SemFuncoes()
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           FACA_DIGITAC =True
           INICIO_PAGINA=True    
           VSPORC       =BlankNum()              
           Del
           While True            
             Finalizar=False
             If OPCAO_FORM="F"
                 Then PAGINA("RegraTPC","MR")
                 Else PAGINA("RegraTPC","MT")
             EndIf
             If EDITAR="S"                         
                Then REGRA  = [DescricaoDaRegra]
                     INATIVO= [RegraInativa    ]
                     PickForm "1"
                     Echo Normal
                     Echo Off
                     SetaCorRegistro("Editar")
                     If Checa_Controle([Numero_Controle_Dia])
                        Then CHAVEC=0
                             Controla_EdicaoC()
                        Else UnLockRecord
                     EndIf      
                 Else If EXCLUIR="S"
                         Then If QuerExcluir("deste Registro")
                                 Then PickForm "1"
                                      EXCLUSAOI()
                                 Else UnLockRecord
                              EndIf
                              If OPCAO_FORM="1"
                                 Then PickForm "1"
                                 Else PickForm "F"
                              EndIf
                         Else QuitLoop
                    EndIf
             EndIf
             SetaPosForm()
           EndWhile
           QuitLoop
      Case Retval="ESC": 
           Switch
           Case Field()="DescricaoDaRegra" Or Field()="CodigoDaRegra":
                If [DescricaoDaRegra] <> "" Or [RegraInativa] <> ""
                   Then If QuerDesfazer("")
                           Then Del
                                QuitLoop
                           Else Loop     
                        EndIf   
                EndIf
                CHAVEC=9
                Del
                Return                       
           OtherWise:
                Left
           EndSwitch     
      Case Retval="ENTER":
         Switch
            Case Field()="CodigoDaRegra" :
                 If Numero_Lancamento("","F")
                    Then NLANC = PROXLANCTO_NLANC
                         Release Vars PROXLANCTO_NLANC 
                    Else QuitLoop
                 EndIf

                 PickForm "1"
                 Moveto [CodigoDaRegra]
                 If PROXIMO_LANCTO_REG_ACHOU
                    Then CHAVEC=0
                         Echo Normal
                         Echo Off
                         If Checa_Controle([Numero_Controle_Dia])
                            Then Return
                         EndIf
                    Else CHAVEC=1
                         If Checa_Controle(SYS_CONTROLE_DIA)
                            Then Return  
                         EndIf
                 EndIf
                 PickForm FORM_RELACAO
                 QuitLoop
         EndSwitch
       EndSwitch
  EndWhile
EndWhile
                      
EndProc                

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DIGITAC()
If Not IsAssigned(ALTERA_GRUPO) Then ALTERA_GRUPO = False EndIF

FACA_CHAVEI   = True
INICIO_PAGINA = False

Moveto [DescricaoDaRegra]
While True                                            
  TECLA= " Esc=Retornar"
  
  Nome_Campo()
  Prompt TECLA
  SetaCorRegistro("Editando")
  
  Wait Field
       Until "ESC","ENTER","FIELDVIEW","F35"
  
  Switch
    Case Retval="FIELDVIEW" or Retval="F35":
         EDITFIELD()
    Case Retval="ESC": 
         Switch
           Case Field()="DescricaoDaRegra"    : 
                If QuerDesfazer("")
                   Then If CHAVEC=1
                           Then EXCLUSAO_C()
                           Else Undo
                        EndIf
                EndIf       
                CHAVEC=9
                Return
           Case Field()="IndiceFormacaoPV"    : Moveto [DescricaoDaRegra]  
           Case Field()="OrigemPreco"         : Moveto [IndiceFormacaoPV]
           Case Field()="CodigoDaRegraOrigem" : If [OrigemPreco]="R" 
                                                   Then Moveto [OrigemPreco     ]
                                                   Else Moveto [IndiceFormacaoPV]
                                                EndIf                                           
           Otherwise                          : Left
         EndSwitch            
    Case Retval="ENTER":
         Switch
           Case Field()="DescricaoDaRegra"    : If IsBlank([]) Then Loop EndIf 
                                                Moveto [IndiceFormacaoPV] 
           Case Field()="IndiceFormacaoPV"    : Moveto [OrigemPreco]  
           Case Field()="OrigemPreco"         : If IsBlank([]) Then Loop EndIf
                                                If [OrigemPreco]="R"
                                                   Then Moveto [CodigoDaRegraOrigem]
                                                   Else If IsBlank([IndiceFormacaoPV]) 
                                                           Then Mensagem("Informe o ¡ndice de forma‡Æo do pre‡o de venda!")
                                                                Moveto [IndiceFormacaoPV] 
                                                                Loop 
                                                           Else Moveto [PrPraticadoIgualSugerido]
                                                        EndIf    
                                                EndIf   
           Case Field()="CodigoDaRegraOrigem" : If IsBlank([]) Then Loop EndIf 
                                                GetRecord "\\Sistemas\\Producao\\RegraTPC" [CodigoDaRegraOrigem] To REG_REGRATPC 
                                                If RetVal
                                                   Then Moveto [PrPraticadoIgualSugerido]
                                                   Else Mensagem("Regra nÆo foi localizada!")
                                                        Loop
                                                EndIf   
           Case Field()= "PrPraticadoIgualSugerido" :
                                                If IsBlank([]) 
                                                   Then []="N" 
                                               EndIf 
                                               Moveto [RegraInativa] 
           Case Field() = "RegraInativa"      : If IsBlank([]) 
                                                   Then [] = "N" 
                                                   Else If IsAssigned(INATIVO) And INATIVO<>[RegraInativa]
                                                           Then Switch
                                                                  Case [RegraInativa] = "N" : MSG="Deseja realmente ativar este agrupamento ?"
                                                                  Case [RegraInativa] = "S" : MSG="Deseja realmente inativar este agrupamento ?"
                                                                EndSwitch  
                                                                ConfGeral(MSG)
                                                                If Ok<>"S"
                                                                   Then [RegraInativa] = INATIVO     
                                                                EndIf    
                                                        EndIf
                                                EndIf
                                                Return
         EndSwitch
  EndSwitch
EndWhile

EndProc  ; (DigitaC)    

;*******************************************************************************
;* Rotina para Digitacao do(s) Grupo(s) vinculados … Regra                     *
;*******************************************************************************
Proc CHAVEI()

Moveto "RegraTPC"
SetaCorRegistro("Padrao")

FACA_CHAVEI = True          
While True
  Moveto "RegraTPD"
  Moveto [PorcentagemDoCusto]  VSPORC=ImageCSum()
  Moveto [Sequencia]
  End
  COD_REGR = [CodigoDaRegra]
  SEQ      = [Sequencia]
  Down
  [CodigoDaRegra] = [RegraTPC->CodigoDaRegra]                                                                            
  Moveto [Sequencia]
         
  Seta_Sequencia(SEQ,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf
  
  SetaCorRegistro("Editar")
  While True
    ;TECLA= " Esc=Retornar               Alt+F=Fun‡”es  PgUp/PgDn "
    TECLA= " Esc=Retornar                              PgUp/PgDn "
    
    Nome_Campo()
    Prompt TECLA
    If IsAssigned(PAGINA)
       Then If PAGINA = "F7"
               Then RetVal="F7"
               Else Release Vars PAGINA
            EndIf
    EndIf           
   
    If Not IsAssigned(PAGINA)
       Then Wait Field
            Until "ESC","ENTER","F3","F5","F7","HOME","UP","PGUP","PGDN","PGUP","F4","F8","F9",-33     
    EndIf
     
    If RetVal=-33
       Then ;Echo Normal
            ;Echo Off
  
            ;ShowPopup " Fun‡”es " CENTERED
            ; "F4 ~~         " : "  " :"F4",
            ; 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="F1"   :
    Case Retval="PGDN":
         Del
         If RecordStatus("New")=True
            Then MENSAGEM("A rela‡Æo da regra de custo deve ter pelo uma ocorrˆncia lan‡ada!")
                 QuitLoop
         EndIf
         CHAVEI=9
         Return
    Case RetVal="ESC" : 
         Switch
           Case Field()="Sequencia":
                
                Del
                If RecordStatus("New")=True
                   Then ConfGeral("A rela‡Æo da regra de custo deve ter pelo uma ocorrˆncia lan‡ada!//"+
                                  "Deseja retornar para a rela‡„o das regras sem incluir uma regra?")
                        If OK<>"S"
                           Then QuitLoop
                        EndIf         
                EndIf
                CHAVEI = 9 
                Return
          Otherwise : Left
         EndSwitch 
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           Moveto [PorcentagemDoCusto]  VSPORC=ImageCSum()
           PAGINA("RegraTPD","MR")
           If EDITAR="S"
               Then CHAVEI=0
                    Return
               Else If EXCLUIR="S"
                       Then If QuerExcluir("deste Registro")
                               Then Del
                               Else UnLockRecord
                            EndIf
                       Else QuitLoop
                  EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ENTER": 
         If IsBlank([]) Then Loop EndIf
         Switch
           Case Field()="Sequencia" : 
                SEQ_ITEM = [Sequencia]
                Del
                Locate SEQ_ITEM
                If Not RetVal
                   Then CHAVEI=1
                        End
                        Switch
                          Case (SEQ_ITEM > [Sequencia]+1) And [Sequencia] >= 1 :
                               Mensagem("A sequˆncia do item deve ser sequencial !")
                               QuitLoop
                          Case SEQ_ITEM = 0 :
                               Mensagem("A sequˆncia do item deve ser um n£mero v lido !")
                               QuitLoop
                        EndSwitch   
                        Down
                        [] = SEQ_ITEM
                   Else CHAVEI=0     
                EndIf
                Return  
         EndSwitch
    EndSwitch
  EndWhile
EndWhile             

EndProc   ; CHAVEI()

;*******************************************************************************
;* Rotina para Digitacao das Informacoes                                       *
;*******************************************************************************
Proc DIGITAI()
      
Moveto [DescricaoDoCusto]
While True
  If CHAVEI=0
     Then TECLA=TECLA+"Del=Excluir"
  EndIf
  TECLA= " Esc=Retornar  F1=Consulta  "

  Nome_Campo()
  Prompt TECLA
  SetaCorRegistro("Editando")

  Wait Field
       Message MSGCAMPO
       Until "ESC","ENTER","DEL","FIELDVIEW","F35"
  
  Switch
  Case RetVal = "F1" : 
  Case Retval="ESC":
       If Field()="DescricaoDoCusto"
          Then If QuerDesfazer("")
                  Then If CHAVEC=1
                          Then Del
                          Else If RecordStatus("Modified")
                                  Then Undo
                               EndIf
                       EndIf
                       CHAVEI=9
                       QuitLoop
               Endif 
          Else Left
       EndIf
  Case Retval="ENTER":
       Switch
         Case Field() = "DescricaoDoCusto" :  
              If Not IsBlank([])
                 Then Moveto [PorcentagemDoCusto]
              EndIf    
         Case Field() = "PorcentagemDoCusto" :               
              If Not IsBlank([])
                 Then Quitloop
              EndIf       
       EndSwitch
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVEI=0
          Then CONFIRMA()
               If OK="S"
                  Then DEL
                       QuitLoop
               EndIf
       EndIf
  EndSwitch
EndWhile

EndProc ;DigitaI()

;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc EXCLUSAO_C()

Moveto "RegraTPD"
While RecordStatus("New")=False
  While IsLockRecord() EndWhile
  EXCLUSAOI()
EndWhile

Moveto "RegraTPC"
UnLockRecord
KeyPress "F7"

Del

EndProc   ; EXCLUSAO_C()

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc EXCLUSAOI()

CHAVEI=8
Del

EndProc  

;*******************************************************************************
;* Rotina para identificar o nome do campo                                     *
;*******************************************************************************
Proc Nome_Campo()  

;[OrigemPreco]
;"Origem do Pre‡o de Venda  (F=Formula  R=Regra) *Ponto de partida do valor base para calcudo PV, F=Custo Total  R=Valor Calculado de Outra Regra

Switch
  Case Field()="CodigoDaRegra"        : MSGCAMPO = "Codigo do Agrupamento"
  Case Field()="DescricaoDaRegra"     : MSGCAMPO = "Descri‡Æo da Regra"
  Case Field()="IndiceFormacaoPV"     : MSGCAMPO = "Öndice de Forma‡Æo do Pre‡o de Venda"
  Case Field()="OrigemPreco"          : MSGCAMPO = "Valor base para calcudo PV, F=Custo Total  R=Valor Calculado de Outra Regra"
  Case Field()="CodigoDaRegraOrigem"  : MSGCAMPO = "C¢digo da Regra de Origem"
  Case Field()="Sequencia"            : MSGCAMPO = "Sequˆncia do Custo"
  Case Field()="DescricaoDoCusto"     : MSGCAMPO = "Descri‡Æo do Custo"        
  Case Field()="PorcentagemDoCusto"   : MSGCAMPO = "Porcentagem do Custo"
  Case Field()="RegraInativa"         : MSGCAMPO = "Regra Inativa? Sim/NÆo"
  Case field()="PrPraticadoIgualSugerido" : MSGCAMPO = "[Pre‡o Praticado] = [Pre‡o Sugerido]? Sim/NÆo" 
  Case Field()="Flag"                 : MSGCAMPO = "ENTER=Prosseguir"
  OtherWise                           : MSGCAMPO = Field() 
EndSwitch
  
EndProc ;Nome_Campo()  

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
                     
SetaCorRegistro("Padrao")
While FACA_DIGITAC
  DIGITAC()
  If CHAVEC = 9 Then QuitLoop EndIf
  If CHAVEC = 1
     Then Controle_Dia()
  EndIf
  While FACA_CHAVEI
    CHAVEI()
    If CHAVEI=9 Then QuitLoop EndIf
    If CHAVEI=7 Then     Loop EndIf
    Controla_EdicaoI()     
  EndWhile
  QuitLoop
EndWhile
Moveto "RegraTPD"  SetaCorRegistro("Padrao")
Moveto "RegraTPC"
If RecordStatus("Locked") Then UnLockRecord EndIf         

If OPCAO_FORM="F"
   Then PickForm "F"
EndIf

EndProc                      

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()

DIGITAI() 
Moveto "RegraTPD"
If RecordStatus("Locked") Then UnLockRecord EndIf         
SetaCorRegistro("Padrao")

EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Cadastro\\Bib_Proc,"+
        "\\Sistemas\\Cadastro\\Bib_Bloq"
        
Sys_Valor()    

If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA  =""  EndIf
        
CoEdit "RegraTPC"
PickForm "1"
Moveto "RegraTPD"  SetaCorRegistro("Padrao")

Moveto "RegraTPC"
PickForm "F"

OPCAO_FORM="F"
While True
  CHAVE()
  If CHAVEC=9
     Then QuitLoop
  EndIf
  If CHAVEC=6
     Then If OPCAO_FORM="F"
             Then PickForm "F"
             Else PickForm "1"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
