;** EmitCheq *******************************************************************
;*  Emissao de Cheque                                                          *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 18/11/1996 por Anivel Augusto Rodrigues
;Ultima Alteracao: 19/03/2001 por Anivel Augusto Rodrigues
;Motivo Alteracao: ShowDialog
;Ultima Alteracao: 06/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado processo para gera‡Æo do [Numero do Lancamento] "Interno"
;Ultima Alteracao: 14/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")

;*******************************************************************************
;* Rotina p/ Selecionar e Ordenar Registros                                      *
;*******************************************************************************
Proc SELECIONA()
ClearAll

{Ask} {Titulos} Check
Moveto [Codigo da Conta   ] TypeIn "~VSDGCONTA.."
Moveto [Data a Pagar      ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM "
Moveto [Saldo do Documento] TypeIn "> 0.01 "
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Seleciona Titulos para Emissao de Cheque
;*******************************************************************************
Proc CHAVE()
While True
  End
  Down
  Moveto [Tipo do Documento]
  While True

        Prompt " Esc=Sair  F4=Imprimir  F7=Paginar  F8=Atualizar  "

        Wait Field
             Until "ESC","ENTER","F7","HOME","UP","PGUP","F4","F8",
            -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140
            
      If SubStr(RetVal,1,2)="-1"      
         Then SYS_TECLA_ACIONADA=RetVal 
              Seta_Tecla_Acionada()     
              RetVal="ESC"            
      EndIf                             
                                                                          

        Switch
        Case RetVal="F4" And Field()="Tipo do Documento":
             Del
             IMPRIME()
             CHAVE=5
             QuitLoop
        Case RetVal="F8":
             CONFIRMA()
             If OK="S"
                Then BAIXA()
                     CHAVE=9
                     QuitLoop
             Endif
        Case (RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME") And Field()="Tipo do Documento":
             While True
               PAGINA(Tabela,"MR")
               If EDITAR="S"
                  Then CHAVE=0
                       Return
                  Else If EXCLUIR="S"
                          Then CONFIRMA()
                               If OK="S"
                                  Then DEL
                               EndIf
                          Else End
                               Down
                               Moveto [Tipo do Documento]
                               QuitLoop
                       EndIf
               EndIf
               End Down
             EndWhile
        Case Retval="ESC":
             If Field()="Tipo do Documento"
                Then CHAVE=9
                     Do_It!
                     ClearAll
                     Quitloop
             EndIf
        EndSwitch
  EndWhile
  If CHAVE=0 OR CHAVE=9
     Then QuitLoop
  EndIf
EndWhile
EndProc

;*******************************************************************************
;* Digita Novo Valor                                                           *
;*******************************************************************************
Proc DIGITAV()
Moveto [Saldo do Documento]
While True
  Prompt " Esc=Retornar  "

  Wait Field
       Until "ESC","ENTER"

  Switch
  Case Retval="ESC" Or RetVal="ENTER":
       If Field()="Saldo do Documento"
          Then CHAVE=9
               Quitloop
       EndIf
  EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Rotina De Impressao                                                         *
;*******************************************************************************
Proc IMPRIME()
OP_SHOWD="2"
ShowDialog "Informe" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "ENTER","ESC"
   @ 08,23   Height 06 Width 33

  @ 0,1 ?? "N§ Cheque inicial:"
  Accept @ 00,20 width 9 "N" Picture "######"  tag "TG_NUMCHQ" to VSDGNUMCHQ

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

EndDialog
If Not RetVal
   Then Return
EndIf
Do_it!
ClearAll

NR = NRecords(Tabela)
View "\\Sistemas\\Cadastro\\Destinat"
CoEdit Tabela
Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, Imprimindo Cheques "+BARRA_STRING)

   ESCEXT([Saldo do Documento])
   Print Spaces(67)+Format("W11.2,EIC",[Saldo do Documento])+"\n\n"
   Print Spaces(03)+SubStr([Nome Fantasia EmitDest],1,13)+"\n"
   Print Spaces(07)+SubStr([Nome Fantasia EmitDest],14,07)+Spaces(20)+SubStr(EXTENSO,1,52)+"\n"
   Print Spaces(03)+StrVal(VSDGDTREF)+Spaces(09)+SubStr(EXTENSO,53,60)+"\n\n"
   COD_CLIENTE=[Codigo do Emitente]
   Moveto "\\Sistemas\\Cadastro\\Destinat"
   Moveto [Codigo]
   Locate COD_CLIENTE
   If RetVal
      Then Print Spaces(22) +[Razao Social]+"\n"
      Else Moveto Tabela
           Print Spaces(22) +[Nome Fantasia EmitDest]+"\n"
   EndIf
   Moveto Tabela
   Print Spaces(42)+"   Divinopolis, "+StrVal(Day(VSDGDTREF))+Spaces(05)+MESEXT(MONTH(VSDGDTREF))
   Print "/"+Spaces(01)+StrVal(Substr(Year(VSDGDTREF),3,4))+"\n"
   Print Spaces(01)+[Tipo do Documento]+"/"+[Serie do Documento]+"\n"
   Print Spaces(01)+[Numero do Documento]+"\n\n"
   [Codigo CCusto]=ALINHM(Strval(VSDGNUMCHQ),6)
   Print Spaces(01)+[Codigo CCusto]+"\n\n\n"
   Print Spaces(04)+Format("W11.2,EIC",[Saldo do Documento])+ Spaces(58)+[Codigo CCusto]+"\n\n\n\n"
   VSDGNUMCHQ=VSDGNUMCHQ+1
EndScan

Moveto Tabela
PickForm "F"
SetHighLight Current Record 23 Field 31
LIMPAGUARDE()
MENSAGEM("Impressao Concluida!, se OK Atualizar Dados")
EndProc

;*******************************************************************************
;* Seleciona Registros para Emissao de Cheque                                  *
;*******************************************************************************
Proc SELECIONAI()
CoEdit Tabela
PickForm "F"
SetHighLight Current Record 23 Field 31
While True
  CHAVE()
  If CHAVE=9
     Then QuitLoop
  EndIf
  DIGITAV()
EndWhile
ClearAll
EndProc

;*******************************************************************************
;*Realiza Baixa Automatica Contas a pagar/ Conta Corrente                      *
;*******************************************************************************
Proc BAIXA()
Do_it!
ClearAll

NR = NRecords(Tabela)
View   "Titulos"
View   "TitBaixa"
View   "\\Sistemas\\CtaCor\\MovCont"
View   "\\Sistemas\\CtaCor\\SaldCont"
CoEdit Tabela

Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, Atualizando Dados "+BARRA_STRING)
   CopyToArray REG_TABELA

   NLANC=[Numero do Lancamento]
   For I from 1 to 8
       NITEM=StrVal(I)
       Moveto "TitBaixa"
       Moveto [Numero do Lancamento]
       Locate NLANC,NITEM
       If Not Retval
          Then End Down
               [Numero do Lancamento]=NLANC
               [Sequencia da Baixa  ]=NITEM
               QuitLoop
       EndIf
   EndFor
   [Codigo da Empresa ]=REG_TABELA["Codigo da Empresa"]
   [Data do Pagamento ]=VSDGDTREF
   [Valor do Pagamento]=REG_TABELA["Saldo do Documento"]
   [Codigo da Conta   ]=REG_TABELA["Codigo da Conta"]
   [Numero do Cheque  ]=REG_TABELA["Codigo CCusto"]

   Moveto "Titulos"
   Moveto [Numero do Lancamento]
   Locate NLANC
   JUROS=REG_TABELA["Saldo do Documento"]-[Titulos->Saldo do Documento]
   If JUROS<0
      Then DESCTO=JUROS*-1
           JUROS =0
      Else DESCTO=0
   EndIf
   [Saldo do Documento]=[Saldo do Documento]-REG_TABELA["Saldo do Documento"]

;;;Atualiza Conta Corrente
   ANOREF=StrVal(Year([\Sistemas\CtaPag\TitBaixa->Data do Pagamento]))
   MESREF=StrVal(Month([\Sistemas\CtaPag\TitBaixa->Data do Pagamento]))
   MESREF=ALINHM(MESREF, 2)

   Moveto "\\Sistemas\\CtaCor\\SaldCont"
   Moveto [Codigo da Conta]
   Locate VSDGCONTA,ANOREF,MESREF
   If Not RetVal
     Then End
          Down
          [Codigo da Conta]=REG_TABELA["Codigo da Conta"]
          [Ano Referencia ]=ANOREF
          [Mes Referencia ]=MESREF
   EndIf
   [Saidas]=[Saidas]+[\Sistemas\CtaPag\TitBaixa->Valor do Pagamento]
   UnLockRecord

   Moveto "\\Sistemas\\CtaCor\\MovCont"
   While True
     End
     Moveto [Numero do Lancamento]
     If Numero_Lancamento("Interno","Locked_Down")
        Then NLANCMC = PROXLANCTO_NLANC
             Release Vars PROXLANCTO_NLANC
             quitloop
     EndIf    
   EndWhile
   
   ;End
   ;Moveto [Numero do Lancamento]
   ;If Numero_Lancamento("Interno","")
   ;   Then NLANCMC = PROXLANCTO_NLANC
   ;        Release Vars PROXLANCTO_NLANC
   ;EndIf
   ;Down
   ;[Numero do Lancamento  ]=NLANCMC
   
   [Codigo da Conta       ]=REG_TABELA["Codigo da Conta"]
   If [\Sistemas\CtaPag\TitBaixa->Tipo da Conta]<>"C"
      Then [Tipo de Operacao    ]="06"
      Else [Tipo de Operacao    ]="05"
   EndIf
   [Data                  ]=[\Sistemas\CtaPag\TitBaixa->Data do Pagamento ]
   [Valor                 ]=[\Sistemas\CtaPag\TitBaixa->Valor do Pagamento]
   [Valor do Desconto     ]=DESCTO
   [Valor do Juros        ]=JUROS
   [Numero do Cheque      ]=REG_TABELA["Codigo CCusto"]
   [Codigo do Documento   ]=[\Sistemas\CtaPag\Titulos->Codigo do Documento]
   [Numero do Documento   ]=[\Sistemas\CtaPag\Titulos->Numero do Documento]
   [Descricao do Historico]="PG "+[\Sistemas\CtaPag\Titulos->Tipo do Documento]+
                            "/"+[\Sistemas\CtaPag\Titulos->Numero do Documento]
   [Sistema Gerador       ]="CP"
   [Empresa Gerador       ]=REG_TABELA["Codigo da Empresa"]
   [Lancamento Gerador    ]=REG_TABELA["Numero do Lancamento"]
   [Sequencia Gerador     ]=NITEM
   [Codigo do EmitDest    ]=REG_TABELA["Codigo do Emitente"]
   [Tipo do Lancamento    ]=REG_TABELA["Tipo do Lancamento"]
   [Codigo CCusto         ]=[\Sistemas\CtaPag\Titulos->Codigo CCusto     ]
   UnLockRecord

   Moveto "TitBaixa"
   Moveto [Numero do Lancamento]
   Locate NLANC,NITEM
   [Valor do Juros           ]=JUROS
   [Valor do Desconto        ]=DESCTO
   [Lancamento Conta Corrente]=NLANCMC

   Moveto Tabela
EndScan
Do_it!
ClearAll
LIMPAGUARDE()
MENSAGEM("Atualizacao Concluida!")
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA=""
MSG_CAMPO=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_NUMCHQ"        : Campo="NO"
            Case Campo="TG_CONTA"         : Campo="NO"
            Case Campo="TG_DTINI"         : Campo="TG_CONTA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_DTREF"         : Campo="TG_DTFIM"
            Case Campo="YES" Or Campo="NO":
                 IF OP_SHOWD="1"
                    Then Campo="TG_CONTA"
                    Else Campo="TG_NUMCHQ"
                 EndIf
          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"      :
                         If VSDGTPCONTA<>"C"
                            Then Mensagem("Conta Invalida !")
                                 VSDGNOMCONTA=""
                            Else Campo="TG_DTINI"
                         EndIf
                    Case Campo="TG_DTINI"      : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"      : Campo="TG_DTREF"
                    Case Campo="TG_DTREF"      : Campo="YES"
                    Case Campo="TG_NUMCHQ"     :
                         VSDGNUMCHQ=ControlValue("TG_NUMCHQ")
                         Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
LimpAguarde()

VSDGCONTA  =""
VSDGDTINI  =BlankDate()
VSDGDTFIM  =BlankDate()
VSDGDTREF  =Today()
VSDGNUMCHQ =BlankNum()

While True
  OP_SHOWD="1"
  ShowDialog "Emiss„o de Cheque c/ Baixa Autom tica" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 11 Width 56
    Label  @ 00,00 "Conta"  For "TG_CONTA"
    Accept @ 01,01 Width 07 "A4"  Picture "#*#" Tag "TG_CONTA"    To VSDGCONTA
    Accept @ 01,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMCONTA" To VSDGNOMCONTA

    Label  @ 02,00 "Periodo Referente" For "TG_DTINI"
    Label  @ 03,00 "de" For "TG_DTINI"
    Accept @ 03,04 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 03,17 "at‚" For "TG_DTFIM"
    Accept @ 03,22 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 04,00 "Data Emiss„o" For "TG_DTREF"
    Accept @ 05,01 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTREF" To VSDGDTREF

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGDTFIM)
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf
  If IsBlank(VSDGDTREF)
     Then Mensagem("Data Emiss„o Invalida !")
          Loop
  EndIf

  If Not IsBlank(VSDGCONTA)
     Then View "\\Sistemas\\CtaCor\\Conta"
          Moveto [Codigo da Conta]
          Locate VSDGCONTA
          If Not Retval
             Then MENSAGEM("Conta N„o Cadastrada !")
                  ClearAll
                  Loop
          EndIf
          If [Tipo da Conta]<>"C"
             Then MENSAGEM("Conta N„o Corresponde a Banco! ")
                  ClearAll
                  Loop
          EndIf
          ClearAll
     Else Loop
  EndIf

  AGUARDE("Aguarde, Filtrando Dados")
  Tabela=Cria_Temp(PrivDir())

  Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
  While Novo_Dir_Trab()
    If Not IsTable("\\Sistemas\\CtaPag\\"+Dir_Trab+"Titulos")
       Then Loop
    EndIf

    SetDir "\\Sistemas\\CtaPag\\"+Dir_Trab

    Seleciona()

    If IsTable(Tabela)
       Then Add "Answer" Tabela
       Else Rename "Answer" Tabela
    EndIf
  EndWhile

  If IsEmpty(Tabela)
     Then MENSAGEM("N„o existem registros a processar")
          Delete Tabela
          Loop
  EndIf
  CopyForm "Titulos" "5" Tabela "F"
  SELECIONAI()
  Echo Normal
  Echo Off

  Delete Tabela

EndWhile
ClearAll
Release Vars All
Release Procs All

