;** VN_0110 ********************************************************************
;*  Lista Curva ABC Clientes                                                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 02/07/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 VN_0110_SelecionaDados()
private wi

ClearAll

for wi from 1 to 2 
  
  {Ask} TypeIn "\\Sistemas\\Vendas\\NotaC" Enter
  Moveto [Codigo da Empresa      ] Check TypeIn "_cemp, ~VSDGEMPRESA.."
  Moveto [Numero do Documento    ]       TypeIn "_ndoc"
  Moveto [Serie do Documento     ]       TypeIn "_sdoc"
  Moveto [Data de Emissao        ]       TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
  Moveto [Descricao da Destinacao]       TypeIn "..VEND.. or ..SERV.. or ..SAIDA.."
  Moveto [Tipo Movimento Estoque ]       TypeIn "S"
  Moveto [Situacao               ]       TypeIn "Not C"
  Moveto [Codigo                 ] Check 
  switch
    case wi=1 :
      Moveto [Valor Mercadoria Liquido] typeIn "Calc Sum as Preco Total"

    case wi=2 :
      moveto [Data de Saida           ] typeIn "calc _cemp+_ndoc+_sdoc As NDocto"

  endswitch 
  Do_It!
  ClearAll

  switch
    case wi=1 : VN_0110_Adiciona_DadosS("VENDAS") 

    case wi=2 : 
      {Ask} {Answer}
      Moveto [Codigo da Empresa      ] Check
      Moveto [Codigo                 ] Check
      moveto [NDocto                 ] typein "Calc Count As NumVendas"
      Do_It!
      ClearAll

      VN_0110_Adiciona_DadosS("NUM_VENDAS") 

  endswitch 
  
endfor

EndProc


;*******************************************************************************
;* Rotina adicionar dados na Db temporaria                                     *
;*******************************************************************************
Proc VN_0110_Adiciona_DadosS(Tipo)

If IsEmpty("Answer")
   Then Return
EndIf

switch
  Case Tipo="VENDAS":
    {Ask} {Answer}
    Moveto [Codigo da Empresa      ] typein "_cemp"
    Moveto [Codigo                 ] typeIn "_cpes"
    Moveto [Preco Total            ] typein "_ptot"
    {Ask} TypeIn tabeladados2 Enter TypeIn "Fast Insert"
    Moveto [Codigo da Empresa      ] typein "_cemp"
    Moveto [Codigo                 ] typeIn "_cpes"
    Moveto [Vendas_Preco Total     ] typein "_ptot"
    Do_It!
    ClearAll

  Case Tipo="NUM_VENDAS":
    {Ask} {Answer}
    Moveto [Codigo da Empresa      ] typein "_cemp"
    Moveto [Codigo                 ] typeIn "_cpes"
    Moveto [NumVendas              ] typein "_qtde"
    {Ask} TypeIn tabeladados2 Enter TypeIn "Fast Insert"
    Moveto [Codigo da Empresa      ] typein "_cemp"
    Moveto [Codigo                 ] typeIn "_cpes"
    Moveto [NumeroDeVendas         ] typein "_qtde"
    Do_It!
    ClearAll

endswitch

EndProc

;*******************************************************************************
;* Rotina p/ processar Db temporaria                                           *
;*******************************************************************************
Proc VN_0110_Processa()
private empant, VrAcumulada, NR, classeant, grupo

;***** Totaliza Dados ************************************
{Ask} TypeIn tabeladados2 Enter
Moveto [Codigo da Empresa       ] Check
Moveto [Codigo                  ] Check
Moveto [Vendas_Preco Total      ] TypeIn "Calc Sum as \"Vendas_Preco Total\""
Moveto [NumeroDeVendas          ] TypeIn "Calc Sum as \"NumeroDeVendas\""
Do_It!
ClearAll
         
Empty tabeladados2
Adiciona_Dados_Tabela(tabeladados2)

;*** Totaliza Empresa *****
{Ask} TypeIn tabeladados2 Enter
Moveto [Codigo da Empresa      ] Check
Moveto [Codigo                 ] typein "Calc Count as Registros"
Do_It!
ClearAll

{Ask} {Answer}
Moveto [Codigo da Empresa      ] Example "cemp"
Moveto [Registros              ] Example "rg"
{Ask} TypeIn tabeladados2 Enter TypeIn "Fast"
Moveto [Codigo da Empresa      ] Example "cemp"
Moveto [TotalCliente           ] TypeIn "changeto _rg"
Do_It!
ClearAll

;---- Calculando a Porcentagem diante do total dos itens ---------------
Sort tabeladados2 On "Codigo da Empresa", "Vendas_Preco Total" D
ClearAll

empant     ="***"
VrAcumulada=0
grupo      =0

NR = NRecords(tabeladados2)
CoEdit tabeladados2
Scan
  if [Codigo da Empresa]<>empant
     then empant     =[Codigo da Empresa]
          VrAcumulada=0
          grupo      =0
  endif          
  grupo=grupo+1

  indice=((grupo*100)/[TotalCliente])
  
  Switch
    Case indice           <=20                            : [Classe]="A" [ClasseParametro]=20
    Case indice           <=50                            : [Classe]="B" [ClasseParametro]=30
    otherwise                                             : [Classe]="C" [ClasseParametro]=50
  EndSwitch

EndScan
Do_It!             
ClearAll       


;***** Totaliza Dados ************************************
{Ask} TypeIn tabeladados2 Enter
Moveto [Codigo da Empresa       ] Check
Moveto [Classe                  ] Check
Moveto [ClasseParametro         ] Check
Moveto [Codigo                  ] TypeIn "Calc Count as \"NumeroDeClientes\""
Moveto [Vendas_Preco Total      ] TypeIn "Calc Sum as \"Vendas_Preco Total\""
Moveto [NumeroDeVendas          ] TypeIn "Calc Sum as \"NumeroDeVendas\""
Do_It!
ClearAll
         
EndProc    ;  (Processa)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc VN_0110_AdicionaDados()
ClearAll

View tabeladados
Edit "Answer"
scan

  moveto tabeladados
  end
  down
 
  [Classe        ]=[Answer->Classe]
  [nome          ]="Grupo ["+[Answer->Classe]+"] "+strval([Answer->ClasseParametro])+"%"
  [valor         ]=[Answer->Vendas_Preco Total]
  [descricao     ]=Format("W6,EIC",[Answer->NumeroDeClientes])+" Clientes"
  [info          ]=Format("W6,EIC",[Answer->NumeroDeVendas])+" Vendas"
  [TicketMedio   ]=ndecimal([Answer->Vendas_Preco Total]/[Answer->NumeroDeVendas],2)

 
  moveto "Answer"

endscan
do_it!
clearAll

EndProc

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

Aguarde("Aguarde, Exportando Clientes Indicador")

ClearAll


for wi from 1 to 4

  arquivo=VSDGPASTA+"tmp0000.txt"
  switch
    case wi=1: arqnew =VSDGPASTA+"VN_0110.csv"       FileWrite        arquivo from "nome,descricao,info,valor\n" 
    case wi=2: arqnew =VSDGPASTA+"VN_0110A.csv"      FileWrite        arquivo from "value\n" 
    case wi=3: arqnew =VSDGPASTA+"VN_0110B.csv"      FileWrite        arquivo from "value\n"
    case wi=4: arqnew =VSDGPASTA+"VN_0110C.csv"      FileWrite        arquivo from "value\n"
  endswitch

  NR=NRecords(tabeladados)
  inicio=true

  Edit tabeladados 
  Scan
    Barra(NR, RecNo())
    AGUARDE(BARRA_STRING)
  
    if isblank([nome]) then loop endif
  
    switch
      case wi=1:
        s=  monta_string([nome     ])+","
        s=s+monta_string([descricao])+","
        s=s+monta_string([info     ])+","
        s=s+strval([Valor          ])+"\n"
      
        FileWrite append arquivo from s

      case wi=2 and [Classe]="A":
        s=  strval([TicketMedio])+"\n"
      
        FileWrite append arquivo from s
    
      case wi=3 and [Classe]="B":
        s=  strval([TicketMedio])+"\n"
      
        FileWrite append arquivo from s
    
      case wi=4 and [Classe]="C":
        s=  strval([TicketMedio])+"\n"
      
        FileWrite append arquivo from s
    
    endswitch
    
  EndScan
  do_it!
  ClearAll
    
  FileRead  arquivo to   vartemp
  FileWrite arqnew  from vartemp


endfor

LimpAguarde()
  
EndProc

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

tabeladados=Cria_Temp(PrivDir())
cria_tabela(tabeladados,"Classe(A1),nome(A30),descricao(A30),info(A30),valor(N),TicketMedio(N)")

tabeladados2=Cria_Temp(PrivDir())
cria_tabela(tabeladados2,"Codigo da Empresa(A4),Codigo(A4),NumerodeClientes(S),NumeroDeVendas(S),"+
                         "Vendas_Preco Total($),Classe(A1),ClasseParametro(N),"+
                         "TotalCliente(S)")

VN_0110_SelecionaDados()
VN_0110_Processa()
VN_0110_AdicionaDados()
VN_0110_GravaCsv()

Delete tabeladados
Delete tabeladados2


ClearAll
Release Vars tabeladados, tabeladados2

Release Procs VN_0110_SelecionaDados, VN_0110_AdicionaDados, VN_0110_GravaCsv, 
              VN_0110_Adiciona_DadosS, VN_0110_Processa
