;** VN_0100 ********************************************************************
;*  Grafico Indicador Vendas/Faturamento                                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 14/06/2019 por Anivel Augusto Rodrigues
;Ultima Alteracao: 28/08/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: AJustes dias uteis
;Ultima Alteracao: 12/09/2019 por Anivel Augusto Rodrigues      
;Motivo Alteracao: Ajustes filewrite inicial
;Ultima Alteracao: 11/10/2019 por Anivel Augusto Rodrigues      
;Motivo Alteracao: Ajustes variavel nv, erro ticket medio
;Ultima Alteracao: 23/10/2019 por Anivel Augusto Rodrigues  
;Motivo Alteracao: Ajustes mensagem

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

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

{Ask} TypeIn "\\Sistemas\\Vendas\\NotaC" Enter
Moveto [Codigo da Empresa      ]       TypeIn "~VSDGEMPRESA.."
moveto [Numero do Documento    ] check 
moveto [Serie do Documento     ] check 
Moveto [Data de Emissao        ]       TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Descricao da Destinacao]       TypeIn "..VEND.. Or ..SAIDA.. Or ..SERV.."
Moveto [Situacao               ]       TypeIn "Not C"
Moveto [Tipo Movimento Estoque ]       TypeIn "S"
Do_It!
VN_0100_NV =Nrecords("Answer")
ClearAll

{Ask} TypeIn "\\Sistemas\\Vendas\\NotaC" Enter
Moveto [Codigo da Empresa      ]       TypeIn "~VSDGEMPRESA.."
moveto [Codigo                 ] check 
Moveto [Data de Emissao        ]       TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Descricao da Destinacao]       TypeIn "..VEND.. Or ..SAIDA.. Or ..SERV.."
Moveto [Situacao               ]       TypeIn "Not C"
Moveto [Tipo Movimento Estoque ]       TypeIn "S"
Do_It!
VN_0100_NC =Nrecords("Answer")
ClearAll

{Ask} TypeIn "\\Sistemas\\Vendas\\NotaC" Enter
Moveto [Codigo da Empresa      ] Example "code" TypeIn ", ~VSDGEMPRESA.."
Moveto [Numero do Documento    ] Example "ndoc"
Moveto [Serie do Documento     ] Example "sdoc"
Moveto [Data de Emissao        ]       TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Descricao da Destinacao]       TypeIn "..VEND.. Or ..SAIDA.. Or ..SERV.."
Moveto [Situacao               ]       TypeIn "Not C"
Moveto [Tipo Movimento Estoque ]       TypeIn "S"
{Ask} TypeIn "\\Sistemas\\Vendas\\NotaI" Enter
Moveto [Codigo da Empresa      ] Example "code"
Moveto [Numero do Documento    ] Example "ndoc"
Moveto [Serie do Documento     ] Example "sdoc"
Moveto [Codigo do Item         ] check
Moveto [Situacao_Item          ]       TypeIn "Not C"
Do_It!
VN_0100_NP =Nrecords("Answer")
ClearAll

{Ask} TypeIn "\\Sistemas\\Vendas\\NotaC" Enter
Moveto [Codigo da Empresa      ] Example "code" TypeIn ", ~VSDGEMPRESA.."
Moveto [Numero do Documento    ] Example "ndoc"
Moveto [Serie do Documento     ] Example "sdoc"
Moveto [Data de Emissao        ]       TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Descricao da Destinacao]       TypeIn "..VEND.. Or ..SAIDA.. Or ..SERV.."
Moveto [Situacao               ]       TypeIn "Not C"
Moveto [Tipo Movimento Estoque ]       TypeIn "S"
{Ask} TypeIn "\\Sistemas\\Vendas\\NotaI" Enter
Moveto [Codigo da Empresa      ] Example "code"
Moveto [Numero do Documento    ] Example "ndoc"
Moveto [Serie do Documento     ] Example "sdoc"
Moveto [Valor Desconto Item    ]       TypeIn "Calc Sum as Valor DescontoI"
Moveto [Valor Desconto Total   ]       TypeIn "Calc Sum as Valor DescontoT"
Moveto [Situacao_Item          ]       TypeIn "Not C"
Do_It!
If Nrecords("Answer")>0
   then VN_0100_TVD=[Answer->Valor DescontoI]+[Answer->Valor DescontoT]
   else VN_0100_TVD=0
endif
ClearAll

{Ask} TypeIn "\\Sistemas\\Vendas\\NotaC" Enter
Moveto [Codigo da Empresa      ] Example "code" TypeIn ", ~VSDGEMPRESA.."
Moveto [Numero do Documento    ] Example "ndoc"
Moveto [Serie do Documento     ] Example "sdoc"
Moveto [Data de Emissao        ]       TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Descricao da Destinacao]       TypeIn "..VEND.. Or ..SAIDA.. Or ..SERV.."
Moveto [Situacao               ]       TypeIn "Not C"
Moveto [Tipo Movimento Estoque ]       TypeIn "S"
{Ask} TypeIn "\\Sistemas\\Vendas\\NotaI" Enter
Moveto [Codigo da Empresa      ] Example "code"
Moveto [Numero do Documento    ] Example "ndoc"
Moveto [Serie do Documento     ] Example "sdoc"
Moveto [Preco Total            ]       TypeIn "Calc Sum as Valor Total"
Moveto [Valor Desconto Item    ]       TypeIn "Calc Sum as Valor DescontoI"
Moveto [Situacao_Item          ]       TypeIn "Not C"
Do_It!
If Nrecords("Answer")>0
   then VN_0100_TVP=[Answer->Valor Total]+[Answer->Valor DescontoI]
   else VN_0100_TVP=0
endif
VN_0100_PD =(VN_0100_TVD/VN_0100_TVP)*100
ClearAll

{Ask} TypeIn "\\Sistemas\\Vendas\\NotaC" Enter
Moveto [Codigo da Empresa      ]       TypeIn "~VSDGEMPRESA.."
Moveto [Data de Emissao        ]       TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Descricao da Destinacao]       TypeIn "..VEND.. Or ..SAIDA.. Or ..SERV.."
Moveto [Situacao               ]       TypeIn "Not C"
Moveto [Tipo Movimento Estoque ]       TypeIn "S"
Moveto [Comissao do Representante] check
Moveto [Valor Mercadoria Liquido ]     TypeIn "Calc Sum as Valor Total"
Do_It!
VN_0100_TCV =0
If Nrecords("Answer")>0
   then scan
          VN_0100_TCV =VN_0100_TCV+(([Answer->Valor Total]*[Answer->Comissao do Representante])/100)
        endscan 
endif
ClearAll

{Ask} TypeIn "\\Sistemas\\Vendas\\NotaC" Enter
Moveto [Codigo da Empresa      ] check TypeIn "~VSDGEMPRESA.."
Moveto [Data de Emissao        ]       TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Descricao da Destinacao]       TypeIn "..VEND.. Or ..SAIDA.. Or ..SERV.."
Moveto [Situacao               ]       TypeIn "Not C"
Moveto [Tipo Movimento Estoque ]       TypeIn "S"
Moveto [Valor Nota Fiscal      ]       TypeIn "Calc Sum as Valor Total"
Do_It!
If Nrecords("Answer")>0
   then VN_0100_TV =[Answer->Valor Total]
   else VN_0100_TV =0
endif
VN_0100_TM =VN_0100_TV/VN_0100_NV
ClearAll

{Ask} TypeIn "\\Sistemas\\Vendas\\NotaC" Enter
Moveto [Codigo da Empresa      ] Example "code" TypeIn ", ~VSDGEMPRESA.."
Moveto [Numero do Documento    ] Example "ndoc"
Moveto [Serie do Documento     ] Example "sdoc"
Moveto [Data de Emissao        ]       TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Descricao da Destinacao]       TypeIn "..VEND.. Or ..SAIDA.. Or ..SERV.."
Moveto [Situacao               ]       TypeIn "Not C"
Moveto [Tipo Movimento Estoque ]       TypeIn "S"
{Ask} TypeIn "\\Sistemas\\Vendas\\NotaI" Enter
Moveto [Codigo da Empresa      ] Example "code"
Moveto [Numero do Documento    ] Example "ndoc"
Moveto [Serie do Documento     ] Example "sdoc"
Moveto [Quantidade             ]       TypeIn "Calc Sum as Quantidade"
Moveto [Custo Medio Unitario   ] check 
Moveto [Situacao_Item          ]       TypeIn "Not C"
Do_It!
VN_0100_CMV=0
If Nrecords("Answer")>0
   then scan
          VN_0100_CMV =VN_0100_CMV+([Answer->Quantidade]*[Answer->Custo Medio Unitario])
        endscan 
endif
ClearAll

EndProc

;*******************************************************************************
;* Rotina p/ Verificar Dias Uteis                                              *
;*******************************************************************************
Proc VN_0100_Verifica_Dias_Uteis()
private DIASUTEIS,DIAS_PERCORRIDOS,DIAS_FALTANTES,
        NDIAS,AUX_VSDGDTINI,
        REGFERIADO, FERIADO, DIA

View "\\Sistemas\\Cadastro\\Feriados"
        
DIASUTEIS        = 0
DIAS_PERCORRIDOS = 0 
DIAS_FALTANTES   = 0
                        
NDIAS         = Ultimo_Dia_Data(VSDGDTINI)-(VSDGDTINI-1)
AUX_VSDGDTINI = VSDGDTINI-1
For i From 1 To NDIAS
  FERIADO       = False
  AUX_VSDGDTINI = AUX_VSDGDTINI+1
  DIA           = Dow(AUX_VSDGDTINI)
  
  GetRecord "\\Sistemas\\Cadastro\\Feriados" AUX_VSDGDTINI To REGFERIADO
  If Retval
     Then If REGFERIADO["Dias a Receber"]>0
             Then FERIADO = True
                  If REGFERIADO["Dias a Receber"]>1
                     Then AUX_VSDGDTINI = AUX_VSDGDTINI + REGFERIADO["Dias a Receber"]-1
                          i=i+REGFERIADO["Dias a Receber"]-1
                  EndIf
          EndIf
  EndIf       
  
  if sys_Codigo_Cliente="0294" and AUX_VSDGDTINI=dateval("23.12.2018")
     then
          If Not FERIADO
             Then DIASUTEIS = DIASUTEIS +1
          EndIf 
     else
          switch
            case Not FERIADO and DIA ="Sat" and     VN_0100_TrabalhaSabado: DIASUTEIS = DIASUTEIS +1
            case Not FERIADO and DIA ="Sat" and not VN_0100_TrabalhaSabado: ; nĈo soma
            case Not FERIADO and DIA<>"Sun"                               : DIASUTEIS = DIASUTEIS +1
          endswitch
  EndIf 
EndFor


DIAS_PERCORRIDOS = 0
NDIAS            = Ultimo_Dia_Data(VSDGDTINI)-(VSDGDTINI-1)
AUX_VSDGDTINI    = VSDGDTINI-1
For i From 1 To NDIAS
  FERIADO       = False
  AUX_VSDGDTINI = AUX_VSDGDTINI+1
  DIA           = Dow(AUX_VSDGDTINI)
  
  GetRecord "\\Sistemas\\Cadastro\\Feriados" AUX_VSDGDTINI To REGFERIADO
  If Retval
     Then If REGFERIADO["Dias a Receber"]>0
             Then FERIADO = True
                  If REGFERIADO["Dias a Receber"]>1
                     Then AUX_VSDGDTINI = AUX_VSDGDTINI + REGFERIADO["Dias a Receber"]-1
                          i=i+REGFERIADO["Dias a Receber"]-1
                  EndIf
          EndIf
  EndIf        
  if sys_Codigo_Cliente="0294" and AUX_VSDGDTINI=dateval("23.12.2018")
     then
          If Not FERIADO
             Then DIAS_PERCORRIDOS = DIAS_PERCORRIDOS +1
          EndIf 
     else
          switch
            case Not FERIADO and DIA ="Sat" and     VN_0100_TrabalhaSabado: DIAS_PERCORRIDOS = DIAS_PERCORRIDOS +1
            case Not FERIADO and DIA ="Sat" and not VN_0100_TrabalhaSabado: ; nĈo soma
            case Not FERIADO and DIA<>"Sun"                               : DIAS_PERCORRIDOS = DIAS_PERCORRIDOS +1
          endswitch
  endif   

  If AUX_VSDGDTINI>=VSDGDTFIM Then QuitLoop EndIf
EndFor
              
DIAS_FALTANTES   = DIASUTEIS-DIAS_PERCORRIDOS

VN_0100_NDU=DIASUTEIS
VN_0100_NDP=DIAS_PERCORRIDOS
VN_0100_NDR=DIAS_FALTANTES

ClearAll
EndProc ;VN_0100_Verifica_Dias_Uteis()


;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc VN_0100_AdicionaDados()
ClearAll

Edit tabeladados

[tipo     ]=1
[nome     ]="Total Vendas"
[valor    ]=VN_0100_TV
[descricao]="Clientes atendidos:"
[info     ]=Format("W6,EIC",VN_0100_NC)

end
down
[tipo     ]=1
[nome     ]="Ticket medio"
[valor    ]=VN_0100_TM
[descricao]="Vendas realizadas:"
[info     ]=Format("W6,EIC",VN_0100_NV)

end
down
[tipo     ]=1
[nome     ]="Total MercBrut"
[valor    ]=VN_0100_TVP
[descricao]="Produtos vendidos:"
[info     ]=Format("W6,EIC",VN_0100_NP)


end
down
[tipo     ]=1
[nome     ]="Total Descontos"
[valor    ]=VN_0100_TVD
[descricao]="% sobre produtos:"
[info     ]=Format("W5.2,EIC",VN_0100_PD)+"%"

end
down
[tipo     ]=1
[nome     ]="Total MercLiq"
[valor    ]=VN_0100_TVP-VN_0100_TVD
[descricao]="."
[info     ]="."

end
down
[tipo     ]=1
[nome     ]="CMV"
[valor    ]=ndecimal(VN_0100_CMV,2)
[descricao]="% lucratividade"
[info     ]=Format("W5.2,EIC",100-((VN_0100_CMV/(VN_0100_TVP-VN_0100_TVD))*100))+"%"

end
down
[tipo     ]=1
[nome     ]="Total Comissao"
[valor    ]=ndecimal(VN_0100_TCV,2)
[descricao]="% sobre total prodliq:"
[info     ]=Format("W5.2,EIC",(VN_0100_TCV/(VN_0100_TVP-VN_0100_TVD))*100)+"%"


Do_It!
ClearAll

EndProc

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

Aguarde("Aguarde, Exportando Faturamento Indicador")

ClearAll

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

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

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

  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    


arqnew =VSDGPASTA+"VN_0101.csv"
FileWrite        arqnew  from "maximo,atual\n"   
FileWrite append arqnew  from strval(VN_0100_NDU)+","+strval(VN_0100_NDP)+"\n"

arqnew =VSDGPASTA+"VN_0101a.csv"
FileWrite        arqnew  from "value\n"   
FileWrite append arqnew  from strval(VN_0100_NDU)+"\n"

arqnew =VSDGPASTA+"VN_0101b.csv"
FileWrite        arqnew  from "value\n"   
FileWrite append arqnew  from strval(VN_0100_NDR)+"\n"

arqnew =VSDGPASTA+"VN_0101c.csv"
FileWrite        arqnew  from "value\n"   
FileWrite append arqnew  from strval(VN_0100_NDV)+"\n"

LimpAguarde()
  
EndProc

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

tabeladados=Cria_Temp(PrivDir())
cria_tabela(tabeladados,"tipo(s),nome(A30),descricao(A30),info(A30),valor(N)")

;variaveis
VN_0100_TV =0
VN_0100_TM =0
VN_0100_TVP=0
VN_0100_PD =0
VN_0100_TCV=0
VN_0100_CMV=0

VN_0100_NV =0
VN_0100_NC =0
VN_0100_NP =0
VN_0100_ND =0

VN_0100_NDU=0
VN_0100_NDP=0
VN_0100_NDR=0
VN_0100_NDV=0

VN_0100_TrabalhaSabado=False
if sys_codigo_cliente="0294"
   then VN_0100_TrabalhaSabado=true
endif   

VN_0100_Verifica_Dias_Uteis()
VN_0100_SelecionaDados()
VN_0100_AdicionaDados()
VN_0100_GravaCsv()

Delete tabeladados

ClearAll
Release Vars tabeladados,
             VN_0100_TV,VN_0100_TM, VN_0100_TVP,VN_0100_TD,VN_0100_TCV,VN_0100_CMV,
             VN_0100_NV,VN_0100_NC,VN_0100_NP,VN_0100_PD,
             VN_0100_NDU,VN_0100_NDP,VN_0100_NDR,VN_0100_NDV,
             VN_0100_TrabalhaSabado

Release Procs VN_0100_SelecionaDados, VN_0100_AdicionaDados, VN_0100_GravaCsv,
              VN_0100_Verifica_Dias_Uteis
