;** 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 
;Ultima Alteracao: 20/10/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes novo layout  
;Ultima Alteracao: 22/10/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes Layout  

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVE()
While True
  Moveto [Condicao de Pagamento]
  End
  SEQ = [Condicao de Pagamento]
  If OPCAO_FORM="F"
     Then Down
     Else PgDn
  EndIf
  
  While True
    SetaCorRegistro("Editar")
  
    TECLA=""
    AguardaTeclasPadrao()
  
    Switch
        Case RetVal=-33 : SemFuncoes()
        Case RetVal="F3": 
             If OPCAO_FORM="F"
                Then OPCAO_FORM="2"
                Else OPCAO_FORM="F"
             EndIf
             Del
             CHAVE=5
             Return
        Case RetVal=-94 : MsgTeclasPadrao()
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             While True
               If OPCAO_FORM="F"
                  Then PAGINA("CondPgto","MR")
                  Else PAGINA("CondPgto","MT")
               EndIf
               If EDITAR="S"
                  Then CHAVE=0
                       PickForm "2"
                       Controla_EdicaoC()
                  Else If EXCLUIR="S"
                          then If QuerExcluir("")
                                  Then ;Grava_LogEx("CondPgto")
                                       PickForm "2"
                                       Del
                                  Else UnLockRecord
                               EndIf
                               If OPCAO_FORM="2"
                                  Then PickForm "2"
                                  Else PickForm "F"
                               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
             PickForm "2"    
             Moveto [Condicao de Pagamento]
             Locate SEQ     
             If Retval
                Then CHAVE=0
                Else CHAVE=1
                     End 
                     CtrlPgDn
                     [Condicao de Pagamento]=SEQ
             EndIf
             If IsLockRecord()
                Then If OPCAO_FORM="F"
                        Then PickForm "F"
                             QuitLoop
                     EndIf
             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 [Tipo de Pagamento]
While True

      TECLA=" Esc=Retornar  "
      If CHAVE=0
         Then TECLA=TECLA + "Del=Excluir  PgDn=Finalizar"
      EndIf
      
      MSGCAMPO=Field()
      Switch
        Case Field()="Descricao CondPagto"    : MSGCAMPO="Descricao da Condicao de Pagamento"
        Case Field()="Tipo de Pagamento"      : MSGCAMPO="Tipo de Pagamento: Vista/Prazo/Outros (V/P/O)"
        Case Field()="Composicao de Dias"     : MSGCAMPO=MSGCAMPO+", Exemplo: 015/030/045/060 "
        Case Field()="Utiliza_ECF"            : MSGCAMPO="Utiliza ECF ? (Sim/N„o)"
        Case Field()="Codigo_FP_ECF"          : MSGCAMPO="Codigo Forma de Pagamento ECF, [F1]Consultar tabela"
        Case Field()="Utiliza_VisePedidos"    : MSGCAMPO="Utiliza VisePedidos Windows ? (Sim/N„o)"
        Case Field()="Utiliza_Balcao"         : MSGCAMPO="Utiliza Balcao ? (Sim/N„o)"
        Case Field()="Utiliza_NFCE"           : MSGCAMPO="Utiliza NFCE ? (Sim/N„o)"
        Case Field()="CP_Inativo"             : MSGCAMPO="Condi‡Æo de Pagamento Inativo ? (Sim/N„o)"
        Case Field()="GerDup_InstrucaoDescto" : MSGCAMPO="Venda gera duplicata com instru‡Æo de desconto, [F1]Consultar tabela"
      EndSwitch
      
      SetaCorRegistro("Editando")
        
      Prompt TECLA
      Wait Field
           Until "ESC","PGDN","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="PGDN" : 
           MSG = ""
           Switch
             Case IsBlank([Descricao CondPagto]) : MSG = "Descri‡Æo da Condi‡Æo de Pagamento nÆo informada!"    
             Case IsBlank([Tipo de Pagamento])   : MSG = "Tipo de Pagamento nÆo informado!"
             Case IsBlank([Numero de Parcelas])  : MSG = "Numero de Parcelas nÆo informado!"
           EndSwitch
           If Not Valida_Composicao() Then MSG="ERRO" EndIf 
           If MSG<>""
              Then If MSG<>"ERRO"
                      THen FastMsg(MSG)
                   EndIf
              Else QuitLoop     
           EndIf                   
      Case Retval="ESC":
           Switch
             Case Field()="Tipo de Pagamento":
                  If QuerDesfazer("")
                     Then If CHAVE=1
                             Then DEL
                             Else Undo
                          Endif
                          CHAVE=9
                          QuitLoop
                  Endif
             Case Field()="Utiliza_VisePedidos": Moveto [Utiliza_ECF        ]     
             Case Field()="Composicao de Dias" : Moveto [CP_Inativo         ]
             OtherWise: Left
           EndSwitch
      Case Retval="ENTER":
           Switch
              Case Field()="Tipo de Pagamento" :
                   Moveto [Descricao CondPagto] 
              Case Field()="CP_Inativo"        :
                   Moveto [Composicao de Dias]
              Case Field()="Composicao de Dias":
                   If Valida_Composicao()
                      Then Moveto [Taxa Desconto] 
                   EndIf
              Case Field()="Utiliza_ECF":
                   If []="S"
                     Then Moveto [Codigo_FP_ECF]
                     Else []="N"
                          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()="Utiliza_VisePedidos" :
                   If IsBlank([]) Then []="N" EndIf 
                   Right
              Case Field()="Utiliza_Balcao"      :
                   If IsBlank([]) Then []="N" EndIf
                   Right
              Case Field()="Utiliza_NFCE"        :
                   If IsBlank([]) Then []="N" EndIf
                   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 validar a composi‡Æo de dias                                    *
;*******************************************************************************
Proc Valida_Composicao()                   
Private Checagem
                   
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

Return Checagem
EndProc

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

Moveto "CondPgto"
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
   Else PickForm "2"
EndIf
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
sys_Valor()
  
OPCAO_FORM="F"
 
CoEdit "CondPgto"
PickForm "F"
While True
  CHAVE()
  If CHAVE=9 Then QuitLoop EndIf
  If CHAVE=5
     Then If OPCAO_FORM="F"
             Then PickForm "F"
             Else PickForm "2"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll

Release Vars All
Release Procs All
