;** CP_0003 ********************************************************************
;*  Posi‡Æo titulos vencimentos/pagamento                                      *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 29/08/2019 por Anivel Augusto Rodrigues
;Ultima Alteracao: 03/09/2019  por Anivel Augusto Rodrigues
;Motivo Alteracao: indice de inadimplencia
;Ultima Alteracao: 12/09/2019 por Anivel Augusto Rodrigues      
;Motivo Alteracao: Ajustes filewrite inicial
;Ultima Alteracao: 23/10/2019 por Anivel Augusto Rodrigues  
;Motivo Alteracao: Ajustes mensagem
;Ultima Alteracao: 22/01/2020 por Anivel Augusto Rodrigues  
;Motivo Alteracao: Ajustes #0429 sem TC

;*******************************************************************************
;* Rotina p/ Selecionar e Ordernar Registros                                   *
;*******************************************************************************
Proc CP_0003_SelecionaDados()
private tabelatit

ClearAll

{Ask} TypeIn "\\Sistemas\\Ctapag\\Titulos" Enter 
Moveto [Codigo da Empresa   ]       typeIn "~VSDGEMPRESA.."
Moveto [Numero do Lancamento] check 
Moveto [Data de Vencimento  ] check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Valor do Documento  ] check TypeIn "as Valor"
switch
  case sys_codigo_cliente="0429":
    moveto [Tipo do Pagamento] typein "not TC" 
endswitch
Do_It!
ClearAll
CP_0003_AdicionaDados()

tabelatit=Adiciona_Indice_Temp("Numero do Lancamento")

{Ask} TypeIn tabelatit Enter  check
Moveto [Numero do Lancamento]       typein "_num" 
{Ask} TypeIn "\\Sistemas\\Ctapag\\Titbaixa" Enter 
Moveto [Numero do Lancamento]       typein "_num" 
Moveto [Sequencia da Baixa  ] check  
Moveto [Data do Pagamento   ] check
Moveto [Valor do Pagamento  ] check 
Moveto [Valor do Juros      ] check 
Moveto [Valor do Desconto   ] check 
Do_It!
ClearAll
CP_0003_AdicionaDadosR()

delete tabelatit

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc CP_0003_AdicionaDados()

ClearAll

View tabeladados
Edit "Answer"
Scan
   If IsBlank([Data de Vencimento]) Then Loop EndIf

   Moveto tabeladados
   Moveto [Ordem]
   Locate 1,Year([Answer->Data de Vencimento]),Month([Answer->Data de Vencimento])
   If Not RetVal
      Then End Down
           [Ordem  ]=1
           [Tipo   ]="Vencimento"
           [Ano    ]=Year ([Answer->Data de Vencimento])
           [Mes    ]=Month([Answer->Data de Vencimento])
   EndIf
   [Valor  ]=[Valor  ]+[Answer->Valor]

   Moveto tabeladados
   Moveto [Ordem]
   Locate 3,Year([Answer->Data de Vencimento]),Month([Answer->Data de Vencimento])
   If Not RetVal
      Then End Down
           [Ordem  ]=3
           [Tipo   ]="Indice"
           [Ano    ]=Year ([Answer->Data de Vencimento])
           [Mes    ]=Month([Answer->Data de Vencimento])
   EndIf
   [ValorV ]=[ValorV ]+[Answer->Valor]

   Moveto "Answer"
EndScan
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc CP_0003_AdicionaDadosR()
private nl

Sort "Answer" on "Numero do Lancamento", "Data do Pagamento"
ClearAll

nl="****"

View tabeladados
Edit "Answer"
Scan
   If IsBlank([Data de Vencimento]) Then Loop EndIf
   If IsBlank([Data do Pagamento])  Then Loop EndIf

   if ( month([Data do Pagamento])=month([Data de Vencimento]) and
         year([Data do Pagamento])= year([Data de Vencimento]) ) 
      or      
     ( [Data do Pagamento]<=([Data de Vencimento]+5) )
      then
           Moveto tabeladados
           Moveto [Ordem]
           Locate 2,Year([Answer->Data de Vencimento]),Month([Answer->Data de Vencimento])
           If Not RetVal
              Then End Down
                   [Ordem  ]=2
                   [Tipo   ]="Pagamento"
                   [Ano    ]=Year ([Answer->Data de Vencimento])
                   [Mes    ]=Month([Answer->Data de Vencimento])
           EndIf
           [Valor  ]=[Valor  ]+( ([Answer->Valor do Pagamento  ]-[Answer->Valor do Juros]) +[Answer->Valor do Desconto] )

           Moveto tabeladados
           Moveto [Ordem]
           Locate 3,Year([Answer->Data de Vencimento]),Month([Answer->Data de Vencimento])
           If Not RetVal
              Then End Down
                   [Ordem  ]=3
                   [Tipo   ]="Indice"
                   [Ano    ]=Year ([Answer->Data de Vencimento])
                   [Mes    ]=Month([Answer->Data de Vencimento])
           EndIf
           [ValorP ]=[ValorP ]+( ([Answer->Valor do Pagamento  ]-[Answer->Valor do Juros]) +[Answer->Valor do Desconto] )

   endif

   Moveto "Answer"
EndScan
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc CP_0003_CriaRegistros()
Private Mes_Aux,Ano_Aux, wi, wc

Mes_Aux=NumVal(MESINI)
Ano_Aux=NumVal(ANOINI)
Edit tabeladados
For wi From 1 to 6 

  For wc from 1 to 3
    End Down
    switch
      case wc=1 : [Tipo]="Vencimento"
      case wc=2 : [Tipo]="Pagamento"
      case wc=3 : [Tipo]="Indice"
    endswitch
    [Ordem      ]=wc
    [Ano        ]=Ano_Aux
    [Mes        ]=Mes_Aux
    [Extenso    ]=AlinhM(strval(Mes_Aux),2)+"/"+Substr(strval(Ano_Aux),3,2)
    [Valor      ]=0
  endfor

  If Mes_Aux = 12 
     Then Mes_Aux=0
          Ano_Aux=Ano_Aux+1
  EndIf
  Mes_Aux=Mes_Aux+1
    
EndFor
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc CP_0003_GravaCsv()
private s, arquivo, arqnew, inicio, NR, vartemp, wi

Aguarde("Aguarde, Exportando contas a pagar VencimentoXPagamento")

ClearAll

arquivo=VSDGPASTA+"tmp0000.txt"
arqnew =VSDGPASTA+"CP_0003.csv"
    
NR=NRecords(tabeladados)
inicio=true

FileWrite        arquivo from "label,bar,value\n"    

Edit tabeladados 
Scan
  Barra(NR, RecNo())
  AGUARDE(BARRA_STRING)
  
  if [Ordem]=3 then loop endif

  s=  monta_string([Tipo    ])+","
  s=s+monta_string([Extenso ])+","
  s=s+strval([Valor         ])+"\n"

  FileWrite append arquivo from s    
  
EndScan
Do_It!
ClearAll

FileRead  arquivo to   vartemp
FileWrite arqnew  from vartemp    


LimpAguarde()

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc CP_0004_GravaCsv()
private s, arquivo, arqnew, inicio, NR, vartemp, wi

Aguarde("Aguarde, Exportando contas a pagar Inadimplˆncia")

ClearAll

arquivo=VSDGPASTA+"tmp0000.csv"
arqnew =VSDGPASTA+"CP_0004.csv"
    
NR=NRecords(tabeladados)
inicio=true

FileWrite        arquivo from "label,bar,value\n"    

Edit tabeladados 
Scan
  Barra(NR, RecNo())
  AGUARDE(BARRA_STRING)

  if [Ordem]<>3 then loop endif

  s=  monta_string([Tipo    ])+","
  s=s+monta_string([Extenso ])+","
  s=s+strval(ndecimal(100- (([ValorP]/[ValorV])*100),1) )+"\n"

  FileWrite append arquivo from s    
  
EndScan
Do_It!
ClearAll

FileRead  arquivo to   vartemp
FileWrite arqnew  from vartemp    


LimpAguarde()

EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************

CP_0003_VSDGDTINI=VSDGDTINI 
CP_0003_VSDGDTFIM=VSDGDTFIM

MESINI=NumVal(VSDGMES)
ANOINI=NumVal(VSDGANO)
for wcmes from 1 to 5
  MESINI=MESINI-1
  If MESINI=0            
     Then MESINI=12    
          ANOINI=ANOINI-1
  endif        
endfor
VSDGDTINI=DateVal(AlinhM(StrVal(MESINI),2)+"/"+"01"+"/"+strval(ANOINI))

tabeladados=Cria_Temp(PrivDir())
cria_tabela(tabeladados,"Ordem(S*),Ano(S*),Mes(S*),Tipo(A15),Extenso(A10),Valor(N),ValorV(N),ValorP(N)")

CP_0003_CriaRegistros()
CP_0003_SelecionaDados()
CP_0003_GravaCsv()

CP_0004_GravaCsv()

Delete tabeladados

VSDGDTINI=CP_0003_VSDGDTINI 
VSDGDTFIM=CP_0003_VSDGDTFIM

ClearAll
Release Vars tabeladados, CP_0003_VSDGDTINI, CP_0003_VSDGDTFIM, MESINI, ANOINI, MESFIM, ANOFIM, wcmes
Release Procs CP_0003_SelecionaDados, CP_0003_AdicionaDados, CP_0003_CriaRegistros, CP_0003_GravaCsv, CP_0004_GravaCsv
