;** Baixach ********************************************************************
;*  Baixa Cheques Descontados                                                  *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 16/10/1996 por Anivel Augusto Rodrigues
;Ultima Alteracao: 19/08/2002 por Anivel Augusto Rodrigues
;Motivo Alteracao: Checagem DTDescto<DtLancamento
;Ultima Alteracao: 05/06/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Nova Navegacao
;Ultima Alteracao: 08/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pagina() MRNS
;Ultima Alteracao: 06/02/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes dtcheque
;Ultima Alteracao: 18/02/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Sort    
;Ultima Alteracao: 19/11/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes N-Cheques p/ Deposito
;Ultima Alteracao: 21/11/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cheque p/ deposito                
;Ultima Alteracao: 20/01/2012 por Karina Andrade
;Motivo Alteracao: InclusÆo tag periodo de emissÆo
;Ultima Alteracao: 16/10/2012 por Kamila Gomes
;Motivo Alteracao: Ajuste Ask com sys_codigo 0298
;Ultima Alteracao: 05/05/2015 por Andrey Fillipe
;Motivo Alteracao: Criado opcao F8 para fazer o procedimento p/ descontar todos os registro de uma vez
;                  sera possivel deletar os registro que nao quiser descontar
;Ultima Alteracao: 23/07/2015 por Andrey Fillipe
;Motivo Alteracao: Adicionado mensagem no F3 (Sair)
;Ultima Alteracao: 05/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes getp_titulo() em Carrega_Parametros()
;Ultima Alteracao: 06/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 22/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog 
;Ultima Alteracao: 03/01/2017 por Rafael Matos
;Motivo Alteracao: Ajustes showdialog MensagemRadioButtons()
;Ultima Alteracao: 15/02/2017 por Rafael Matos
;Motivo Alteracao: Ajuste Ask com SYS_CODIGO_CLIENTE 0274                    
;Ultima Alteracao: 26/06/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Filtro e fun‡äes                  
;Ultima Alteracao: 27/06/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Filtro e fun‡äes                  
;Ultima Alteracao: 27/04/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pega mes fechado e tratamento mes fechado

;*******************************************************************************
;* Rotina p/ Selecionar e Ordernar Registros                                   *
;*******************************************************************************
Proc Seleciona()
ClearAll

If IsTable("\\Sistemas\\Ctacor\\"+Dir_Trab+"MovCont")
  Then 
      {Ask} {Movcont} Check
      Moveto [Codigo da Conta       ] TypeIn "~VSDGCONTA.."
      Moveto [Tipo da Conta         ] TypeIn "C"
      if VSDGOPCAOF=1 or VSDGOPCAOF=2
         then Moveto [Tipo de Operacao      ] TypeIn "05 or 08"
         else Moveto [Tipo de Operacao      ] TypeIn "01 or 14"
      endif   
      Moveto [Tipo Movimento        ] TypeIn "S"
      Moveto [Numero do Cheque      ] TypeIn "Not Blank"
      Moveto [Data                  ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM "
      If VSDGOPCAOF=1 or VSDGOPCAOF=3 
         Then Moveto [Data Cheque Descontado] TypeIn "Blank"
      EndIf
      Do_It!
      ClearAll
      
      {Ask} {Answer} TypeIn "Fast Delete"
      Moveto [Tipo de Operacao      ] TypeIn "08"
      Moveto [Tipo do Lancamento    ] TypeIn "O or P"
      Do_It!
      ClearAll
      
      if not isblank(Dir_Trab)
         then
              {Ask} {Answer} TypeIn "Fast"
              Moveto [Descricao do Lancamento    ] TypeIn "changeto MESFECHADO"
              Do_It!
              ClearAll
      endif    
EndIf
EndProc 

;*******************************************************************************
;* Rotina Processa                                                             *
;*******************************************************************************
Proc Processa()

Limparodape(0)
AGUARDE("Selecionando Registros")

Tabela = Cria_Temp(PrivDir())

If VSDGOPCAOF=1 or VSDGOPCAOF=3 
   Then 
        Dir_Trab="" 
        Seleciona()
        Rename "Answer" Tabela
   else        
        Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
        While Novo_Dir_Trab()
          If IsTable("Answer")     Then Delete "Answer" EndIf
          Seleciona()
          If Not IsTable("Answer") Then Loop EndIf
          If IsTable(Tabela)
             Then Add "Answer" Tabela
             Else Rename "Answer" Tabela
          EndIf
        EndWhile
EndIf

If IsEmpty(Tabela)
   Then MENSAGEM("N„o existem registros a processar")
        Delete Tabela

        LimpAguarde()
        Return
EndIf

{Tools} {Copy} {JustFamily} {Movcont} TypeIn Tabela Enter {Replace}
ClearAll
LIMPAGUARDE()

Sort Tabela On "Numero do Cheque"
ClearAll

CoEdit Tabela
{TableAdd} {MovCont}
{TableAdd} {TalaoChq}

Moveto Tabela
PickForm "3"
Moveto "Conta" SetHighLight Current Record 112 Field 112
Moveto [Codigo da Conta]
Locate VSDGCONTA

Moveto Tabela   

While True
  End
  Moveto [Numero do Cheque]
  Down                                   
  SetaCorRegistro("Editar")
  
  TECLA= "F3=Retornar  "
  
  AguardaTeclasPadrao()
  
  If RetVal=-33
     Then Echo Normal
          Echo Off
          
          ShowPopup " Fun‡”es " CENTERED
           "[F3] ~F~iltro inicial": " Voltar ao filtro inicial                 " : "F3",
           "[F5] Informar ~D~atas": " Informar datas para liquida‡Æo autom tica" : "F5",
           "[F8] ~A~tualizar     ": " Atualizar lan‡amentos                    " : "F8",
           "~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="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
          Del
          While True
            PAGINA(Tabela,"MR")
            Switch
              Case EDITAR="S"  :
                   if [Descricao do Lancamento]="MESFECHADO"
                      then fastmsg("Movimento referente a mˆs j  fechado !")
                      else DIGITA()
                   endif   
              Case EXCLUIR="S" :
                   UnLockRecord
              OtherWise: QuitLoop
            EndSwitch
            SetaPosForm()
          EndWhile
    Case RetVal="ESC" :
         Mensagem("Para finalizar utilize a tecla F3 !")
    Case RetVal="F3"  : 
         MSG="Deseja sair sem Baixar os cheques ?"
         If ConfGeral(MSG)
            Then QuitLoop  
         EndIf 
    Case RetVal="F5"  :
         Datas()
    Case RetVal="F8"  :    
         If Atualiza()  
            Then QuitLoop
         EndIf
    Case RetVal="ENTER"  : 
         Del        
  EndSwitch                 
EndWhile
Do_It!
ClearAll

LimpAguarde()
Delete Tabela
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog1(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_OPCAO"         : Campo="NO"
            Case Campo="TG_DTFIM2"        : Campo="TG_OPCAO"
            Case Campo="YES" Or Campo="NO": Campo="TG_OPCAO"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_OPCAO"  : 
                         If VSDGOPCAO=3
                            Then Campo="TG_DTFIM2"
                            Else VSDGDTFIM2=BlankDate()
                                 Campo="YES"
                         EndIf   
                    Case Campo="TG_DTFIM2" : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_OPCAO" :
       MensagemRadioButtons()
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina para Informar a Data do Desconto                                     *
;*******************************************************************************
Proc Datas()

VSDGOPCAO  = 3
VSDGDTINI2 = BlankDate()
VSDGDTFIM2 = BlankDate()

While True
  ShowDialog "Data para compensa‡Æo cheques/outros" Proc "SD_Dialog1"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 15 Width 45

    Label @ 00,00 "Op‡„o" For "TG_OPCAO"
    RadioButtons @ 01,01 Height 3 Width 40
       "Data de ~E~missao",
       "Data ~P~re-Datado",
       "~L~ivre"
       Tag "TG_OPCAO"
       To VSDGOPCAO
       
    Label  @ 05,00 "Data do Desconto" For "TG_DTFIM2"
    Accept @ 06,01 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM2" To VSDGDTFIM2

    @ 08,03 ?? "** Ser„o preenchidos todos os cheques"
    @ 09,03 ?? "       na data informada ! **"

    Pushbutton @ 11,09 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 11,23 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
    
  EndDialog
  If Not RetVal Then QuitLoop EndIf
  
  If VSDGOPCAO=1 Or VSDGOPCAO=2
     Then VSDGDTFIM2=BlankDate()
  EndIf
  
  If VSDGOPCAO=3 And VSDGDTFIM2=BlankDate()
     Then Mensagem("Data de Desconto Invalida !")
          Loop
  EndIf
  
  Atualizar_Datas()
  QuitLoop
  
EndWhile  

EndProc

;*******************************************************************************
;* Rotina para Atualizar Datas                                                 *
;*******************************************************************************
Proc Atualizar_Datas()
Private INCONS

Aguarde("Processando")

INCONS=False
Del
Moveto [Data Cheque Descontado]
Scan

  if [Descricao do Lancamento]="MESFECHADO"
     then loop
  endif   

  Switch
    Case VSDGOPCAO=1 :
         If [Data Cheque Descontado]=BlankDate()
            Then [Data Cheque Descontado]=[Data]
         EndIf   
    Case VSDGOPCAO=2 :
         If [Data Cheque Descontado]=BlankDate()
            Then [Data Cheque Descontado]=[Data Cheque Pre-Datado]
         EndIf   
    Case VSDGOPCAO=3 :
         If [Data Cheque Descontado]=BlankDate()
            Then If VSDGDTFIM2>[Data]
                    Then [Data Cheque Descontado]=VSDGDTFIM2
                    Else INCONS=True
                 EndIf
         EndIf           
  EndSwitch  
EndScan

LimpAguarde()

If INCONS
   Then MENSAGEM("Alguns cheques n„o foram preenchidos, devido a//"+
                 "data de desconto menor que a data de emiss„o.//Verificar !") 
   Else MENSAGEM("Opera‡„o Conclu¡da")
EndIf   

EndProc

;*******************************************************************************
;* Rotina para Atualizar Dados                                                 *
;*******************************************************************************
Proc Atualiza()
Private INCONS, regtabela

Aguarde("Processando")

INCONS=False

Del
UnLockRecord
FormKey
Home
Moveto [Numero do Lancamento]

While True
    copytoarray regtabela

    TudoOk=True
    Moveto "Movcont"
    Moveto [Numero do Lancamento]
    Locate regtabela["Numero do Lancamento"],regtabela["Codigo da Conta"]
    If Not RetVal Or IsLockRecord() Or 
       ([Data]>regtabela["Data Cheque Descontado"] And Not IsBlank(regtabela["Data Cheque Descontado"]))
       Then TudoOk=False
    EndIf
    
    If TudoOk
       Then [Data Cheque Descontado]=regtabela["Data Cheque Descontado"]
            UnLockRecord
            
            If PARAM_CONTROLA_TALAO="S"
               Then Moveto "TalaoChq"
                    Moveto [Codigo da Conta]
                    Locate regtabela["Codigo da Conta"],NumVal(regtabela["Numero do Cheque"])
                    If RetVal
                       Then [Data Descontado] = regtabela["Data Cheque Descontado"]
                            If [Data Descontado] = BlankDate()
                               Then [Situacao] = "A DESCONTAR"
                               Else [Situacao] = "DESCONTADO"
                            EndIf
                    EndIf
            EndIf
            Moveto Tabela   
            If AtLast()
               Then Del
                    QuitLoop
               Else Del
            EndIf
       Else INCONS=True
            Moveto Tabela   
            If AtLast()
               Then QuitLoop
               Else Down
            EndIf
    EndIf 
EndWhile           
    
Moveto Tabela
FormKey

LimpAguarde()

If INCONS
   Then MENSAGEM("Alguns cheques n„o foram descontados devido inconsistˆncia de data//"+
                 "desconto menor que a data de emiss„o ou registro nÆo encontrado.//Verificar !") 
        Return False
   Else MENSAGEM("Opera‡„o Conclu¡da")
        Return True
EndIf

EndProc

;*******************************************************************************
;* Rotina para Digitacao das Informacoes                                       *
;*******************************************************************************
Proc DIGITA()
VRANT=[Data Cheque Descontado]
Moveto [Data Cheque Descontado]
While True
  TECLA= " Esc=Retornar  F9=Hoje  "

  Prompt TECLA
  Wait Field
       Message "Informe a data que foi compensado !"
       Until "ESC","ENTER","FIELDVIEW","F35","F9"

  Switch
  Case Retval="ESC":
       If [Data]>[Data Cheque Descontado] And Not IsBlank([Data Cheque Descontado])
          Then Mensagem("Data compensa‡Æo menor que a Data de Emiss„o !")
          Else Undo
               QuitLoop
       EndIf
  Case Retval="F9":
       []=Today()
       QuitLoop
  Case Retval="ENTER":
       If [Data]>[Data Cheque Descontado] And Not IsBlank([Data Cheque Descontado])
          Then Mensagem("Data compensa‡Æo menor que a Data de Emiss„o !")
          Else QuitLoop
       EndIf
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_CONTA"         : Campo="NO"
            Case Campo="TG_DTINI"         : Campo="TG_CONTA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_OPCAO"         : Campo="TG_DTFIM"
            Case Campo="YES" Or Campo="NO": Campo="TG_CONTA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_CONTA" : Campo="TG_DTINI"
                         If IsBlank(VSDGCONTA)
                            Then VSDGNOMCONTA=""
                         Endif
                    Case Campo="TG_DTINI" : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM" : Campo="TG_OPCAO"     
                    Case Campo="TG_OPCAO" : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_CONTA":
     MSG_CAMPO="Somente uma Conta disponivel"
  Case Campo="TG_OPCAO":
       MSG_CAMPO="Selecione a op‡„o desejada"
       TECLA="=Selecionar  "
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Parm" 

sys_valor()

LimpAguarde()

VSDGTPCONTA=""
VSDGCONTA  =""
VSDGOPCAOF =1
VSDGDTINI   =BlankDate()
VSDGDTFIM   =BlankDate()

While True
  ShowDialog "Compensa‡Æo cheques emitidos/outros transa‡äes" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 15 Width 72

    Label  @ 00,00 "Conta"  For "TG_CONTA"
    Accept @ 01,01 Width 07 "A4"  Picture "#*#" Tag "TG_CONTA"    To VSDGCONTA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMCONTA" To VSDGNOMCONTA

    Label  @ 02,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 03,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 03,16 "at‚" For "TG_DTFIM"
    Accept @ 03,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label @ 05,00 "Op‡„o" For "TG_OPCAO"
    RadioButtons @ 06,00 Height 4 Width 60
       "~1~ S¢ os cheques emitidos e nÆo apresentados",
       "~2~ Todos os cheques emitidos",
       "~3~ Outras transa‡äes nÆo compensadas",
       "~4~ Todas as outras transa‡äes realizadas" 
       Tag "TG_OPCAO"
       To VSDGOPCAOF

    Pushbutton @ 11,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 11,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  msg=""
  getrecord "\\sistemas\\ctacor\\conta" VSDGCONTA to reg_conta
  if not retval
     Then msg="Conta Invalida !"
     else If reg_Conta["Tipo da Conta"]<>"C"
             Then msg="Tipo da Conta Invalida !"
          EndIf
  endif        
  If msg<>""
     Then mensagem(msg)
          Loop
  EndIf

  If VSDGDTFIM=BlankDate()
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf
  
  if Not getp_titulo(reg_conta["Codigo da Empresa"])
     then loop
  endif   
  
  Processa()
  
  Echo Normal
  Echo Off

EndWhile
ClearAll
Release Vars All
Release Procs All
