;** RM_3100B ********************************************************************
;* Resumo de Vendas por Vendedor/Desempenho                                     *
;********************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 27/04/2017 por Anivel Augusto Rodrigues
;Ultima Alteracao: 24/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste logica e calculo liquido de titulo de credito usado
;Ultima Alteracao: 05/08/2017 por Bruno Carvalho
;Motivo Alteracao: Substituido [Valor INSS] -> [Valor TC]
;Ultima Alteracao: 02/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste simples faturamento
;Ultima Alteracao: 10/06/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes selecao seleciona()
;Ultima Alteracao: 12/12/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desfazer ask com representante nÆo cadastrado
;Ultima Alteracao: 28/02/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes agrupado RM_3100, substituido RM_0931
;Ultima Alteracao: 13/08/2020 por Bruno Carvalho             
;Motivo Alteracao: Adicionado proc ListaRegra_Funcao(), onde foi ajustado ListaRegra_TGAtivado

;*******************************************************************************
;* Rotina p/ Selecionar Registros                                              *
;*******************************************************************************
Proc RM_3100B_SELECIONA()
private wi, wc

ClearAll
If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC") And            
   IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI")
   Then   
        for wc from 1 to 2

          for wi from 1 to 2
             {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} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter
             Moveto [Codigo da Empresa      ] Check Example "cemp" TypeIn ", ~VSDGEMPRESA2.."
             Moveto [Numero do Documento    ] Check Example "ndoc" 
             Moveto [Serie do Documento     ] Check Example "sdoc"
             Moveto [Nome Fantasia Empresa  ] Check
             Moveto [Codigo do Representante] Check Example "crep" TypeIn ", ~VSDGREPRESEN.."
             Moveto [Nome Fantasia Represent] Check
             switch
               case wc=1:
                 Moveto [Descricao da Destinacao]       TypeIn "..VEND.. or ..SERV.. or ..SAIDA.."
                 
               case wc=2:
                 Moveto [Descricao da Destinacao]       TypeIn "..SIMP..FATUR.."
                 
             endswitch
             Moveto [Data de Emissao        ] Check TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
             Moveto [Tipo Movimento Estoque ]       TypeIn "S"
             Moveto [Valor TC               ] Check                
             Moveto [Situacao               ]       TypeIn "Not C"
             
             switch
               case wi=1:
                 {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI" Enter
                 Moveto [Codigo da Empresa      ]       Example "cemp"
                 Moveto [Numero do Documento    ]       Example "ndoc"
                 Moveto [Serie do Documento     ]       Example "sdoc"
                 Moveto [Codigo do Item         ]       Example "citem"
                 Moveto [Quantidade             ]       TypeIn "Calc Sum as Quantidade"
                 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"

                 {Ask} {\\Sistemas\\Estoque\\Itens}
                 Moveto [Codigo do Item         ] Example "citem"
                 Switch
                   Case ListaRegra_VSDGMARCA_Ativo  : Moveto [Codigo da Marca] TypeIn ListaRegra_VSDGMARCA
                   Otherwise                        : Moveto [Codigo da Marca] TypeIn "~VSDGMARCA.."
                 EndSwitch                 
                 Do_It!                                          
                 ClearAll

                 if wc=1 and wi=1
                    then RM_3100B_Adiciona_Dados("VENDAS")
                 endif   
               
               case wi=2:
                 {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaV" Enter
                 Moveto [Codigo da Empresa      ]       Example "cemp"
                 Moveto [Numero do Documento    ]       Example "ndoc"
                 Moveto [Serie do Documento     ]       Example "sdoc"
                 Moveto [Forma de Pagamento     ]       TypeIn "TC"
                 Moveto [Valor                  ]       TypeIn "Calc Sum as Valor"
                 Do_It!                                          
                 ClearAll
                 RM_3100B_Adiciona_Dados("TC")
               
             endswitch
             
          endfor
        endfor
EndIf

;****** Devolucoes - Estoque ***************************************************
If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC") And
   IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI")
   Then
        {Ask} TypeIn "\\Sistemas\\Cadastro\\Represen" Enter
        Moveto [Codigo do Representante] Example "crep"
        If VSDGGERENCIA<>""
           Then Moveto [Codigo da Gerencia     ] Check TypeIn "~VSDGGERENCIA"
           Else Moveto [Codigo da Gerencia     ] Check TypeIn "~VSDGGERENCIA.."
        EndIf

        {Ask} {\\Sistemas\\Estoque\\Itens}
        Moveto [Codigo do Item         ] Example "citem"
        Switch
          Case ListaRegra_VSDGMARCA_Ativo  : Moveto [Codigo da Marca] TypeIn ListaRegra_VSDGMARCA
          Otherwise                        : Moveto [Codigo da Marca] TypeIn "~VSDGMARCA.."
        EndSwitch     
        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC" Enter
        Moveto [Numero do Lancamento   ] Example "nlan" TypeIn ", Calc Count as NumReg"
        Moveto [Codigo da Empresa      ] Check Example "cemp" TypeIn ", ~VSDGEMPRESA2.."
        Moveto [Nome Fantasia Empresa  ] Check
        Moveto [Data de Entrada        ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
        Moveto [Codigo do Representante] Check Example "crep" TypeIn ", ~VSDGREPRESEN.."
        Moveto [Nome Fantasia Represent] Check
        Moveto [Tipo de Operacao       ] TypeIn "D"
        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI" Enter
        Moveto [Numero do Lancamento   ] Example "nlan"
        Moveto [Codigo do Item         ] Example "citem"
        Moveto [Quantidade             ] TypeIn "Calc Sum as Quantidade"
        Moveto [Preco Total            ] TypeIn "Calc Sum as Preco Total"
        Moveto [Valor Desconto Total   ] TypeIn "Calc Sum as Valor Desconto Total"
        Do_It!
        ClearAll

        RM_3100B_Adiciona_Dados("DEVOLUCOES")

EndIf

;****** Devolucoes - Vendas ****************************************************
If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC") And
   IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI")
   Then
        {Ask} TypeIn "\\Sistemas\\Cadastro\\Represen" Enter
        Moveto [Codigo do Representante] Example "crep"
        If VSDGGERENCIA<>""
           Then Moveto [Codigo da Gerencia     ] Check TypeIn "~VSDGGERENCIA"
           Else Moveto [Codigo da Gerencia     ] Check TypeIn "~VSDGGERENCIA.."
        EndIf

        {Ask} {\\Sistemas\\Estoque\\Itens}
        Moveto [Codigo do Item         ] Example "citem"
        Switch
          Case ListaRegra_VSDGMARCA_Ativo  : Moveto [Codigo da Marca] TypeIn ListaRegra_VSDGMARCA
          Otherwise                        : Moveto [Codigo da Marca] TypeIn "~VSDGMARCA.."
        EndSwitch
        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter
        Moveto [Codigo da Empresa      ] Check Example "cemp" TypeIn ", ~VSDGEMPRESA2.."
        Moveto [Nome Fantasia Empresa  ] Check
        Moveto [Numero do Documento    ] Example "ndoc" TypeIn ", Calc Count as NumReg"
        Moveto [Serie do Documento     ] Example "sdoc"
        Moveto [Codigo do Representante] Check Example "crep" TypeIn ", ~VSDGREPRESEN.."
        Moveto [Nome Fantasia Represent] Check
        Moveto [Data de Emissao        ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
        Moveto [Descricao da Destinacao] TypeIn "..DEVOL.."
        Moveto [Tipo Movimento Estoque ] TypeIn "E"
        Moveto [Situacao               ] TypeIn "Not C"
        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI" Enter
        Moveto [Codigo da Empresa      ] Example "cemp"
        Moveto [Numero do Documento    ] Example "ndoc"
        Moveto [Serie do Documento     ] Example "sdoc"
        Moveto [Codigo do Item         ] Example "citem"
        Moveto [Quantidade             ] TypeIn "Calc Sum as Quantidade"
        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

        RM_3100B_Adiciona_Dados("DEVOLUCOES")
EndIf

EndProc   ;  (Seleciona)

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

if NRecords("Answer")=1 
   then  View "Answer"
         If [Codigo da Empresa      ]="" and
            [Codigo do Representante]="" 
            Then Empty "Answer"
         EndIf
Endif

if IsEmpty("Answer")    
   then  Return
endif   

;***** Ajusta Dados ************************************
If VSDGEMPRESA="0000"
   Then {Ask} {Answer} TypeIn "Fast"
        Moveto [Codigo da Empresa      ] TypeIn "changeto 0000"
        Moveto [Nome Fantasia Empresa  ] TypeIn "changeto TOTALIZA EMPRESAS"
        Do_It!
        ClearAll
EndIf

View Tabelanv
View Tabela
CoEdit "Answer"
scan

  moveto tabela
  moveto [Codigo da Empresa]
  locate [Answer->Codigo da Empresa],[Answer->Codigo do Representante]
  if not retval
     then 
         if not recordstatus("new")
            then end
                 down
         endif        
         [Codigo da Empresa        ]=[Answer->Codigo da Empresa        ]
         [Codigo do Representante  ]=[Answer->Codigo do Representante  ]
         [Nome Fantasia Empresa    ]=[Answer->Nome Fantasia Empresa    ]
         [Nome Fantasia Represent  ]=[Answer->Nome Fantasia Represent  ]
  endif   

  Switch
    Case Tipo="VENDAS":
       [VendasNumOcorrencias     ]=[VendasNumOcorrencias     ]+1
       [VendasValorBruto         ]=[VendasValorBruto         ]+[Answer->Preco Total              ]
       [VendasQuantidade         ]=[VendasQuantidade         ]+[Answer->Quantidade               ]
       [VendasDesconto           ]=[VendasDesconto           ]+[Answer->Valor Desconto Total     ]
       
       moveto tabelanv
       moveto [Codigo da Empresa]
       locate [Answer->Codigo da Empresa],[Answer->Codigo do Representante],[Answer->Data de Emissao]
       if not retval
          then 
              if not recordstatus("new")
                 then end
                      down
              endif        
              [Codigo da Empresa        ]=[Answer->Codigo da Empresa        ]
              [Codigo do Representante  ]=[Answer->Codigo do Representante  ]
              [Data de Emissao          ]=[Answer->Data de Emissao          ]
       endif   
       
    Case Tipo="DEVOLUCOES":  
       [DevolucoesNumOcorrencias ]=[DevolucoesNumOcorrencias ]+[Answer->NumReg                   ]
       [DevolucoesValor          ]=[DevolucoesValor          ]+([Answer->Preco Total]-[Answer->Valor Desconto Total])
       [DevolucoesQuantidade     ]=[DevolucoesQuantidade     ]+[Answer->Quantidade               ]
  
    Case Tipo="TC":
       if [Answer->Valor TC]<=0
          then [VendasTC                 ]=[VendasTC                 ]+[Answer->Valor                    ]
          else if [Answer->Valor ]>=[Answer->Valor TC]
                  then [VendasTC                 ]=[VendasTC                 ]+( [Answer->Valor ]-[Answer->Valor TC] )
                  else [VendasTC                 ]=[VendasTC                 ]+  [Answer->Valor ]
               endif   
       endif   
    
  EndSwitch

  moveto "Answer"
endscan
do_it!
clearAll

endproc

;*******************************************************************************
;* Rotina p/ Processar  Registros                                              *
;*******************************************************************************
Proc RM_3100B_PROCESSA()
ClearAll

{Ask} typein tabelanv enter
Moveto [Codigo da Empresa      ] Check
Moveto [Codigo do Representante] Check
Moveto [Data de Emissao        ] TypeIn "Calc Count as NDiasVendas"
do_it!
clearAll

{Ask} {Answer}
Moveto [Codigo da Empresa      ]       Example "cemp" 
Moveto [Codigo do Representante]       Example "crep" 
Moveto [NDiasVendas            ]       Example "vnd" 
{Ask} typein tabela enter
Moveto [Codigo da Empresa      ]       Example "cemp" 
Moveto [Codigo do Representante]       Example "crep" 
Moveto [VendasNumDias          ]       TypeIn "Changeto " Example "vnd" 
do_it!
clearAll

Edit Tabela
scan

  [VendasLiquida            ]=[VendasValorBruto         ]-[VendasDesconto                   ]
  
  [MediaVendas              ]=[VendasLiquida            ]/[VendasNumOcorrencias             ]
  [MediaItem                ]=[VendasLiquida            ]/[VendasQuantidade                 ]
  [MediaVendaItem           ]=[MediaVendas              ]/[MediaItem                        ]
 
endscan
do_it!
clearAll

;****** Somatorio Empresa ******************************************
{Ask} TypeIn Tabela Enter
Moveto [Codigo da Empresa      ] Check
Moveto [VendasLiquida          ] TypeIn "Calc Sum as VendasEmpresa"
Do_It!
ClearAll

{Ask} {Answer}
Moveto [Codigo da Empresa        ] Example "cemp"
Moveto [VendasEmpresa            ] Example "tve"
{Ask} TypeIn Tabela Enter
Moveto [Codigo da Empresa        ] Example "cemp"
Moveto [Total Vendas da Empresa  ] TypeIn "Changeto " Example "tve"
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
Proc RM_3100B_Principal()

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

tabelanv=Cria_Tabela("","Codigo da Empresa(A4*),Codigo do Representante(A4*),Data de Emissao(D*)")

Tabela=Cria_Temp(PrivDir())
Empty "\\Base\\Sistemas\\Vendas\\Rm_0931"
Copy "\\Base\\Sistemas\\Vendas\\Rm_0931" Tabela

Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
While Novo_Dir_Trab()
  RM_3100B_Seleciona()
EndWhile

If not IsEmpty(Tabela)
   then
        RM_3100B_Processa()
        
        Switch
          Case VSDGCODMODELO = "1H" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_0931" "R" Tabela "R" 
                                      Impressao_Orientacao="Paisagem"
 
        EndSwitch
        IMPRIREL(Tabela,"R")
   
   Else MENSAGEM("N„o existem registros a processar")
EndIf

Delete Tabela
Delete Tabelanv

EndProc

;-- Chamada principal ----------------------------------------------------------
RM_3100B_Principal()

Release Vars Tabela
Release Procs RM_3100B_Principal, RM_3100B_Seleciona, RM_3100B_Adiciona_Dados, RM_3100B_Processa
  
