;** VisitaR ********************************************************************
;*  Programa‡Æo de Visitas - Atualizar Registro dos Clientes                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 16/06/2015 por Bruno Carvalho
;Ultima Alteracao: 30/06/2015 por Bruno Carvalho                       
;Motivo Alteracao: Ajustes p/ pegar apenas as destina‡äes de VENDAS dos Pedidos        
;Ultima Alteracao: 02/07/2015 por Bruno Carvalho                       
;Motivo Alteracao: Ajustes p/ controle em SCAN na proc Atualiza_Comissao() e adicionado Atualiza_Tabelas()
;Ultima Alteracao: 03/07/2015 por Bruno Carvalho                       
;Motivo Alteracao: Ajustes no ShowDialog p/ quando VSDGPROGRAMACAO<>"" nao passar nos outros campos
;Ultima Alteracao: 03/07/2015 por Bruno Carvalho                       
;Motivo Alteracao: Atualiza_Comissao() ajustado p/ pegar todas as NOTAS DE SAIDA independente da DT EMISSAO, comparando pelo numero do pedido
;Ultima Alteracao: 06/07/2015 por Bruno Carvalho                       
;Motivo Alteracao: Se cidade do pedido diferente do cadastro do cliente, ser  exibido nas ocorrˆncias de erro
;Ultima Alteracao: 07/07/2015 por Bruno Carvalho                       
;Motivo Alteracao: Alterado [Descricao da Destinacao] de "TROCA" para "TROC"
;Ultima Alteracao: 21/07/2015 por Bruno Carvalho                       
;Motivo Alteracao: Adicionado REGRA_APURACAO_COMISSAO p/ Pedidos FATURADOS ou TODOS c/ exce‡äes dos CANCELADOS E SUSPENSOS 
;Ultima Alteracao: 28/07/2015 por Bruno Carvalho                       
;Motivo Alteracao: Novos ajustes p/ REGRA_APURACAO_COMISSAO, onde esta pegando o valor da nota fiscal e a qtd das NOTAS e nÆo dos pedidos (*Regra PadrÆo)
;Ultima Alteracao: 31/07/2015 por Bruno Carvalho                       
;Motivo Alteracao: Excluir as notas canceladas  
;Ultima Alteracao: 17/08/2015 por Bruno Carvalho                       
;Motivo Alteracao: Adicionado Apura_Comissao() p/ apurar apenas comissäes de notas faturadas subtraindo as trocas ocorridas no periodo  
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 28/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 28/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 29/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado ValidarModelosRelatorios()

;*******************************************************************************
;* Rotina das Rela‡äes de Visita                                               *
;*******************************************************************************
Proc Relacao_Visitas()

Aguarde("Montando relat¢rio das visitas")

{Ask} {\\Sistemas\\Vendas\\PedidoC} 
Moveto [Codigo da Empresa        ] Check TypeIn "_Emp, ~VSDGEMPRESA.."
Moveto [Nome Fantasia Empresa    ] Check
Moveto [Data de Emissao          ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
Moveto [Data de Entrega          ] Check

Moveto [Codigo do Representante  ] Check TypeIn "~VSDGREPRESEN.." 
Moveto [Nome Fantasia Represent  ] Check 
Moveto [Valor Nota Fiscal        ] Check
Moveto [Situacao do Pedido       ] TypeIn "..ABERTO.. OR ..FATURADO.."
Switch
  Case REGRA_APURACAO_COMISSAO = "PEDIDO ABERTO OU FATURADO" :                          
       Moveto [Situacao do Pedido] TypeIn "Not CANCELADO, Not SUSPENSO"
  Case REGRA_APURACAO_COMISSAO = "PEDIDO FATURADO"           :
       Moveto [Situacao do Pedido] TypeIn "FATURADO"                            
  Case REGRA_APURACAO_COMISSAO = "PEDIDO E NOTA"             :
       Moveto [Numero do Pedido         ] Check TypeIn "_NPed"
      
      
       {Ask} {\\Sistemas\\Vendas\\NotaC}       
       Moveto [Codigo da Empresa       ] TypeIn "_Emp"
       Moveto [Numero do Documento     ] Check
       Moveto [Numero do Pedido        ] TypeIn "_NPed"
       Moveto [Descricao da Destinacao ] Check TypeIn "..VEND.. OR ..TROC.."
       Moveto [Situacao                ] TypeIn "Not C"
       Moveto [Data de Emissao         ] Check
       Moveto [Cidade                  ] Check
       Moveto [Codigo                  ] Check
       Moveto [Nome Fantasia EmitDest  ] Check
       Moveto [Codigo da Destinacao    ] Check
       Moveto [Valor Nota Fiscal       ] Check
       Moveto [Comissao do Representante] Check
       
EndSwitch  
Do_It!
ClearAll

CoEdit "Answer"
Moveto [Descricao da Destinacao]   
Scan
            
  if "VENDA/TROC." =  [Descricao da Destinacao ]  
     Then
       [Valor Nota Fiscal       ] = [Valor Nota Fiscal       ] *-1
       [Valor Nota Fiscal-1     ] = [Valor Nota Fiscal-1     ] *-1 
       Moveto [Descricao da Destinacao]
       Locate Next "VENDA/TROC."
  EndIf
EndScan
Do_It!  
ClearAll
   
EndProc 
                          
;*******************************************************************************
;* Atualiza Tabelas do Sistema                                                 *
;*******************************************************************************
Proc Atualiza_Tabelas()
;Processo em SCAN p/ evitar erros se tiver algum usu rio utilizando a rotina

View "\\Sistemas\\Vendas\\PedidoC"
Coedit Tabela_PedC
Scan
  NLANC  = [Numero do Pedido]
  VR_COMI = [Comissao do Representante]
  
  Moveto "\\Sistemas\\Vendas\\PedidoC"
  Moveto [Numero do Pedido]
  Locate NLANC
  If RetVal
     Then [Comissao do Representante] = VR_COMI
          UnLockRecord
  EndIf   
  Moveto Tabela_PedC
EndScan
Do_it!
ClearAll

View "\\Sistemas\\Vendas\\NotaC"
Coedit Tabela_NotC
Scan
  COD_EMP = [Codigo da Empresa]
  NUM_DOC = [Numero do Documento]
  SER_DOC = [Serie do Documento]
  VR_COMI = [Comissao do Representante]
  
  Moveto "\\Sistemas\\Vendas\\NotaC"
  Moveto [Codigo da Empresa]
  Locate COD_EMP,NUM_DOC,SER_DOC
  If RetVal
     Then If [Situacao]<>"C" 
             Then [Comissao do Representante] = VR_COMI
                  UnLockRecord
          EndIf        
  EndIf   
  Moveto Tabela_NotC
EndScan
Do_it!
ClearAll

View "\\Sistemas\\Estoque\\NotaEc"
Coedit Tabela_NotEC
Scan
  NLANC   = [Numero do Lancamento]
  VR_COMI = [Comissao do Representante]
  
  Moveto "\\Sistemas\\Estoque\\NotaEc"
  Moveto [Numero do Lancamento]
  Locate NLANC
  If RetVal
     Then [Comissao do Representante] = VR_COMI
          UnLockRecord
  EndIf   
  Moveto Tabela_NotEC
EndScan
Do_it!
ClearAll

EndProc ;Atualiza_Tabelas()

;*******************************************************************************
;* Carrega F1 Personalizado do ShowDialog                                      *
;*******************************************************************************
Proc SDCarrega_F1(PARAM)
Private PARAM 

Switch 
  Case PARAM = "Programacao"    : {Ask} {\\Sistemas\\Visita\\VisitaC}
                                  Moveto [Numero da Programacao  ] Check 
                                  Moveto [Nome Fantasia Represent] Check    
                                  Do_It!
                                  Moveto "\\Sistemas\\Visita\\VisitaC"
                                  ClearImage
                                  Monta_Opcoes("Programa‡„o da Visita","F1_Temp")
  Case PARAM = "Representante"  : {Ask} {\\Sistemas\\Visita\\VisitaC}
                                  Moveto [Numero da Programacao  ] TypeIn "~VSDGPROGRAMACAO.." 
                                  Moveto [Codigo do Representante] Check
                                  Moveto [Nome Fantasia Represent] Check    
                                  Do_It!
                                  Moveto "\\Sistemas\\Visita\\VisitaC"                         
                                  ClearImage                                                                                       
                                  Monta_Opcoes("Vendedor","F1_Temp")
  Case PARAM = "Cliente"        : {Ask} {\\Sistemas\\Visita\\VisitaC}
                                  Moveto [Numero da Programacao  ] TypeIn "_NProg,~VSDGPROGRAMACAO.."
                                  Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."  
                                  {Ask} {\\Sistemas\\Visita\\VisitaCL}
                                  Moveto [Numero da Programacao  ] Check TypeIn "_NProg"   
                                  Moveto [Codigo                 ] Check
                                  Moveto [Nome Fantasia EmitDest ] Check
                                  Do_It!
                                  Moveto "\\Sistemas\\Visita\\VisitaC"
                                  ClearImage   
                                  Moveto "\\Sistemas\\Visita\\VisitaCL"
                                  ClearImage                                   
                                  Monta_Opcoes("Cliente da Visita","F1_Temp")                           
EndSwitch                           

Return True

EndProc ;SDCarrega_F1()

;*******************************************************************************
;* Rotina Monta Lista de Tabelas a Processar                                   *
;*******************************************************************************
Proc ListadeTabelas()

If IsAssigned(Array_Tabelas)
   Then Release Vars Array_Tabelas
EndIf
DynArray Array_Tabelas[]

Array_Tabelas[01]="VisitaC"
Array_Tabelas[02]="VisitaCD"
Array_Tabelas[03]="VisitaCL"
Array_Tabelas[04]="VisitaCM"

EndProc

;*******************************************************************************
;* Rotina Bloqueia Tabelas da Pasta                                            *
;*******************************************************************************
Proc BloqueiaTabelas(Pasta)
Private MSG, Pasta, i

For i From 1 to DynArraySize(Array_Tabelas)
  If IsTable(Pasta+Array_Tabelas[i])
     Then Lock Pasta+Array_Tabelas[i] FL
          If Not RetVal
             Then MSG=Completa("O usu rio "+Upper(ErrorUser())+" esta usando uma rotina do sistema",52," ")+"//"
                  MSG=MSG+Completa("que atualiza a programa‡„o de visitas!",52," ")+"////"
                  MSG=MSG+Completa("- Contact -lo para liberar esta rotina",52," ")+"//"            
                  MSG=MSG+Completa("- Processo Abortado",52," ")+"//"
                  Mensagem(MSG)
                  Return False
          EndIf
  EndIf
EndFor

Return True
EndProc

;*******************************************************************************
;* Rotina Desbloqueia Tabelas da Pasta                                         *
;*******************************************************************************
Proc DesbloqueiaTabelas(Pasta)
Private Pasta, i

For i From 1 to DynArraySize(Array_Tabelas)
  If IsTable(Pasta+Array_Tabelas[i])
     Then UnLock Pasta+Array_Tabelas[i] FL
  EndIf
EndFor

EndProc

;************************************
;* ROTINA PARA Ler/Gravacao Opcao   *
;************************************
Proc ModeloRelatoriosCarregaLista()

VSDGCODMODELO     = ""
VSDGMODELO        = ""

;ModeloRelatoriosAdd("XXX XX maximo 70 XX")

ModeloRelatoriosAdd("Criar") ; linha obrigatoria inicial
ModeloRelatoriosAdd("01  Anal¡tico")
ModeloRelatoriosAdd("Fim")
                           
EndProc ;ModeloRelatoriosCarregaLista

;*******************************************************************************
;* 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()
          Switch
            Case Campo="VIS_REPRESEN"      : If SDCarrega_F1("Representante")
                                                Then AUX_REF = "1"
                                                     Seleciona_Opcoes("Vendedor","F1_Temp")  
                                             EndIf                                                            
          EndSwitch      
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"        : Campo="NO"
            Case Campo="VIS_REPRESEN"      : Campo="TG_EMPRESA"  
            Case Campo="TG_DTINI"          : Campo="VIS_REPRESEN"
            Case Campo="TG_DTFIM"          : Campo="TG_DTINI"
            Case Campo="TG_CODMODELO"      : Campo="TG_DTFIM" 
            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"        : Campo="VIS_REPRESEN"
                         If Isblank(VSDGEMPRESA)
                            Then VSDGNOMEMP = "" 
                                 Campo="TG_EMPRESA"
                                 Mensagem("Informe a empresa para prosseguir !")
                         EndIf   
                    Case Campo="VIS_REPRESEN"      : Campo="TG_DTINI"     
                         VSDGREPRESEN = ControlValue("VIS_REPRESEN")
                         If IsBlank(VSDGREPRESEN) 
                            Then VSDGNOMREPR = "TODOS"   
                            Else SDCarrega_F1("Representante")
                                 VSDGREPRESEN = AlinhM(VSDGREPRESEN,4)
                                 If Not Checa_Opcoes("Vendedor",VSDGREPRESEN)     
                                    Then VSDGREPRESEN = ""
                                         VSDGNOMREPR  = ""
                                         Switch
                                           Case Not IsBlank(VSDGPROGRAMACAO) : 
                                                MSG = "Vendedor inv lido ou n„o corresponde a programa‡„o informada!"
                                           OtherWise                         :
                                                MSG = "Vendedor inv lido"
                                         EndSwitch
                                         Mensagem(MSG)
                                         Campo="VIS_REPRESEN"   
                                 EndIf
                          EndIf  
                    Case Campo="TG_DTINI"          : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"          : Campo="TG_CODMODELO"
                    Case Campo="TG_CODMODELO"      : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="VIS_PROGRAMACAO":
     MSG_CAMPO="Informe a Programa‡Æo da Visita"
  Case Campo="VIS_REPRESEN":
     MSG_CAMPO="Informe o Representante"
  Case Campo="":
     MSG_CAMPO=""             
Endswitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_Dialog()

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

VSDGEMPRESA          = ""
VSDGNOMEMP           = ""
VSDGREPRESEN         = ""
VSDGNOMREPR          = ""  
VSDGDTINI            = BlankDate()
VSDGDTFIM            = BlankDate()       

VSDGPROGRAMACAO      = ""

;-------------------------------------------------------------------------------
If Not IsAssigned(REGRA_APURACAO_COMISSAO) Then REGRA_APURACAO_COMISSAO = "" EndIf
;Regra para apura‡Æo das comissäes conforme a sele‡Æo, podendo ser apenas de pedidos faturados,
;pedidos faturados e em aberto ou apenas pedidos independente do status faturado, tendo a nota
;deste pedido, o valor e a quantidade ser  verificado o que esta nesta nota.
                                                                            
;REGRA_APURACAO_COMISSAO = "PEDIDO ABERTO OU FATURADO"                          ;Seleciona os Pedidos em Aberto ou Faturado 
;REGRA_APURACAO_COMISSAO = "PEDIDO FATURADO"                                    ;Seleciona apenas os Pedidos Faturados
REGRA_APURACAO_COMISSAO = "PEDIDO E NOTA"                                       ;Seleciona os Pedidos conforme as Notas
;-------------------------------------------------------------------------------

ModeloRelatoriosCarregaLista()

While True
  Echo Normal
  Echo Off
  ShowDialog "Pedidos Faturados" Proc "SD_Dialog"                        
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 07,12 Height 14 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_NOMEMP" To VSDGNOMEMP

    Label  @ 02,00 "Vendedor"  For "VIS_REPRESEN"
    Accept @ 03,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "VIS_REPRESEN" To VSDGREPRESEN
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "VIS_NOMREPR"  To VSDGNOMREPR    
    
    Label  @ 04,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 05,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 05,16 "at‚" For "TG_DTFIM"
    Accept @ 05,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM
    
    Label  @ 07,00  "Modelo de ~R~elat¢rio"  For "TG_CODMODELO"
    Accept @ 08,01  Width 06 "A3"  Picture "!*!" Tag "TG_CODMODELO" To VSDGCODMODELO
    Accept @ 08,06  Width 63 "A60"  Picture "!*!" Tag "TG_MODELO" To VSDGMODELO        
    
    Pushbutton @ 10,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 10,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  Echo Off
  If Not RetVal Then QuitLoop EndIf
  if not ValidarModelosRelatorios() then loop endif         
  ClearAll
  
  If REGRA_APURACAO_COMISSAO <> "PEDIDO ABERTO OU FATURADO" And                     
     REGRA_APURACAO_COMISSAO <> "PEDIDO FATURADO"           And                    
     REGRA_APURACAO_COMISSAO <> "PEDIDO E NOTA"
     Then Mensagem("Regra de apura‡„o da comiss„o n„o est  declarada!////Verificar com o Suporte T‚cnico VISE INFORMATICA!")
          Loop
  EndIf        
 
  If IsBlank(VSDGDTFIM) 
     Then Mensagem("Data Final Inv lida !")
           Loop
  EndIf

  DISPOSITIVO()
  If OK="" Then Loop EndIf

  Tabela = Cria_Temp(PrivDir())
  Copy "\\Base\\Sistemas\\Visita\\RM_0101" Tabela
  Empty Tabela

  Relacao_Visitas()        
  Switch
    Case Not IsBlank(VSDGREPRESEN)    : MSG = "N„o h  pedido(s) vinculado(s) a este vendedor!"
    OtherWise                         : MSG = "N„o h  pedido(s) vinculado(s)!"
  EndSwitch
  
  Add "Answer" Tabela
  IMPRIREL(Tabela,"R")
  
  Delete Tabela

EndWhile

ClearAll
Release Vars All
Release Procs All
