;** CL_0002 ********************************************************************
;*  Carteria de Clientes com compras                                           *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 21/06/2019 por Anivel Augusto Rodrigues
;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

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

If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC")
   Then
         {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter
         Moveto [Codigo da Empresa      ]       TypeIn "~VSDGEMPRESA.."
         Moveto [Data de Emissao        ] check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
         Moveto [Codigo                 ] check 
         Moveto [Tipo                   ]       typein "C"
         Moveto [Descricao da Destinacao]       TypeIn "..VEND.. Or ..SAIDA.. Or ..SERV.."
         Moveto [Situacao               ]       TypeIn "Not C"
         Moveto [Tipo Movimento Estoque ]       TypeIn "S"
         Do_It!
         ClearAll
  
         CL_0002_AdicionaDados()
endif   

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc CL_0002_AdicionaDados()

ClearAll

View tabelames      
Edit "Answer"
Scan
   if isblank([Answer->Data de Emissao])
      then loop
   endif   

   Moveto tabelames
   end down
   [Codigo]=[Answer->Codigo]
   [Ano   ]= Year([Answer->Data de Emissao])
   [Mes   ]=Month([Answer->Data de Emissao])

   Moveto "Answer"
EndScan
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc CL_0002_CriaRegistros()
Private wi

MESINI=NumVal(VSDGMES)
ANOINI=NumVal(VSDGANO)
Edit tabeladados
For wi From 1 to 8 

  End Down
  [Ano        ]=ANOINI
  [Mes        ]=MESINI
  [Valor      ]=0
  if wi=8
     then 
          [Nome       ]="+ 6 Meses"
          [descricao  ]="sem comprar"
          [info       ]="clientes"
          quitloop 
     else 
          [Nome       ]=AlinhM(Strval([Mes]),2)+"/"+strval([Ano])
          [descricao  ]=MesExt([Mes])
          [info       ]="clientes"
  endif

  MESINI=MESINI-1
  If MESINI = 0 
     Then MESINI=12
          ANOINI=ANOINI-1
  EndIf

  VSDGDTINI=DateVal("01."+alinhM(strval(MESINI),2)+"."+strval(ANOINI))
EndFor
VSDGDTINI=Ultimo_Dia_Data(VSDGDTINI)+1
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Rotina p/ Selecionar e Ordernar Registros                                   *
;*******************************************************************************
Proc CL_0002_SelecionaDados2()
private tabelaclie
ClearAll

;-- clientes -------------------------------------------------------------------
{Ask}{\\Sistemas\\Cadastro\\Destinat}
Moveto [Codigo             ] Check
Moveto [Tipo               ]       typein "C"
;;Moveto [Inativo            ]       typein "not S"
;;Moveto [Situacao do Cliente]       typein "not PESSIMO"
do_it!
ClearAll

CL_0002_NClientes=NRecords("Answer") ; total de clientes

tabelaclie=Adiciona_Indice_Temp("Codigo")
;-------------------------------------------------------------------------------


;-- clientes positivados por ano/mes -------------------------------------------
{Ask} typein tabelames Enter
Moveto [Codigo] check
moveto [Ano   ] check
moveto [Mes   ] check
do_it!
ClearAll

{Ask} {Answer}
Moveto [Codigo]       typein "Calc Count as NRegistros"
moveto [Ano   ] check
moveto [Mes   ] check
do_it!
ClearAll

View tabeladados    
Edit "Answer"
Scan
   Moveto tabeladados
   Moveto [Ano]
   Locate [Answer->Ano], [Answer->Mes]
   If not RetVal
      Then end
           down
           [Ano   ]=ANOINI
           [Mes   ]=MESINI
   EndIf
   [Valor]=[Valor]+[Answer->NRegistros]
   Moveto "Answer"
EndScan
Do_It!
ClearAll
;-------------------------------------------------------------------------------


;-- clientes positivados no periodo --------------------------------------------
{Ask} typein tabelames Enter
Moveto [Codigo] check
do_it!
ClearAll

;-- clientes nĈo positivados ---------------------------------------------------
{Tools} {More} {Subtract} {Answer} typein tabelaclie enter
ClearAll
NClientes=NRecords(tabelaclie)

Edit tabeladados    
Moveto [Ano]
Locate ANOINI,MESINI
If not RetVal
  Then end
       down  
       [Ano   ]=ANOINI
       [Mes   ]=MESINI   ; + 6 meses
EndIf
[Valor]=[Valor]+NClientes
Do_It!
ClearAll
;-------------------------------------------------------------------------------

Delete tabelaclie

EndProc


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

Aguarde("Aguarde, Exportando carteira de clientes")

clearall

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

FileWrite        arquivo from "nome,descricao,info,valor\n"    

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

  if isblank([Ano]) then loop endif

  s=  monta_string([nome     ])+","
  s=s+monta_string([descricao])+","
  s=s+monta_string([info     ])+","
  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 PRINCIPAL                                                            *
;*******************************************************************************

CL_0002_VSDGDTINI=VSDGDTINI 
CL_0002_VSDGDTFIM=VSDGDTFIM
CL_0002_NClientes=0

tabeladados=Cria_Temp(PrivDir())
cria_tabela(tabeladados,"Ano(S),Mes(S),nome(A20),descricao(A20),info(A20),Valor(S)")

tabelames=Cria_Temp(PrivDir())
cria_tabela(tabelames,"Codigo(A4),Ano(S),Mes(S)")

CL_0002_CriaRegistros()
Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
While Novo_Dir_Trab()
  CL_0002_SelecionaDados()
EndWhile
CL_0002_SelecionaDados2()
CL_0002_GravaCsv()

Delete tabeladados
Delete tabelames

VSDGDTINI=CL_0002_VSDGDTINI 
VSDGDTFIM=CL_0002_VSDGDTFIM

ClearAll
Release Vars tabeladados, tabelames, MESINI, ANOINI, CL_0002_VSDGDTINI, CL_0002_VSDGDTFIM, CL_0002_NClientes
Release Procs CL_0002_SelecionaDados, CL_0002_AdicionaDados, CL_0002_CriaRegistros, CL_0002_GravaCsv
