;** SdConta ********************************************************************
;*  Saldos de Contas                                                           *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 06/08/2001 por Anivel Augusto Rodrigues
;Ultima Alteracao: 02/02/2005 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 04/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Ano Referencia"
;Ultima Alteracao: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 03/01/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 02/01/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes "Ano Referencia" DEFINITIVAMENTE
;Ultima Alteracao: 07/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes cor editar

;*******************************************************************************
;* Rotina para Selecionar Conta                                                *
;*******************************************************************************
Proc Selecionar_Conta()
Monta_Opcoes("Conta","")

SetaCorRegistro("Editar")
While True
  Moveto [Codigo da Conta]
  Prompt " Esc=Sair  F1=Consulta  =Contań  "
  MSGTELA="Informe a conta !"

  Wait Field
       Until "ESC","ENTER","F1","UP","DOWN","HOME","END",
            -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140
            
  tmpretval=retval

      If SubStr(RetVal,1,2)="-1"
         Then SYS_TECLA_ACIONADA=RetVal 
              Seta_Tecla_Acionada()     
              RetVal="ESC"            
      EndIf                             
                                                                    

  If Retval="F1"
     Then If Seleciona_Opcoes("Conta","")
             Then [Descricao da Conta]=Registro_F1["Descricao da Conta"]
                  RetVal="ENTER"
          EndIf
  EndIf

  Switch
  Case Retval="ESC":
       Return False
  Case Retval="UP" Or
       Retval="HOME":
       Moveto [Lookup_Conta]
       Ativa_Lookup()
       If IsBlank([SdMaster->Codigo da Conta]) Or tmpRetval="HOME"
          Then HOME
          Else Moveto [Codigo da Conta]
               Locate [SdMaster->Codigo da Conta]
               Skip -1
               If BOT() Then Beep EndIf
       EndIf
       KeyPress "F2"
       [Codigo da Conta]=[Lookup_Conta]
       Resynckey
  Case Retval="DOWN" Or
       Retval="END":
       Moveto [Lookup_Conta]
       Ativa_Lookup()
       If IsBlank([SdMaster->Codigo da Conta]) Or tmpRetval="END"
          Then End
          Else Moveto [Codigo da Conta]
               Locate [SdMaster->Codigo da Conta]
               Skip
               If EOT() Then Beep EndIf
       EndIf
       KeyPress "F2"
       [Codigo da Conta]=[Lookup_Conta]
       Resynckey
  Case Retval="ENTER":
       If IsBlank([]) Then Loop EndIf
       []=ALINH()
       CONTA=[Codigo da Conta]

       Moveto [Lookup_Conta]
       Ativa_Lookup()
       Moveto [Codigo da Conta]
       Locate CONTA
       If RetVal
          Then CopyToArray Registro_Conta
               KeyPress "F2"
               [Descricao da Conta]=Registro_Conta["Descricao da Conta"]
               Return True
          Else KeyPress "ESC"
               Mensagem("Conta ["+CONTA+"] n„o cadastrada !")
               [Codigo da Conta      ]=""
               [Descricao da Conta   ]=""
       EndIf
  EndSwitch
EndWhile
EndProc  ; (Selecionar_Conta)

;*******************************************************************************
;* Rotina para Selecionar Mes/Ano                                              *
;*******************************************************************************
Proc Selecionar_Ano()
Resynckey
ANOFIM = Year(Today())

SetaCorRegistro("Editar")
While True
  Moveto [Ano Referencia]
  Prompt " Esc=Retornar  =Anoń  "
  MSGTELA="Informe o ano !"

  Wait Field
       Until "ESC","ENTER","UP","DOWN"

  Switch
  Case Retval="ESC":
       Return False
  Case Retval="ENTER":
       If NumVal([Ano Referencia])<=1980 Or NumVal([Ano Referencia])>=NumVal(ANOFIM)
          Then [Ano Referencia]=SubStr(Format("D13",Today()),7,4)
       EndIf
       If IsBlank([Ano Referencia])
          Then [Ano Referencia]=SubStr(Format("D13",Today()),7,4)
       EndIf
       []=ALINH()
       ANOREF=[Ano Referencia]
       Return True
  Case Retval="UP":
       [Ano Referencia]=StrVal(NumVal([Ano Referencia])+1)
  Case Retval="DOWN":
       [Ano Referencia]=StrVal(NumVal([Ano Referencia])-1)
  EndSwitch
  Resynckey
EndWhile
EndProc

;*******************************************************************************
;*  Ver meses do ano                                                           *
;*******************************************************************************
Proc Meses_Item()
EDITAR="N"
EXCLUIR="N"
If RecordStatus("New")
   Then MENSAGEM("Ano sem Registros !")
EndIf

SetaCorRegistro("Paginar")

ImageRights ReadOnly
While True

   Prompt " Esc/PgDn=Retornar  Ins=Novo  F3=Ficha  =Mover  "

   Wait Table
     Until "ESC","ENTER","F1","F3","INS","PGDN"

   Switch
      Case Retval="INS":
           Opcao_Ver=False
           CHAVEI=1
           QuitLoop
      Case Retval="ENTER":
           If Not ISBlank([Mes Referencia])
              Then Opcao_Ver=False
                   CHAVEI=0
                   QuitLoop
           EndIf
      Case Retval="F3":
           Opcao_Ver=True
           CHAVEI=0
           Inicia_Registro()
           DigitaI()
      Case Retval="ESC" Or RetVal="PGDN":
           CHAVEI=9
           QuitLoop
   EndSwitch
EndWhile
ImageRights
EndProc    ; (Meses_Item)

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Item_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True

If INICIO_DIALOG
   Then If CHAVEI=1
           Then Campo="I_Mes_Referencia"
           Else Campo="I_Saldo_Inicial"
        EndIf
        INICIO_DIALOG=False
EndIf

If Opcao_Ver=True Then Campo="I_Mes_Referencia" EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
       Case Opcao_Ver=True:
            Temp=False
            Switch
              Case Evento["KeyCode"] =  27:
                   CancelDialog
              OtherWise:
                Mover_Reg=True
                Switch
                  Case Evento["KeyCode"] = -71:
                       If AtFirst()
                          Then Mover_Reg=False Beep
                          Else Home
                       EndIf
                  Case Evento["KeyCode"] = -79:
                       If AtLast()
                          Then Mover_Reg=False Beep
                          Else End
                       EndIf
                  Case Evento["KeyCode"] = -73:
                       If AtFirst()
                          Then Mover_Reg=False Beep
                          Else Up
                       EndIf
                  Case Evento["KeyCode"] = -81:
                       If AtLast()
                          Then Mover_Reg=False Beep
                          Else Down
                       EndIf
                  Case Evento["KeyCode"] = -67:
                       Mover_Reg=False
                       Opcao_Ver=False
                       INICIO_DIALOG=True
                       Campo="I_Saldo_Inicial"
                EndSwitch
                If Mover_Reg=True
                   Then MESREF=[Mes Referencia]
                        Inicia_Registro()
                EndIf
            EndSwitch
       Case Evento["KeyCode"] = 9 Or
            Evento["KeyCode"] = -15:
            Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEI=0
               Then Confirma()
                    If OK="S"
                       Then CHAVEI=8
                            CancelDialog
                    EndIf
            EndIf
       Case Evento["KeyCode"] = 27:
            Switch
             Case Campo="I_Mes_Referencia":
                  CancelDialog
             Case Campo="I_Saldo_Inicial":
                  If CHAVEI=1
                     Then Campo="I_Mes_Referencia"
                     Else CancelDialog
                  EndIf
             Case Campo="I_Entradas": Campo="I_Saldo_Inicial"
             Case Campo="I_Saidas"  : Campo="I_Entradas"
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="I_Mes_Referencia":
                  VSD_I_Mes_Referencia=AlinhM(ControlValue("I_Mes_Referencia"),2)
                  If VSD_I_Mes_Referencia<"01" Or
                     VSD_I_Mes_Referencia>"12"
                     Then Mensagem("Mes invalido !")
                     Else Del
                          Moveto [Mes Referencia]
                          Locate [SdMaster->Codigo da Conta  ],
                                 [SdMaster->Ano Referencia   ],
                                 VSD_I_Mes_Referencia
                          If Not RetVal
                             Then End Down
                                  [Codigo da Conta  ]=[SdMaster->Codigo da Conta  ]
                                  [Ano Referencia   ]=[SdMaster->Ano Referencia   ]
                                  [Mes Referencia   ]=VSD_I_Mes_Referencia
                             Else CHAVEI=0
                                  Inicia_Registro()
                          EndIf
                          Campo="I_Saldo_Inicial"
                  EndIf
             Case Campo="I_Saldo_Inicial":
                  VSD_I_Saldo_Inicial=ControlValue("I_Saldo_Inicial")
                  VSD_I_Saldo_Atual=NDecimal((VSD_I_Saldo_Inicial+VSD_I_Entradas)-VSD_I_Saidas,5)
                  Campo="I_Entradas"
             Case Campo="I_Entradas":
                  VSD_I_Entradas=ControlValue("I_Entradas")
                  VSD_I_Saldo_Atual=NDecimal((VSD_I_Saldo_Inicial+VSD_I_Entradas)-VSD_I_Saidas,5)
                  Campo="I_Saidas"
             Case Campo="I_Saidas":
                  VSD_I_Saidas=ControlValue("I_Saidas")
                  VSD_I_Saldo_Atual=NDecimal((VSD_I_Saldo_Inicial+VSD_I_Entradas)-VSD_I_Saidas,5)
                  AcceptDialog
           EndSwitch
           Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="******"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf

Switch
  Case Campo="I_Mes_Referencia":
       MSGCAMPO="Mes Referente"
  Case Campo="I_Saldo_Inicial":
       MSGCAMPO="Saldo no inicio do mes"
  Case Campo="I_Entradas":
       MSGCAMPO="Entradas do mes"
  Case Campo="I_Saidas":
       MSGCAMPO="Saidas do mes"
  OtherWise:
       MSGCAMPO=""
EndSwitch

If CHAVEI=0
   Then TECLA=TECLA+"Ctrl+Del=Excluir  "
EndIf

If Opcao_Ver=True
   Then TECLA=" Esc=Retornar  F9=Editar  Home/End/PgDn/PgUp=Paginar  "
EndIf

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
RefreshDialog
Return TEMP
EndProc   ; (Item_Dialog)

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro
Switch
  Case Funcao_Registro="Gravar":
       [Mes Referencia        ]=VSD_I_Mes_Referencia
       [Saldo Inicial         ]=VSD_I_Saldo_Inicial
       [Entradas              ]=VSD_I_Entradas
       [Saidas                ]=VSD_I_Saidas
  Case Funcao_Registro="Ler":
       VSD_I_Mes_Referencia      =[Mes Referencia        ]
       VSD_I_Saldo_Inicial       =[Saldo Inicial         ]
       VSD_I_Entradas            =[Entradas              ]
       VSD_I_Saidas              =[Saidas                ]
       VSD_I_Saldo_Atual=NDecimal((VSD_I_Saldo_Inicial+VSD_I_Entradas)-VSD_I_Saidas,5)
EndSwitch
EndProc    ;(Registro_Item)

;*******************************************************************************
;* Rotina para Inicializar DigitaI                                             *
;*******************************************************************************
Proc Inicia_Registro()
ImageRights

;Switch
;  Case [Situacao]="T":
;       VSD_I_SITUACAO="TRANSFERIDO"
;  Case [Situacao]="F":
;       VSD_I_SITUACAO="FECHADO"
;  OtherWise:
;       VSD_I_SITUACAO=""
;EndSwitch

If CHAVEI=1
   Then KeyPress "INS"
EndIf
CopyToArray RegItem
INICIO_DIALOG=True
Registro_Item("Ler")
EndProc   ;(Inicia_Registro)

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI()
Showdialog "Dados do Mes" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea",
    "HOME","END","PGDN","PGUP","F9"
     @ 11,26 height 08 width 30

   Label  @ 00,00 "Mes " For "I_Mes_Referencia"
   Accept @ 00,05 Width 05 "A2" picture "#*#" Tag "I_Mes_Referencia" to VSD_I_Mes_Referencia

   Label  @ 02,00 "Inicial" For "I_Saldo_Inicial"
   Accept @ 02,10 Width 14 "$" picture "[-]#*#.[##]" Tag "I_Saldo_Inicial" to VSD_I_Saldo_Inicial
   Label  @ 03,00 "Entradas" For "I_Entradas"
   Accept @ 03,10 Width 14 "$" picture "#*#.[##]" Tag "I_Entradas"      to VSD_I_Entradas
   Label  @ 04,00 "Saidas" For "I_Saidas"
   Accept @ 04,10 Width 14 "$" picture "#*#.[##]" Tag "I_Saidas"        to VSD_I_Saidas
   Label  @ 05,00 "Final" For "I_Saldo_Atual"
   Accept @ 05,10 Width 14 "$" picture "[-]#*#.[##]" Tag "I_Saldo_Atual"   to VSD_I_Saldo_Atual

EndDialog
If RetVal
   Then Finaliza_Registro(True)
   Else Finaliza_Registro(False)
EndIf
EndProc    ; (DigitaI)

;*******************************************************************************
;* Rotina para Finalizar Digitacao DigitaI                                     *
;*******************************************************************************
Proc Finaliza_Registro(ok)
Private ok
If Ok
   Then Registro_Item("Gravar")
        UnLockRecord
   Else Moveto "SaldCont"
        If CHAVEI=0 Or CHAVEI=8
           Then CopyFromArray RegItem
        EndIf
        If CHAVEI=1 Or CHAVEI=8
           Then Del
        EndIf
EndIf
ImageRights ReadOnly
EndProc     ; (Finaliza_Registro)

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

CoEdit "SdMaster"
OPCAO_FORM_MASTER="F"
PickForm OPCAO_FORM_MASTER
;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Do_It!
        ClearAll
        Release Vars All
        Release Procs All
        return
EndIf

Executa = True
WV=0
Moveto "SdMaster"     SetaCorRegistro("Padrao")
Moveto "Conta"        SetaCorRegistro("Padrao")
Moveto "SaldCont"     SetaCorRegistro("Padrao")
Moveto "SdMaster"


While True
  End
  SeqMaster=[Sequencia]+1
  PgDn
  [Sequencia]=SeqMaster
  LockRecord
  If RetVal Then QuitLoop EndIf
EndWhile

If Executa
   Then [Ano Referencia]=StrVal(Year(Today()))
        [Mes Referencia]=AlinhM(StrVal(Month(Today())),2)
        [Mes]=MesExt(Month(Today()))
EndIf

While Executa
  If Not Selecionar_Conta() Then QuitLoop EndIf
  While Executa
    If Not Selecionar_Ano()   Then QuitLoop     EndIf
    SetaCorRegistro("Padrao")
    While Executa
      Moveto "SaldCont"

      Meses_Item()
      If CHAVEI=9
         Then QuitLoop
      EndIf
      Inicia_Registro()
      DigitaI()
    EndWhile
    SetaCorRegistro("Padrao")

    Moveto "SdMaster"
   ;PickForm OPCAO_FORM_MASTER
  EndWhile
EndWhile

;** Deletando Registro Master **
Moveto "SdMaster"
[Codigo da Conta       ]=""
Del
Do_It!
ClearAll
Release Vars All
Release Procs All
