;** CondPgTo *******************************************************************
;*  Manutencao Cadastro de Condicoes de Pagamento p/ Venda                     *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/12/1995 por Anivel Augusto Rodrigues
;Ultima Alteracao: 28/09/2004 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao novos campos
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 30/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas
;Ultima Alteracao: 02/03/2011 por Karina Andrade
;Motivo Alteracao: Add Campo Utiliza_ECF e Codigo_FP_ECF
;Ultima Alteracao: 12/08/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Codigo_FP_ECF
;Ultima Alteracao: 01/09/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado "Utiliza Vise Pedidos"
;Ultima Alteracao: 27/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Novo Campo e Ajuste de form
;Ultima Alteracao: 11/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes do Novo Campo e Ajuste de form
;Ultima Alteracao: 02/09/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustado rotina p/ adicionar acima de 99 c¢digos
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() p/ gravar log de erros ao excluir registros

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVE()
While True

  Moveto [Condicao de Pagamento]
  End
  SEQ=[Condicao de Pagamento]
  Down Down
  Moveto [Condicao de Pagamento]

  While True
    SetaCorRegistro("Editar")
  
    TECLA=""
    AguardaTeclasPadrao()
  
    Switch
        Case RetVal=-33 : SemFuncoes()
        Case RetVal="F3": SemFicha()
        Case RetVal=-94 : MsgTeclasPadrao()
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             While True
                PAGINA("CondPgto","MR")
                If EDITAR="S"
                   Then CHAVE=0
                        Controla_EdicaoC()
                   Else If EXCLUIR="S"
                           Then If QuerExcluir("")
                                   Then Grava_LogEx("Vendas CondPagto")
                                        DEL
                                   Else UnLockRecord
                                EndIf
                           Else QuitLoop
                        EndIf
                EndIf
                SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ESC":
             CHAVE=9
             Del
             Return   
        Case Retval="ENTER":  
             SEQ=[]   
             Del
             SEQ=Checa_Codigo(SEQ)
             If IsBlank(SEQ)
                Then QuitLoop
             EndIf                       
             CONDICAO=SEQ
             Locate SEQ
             If Retval
                Then CHAVE=0
                Else CHAVE=1
                     End Down Down
                     [Condicao de Pagamento]=SEQ
             EndIf
             If IsLockRecord()
                Then If CHAVE=1
                         Then Del
                      EndIf  
                      QuitLoop
             EndIf
             Return
      EndSwitch
  EndWhile
EndWhile
EndProc

;*******************************************************************************
;* Rotina para Checagem do C¢digo                                              *
;*******************************************************************************
Proc Checa_Codigo(cod)
Private cod

If Not IsBlank(cod)
   Then cod=AlinhE(cod)
EndIf   

If IsBlank(cod)
   Then End
        cod=Novo_Codigo()
EndIf
Return cod
EndProc ;Checa_Codigo()

;*******************************************************************************
;* Rotina para Criar Novo C¢digo                                               *
;*******************************************************************************
proc Novo_Codigo()
Private cod,vr

cod=[Condicao de Pagamento]
If IsBlank(cod)
   Then cod="0"
EndIf  
vr=SubStr(cod,1,1)
If vr>"9" or cod="99"
   Then If SubStr(cod,2,1)="9"
	         Then Switch
					        Case vr="9" : cod="A0"
					        Case vr="Z" : Mensagem("Fim de codigo disponivel !")
									              cod=""
					        OtherWise   : cod=Chr(asc(vr)+1)+"0"
					      EndSwitch
					 Else cod=AlinhE(vr+StrVal(NumVal(SubStr(cod,2,1))+1))     
				EndIf	      
   Else cod=AlinhE(StrVal(NumVal(cod)+1))
EndIf

Return cod 
EndProc ;Novo_Codigo()

;******************************************************************************
;** Rotina Alinhamento Especial Codigo Destinat Letras e Numeros            ***
;******************************************************************************
proc AlinhE(vr)
Private vr

If Len(vr)<2 And SubStr(vr,1,1)>"9"
   Then vr=SubStr(vr,1,1)+"0"      
   Else vr=AlinhM(vr,2)			   
EndIf	  
Return vr

EndProc

;*******************************************************************************
;* Rotina para Digitacao das Informacoes                                       *
;*******************************************************************************
Proc DIGITA()
Moveto [Descricao CondPagto]
While True

      TECLA=" Esc=Retornar  "
      If CHAVE=0
         Then TECLA=TECLA + "Del=Excluir  "
      EndIf
      
      If Field()="Codigo_FP_ECF" Or
         Field()="GerDup_InstrucaoDescto"
         Then TECLA= TECLA + "F1=Consulta  "
      EndIf   

      MSGCAMPO=Field()
      If Field()="Descricao CondPagto"
         Then MSGCAMPO="Descricao da Condicao de Pagamento"
      EndIf
      If Field()="Tipo de Pagamento"
         Then MSGCAMPO="Tipo de Pagamento: Vista/Prazo/Outros (V/P/O)"
      EndIf
      If Field()="Composicao de Dias"
         Then MSGCAMPO=MSGCAMPO+", Exemplo: 015/030/045/060 "
      EndIf
      If Field()="Utiliza_ECF"
         Then MSGCAMPO="Utiliza ECF ? (Sim/N„o)"
      EndIf
      If Field()="Codigo_FP_ECF"
         Then MSGCAMPO="Codigo Forma de Pagamento ECF!"
      EndIf
      If Field()="Utiliza_VisePedidos" 
         Then MSGCAMPO="Utiliza VisePedidos Windows (Sim/N„o) ?"
      EndIf    
      If Field()="GerDup_InstrucaoDescto" 
         Then MSGCAMPO="Venda gera duplicata com instru‡Æo de desconto, consulte[F1]"
      EndIf    

      Prompt TECLA
      SetaCorRegistro("Editando")
      Wait Field
           Message MSGCAMPO
           Until "ESC","ENTER","DEL","FIELDVIEW","F35","F1",-59

      Switch
      Case Retval="F1" or Retval=-59:
           If Field()="Codigo_FP_ECF"
            Then CONSULTAF1()
                 [Codigo_FP_ECF]=[]
           EndIf
           If Field()="GerDup_InstrucaoDescto" 
              Then
                   ShowPopup " Op‡”es " Centered
                    " ~0~ NÆo utiliza este recurso.                                        " : " " : "0",
                     Separator,
                    " ~1~ Aplica desconto autom tico na venda e sem altera‡Æo do mesmo.    " : " " : "1",
                    "   O desconto ser  aplicado na venda, a fatura ser   gerado  com      " : " " : "1",
                    "   o valor bruto e com a instru‡Æo de desconto ate a data do seu      " : " " : "1",
                    "   vencimento.                                                        " : " " : "1",
                     Separator,
                    " ~2~ A venda nÆo ter  desconto aplicado e sem altera‡Æo do  mesmo.    " : " " : "2",
                    "   A fatura ser  gerado com o valor bruto e com a  instru‡Æo  de      " : " " : "2",
                    "   desconto ate a data do seu vencimento.                             " : " " : "2",
                     Separator,
                    "~S~air                                                                " : " Ignorar op‡äes " : "CANCELAR"
                   EndMenu
                    To MenuVar
                       If MenuVar<>"Esc"
                          Then [GerDup_InstrucaoDescto]=MenuVar
                       EndIf
           EndIf   
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="ESC":
           Switch
             Case Field()="Descricao CondPagto":
               If QuerDesfazer("")
                  Then If CHAVE=1
                          Then Del
                       EndIf
                       CHAVE=9
                       QuitLoop
               Endif
             Case Field()="Composicao de Dias": Moveto [Descricao CondPagto]
             Case Field()="Numero de Parcelas": Moveto [Composicao de Dias]
             OtherWise: Left
           EndSwitch
      Case Retval="ENTER":
           Switch
                Case Field()="Descricao CondPagto":
                     Moveto [Composicao de Dias]
                Case Field()="Composicao de Dias":
                     Checagem=True
                     Contador_Repeticao=0
                     For ncc From 1 To Len([Composicao de Dias])
                         If Asc(SubStr([Composicao de Dias],ncc,1))<47 Or
                            Asc(SubStr([Composicao de Dias],ncc,1))>57
                            Then Mensagem("Formato da Composicao de Dias Invalido !//Exemplo= 30/60/90")
                                 Checagem=False
                                 QuitLoop
                            Else If SubStr([Composicao de Dias],ncc,1)="/"
                                    Then Contador_Repeticao=Contador_Repeticao+1
                                    Else Contador_Repeticao=0
                                 EndIf
                                 If Contador_Repeticao>1 Or
                                    SubStr([Composicao de Dias],1,1)="/" Or
                                    SubStr([Composicao de Dias],Len([Composicao de Dias]),1)="/"
                                    Then Mensagem("Formato da Composicao de Dias Invalido !//Exemplo= 30/60/90")
                                         Checagem=False
                                         QuitLoop
                                 EndIf
                         EndIf
                     EndFor
                     If Checagem Then Moveto [Numero de Parcelas] EndIf
                Case Field()="Utiliza_ECF":
                     If []="S"
                       Then Moveto [Codigo_FP_ECF]
                       Else Moveto [Utiliza_VisePedidos]
                     EndIf
                Case Field()="Codigo_FP_ECF":
                     If IsBlank([]) 
                        Then Right 
                             Loop 
                     EndIf
                     CODIGO=[]
                     Ativa_Lookup()
                     Moveto [Codigo Operacao]
                     Locate CODIGO
                     If Not RetVal
                        Then Mensagem("Codigo Forma de Pagamento ECF Inv lido !")
                             KeyPress "ESC"
                             Moveto [Codigo_FP_ECF]
                             Loop
                     EndIf
                     KeyPress "ESC"
                     Moveto [Codigo_FP_ECF]
                     [Codigo_FP_ECF] = CODIGO
                     Right
                Case Field() = "GerDup_InstrucaoDescto":
                     If IsBlank([]) Then []="0" EndIf
                     If ([GerDup_InstrucaoDescto]="1" Or
                         [GerDup_InstrucaoDescto]="2") And [Taxa Desconto]<=0
                         Then Mensagem("Taxa de desconto nÆo informada para utilizar este recuros!")
                              Loop 
                     EndIf      
                     
                     QuitLoop
                OtherWise:
                     Right
           EndSwitch
      Case Retval="DEL":
           If CHAVE=0
              Then If QuerExcluir("")
                      Then Grava_LogEx("Vendas CondPagto")
                           Del
                           QuitLoop
                   EndIf
           EndIf
      EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
DIGITA()
If RecordStatus("Locked") Then UnLockRecord EndIf         
Endproc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
CoEdit "CondPgto"
PickForm "F"
While True
  CHAVE()
  If CHAVE=9
     Then QuitLoop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
