;** PONTOS *********************************************************************
;*  Sistema de PontuaÆo de Cliente                                            *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 17/09/2019 por Bruno Carvalho
;Ultima Alteracao:   /  /     por
;Motivo Alteracao: 

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc CHAVEC()                                

FACA_CHAVEC=True
INICIO_PAGINA=True

While True
  Moveto [Numero do Lancamento]
  End                          
  NLANC=[Numero do Lancamento]
  Moveto [Numero do Lancamento]
  
  If OPCAO_FORM="F"
     Then Down          
     Else CtrlPgDn
  EndIf
  Moveto [Numero do Lancamento]

  SetaCorRegistro("Editar")
  While True

  MSGCAMPO=""
  TECLA=""
  AguardaTeclasPadrao()

  Switch
    Case RetVal=-94 : MsgTeclasPadrao()
    Case RetVal="F3":
         If OPCAO_FORM="F"
            Then OPCAO_FORM="1"
            Else OPCAO_FORM="F"
         EndIf
         Del                     
         CHAVEC=5
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           FACA_CHAVEC=True
           INICIO_PAGINA=True
           If OPCAO_FORM="F"
              Then PAGINA("ConsPtoC","MR")
              Else PAGINA("ConsPtoC","MT")
           EndIf
           NLANC=[Numero do Lancamento]
           Switch
             Case EDITAR="S":
                  PickForm "1"
                  Echo Normal
                  Echo Off
                  CHAVEC=0
                  Controla_EdicaoC()
             Case EXCLUIR="S" : 
                  Switch
                    Case [Situacao]="RESGATE/CANCELADO"                            : Mensagem("NÆo  poss¡vel excluir um lanamento CANCELADO!")  
                    Case [Situacao]="RESGATE/FINALIZADO" And [Sistema Gerador]<>"" : Mensagem("NÆo  poss¡vel excluir/cancelar um lanamento gerado no BALCAO!")
                    Case [Situacao]="RESGATE/FINALIZADO"                           :  
                         If Verifica_Lancamento()
                            Then MSG =       Completa("NÆo  poss¡vel excluir um lanamento FINALIZADO!",48," ")+"////"
                                 MSG = MSG + Completa(" poss¡vel CANCELAR este lanamento, no entanto,",48," ")+"//"
                                 MSG = MSG + Completa("o  saldo  da  pontuaÆo  deste  lanamento  ser ",48," ")+"//"
                                 MSG = MSG + Completa("estornado.",48," ")+"//"
                                 MSG = MSG + Completa("Deseja CANCELAR este lanamento?",48," ")
                                 If ConfGeral(MSG)
                                    Then Estornar_Pontuacao()
                                         CHAVEC=9
                                         Moveto "ConsPtoC"
                                         PickForm "F"
                                         QuitLoop 
                                 EndIf
                                 CHAVEC=9
                                 Moveto "ConsPtoC"
                                 PickForm "F"
                                 QuitLoop
                         EndIf         
                    OtherWise : 
                         If Checa_Supervisor()
                            Then If QuerExcluir("")
                                    Then PickForm "1"
                                         CHAVEC=9
                                         EXCLUSAO()
                                         Moveto "ConsPtoC"
                                         PickForm "F"
                                         QuitLoop
                                 EndIf         
                         EndIf
                  EndSwitch  
                  UnLockRecord
             OtherWise: QuitLoop
           EndSwitch
           If OPCAO_FORM="1"
              Then PickForm "1"
              Else PickForm "F"
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         CHAVEC=9
         Del
         Return
    Case Retval="ENTER" : 
         If Numero_Lancamento("","F")
            Then NLANC = PROXLANCTO_NLANC
                 Release Vars PROXLANCTO_NLANC   
            Else QuitLoop
         EndIf
         PickForm "1"
         Moveto [Numero do Lancamento]
         If PROXIMO_LANCTO_REG_ACHOU
            Then CHAVEC=0
                 Echo Normal
                 Echo Off
                 If Checa_Controle([Numero_Controle_Dia])
                    Then Return
                 EndIf
            Else CHAVEC=1
                 [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
                 [Data             ]=Today()
                 [Situacao         ]="PENDENTE"
                 If Checa_Controle(SYS_CONTROLE_DIA)
                    Then Return  
                    Else OPCAO_FORM="F"
                 EndIf
         EndIf
         If CHAVEC=1
            Then Del
         EndIf
         If OPCAO_FORM="F"
            Then PickForm "F"
         EndIf
         QuitLoop
    EndSwitch
  EndWhile
EndWhile

EndProc  ;ChaveC()

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DigitaC()  
                         
Moveto "ConsPtoC"
SetaCorRegistro("Editar")

;If CHAVEC=0 And [Situacao]="RESGATE/FINALIZADO"
;   Then Mensagem("Lanamento FINALIZADO!") 
;        CHAVEC=9
;        Return
;EndIf

If INICIO_PAGINA
   Then If Not IsBlank(SYS_EMPRESA_DEFAULT) And CHAVEC=1
           Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
                [Data             ]=Today()
                [Situacao         ]="PENDENTE"
        EndIf   
EndIf

If CHAVEC=1
   Then Moveto [Codigo da Empresa]
        Switch
          Case INICIO_PAGINA And [Codigo da Empresa]<>"" And Not IsBlank([Data]) : Moveto [Codigo]
          Case INICIO_PAGINA And [Codigo da Empresa]<>""                         : Moveto [Data  ] 
        EndSwitch
   Else Calcular_Pontos()
        FACA_CHAVEI = True
        Return
EndIf

While True
  TECLA=" Esc=Retornar  "

  If Field()="Codigo da Empresa" Or Field()="Codigo" 
     Then TECLA=TECLA + "F1=Tabelas  "
     Else TECLA=TECLA + "            "
  EndIf
   
  If CHAVEC=0                         
     Then TECLA=TECLA + "Del=Excluir  "
     Else TECLA=TECLA + "             "
  EndIf
  
  Switch
    Case Field()="Flag"           : MSGCAMPO="ENTER=Prosseguir" 
    OtherWise                     : MSGCAMPO=Field()
  EndSwitch     
    
  Prompt TECLA
  Wait Field
       Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F4","F7","F8","F9",-33

  Switch
  Case RetVal="F1":
       Switch
         Case Field()="Codigo" Or 
              Field()="Codigo da Empresa" :  CONSULTAF1()
       Endswitch  
       
       
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVEC=0
          Then If SYS_NIVEL_USUARIO<>"P" And SYS_NIVEL_USUARIO<>"E"
                  Then If QuerExcluir("")
                          Then EXCLUSAO()
                               CHAVEC=9
                               QuitLoop
                       EndIf         
               EndIf
       EndIf                                                  
  Case Retval="ESC":  
       Switch     
         Case Field()="Codigo da Empresa" Or Field()="Codigo" Or Field()="Data" : 
              Switch
                Case Field()="Codigo" And SYS_NIVEL_USUARIO<>"P" And SYS_NIVEL_USUARIO<>"E" : Moveto [Data]
                Case Field()="Data"   And SYS_NIVEL_USUARIO<>"P" And SYS_NIVEL_USUARIO<>"E" : Moveto [Codigo da Empresa]
                OtherWise                                                                   : 
                      If CHAVEC=1
                          Then EXCLUSAO()
                          Else If RecordStatus("Modified")
                                  Then Undo
                               EndIf
                       EndIf
                       Release Vars CHAVEI
                       CHAVEC=9
                       QuitLoop
              EndSwitch 
       OtherWise             : Left
       EndSwitch
  Case Retval="ENTER":
       Switch
         Case Field()="Codigo da Empresa"                 : If IsBlank([]) Then Loop EndIf
                                                            If Isblank([Data])
                                                               Then Moveto [Data]
                                                               Else Moveto [Codigo]
                                                            EndIf    
         Case Field()="Data"                              : If IsBlank([]) Then Loop EndIf
                                                            Moveto [Codigo]
         Case Field()="Codigo"                            : If IsBlank([]) Then Loop EndIf
                                                            If SYS_CODIGO_CLIENTE="0227" And ([Codigo]="2015" Or Search("DIVERSOS",[Nome Fantasia EmitDest])>0)
                                                               Then Mensagem("Cliente "+[Codigo]+" "+[Nome Fantasia EmitDest]+" nÆo tem pontuaÆo!")
                                                                    Loop
                                                            EndIf
                                                            ;If Not ConfGeral("Deseja relacionar a pontuaÆo do cliente "+[Codigo]+" "+[Nome Fantasia EmitDest]+"?")
                                                            ;  Then Loop
                                                            ;EndIf
                                                            If Not Pontuacao()
                                                               Then Moveto [Codigo] 
                                                                    Loop
                                                               Else FACA_CHAVEI = True
                                                                    QuitLoop
                                                            EnDIf
         
         Case Field()="Flag"                              : FACA_CHAVEI = True
                                                            QuitLoop 
         OtherWise                                        : Right
       EndSwitch
  EndSwitch
EndWhile

EndProc ;DigitaC()  

;*******************************************************************************
;* Rotina para Localizar Cidades                                               *
;*******************************************************************************
Proc CHAVEI()
                  
Moveto "ConsPtoC"
SetaCorRegistro("Padrao")

Moveto "ConsPtoI"
While True 
  Calcular_Pontos()
  End
  NITEM = [Sequencia]
  Down
  Moveto [Sequencia]
  Seta_Sequencia(NITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf
  SetaCorRegistro("Editar")
  While True  
    TECLA= " Esc=Retornar  Alt+F=Funäes  PgDn=Finalizar  "
    
    Switch
      OtherWise                   : MSGCAMPO=Field()
    EndSwitch  

    Prompt TECLA
    Wait Field
         Until "F1","ESC","ENTER","F2","ZOOM","ZOOMNEXT","DOWN","UP","RIGHT","LEFT","HOME","END","PGDN","PGUP","ROTATE",-31,-33,"F4","F6",-62,-64,-33
            
    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Funes " CENTERED
              "F4  ~R~esgate de Pontos" : " Resgate de Pontos                    " : "F4",
              "F6  ~I~mprimir Recibo"   : " Imprimir Recibo dos Resgate de Pontos" : "F6",
              Separator,
              "~C~ancelar             " : " Cancelar a Operao                  " : "CANCELAR"
            EndMenu
            To MenuVar
            Echo off
            If MenuVar="CANCELAR" or MenuVar="Esc"
               Then Loop
               Else Retval=MENUVAR
            EndIf
    EndIf
              
    Switch  
    Case RetVal="F1":                                   
    Case Retval="PGDN":   
         Del 
         If Not RecordStatus("New") 
            Then If CHAVEC=1 And Verifica_Resgate()
                    Then SaveTables
                         Return
                 EndIf
            Else EXCLUSAO()
                 Moveto "ConsPtoC"
                 PickForm "F"     
         EndIf
         FACA_CHAVEC=False
         FACA_CHAVEI=False
         CHAVEI=9
         Return 
    Case RetVal="ESC" :
         Switch
           Case Field()="Sequencia"   : ConfGeral("Confirma desfazer as alteraäes para este registro ?")
                                        If Ok<>"S"
                                           Then Loop          
                                        EndIf
                                        Del
                                        If CHAVEC=1 And Verifica_Resgate()
                                           Then Return
                                        EndIf  
                                        If RecordStatus("New") 
                                           Then EXCLUSAO() 
                                                Moveto "ConsPtoC"
                                                PickForm "F"
                                        EndIf                
                                        FACA_CHAVEC = False
                                        FACA_CHAVEI = False
                                        CHAVEI=9
                                        Return
         Endswitch
    Case RetVal="F4" Or RetVal=-62 : 
         Switch
           Case CHAVEC=0 And [ConsPtoC->Situacao]="RESGATE/FINALIZADO" Or
                             [ConsPtoC->Situacao]="RESGATE/CANCELADO"   : MENSAGEM("NÆo  poss¡vel resgatar pontos de lanamento "+[ConsPtoC->Situacao]+"!")
           Case RecordStatus("New")                           : MENSAGEM("NÆo h  pontos inseridos neste lanamento!") 
           OtherWise                                          : Del 
                                                                If ResgatePontos_Digita()
                                                                   Then FACA_CHAVEC = False
                                                                        FACA_CHAVEI = False
                                                                        CHAVEI=9
                                                                        Return
                                                                   Else QuitLoop
                                                                EndIf        
         EndSwitch
    Case RetVal="F6" Or RetVal=-64 : 
         If Checa_Supervisor()
            Then If [ConsPtoC->Pontos Resgate]>0 And [ConsPtoC->Situacao]="RESGATE/FINALIZADO"
                    Then If ConfGeral("Deseja imprimir o recibo dos resgate de pontos?")
                            Then DispositivoI("")
                                 If OK<>""
                                    Then Imprime_Recibo([ConsPtoC->Pontos Resgate])
                                 EndIf   
                         EndIf
                    Else Switch   
                           Case [ConsPtoC->Situacao]="RESGATE/CANCELADO" : MENSAGEM("NÆo  poss¡vel imprimir recibo de resgate CANCELADO!")
                           OtherWise                                     : MENSAGEM("NÆo h  pontos resgatado neste lanamento!") 
                         EndSwitch
                 EndIf   
         EndIf
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":   
         Del
         While True
           Calcular_Pontos()
           PAGINA("ConsPtoI","MR")   
           If EDITAR="S"
              Then GetRecord "NotaC" [Codigo da Empresa],[Numero do Documento],[Serie do Documento] To REG_NOTA
                   If Not Retval
                      Then MSG = "Documento "+[Numero do Documento]+"/"+[Serie do Documento]+" nÆo foi localizado!"
                      Else DOCUMENTO = REG_NOTA["Codigo do Documento"]+" "+REG_NOTA["Serie do Documento"]+" "+REG_NOTA["Numero do Documento"]
                          
                           MSG = "//"
                           MSG = MSG + Completa("DOCUMENTO "+DOCUMENTO,68," ")+"////"
                           MSG = MSG + Completa("DestinaÆo: "+" "+REG_NOTA["Codigo da Destinacao"]+" "+REG_NOTA["Descricao da Destinacao"],68," ")+"//"
                           MSG = MSG + Completa("Vendedor..: "+REG_NOTA["Codigo do Representante"]+" "+REG_NOTA["Nome Fantasia Represent"],68," ")+"//"
                           MSG = MSG + Completa("EmissÆo...: "+Ltrim(Format("D13",REG_NOTA["Data de Emissao"])),68," ");+"//"
                          ;MSG = MSG + Completa("Valor NF..: "+Ltrim(Format("W12.2,EIC",REG_NOTA["Valor Nota Fiscal"])),68," ")
                   EndIf
                   Mensagem(MSG)
                   Release Vars DOCUMENTO,MSG,REG_NOTA
              Else If EXCLUIR="S"
                      Then If CHAVEC=0 And ([ConsPtoC->Situacao]="RESGATE/FINALIZADO" Or [ConsPtoC->Situacao]="RESGATE/CANCELADO")
                              Then FastMsg("NÆo  poss¡vel excluir documento de lanamento "+[ConsPtoC->Situacao]+"!")
                              Else If Checa_Supervisor()
                                      Then If ConfGeral("Deseja excluir este documento da relaÆo e sua pontuaÆo/resgate?")
                                              Then Grava_LogEx("ConsPtoI")
                                                   Del
                                                   CHAVEI=9
                                                   QuitLoop
                                           EndIf
                                   EndIf
                           EndIf
                           UnLockRecord
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ENTER":
         FastMsg("NÆo  possivel incluir um documento nesta relaÆo!")
         Loop
         
         ;NÆo  executado
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf
         SEQIT=[]
         Del
         Locate NLANC,SEQIT
         If Retval
            Then CHAVEI=0
                 SEQIT=[]
            Else CHAVEI=1
                 End
                 Down
                 [Numero do Lancamento]=NLANC
                 [Sequencia           ]=SEQIT
                 UnLockRecord
                 Locate NLANC,SEQIT
         EndIf
         Return         
    EndSwitch
  EndWhile
EndWhile

EndProc ;ChaveI()

;*******************************************************************************
;* Rotina para Digitacao das Cidades                                           *
;*******************************************************************************
Proc DIGITAI()

Moveto [Numero do Documento]
While True
  TECLA=" Esc=Retornar  "
  
  Switch
    OtherWise                   : MSGCAMPO=Field()
  EndSwitch
    
  Prompt TECLA
  Wait Field
       Message MSGCAMPO
       Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F4","F7","F8","F9",-33
  
  Switch  
  Case RetVal="F1" :
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       FastMsg("No  poss¡vel excluir a pontuaÆo!")
  Case Retval="ESC":  
       Switch     
         Case Field()="Numero do Documento": If CHAVEI=1 Then Del EndIf
                                             QuitLoop   
       EndSwitch
  Case Retval="ENTER":  
       Switch
         Case Field()="Numero do Documento" : If IsBlank([]) Then Loop EndIf
                                              QuitLoop    
       EndSwitch
  EndSwitch
EndWhile

EndProc ;DigitaI()

;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc EXCLUSAO()

Moveto "ConsPtoI"
While RecordStatus("New")=False
  While IsLockRecord() EndWhile
  Del
EndWhile

Moveto "ConsPtoC"
UnLockRecord
KeyPress "F7"
If CHAVEC=1
   Then If Not IsAssigned(ACHOU_RESGATE) 
           Then Grava_LogEx("ConsPtoC")
        EndIf   
EnDIf   
Del

EndProc ;EXCLUSAO()

;*******************************************************************************
;* Rotina para Calcular o Valor da Comissao                                    *
;*******************************************************************************
Proc Calcular_Pontos()
Private QUANT,SALDO,RESGAT,VALOR,TAB_ANT,CAMPO_ANT
  
TAB_ANT   = Table()
CAMPO_ANT = Field()

Moveto "ConsPtoI"
Moveto [Pontos Quantidade] QUANT  = ImageCSum()
Moveto [Pontos Saldo     ] SALDO  = ImageCSum()
Moveto [Pontos Resgate   ] RESGAT = ImageCSum()
Moveto [Pontos Valor     ] VALOR  = ImageCSum()

Moveto "ConsPtoC"
[Pontos Quantidade] = QUANT
[Pontos Saldo     ] = SALDO
[Pontos Resgate   ] = RESGAT
[Pontos Valor     ] = VALOR

If [Pontos Quantidade]=0 Then [Pontos Quantidade]=BlankNum() EndIf
If [Pontos Saldo     ]=0 Then [Pontos Saldo     ]=BlankNum() EndIf
If [Pontos Resgate   ]=0 Then [Pontos Resgate   ]=BlankNum() EndIf
If [Pontos Valor     ]=0 Then [Pontos Valor     ]=BlankNum() EndIf
UnLockRecord
SaveTables

Moveto TAB_ANT
Moveto Field CAMPO_ANT

Release Vars QUANT,SALDO,RESGAT,VALOR,TAB_ANT,CAMPO_ANT

EndProc ;Calcular_Pontos()

;*******************************************************************************
;* Rotina para Verificar se Cancelamento/ExclusÆo  permitido                  *
;*******************************************************************************
Proc Verifica_Lancamento()

If Not PARAM_RELATORIO
   Then Moveto "ConsPtoC"
        CopyToArray REG_CONSPTOC
EndIf

Do_it!
ClearAll

ACHOU_CLIENTE = ""

View "ConsPtoC" 
Moveto [Codigo]
Locate REG_CONSPTOC["Codigo"]
If Retval
   Then While [Codigo]=REG_CONSPTOC["Codigo"]
          If [Numero do Lancamento]<>REG_CONSPTOC["Numero do Lancamento"] And [Situacao]="RESGATE/FINALIZADO" And [Situacao]<>"RESGATE/CANCELADO" 
             Then ACHOU_CLIENTE = [Numero do Lancamento]
          EndIf    
          Skip
          If Eot() Then QuitLoop EnDIf
          Locate Next REG_CONSPTOC["Codigo"] 
          If Not RetVal Then QuitLoop EndIf
        EndWhile
EndIf

If ACHOU_CLIENTE<>"" And NumVal(NLANC) < NumVal(ACHOU_CLIENTE)
   Then MSG =       "H  outro lanamento para o cliente "+REG_CONSPTOC["Codigo"]+" "+REG_CONSPTOC["Nome Fantasia EmitDest"]+"."+"////"
        MSG = MSG + "Para prosseguir com este cancelamento ser  necess rio"+"//" 
        MSG = MSG + "cancelar o lanamento mais recente!"
        ClearAll
        Abre_Tabela()
        Mensagem(MSG)
        Return False 
EndIf 
ClearAll
Abre_Tabela()

Return True
 
EndProc ;Verifica_Lancamento()

;*******************************************************************************
;* Rotina para verificar resgate                                               *
;*******************************************************************************
Proc Verifica_Resgate()         

ACHOU_RESGATE=False

Moveto "ConsPtoI"
Home
Scan
  If [Pontos Resgate]>0 Then ACHOU_RESGATE=True EndIf         
EndScan
If Not ACHOU_RESGATE
   Then FACA_CHAVEC=False
        FACA_CHAVEI=False
        CHAVEC=9
        CHAVEI=9                       
        EXCLUSAO()
        Moveto "ConsPtoC"
        PickForm "F"
        Release Vars ACHOU_RESGATE
        Return True
EndIf   
Release Vars ACHOU_RESGATE
Return False

EndProc ;Verifica_Resgate()

;*******************************************************************************
;* Rotina para adicionar a pontuaÆo do cliente                                *
;*******************************************************************************
Proc Pontuacao_Complemento(PROCESSO)
Private PROCESSO

Switch
   Case PROCESSO = "TABELA_NOTA" Or PROCESSO = "TABELA_PONTOS" : 
        If Not PARAM_RELATORIO
           Then Moveto "ConsPtoC"
                CopyToArray REG_CONSPTOC
        EndIf
        Do_it!
        ClearAll
        
        If Not PARAM_RELATORIO
           Then ACHOU_CLIENTE = ""
        
                View "ConsPtoC"
                Moveto [Codigo]
                Locate REG_CONSPTOC["Codigo"]
                If Retval
                   Then While [Codigo]=REG_CONSPTOC["Codigo"]
                          If [Numero do Lancamento]<>REG_CONSPTOC["Numero do Lancamento"] And [Situacao]<>"RESGATE/FINALIZADO" And [Situacao]<>"RESGATE/CANCELADO" 
                             Then ACHOU_CLIENTE = [Numero do Lancamento]
                                  QuitLoop
                          EndIf    
                          Skip
                          If Eot() Then QuitLoop EnDIf
                          Locate Next REG_CONSPTOC["Codigo"] 
                          If Not RetVal Then QuitLoop EndIf
                        EndWhile
                EndIf
                
                If ACHOU_CLIENTE<>""
                   Then MSG = "Cliente "+REG_CONSPTOC["Codigo"]+" "+REG_CONSPTOC["Razao Social"]+" foi localizado no lanamento "+ACHOU_CLIENTE+
                              " e esta PENDENTE, faltando realizar o resgate de pontos!"
                        ClearAll
                        Abre_Tabela()
                        Mensagem(MSG)
                        Return False 
                EndIf 
                ClearAll
        EndIf
        
        If Not PARAM_RELATORIO
           Then {Ask} {ConsPtoC}
                Moveto [Numero do Lancamento] Check TypeIn "Not "+REG_CONSPTOC["Numero do Lancamento"]
                Moveto [Pontos Resgate      ] Check TypeIn ">0"
                Moveto [Codigo              ] TypeIn REG_CONSPTOC["Codigo"]
                Moveto [Situacao            ] TypeIn "Not ..CANCELADO"
                Do_it!
                ClearAll       
                
                Conta_Array = 0
                DynArray Array_Pontos[]
                If Not IsEmpty("Answer")
                   Then MSG_ACHOU_PONTUACAO =                       Completa("Cliente: "+REG_CONSPTOC["Codigo"]+" "+REG_CONSPTOC["Nome Fantasia EmitDest"],70," ")+"////" 
                        MSG_ACHOU_PONTUACAO = MSG_ACHOU_PONTUACAO + Completa("A pontuaÆo foi inserida/resgatada nos lanamentos: ",70," ")+"//"
                        View "Answer"
                        Scan
                          Conta_Array = Conta_Array + 1 
                          Array_Pontos[Conta_Array]=[Numero do Lancamento]
                          MSG_ACHOU_PONTUACAO = MSG_ACHOU_PONTUACAO + Completa("- "+[Numero do Lancamento]+" com "+Format("W12",[Pontos Resgate])+
                                                                      " Pontos Resgatados",70," ")+"//"
                        EndScan
                        ClearAll
                        MSG_ACHOU_PONTUACAO = MSG_ACHOU_PONTUACAO + Completa("Deseja que o sistema verifique se h  mais pontuaÆo para este cliente?",70," ") 
                EndIf
           Else AGUARDE("Aguarde, gerando o relat¢rio")
                Tabela_ConsPtoI=Cria_Temp(PrivDir())
                Copy "\\Base\\Sistemas\\Vendas\\ConsPtoI" Tabela_ConsPtoI
                Empty Tabela_ConsPtoI         
        EndIf
        Do_it!
        ClearAll
        
        ACOU_DOC = False  
        MSG      = ""
        SEQ      = 0

   Case PROCESSO = "GERAL" :
        If PARAM_RELATORIO
           Then {Ask} {Answer} Check
                Moveto [Data de Emissao ] TypeIn ">=~VSDGDTINI ,<=~VSDGDTFIM"
                Do_it!
                ClearAll
        EndIf
        
        If Not IsEmpty("Answer")
           Then If Not PARAM_RELATORIO
                   Then TabelaPontos=Adiciona_Indice_Temp("Codigo da Empresa,Numero do Documento,Serie do Documento")
                   Else TabelaPontos=Adiciona_Indice_Temp("Codigo,Codigo da Empresa,Numero do Documento,Serie do Documento") 
                EndIf
                
                Copy TabelaPontos "Answer"
                
                If Not PARAM_RELATORIO
                   Then View "ConsPtoI"
                   Else PONTO_CLIENTE = "***"
                        View Tabela_ConsPtoI
                EnDIf
                CoEdit "Answer"
                Scan
                  Barra(NRecords("Answer"), RecNo())
                  Aguarde("Aguarde, consultando pontos "+BARRA_STRING)
                  
                  If PARAM_RELATORIO
                     Then If PONTO_CLIENTE<>[Codigo]
                             Then If PONTO_CLIENTE = "***"
                                     Then ACOU_DOC = True
                                          NLANC = 0
                                  EndIf 
                                  NLANC = AlinhM(Strval(NumVal(NLANC) + 1),6)
                                  SEQ   = 0
                                  PONTO_CLIENTE=[Codigo]
                          Endif 
                  EndIf  
                  If Not ACOU_DOC Then ACOU_DOC = True EndIf
                  SEQ = SEQ + 1
                  
                  If Not PARAM_RELATORIO
                     Then Moveto "ConsPtoI"
                     Else Moveto Tabela_ConsPtoI
                  EnDIf 
                  End Down
                  [Numero do Lancamento] = NLANC
                  [Sequencia           ] = SEQ
                  [Codigo              ] = [Answer->Codigo] 
                  [Codigo da Empresa   ] = [Answer->Codigo da Empresa]
                  [Numero do Documento ] = [Answer->Numero do Documento]
                  [Serie do Documento  ] = [Answer->Serie do Documento]
                  [Codigo do Documento ] = [Answer->Codigo do Documento]
                  [Data de Emissao     ] = [Answer->Data de Emissao]
                  If PARAM_TABELA = "TABELA_PONTOS"
                     Then [Pontos Quantidade   ] = [Answer->Pontos Quantidade]
                          [Pontos Valor        ] = [Answer->Pontos Valor     ]
                          [Pontos Saldo        ] = [Answer->Pontos Saldo     ]
                     Else [Pontos Quantidade   ] = Round(NumVal([Answer->Valor ]),0)
                          [Pontos Valor        ] = [Answer->Valor Nota Fiscal] 
                  EndIf
                  UnLockRecord
               
                  Moveto "Answer"
                EndScan
                Do_it!
                ClearAll
                
                If Not PARAM_RELATORIO And IsAssigned(Array_Pontos) And DynArraySize(Array_Pontos)>0
                   Then For ii From 1 To DynArraySize(Array_Pontos)
                          {Ask} {ConsPtoI} 
                          Moveto [Numero do Lancamento] Check TypeIn Array_Pontos[ii]
                          Moveto [Codigo da Empresa   ] Check
                          Moveto [Numero do Documento ] Check
                          Moveto [Serie do Documento  ] Check
                          Moveto [Codigo do Documento ] Check
                          Moveto [Data de Emissao     ]       TypeIn ">=~PARAM_REGRA_PONTOS_EXPIRADOS"
                          Moveto [Pontos Quantidade   ] Check
                          Moveto [Pontos Saldo        ] Check
                          Moveto [Pontos Resgate      ] Check TypeIn ">0"
                          Do_It!
                          
                          ClearAll
                          
                          If Not IsEmpty("Answer")
                             Then View "ConsPtoI" 
                                  CoEdit "Answer" 
                                  Scan
                                    Barra(NRecords("Answer"), RecNo())
                                    Aguarde("Aguarde, ajustando pontuaÆo neste lanamento "+BARRA_STRING)
                                    
                                    Moveto "ConsPtoI"
                                    Moveto [Numero do Lancamento]
                                    Locate NLANC
                                    If RetVal
                                       Then While [Numero do Lancamento]=NLANC
                                              If [Answer->Codigo da Empresa  ] = [Codigo da Empresa  ] And
                                                 [Answer->Numero do Documento] = [Numero do Documento] And
                                                 [Answer->Serie do Documento ] = [Serie do Documento ]
                                                 Then If [Pontos Quantidade]=[Answer->Pontos Resgate] Or [Answer->Pontos Saldo]=0
                                                         Then SEQ = SEQ - 1
                                                              Del
                                                         Else [Pontos Saldo] = [Answer->Pontos Saldo]
                                                      EndIf    
                                                      QuitLoop
                                              EndIf
                                              Skip
                                              If Eot() Then QuitLoop EndIf        
                                            EndWhile   
                                            
                                    EndIf
                                    UnLockRecord
                                    
                                    Moveto "Answer"
                                  EndScan
                                  Do_It!
                                  ClearAll
                                  
                                  {Ask} {ConsPtoI}
                                  Moveto [Numero do Lancamento] TyPeIn NLANC
                                  Moveto [Pontos Saldo        ] TyPeIn ">0"
                                  Do_It!
                                  ClearAll
                                  
                                  If Not IsEmpty("Answer")
                                     Then {Ask} {ConsPtoI}
                                          Moveto [Numero do Lancamento] TyPeIn NLANC
                                          Moveto [Pontos Quantidade   ] TyPeIn "_Qtd"
                                          Moveto [Pontos Saldo        ] TyPeIn "Blank, Changeto _Qtd"
                                          Do_It!
                                          ClearAll      
                                  EndIf
                          EndIf
                        EndFor
                EndIf
                
                If PARAM_RELATORIO
                   Then ;---- Consulta pontuaÆo finalizada para ser analisada no relat¢rio
                        {Ask} {ConsPtoI} 
                        Moveto [Numero do Lancamento] Check 
                        Moveto [Codigo              ] Check 
                        If VSDGDESTINAT<>""
                           Then Moveto [Codigo      ] TypeIn VSDGDESTINAT
                        EndIf   
                        Moveto [Codigo da Empresa   ] Check
                        Moveto [Numero do Documento ] Check
                        Moveto [Serie do Documento  ] Check
                        Moveto [Codigo do Documento ] Check
                        Moveto [Pontos Quantidade   ] Check
                        Moveto [Pontos Saldo        ] Check
                        Moveto [Pontos Resgate      ] Check TypeIn ">0"
                        Do_It!
                        ClearAll
                        
                        If Not IsEmpty("Answer")
                           Then View Tabela_ConsPtoI 
                                CoEdit "Answer" 
                                Scan
                                  Barra(NRecords("Answer"), RecNo())
                                  Aguarde("Aguarde, ajustando pontuaÆo neste lanamento "+BARRA_STRING)
                                  
                                  Moveto Tabela_ConsPtoI
                                  Moveto [Codigo]
                                  Locate IndexOrder by "Ind03" [Answer->Codigo             ],
                                                               [Answer->Codigo da Empresa  ], 
                                                               [Answer->Numero do Documento],
                                                               [Answer->Serie do Documento ]
                                  If RetVal
                                     Then If [Pontos Quantidade]=[Answer->Pontos Resgate] Or [Answer->Pontos Saldo]=0
                                             Then SEQ = SEQ - 1
                                                  Del
                                             Else [Pontos Saldo] = [Answer->Pontos Saldo]
                                          EndIf   
                                  EndIf
                                  UnLockRecord
                                  
                                  Moveto "Answer"
                                EndScan
                                Do_It!
                                ClearAll  
                                
                                If IsEmpty(Tabela_ConsPtoI) Or NRecords(Tabela_ConsPtoI)=1
                                   Then Switch
                                          Case NRecords(Tabela_ConsPtoI)=1 : 
                                               View Tabela_ConsPtoI
                                               If IsBlank([Numero do Lancamento]) And IsBlank([Sequencia])
                                                  Then ACOU_DOC=False
                                                       Empty Tabela_ConsPtoI
                                               EndIf       
                                          Case IsEmpty(Tabela_ConsPtoI)    : ACOU_DOC=False
                                        EndSwitch
                                EndIf   
                                
                                If Not IsEmpty(Tabela_ConsPtoI)
                                   Then {Ask} TypeIn Tabela_ConsPtoI Enter
                                        Moveto [Pontos Saldo        ] TyPeIn ">0"
                                        Do_It!
                                        ClearAll
                                        
                                        If Not IsEmpty("Answer")
                                           Then {Ask} TypeIn Tabela_ConsPtoI Enter
                                                Moveto [Pontos Quantidade   ] TyPeIn "_Qtd"
                                                Moveto [Pontos Saldo        ] TyPeIn "Blank, Changeto _Qtd"
                                                Do_It!
                                                ClearAll
                                        EndIf
                                EndIF
                        EndIf
                EndIf        
        EndIf
   Case PROCESSO = "FINAL" :     
        If Not PARAM_RELATORIO
           Then If SEQ=0 Then ACOU_DOC = False EndIf
                Abre_Tabela()
                AUX_CODIGO = [ConsPtoC->Codigo]
                AUX_NOME   = [ConsPtoC->Nome Fantasia EmitDest]
           Else AUX_CODIGO = VSDGDESTINAT
                AUX_NOME   = VSDGNOMDEST       
        EndIf
        
        If Not ACOU_DOC
           Then If AUX_CODIGO<>""
                   Then MSG = "NÆo h  pontos a ser lanado para o cliente "+AUX_CODIGO+" "+AUX_NOME+"!"
                   Else MSG = "NÆo foi localizado pontos de clientes a ser lanados neste per¡odo!"
                EndIf   
        EndIf
        Release Vars AUX_CODIGO,AUX_NOME
        
        If MSG<>"" 
           Then If IsAssigned(PARAM_PONTOS_ROTINA) And PARAM_PONTOS_ROTINA="RESGATE_PONTOS"
                   Then 
                   Else Mensagem(MSG)
                EndIf   
                Return False  
           Else Return True 
        EndIf 
EndSwitch

Return True

EndProc ;Pontuacao_Complemento()

;*******************************************************************************
;* Rotina para adicionar a pontuaÆo do cliente                                *
;*******************************************************************************
Proc Pontuacao()

If Not Pontuacao_Complemento(PARAM_TABELA)
   Then Return False
EndIf   

{Ask} {PontoC} 
Moveto [Codigo da Empresa       ] Check
Moveto [Codigo do Documento     ] Check
Moveto [Numero do Documento     ] Check
Moveto [Serie do Documento      ] Check
Moveto [Data de Emissao         ] Check TypeIn ">=~PARAM_REGRA_PONTOS_EXPIRADOS"
If Not PARAM_RELATORIO
   Then Moveto [Codigo          ] Check TypeIn REG_CONSPTOC["Codigo"]
   Else Moveto [Codigo          ] Check TypeIn "~VSDGDESTINAT.."
EndIf   
Moveto [Pontos Quantidade       ] Check 
Moveto [Pontos Saldo            ] Check TypeIn "Not 0" 
Moveto [Pontos Valor            ] Check
Moveto [Situacao                ]       TypeIn "Not C"
Do_it!
ClearAll

If Not Pontuacao_Complemento("GERAL")
   Then Return False
EndIf   
   
If Not Pontuacao_Complemento("FINAL")
   Then Return False
EndIf   

Return True

EndProc ;Pontuacao()
 
;*******************************************************************************
;* Rotina para adicionar a pontuaÆo do cliente                                *
;*******************************************************************************
Proc Pontuacao_NotaC()

If Not Pontuacao_Complemento(PARAM_TABELA)
   Then Return False
EndIf

{Ask} {NotaC} 
Moveto [Codigo da Empresa       ] Check
Moveto [Data de Emissao         ] Check TypeIn ">=~PARAM_REGRA_PONTOS_EXPIRADOS"
If Not PARAM_RELATORIO
   Then Moveto [Codigo          ] Check TypeIn REG_CONSPTOC["Codigo"]
   Else Moveto [Codigo          ] Check TypeIn "~VSDGDESTINAT.."
EndIf   
Moveto [Descricao da Destinacao ] Check TypeIn "..VEND.. Or ..SAIDA.. Or ..SERV.."
Moveto [Numero do Documento     ] Check
Moveto [Serie do Documento      ] Check
Moveto [Codigo do Documento     ] Check
Moveto [Valor Nota Fiscal       ] Check TypeIn ">0" 
Moveto [Descricao da Destinacao ] Check
Do_it!
ClearAll

If Not Pontuacao_Complemento("GERAL")
   Then Return False
EndIf   

If Not Pontuacao_Complemento("FINAL")
   Then Return False
EndIf

Return True
                                            
EndProc ;Pontuacao()                 

;*******************************************************************************
;* Rotina para Estornar PontuaÆo                                              *
;*******************************************************************************
Proc Estornar_Pontuacao()
Private ntable,ncampo
Do_it!
ClearAll

If PARAM_TABELA = "TABELA_PONTOS"
   Then ;View "PontoI"
        View "PontoC"
        CoEdit "ConsPtoI"
        Scan For [Numero do Lancamento] = NLANC
          Barra(NRecords("ConsPtoI"), RecNo())
          Aguarde("Aguarde, ajustando dados "+BARRA_STRING)
                    
          Moveto "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 "PontoI"
          ;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 While [Codigo             ]=[ConsPtoI->Codigo             ] And 
          ;              [Codigo da Empresa  ]=[ConsPtoI->Codigo da Empresa  ] And
          ;              [Codigo do Documento]=[ConsPtoI->Codigo do Documento] And
          ;              [Numero do Documento]=[ConsPtoI->Numero do Documento] And
          ;              [Serie do Documento ]=[ConsPtoI->Serie do Documento ]  
          ;          [Pontos Resgate] = Blanknum()
          ;          [Pontos Saldo  ] = Blanknum()
          ;          [Situacao      ] = "RESGATE/CANCELADO"    
          ;          Skip
          ;          If Eot() Then QuitLoop EndIf
          ;          Locate Next IndexOrder by "Ind01" [ConsPtoI->Codigo             ],
          ;                                            [ConsPtoI->Codigo da Empresa  ],
          ;                                            [ConsPtoI->Codigo do Documento], 
          ;                                            [ConsPtoI->Numero do Documento],
          ;                                            [ConsPtoI->Serie do Documento ]
          ;          If Not RetVal Then QuitLoop EndIf
          ;        EndWhile      
          ;EndIf        
          
          Moveto "ConsPtoI"
        EndScan
        Do_it!
        ClearAll
        
EndIf

{Ask} {ConsPtoI}
Moveto [Numero do Lancamento] TypeIn NLANC
Moveto [Pontos Saldo        ] TypeIn "Changeto Blank"
Moveto [Pontos Resgate      ] TypeIn "Changeto Blank"
Do_it!
ClearAll

Abre_Tabela()
Moveto "ConsPtoC"
[Situacao] = "RESGATE/CANCELADO"
UnLockRecord

EndProc ;Estornar_Pontuacao()

;*******************************************************************************
;* Rotina para Abrir Tabela                                                    *
;*******************************************************************************
Proc Abre_Tabela()

CoEdit "ConsPtoC"
SetaCorRegistro("Editar")
Moveto [Numero do Lancamento]
Locate NLANC
PickForm "1"

EndProc ;Abre_Tabela()

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

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59: 
           Temp=False
      Case Evento["KeyCode"] = 27:
           Temp=False
           Switch
             Case Campo="I_ResgatePontos"    : CancelDialog
           EndSwitch
      Case Evento["KeyCode"] = 13:
           Temp=False
           Switch
              Case Campo="I_ResgatePontos"  :
                   VSD_ResgatePontos=ControlValue("I_ResgatePontos")
                   AcceptDialog
           EndSwitch
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="????"
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

Switch
  Case Campo="*******":
       MSGCAMPO=""
  OtherWise:
       MSGCAMPO=""
EndSwitch

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog

Return TEMP
EndProc ;ResgatePontos_Dialog()

;*******************************************************************************
;* Show Dialog ResgatePontos                                                     *
;*******************************************************************************
Proc ResgatePontos_Show()
Private Temp,ANT_VSD_ResgatePontos

If IsBlank([ConsPtoC->Pontos Saldo]) 
   Then VSD_ResgatePontos = [ConsPtoC->Pontos Quantidade]
   Else VSD_ResgatePontos = [ConsPtoC->Pontos Saldo     ]
EndIf   
ANT_VSD_ResgatePontos = VSD_ResgatePontos
Temp=True

Echo Normal
Echo Off
while true
  Showdialog "Resgate de Pontos" Proc "ResgatePontos_Dialog"
     Trigger "OPEN","ARRIVE"
      Key "F1","TAB","ENTER","ESC"
       @ 07,22 height 03 width 35
  
     Accept @ 0,10 Width 13 "N" picture "#*#" Tag "I_ResgatePontos" to VSD_ResgatePontos
  
  Enddialog
  Switch
    Case Not retval : 
         Temp=False
         Quitloop
    Case VSD_ResgatePontos < 500 :
         Mensagem("Valor m¡nimo de resgate  de 500 pontos!")
         Loop
    OtherWise :
         ;DispositivoI("")
         ;If OK<>""
            ;Then 
                If VSD_ResgatePontos>ANT_VSD_ResgatePontos
                    Then Mensagem("A pontuaÆo informada de "+StrVal(VSD_ResgatePontos)+"  maior que a pontuaÆo registrada de "+
                                  StrVal(ANT_VSD_ResgatePontos)+"!")
                         Temp=False
                         Quitloop
                 EndIf
                 TOTAL_PONTOS = VSD_ResgatePontos  
                 Moveto "ConsPtoI"
                 Home
                 While TOTAL_PONTOS>0
                   If IsBlank([Pontos Saldo]) 
                      Then PONTOS_QUANTIDADE = [Pontos Quantidade]
                      Else PONTOS_QUANTIDADE = [Pontos Saldo     ]
                   EndIf   
        
                   Switch
                     Case PONTOS_QUANTIDADE >= TOTAL_PONTOS : [Pontos Resgate] = TOTAL_PONTOS
                                                              [Pontos Saldo  ] = PONTOS_QUANTIDADE-[Pontos Resgate] 
                                                              TOTAL_PONTOS = 0 
                     Case PONTOS_QUANTIDADE <  TOTAL_PONTOS : [Pontos Resgate] = PONTOS_QUANTIDADE
                                                              [Pontos Saldo  ] = PONTOS_QUANTIDADE-[Pontos Resgate]
                                                              TOTAL_PONTOS = TOTAL_PONTOS - PONTOS_QUANTIDADE
                   EndSwitch
                   If TOTAL_PONTOS = 0 Then QuitLoop EndIF    
                   Skip
                 EndWhile
                 
                 Moveto "ConsPtoI"
                 Skip
                 While IsBlank([Pontos Saldo])
                   Del
                 EndWhile
                 UnLockRecord
                 
                 Moveto "ConsPtoC"
                 [Situacao] = "RESGATE/FINALIZADO"
                 UnLockRecord 
                 
                ;Cliente disse que nÆo h  a necessidade da impressÆo do recibo
                ;Imprime_Recibo(VSD_ResgatePontos)
                 
                 If PARAM_TABELA = "TABELA_PONTOS"
                    Then Do_it!
                         ClearAll
                          
                         GetRecord "ConsPtoC" NLANC To REG_CONSPTOC
                          
                         ;View "PontoI"
                         View "PontoC"
                         CoEdit "ConsPtoI"
                         Scan For [Numero do Lancamento] = NLANC
                           Barra(NRecords("ConsPtoI"), RecNo())
                           Aguarde("Aguarde, ajustando dados "+BARRA_STRING)
                           
                           Moveto "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 "PontoI"
                           ;End
                           ;If Not IsBlank([Data]) Then SEQ_PONTOI = [Sequencia] Down Else SEQ_PONTOI = 0 EndIf
                           ;SEQ_PONTOI = SEQ_PONTOI + 1
                           ;[Codigo             ]=[ConsPtoI->Codigo             ]
                           ;[Codigo da Empresa  ]=[ConsPtoI->Codigo da Empresa  ]
                           ;[Codigo do Documento]=[ConsPtoI->Codigo do Documento] 
                           ;[Numero do Documento]=[ConsPtoI->Numero do Documento]
                           ;[Serie do Documento ]=[ConsPtoI->Serie do Documento ]
                           ;[Sequencia          ]=SEQ_PONTOI
                           ;[Lancamento_ConsPto ]=NLANC
                           ;[Pontos Saldo      ]=[ConsPtoI->Pontos Saldo]
                           ;[Pontos Resgate    ]=[ConsPtoI->Pontos Resgate]
                           ;[Data              ]=REG_CONSPTOC["Data"]       
                           ;UnLockRecord
                           
                           Moveto "ConsPtoI"
                         EndScan
                         Do_it!
                         ClearAll   
                         
                         Abre_Tabela()
                 EndIf
            ;Else Temp=False     
         ;EndIf
         Quitloop 
  EndSwitch
Endwhile
   
Echo Off
Mouse Show

Return Temp

EndProc ;ResgatePontos_Show()      

;*******************************************************************************
;* Digitacao dos Dados Titulo de Credito                                       *
;*******************************************************************************
Proc ResgatePontos_Digita()
Private ncampo, ntable, Temp

ntable=Table()
ncampo=Field()
If ResgatePontos_Show()
   Then Temp=True
   Else Temp=False
EndIf   

Moveto ntable
Moveto Field ncampo

release procs ntable,ncampo

Return Temp

EndProc ;Digita_ResgatePontos()  

;*******************************************************************************
;* Copia Imagem para Raiz                                                      *
;*******************************************************************************
Proc Copia_Imagem()
Private VSDGDRIVE,VSDGPASTA,IMAGEM_FUNDO_TMP

VSDGDRIVE = SubStr(Directory(),1,2)
VSDGPASTA = "\\Sistemas\\IMAGENS\\IMG_FUN\\"

;IMAGEM_FUNDO     = "REC_PT"                                                   ;1 via por p gina
IMAGEM_FUNDO     = "REC_PT2"                                                   ;2 via por p gina
IMAGEM_FUNDO_TMP = "PT" 

If IsFile(VSDGDRIVE+VSDGPASTA+IMAGEM_FUNDO+".JPG")
   Then Copia_Arquivo(VSDGDRIVE+VSDGPASTA+IMAGEM_FUNDO+".JPG c:\\vise\\"+IMAGEM_FUNDO_TMP+".JPG")
EndIf    

IMAGEM_FUNDO = IMAGEM_FUNDO_TMP

Release Vars VSDGDRIVE,VSDGPASTA,IMAGEM_FUNDO_TMP

EndProc ;Copia_Imagem()

;*******************************************************************************
;* Rotina para imprimir recibo                                                 *
;*******************************************************************************
Proc Imprime_Recibo(PONTOS)
Private PONTOS,ARQIMP,AUX_VALOR,EXTENSO,REG_USUARIO,REG_EMPRESA,VIA_POR_PAGINA,Ty

VIA_POR_PAGINA = 2

If Type(PONTOS)<>"N" Or PONTOS=0
   Then Return False
EndIF   

ARQIMP = PrivDir()+"PT.TXT"
If IsFile(ARQIMP)
   Then Deleta_Arquivo(ARQIMP)
EndIf

Copia_Imagem()

COMPROVANTE_DATA_COMP  = [ConsPtoC->Data_Inclusao ]
COMPROVANTE_HORA_COMP  = [ConsPtoC->Hora_Inclusao ]

;---- Usu rio ------------------------------------------------------------------
COMPROVANTE_COD_USU    = [ConsPtoC->Codigo_Usuario]  
COMPROVANTE_USUARIO    = ""
GetRecord "\\Sistemas\\Cadastro\\Usuarios" COMPROVANTE_COD_USU To REG_USUARIO
If RetVal
   Then COMPROVANTE_USUARIO = Rtrim(REG_USUARIO["Nome"]) 
EndIf
COMPROVANTE_USUARIO    = Rtrim(COMPROVANTE_COD_USU + " " + COMPROVANTE_USUARIO) + "  " + StrVal(COMPROVANTE_DATA_COMP)+"-"+COMPROVANTE_HORA_COMP

COMPROVANTE_RESGATE    = [ConsPtoC->Numero do Lancamento]
COMPROVANTE_PORC       = 5                                                      ;REGRA DE PONTOS EM PORCENTAGEM

;---- Pontos + Pontos por Extenso ----------------------------------------------
EscExt(Strval(PONTOS*1000))
PosI = Search("REAIS",EXTENSO)
COMPROVANTE_PONTOS    = StrVal(PONTOS) + "(" + Rtrim(LTrim(SubStr(EXTENSO,1,PosI-2)))+ ") Pontos"
Release Vars EXTENSO

;---- Valor dos Pontos + Valor dos Pontos por Extenso --------------------------
COMPROVANTE_VR_PONTOS  = PONTOS*COMPROVANTE_PORC/100
PosI = Search(".",COMPROVANTE_VR_PONTOS)
Switch
  Case PosI=0 : COMPROVANTE_VR_PONTOS = StrVal(COMPROVANTE_VR_PONTOS)+".00"    
  Case PosI>0 : DECIMAL = Rtrim(Ltrim(SubStr(COMPROVANTE_VR_PONTOS,PosI+1,Len(COMPROVANTE_VR_PONTOS))))
                If Len(DECIMAL)=1 Then DECIMAL = DECIMAL + "0" EndIf
                COMPROVANTE_VR_PONTOS = SubStr(COMPROVANTE_VR_PONTOS,1,PosI)+DECIMAL     
EndSwitch
EscExt(COMPROVANTE_VR_PONTOS)
PosI = Search("*",EXTENSO)
COMPROVANTE_VR_EXTENSO = "("+Rtrim(Ltrim(SubStr(EXTENSO,1,PosI-1)))+")"
;---- Adicionar 0   esquerda quando valor for por exemplo .55 ------------------
If SubStr(Strval(COMPROVANTE_VR_PONTOS),1,1)="."
   Then COMPROVANTE_VR_PONTOS = "0"+Strval(COMPROVANTE_VR_PONTOS)
EndIf
COMPROVANTE_VR_PONTOS   = Rtrim(Ltrim(Format("W12.2,EIC",NumVal(COMPROVANTE_VR_PONTOS)))) 
Release Vars EXTENSO,DECIMAL

;---- C¢digo -------------------------------------------------------------------
COMPROVANTE_CODIGO     = [ConsPtoC->Codigo              ]
COMPROVANTE_NOME       = [ConsPtoC->Razao Social        ]

COMPROVANTE_CGC        = ""
COMPROVANTE_TELEFONE   = ""
COMPROVANTE_CELULAR    = ""
COMPROVANTE_EMAIL      = ""
GetRecord "\\Sistemas\\Cadastro\\Destinat" COMPROVANTE_CODIGO To REG_CODIGO
If RetVal
   Then COMPROVANTE_CGC        = REG_CODIGO["CGC"                ]
        COMPROVANTE_TELEFONE   = REG_CODIGO["Telefone"           ]
        COMPROVANTE_CELULAR    = REG_CODIGO["Celular"            ]
        COMPROVANTE_EMAIL      = REG_CODIGO["Endereco_Eletronico"]
EndIf   

;---- Ms Atual por Extenso ----------------------------------------------------
MesExt(Month(Today()))
COMPROVANTE_MES = MESEX
Release Vars MESEX

;---- Cidade da Empresa --------------------------------------------------------
COMPROVANTE_CIDADE    = ""
GetRecord "\\Sistemas\\Cadastro\\Empresas" [ConsPtoC->Codigo da Empresa] To REG_EMPRESA
If RetVal
   Then COMPROVANTE_CIDADE = Upper(REG_EMPRESA["Cidade Empresa"]+", ")
EndIf   

;---- Data Atual ---------------------------------------------------------------
COMPROVANTE_DATA       = COMPROVANTE_CIDADE+Strval(Day(Today())) + " DE " + Rtrim(COMPROVANTE_MES) + " DE "+ Strval(Year(Today()))   

For ty From 1 To VIA_POR_PAGINA
  Print File ARQIMP CI_15CPP
  Print File ARQIMP Spaces(20) + COMPROVANTE_USUARIO 
  
  Print File ARQIMP CI_10CPP
  Print File ARQIMP CI_8LPP
  Print File ARQIMP "\n"
  Print File ARQIMP Spaces(69) + COMPROVANTE_RESGATE + "\n\n\n\n\n"
  
  Print File ARQIMP Format("W55",COMPROVANTE_PONTOS)+"\n\n\n\n"
  Print File ARQIMP Format("W52","R$"+Strval(COMPROVANTE_VR_PONTOS)+COMPROVANTE_VR_EXTENSO)+"\n\n\n\n"
  Print File ARQIMP Format("W52",COMPROVANTE_CODIGO + " "+ COMPROVANTE_NOME)+"\n\n\n\n"
  Print File ARQIMP Format("W22",COMPROVANTE_CGC) + Format("W22",COMPROVANTE_TELEFONE) + Format("W23",COMPROVANTE_CELULAR) + "\n\n\n\n"
  Print File ARQIMP Format("W52",COMPROVANTE_EMAIL)+"\n\n\n\n\n"
  Print File ARQIMP Format("W78,AC",COMPROVANTE_DATA)+"\n\n\n\n\n\n\n"
  Print File ARQIMP Format("W78,AC",COMPROVANTE_NOME)+"\n\n"
  
  Print File ARQIMP "\n\n\n\n\n\n\n\n\n\n\n"
EndFor
ImpriArq(ARQIMP)
Deleta_Arquivo(ARQIMP)

Release Vars COMPROVANTE_RESGATE,COMPROVANTE_PORC,COMPROVANTE_PONTOS,COMPROVANTE_VR_PONTOS,COMPROVANTE_VR_EXTENSO,
             COMPROVANTE_CODIGO,COMPROVANTE_NOME,COMPROVANTE_CGC,COMPROVANTE_TELEFONE,COMPROVANTE_CELULAR,COMPROVANTE_EMAIL,
             COMPROVANTE_DATA,PONTOS,ARQIMP,AUX_VALOR
             
Return True             
                       
EndProc ;Imprime_Recibo()

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
 
CopyToArray REG_CONSPTOC

While FACA_CHAVEC
  DIGITAC()
  If CHAVEC = 9 Then QuitLoop EndIf
  If CHAVEC = 1
     Then Controle_Dia()
  EndIf
  While FACA_CHAVEI
    While True
      CHAVEI()
      If CHAVEI=9 Then QuitLoop EndIf
      If CHAVEI=7 Then     Loop EndIf
      If CHAVEI<>8 Then DIGITAI() EndIf
    EndWhile
  EndWhile
EndWhile
Moveto "ConsPtoC"
If RecordStatus("Locked") Then UnLockRecord EndIf
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf

SaveTables

EndProc ;Controla_EdicaoC()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA=""        EndIf
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="0001" EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO=""       EndIf
If Not IsAssigned(PARAM_RELATORIO)     Then PARAM_RELATORIO=False      EndIf
If Not IsAssigned(PARAM_PONTOS)        Then PARAM_PONTOS=""            EndIf

PARAM_TABELA                 = "TABELA_PONTOS"
PARAM_REGRA_PONTOS_EXPIRADOS = Today()-365

Switch
 Case PARAM_RELATORIO : 
      Switch
        Case PARAM_PONTOS="DATA_LIMITE" : DATA_LIMITE = PARAM_REGRA_PONTOS_EXPIRADOS
        Case PARAM_PONTOS="PONTUACAO"   : If Not Pontuacao() 
                                             Then PARAM_PONTOS = False
                                             Else PARAM_PONTOS = True
                                          EndIf
      EndSwitch
 OtherWise            : If Not PARAM_RELATORIO
                           Then AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
                                SYS_VALOR()
                                 
                                OPCAO_FORM = "F"
                        
                                CoEdit "ConsPtoC"
                                PickForm "F"
                                While True
                                  CHAVEC()
                                  If CHAVEC=9
                                     Then QuitLoop
                                  EndIf
                                  Controla_EdicaoC()
                                EndWhile
                                Do_It!
                                ClearAll
                                
                                If IsAssigned(TabelaPontos)    And ISTable(TabelaPontos)    Then Delete TabelaPontos    EndIf
                                If IsAssigned(Tabela_ConsPtoI) And ISTable(Tabela_ConsPtoI) Then Delete Tabela_ConsPtoI EndIf 
                               
                                Release Vars All
                                Release Procs All
                        EndIf        
EndSwitch    
