;* Contrato*********************************************************************
;*                Cadastro de Tipos de Contrato                                *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 01/11/2016 por Rafael Matos 
;Ultima Alteracao: 16/04/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado biblioteca "Bib_Bloq"                           

;*******************************************************************************
;* Rotina para Localizar Registro                                              *
;*******************************************************************************
Proc CHAVE()
While True
  Limpa_EndContrato()
  Moveto [Numero_Contrato]
  End
  COD=[Numero_Contrato]
  If OPCAO_FORM="F"
     Then Down
     Else PgDn
  EndIf
  Moveto [Numero_Contrato]

  SetaCorRegistro("Editar")
  While true

  TECLA=""
  AguardaTeclasPadrao()

    Switch
      Case RetVal=-33 : SemFuncoes()
      Case RetVal=-94 : MsgTeclasPadrao()
      Case RetVal="F3": 
           If OPCAO_FORM="F"
              Then OPCAO_FORM="1"
              Else OPCAO_FORM="F"
           EndIf
           Del
           CHAVE=5
           Return
      Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
           While True
             If OPCAO_FORM="F"
                Then PAGINA("Contrato","MR")
                Else PAGINA("Contrato","MT")
             EndIf
             If EDITAR="S"
                Then COD=[Numero_Contrato]
                     CHAVE=0
                     PickForm "1"
                     Verifica_EndContrato() 
                     Controla_EdicaoC()
                Else If EXCLUIR="S"
                        Then If LISTA_CONTRATO
                                Then FastMsg("Exclus„o n„o permitida !")
                                     UnLockRecord
                                Else If QuerExcluir("")
                                        Then PickForm "1"
                                             del
                                        Else UnLockRecord
                                     EndIf
                                     If OPCAO_FORM="F"
                                        Then PickForm "F"
                                        Else PickForm "1"
                                     EndIf
                             EndIf        
                        Else QuitLoop
                     EndIf
             EndIf
             SetaPosForm()
           EndWhile
           QuitLoop
      Case Retval="ESC":
           CHAVE=9
           Del
           Return
      Case RetVal="ENTER":
      TOTAL_VENCIMENTOS= BlankNum()
           If Numero_Lancamento("","F")
              Then COD = PROXLANCTO_NLANC
                   Release Vars PROXLANCTO_NLANC 
              Else QuitLoop
           EndIf
           If Not PROXIMO_LANCTO_REG_ACHOU
              Then If LISTA_CONTRATO
                      Then FastMsg("Inclus„o n„o permitida!")
                           Del
                           QuitLoop
                   EndIf
           EndIf
           PickForm "1"
           Moveto [Numero_Contrato]
           If PROXIMO_LANCTO_REG_ACHOU
              Then CHAVE=0
                   Verifica_EndContrato() 
              Else CHAVE=1           
           EndIf
           Return 
      EndSwitch
  EndWhile
EndWhile

EndProc  ; (CHAVE)

;*******************************************************************************
;* Rotina para Preencher campos de Endere‡o                                    *
;*******************************************************************************
Proc Verifica_EndContrato()
Limpa_EndContrato()

GetRecord "\\Sistemas\\Cadastro\\Destinat" [Codigo] To REG_END
If RetVal
   Then VSDGBAIRRO  =REG_END["Bairro"           ]
        VSDGCIDADE  =REG_END["Cidade"           ]
        VSDGESTADO  =REG_END["UF"               ]
        VSDGCODROTA =REG_END["Codigo da Rota"   ]
        VSDGDESCROTA=REG_END["Descricao da Rota"]
EndIf   

EndProc

;*******************************************************************************
;* Limpa Variaveis                                   *
;*******************************************************************************
Proc Limpa_EndContrato()
VSDGBAIRRO=""
VSDGCIDADE=""
VSDGESTADO=""
VSDGCODROTA=""
VSDGDESCROTA=""  

EndProc

;*******************************************************************************
;* Checa Valor Total com Vencimentos                                           *
;*******************************************************************************
Proc Checa_Vencimentos()

Moveto "Contrato"
If [FaturadoAntecipado]="S"
   Then Moveto "ContratV"
        Moveto [Valor]
        TOTAL_VENCIMENTOS=ImageCSum()      
        Moveto "Contrato"
           
        If [Valor_TpContrato]<>TOTAL_VENCIMENTOS
           Then ConfGeral("Valor dos Vencimentos diverge do Valor do Contrato, deseja continuar?")
                If Ok="N"
                     Then Moveto [Valor_TpContrato]
                          return false     
                EndIf
        EndIf
        
   Else If IsAssigned(TOTAL_VENCIMENTOS) and TOTAL_VENCIMENTOS > 0
           Then Mensagem("Contrato nÆo ‚ Faturado Antecipado//por‚m est  com Vencimentos. Corrigir ! ") 
                return false 
           
        EndIf      
EndIf
return true

EndProc
;*******************************************************************************
;* Rotina para Digitacao das Informacoes                                       *
;*******************************************************************************
Proc DIGITA()

Cancelou_Registro=False

Moveto [Codigo da Empresa]
While True
      If CHAVE=0
         Then 
               Moveto "ContratV"
               Moveto [Valor]
               TOTAL_VENCIMENTOS=ImageCSum()
               
               If TOTAL_VENCIMENTOS = 0
                  Then TOTAL_VENCIMENTOS=BlankNum()
               EndIf   
             
               Moveto "Contrato"
             
               TECLA="Esc=Retornar  Del=Excluir  F8=Vencimentos  PgDn=Finalizar  "
          Else TECLA="Esc=Retornar               F8=Vencimentos  PgDn=Finalizar  "
      EndIf

      Prompt TECLA

      MSGCAMPO=""
      Switch
        Case Field()="Codigo_TpContrato"          : MSGCAMPO="Tipo de Contrato"
        Case Field()="Valor_TpContrato"           : MSGCAMPO="Valor do Contrato"      
        Case Field()="ContratoInativo"            : MSGCAMPO="Contrato Inativo? Sim/NÆo"
        Case Field()="FaturadoAntecipado"         : MSGCAMPO="Faturado Antecipado? Sim/NÆo"
        Case Field()="Codigo"                     : MSGCAMPO="C¢digo do Destinat rio"
        Case Field()="PeriodoContratoInicial"     : MSGCAMPO="Per¡odo Inicial do Contrato"
        Case Field()="PeriodoContratoFinal"       : MSGCAMPO="Per¡odo Final do Contrato"
        Case Field()="Codigo do Representante"    : MSGCAMPO="C¢digo do Representante"
        Case Field()="Codigo_GrupoVencimento"     : MSGCAMPO="C¢digo do Grupo de Vencimento"
        Case Field()="DiaVencimento"              : MSGCAMPO="Dia de Vencimento"
        Case Field()="Forma de Pagamento"         : MSGCAMPO="Forma de Pagamento"
        Case Field()="DataProspeccaoContrato"     : MSGCAMPO="Data de Prospec‡Æo do Contrato"
        Case Field()="ObservacaoContrato"         : MSGCAMPO="Observa‡Æo do Contrato"
        Case Field()="Codigo da Empresa"          : MSGCAMPO="Selecione uma Empresa"
      EndSwitch
      
      If Field()="Codigo_TpContrato" or
         Field()="Codigo" or
         Field()="Codigo do Representante" or
         Field()="Codigo_GrupoVencimento" or
         Field()="Forma de Pagamento" or
         Field()="Codigo da Empresa"  
         Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
      EndIf                                     

      Wait Field
           Until "ESC","F8","ENTER","DEL","FIELDVIEW","F35","F1","PGDN","F5"

      Switch
      Case Retval="F1":   
           If Field()="Codigo_TpContrato" or
              Field()="Codigo" or
              Field()="Codigo do Representante" or
              Field()="Codigo_GrupoVencimento" or
              Field()="Forma de Pagamento" or
              Field()="Codigo da Empresa"
              Then ConsultaF1()
           EndIf
           
      Case RetVal="F5":
           CampoAnt=Field()
           Edita_Memo("ObservacaoContrato",08,01,15,76,"Observa‡”es")
           Moveto Field CampoAnt
           Prompt TECLA   
           
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case RetVal="DEL" :
           If CHAVE=0
              Then If QuerExcluir("")
                      Then del
                           QuitLoop
                   EndIf
           EndIf
      Case RetVal="F8" Or RetVal="DOWN":
           If [FaturadoAntecipado]="N" or [FaturadoAntecipado]=""
              Then Mensagem("Contrato nÆo ‚ Faturado Antecipado,//portanto nÆo precisa de Vencimentos! ")
                   Moveto [Codigo da Empresa]
              Else Moveto "ContratV"
                   While True
                   CHAVEV()
                   If CHAVEV=9
                      Then QuitLoop
                   EndIf
                   Controla_EdicaoV()
                   EndWhile
           EndIf
           SetaCorRegistro("Padrao")
           Moveto "Contrato"          
      Case Retval="PGDN":
                  If IsBlank      ([Codigo_TpContrato]) Or
                     IsBlank        ([ContratoInativo]) Or
                     IsBlank     ([FaturadoAntecipado]) Or
                     IsBlank                 ([Codigo]) Or              
                     IsBlank ([PeriodoContratoInicial]) Or
                     IsBlank   ([PeriodoContratoFinal]) Or
                     IsBlank([Codigo do Representante]) Or
                     IsBlank ([Codigo_GrupoVencimento]) Or
                     IsBlank          ([DiaVencimento]) Or
                     IsBlank     ([Forma de Pagamento]) Or
                     IsBlank ([DataProspeccaoContrato]) Or
                     IsBlank      ([Codigo da Empresa]) or
                     Not Checa_Vencimentos()
                     Then Loop
                     Else CHAVE=9
                          QuitLoop
                  EndIf           
                           
      Case Retval="ESC":
      
           Switch
              Case Field()="Codigo da Empresa"         :   
                   If QuerDesfazer("")
                      Then If CHAVE=1
                              Then Cancelou_Registro=True
                                   Del
                              Else If RecordStatus("Modified")
                                      Then Undo
                                   EndIf
                           EndIf
                           CHAVE=9
                           QuitLoop
                   EndIf
                   
              Case Field()="ContratoInativo"                       : Moveto [Codigo da Empresa]
              Case Field()="DataContratoInativado"                 : Moveto [ContratoInativo]
              Case Field()="Codigo" and [ContratoInativo]="N"      : Moveto [ContratoInativo]
              Case Field()="Codigo" and [ContratoInativo]="S"      : Moveto [DataContratoInativado]  
              Case Field()="Codigo_TpContrato"                     : Moveto [Codigo]
              Case Field()="Valor_TpContrato"                      : Moveto [Codigo_TpContrato]
              Case Field()="Codigo do Representante"               : Moveto [Valor_TpContrato]
              Case Field()="DataProspeccaoContrato"                : Moveto [Codigo do Representante]
              Case Field()="PeriodoContratoInicial"                : Moveto [DataProspeccaoContrato]
              Case Field()="PeriodoContratoFinal"                  : Moveto [PeriodoContratoInicial]
              Case Field()="Codigo_GrupoVencimento"                : Moveto [PeriodoContratoFinal]
              Case Field()="DiaVencimento"                         : Moveto [Codigo_GrupoVencimento]
              Case Field()="Forma de Pagamento"                    : Moveto [DiaVencimento]
              Case Field()="FaturadoAntecipado"                    : Moveto [Forma de Pagamento]
              Case Field()="ObservacaoContrato"                    : Moveto [FaturadoAntecipado]
              Case Field()="ObservacaoRecibo"                      : Moveto [ObservacaoContrato]
           EndSwitch
      Case Retval="ENTER":
           Switch
              Case Field()="Codigo da Empresa"            :
                   If IsBlank([Codigo da Empresa])
                      Then [Codigo da Empresa] = SYS_EMPRESA_DEFAULT
                           Moveto [ContratoInativo]
                      Else Moveto [ContratoInativo]
                   EndIf
              Case Field()="ContratoInativo"              :
                   Switch
                     Case []="S" : Moveto [DataContratoInativado]
                     OtherWise   : []="N"
                                   [DataContratoInativado]=BlankDate()
                                   Moveto [Codigo] 
                   EndSwitch
              Case Field()="DataContratoInativado"        : 
                   If IsBlank([DataContratoInativado])
                      Then [DataContratoInativado]=Today()
                           Moveto [Codigo]
                      Else Moveto [Codigo]
                   EndIf                  
              Case Field()="Codigo"                       :  
                   If IsBlank([Codigo])
                      Then Loop
                      Else Verifica_EndContrato() 
                   EndIf
              Moveto [Codigo_TpContrato]
              Case Field()="Codigo_TpContrato"            : 
                   If IsBlank([Codigo_TpContrato])
                      Then Loop
                      Else GetRecord "\\Sistemas\\Geec\\TpContra" [Codigo_TpContrato] To REG_TPCONTRA
                           If ReTval
                              Then If REG_TPCONTRA["TpContrato_Inativo"]="S"
                                      Then Mensagem("Tipo de Contrato Inativo") 
                                           [Codigo_TpContrato]=""
                                           [Descricao_TpContrato]=""
                                           Loop
                                      Else Moveto [Valor_TpContrato]
                                   EndIf        
                           EndIf
                   EndIf             
               
              Case Field()="Valor_TpContrato"             : 
                   If IsBlank([Valor_TpContrato])
                      Then Loop
                      Else Moveto [Codigo do Representante]  
                   EndIf
              Case Field()="Codigo do Representante"      : 
                   If IsBlank([Codigo do Representante])
                      Then Loop 
                      Else Moveto [DataProspeccaoContrato]
                   EndIf
              Case Field()="DataProspeccaoContrato"       : 
                  Switch 
                      Case IsBlank([DataProspeccaoContrato])                     :    [DataProspeccaoContrato]=Today()
                                                                                      Moveto [PeriodoContratoInicial]
                      Case [DataProspeccaoContrato] > [PeriodoContratoInicial] 
                            and Not Isblank([PeriodoContratoInicial])            :    Mensagem("Data de Prospec‡Æo nÆo pode ser maior que a Data Inicial")
                                                                                      [DataProspeccaoContrato]=Blankdate() Loop
                      Otherwise                                                  :    Moveto [PeriodoContratoInicial]                                                             
                  EndSwitch
              Case Field()="PeriodoContratoInicial"       : 
                  Switch 
                      Case IsBlank([PeriodoContratoInicial])                     :    [PeriodoContratoInicial]=Today()
                                                                                      Moveto [PeriodoContratoFinal]
                      Case [PeriodoContratoInicial] < [DataProspeccaoContrato]   :    Mensagem("Data Inicial nÆo pode ser menor que a Data de Prospec‡Æo")
                                                                                      [PeriodoContratoInicial]=Blankdate() Loop
                      Otherwise                                                  :    Moveto [PeriodoContratoFinal]                                                             
                  EndSwitch
              Case Field()="PeriodoContratoFinal"         :
                   If ([PeriodoContratoFinal] < [PeriodoContratoInicial])
                      Then Mensagem("Data Final nÆo pode ser menor que a Data Inicial e nem em branco")
                           [PeriodoContratoFinal]=BlankDate()
                      Else Moveto [Codigo_GrupoVencimento]
                   EndIf
              Case Field()="Codigo_GrupoVencimento"       :
                   If IsBlank([Codigo_GrupoVencimento])
                      Then Loop
                      Else GetRecord "\\Sistemas\\Geec\\GrpVenc" [Codigo_GrupoVencimento] To REG_GRPVENC
                           If ReTval
                              Then If REG_GRPVENC["GrupoVencimento_Inativo"]="S"
                                      Then Mensagem("Grupo de Vencimento Inativo") 
                                           [Codigo_GrupoVencimento]=""
                                           [Descricao_GrupoVencimento]=""
                                           Loop
                                      Else Moveto [DiaVencimento]
                                   EndIf        
                           EndIf
                   EndIf
              Case Field()="DiaVencimento"                : 
                   If IsBlank([DiaVencimento])
                      Then Loop
                      Else Moveto [Forma de Pagamento]
                   EndIf                                                                    
              Case Field()="Forma de Pagamento"           : 
                   If IsBlank([Forma de Pagamento])
                      Then Loop
                      Else Moveto [FaturadoAntecipado]  
                   EndIf
                   
              Case Field()="FaturadoAntecipado"           : 
                   If IsBlank([FaturadoAntecipado])
                      Then [FaturadoAntecipado]="N"
                   EndIf
                   Moveto [ObservacaoContrato]
              Case Field()="ObservacaoContrato"           :
                   Moveto [ObservacaoRecibo]
              Case Field()="ObservacaoRecibo"             :
                   Moveto [Codigo]          
                   If CHAVE=1 Then Controle_Dia() EndIf                                                                                                     
              OtherWise                                   : Right
           EndSwitch
      EndSwitch
EndWhile
EndProc

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

If Not IsBlank(Cod)
   Then Cod=AlinhO(Cod)
   Else COD="0" 
EndIf  

If []="" Or COD="0"
   Then COD=Novo_Codigo(AlinhM(COD,3))
EndIf   

Return COD

EndProc ;Checa_Codigo 

;******************************************************************************
;** Rotina Alinhamento Especial Codigo Destinat Letras e Numeros            ***
;******************************************************************************
proc AlinhO(Vr)
Private Vr

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

EndProc ;AlinhO()

;*******************************************************************************
;* Rotina para Criar Novo C¢digo                                               *
;*******************************************************************************
Proc Novo_Codigo(COD)
Private COD

Vr=SubStr(COD,1,1)
If vr>"9" or COD="999"
   Then If SubStr(COD,2,2)="99"
	         Then Switch
					        Case vr="9" : COD="A00"
					        Case vr="Z" : Mensagem("Fim de codigo disponivel !")
                                COD=""
					        OtherWise   : COD=Chr(asc(vr)+1)+"00"
					      EndSwitch
					 Else cod=vr+AlinhM(StrVal(NumVal(SubStr(cod,2,2))+1),2)     
				EndIf	      
   Else cod=AlinhM(StrVal(NumVal(cod)+1),3)
EndIf

Return COD 

EndProc;Checa_Codigo()

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
DIGITA()
Moveto "Contrato"
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro de Vencimentos                     *
;*******************************************************************************
Proc Controla_EdicaoV()
DIGITAV()
Moveto "ContratV"
If RecordStatus("Locked") Then UnLockRecord EndIf         
SetaCorRegistro("Padrao")
EndProc

;*******************************************************************************
;* Rotina para Digitacao de Vencimentos                                        *
;*******************************************************************************
Proc CHAVEV()        
While True
  Moveto "ContratV"
  Moveto [Valor]
  TOTAL_VENCIMENTOS=ImageCSum()

  Moveto [Sequencia]
  End
  SEQ = [Sequencia]
  Down
  Moveto [Sequencia]
  Seta_Sequencia(SEQ,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  SetaCorRegistro("Editar")
  While True

        MSGCAMPO=""
        TECLA= " Esc=Retornar  F7=Paginar  F9=LimpaVenctos "

        Prompt TECLA

        Wait Field
             Until "ESC","ENTER","F7","HOME","UP","PGUP","F9", "F6","PGDN"


        Switch
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
             Moveto [Valor]
             TOTAL_VENCIMENTOS = ImageCSum()
             Moveto [Sequencia]

               PAGINA("ContratV","MR")
               If EDITAR="S"
                  Then CHAVEV=0
                       SEQ=[Sequencia]
                       Controla_EdicaoV()
                  Else If EXCLUIR="S"
                          Then If QuerExcluir("")
                                  Then Del
                                       Moveto [Valor]
                                       TOTAL_VENCIMENTOS=ImageCSum()
                                  Else UnLockRecord
                                  
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="F9":
             Home
             while true
                 if RecordStatus("New")
                    then quitloop
                 endif   
                 unlockrecord
                 del        
             endwhile
             QuitLoop         
        Case Retval="ESC":
             CHAVEV=9
             Del
             Return
        Case Retval="ENTER":
             If Not Seta_Sequencia(SEQ,True)
                Then Del
                     QuitLoop
             EndIf
             SEQ=[]
             Del
             Locate SEQ
             If Retval
                Then CHAVEV=0
                Else CHAVEV=1
                     End Down
                     [Sequencia]=SEQ
                     UnLockRecord
                     Locate SEQ
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc    ;  (ChaveV)

;*******************************************************************************
;* Rotina para Digitacao dos Vencimentos                                       *
;*******************************************************************************
Proc DIGITAV()

If CHAVEV=1
   Then Moveto [Numero de Dias   ]
   Else Moveto [Data]
EndIf
While True
  TECLA= " Esc=Retornar  "
  If CHAVEV=0
     Then TECLA=TECLA+"Del=Excluir  "
     Else TECLA=TECLA+"             "
  EndIf


  Prompt TECLA
  SetaCorRegistro("Editando")
  Wait Field
       Until "ESC","ENTER","DEL","F1"

  Switch
  Case RetVal="ESC":
       If Field()="Numero de Dias"
          Then If QuerDesfazer("")
                  Then If CHAVEV=1
                         Then Del
                       EndIf
                       QuitLoop
                EndIf
          Else Left
       EndIf
  Case RetVal="DEL":
       If QuerExcluir("")
          Then Del
               QuitLoop
       EndIf
  Case RetVal="ENTER":
    Switch
       Case Field()="Numero de Dias":
            If Not IsBlank([]) Or []>0
               Then ND=[]
                    Right
                    []=[Contrato->PeriodoContratoInicial]+ND
               Else Right
            EndIf
       Case Field()="Data":
               If IsFieldNull([]) Then Loop EndIf
               Right
       Case Field()="Valor":
               If [Valor]>0
                  Then 
                  Moveto [Valor]
                  TOTAL_VENCIMENTOS=ImageCSum()
                  Else Loop
               EndIf            
            QuitLoop
            
       OtherWise:
            Right
    EndSwitch
  EndSwitch
EndWhile
EndProc   ;  (DigitaV)

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Cadastro\\Bib_Proc,"+
        "\\Sistemas\\Cadastro\\Bib_Bloq"

TOTAL_VENCIMENTOS = BlankNum()

If Not IsAssigned(TITULOS_BAIXASII)    Then TITULOS_BAIXASII   =False  EndIf
If Not IsAssigned(LISTA_CONTRATO)      Then LISTA_CONTRATO     =False  EndIf
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="0001" EndIf
SYS_VALOR()
CoEdit "Contrato"
PickForm "F"
OPCAO_FORM="F"

Switch
  Case LISTA_CONTRATO   :
       Play "ContBx"    
  OtherWise             :

      While True
        CHAVE()
        If CHAVE=9
           Then QuitLoop
        EndIf
        If CHAVE=5
           Then If OPCAO_FORM="1"
                   Then PickForm "1"
                   Else PickForm "F"
                EndIf
                Loop
        EndIf
        Controla_EdicaoC()
      EndWhile
EndSwitch
Do_It!
ClearAll
Release Vars All
Release Procs All
