;** PlContas *******************************************************************
;*  Manutencao Cadastro de Plano de Contas                                     *
;*******************************************************************************
;Autor: Visao/Vise
;Desenvolvido    : 02/10/2002 por Anivel Augusto Rodrigues
;Ultima Alteracao: 20/12/2005 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao do Tipo_Custo (Fixo/Variavel)
;Ultima Alteracao: 04/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes                                 
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 10/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Editar Tipo_Custo (Fixo/Variavel)
;Ultima Alteracao: 10/09/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Tipo_Custo (Fixo/Variavel/"Blank")
;Ultima Alteracao: 28/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas
;Ultima Alteracao: 04/04/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes "SetaCorRegistro" 
;Ultima Alteracao: 01/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SetaCorRegistro("Editando") 
;Ultima Alteracao: 19/06/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado coluna INATIVO no form
;Ultima Alteracao: 07/11/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado FORM p/ edi‡Æo de demonstrativo de resultado -> "F8"
;Ultima Alteracao: 18/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes checagens 
;Ultima Alteracao: 21/10/2017 por Anivel Augusto Rodrigues 
;Motivo Alteracao: ajustes  
;Ultima Alteracao: 30/11/2017 por Anivel Augusto Rodrigues 
;Motivo Alteracao: ajustes Editar()
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() p/ gravar log de erros ao excluir registros
;Ultima Alteracao: 21/06/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado [TipoEntradaSaida] 
 
;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVE()
While True
  SetaCorRegistro("Editar") 
  End
  SEQ = [Codigo Plano_Conta]
  Down
  Moveto [Codigo Plano_Conta]
  EDITAR=""

  While True

  TECLA="F5=Estrutura"
  AguardaTeclasPadrao()

  If RetVal=-33
    Then Echo Normal
         Echo Off
         ShowPopup " Fun‡”es " CENTERED
          "~F8~ Editar Demonstrativo de Resultado" : "Editar Demonstrativo de Resultado" : "F8",
          "~F9~ Editar Especial"                   : "Edi‡„o Especial                  " : "F9",
          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="F3": SemFicha()
  Case RetVal=-94 : MsgTeclasPadrao() 
  Case RetVal="F5":
       PARAMETRO()
       QuitLoop
  Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
       While True
             PAGINA("PlContas","MR")
             If EDITAR="S"
                Then CHAVE=0
                     Controla_EdicaoC()
                Else If EXCLUIR="S"
                        Then If QuerExcluir("")
                                Then Grava_LogEx("Plano de Conta") 
                                     DEL
                                Else UnLockRecord
                             EndIf
                        Else QuitLoop
                     EndIf
             EndIf
             SetaPosForm()
           EndWhile
           QuitLoop  
  Case RetVal="F9":
         Del
         While True
           PAGINA_PLANO("PlContas","MR")
           If CHAVE=9 Then QuitLoop EndIf
         EndWhile
         QuitLoop
         
  Case RetVal="F8":
         Del
         CHAVE=0
         Editar(RetVal)
         CHAVE=5
         quitloop
        
  Case Retval="ESC":
         CHAVE=9
         Del
         Return
  Case Retval="ENTER":
         If Not Checa_Chave("N")
            Then QuitLoop
            Else Return
         EndIf
  EndSwitch
 EndWhile
EndWhile
EndProc

;*******************************************************************************
;* Rotina para checagem da chave                                               *
;*******************************************************************************
Proc Checa_Chave(Tipo)
Private Tipo

CODIGO=[]
Del
If IsBlank(CODIGO)
   Then Return False
EndIf

Moveto [Codigo Plano_Conta]
Locate CODIGO
If Retval
   Then CHAVE=0
   Else CHAVE=1
        If Tipo="E"
           Then Keypress "INS"
           Else End Down
        EndIf
        [Codigo Plano_Conta]=CODIGO
        CHAVE=1
EndIf
If Not IsLockRecord()
   Then Locate CODIGO
        Return True
EndIf
Return False
EndProc

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

TIPO_ENTRADA_SAIDA = [TipoEntradaSaida]
Moveto [Descricao Plano_Conta]
While True
      TECLA= " Esc=Retornar  "
      If CHAVE=0
         Then TECLA=TECLA + "Del=Excluir  "
      EndIf

      MSGCAMPO=""
      Switch
        Case Field()="Conta Contabil"        : MSGCAMPO="Conta Contabil"
        Case Field()="Descricao Plano_Conta" : MSGCAMPO="Descri‡Æo do Plano de Conta"  
        Case Field()="TipoEntradaSaida"      : MSGCAMPO="Tipo de Movimento: Entrada/Saida" 
        Case Field()="Inativo"               : MSGCAMPO="Inativo: Sim/N„o"
        Case Field()="Tipo de Conta"         : MSGCAMPO="Tipo de Conta: Analitica/Sintetica"
        Case Field()="Tipo_Custo" Or
             Field()="Tipo_custo"            : Switch
                                                 Case SubStr([Codigo Plano_Conta],1,1)="1" Or
                                                      SubStr([Codigo Plano_Conta],1,1)="3"  : MSGCAMPO="Entradas Tipo: Fixa / Vari vel"
                                                 Case SubStr([Codigo Plano_Conta],1,1)="2" Or
                                                      SubStr([Codigo Plano_Conta],1,1)="4"  : MSGCAMPO="  Saidas Tipo: Fixa / Vari vel"
                                                 OtherWise                                  : MSGCAMPO="Entradas/Saidas -> Tipo: Fixa / Vari vel"     
                                               EndSwitch
      EndSwitch
      If Field()="Descricao Plano_Conta"
         Then []=LTrim([])
      EndIf
      If Field()="Codigo do Historico"
         Then MSGCAMPO="Historico Padr„o"
              TECLA=TECLA+"F1=Consulta  "
      EndIf
      Prompt TECLA
      SetaCorRegistro("Editando")
      Wait Field
           Message MSGCAMPO
           Until "ESC","ENTER","DEL","FIELDVIEW","F35","F1"

      Switch
      Case RetVal="F1":
           If Field()="Codigo do Historico"
              Then CONSULTAF1()
           EndIf

      Case Retval="ESC":
           Switch
             Case Field()="Descricao Plano_Conta" :
                  If QuerDesfazer("")
                     Then If CHAVE=1
                             Then Del
                             Else Undo
                          EndIf
                          CHAVE=9
                          QuitLoop
                   EndIf       
              Case Field()="Tipo de Conta" : 
                   If Search(".",[Codigo Plano_Conta])=0
                       Then Moveto [TipoEntradaSaida     ]
                       Else Moveto [Descricao Plano_Conta]
                    EndIf 
              OtherWise : Left
           EndSwitch
      Case Retval="ENTER":
           Switch
             Case Field() = "TipoEntradaSaida"    : Switch
                                                      Case Not IsBlank([TipoEntradaSaida]) And TIPO_ENTRADA_SAIDA<>"" And [TipoEntradaSaida]<>TIPO_ENTRADA_SAIDA : 
                                                           MSG = ""
                                                           Switch
                                                             Case TIPO_ENTRADA_SAIDA="E" : MSG = "Deseja alterar o tipo para SAIDA?" 
                                                             Case TIPO_ENTRADA_SAIDA="S" : MSG = "Deseja alterar o tipo para ENTRADA?"
                                                           EndSwitch
                                                           If MSG <> "" 
                                                              Then If Not ConfGeral(MSG)
                                                                      Then [TipoEntradaSaida] = TIPO_ENTRADA_SAIDA
                                                                      Else TIPO   = [TipoEntradaSaida ] 
                                                                           CODIGO = [Codigo Plano_Conta]
                                                                           Home
                                                                           Scan For SubStr([Codigo Plano_Conta],1,1)=SubStr(CODIGO,1,1)
                                                                             [TipoEntradaSaida] = TIPO
                                                                           EndScan
                                                                           Moveto [Codigo Plano_Conta]
                                                                           Locate CODIGO
                                                                           Moveto [TipoEntradaSaida]
                                                                           Right
                                                                           Release Vars TIPO,CODIGO
                                                                   EndIf
                                                           EndIf
                                                      Case IsBlank([TipoEntradaSaida]) :
                                                           Mensagem("Informe se este plano de conta ‚ ENTRADA ou SAIDA!")
                                                      OtherWise :
                                                           Right
                                                    EndSwitch
             Case Field() = "Codigo do Historico"   : QuitLoop
             Case Field() = "Tipo de Conta"         : If IsBlank([]) Then Loop   EndIf Right
             Case Field() = "Inativo"               : If IsBlank([]) Then []="N" EndIf Right 
             Case Field() = "Conta Contabil"        : Right 
             Case Field() = "Tipo_Custo"           Or
                  Field() = "Tipo_custo"            : Right
             Case Field() = "Descricao Plano_Conta" :
                  []=LTrim([])
                  Switch
                    Case Not IsBlank(SubStr([Codigo Plano_Conta],11,3)) : []="        "+[]
                    Case Not IsBlank(SubStr([Codigo Plano_Conta],08,2)) : []="      "+[]
                    Case Not IsBlank(SubStr([Codigo Plano_Conta],05,2)) : []="    "+[]
                    Case Not IsBlank(SubStr([Codigo Plano_Conta],03,1)) : []="  "+[]
                  EndSwitch
                  If Search(".",[Codigo Plano_Conta])>0
                     Then GetRecord "PlContas" SubStr([Codigo Plano_Conta],1,1) To REG_PLCONTAS
                          If RetVal
                             Then [TipoEntradaSaida] = REG_PLCONTAS["TipoEntradaSaida"]
                         EndIf
                  EndIf
                  If IsBlank([TipoEntradaSaida])
                     Then ;Tipo D‚bito ou Cr‚dito pr‚ definido
                          Switch
                            Case SubStr([Codigo Plano_Conta],1,1)="1" : [TipoEntradaSaida] = "E"
                            Case SubStr([Codigo Plano_Conta],1,1)="2" : [TipoEntradaSaida] = "S"
                            Case SubStr([Codigo Plano_Conta],1,1)="3" : [TipoEntradaSaida] = "S"
                            Case SubStr([Codigo Plano_Conta],1,1)="4" : [TipoEntradaSaida] = "E"
                          EndSwitch
                  EndIf
                  If Search(".",[Codigo Plano_Conta])=0
                     Then Right
                     Else Moveto [Tipo de Conta]
                  EndIf
           EndSwitch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVE=0
              Then If QuerExcluir("")
                      Then Grava_LogEx("Plano de Conta")
                           DEL
                           QuitLoop
                   EndIf
           EndIf
      EndSwitch
EndWhile
UnLockRecord
EndProc

;*******************************************************************************
;* Rotina para Digitacao dos Precos                                            *
;*******************************************************************************
Proc Editar(Opcao)
Private Opcao, ncampoedit,REG_DRC, nrec

If Opcao="F8" 
   Then PickForm "1"
   
        scan for [DRConta_Codigo]<>""
        
          GetRecord "\\Sistemas\\CtaCor\\DRC" [DRConta_Codigo] To REG_DRC
          If RetVal
             Then [DRConta_Descricao]=REG_DRC["DRConta_Descricao"]
          endif
        
        endscan
    
   Else Return 
EndIf

Home
Moveto [DRConta_Codigo]

While True
      DRC_COD=[DRConta_Codigo   ]
      DRC_DES=[DRConta_Descricao]

      PegaPosForm()
      If Field()<>"DRConta_Codigo"
         Then ImageRights ReadOnly
         Else ImageRights
      EndIf

      TECLA=" F3=Retornar             Ctrl+Z=Localizar  "

      If Field()="DRConta_Codigo"
         Then MSGCAMPO="Demonstrativo de Resultado, [F1]Consultar tabela"
              TECLA=" F3=Retornar  F1=Tabela  Ctrl+Z=Localizar  "
      EndIf
      
      Prompt TECLA
      Wait Field
           Until "ENTER","DEL","FIELDVIEW","F35","ZOOM","ZOOMNEXT","UP","DOWN","PGUP","PGDN",
                 "HOME","END","DEL","RIGHT","LEFT","F1","F3","ESC"

      Switch
      Case RetVal="F1":
           If Field()="DRConta_Codigo"
              Then CONSULTAF1()
           EndIf
      Case RetVal="ZOOM": 
           PESQUISA()                  
      Case RetVal="ZOOMNEXT":
           PESQUISACON()
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           FastMsg("Exclus„o n„o permitida !")
           
      OtherWise: 
           Tecla_Press=RetVal
           ncampoedit=Field()
           nrec=recno()
           
           Switch
            Case Retval="F3":
                 If RecordStatus("Modified")
                      Then If not Checa_DRC()
                              Then moveto record nrec
                                   Moveto Field ncampoedit
                                   loop
                           EndIf
                 EndIf
                 QuitLoop
            Case Retval="ESC": 
                 Mensagem("Para finalizar utilize a tecla F3!")
            OtherWise:
            
                 if field()="DRConta_Codigo"
                    then 
                         if Checa_DRC()
                            then
                                 if Tecla_Press="ENTER"
                                    then KeyPress "DOWN"
                                         Moveto [DRConta_Codigo]
                                    else KeyPress Tecla_Press    
                                 endif
                         endif           
                    else     
                         if Checa_DRC()
                            then KeyPress Tecla_Press
                         endif          
                 endif
           EndSwitch
           
           If RecordStatus("New")
              Then Del
                   QuitLoop
           EndIf
      EndSwitch
EndWhile    
ImageRights

If Opcao="F8" 
   Then PickForm "F"
EndIf

EndProc ;Editar()

;*******************************************************************************
;* Rotina checagem Codigo de Barras                                            *
;*******************************************************************************
Proc Checa_DRC()
Private Result,REG_DRC

Result=True

If [DRConta_Codigo   ]="" 
   Then ImageRights
        [DRConta_Descricao]=""
        ImageRights ReadOnly
        Return Result
EndIf

GetRecord "\\Sistemas\\CtaCor\\DRC" [DRConta_Codigo   ] To REG_DRC
If Not RetVal
   Then Mensagem("Conta Demonstrativo de Resultado n„o localizado: "+[DRConta_Codigo   ])
        Result=False
   Else 
        If REG_DRC["DRConta_Operacao"]="CTV" or 
           REG_DRC["DRConta_Operacao"]="CTF" or
           REG_DRC["DRConta_Operacao"]="SPC" or
           REG_DRC["DRConta_Operacao"]="CNO" 
           Then 
                Return Result
           else 
                Mensagem("Conta Demonstrativo de Resultado n„o permitida para relacionar !")  

                [DRConta_Codigo   ]=""
                [DRConta_Descricao]=""
                              
                Result=False
        EndIf
EndIf           

Return Result

Endproc ;Checa_DRC()

;*******************************************************************************
;* Rotina p/ Visualizar tipos de parametros                                    *
;*******************************************************************************
Proc PARAMETRO()
ShowDialog "C¢digo" @ 08,25 height 06 width 20
  @ 00,01 ?? "Estrutura:     "
  @ 01,01 ?? "  9.9.99.99.999"
  @ 02,01 ?? "               "
  @ 03,01 ?? "9 = N£mero     "
  Pushbutton @ 01,30 width 10 "OK" OK default Value "Say Yes" Tag "YES"  to BottonValue
  Pushbutton @ 01,40 width 10 "CANCEL" CANCEL Tag "NO"  to BottonValue

Enddialog
EndProc

;*******************************************************************************
;*  ROTINA PARA PAGINACAO DE TABELA EM FORM                                    *
;*******************************************************************************
Proc Pagina_Plano(TabIda,Tipo)
Private TABIDA,TIPO

Home
While True
   SetaCorRegistro("Paginar")
   ImageRights ReadOnly

   Prompt " Esc=Retornar  Ins=Incluir  Enter=Editar  Del=Excluir  Ctrl+Z=Pesquisar  Alt+Z=Pr¢ximo"

   Wait Table
     Until "F1","F2","F9","F35","ESC","ENTER","DEL","Down","Up","FIELDVIEW","ZOOM","ZOOMNEXT","INS"

     If RetVal = "F1"
        Then Loop
     EndIf

     If RetVal = "ZOOM"
        Then PESQUISA()
             Loop
     EndIf
     If RetVal = "ZOOMNEXT"
        Then PESQUISACON()
             Loop
     EndIf
     If Retval = "ESC"
        Then CHAVE=9
             QuitLoop
     EndIf
     If Retval = "Down"
        Then Down
     EndIf
     If Retval = "Up"
        Then Up
     EndIf
     If Retval = "F9" Or Retval = "F2" Or Retval = "ENTER"
        Then If Not IsLockRecord()
                Then ImageRights
                     SetaCorRegistro("Editar")
                     CHAVE=0
                     Controla_EdicaoC()
             EndIf
     EndIf
     If Retval = "INS"
        Then ImageRights
             Ins
             SetaCorRegistro("Editar")

             Moveto [Codigo Plano_Conta]

             Prompt " Esc=Cancelar "

             Wait Field
                  Until "ESC","ENTER"

             Switch
             Case Retval="ESC":
                  Del
             Case Retval="ENTER":
                  If Checa_Chave("E")
                     Then DIGITA()
                  EndIf
             EndSwitch
     EndIf
     If Retval = "DEL"
        Then If Not IsLockRecord()
                Then CONFIRMA()
                     If OK="S"
                        Then ImageRights
                             Grava_LogEx("Plano de Conta")
                             DEL
                     EndIf
             EndIf
     EndIf
EndWhile
ImageRights
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"
CoEdit NoWINDOW "PlContas"
PickForm "F"
While True
  CHAVE()
  If CHAVE=9
     Then QuitLoop
  EndIf
  If CHAVE=5
     Then PickForm "F"
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
