;** FT_PONTOS ******************************************************************
;*  Controle de Pontos de Clientes                                             *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 17/09/2019 por Bruno Carvalho                 
;Ultima Alteracao: 10/10/2019 por Bruno Carvalho                            
;Motivo Alteracao: Ajustes nos parametros ESTORNA_RESGATE e PARAM_TABPRECO = "00010"
;Ultima Alteracao: 29/10/2019 por Bruno Carvalho                            
;Motivo Alteracao: Adicionado SYS_APLICATIVO="TROCA" e ajustes p/ utiliza‡Æo do sistema de pontos na rotina TROCA  

;*******************************************************************************
;* Rotina para adicionar a pontua‡Æo do cliente                                *
;*******************************************************************************
Proc Pontuacao()
Private SEQ,PONTOS_SALDO

SEQ              = 0
PONTOS_ARESGATAR = 0
PONTOS_SALDO     = 0
PONTOS_VALOR     = 0

Moveto "\\Sistemas\\Vendas\\PontoC"
Scan For [Codigo]=VSDGDESTINAT
  If [Data de Emissao]<PARAM_REGRA_PONTOS_EXPIRADOS Or [Pontos Saldo]=0
     Then Loop
  EndIf 
  PONTOS_SALDO = PONTOS_SALDO + [Pontos Saldo]
  PONTOS_VALOR = PONTOS_VALOR + [Pontos Valor]
  
  If PARAM_PONTOS_ROTINA="RESGATE_PONTOS"
   Then SEQ = SEQ + 1
        Moveto Tabela_ConsPtoI
        End Down
        [Numero do Lancamento] = "000001"
        [Sequencia           ] = SEQ
        [Codigo da Empresa   ] = [\Sistemas\Vendas\PontoC->Codigo da Empresa  ]
        [Codigo do Documento ] = [\Sistemas\Vendas\PontoC->Codigo do Documento] 
        [Numero do Documento ] = [\Sistemas\Vendas\PontoC->Numero do Documento]
        [Serie do Documento  ] = [\Sistemas\Vendas\PontoC->Serie do Documento ]
        [Codigo              ] = [\Sistemas\Vendas\PontoC->Codigo             ]
        [Data de Emissao     ] = [\Sistemas\Vendas\PontoC->Data de Emissao    ]
        [Pontos Quantidade   ] = [\Sistemas\Vendas\PontoC->Pontos Quantidade  ]
        [Pontos Saldo        ] = [\Sistemas\Vendas\PontoC->Pontos Saldo       ]  
        [Pontos Valor        ] = [\Sistemas\Vendas\PontoC->Pontos Valor       ]
        UnLockRecord
        
        Moveto "\\Sistemas\\Vendas\\PontoC"
  EndIf        
EndScan

PONTOS_ARESGATAR = Round(PONTOS_SALDO,0)
If PONTOS_ARESGATAR>0
   Then Return True
   Else Return False
EndIf

EndProc ;Pontuacao()

;*******************************************************************************
;* Rotina para gerar resgate                                                   *
;*******************************************************************************
Proc Ajusta_Pontos()
Private TEMP,PONTOS_QUANTIDADE

TEMP = True

Moveto Tabela_ConsPtoI
Scan
  If PONTUACAO_VALOR<=0 Then QuitLoop EndIF
  
  If IsBlank([Pontos Saldo]) 
     Then PONTOS_QUANTIDADE = [Pontos Quantidade]
     Else PONTOS_QUANTIDADE = [Pontos Saldo     ]
  EndIf   

  Switch
    Case PONTOS_QUANTIDADE >= PONTUACAO_VALOR : [Pontos Resgate] = PONTUACAO_VALOR
                                                [Pontos Saldo  ] = PONTOS_QUANTIDADE-[Pontos Resgate] 
                                                PONTUACAO_VALOR = 0 
    Case PONTOS_QUANTIDADE <  PONTUACAO_VALOR : [Pontos Resgate] = PONTOS_QUANTIDADE
                                                [Pontos Saldo  ] = PONTOS_QUANTIDADE-[Pontos Resgate]
                                                PONTUACAO_VALOR = PONTUACAO_VALOR - PONTOS_QUANTIDADE
  EndSwitch
  If PONTUACAO_VALOR = 0 Then QuitLoop EndIf
EndScan

Moveto Tabela_ConsPtoI
UnLockRecord
Scan For IsBlank([Pontos Resgate])
  If IsBlank([Pontos Resgate])
     Then Del
          Home
  EndIf
EndScan

If NRecords(Tabela_ConsPtoI)=0
   Then MSG  = "NÆo h  pontos a ser resgatado para o cliente "+VSDGDESTINAT+" "+VSDGNOMDEST+"!"
        TEMP = False
EndIF   

Return TEMP

EndProc ;Ajusta_Pontos()

;*******************************************************************************
;* Rotina para gerar resgate                                                   *
;*******************************************************************************
Proc Gera_Resgate(PARAM)
Private PARAM,LANCTO,SEQ,REG_CONSPTOI,ACHOU_LANCTO

ACHOU_LANCTO=False
If PARAM<>""
   Then LANCTO = PARAM
        Moveto "\\Sistemas\\Vendas\\ConsPtoC"
        Moveto [Numero do Lancamento]
        Locate LANCTO
        If RetVal
           Then ACHOU_LANCTO=True
        EndIf
EndIf        

If Not ACHOU_LANCTO
   Then Moveto "\\Sistemas\\Vendas\\ConsPtoC"
        End
        If IsBlank([Numero do Lancamento])
           Then LANCTO = 0
           Else LANCTO = NumVal([Numero do Lancamento])
        EndIf
        LANCTO = LANCTO + 1
        LANCTO = AlinhM(StrVal(LANCTO),6)
        Down
        [Numero do Lancamento  ] = LANCTO
        [Codigo da Empresa     ] = REG_C["Codigo da Empresa"] 
        [Nome Fantasia Empresa ] = REG_C["Nome Fantasia Empresa"]
        [Codigo                ] = REG_DESTINAT["Codigo"] 
        [Nome Fantasia EmitDest] = REG_DESTINAT["Nome Fantasia EmitDest"]
        [Razao Social          ] = REG_DESTINAT["Razao Social"]
        [Telefone              ] = REG_DESTINAT["Telefone"]
        [Celular               ] = REG_DESTINAT["Celular"]
        [CGC                   ] = REG_DESTINAT["CGC"]
        [Endereco_Eletronico   ] = REG_DESTINAT["Endereco_Eletronico"]
        Switch
          Case VERIFICA_CONSULTA="FATURA" : [Sistema Gerador] = "FT"
          Case VERIFICA_CONSULTA="BALCAO" : [Sistema Gerador] = "BA"
        EndSwitch 
        [Codigo Docto Gerador  ] = REG_C["Docto Nota Gerada"]
        [Numero Docto Gerador  ] = REG_C["Numero Nota Gerada"]
        [Serie Docto Gerador   ] = REG_C["Serie Nota Gerada"]
        [Situacao              ] = "RESGATE/FINALIZADO"     
EndIf        
[Data                  ] = Today()
[Pontos Quantidade     ] = PONTOS_ARESGATAR
[Pontos Saldo          ] = PONTUACAO_VALOR
[Pontos Valor          ] = PONTOS_VALOR
Controle_Dia()
UnLockRecord
SaveTables

SEQ=0
Moveto Tabela_ConsPtoI
Scan
  CopyToArray REG_CONSPTOI
  SEQ = SEQ + 1 
  
  Moveto "\\Sistemas\\Vendas\\ConsPtoI"
  End Down
  [Numero do Lancamento] = LANCTO
  [Sequencia           ] = SEQ
  [Codigo da Empresa   ] = REG_CONSPTOI["Codigo da Empresa"] 
  [Codigo do Documento ] = REG_CONSPTOI["Codigo do Documento"]
  [Numero do Documento ] = REG_CONSPTOI["Numero do Documento"]
  [Serie do Documento  ] = REG_CONSPTOI["Serie do Documento"]
  [Codigo              ] = REG_C["Codigo"] 
  [Data de Emissao     ] = REG_CONSPTOI["Data de Emissao"]
  [Pontos Quantidade   ] = REG_CONSPTOI["Pontos Quantidade"]
  [Pontos Saldo        ] = REG_CONSPTOI["Pontos Saldo"]
  [Pontos Resgate      ] = REG_CONSPTOI["Pontos Resgate"]
  [Pontos Valor        ] = REG_CONSPTOI["Pontos Valor"]
  UnLockRecord
  
  Moveto Tabela_ConsPtoI
EndScan

GRAVA_OBS = LANCTO

Moveto "\\Sistemas\\Vendas\\ConsPtoI"
Scan For [Numero do Lancamento]=LANCTO
  CopyToArray REG_CONSPTOI

  Moveto "\\Sistemas\\Vendas\\PontoC"
  Moveto [Codigo]
  Locate IndexOrder by "Ind01" REG_CONSPTOI["Codigo"],
                               REG_CONSPTOI["Codigo da Empresa"],
                               REG_CONSPTOI["Codigo do Documento"], 
                               REG_CONSPTOI["Numero do Documento"],
                               REG_CONSPTOI["Serie do Documento"]
  If RetVal
     Then [Pontos Saldo]=[Pontos Saldo]-REG_CONSPTOI["Pontos Resgate"]
  EndIf
  UnLockRecord
  
  Moveto "\\Sistemas\\Vendas\\ConsPtoI"         
EndScan
UnLockRecord
SaveTables

EndProc ;Gera_Resgate()

;*******************************************************************************
;* Rotina p/ Atualizar Pontua‡Æo                                               *
;*******************************************************************************
Proc Atualiza_Pontuacao(PARAM)
Private PARAM,ATUALIZAR_VALOR,ACHOU_RESGATE,LANCTO_RESGATE

ATUALIZAR_VALOR=0

If PARAM = "ESTORNA_RESGATE"
   Then ACHOU_RESGATE  = 0
        LANCTO_RESGATE = ""
EndIf   

Moveto "FaturaV"
Scan For [Numero da OF]=ORDFAT
  If [Forma de Pagamento]<>"RP"
     Then ATUALIZAR_VALOR = ATUALIZAR_VALOR + [Valor]
          If SYS_APLICATIVO = "TROCA" And [Forma de Pagamento]="TC"
             Then If [FaturaC->Valor DebitoCredito]>0
                     Then ATUALIZAR_VALOR = 0 
                  EndIf
          EndIf
     Else If PARAM = "ESTORNA_RESGATE"
             Then ACHOU_RESGATE  = [Valor     ]
                  LANCTO_RESGATE = [Observacao]
          EndIf
  EndIf    
EndScan

Moveto "\\Sistemas\\Vendas\\PontoC"
Moveto [Codigo da Empresa ]
Locate REG_C["Codigo da Empresa"    ],
       REG_C["Docto Nota Gerada"    ],
       REG_C["Numero Nota Gerada"   ],
       REG_C["Serie Nota Gerada"    ],
       REG_C["Codigo"               ]
If Retval
   Then Switch
          Case PARAM = "RESGATE_PONTOS" : 
               If [Pontos Saldo] = [Pontos Quantidade]
                  Then [Pontos Saldo] = Round(ATUALIZAR_VALOR,0)
               EndIf
               [Pontos Quantidade     ] = Round(ATUALIZAR_VALOR,0)
               [Pontos Valor          ] = ATUALIZAR_VALOR
               UnLockRecord
          Case PARAM = "ESTORNA_RESGATE" : 
               If [Pontos Saldo] >= [Pontos Quantidade]  ;>= ConversÆo pode ter centavos e pontos pode ter uma pequena diferen‡a
                  Then [Situacao]="C" 
                       UnLockRecord
               EndIf
         EndSwitch      
   Else If PARAM = "RESGATE_PONTOS" And ATUALIZAR_VALOR>0 
           Then End Down
                [Codigo da Empresa     ] = REG_C["Codigo da Empresa"    ]
                [Codigo do Documento   ] = REG_C["Docto Nota Gerada"    ]
                [Numero do Documento   ] = REG_C["Numero Nota Gerada"   ]
                [Serie do Documento    ] = REG_C["Serie Nota Gerada"    ]
                [Codigo                ] = REG_C["Codigo"               ]
                [Nome Fantasia Empresa ] = REG_C["Nome Fantasia Empresa"]
                [Nome Fantasia EmitDest] = REG_DESTINAT["Nome Fantasia EmitDest"]
                [Razao Social          ] = REG_DESTINAT["Razao Social"]
                [Telefone              ] = REG_DESTINAT["Telefone"]
                [Celular               ] = REG_DESTINAT["Celular"]
                [CGC                   ] = REG_DESTINAT["CGC"]
                [Endereco_Eletronico   ] = REG_DESTINAT["Endereco_Eletronico"]
                [Data de Emissao       ] = REG_C["Data de Emissao"]
                [Data do Ultimo Resgate] = Today()
                [Pontos Quantidade     ] = Round(ATUALIZAR_VALOR,0)
                [Pontos Saldo          ] = Round(ATUALIZAR_VALOR,0)
                [Pontos Valor          ] = ATUALIZAR_VALOR
                Controle_Dia()
                UnLockRecord
        EndIf        
EndIf
SaveTables

If PARAM = "ESTORNA_RESGATE"
   Then Estorna_ResgatePontos(LANCTO_RESGATE)
EndIf

EndProc ;Atualiza_Pontuacao()

;*******************************************************************************
;* Rotina p/ Atualizar Pontua‡Æo                                               *
;*******************************************************************************
Proc Estorna_ResgatePontos(PARAM)
Private PARAM

If Not IsAssigned(CANCELA_RESGATE) Then CANCELA_RESGATE = True EndIf 
       
Moveto "\\Sistemas\\Vendas\\ConsPtoI"
Scan For [Numero do Lancamento] = PARAM
  Barra(NRecords("\\Sistemas\\Vendas\\ConsPtoI"), RecNo())
  Aguarde("Aguarde, ajustando dados "+BARRA_STRING)
  
  Moveto "\\Sistemas\\Vendas\\PontoC"
  Moveto [Codigo]
  Locate IndexOrder by "Ind01" [ConsPtoI->Codigo             ],
                               [ConsPtoI->Codigo da Empresa  ],
                               [ConsPtoI->Codigo do Documento], 
                               [ConsPtoI->Numero do Documento],
                               [ConsPtoI->Serie do Documento ]
  If RetVal
     Then [Pontos Saldo]=[Pontos Saldo]+[ConsPtoI->Pontos Resgate]
  EndIf
  UnLockRecord
  
  Moveto  "\\Sistemas\\Vendas\\ConsPtoI"
  [Pontos Resgate]=BlankNum()
  [Pontos Saldo  ]=BlankNum()
EndScan
UnLockRecord
SaveTables

If CANCELA_RESGATE 
   Then Moveto "\\Sistemas\\Vendas\\ConsPtoC"
        Moveto [Numero do Lancamento]
        Locate PARAM
        If RetVal
           Then [Situacao] = "RESGATE/CANCELADO"
                UnLockRecord
        EndIf
        SaveTables
   Else ;Exclui todos os lan‡amentos do ConsPtoI p/ entÆo ser re-criados
        Moveto "\\Sistemas\\Vendas\\ConsPtoI"
        Scan For [Numero do Lancamento]=PARAM
          If IsBlank([Pontos Resgate]) And IsBlank([Pontos Saldo])
             Then Del
          EndIf   
        EndScan   
EndIf

EndProc ;Estorna_ResgatePontos()

;*******************************************************************************
;* ExclusÆo do Resgate de Pontos nos Vencimentos                               *
;*******************************************************************************
Proc Exclui_Resgate_Vencimentos(PARAM)
Private PARAM

Estorna_ResgatePontos(PARAM)

Moveto "FaturaV" 
Moveto [Numero da OF]
Locate ORDFAT
If RetVal
   Then While [Numero da OF] = ORDFAT
          If [Forma de Pagamento]="RP"
             Then Del
                  QuitLoop 
          EndIf
          Skip
          If Eot() Then QuitLoop EnDIf
        EndWhile
        UnLockRecord
EndIf
 
Moveto "NotaV"      
Moveto [Codigo da Empresa]
Locate REG_C["Codigo da Empresa" ],
       REG_C["Numero Nota Gerada"],
       REG_C["Serie Nota Gerada" ]
If RetVal
   Then While [Codigo da Empresa  ]=REG_C["Codigo da Empresa"]  And
              [Numero do Documento]=REG_C["Numero Nota Gerada"] And
              [Serie do Documento ]=REG_C["Serie Nota Gerada"]
          If [Forma de Pagamento]="RP"
             Then Del
                  QuitLoop
          EndIf    
          Skip
          If Eot() Then QuitLoop EnDIf
        EndWhile
        UnLockRecord
EndIf 

EndProc ;Exclui_Resgate_Vencimentos()

;*******************************************************************************
;* Adiciona Pontos FaturaV                                                     *
;*******************************************************************************
Proc Adiciona_Ponto_Vencimentos()  
Private wc, seq, PONTOS_REAIS

If Not IsAssigned(PONTUACAO_CONTROL_REAIS) And Not IsAssigned(PONTUACAO_CONTROL_PONTOS)
   Then Return False
EndIF   

If PONTUACAO_CONTROL_REAIS
   Then PONTOS_REAIS    = PONTUACAO_VALOR                 ;Pontos em R$
        PONTUACAO_VALOR = Round(PONTUACAO_VALOR/5*100,0)  ;Convertendo R$ em Pontos p/ utilizar na tela de resgate  
   Else PONTOS_REAIS = PONTUACAO_VALOR*5/100              ;Convertendo Pontos em R$
EndIf    

Moveto "FaturaV"
Moveto [Forma de Pagamento]
Locate "RP"
If RetVal
   Then [Valor]=PONTOS_REAIS
   Else While True
          Moveto [Sequencia]
          End
          SEQ = [Sequencia]
          Down
          Moveto [Sequencia]
          Seta_Sequencia(SEQ,False)
          If IsLockRecord()
           Then Del
                Loop
          EndIf
          Quitloop
        Endwhile
        [Numero de Dias    ]=0
        [Data              ]=REG_C["Data de Emissao"]
        [Forma de Pagamento]="RP"
        [Valor             ]=PONTOS_REAIS
EndIf 
Unlockrecord
SaveTables

SetaCorRegistro("Padrao")

CALC_VENCTOS()
SomaVenctos("FaturaC","FaturaV")
   
EndProc

;*******************************************************************************
;* Verifica Pontos nos Vencimentos                                             *
;*******************************************************************************
Proc Verifica_Pontos_Vencimentos(PARAM)  
Private PARAM,Ant_Field,Ant_Table,wc, seq

Ant_Field = Field()
Ant_Table = Table()

PONTOS_LANCADOS = 0
LANCTO_RESGATE  = "" 

Moveto "FaturaV"
Moveto [Forma de Pagamento]
Locate "RP"
If RetVal
   Then PONTOS_LANCADOS = [Valor]
        If Not IsBlank([Observacao])
           Then LANCTO_RESGATE=[Observacao]
        EndIf
EndIf
UnLockRecord   

Moveto Ant_Table
Moveto Field Ant_Field
   
EndProc

;*******************************************************************************
;* Estorna Resgate de Pontos                                                   *
;*******************************************************************************
Proc Estorna_TabelaPontos()
Private CHV_EMPRESA, CHV_TPDOCTO, CHV_NUMERO, nlancto

CHV_EMPRESA =[NotaC->Codigo da Empresa  ]
CHV_TPDOCTO =[NotaC->Codigo do Documento]
CHV_NUMERO  =[NotaC->Numero do Documento]
  
Moveto "\\Sistemas\\CtaPag\\Titbaixa"
Moveto [Codigo da Empresa]
Locate IndexOrder by "Indbxa1" CHV_EMPRESA,CHV_TPDOCTO,CHV_NUMERO
If RetVal
   Then While [Codigo da Empresa      ]=CHV_EMPRESA and
              [Bx Tipo Docto Gerador  ]=CHV_TPDOCTO and
              [Bx Numero Docto Gerador]=CHV_NUMERO 

          nlancto=[Numero do Lancamento]
   
          Moveto "\\Sistemas\\CtaPag\\Titulos"
          Moveto [NUmero do Lancamento]
          locate nlancto
          if retval
             then while true
                    if not islockrecord()
                       then 
                            [Saldo do Documento]=[Valor do Documento]
                            Unlockrecord
                            quitloop
                    endif
                  endwhile
          endif             
          
          Moveto "\\Sistemas\\CtaPag\\Titbaixa"
          while true
             if not islockrecord()
                then 
                    unlockrecord
                    del
                    quitloop
              endif        
          endwhile

          If EOT() Then QuitLoop EndIf
          
          Moveto [Codigo da Empresa]
          Locate Next IndexOrder by "Indbxa1" CHV_EMPRESA,CHV_TPDOCTO,CHV_NUMERO
          
        EndWhile
        UnLockRecord
EndIf

EndProc ;Estorna_TabelaPontos()

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Verifica_Exclui_Estorno_Resgate()
Private MSG,LANCTO_RESGATE

MSG = ""
Moveto "FaturaV"
Scan For [Numero da OF]=ORDFAT
  If [Forma de Pagamento]="RP" And Not IsBlank([Observacao])
     Then LANCTO_RESGATE = [Observacao]
          MSG =       Completa("Foi localizado lan‡amento de resgate de pontos nos vencimentos",62," ")+"//"
          MSG = MSG + Completa("no valor de R$"+Strval([Valor])+"!",62," ")+"////"
          MSG = MSG + Completa("Este lan‡amento "+LANCTO_RESGATE+" encontra-se resgatado!",62," ")+"////"
          MSG = MSG + Completa("Para ATIVAR novamente a fun‡Æo do resgate de pontos e realizar",62," ")+"//"
          MSG = MSG + Completa("altera‡äes, este lan‡amento "+LANCTO_RESGATE+" ser  CANCELADO!",62," ")+"//"
          MSG = MSG + Completa("Confirma o CANCELAMENTO do resgate "+LANCTO_RESGATE+"?",62," ")
          QuitLoop          
  EndIf
EndScan   
If MSG<>""
   Then If Not ConfGeral(MSG)
           Then Return False
           Else If LANCTO_RESGATE<>""
                   Then Exclui_Resgate_Vencimentos(LANCTO_RESGATE)
                EndIf
        EndIf         
EndIf   
Release Vars MSG,LANCTO_RESGATE
        
Return True
        
EndProc ;Verifica_Exclui_Estorno_Resgate()

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc ResgatePontos_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True

If (Disparo="OPEN" Or Disparo="UPDATE") And Not INICIO_DIALOG
   Then If Campo="TG_FINALIDADE" 
            Then Switch
                   Case VSDGFINAL=1  : Campo="I_SaldoPontos1"
                                       WCol1 = 33
                                       WCol2 = 80
                                       CampoAnterior="TG_FINALIDADE" 
                   Case VSDGFINAL=2  : Campo="I_SaldoPontos2"
                                       WCol1 = 80
                                       WCol2 = 33
                                       CampoAnterior="TG_FINALIDADE"
                 EndSwitch
                 refazershowdialog=true
                 AcceptDialog
       Endif
EndIf

If INICIO_DIALOG
   Then INICIO_DIALOG = False
EndIf   

If Disparo="OPEN"  
   Then AoCriarShowDialog()
        If refazershowdialog 
           Then Campo=CampoAnterior 
                refazershowdialog=false 
        EndIf  
EndIf    

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59: 
           Temp=False
      Case Evento["KeyCode"] = 27:
           Switch
              Case Campo="TG_FINALIDADE"  : If ConfGeral("Deseja cancelar essa opera‡Æo?")
                                              Then CancelDialog
                                            EndIf  
              Case Campo="I_SaldoPontos1" : Campo="TG_FINALIDADE"
              Case Campo="I_SaldoPontos2" : Campo="TG_FINALIDADE" 
           EndSwitch            
      Case Evento["KeyCode"] = 13:
           Switch
              Case Campo="TG_FINALIDADE" : 
                   VSDGFINAL = ControlValue("TG_FINALIDADE")
                   Switch
                     Case VSDGFINAL=1  : WCol1 = 33
                                         WCol2 = 80
                                         CampoAnterior="I_SaldoPontos1" 
                     Case VSDGFINAL=2  : WCol1 = 80
                                         WCol2 = 33
                                         CampoAnterior="I_SaldoPontos2"
                   EndSwitch
                   refazershowdialog=true
                   AcceptDialog  
              Case Campo="I_SaldoPontos1" :
                   VSD_SaldoPontos=ControlValue("I_SaldoPontos1")
                   AcceptDialog
              Case Campo="I_SaldoPontos2" :
                   VSD_SaldoPontos=ControlValue("I_SaldoPontos2")
                   AcceptDialog
           EndSwitch           
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "

Switch
  Case Campo="I_SaldoPontos1" Or Campo="I_SaldoPontos2" : 
       MSGCAMPO="Informe o valor de resgate"
  Case Campo="TG_FINALIDADE":
       MensagemRadioButtons()       
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;ResgatePontos_Dialog()

;*******************************************************************************
;* Rotina para resgatar o valor de pontos                                      *
;*******************************************************************************
Proc Digita_Resgate()
Private TEMP,PosI,DECIMAL,VALOR_SALDO,AUX_VALOR_PONTOS,VALOR_PONTOS,TM,MSG

TEMP = True

Verifica_Pontos_Vencimentos("")
If PONTOS_LANCADOS > 0
   Then PONTOS_LANCADOS = StrVal(PONTOS_LANCADOS)
        Switch
          Case Search(".",PONTOS_LANCADOS)=0 And Search(",",PONTOS_LANCADOS)=0 : 
               PONTOS_LANCADOS = StrVal(PONTOS_LANCADOS) + ",00"
          Case Search(".",PONTOS_LANCADOS)>0 :
               PosI = Search(".",PONTOS_LANCADOS)
               If PosI>0
                  Then DECIMAL = SubStr(PONTOS_LANCADOS,PosI+1,Len(PONTOS_LANCADOS))
                       If Len(DECIMAL)=1
                          Then DECIMAL = DECIMAL+"0"
                       EndIf
                       PONTOS_LANCADOS = SubStr(PONTOS_LANCADOS,1,PosI)+DECIMAL
               EndIf    
        EndSwitch
        
        If Not ConfGeral("Foi localizado um lan‡amento de resgate de pontos nos vencimentos no valor de R$"+Strval(PONTOS_LANCADOS)+"//Deseja alterar esta pontua‡Æo?")
           Then Return False
        EndIf
EndIf   

VALOR_SALDO      = Rtrim(Ltrim(Format("W12",StrVal(PONTOS_ARESGATAR))))
VALOR_PONTOS     = Rtrim(Ltrim(Format("W12.2,EIC",StrVal(PONTOS_ARESGATAR*5/100))))  ;S¢ para Visualiza‡Æo
AUX_VALOR_PONTOS = VALOR_PONTOS                                                      ;Guarda Valor Original
 
PosI=Search(".",VALOR_PONTOS)
If PosI>0
   Then VALOR_PONTOS = SubStr(VALOR_PONTOS,1,PosI-1)+","+SubStr(VALOR_PONTOS,PosI+1,Len(VALOR_PONTOS))
EndIf

If Len(VALOR_PONTOS) > Len(VALOR_SALDO)
   Then TM = Len(VALOR_PONTOS)
   Else TM = Len(VALOR_SALDO)  
EndIf
If TM<6 Then TM = 6 EndIf                                                            ;Alinhamento no ShowDialog
TM = StrVal(TM)

refazershowdialog=false
WCol1 = 33
WCol2 = 80

VSD_SaldoPontos  = BlankNum()

While True
  INICIO_DIALOG=True
  Echo Normal
  Echo Off
            
  Showdialog "Resgate de Pontos" Proc "ResgatePontos_Dialog"
  Trigger "OPEN","ARRIVE","UPDATE"
  Key "F1","ENTER","ESC","TAB",
  -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140
   @ 08,17 height 09 width 50
             
   @ 01,02 ?? "Saldo: "+Format("W"+TM+",AR",VALOR_SALDO)+" pontos"
   @ 02,02 ?? "Valor: "+Format("W"+TM+",AR",VALOR_PONTOS)+" a ser resgatados"
   
   RadioButtons @ 04,02 Height 3 Width 28
      "~1~ Resgate em Pontos",
      "~2~ Resgate em Valor R$"
        Tag "TG_FINALIDADE"
        To VSDGFINAL
   
   Label  @ 04,32 "Resgate de:" for "I_SaldoPontos1"
   Accept @ 05,WCol1  Width 12 "N" picture "#*#" Tag "I_SaldoPontos1" to VSD_SaldoPontos
   Accept @ 05,WCol2  Width 12 "$" picture "#*#.[##]" Tag "I_SaldoPontos2" to VSD_SaldoPontos

   EndDialog
   Mouse Show

   If Not Retval 
      Then TEMP = False 
           QuitLoop
   EndIf
   If refazershowdialog Then Loop EndIf
   
   Switch
     Case VSD_SaldoPontos < 500 And VSDGFINAL=1 Or VSD_SaldoPontos < 25 And VSDGFINAL=2 : 
          Mensagem("Valor m¡nimo de resgate ‚ de 500 pontos ou R$ 25,00!") 
          Loop
     Case VSD_SaldoPontos>PONTOS_ARESGATAR And VSDGFINAL=1 : 
          Mensagem("A pontua‡Æo informada de "+StrVal(VSD_SaldoPontos)+" ‚ maior que a pontua‡Æo registrada de "+StrVal(PONTOS_ARESGATAR)+"!") 
          Loop 
     Case NumVal(VSD_SaldoPontos)>NumVal(AUX_VALOR_PONTOS) And VSDGFINAL=2 : 
          Mensagem("O Valor informado de R$"+StrVal(VSD_SaldoPontos)+" ‚ maior que o valor registrado em pontua‡Æo de R$"+StrVal(AUX_VALOR_PONTOS)+"!") 
          Loop
     Case SYS_APLICATIVO = "TROCA" And VR_CREDITO>0  :
          If (VSDGFINAL=2 And NumVal(VSD_SaldoPontos) > VR_CREDITO) Or
             (VSDGFINAL=1 And ((NumVal(VSD_SaldoPontos)*5/100) > VR_CREDITO)) 
             Then Mensagem("Valor do resgate nÆo pode ser maior que o valor do documento!") 
                  Loop
          EndIf      
   EndSwitch
   
   ;Dados a ser utilizados nos vencimentos
   PONTUACAO_CONTROL_REAIS  = False
   PONTUACAO_CONTROL_PONTOS = True
   If VSDGFINAL=2
      Then PONTUACAO_CONTROL_REAIS  = True
           PONTUACAO_CONTROL_PONTOS = False     
   EndIf 
   PONTUACAO_VALOR = VSD_SaldoPontos
   QuitLoop
EndWhile
   
Return TEMP
   
EndProc ;Digita_Resgate()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
If Not IsAssigned(PARAM_UTILIZA_PONTOS)  
   Then Switch
          Case IsAssigned(SYS_APLICATIVO) And SYS_APLICATIVO = "FATURA" : 
               If Not GetP_Balcao([FaturaC->Codigo da Empresa])
                  Then Return False  
               EndIf
          Case IsAssigned(SYS_APLICATIVO) And SYS_APLICATIVO = "TROCA"  : ;Setado no pr¢prio script  
          OtherWise :
               If Not GetP_Balcao([FaturaC->Codigo da Empresa])
                  Then Return False  
               EndIf
        EndSwitch       
EndIf
If PARAM_UTILIZA_PONTOS<>"S"
   Then Return
EndIf  

Ativa_Dialog = False

TAB_ANT = Table()     ;Tabela do Form
FIE_ANT = Field()     ;Campo do Form

Switch
  Case PARAM_PONTOS_ROTINA="CONSULTA" :
       Ativa_Dialog = True
  Case PARAM_PONTOS_ROTINA="VERIFICA_RESGATE_PONTOS" :
       ;Apura ocorrˆncia de resgate de pontos no lan‡amento
       Verifica_Pontos_Vencimentos("")
       If PONTOS_LANCADOS>0
          Then PARAM_PONTOS_ROTINA=True
          Else PARAM_PONTOS_ROTINA=False
       EndIf
       Release Vars Ativa_Dialog,FIE_ANT,TAB_ANT
       Return
EndSwitch

If PARAM_PONTOS_ROTINA<>"ESTORNA_RESGATE"
   Then Moveto TAB_ANT           ;Movendo para tabela atual
        Moveto Field FIE_ANT     ;Movendo para o campo atual
        UnLockRecord
        FormKey
EndIf

Moveto "FaturaC"
CopyToArray REG_C

GetRecord "\\Sistemas\\Cadastro\\Destinat" REG_C["Codigo"] To REG_DESTINAT

;Regras p/ #0227#, pondendo ser modificadas para outros clientes
PARAM_REGRA_PONTOS_EXPIRADOS = Today()-365
PARAM_TABPRECO = "00010"

MSG            = ""
VSDGEMPRESA    = ""
VSDGDESTINAT   = REG_C["Codigo"]
VSDGNOMDEST    = REG_C["Nome Fantasia EmitDest"]
VSDGDTINI      = BlankDate()
VSDGDTFIM      = Today()

If SYS_APLICATIVO = "NOTA"
   Then {TableAdd} {\\Sistemas\\Vendas\\FaturaV}
EndIf    
{TableAdd} {\\Sistemas\\Vendas\\PontoC}
{TableAdd} {\\Sistemas\\Vendas\\ConsPtoC}
{TableAdd} {\\Sistemas\\Vendas\\ConsPtoI}

While True
  Switch
    Case SYS_CODIGO_CLIENTE="0227" And REG_C["Codigo da Tabela"]<>PARAM_TABPRECO :
         If PARAM_PONTOS_ROTINA="CONSULTA"
            Then MSG = "Tabela de Pre‡o "+REG_C["Codigo da Tabela"]+" nÆo tem controle de pontua‡Æo!"
         EndIf   
         Ativa_Dialog = False
         QuitLoop 
    Case SYS_CODIGO_CLIENTE="0227" And (VSDGDESTINAT="2015" Or Search("DIVERSOS",VSDGNOMDEST)>0) :
         If PARAM_PONTOS_ROTINA="CONSULTA"
            Then MSG = "Cliente "+VSDGDESTINAT+" "+VSDGNOMDEST+" nÆo tem controle de pontua‡Æo!"
         EndIf   
         Ativa_Dialog = False
         QuitLoop
    Case Search("VEND",REG_C["Descricao da Destinacao"])=0  And 
         Search("SAIDA",REG_C["Descricao da Destinacao"])=0 And
         Search("SERV",REG_C["Descricao da Destinacao"])=0    : 
         If PARAM_PONTOS_ROTINA="CONSULTA"
            Then MSG = "Destina‡Æo "+REG_C["Descricao da Destinacao"]+" nÆo tem controle de pontua‡Æo!" 
         EndIf
         Ativa_Dialog = False
         QuitLoop
    Case PARAM_PONTOS_ROTINA="CONSULTA" :
         If Not Verifica_Exclui_Estorno_Resgate()
            Then Ativa_Dialog = False
                 QuitLoop
         EndIf
         If Not Pontuacao()
            Then MSG = "NÆo h  pontos a ser resgatado para o cliente "+VSDGDESTINAT+" "+VSDGNOMDEST+"!"
                 Ativa_Dialog = False
                 QuitLoop
         EndIf
    Case PARAM_PONTOS_ROTINA="EXCLUI_RESGATE_PONTOS" :
         Ativa_Dialog=False
         MSG =       Completa("O lan‡amento "+LANCTO_RESGATE+" encontra-se resgatado!",60," ")+"////"
         MSG = MSG + Completa("Se continuar a excluir este registro, o resgate dos pontos",60," ")+"//" 
         MSG = MSG + Completa("serÆo estornados e o lan‡amento "+LANCTO_RESGATE+" ser  CANCELADO!",60," ")+"//"
         MSG = MSG + Completa("Confirma excluir este registro e CANCELAR o resgate "+LANCTO_RESGATE+"?",62," ")
         If ConfGeral(MSG)
            Then Exclui_Resgate_Vencimentos(LANCTO_RESGATE)
         EndIf    
         MSG=""
    Case PARAM_PONTOS_ROTINA="RESGATE_PONTOS" Or
         PARAM_PONTOS_ROTINA="ESTORNA_RESGATE" :
         ;Verificando o Total de Pontos Resgatados no NOTA
         
         LANCTO_RESGATE  = ""
         PONTUACAO_VALOR = 0
         Moveto "FaturaV"
         Scan For [Numero da OF]=ORDFAT
           If [Forma de Pagamento]="RP"
              Then LANCTO_RESGATE  = [Observacao]
                   PONTUACAO_VALOR = Round([Valor]/5*100,0)
                   QuitLoop
           EndIf
         EndScan     
         
         If PONTUACAO_VALOR=0 Or LANCTO_RESGATE<>""
            Then Atualiza_Pontuacao(PARAM_PONTOS_ROTINA)
                 QuitLoop
         EnDIf  
         
         If PARAM_PONTOS_ROTINA="RESGATE_PONTOS"
            Then If LANCTO_RESGATE<>""
                    Then CANCELA_RESGATE=False
                         Estorna_ResgatePontos(LANCTO_RESGATE)
                         Release Vars CANCELA_RESGATE
                 EndIf
                 
                 Do_It!
                 Tabela_ConsPtoI = Cria_Temp(PrivDir())
                 Copy "\\Base\\Sistemas\\Vendas\\ConsPtoI" Tabela_ConsPtoI
                 
                 View NOWINDOW Tabela_ConsPtoI
                 Moveto "FaturaC"
                 CoEditKey
         
                 Pontuacao()
                 Ajusta_Pontos()
                 Gera_Resgate(LANCTO_RESGATE)
         EndIf        
         Atualiza_Pontuacao(PARAM_PONTOS_ROTINA)
         
         If PARAM_PONTOS_ROTINA="RESGATE_PONTOS"
            Then ;Atualizando a Observa‡Æo do RESGATE DE PONTOS nos vencimentos
                 If IsAssigned(GRAVA_OBS) And GRAVA_OBS<>""
                    Then Moveto "FaturaV" 
                         Moveto [Numero da OF]
                         Locate ORDFAT
                         If RetVal
                            Then While [Numero da OF] = ORDFAT
                                   If [Forma de Pagamento]="RP"
                                      Then [Observacao]=GRAVA_OBS
                                           QuitLoop 
                                   EndIf
                                   Skip
                                   If Eot() Then QuitLoop EnDIf
                                 EndWhile
                                 UnLockRecord
                         EndIf
                         
                         Moveto "NotaV"      
                         Moveto [Codigo da Empresa]
                         Locate REG_C["Codigo da Empresa" ],
                                REG_C["Numero Nota Gerada"],
                                REG_C["Serie Nota Gerada" ]
                         If RetVal
                            Then While [Codigo da Empresa  ]=REG_C["Codigo da Empresa"]  And
                                       [Numero do Documento]=REG_C["Numero Nota Gerada"] And
                                       [Serie do Documento ]=REG_C["Serie Nota Gerada"]
                                   If [Forma de Pagamento]="RP"
                                      Then [Observacao]=GRAVA_OBS
                                           QuitLoop
                                   EndIf    
                                   Skip
                                   If Eot() Then QuitLoop EnDIf
                                 EndWhile
                                 UnLockRecord
                         EndIf
                 EndIf 
         EndIf
  EndSwitch        
  QuitLoop
EndWhile

;Retornando aos FORMS de trabalho 
Do_It!

Moveto "\\Sistemas\\Vendas\\PontoC"   ClearImage
Moveto "\\Sistemas\\Vendas\\ConsPtoC" ClearImage
Moveto "\\Sistemas\\Vendas\\ConsPtoI" ClearImage
If SYS_APLICATIVO = "NOTA"
   Then Moveto "\\Sistemas\\Vendas\\FaturaV" ClearImage
EndIf
If IsAssigned(Tabela_ConsPtoI) And IsTable(Tabela_ConsPtoI) Then Delete Tabela_ConsPtoI EndIf

Moveto "FaturaC"
If PARAM_PONTOS_ROTINA="CONSULTA" Or PARAM_PONTOS_ROTINA="EXCLUI_RESGATE_PONTOS" 
   Then FormKey
        CoEditKey
        IsLockRecord()
        If Ativa_Dialog
           Then If Digita_Resgate()
                   Then Adiciona_Ponto_Vencimentos()
                EndIf   
        EndIf
        
        If PARAM_PONTOS_ROTINA="EXCLUI_RESGATE_PONTOS"
           Then Moveto TAB_ANT
                Moveto Field FIE_ANT
        EndIf
   Else CoEditKey
EndIf
If MSG<>"" Then Mensagem(MSG) EndIf 

Release Vars Ativa_Dialog,FIE_ANT,TAB_ANT,REG_C,
             VSDGEMPRESA,VSDGDESTINAT,VSDGNOMDEST,VSDGDTINI,VSDGDTFIM,MSG        
Release Procs Pontuacao,Ajusta_Pontos,Gera_Resgate,Atualiza_Pontuacao,Adiciona_Ponto_Vencimentos,
              Verifica_Pontos_Vencimentos,ResgatePontos_Dialog,Digita_Resgate,
              Estorna_TabelaPontos,Estorna_ResgatePontos,Exclui_Resgate_Vencimentos