;** RM_3020G *******************************************************************
;*  EmissÆo do Ranking de Vendas (Modo Grade)                                  *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 16/02/2011 por Bruno Carvalho
;Ultima Alteracao: 16/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao seleciona = RM_3020a   
;Ultima Alteracao: 02/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes aplicando descontos      
;Ultima Alteracao: 10/07/2012 por Bruno Carvalho
;Motivo Alteracao: Adicionado filtro na ask do NotaI "Situacao_Item"
;Ultima Alteracao: 12/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 17/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TG_EMPRESATE                 
;Ultima Alteracao: 27/01/2017 por Anivel Augusto Rodrigues 
;Motivo Alteracao: Ajustes TG_REFERENCIA
;Ultima Alteracao: 03/03/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes agrupado RM_3020    
;Ultima Alteracao: 03/03/2020 por Anivel Augusto Rodrigues                                     
;Motivo Alteracao: Substituido pelo "RM_0081"
;Ultima Alteracao: 03/08/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes substitui‡Æo tpitem por tipoest

;*******************************************************************************
;* Rotina p/ Selecionar Registros                                              *
;*******************************************************************************
Proc RM_3020G_Seleciona()
ClearAll

If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC") And
   IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI")
   Then 
        {Ask} {\\Sistemas\\Estoque\\Itens}
        Moveto [Codigo do Item         ] Example "cite"
        Ask_EstoqueTpItem("") 
        Moveto [Codigo da Familia      ] TypeIn "~VSDGFAMI.."
        Moveto [Codigo do Grupo        ] TypeIn "~VSDGGRP.."
        Moveto [Codigo da Marca        ] TypeIn "~VSDGMARCA.."
        Moveto [NCM                    ] TypeIn "~VSDGNCM.."
        Moveto [Referencia             ] TypeIn "~VSDGREFERENCIA.."    
        
        Moveto [Descricao do Item      ] Check
        Moveto [Referencia             ] Check
        Moveto [Codigo da Familia      ] Check 
        Moveto [Descricao da Familia   ] Check
        Moveto [Codigo da Cor_Tecido   ] Check
        Moveto [Descricao da Cor_Tecido] Check
        Moveto [Codigo da Grade        ] Check
        Moveto [Unidade Fiscal         ] Check

        {Ask} TypeIn "\\Sistemas\\Cadastro\\Represen" Enter
        Moveto [Codigo do Representante] Example "crep"
        If VSDGGERENCIA<>""
           Then Moveto [Codigo da Gerencia     ] TypeIn "~VSDGGERENCIA"
           Else Moveto [Codigo da Gerencia     ] TypeIn "~VSDGGERENCIA.."
        EndIf

        {Ask} {\\Sistemas\\Cadastro\\Destinat}
        Moveto [Codigo                 ] Example "clie"
        Moveto [Codigo da Area         ] TypeIn "~VSDGAREA.."

       {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter
        Moveto [Codigo da Empresa      ] Check Example "Cempr" TypeIn ", ~VSDGEMPRESA2.."
        Moveto [Numero do Documento    ] Check Example "NDoc"
        Moveto [Serie do Documento     ] Check Example "SDoc"
        Moveto [Nome Fantasia Empresa  ] Check
        Moveto [Codigo                 ] Check Example "clie" TypeIn ", ~VSDGDESTINAT.."
        Moveto [Nome Fantasia EmitDest ] Check
        Moveto [Codigo do Representante] Check Example "crep" TypeIn ", ~VSDGREPRESEN.."
        Moveto [Nome Fantasia Represent] Check
        If VSDGOPDTES="2"
           Then Moveto [Data de Saida  ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
           Else Moveto [Data de Emissao] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
        EndIf    
        switch
          case ListaRegra_VSDGDESTIN_Ativo  : Moveto [Codigo da Destinacao] TypeIn ListaRegra_VSDGDESTIN
          otherwise                         : Moveto [Codigo da Destinacao] TypeIn "~VSDGDESTIN.."
        endswitch
        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\\"+Dir_Trab+"NotaI" Enter
        Moveto [Codigo da Empresa      ] Example "Cempr"          
        Moveto [Numero do Documento    ] Example "NDoc"
        Moveto [Serie do Documento     ] Example "SDoc"
        Moveto [Item do Documento      ] Check 
        Moveto [Codigo do Item         ] Check Example "cite" TypeIn ", ~VSDGITEM.."
        Moveto [Quantidade             ] Check   
        Moveto [Preco Unitario         ] Check                
        Moveto [Preco Total            ] Check
        Moveto [Valor Desconto Total   ] Check
        Moveto [Situacao_Item          ] TypeIn "Not C"

        Do_It!
        ClearAll
EndIf

EndProc   ; (Seleciona)

;*******************************************************************************
;* Rotina p/ Agrupar Itens nos tamanhos respectivos                            *
;*******************************************************************************
Proc RM_3020G_AgrupaItens()

{Ask} TypeIn Tabela Enter CheckPlus
Do_It!
ClearAll

Delete Tabela



Array Array_TM[12]
Tabela=Cria_Temp(PrivDir())
Copy "\\Base\\Sistemas\\Vendas\\RM_0081" Tabela

Sort "Answer" On "Referencia"

View "\\Sistemas\\Estoque\\TpGrade"
Coedit Tabela,"Answer"
COMPREF = "*****"

Scan
  AGUARDE("Aguarde, Agrupando Dados")

  If [Referencia] <> COMPREF 
     Then RM_3020G_Verifica_Array_Grade()
          Moveto "Answer"
          COMPREF = [Referencia] 
  EndIF
  
  WSEMP = [Codigo da Empresa   ]
  WSREF = [Referencia          ]
  If VSDGCODMODELO="2Q"
     Then WSCOR = [Codigo da Cor_Tecido]
     Else WSCOR =""
  EndIf
  
  Moveto Tabela
  Moveto [Codigo da Empresa]
  Locate WSEMP,WSREF,WSCOR
  If Not RetVal
     Then End
          Down
          [Codigo da Empresa    ]=[Answer->Codigo da Empresa    ]
          [Referencia           ]=WSREF
          [Codigo da Cor_Tecido ]=WSCOR
          [Nome Fantasia Empresa]=[Answer->Nome Fantasia Empresa]
          [Codigo do Item       ]=WSREF+WSCOR
          If VSDGCODMODELO="2Q"
             Then [Descricao do Item      ]=Substr([Answer->Descricao do Item],1,27)
                  [Descricao da Cor_Tecido]=[Answer->Descricao da Cor_Tecido]
             Else [Descricao do Item      ]=Substr([Answer->Descricao do Item],1,23)
          EndIf
          [Unidade Fiscal       ]=[Answer->Unidade Fiscal       ]
          [Codigo da Familia    ]=[Answer->Codigo da Familia    ]
          [Descricao da Familia ]=[Answer->Descricao da Familia ]
          [Codigo da Grade      ]=[Answer->Codigo da Grade      ]
  EndIf
  
  Coluna=0
  For Wi from 1 to 12
    If Len(RTrim(SubStr(Array_TM[Wi],1,2)))=1
       Then If SubStr([Answer->Codigo do Item],10,1)=SubStr(Array_TM[Wi],1,1)
               Then Coluna=Wi
                    QuitLoop
            EndIf
       Else If SubStr([Answer->Codigo do Item],9,2)=SubStr(Array_TM[Wi],1,2)
               Then Coluna=Wi
                    QuitLoop
            EndIf
    EndIf
  EndFor

  Switch
    Case Coluna=0 : [Qtd1  ]=[Qtd1  ]+[Answer->Quantidade]
    Case Coluna=1 : [Qtd1  ]=[Qtd1  ]+[Answer->Quantidade]
    Case Coluna=2 : [Qtd2  ]=[Qtd2  ]+[Answer->Quantidade]
    Case Coluna=3 : [Qtd3  ]=[Qtd3  ]+[Answer->Quantidade]
    Case Coluna=4 : [Qtd4  ]=[Qtd4  ]+[Answer->Quantidade]
    Case Coluna=5 : [Qtd5  ]=[Qtd5  ]+[Answer->Quantidade]
    Case Coluna=6 : [Qtd6  ]=[Qtd6  ]+[Answer->Quantidade]
    Case Coluna=7 : [Qtd7  ]=[Qtd7  ]+[Answer->Quantidade]
    Case Coluna=8 : [Qtd8  ]=[Qtd8  ]+[Answer->Quantidade]
    Case Coluna=9 : [Qtd9  ]=[Qtd9  ]+[Answer->Quantidade]
    Case Coluna=10: [Qtd10 ]=[Qtd10 ]+[Answer->Quantidade]
    Case Coluna=11: [Qtd11 ]=[Qtd11 ]+[Answer->Quantidade]
    Case Coluna=12: [Qtd12 ]=[Qtd12 ]+[Answer->Quantidade]
  EndSwitch
  
  [Quantidade ]=[Quantidade ]+[Answer->Quantidade]
  [Preco Total]=[Preco Total]+([Answer->Preco Total]-[Answer->Valor Desconto Total])
  [Preco Unitario]=[Preco Total]/[Quantidade]

Moveto "Answer"
        
EndScan
Do_It!
ClearAll

EndProc ;AgrupaItens()

;*******************************************************************************
;* Rotina Monta Array Grade                                                     *
;*******************************************************************************
Proc RM_3020G_Verifica_Array_Grade()

For Wh From 1 To 12
  Array_TM[Wh]="" 
EndFor

Moveto "\\Sistemas\\Estoque\\TpGrade"
Moveto [Codigo da Grade]
Locate [Answer->Codigo da Grade]
If Not RetVal
   Then Mensagem("Item "+[Answer->Codigo do Item]+" sem grade definida !")
        Return
EndIf

Array_TM[1] =LTrim(RTrim([Codigo Item1]))
Array_TM[2] =LTrim(RTrim([Codigo Item2]))
Array_TM[3] =LTrim(RTrim([Codigo Item3]))
Array_TM[4] =LTrim(RTrim([Codigo Item4]))
Array_TM[5] =LTrim(RTrim([Codigo Item5]))
Array_TM[6] =LTrim(RTrim([Codigo Item6]))
Array_TM[7] =LTrim(RTrim([Codigo Item7]))
Array_TM[8] =LTrim(RTrim([Codigo Item8]))
Array_TM[9] =LTrim(RTrim([Codigo Item9]))
Array_TM[10]=LTrim(RTrim([Codigo Item10]))
Array_TM[11]=LTrim(RTrim([Codigo Item11]))
Array_TM[12]=LTrim(RTrim([Codigo Item12]))

EndProc ;Verifica_Array_Grade()


;*******************************************************************************
;* Rotina p/ processar Db temporaria                                           *
;*******************************************************************************
Proc RM_3020G_Processa()

;***** Ajusta Dados ************************************
If VSDGEMPRESA="0000"
   Then {Ask} TypeIn Tabela Enter TypeIn "Fast"
        Moveto [Codigo da Empresa      ] TypeIn "changeto 0000"
        Moveto [Nome Fantasia Empresa  ] TypeIn "changeto TOTALIZA EMPRESAS"
        Do_It!
        ClearAll
   Else {Ask} {\\Sistemas\\Cadastro\\Empresas}
        Moveto [Codigo da Empresa      ] Example "cemp"
        Moveto [Nome Fantasia Empresa  ] Example "nemp"
        {Ask} TypeIn Tabela Enter TypeIn "Fast"
        Moveto [Codigo da Empresa      ] Example "cemp"
        Moveto [Nome Fantasia Empresa  ] TypeIn "changeto _nemp"
        Do_It!
        ClearAll
EndIf

EndProc    ;  (Processa)

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
Proc RM_3020G_Principal()

AGUARDE("Aguarde, gerando o relat¢rio")

Tabela=Cria_Temp(PrivDir())

Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
While Novo_Dir_Trab()
  If IsTable("Answer")     Then Delete "Answer" EndIf
  RM_3020G_Seleciona()
  If Not IsTable("Answer") Then Loop EndIf
  If IsTable(Tabela)
     Then Add "Answer" Tabela
     Else Rename "Answer" Tabela
  EndIf
EndWhile

If not IsEmpty(Tabela)
   Then 
        RM_3020G_Processa()
        RM_3020G_AgrupaItens()

        IMPRIREL(Tabela,"R")  

   Else MENSAGEM("N„o existem registros a processar")
EndIf

Delete Tabela
EndProc

;-- Chamada principal ----------------------------------------------------------
RM_3020G_Principal()

Release Vars Tabela
Release Procs RM_3020G_Principal, RM_3020G_Seleciona, RM_3020G_Processa, RM_3020G_AgrupaItens, RM_3020G_Verifica_Array_Grade
