;** VN_0120 ********************************************************************
;*  Lista Curva ABC Itens                                                      *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 03/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_0120_SelecionaDados()
private wi

ClearAll

{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"
{Ask} TypeIn "\\Sistemas\\Vendas\\NotaI" Enter
Moveto [Codigo da Empresa      ]       TypeIn "_cemp"
Moveto [Numero do Documento    ]       TypeIn "_ndoc"
Moveto [Serie do Documento     ]       TypeIn "_sdoc"
Moveto [Codigo do Item         ] Check 
Moveto [Preco Total            ]       TypeIn "Calc Sum as Preco Total"
Moveto [Valor Desconto Total   ]       TypeIn "Calc Sum as Valor Desconto Total"
Moveto [Situacao_Item          ]       TypeIn "Not C"
Do_It!
ClearAll

VN_0120_Adiciona_DadosS("VENDAS") 
  
EndProc


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

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

endswitch

EndProc

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

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

;*** Totaliza Empresa *****
{Ask} TypeIn tabeladados2 Enter
Moveto [Codigo da Empresa      ] Check
Moveto [Codigo do Item         ] 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 [TotalItem              ] 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)/[TotalItem])
  
  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 do Item          ] TypeIn "Calc Count as \"NumerodeItens\""
Moveto [Vendas_Preco Total      ] TypeIn "Calc Sum as \"Vendas_Preco Total\""
Do_It!
ClearAll
         
EndProc    ;  (Processa)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc VN_0120_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->NumerodeItens])+" Itens"
  [info          ]="."

 
  moveto "Answer"

endscan
do_it!
clearAll

EndProc

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

Aguarde("Aguarde, Exportando Clientes Indicador")

ClearAll

arquivo=VSDGPASTA+"tmp0000.txt"
arqnew =VSDGPASTA+"VN_0120.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([nome]) 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                                                            *
;*******************************************************************************

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

tabeladados2=Cria_Temp(PrivDir())
cria_tabela(tabeladados2,"Codigo da Empresa(A4),Codigo do Item(A10),NumerodeItens(S),"+
                         "Vendas_Preco Total($),Classe(A1),ClasseParametro(N),"+
                         "TotalItem(S)")

VN_0120_SelecionaDados()
VN_0120_Processa()
VN_0120_AdicionaDados()
VN_0120_GravaCsv()

Delete tabeladados
Delete tabeladados2


ClearAll
Release Vars tabeladados, tabeladados2

Release Procs VN_0120_SelecionaDados, VN_0120_AdicionaDados, VN_0120_GravaCsv, 
              VN_0120_Adiciona_DadosS, VN_0120_Processa
