;** TitBXII ********************************************************************
;*  Consulta/Edi‡Æo e Baixa de Titulos por Fornecedor                          *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 02/06/2004 por Anivel Augusto Rodrigues
;Ultima Alteracao: 30/11/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes padronizar com script Titulos usando apenas paramentro
;                  diferenciador assim este script nunca muda !!
;Ultima Alteracao: 14/12/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes para utiliza‡Æo do "novo layout"
;Ultima Alteracao: 04/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes LimpaRodape(1)
;Ultima Alteracao: 02/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CONTATO+TELEFONE+CELULAR+FAX    
;Ultima Alteracao: 28/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes showdialog TG_DESTINAT             
;Ultima Alteracao: 26/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes do_it! echo ao sair
;Ultima Alteracao: 14/12/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes posicionamento do indice na consulta     
;Ultima Alteracao: 05/10/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Baixa de t¡tulo II c0/ edi‡Æo t¡tulo"

;*******************************************************************************
;* Rotina para Localizar Registro Carteira                                     *
;*******************************************************************************
Proc Localiza_Lancto()
Private ok

OPCAO_FORM="4"
Moveto "Titulos"
PickForm "4"
Moveto [Numero do Lancamento]

Coeditkey

Ok=True                     
PASSOU=False
COPIOU_REGISTRO=False

IndiceReg=ControlValue("I_Registro")
NLANC=SubStr(Array_Registro[IndiceReg],78,6)

;;;;;campoorig=campo

While True                

  Moveto [Numero do Lancamento]
  Locate NLANC
  If Retval
     Then If IsLockRecord()
             Then Ok=False
                  QuitLoop
          EndIf

          If Not Checa_Controle([Numero_Controle_Dia])
             Then Ok=False
                  UnLockRecord
                  QuitLoop
          EndIf

          WinArray6["FLOATING"]=False
          Window SetAttributes JANELA_DIALOG From WinArray6
   
          SetaCorRegistro("Editar")
          CHAVEC=0
          Controla_EdicaoC()
          SetaCorRegistro("Paginar")
                  
          Seta_Array(IndiceReg)
          WinArray6["FLOATING"]=True
          Window SetAttributes JANELA_DIALOG From WinArray6
          Window Select JANELA_DIALOG
  
          Echo Normal
          Echo Off
     Else Mensagem("Lan‡amento n„o encontrado !")
          Ok=False
  EndIf
  QuitLoop
EndWhile

Do_It!

TECLA    =""
MSG_CAMPO=""
;;;;campo=campoorig

Return Ok
EndProc  ; (CHAVEC)

;*******************************************************************************
;* Rotina para Calcular JUros/Multa                                            *
;*******************************************************************************
Proc CalcJuros()
Private Saldo

If [Saldo do Documento]<=0
   Then Saldo=[Saldo do Documento]
        Return Saldo
EndIf

If [Data de Vencimento]<Today()
   Then NDA=Today()-[Data de Vencimento]
        TXM=[Multa]
   Else NDA=0
        TXM=0
EndIf
If [Data Limite Desconto]>=Today()
   Then VRDESCT=[Valor do Desconto]
   Else VRDESCT=0
EndIf

If [Taxa de Juros]>0
   Then TXJ=([Taxa de Juros]/[NDias Taxa de Juros])*NDA
        VRJUROS=Round((([Saldo do Documento]*TXJ)/100)+([Saldo do Documento]*TXM/100),2)
   Else VRJUROS=Round((([Valor de Juros]/[NDias Taxa de Juros])*NDA),2)
        VRJUROS=VRJUROS+Round((([Saldo do Documento]*TXM)/100),2)
EndIf

Saldo=([Saldo do Documento]+VRJUROS)-VRDESCT

Return Saldo
EndProc

;*******************************************************************************
;* Rotina para Montar Valores no Array                                         *
;*******************************************************************************
Proc Seta_Array(Indice)
Private Indice,Saldo

Saldo=calcJuros()

If IsAssigned(Array_Registro[Indice])
   Then If Not IsBlank(Array_Registro[Indice])
           Then WCSW_SDATU=WCSW_SDATU-NumVal(SubStr(Array_Registro[Indice],89,10))
                WCSW_SDATU=WCSW_SDATU+Saldo
        EndIf
EndIf

Switch
  Case VSDGORDEM="E" : 
    Array_Registro[Indice]=AlinhM(StrVal(Indice),4)+" "+
                           Format("D10",[Data de Emissao])+" "+
                           [Codigo da Empresa]+" "+
                           Completa([Tipo do Documento],5," ")+
                           Completa(SubStr([Numero do Documento],1,10),10," ")+" "+
                           Format("D10",[Data de Vencimento])+" "+
                           [Numero do Lancamento]+"  "+
                           Format("W11.2,EIC",[Valor do Documento])+" "+
                           Format("W12.2,EIC",Saldo)+" "+
                           [Numero do Lancamento]+" "+Spaces(3)+" "+StrVal(Saldo)
  Case VSDGORDEM="V" : 
    Array_Registro[Indice]=AlinhM(StrVal(Indice),4)+" "+
                           Format("D10",[Data de Vencimento])+" "+
                           [Codigo da Empresa]+" "+
                           Completa([Tipo do Documento],5," ")+
                           Completa(SubStr([Numero do Documento],1,10),10," ")+" "+
                           Format("D10",[Data de Emissao])+" "+
                           [Numero do Lancamento]+"  "+
                           Format("W11.2,EIC",[Valor do Documento])+" "+
                           Format("W12.2,EIC",Saldo)+" "+
                           [Numero do Lancamento]+" "+Spaces(3)+" "+StrVal(Saldo)
  Case VSDGORDEM="D" : 
    Array_Registro[Indice]=AlinhM(StrVal(Indice),4)+" "+
                           [Codigo da Empresa]+" "+
                           Completa([Tipo do Documento],5," ")+
                           Completa(SubStr([Numero do Documento],1,10),10," ")+" "+
                           Format("D10",[Data de Emissao])+" "+
                           Format("D10",[Data de Vencimento])+" "+
                           [Numero do Lancamento]+"  "+
                           Format("W11.2,EIC",[Valor do Documento])+" "+
                           Format("W12.2,EIC",Saldo)+" "+
                           [Numero do Lancamento]+" "+Spaces(3)+" "+StrVal(Saldo)
EndSwitch


EndProc

;*******************************************************************************
;* Rotina para Selecionar Registros                                            *
;*******************************************************************************
Proc Seleciona()
Private wc,pesq,msg

Verifica_Lancamentos=False

LimpaRodape(1)
Aguarde("Aguarde, Selecionando Registros")
If IsAssigned(Array_Registro)
   Then Release Vars Array_Registro
EndIf
DynArray Array_Registro[]

wc=0
WCSW_NLANC=wc

WCSW_SDATU=0
WCSW_SDINI=0
WCSW_BAIXA=0

Moveto "Titulos"

{Ask} {Titulos} Check
Moveto [Codigo do Emitente] TypeIn "~VSDGDESTINAT.."

Switch 
  Case VSDGTP="A" : Moveto [Saldo do Documento   ] TypeIn ">0.01"
  Case VSDGTP="B" : Moveto [Saldo do Documento   ] TypeIn "<=0.01"                    
EndSwitch
Do_It!

If Not IsEmpty("Answer")
   Then Verifica_Lancamentos=True      
EndIf

If Verifica_Lancamentos
   Then Switch
          Case VSDGORDEM="E" : Sort "Answer" On "Codigo do Emitente","Data de Emissao","Tipo do Documento","Numero do Documento","Numero do Lancamento"
          Case VSDGORDEM="V" : Sort "Answer" On "Codigo do Emitente","Data de Vencimento","Tipo do Documento","Numero do Documento","Numero do Lancamento"
          Case VSDGORDEM="D" : Sort "Answer" On "Codigo do Emitente","Tipo do Documento","Numero do Documento","Numero do Lancamento"
        EndSwitch

        While True
          wc=wc+1
          Seta_Array(wc)  

          WCSW_SDINI=WCSW_SDINI+CalcJUros()
          WCSW_SDATU=WCSW_SDINI

          Skip
          If EOT() Then QuitLoop EndIf

          If wc=1000
             Then MSG = "Sr. USUARIO. // //"
                  MSG = MSG +"MEMORIA INSUFICIENTE. (DOS/EMS)//"
                  MSG = MSG +"Somente parte da Pesquisa ser  mostrado.//"
                  MSG = MSG +"Caso queira continuar com a pesquisa,   //"
                  MSG = MSG +"preencha com mais informa‡”es o campo   //"
                  MSG = MSG +"para diminuir o numero de itens.          "
                  Mensagem(MSG)
                  QuitLoop
          EndIf
        EndWhile
        WCSW_NLANC=wc
EndIf

Switch
  Case VSDGORDEM="E" : LinhaCab="Seq   Emiss„o Empr Documento         Vencto Lan‡to   VrOriginal        Saldo"
  Case VSDGORDEM="V" : LinhaCab="Seq    Vencto Empr Documento        Emiss„o Lan‡to   VrOriginal        Saldo"
  Case VSDGORDEM="D" : LinhaCab="Seq  Empr Documento        Emiss„o   Vencto Lan‡to   VrOriginal        Saldo"
EndSwitch

Moveto "Answer"
ClearImage
Moveto "Titulos"
ClearImage

If DynArraySize(Array_Registro)=0 Or Not Verifica_Lancamentos
   Then Mensagem("Pesquisa sem Registro !")
        Return False
EndIf
LimpAguarde()
Return True
EndProc ; (Seleciona)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Consulta(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento

Temp=True
TECLA    =""
MSG_CAMPO=""
If INICIO_DIALOG2
   Then Campo="TG_DESTINAT"
        INICIO_DIALOG2=False
EndIf

If Disparo="OPEN"
   Then Dynarray WinArray6[]
        Window Handle Dialog To JANELA_DIALOG
        Window GetAttributes JANELA_DIALOG To WinArray6
        WinArray6["HASSHADOW"]  =False
        WinArray6["CANCLOSE"]   =True
        Window SetAttributes JANELA_DIALOG From WinArray6
EndIf   

If Disparo="CLOSE"
   Then If Campo="I_Registro"
           Then WCSW_NLANC =BlankNum()
                WCSW_SDATU =BlankNum()
                WCSW_SDINI =BlankNum()
                WCSW_BAIXA =BlankNum()
                Release Vars Array_Registro
                DynArray Array_Registro[]

                Moveto "Titulos"
                Moveto [Numero do Lancamento]
        Endif
        CanCelDialog
EndIf

If Disparo="EVENT" And Evento["Type"]="KEY" Then

   Switch
     Case Evento["KeyCode"] = 9 Or
          Evento["KeyCode"] = -15:
          Temp=False
     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"] = -59: 
          If Dialog_F1()
            Then VSDGCONTATO=Reg_ConsultaF1["Contato" ]+" - "+
                             Reg_ConsultaF1["Telefone"]+", "+
                             Reg_ConsultaF1["Celular" ]+", "+
                             Reg_ConsultaF1["Fax"     ]+"  " 
          EndIf
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            ;* Filtro
            Case Campo="TG_DESTINAT"    :
                 CancelDialog
            Case Campo="I_TP"         : Campo="TG_DESTINAT"
                 VSDGTP      =""
                 VSDGDESTINAT=""
                 VSDGNOMDEST =""
                 VSDGCONTATO =""
            Case Campo="I_ORDEM"      : Campo="I_TP"
            Case Campo="I_Registro"   : Campo="TG_DESTINAT"
                 LinhaCab=""
                 WCSW_NLANC =BlankNum()
                 WCSW_SDATU =BlankNum()
                 WCSW_SDINI =BlankNum()
                 WCSW_BAIXA =BlankNum()
                 Release Vars Array_Registro
                 DynArray Array_Registro[]

                 Moveto "Titulos"
                 Moveto [Numero do Lancamento]
          EndSwitch
     Case Evento["KeyCode"] =  13:
          Temp=False
          Switch
            Case Campo="TG_DESTINAT":
                 If Checa_TAG()
                    Then If IsBlank(VSDGDESTINAT)
                            Then VSDGRAZDEST="TODOS"
                                 VSDGCONTATO =""                                       
                         EndIf   
                         Campo="I_TP"   
                    Else Campo="TG_DESTINAT"    
                 EndIf                                              
            Case Campo="I_TP"      : Campo="I_ORDEM"
                 VSDGTP=ControlValue("I_TP")
                 If IsBlank(VSDGTP)
                    Then VSDGTP="A"
                 EndIf
            Case Campo="I_ORDEM"   :
                 VSDGORDEM=ControlValue("I_ORDEM")
                 If IsBlank(VSDGORDEM)
                    Then VSDGORDEM="V"
                 EndIf
                 ;If IsBlank([Numero do Lancamento])
                 ;   Then Del
                 ;EndIf
                 RefreshDialog
                 If Seleciona()
                    Then Campo="I_Registro"
                    Else Moveto "Titulos"
                         Moveto [Numero do Lancamento]
                 EndIf
            Case Campo="I_Registro" And DynArraySize(Array_Registro)>0:
                 If TITULOS_EDITBX
                    Then TITULOS_SOBAIXAS=False
                         Localiza_Lancto()
                         If Seleciona()
                            Then ArrayElement=IndiceReg
                                 Campo="I_Registro"
                            Else Moveto "Titulos"
                                 Moveto [Numero do Lancamento]
                                 Campo="I_ORDEM"
                         EndIf
                    else Localiza_Lancto()
                         ArrayElement=IndiceReg
                         Campo="I_Registro"                                                  
                 EndIf   
                 
                 
                 
          EndSwitch
   EndSwitch
EndIf

If Disparo="SELECT" And Campo="I_Registro"
   Then Temp=False
        Localiza_Lancto()
        ArrayElement=IndiceReg
        Campo="I_Registro"
        
EndIf
If Disparo="ARRIVE" And 
   (Campo="TG_DESTINAT" Or
    Campo="I_NOMCLI"   Or
    Campo="I_CONTATO"  Or
    Campo="I_TP"       Or
    Campo="I_ORDEM") And 
   DynArraySize(Array_Registro)>0
   Then ;Temp=False
        LinhaCab=""
        WCSW_NLANC =BlankNum()
        WCSW_SDATU =BlankNum()
        WCSW_SDINI =BlankNum()
        WCSW_BAIXA =BlankNum()
        Release Vars Array_Registro
        DynArray Array_Registro[]
        
        Moveto "Titulos"
        Moveto [Numero do Lancamento]
EndIf

Switch
  Case Campo="I_TP":
       MSG_CAMPO="Lan‡amentos: T=Todos  A=Em Aberto  B=Baixados"
  Case Campo="I_ORDEM":
       MSG_CAMPO="Ordem: E=Emiss„o  V=Vencimento  D=Documento"
  Case Campo="TG_DESTINAT":
       MSG_CAMPO="Informe o Codigo do Fornecedor"
       TECLA="F1=Consulta  "
  Case Campo="I_Registro":
       TECLA="// Esc=Retornar  Enter=Ficha/Baixar  =Selecionar  "
  Case Campo="I_Registro" : If TITULOS_EDITBX 
                               Then TECLA="// Esc=Retornar  Enter=Baixar/Editar  "+Chr(31)+Chr(30)+"=Selecionar"
                               Else TECLA="// Esc=Retornar  Enter=Baixar         "+Chr(31)+Chr(30)+"=Selecionar"
                           EndIf   
  Case Campo="I_Flag":
       TECLA="// Esc=Retornar"
EndSwitch
SelectControl Campo
RefreshDialog
Monta_Prompt(MSG_CAMPO,TECLA)
ResyncControl Campo
Return Temp
EndProc  ; (Sd_Consulta)

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
; Chamado pelo Titulos.sc
Do_It!

Moveto "Titulos"
PickForm "4"
Moveto [Numero do Lancamento]

DynArray Array_Registro[]
INICIO_DIALOG2=True
WCSW_NLANC =BlankNum()
WCSW_SDINI =BlankNum()
WCSW_SDATU =BlankNum()
WCSW_BAIXA =BlankNum()

LinhaCab=""
ShowDialog "Baixa de Titulos a Pagar" Proc "SD_Consulta"
 Trigger "OPEN","ARRIVE","SELECT","CLOSE"
 Mouse "ALL"
  Key "F1","ENTER","ESC","ClearArea","TAB","ReverseTab",
       -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140
   @ 01,00   Height 22 Width 80

  Label  @ 00,00 "Pessoa" For "TG_DESTINAT"
  Accept @ 01,00 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT

;;Label  @ 00,11 "Nome"  For "I_NOMCLI"
  Accept @ 01,06 Width 61 "A40" Picture "!*!" Tag "I_NOMCLI" To VSDGNOMDEST

  Label  @ 00,67 "TL"  For "I_TP"
  Accept @ 01,68 Width 04 "A1"  Picture "T,A,B" Tag "I_TP" To VSDGTP

  Label  @ 00,72 "Ordem"  For "I_ORDEM"
  Accept @ 01,73 Width 04 "A1"  Picture "E,V,D" Tag "I_ORDEM" To VSDGORDEM

  Accept @ 02,00 Width 67 "A64" Picture "!*!"   Tag "I_CONTATO" To VSDGCONTATo

  @ 03,01 ?? LinhaCab
  PickDynArray @4,00 Height 14 width 78
   Columns 1
    Array_Registro
     Tag "I_Registro"
      To ArrayElement

  @ 18,25 ?? "Lan‡to(s)  Saldo Inicial        Baixas   Saldo Final"
  @ 19,26 ?? Format("W5,EIC",WCSW_NLANC)+Spaces(6)+
             Format("W12.2,EIC",WCSW_SDINI)+Spaces(2)+
             Format("W12.2,EIC",WCSW_BAIXA)+Spaces(2)+  
             Format("W12.2,EIC",WCSW_SDATU)  

EndDialog

echo off
Do_it!
Mouse Show
