;** GR_0011 ********************************************************************
;*  Grafico de Fatia de Vendas por Atividade                                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 17/10/1996 por Anivel Augusto Rodrigues
;Ultima Alteracao: 21/10/2005 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao TG_TXPIZZA
;Ultima Alteracao: 03/12/2007 por Nikolas
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 19/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0000 TOTAL EMPRESAS
;Ultima Alteracao: 02/10/2012 por Kamila Gomes          
;Motivo Alteracao: Ajustes nos Titulos do Grafico  
;Ultima Alteracao: 03/02/2014 por Andrey Fillipe          
;Motivo Alteracao: Adicionado filtro Op‡Æo de Visualiza‡Æo   
;Ultima Alteracao: 03/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes PROCESSAO()
;Ultima Alteracao: 13/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog  
;Ultima Alteracao: 29/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes MensagemCheckBoxes() 
;Ultima Alteracao: 03/01/2017 por Rafael Matos
;Motivo Alteracao: Ajustes showdialog MensagemRadioButtons()                  

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

If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC")
   Then If VSDGOPAG=1 Or VSDGOPAG=3 Then
           {Ask} {\\Sistemas\\Cadastro\\Destinat}
           Moveto [Codigo                 ] Example "cod"
           Moveto [Descricao Atividade    ] Check
           {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter
           Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA2.."
           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"
           Moveto [Codigo                 ] Example "cod"
           Do_It!
           ClearAll
           
           Processa(1)
        EndIf 
        
        If VSDGOPAG=2 Or VSDGOPAG=3 Then
           {Ask} {\\Sistemas\\Cadastro\\Destinat}
           Moveto [Codigo                 ] Example "cod"
           Moveto [Descricao Atividade    ] Check
           {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter
           Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA2.."
           Moveto [Data de Emissao        ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
           Moveto [Descricao da Destinacao] TypeIn "..DEVOL.."
           Moveto [Situacao               ] TypeIn "Not C"
           Moveto [Tipo Movimento Estoque ] TypeIn "E"
           Moveto [Valor Nota Fiscal      ] TypeIn "Calc Sum as Valor Total"
           Moveto [Codigo                 ] Example "cod"
           Do_It!
           ClearAll
           
           Processa(2)
        EndIf  
EndIf
EndProc

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

If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC") 
   Then
        If VSDGOPAG=2 Or VSDGOPAG=3 Then
           {Ask} {\\Sistemas\\Cadastro\\Destinat}
           Moveto [Codigo                 ] Example "cod"
           Moveto [Descricao Atividade    ] Check
           {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC" Enter
           Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA2.."
           Moveto [Data de Entrada        ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM, as Data de Emissao"
           Moveto [Tipo de Operacao       ] TypeIn "D, as Tipo Movimento Estoque"
           Moveto [Valor Nota Fiscal      ] TypeIn "Calc Sum as Valor Total"
           Moveto [Codigo                 ] Example "cod"
           Do_It!
           ClearAll
           
           Processa(2)
        EndIf
EndIf
EndProc

;*******************************************************************************
;* Rotina p/ Selecionar e Ordernar Registros                                   *
;*******************************************************************************
Proc PROCESSA(OPCAO)
Private OPCAO
ClearAll

View PrivDir()+"GR_0006"
CoEdit "Answer"
Scan
   Moveto PrivDir()+"GR_0006"
   Moveto [Descricao]
   Locate [Answer->Descricao Atividade]
   If Not RetVal
      Then End Down
           [Descricao]=([Answer->Descricao Atividade])
   EndIf
   If OPCAO=1
      Then [Valor 1]=[Valor 1]+[Answer->Valor Total]
      Else [Valor 2]=[Valor 2]+[Answer->Valor Total]
   EndIf
   Moveto "Answer"
EndScan
Do_It!
ClearAll

EndProc

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

{Ask} TypeIn PrivDir()+"GR_0006" Enter
Moveto [Descricao] Check
Moveto [Valor 1  ] Example "prt"
If VSDGOPAG=2
   Then Moveto [Valor 2  ] Example "dst" TypeIn ", Calc _dst-_prt as Valor Total"
   Else Moveto [Valor 2  ] Example "dst" TypeIn ", Calc _prt-_dst as Valor Total"
EndIf
Do_It!
ClearAll

Sort "Answer" on "Valor Total" D
ClearAll

Switch
  Case VSDGTXPIZZA<100 And CheckTG_OPPIZZA[1] :
       {Ask} {Answer} TypeIn "Fast Delete"
       Moveto [Valor Total] TypeIn "< 0"
       Do_It!
       ClearAll
       
       VRABC=0
       
       Coedit "Answer"
       Moveto [Valor Total]
       VRTOT=ImagecSum()         
       While Not EOT()
         VRABC=VRABC+[Valor Total]
         TX_CALCABC=((VRABC*100)/VRTOT)
         If TX_CALCABC>VSDGTXPIZZA
            Then Del
                 If TX_CALCABC>=100
                    Then QuitLoop
                    Else Loop
                 EndIf        
         EndIf
         Skip
       EndWhile        
       Moveto [Valor Total]
       VRTOT=ImagecSum()
       Do_It!
       ClearAll
  Case VSDGTXPIZZA<100 And Not CheckTG_OPPIZZA[1] : 
       {Ask} {Answer} TypeIn "Fast Delete"
       Moveto [Valor Total] TypeIn "< 0"
       Do_It!
       ClearAll
       
       VRABC=0
       VRDIF=0
       
       Coedit "Answer"
       Moveto [Valor Total]
       VRTOT=ImagecSum()
       While Not EOT()
         VRABC=VRABC+[Valor Total]
         TX_CALCABC=((VRABC*100)/VRTOT)
         If TX_CALCABC>VSDGTXPIZZA
            Then VRDIF=VRDIF+[Valor Total]
                 Del
                 If TX_CALCABC>=100
                    Then QuitLoop
                    Else Loop
                 EndIf        
         EndIf
         Skip
       EndWhile
       If VRDIF>0 And Not CheckTG_OPPIZZA[1]
          Then End Down
               [Descricao  ]="[OUTROS]"
               [Valor Total]=VRDIF
       EndIf
       Do_It!
       ClearAll
   OtherWise :
       View "Answer"
       Moveto [Valor Total]
       VRTOT=ImagecSum() 
       ClearAll  
EndSwitch

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_DTINI"         : Campo="TG_EMPRESA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_TXPIZZA"       : Campo="TG_DTFIM"
            Case Campo="TG_OPPIZZA"       : Campo="TG_TXPIZZA"
            Case Campo="TG_OPAG"          : Campo="TG_OPPIZZA"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA" :
                         If Not IsBlank(VSDGEMPRESA)
                            Then Campo="TG_DTINI"
                            Else VSDGNOMEMP=""
                         Endif
                    Case Campo="TG_DTINI"      : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"      : Campo="TG_TXPIZZA"
                    Case Campo="TG_TXPIZZA"    : Campo="TG_OPPIZZA"
                    Case Campo="TG_OPPIZZA"    : Campo="TG_OPAG"
                    Case Campo="TG_OPAG"       : Campo="YES"
                         VSDGOPAG=ControlValue("TG_OPAG")
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="":
     MSG_CAMPO=""
  Case Campo="TG_DTINI":
     MSG_CAMPO="Informe a Data Inicial"
  Case Campo="TG_OPAG":
       MensagemRadioButtons()
  Case Campo="TG_OPPIZZA":    
       MensagemCheckBoxes()     
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
LimpAguarde()

VSDGEMPRESA=""
VSDGDTINI  =BlankDate()
VSDGDTFIM  =BlankDate()
VSDGOPAG   =1

VSDGTXPIZZA  =100
Array TG_OPPIZZA[1]
TG_OPPIZZA[1]=""
Array CheckTG_OPPIZZA[ArraySize(TG_OPPIZZA)]
CheckTG_OPPIZZA[1]=False

While True
  ShowDialog "Fatia de vendas por atividade" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 06,12   Height 11 Width 72

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP

    Label  @ 02,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 03,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 03,16 "at‚" For "TG_DTFIM"
    Accept @ 03,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 04,00 "% An lise" For "TG_TXPIZZA"
    Accept @ 05,01 Width 06 "S" Tag "TG_TXPIZZA" To VSDGTXPIZZA

    CheckBoxes @ 05,07 Height 1 Width 5 Tag "TG_OPPIZZA"
    TG_OPPIZZA[1] to CheckTG_OPPIZZA[1]
    Accept @ 05,11 Width 23 "A35" Tag "TG_OPPIZZA" To VSDGDSCPIZZA

    Label  @ 00,35 "Op‡Æo de Visualiza‡Æo: "  For "TG_OPAG"
    RadioButtons @ 01,35 Height 4 Width 33
     "~V~endas",
     "~D~evolu‡”es",
     "~L~¡quido [V-D]"
     Tag "TG_OPAG"
     To VSDGOPAG
            
    Pushbutton @ 07,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 07,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  If Not Valida_ShowDialog("") Then Loop EndIf

  If VSDGEMPRESA=""
     Then Mensagem("Empresa Invalida !")
          Loop
  EndIf
  If VSDGEMPRESA="0000"
     Then VSDGEMPRESA2=""
     Else VSDGEMPRESA2=VSDGEMPRESA
  EndIf
  If ((IsBlank(VSDGDTINI) or IsBlank(VSDGDTFIM))) or
     (VSDGDTINI>VSDGDTFIM)
     Then Mensagem("Data Invalida !")
          Loop
  EndIf

  DISPOSITIVOG()
  If OK="" Then Loop EndIf

  Copy "\\Base\\Sistemas\\Vendas\\GR_0006" PrivDir()+"GR_0006"
  Empty(PrivDir()+"GR_0006")
  
  AGUARDE("Aguarde, Gerando Dados")
  
  Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
  While Novo_Dir_Trab()
    Seleciona()
    Seleciona2()
  EndWhile

  If IsEmpty("Answer")
     Then MENSAGEM("N„o existem registros a processar")
          Delete "Answer"
          Loop
  EndIf
  
  Processa2()

  GRAF_TIPO= "P"
  Switch
    Case VSDGOPAG=1 : GRAF_TIT1 = "Fatia de Vendas por Atividade no Per¡odo de "+StrVal(VSDGDTINI)+" a "+StrVal(VSDGDTFIM)
                      GRAF_TAB= "Answer"
    Case VSDGOPAG=2 : GRAF_TIT1 = "Fatia das Devolu‡äes por Atividade no Per¡odo de "+StrVal(VSDGDTINI)+" a "+StrVal(VSDGDTFIM)
                      GRAF_TAB= "Answer"
    Case VSDGOPAG=3 : GRAF_TIT1 = "Fatia das Vendas L¡quidas [V-D] por Atividade no Per¡odo de "+StrVal(VSDGDTINI)+" a "+StrVal(VSDGDTFIM)
                      GRAF_TAB= "Answer"
  EndSwitch
  
  GRAF_TIT2= "Empresa: "+VSDGEMPRESA+"-"+VSDGNOMEMP+" [ Total: "+LTrim(Format("W13.2,EIC",VRTOT))+" ]"

  MONTAGRAFICO(GRAF_TAB)

  Delete "Answer"
  
EndWhile
ClearAll
Release Vars All
Release Procs All
