;** FT_LTC  ********************************************************************
;*  Controle de titulo de credito                                              *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 23/01/2016 por Anivel Augusto Rodrigues
;Ultima Alteracao: 08/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes controle tabela origem
;Ultima Alteracao: 20/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 05/10/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes tabela e campo origem
;Ultima Alteracao: 16/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes revisÆo das tabelas       

;fun‡Æo ativada no FaturaC e FaturaV
If PARAM_TITCRED<>"T"
   then return
endif   

sltabelaf = table() ; tabela do form
slcampof  = field() ; campo do form

sltabelac = ""      ; tabela pai C
sltabelav = ""      ; tabela vencimentos V

switch
  case sltabelaf="Faturav": sltabelac="Faturac"   sltabelav=sltabelaf   
  case sltabelaf="Notav"  : sltabelac="Notac"     sltabelav=sltabelaf

  case sltabelaf="Faturac": sltabelac=sltabelaf   sltabelav="Faturav"
  case sltabelaf="Notac"  : sltabelac=sltabelaf   sltabelav="Notav"

endswitch
Moveto sltabelac
CopyToArray slreg_tabelac

moveto sltabelaf
moveto field slcampof
   
GetRecord "\\Sistemas\\Vendas\\Destin" slreg_tabelac["Codigo da Destinacao"] To reg_DESTINACAO
If not RetVal
   Then return
endif   
  
If reg_DESTINACAO["Gera Duplicata"]<>"S"
   Then return
endif   

If slreg_tabelac["Tipo Movimento Estoque"]="S"
   Then slorigemtc="APagar"
   Else slorigemtc="AReceber"
EndIf
slpessoa=slreg_tabelac["Codigo"]
  
release vars reg_destinacao


;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc slsd_dialog(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento, 
        temp, msg_campo, tecla
 
Temp=True
MSG_CAMPO=""
TECLA=""

If (Disparo="EVENT" And Evento["Type"]="KEY" And Evento["KeyCode"] = 120 And Campo="TG_LISTA") Or 
   (Disparo="SELECT" And Campo="TG_LISTA")
    Then 
          switch
            case sltiposelecao="U": ; um unico item
            case sltiposelecao="M": ; returna uma lista de itens
              slarraylista[ControlValue("TG_LISTA")]=slsetaxselecionado(slarraylista[ControlValue("TG_LISTA")])
          endswitch 
EndIf

If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False

;    Case Evento["KeyCode"] = ?: 
;         slexcluiitemlista(ControlValue("TG_LISTA"))
          
     Case Evento["KeyCode"] =  27: 
          Temp=False
          Switch 
            Case Campo="TG_LISTA"     :
                switch
                  case sltiposelecao="U": CancelDialog
                  case sltiposelecao="M": Campo="NO"
                endswitch 
            Case Campo="YES" Or Campo="NO" : Campo="TG_LISTA"
          EndSwitch
          
     Case Evento["KeyCode"] = 13: 
          Temp=False
          If Checa_TAG()
             Then 
                  Switch 
                    Case Campo="TG_LISTA"     :
                      switch
                        case sltiposelecao="U": AcceptDialog
                        case sltiposelecao="M": Campo="YES"
                      endswitch 
                  EndSwitch
          EndIf
          RefreshDialog
          
   EndSwitch
EndIf  

Switch                
  Case Campo="TG_LISTA":
    switch
      case sltiposelecao="U": ; um unico item
        MSG_CAMPO="Selecione o item desejado !"
        TECLA="=Navegar"

      case sltiposelecao="M": ; returna uma lista de itens
        TECLA="=Navegar  [Espa‡o]=Marca/Desmarca"

    endswitch 
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc


;*******************************************************************************
;*                                                                             *
;*******************************************************************************
proc slcarregalista()
private wc, s, vrtot, wcr, titok

Aguarde("Aguarde, pesquisando t¡tulos de cr‚dito")

moveto sltabelac
unlockrecord
Do_It!

wc   =0
vrtot=0

If slorigemtc="AReceber"
   then
        View "\\Sistemas\\CtaRec\\Duplic"
        Moveto [Codigo do Destinatario]
        Locate IndexOrder by "IndDup21" slpessoa
        If RetVal
        	 Then While [Codigo do Destinatario]=slpessoa
                  If [Saldo do Documento]>0 and [Tipo do Pagamento]="TC"
                     Then
                     
                          titok=true

                          switch
                            case sltabelaf="Faturac" or sltabelaf="Faturav":
                              if slreg_tabelac["Numero Nota Gerada"]<>""
                                 then
                                      if 
                                        ; [Sistema Gerador     ]<>"" And 
                                         [Tipo Docto Gerador  ]=slreg_tabelac["Docto Nota Gerada" ] And
                                         [Numero Docto Gerador]=slreg_tabelac["Numero Nota Gerada"] 
                                         then titok=false
                                      endif
                              endif
                            
                            case sltabelaf="Notac"   or sltabelaf="Notav" :
                                      if 
                                        ; [Sistema Gerador     ]<>"" And 
                                         [Tipo Docto Gerador  ]=slreg_tabelac["Codigo do Documento"] And
                                         [Numero Docto Gerador]=slreg_tabelac["Numero do Documento"] 
                                         then titok=false
                                      endif
                            
                          endswitch
                     
                          if titok
                             then
                                  wc=wc+1
                                  
                                  s=  Format("W07,AL"   ,[Numero do Lancamento])
                                  s=s+Format("W05,AL"   ,[Tipo do Documento   ])
                                  s=s+Format("W11,AL"   ,[Numero do Documento ])
                                  s=s+Format("D13"      ,[Data de Emissao     ])
                                  s=s+Format("W03,AR"   ,[Tipo do Pagamento   ])
                                  s=s+Format("W13.2,EIC",[Valor do Documento  ])
                    
                                  slarraylistatemp[wc]=s
                                  vrtot=vrtot+[Valor do Documento]
                          endif
                          
                  EndIf
                  
                  Skip
                  If EOT() Then QuitLoop EndIf
                  Locate IndexOrder by "IndDup21" Next slpessoa                        
                  If Not RetVal Then QuitLoop EndIf
        				EndWhile
        EndIf
        clearimage
endif   

If slorigemtc="APagar"
   then
        View "\\Sistemas\\CtaPag\\Titulos"
        Moveto [Codigo do Emitente]
        Locate IndexOrder by "IndDup21" slpessoa
        If RetVal
        	 Then While [Codigo do Emitente]=slpessoa
                  If [Saldo do Documento]>0 and [Tipo do Pagamento]="TC"
                     Then
                     
                          titok=true

                          switch
                            case sltabelaf="Faturac" or sltabelaf="Faturav":
                              if slreg_tabelac["Numero Nota Gerada"]<>""
                                 then
                                      if 
                                        ; [Sistema Gerador     ]<>"" And 
                                         [Codigo do Documento ]=slreg_tabelac["Docto Nota Gerada" ] And
                                         [Lancamento Gerador  ]=slreg_tabelac["Numero Nota Gerada"] 
                                         then titok=false
                                      endif
                              endif
                            
                            case sltabelaf="Notac"   or sltabelaf="Notav":
                                      if 
                                        ; [Sistema Gerador     ]<>"" And 
                                         [Codigo do Documento ]=slreg_tabelac["Codigo do Documento"] And
                                         [Lancamento Gerador  ]=slreg_tabelac["Numero do Documento"] 
                                         then titok=false
                                      endif
                            
                          endswitch
                     
                          if titok
                             then
                                  wc=wc+1
                                  
                                  s=  Format("W07,AL"   ,[Numero do Lancamento])
                                  s=s+Format("W05,AL"   ,[Tipo do Documento   ])
                                  s=s+Format("W11,AL"   ,[Numero do Documento ])
                                  s=s+Format("D13"      ,[Data de Emissao     ])
                                  s=s+Format("W03,AR"   ,[Tipo do Pagamento   ])
                                  s=s+Format("W13.2,EIC",[Valor do Documento  ])
                            
                                  slarraylistatemp[wc]=s
                                  vrtot=vrtot+[Valor do Documento]
                          endif
                          
                  EndIf
                  
                  Skip
                  If EOT() Then QuitLoop EndIf
                  Locate IndexOrder by "IndDup21" Next slpessoa
                  If Not RetVal Then QuitLoop EndIf
        				EndWhile
        EndIf
        clearimage

endif   

Moveto sltabelac
Formkey
CoEditKey
while islockrecord() endwhile

Moveto sltabelav
scan for [Forma de Pagamento]="TC" and ( SubStr([Numero do Cartao],1,3)="CP-" Or  SubStr([Numero do Cartao],1,3)="CR-" )
  Foreach wc in slarraylistatemp
    if Substr(slarraylistatemp[wc],1,6)=substr([Numero do Cartao],4,6)
       then slarraylistatemp[wc]=slsetaxselecionado(slarraylistatemp[wc])
    endif
  EndForeach
endscan
Home
SetaCorRegistro("Padrao")

wcr=0
Foreach wc in slarraylistatemp
  if substr(slarraylistatemp[wc],slxselecionado,1)<>"X"
     then wcr=wcr+1
          slarraylista[wcr]=slarraylistatemp[wc]
  endif
EndForeach

Release Vars slarraylistatemp

if wcr>13
   then slhl=13
   else if wcr>2
           then slhl=wcr
           else slhl=5
        endif   
endif           

switch
  case sltiposelecao="U": ; um unico item
       slhj=slhl+4
  case sltiposelecao="M": ; returna uma lista de itens
       slhj=slhl+7
endswitch 

s=" "
s=s+Format("W06,AR"   ,wcr  )
s=s+Format("W30,AL"   ," "  )
s=s+Format("W13.2,EIC",vrtot)
sltot=s

Moveto sltabelaf
moveto field slcampof

LimpAguarde()

if wcr=0
   then Mensagem("NÆo existe T¡tulo de Cr‚dito em aberto !")
        return false
   else return true       
endif

endproc


;*******************************************************************************
;*                                                                             *
;*******************************************************************************
proc slsetaxselecionado(s)
private vr,s                
     
vr=substr(s, slxselecionado, 1)
if vr="X"
   then vr=" "
   else vr="X"
endIf

s=Format("W"+ strval(slxselecionado-1) +",AL", substr(s,1,slxselecionado-1))
s=s+vr

return s
endproc


;*******************************************************************************
;*                                                                             *
;*******************************************************************************
proc slvalidaitemselecionado()
private wc, wcr

If IsAssigned(slarraylistatemp) then Release Vars slarraylistatemp  endIf
Dynarray slarraylistatemp[]

switch
  case sltiposelecao="U": ; um unico item
    if DynarraySize(slarraylista)>0
       then return true
    endif
  
  case sltiposelecao="M": ; returna uma lista de itens
    wcr=0
    For wc from 1 to DynarraySize(slarraylista)
      if substr(slarraylista[wc],slxselecionado,1)="X"
         then wcr=wcr+1
              slarraylistatemp[wcr]=slarraylista[wc]
      endif
    EndFor
     
    if DynarraySize(slarraylistatemp)>0
       then return true
    endif
 
endswitch 

return false
endproc

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
proc slshowlista()
private titj, nlb, wj, ntable, ncampo

If IsAssigned(slarraylista)     then Release Vars slarraylista      endIf
If IsAssigned(slarraylistatemp) then Release Vars slarraylistatemp  endIf

Dynarray slarraylista[]
Dynarray slarraylistatemp[]

;         1         2         3         4         5         6         7         8
;12345678901234567890123456789012345678901234567890123456789012345678901234567890
;
;999999 1234 1234567890 99/99/9999 123456789012 X

        ;1234567890123456789012345678901234567890123456789012
sltitl=" Lan‡to DOC  N£mero       EmissÆo  TP        Valor  "


;-- Indicar qual tipo de sele‡Æo para a lista! ---------------------------------
sltiposelecao="M" ; returna uma lista de itens
;sltiposelecao="U" ; um unico item

;-- Indicar a altura, largura da janela ----------------------------------------
slhj=13 ; maximo
wj=56   ; largura da janela, maximo 80

;-- Indicar a altura da lista --------------------------------------------------
slhl=10 ; minimo

;-- Titulo da janela e da lista ------------------------------------------------
sltitj="T¡tulos de Cr‚dito"
sltot =""
slxselecionado=51 ; coluna do (X)

switch
  case sltiposelecao="U": ; um unico item
       nlb=3
  case sltiposelecao="M": ; returna uma lista de itens
       nlb=0
endswitch 

if slcarregalista() 
   then 
        Echo Normal
        Echo Off
      
        While True
        
          ShowDialog sltitj Proc "slsd_dialog"
          Trigger "OPEN","ARRIVE","SELECT"
          Key "ENTER","ESC","TAB", "F1"  
            @ 01,01 Height slhj Width wj
        
            @ 00,00 ?? sltitl
            
            PickDynarray @1,00 Height slhl width wj-3
             Columns 1
              slarraylista
               Tag "TG_LISTA"
                To VSDGLISTA
                
            @ (1+slhl),00 ?? sltot
      
            Pushbutton @ (3+slhl+nlb),14 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
            Pushbutton @ (3+slhl+nlb),28 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
        
            PaintCanvas Attribute 111 00, 00, 00, (wj-4)
            PaintCanvas Attribute 111 (1+slhl), 00, (1+slhl), (wj-4)
                                  
          EndDialog
          If Not RetVal Then quitloop EndIf
          
          if slvalidaitemselecionado() 
             then 
                  slexecutaprocessodesejado()
                  quitloop    
             else 
                  Mensagem("[Ok] Confirmado mas sem item selecionado na lista !")
          endif
        EndWhile
      
        Echo Off
endif

moveto sltabelaf
moveto field slcampof
endproc

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
proc slexecutaprocessodesejado()  
private wc, seq

moveto sltabelav
Foreach wc in slarraylistatemp
  
  while true
    Moveto [Sequencia]
    End
    SEQ = [Sequencia]
    Down
    Moveto [Sequencia]
    Seta_Sequencia(SEQ,False)
    If IsLockRecord()
     Then Del
          Loop
    EndIf
    quitloop
  endwhile
  
  [Numero de Dias    ]=0
  [Data              ]=slreg_tabelac["Data de Emissao"]
  [Forma de Pagamento]="TC"

  If slorigemtc="APagar"
     then 
          if istable("\\sistemas\\ctapag\\titulos")
             then
                  getrecord "\\sistemas\\ctapag\\titulos" substr(slarraylistatemp[wc],1,6) to reg_tit
                  if retval
                     then  
                          [Valor             ]=reg_tit["Valor do Documento"  ]
                          [Observacao        ]="CP-"+reg_tit["Tipo do Documento"]+"/"+reg_tit["Numero do Documento"]
                          [Numero do Cartao  ]="CP-"+reg_tit["Numero do Lancamento"]
                  endif
          endif
  endif        
          
  If slorigemtc="AReceber"
     then 
          if istable("\\sistemas\\ctarec\\duplic")
             then
                  getrecord "\\sistemas\\ctarec\\duplic" substr(slarraylistatemp[wc],1,6) to reg_tit
                  if retval
                     then  
                          [Valor             ]=reg_tit["Valor do Documento"  ]
                          [Observacao        ]="CR-"+reg_tit["Tipo do Documento"]+"/"+reg_tit["Numero do Documento"]
                          [Numero do Cartao  ]="CR-"+reg_tit["Numero do Lancamento"]
                  endif
          endif
  endif        

             
  unlockrecord

EndForeach
release vars reg_tit

SetaCorRegistro("Padrao")

SomaVenctos(sltabelaf,sltabelav)
   
endproc


;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
If IsAssigned(slorigemtc) and 
   IsAssigned(slpessoa)        
   then 
        slshowlista()
endif


Release vars  slarraylista, slarraylistatemp, 
              sltitl, sltiposelecao, slhl, slhj, sltitj, sltitl, sltot, slxselecionado,
              slorigemtc, slpessoa,
              sltabelaf, slcampof, sltabelac, sltabelav, slreg_tabelac
              
Release Procs slsd_dialog, slcarregalista, slsetaxselecionado, slvalidaitemselecionado, 
              slshowlista, slexecutaprocessodesejado
