;** SysTable *******************************************************************
;*  Programa para Execucao/Verificacao do Sistema                            ***
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 13/11/2001 por Douglas Rodrigues
;Ultima Alteracao: 13/10/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 15/08/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Run                                 
;Ultima Alteracao: 10/12/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Bloqueio
;Ultima Alteracao: 09/09/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Ano 20?? ou 19??
;Ultima Alteracao: 10/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SYS_CLIENTE_CONFEC
;Ultima Alteracao: 17/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao SYS_VERSAO_VISERP 
;Ultima Alteracao: 24/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Messagem de atualiza‡Æo de versÆo
;Ultima Alteracao: 19/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Substitui‡Æo Editor novo arquivo por FileWrite
;Ultima Alteracao: 19/12/2012 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo da desc. da MSG p/ que o cliente acesse o site e obtenha o nø de serie
;Ultima Alteracao: 21/12/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Titulo barra superior e cor         
;Ultima Alteracao: 05/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SYS_TITULO_MENU
;Ultima Alteracao: 08/11/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ExibeRodape()e LimpaRodape()
;Ultima Alteracao: 04/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SYS_COR_RODAPE
;Ultima Alteracao: 05/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes versao viserp barra menu superior
;Ultima Alteracao: 24/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes controle de cor
;Ultima Alteracao: 24/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes barra titulo com o drive:
;Ultima Alteracao: 07/05/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Valida() sys_Cor verifica a existencia do campo Cor_Sistema
;Ultima Alteracao: 26/07/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes 
;Ultima Alteracao: 31/07/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IsLockRecord() controle grava‡Æo na systable
;Ultima Alteracao: 03/02/2014 por Bruno Carvalho
;Motivo Alteracao: Aribui‡Æo do campo [Expirado] como "N" na proc Calcula_Serie()
;Ultima Alteracao: 02/10/2014 por Kamila Gomes
;Motivo Alteracao: Adicionado rotina Fecha_Controle()
;Ultima Alteracao: 08/10/2014 por Kamila Gomes
;Motivo Alteracao: Ajuste rotina Fecha_Controle()
;Ultima Alteracao: 29/10/2014 por Kamila Gomes
;Motivo Alteracao: Ajuste rotina Fecha_Controle() atualizar data de intervalo de lan‡amentos
;Ultima Alteracao: 31/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes criado privdir() sys_Cor do sistema
;Ultima Alteracao: 16/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Modelo do Sistema                     
;Ultima Alteracao: 29/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Modelo do Sistema                     
;Ultima Alteracao: 09/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes loop islockrecord
;Ultima Alteracao: 17/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes orienta‡Æo da gera‡Æo n£mero de s‚rie via site
;Ultima Alteracao: 25/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desativar tecla alt+O (-24) ir ao prompt do DOS
;Ultima Alteracao: 04/01/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes VSD_I_Dig Numero_Serie() -> [7 D¡gitos] - [7 D¡gitos] - [8 D¡gitos] 
;                  **Antes estava 9 D¡gitos p/ qualquer campo

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc Monta_Arquivo()
Private WA,WC,I

FileWrite        "c:\\windows\\system\\wvsys.dat" From ""

WA = 100
For I From 1 To 20
    For WC From 1 To 150
        WA = WA + 1
        If (WA=255)
           Then WA=WA-1
        EndIf
        FileWrite Append "c:\\windows\\system\\wvsys.dat" From Chr(WA)
    EndFor
    FileWrite Append "c:\\windows\\system\\wvsys.dat" From "\n"

    For WC From 1 To 150
        WA=WA-1
        If WA<100
           Then WA=WA+1
        EndIf
        FileWrite Append "c:\\windows\\system\\wvsys.dat" From Chr(WA)
    EndFor
    FileWrite Append "c:\\windows\\system\\wvsys.dat" From "\n"

    WA=WA+3
EndFor
Do_It!
EndProc  ; (Monta_Arquivo)

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc Instala()
[Codigo do Cliente       ] = "9999"
[Nome da Empresa         ] = "DEMONSTRA€ŽO P/ "+ VSDGEMPSYS
[Data de Validade        ] = Today()+15
[Data de Instalacao      ] = Today()
[Contador_Limite_Execucao] = 100
[Data_Ultima_Execucao    ] = Today()
[Contador_Execucao       ] = 0
[Data_Verificacao        ] = Today()
[Versao_Atual            ] = "2005.G de 31/07/2005"
UnLockRecord

FileWrite        PrivDir()+"cfg_user.sc" From "VSDGUSUARIO  ="+Chr(34)+"0001"+Chr(34)+"\n"

Moveto "Usuarios"
Moveto [Chapa]
Locate "0001"
If RetVal
   Then Del
EndIf
VSDGSENHA="DEMO"
ENCRIPTASENHA(VSDGSENHA)
End Down
[Chapa           ] = "0001"
[Nome            ] = "DEMONSTRA€ŽO"
[Senha           ] = SENHAENC
[Data da Senha   ] = Today()
[Nivel de Acesso ] = "S"
[Modo Rodape Menu] = "N"
UnLockRecord
Moveto "SysTable"
EndProc  ;  (Instala)

;*******************************************************************************
;* Rotina para Mudar de Diretorio as Bibliotecas                               *
;*******************************************************************************
Proc Muda_Bib(Acao)
Private ACAO

Switch
  Case ACAO="Mover":
       Copia_Arquivo("Bibliot.Lib C:\\Windows\\System\\Wvbib.dat")
       Copia_Arquivo("Bib_Show.Lib C:\\Windows\\System\\WvShow.dat")
       Copia_Arquivo("BibMenu.Lib C:\\Windows\\System\\WvMenu.dat")

       If IsFile("C:\\Windows\\System\\Wvbib.dat")
          Then Deleta_Arquivo("Bibliot.*")
       EndIf

       If IsFile("C:\\Windows\\System\\WvShow.dat")
          Then Deleta_Arquivo("Bib_show.*")
       EndIf

       If IsFile("C:\\Windows\\System\\WvMenu.dat")
          Then Deleta_Arquivo("BibMenu.*")
       EndIf

  Case ACAO="Executar":
       If IsFile("C:\\Windows\\System\\WvBib.dat")
          Then Copia_Arquivo("C:\\Windows\\System\\WvBib.dat Bibliot.lib")
       EndIf

       If IsFile("C:\\Windows\\System\\WvShow.dat")
          Then Copia_Arquivo("C:\\Windows\\System\\WvShow.dat Bib_Show.lib")
       EndIf

       If IsFile("C:\\Windows\\System\\WvMenu.dat")
          Then Copia_Arquivo("C:\\Windows\\System\\WvMenu.dat BibMenu.lib")
       EndIf
EndSwitch
EndProc ; (Muda_Bib)

;*******************************************************************************
;* Rotina para Calcular o Numero de Serie                                      *
;*******************************************************************************
Proc Calcula_Serie()
Private Dig1,Dig2,Dig3,Codigo,DataA,DataI,DataV

Dig1 = VSD_I_Dig1
Dig2 = VSD_I_Dig2
Dig3 = VSD_I_Dig3

Codigo = SubStr(Dig3,2,1)+SubStr(Dig2,6,1)+SubStr(Dig2,3,1)+SubStr(Dig1,1,1)

DataA = SubStr(Dig1,2,1)+SubStr(Dig1,4,1)+"."+
        SubStr(Dig3,6,1)+SubStr(Dig3,4,1)+"."
If (SubStr(Dig3,7,1))="0" Or
   (SubStr(Dig3,7,1))="1"
   Then DataA=DateVal(DataA+"20"+SubStr(Dig3,7,1)+SubStr(Dig3,1,1))
   Else DataA=DateVal(DataA+"19"+SubStr(Dig3,7,1)+SubStr(Dig3,1,1))
EndIf
If DataA="Error"
   Then Return False
EndIf

DataI  = SubStr(Dig3,8,1)+SubStr(Dig2,7,1)+"."+
         SubStr(Dig1,5,1)+SubStr(Dig1,3,1)+"."
If (SubStr(Dig1,7,1))="0" Or
   (SubStr(Dig1,7,1))="1" 
   Then DataI=DateVal(DataI+"20"+SubStr(Dig1,7,1)+SubStr(Dig1,6,1))
   Else DataI=DateVal(DataI+"19"+SubStr(Dig1,7,1)+SubStr(Dig1,6,1))
EndIf
If DataI="Error"
   Then Return False
EndIf

DataV  = SubStr(Dig2,1,1)+SubStr(Dig2,4,1)+"."+
         SubStr(Dig2,5,1)+SubStr(Dig2,2,1)+"."
If (SubStr(Dig3,3,1))="0" Or
   (SubStr(Dig3,3,1))="1"
   Then DataV=DateVal(DataV+"20"+SubStr(Dig3,3,1)+SubStr(Dig3,5,1))
   Else DataV=DateVal(DataV+"19"+SubStr(Dig3,3,1)+SubStr(Dig3,5,1))
EndIf
If DataV="Error"
   Then Return False
EndIf

Moveto "SysTable"
Moveto [Codigo do Cliente]
Locate Codigo
If Not RetVal
   Then Return False
EndIf

If DataA<>Today()
   Then Return False
EndIf

If DataI<>[Data de Instalacao]
   Then Return False
EndIf
[Data de Validade ] = DataV
[Expirado         ] = "N"
[Contador_Execucao] = 0
Return True
EndProc ; (Calcula_Serie)

;*******************************************************************************
;* Rotina Sys_Dialog                                                           *
;*******************************************************************************
Proc Sys_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If INICIO_DIALOG
   Then Switch
          Case Show="Data/Hora"   : Campo="TG_DTSYS"
          Case Show="Numero_Serie": Campo="I_Dig1"
          Case Show="Renovacao"   : Campo="I_Codigo"
        EndSwitch
        INICIO_DIALOG = False
EndIf

If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9: Temp=False
     Case Evento["KeyCode"] = -24:
          Switch
            Case Show="Demonstracao":
                 If IsBlank(LTrim(RTrim(ControlValue("TG_EMPSYS"))))
                    Then Temp=False
                 EndIf
          EndSwitch
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Show="Demonstracao":
                 Switch
                 ;* demonstracao
                   Case Campo="TG_EMPSYS"        : Campo="NO"
                   Case Campo="NO" Or Campo="YES": Campo="TG_EMPSYS"
                 EndSwitch
            Case Show="Renovacao":
                 Switch
                   Case Campo="I_Codigo"         : Campo="NO"
                   Case Campo="I_Empresa"        : Campo="I_Codigo"
                   Case Campo="I_Instalacao"     : Campo="I_Empresa"
                   Case Campo="I_Dig1"           : Campo="I_Instalacao"
                   Case Campo="I_Dig2"           : Campo="I_Dig1"
                   Case Campo="I_Dig3"           : Campo="I_Dig2"
                   Case Campo="NO" Or Campo="YES": Campo="I_Codigo"
                 EndSwitch
            Case Show="Data/Hora":
                 Switch
                   Case Campo="TG_DTSYS"          : Campo="NO"
                   Case Campo="TG_HORASYS"        : Campo="TG_DTSYS"
                   Case Campo="NO" Or Campo="YES" : Campo="TG_DTSYS"
                 EndSwitch
            Case Show="Numero_Serie":
                 Switch
                   Case Campo="I_Dig1"  : Campo="NO"
                   Case Campo="I_Dig2"  : Campo="I_Dig1"
                   Case Campo="I_Dig3"  : Campo="I_Dig2"
                   Case Campo="YES" Or Campo="NO" : Campo="I_Dig1"
                 EndSwitch
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          If CHECA_TAG()
             Then Switch
                    Case Show="Demonstracao":
                         Switch
                           Case Campo="TG_EMPSYS":
                                VSDGEMPSYS=LTrim(RTrim(ControlValue("TG_EMPSYS")))
                                If Not IsBlank(VSDGEMPSYS)
                                   Then Campo="YES"
                                EndIf
                         EndSwitch
                    Case Show="Renovacao":
                         Switch
                           Case Campo="I_Codigo"    :
                                VSD_I_Codigo = AlinhM(LTrim(RTrim(ControlValue("I_Codigo"))),4)
                                If Not IsBlank(VSD_I_Codigo)
                                   Then Campo="I_Empresa"
                                EndIf
                           Case Campo="I_Empresa"   :
                                VSD_I_Empresa = LTrim(RTrim(ControlValue("I_Empresa")))
                                If Not IsBlank(VSD_I_Empresa)
                                   Then Campo="I_Instalacao"
                                EndIf
                           Case Campo="I_Instalacao":
                                VSD_I_Instalacao = ControlValue("I_Instalacao")
                                If Not IsBlank(VSD_I_Instalacao)
                                   Then Campo="I_Dig1"
                                EndIf
                           Case Campo="I_Dig1"      :
                                VSD_I_Dig1 = LTrim(RTrim(ControlValue("I_Dig1")))
                                If Not IsBlank(VSD_I_Dig1)
                                   Then Campo="I_Dig2"
                                EndIf
                           Case Campo="I_Dig2"      :
                                VSD_I_Dig2 = LTrim(RTrim(ControlValue("I_Dig2")))
                                If Not IsBlank(VSD_I_Dig2)
                                   Then Campo="I_Dig3"
                                EndIf
                           Case Campo="I_Dig3"      :
                                VSD_I_Dig3 = LTrim(RTrim(ControlValue("I_Dig3")))
                                If Not IsBlank(VSD_I_Dig3)
                                   Then Data = SubStr(VSD_I_Dig2,1,1)+SubStr(VSD_I_Dig2,4,1)+"."+
                                               SubStr(VSD_I_Dig2,5,1)+SubStr(VSD_I_Dig2,2,1)+"."
                                               If (SubStr(VSD_I_Dig3,3,1))="0"
                                                  Then Data=DateVal(Data+"20"+SubStr(VSD_I_Dig3,3,1)+SubStr(VSD_I_Dig3,5,1))
                                                  Else Data=DateVal(Data+"19"+SubStr(VSD_I_Dig3,3,1)+SubStr(VSD_I_Dig3,5,1))
                                               EndIf
                                        If Data="Error"
                                           Then [Data de Validade]=BlankDate()
                                           Else [Data de Validade]=Data
                                        EndIf
                                        Campo="YES"
                                EndIf
                         EndSwitch
                    Case Show="Data/Hora":
                         Switch
                           Case Campo="TG_DTSYS"  :
                                VSDGDTSYS=ControlValue("TG_DTSYS")
                                If Not IsBlank(VSDGDTSYS)
                                   Then Campo="TG_HORASYS"
                                EndIf
                                VSDGHORASYS   = SubStr(Time(),1,5)
                           Case Campo="TG_HORASYS" :
                                VSDGHORASYS=RTrim(LTrim(ControlValue("TG_HORASYS")))
                                If Not IsBlank(VSDGHORASYS)
                                   Then Campo="YES"
                                EndIf
                         EndSwitch
                    Case Show="Numero_Serie":
                         Switch
                           Case Campo="I_Dig1"    :
                                VSD_I_Dig1=ControlValue("I_Dig1")
                                If Not IsBlank(VSD_I_Dig1)
                                   Then Campo="I_Dig2"
                                EndIf
                           Case Campo="I_Dig2" :
                                VSD_I_Dig2=ControlValue("I_Dig2")
                                If Not IsBlank(VSD_I_Dig2)
                                   Then Campo="I_Dig3"
                                EndIf
                           Case Campo="I_Dig3"   :
                                VSD_I_Dig3=ControlValue("I_Dig3")
                                If Not IsBlank(VSD_I_Dig3)
                                   Then Campo="YES"
                                EndIf
                         EndSwitch
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
;*demonstra‡„o
  Case Campo="TG_EMPSYS":
       MSG_CAMPO="Informe o nome fantasia da empresa"
;*data/Hora
  Case Campo="TG_DTSYS":
       MSG_CAMPO="Informe a data para utiliza‡„o do sistema"
  Case Campo="TG_HORASYS":
       MSG_CAMPO="Informe a hora para utiliza‡„o do sistema"
;*Numero_Serie
  Case Campo="I_Dig1" Or Campo="I_Dig2" Or Campo="I_Dig3":
       MSG_CAMPO="Informe o Numero de Serie"
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc  ; (Sys_Dialog)

;*******************************************************************************
;* Rotina Monta_Demonstracao                                                   *
;*******************************************************************************
Proc Inicio()
If Not IsEmpty("Systable")
   Then Return True
EndIf
While True
  ShowMenu
      "Demonstra‡„o do Sistema" : " Instala o sistema para demonstra‡„o",
      "Renova‡„o do Sistema"    : " Renova o direito de uso do Sistema",
      "Cancela"                 : " Cancela opera‡„o"
      Default "Demonstra‡„o do Sistema"
      To Opcao
      If Not RetVal Or Opcao="Cancela"
         Then Return False
      EndIf

  Switch
    Case Opcao="Demonstra‡„o do Sistema":
         If Demonstracao()
            Then Return True
         EndIf
    Case Opcao="Renova‡„o do Sistema":
         If Renovacao()
            Then Return True
         EndIf
  EndSwitch
EndWhile
EndProc ;  (Inicio)

;*******************************************************************************
;* Rotina Monta_Demonstracao                                                   *
;*******************************************************************************
Proc Demonstracao()

INICIO_DIALOG=True
Show="Demonstracao"
VSDGEMPSYS = ""

ShowDialog "Instala‡„o de Demonstra‡„o" Proc "Sys_Dialog"
Trigger "OPEN","ARRIVE"
Key "ENTER","ESC","TAB",-24
 @ 06,12   Height 08 Width 38

  Label  @ 01,00 "Empresa" For "TG_EMPSYS"
  Accept @ 02,01 Width 34 "A24"  Picture "!*!" Tag "TG_EMPSYS" To VSDGEMPSYS

  Pushbutton @ 04,06 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
  Pushbutton @ 04,20 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

EndDialog
If Not RetVal
   Then MSG = "Sr. USUARIO. // //"
        MSG = MSG+"ESTE SISTEMA E UMA COPIA DE DEMONSTRA€ŽO ! // //"
        MSG = MSG+"PARA LIBERARA€ŽO INFORME O NOME DA EMPRESA.//"
        Mensagem(MSG)
        Return False
   Else If IsFile("c:\\windows\\system\\wvsys.dat")
           Then MSG = "Sr. USUARIO. // //"
                MSG = MSG+"ESTE SISTEMA E UMA COPIA DE DEMONSTRA€ŽO !    // //"
                MSG = MSG+"CASO QUEIRA ADQUIRIR LIBERA€ŽO DE USO ENTRE   //"
                MSG = MSG+"EM CONTATO COM A VISE INFORMATICA QUE TEREMOS //"
                MSG = MSG+"O MAIOR PRAZER EM TE-LO COMO CLIENTE/PARCEIRO.//"
                Mensagem(MSG)
                Return False
           Else Instala()
                Monta_Arquivo()
                Return True
        EndIf
EndIf
EndProc  ; (Demonstracao)

;*******************************************************************************
;* Rotina para renova‡„o da systable                                           *
;*******************************************************************************
Proc Renovacao()
Show             = "Renovacao"
VSD_I_Codigo     = ""
VSD_I_Empresa    = ""
VSD_I_Instalacao = BlankDate()
VSD_I_Dig1       = ""
VSD_I_Dig2       = ""
VSD_I_Dig3       = ""
WC=1

While WC<=3
  INICIO_DIALOG = True

  ShowDialog "Renova‡„o do Uso do Sistema" Proc "Sys_Dialog"
    Trigger "OPEN","ARRIVE"
    Key "F1","ENTER","ESC","TAB","F5","F4"
    @ 07,03   Height 10 Width 72

    Label  @ 00,00 "C¢digo"  For "I_Codigo"
    Accept @ 01,01 Width 07 "A4"  Picture "#*#" Tag "I_Codigo" To VSD_I_Codigo
    Label  @ 00,09 "Nome Fantasia (Titulo do Sistema)"  For "I_Empresa"
    Accept @ 01,09 Width 45 "A40" Picture "!*!" Tag "I_Empresa"  To VSD_I_Empresa

    Label  @ 00,56 "Instala‡„o"  For "I_Instalacao"
    Accept @ 01,56 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "I_Instalacao" To VSD_I_Instalacao

    Frame Single From 02,14 To 04,55
    @ 02,25 ?? " Numero de Serie "
    paintcanvas attribute 30 02, 14, 04, 55

    Accept @ 03,16 Width 12 "A7"  Picture "#*#" Tag "I_Dig1" To VSD_I_Dig1
    Accept @ 03,29 Width 12 "A7"  Picture "#*#" Tag "I_Dig2" To VSD_I_Dig2
    Accept @ 03,42 Width 12 "A8"  Picture "#*#" Tag "I_Dig3" To VSD_I_Dig3

    Pushbutton @ 06,18 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 06,34 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal
     Then MSG = "Sr.USUARIO. // //"
          MSG = MSG+"RENOVA€ŽO CANCELADA"
          Mensagem(MSG)
          Return False
     Else If IsBlank(VSD_I_Codigo) Or
             IsBlank(VSD_I_Empresa)
             Then Loop
          EndIf
          [Codigo do Cliente         ] = VSD_I_Codigo
          [Nome da Empresa           ] = VSD_I_Empresa
          [Data de Instalacao        ] = VSD_I_Instalacao
          [Contador_Limite_Execucao  ] = 100
          [Expirado                  ] = ""
          [Versao_Atual              ] = "2005.G de 31/07/2005"
          UnLockRecord
          If Not Calcula_Serie()
             Then Del
                  If WC<=3
                     Then MSG = "Sr. USUARIO. // //"
                          MSG = MSG+"O NUMERO DE SERIE NŽO CONFERE ! // //"
                          MSG = MSG+"DESEJA TENTAR NOVAMENTE ?"
                          ConfGeral(MSG)
                          If OK="N"
                             Then Del
                                  Return False
                          EndIf
                  EndIf
             Else MSG = "Sr. USUARIO // //"
                  MSG = MSG+"ESTE SISTEMA ESTA LIBERADO PARA UTILIZA€ŽO.      // //"
                  MSG = MSG+"SENTIMOS HONRADOS EM TE-LO COMO CLIENTE/PARCEIRO."
                  Mensagem(MSG)
                  If IsFile("C:\\Windows\\System\\Wvsys.dat")
                     Then Deleta_Arquivo("C:\\Windows\\System\\Wvsys.dat")
                  EndIf
                  Return True
          EndIf
  EndIf
  WC=WC+1
  If WC > 3
     Then MSG = "Sr. USUARIO. // //"
          MSG = MSG + "O NUMERO DE TENTATIVAS ULTRAPASSOU !"
          Mensagem(MSG)
          Del
          Return False
  EndIf
EndWhile
EndProc  ; (Renovacao)

;*******************************************************************************
;* Rotina p Atualizacao de Data/Hora                                           *
;*******************************************************************************
Proc Atualiza_Data()

If ([Data_Verificacao]=Today())
   Then If [Data_Ultima_Execucao]>=[Data de Validade]
           Then
                While IsLockRecord() EndWhile           
                    
                [Contador_Execucao] = [Contador_Execucao] + 1
                If [Contador_Execucao]>[Contador_Limite_Execucao]
                   Then 
                        If Dow(Today())<>"Mon" And Dow(Today())<>"Fri" And 
                           Dow(Today())<>"Sat" And Dow(Today())<>"Sun"
                           Then Undo
                                
                                MSG="Sr. Usu rio. // //"
                                MSG=MSG + "O Sistema bloqueou o n£mero de execu‡„o !"
                                Mensagem(MSG)

                                If Not Numero_Serie()
                                   Then [Expirado]="S"
                                        UnLockRecord 
                                        Return False
                                EndIf
                        Endif
                EndIf
                UnLockRecord
        EndIf
        Return True
EndIf

VSDGDTSYS     = Today()
VSDGHORASYS   = SubStr(Time(),1,5)
Show          = "Data/Hora"

While True
  INICIO_DIALOG = True

  MSG="Data e Hora do Computador: // //"
  MSG=MSG+Upper(DIAEXT(Today()))+", "
  MSG=MSG+StrVal(Day(Today()))+" DE "
  MSG=MSG+RTrim(MESEXT(Month(Today())))+" DE "
  MSG=MSG+StrVal(Year(Today()))+" - "
  MSG=MSG+SubStr(Time(),1,5)+"// //"
  MSG=MSG+"Vocˆ ser  respons vel pela Data e Hora do Sistema !"
  Mensagem(MSG)

  ShowDialog "Data/Hora do Sistema" Proc "Sys_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB"
  @ 07,20   Height 07 Width 32

    Label  @ 00,07 "Data" For "TG_DTSYS"
    Accept @ 01,04  Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTSYS" To VSDGDTSYS
    Label  @ 00,19 "Hora" For "TG_HORASYS"
    Accept @ 01,18 Width 8 "A5"  Picture "##:##" Tag "TG_HORASYS" To VSDGHORASYS

    Pushbutton @ 03,02 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 03,17 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal
     Then MSG="Sr. Usu rio. // //"
          MSG=MSG + "A Data/Hora do Sistema deve ser informada !// //"
          MSG=MSG + "Deseja Continuar ?"
          ConfGeral(MSG)
          If OK="N"
             Then Return False
             Else Loop
          EndIf
  EndIf
  If IsBlank(VSDGDTSYS) Or
     IsBlank(VSDGHORASYS)
     Then Loop
  EndIf

  If VSDGDTSYS<[Data_Ultima_Execucao]
     Then MSG="Sr. Usu rio. // //"
          MSG=MSG + "A Data informada esta menor que a   //"
          MSG=MSG + "data da £ltima execu‡„o do Sistema ! // //"
          MSG=MSG + "Deseja Continuar ?"
          ConfGeral(MSG)
          If OK="N"
             Then Return False
             Else Loop
          EndIf
  EndIf


  While IsLockRecord() EndWhile

  If [Data_Ultima_Execucao]<>VSDGDTSYS
     Then [Data_Ultima_Execucao] = VSDGDTSYS
          [Contador_Execucao   ] = 1
     Else [Contador_Execucao   ] = [Contador_Execucao] + 1
  EndIf

  If ([Contador_Execucao]>[Contador_Limite_Execucao]) And ([Data_Ultima_Execucao]>=[Data de Validade])
     Then 
          If Dow(Today())<>"Mon" And Dow(Today())<>"Fri" And 
             Dow(Today())<>"Sat" And Dow(Today())<>"Sun"
             Then 
                  Undo
                  MSG="Sr. Usu rio. // //"
                  MSG=MSG + "O Sistema bloqueou o n£mero de execu‡„o !"
                  Mensagem(MSG)

                  If Not Numero_Serie()
                     Then [Expirado]="S"
                          UnLockRecord
                          Return False
                  EndIf
          EndIf
  EndIf

  [Data_Verificacao] = VSDGDTSYS
  UnLockRecord
    
  
  Executa_Programa("Date "+Format("D13",VSDGDTSYS))
  Executa_Programa("Time "+VSDGHORASYS)

  NOVO_DIA=True
  Return True
EndWhile
EndProc  ; (Atualiza_Data)

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc Numero_Serie()

VSD_I_Codigo  = [Codigo do Cliente]
VSD_I_Empresa = [Nome da Empresa  ]
Show          = "Numero_Serie"
WC            = 1

While WC<=3
  INICIO_DIALOG = True

  ShowDialog "Libera‡„o do uso do Sistema" Proc "Sys_Dialog"
    Trigger "OPEN","ARRIVE"
    Key "F1","ENTER","ESC","TAB","F5","F4"
    @ 07,10   Height 17 Width 58

    Label  @ 00,00 "Cliente"  For "I_Codigo"
    Accept @ 01,01 Width 07 "A4"  Picture "#*#" Tag "I_Codigo" To VSD_I_Codigo
    Accept @ 01,07 Width 48 "A40" Picture "!*!" Tag "I_Empresa"  To VSD_I_Empresa

    Frame Single From 03,08 To 05,49
    @ 03,18 ?? " N£mero de Serie "
    paintcanvas attribute 30 03, 08, 05, 49

    Accept @ 04,10 Width 12 "A7"  Picture "#*#" Tag "I_Dig1" To VSD_I_Dig1
    Accept @ 04,23 Width 12 "A7"  Picture "#*#" Tag "I_Dig2" To VSD_I_Dig2
    Accept @ 04,36 Width 12 "A8"  Picture "#*#" Tag "I_Dig3" To VSD_I_Dig3

    @ 07,00 ?? " Gera‡Æo do n£mero de s‚rie pelo Site :"
    @ 08,02 ?? " - Acessar \"www.viseinformatica.com.br\""
    @ 09,02 ?? " - Selecione [Liberar sistema]"
    @ 10,02 ?? " - Informe C¢digo do Cliente = "+VSD_I_Codigo
    @ 11,02 ?? " - Selecione [Gerar]"

    Pushbutton @ 13,14 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 13,30 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If RetVal
     Then If Not Calcula_Serie()
             Then If WC<=3
                     Then MSG = "Sr. USUARIO. // //"
                          MSG = MSG+"O NUMERO DE SERIE NŽO CONFERE ! // //"
                          MSG = MSG+"DESEJA TENTAR NOVAMENTE ?"
                          ConfGeral(MSG)
                          If OK="N"
                             Then Return False
                          EndIf
                  EndIf
             Else MSG = "Sr. USUARIO // //"
                  MSG=MSG+"ESTE SISTEMA ESTA LIBERADO PARA UTILIZA€ŽO.      // //"
                  MSG=MSG+"SENTIMOS HONRADOS EM TE-LO COMO CLIENTE/PARCEIRO."
                  Mensagem(MSG)
                  Return True
          EndIf
     Else Return False
  EndIf
  WC=WC+1
  If WC > 3
     Then MSG = "Sr. USUARIO. // //"
          MSG = MSG + "O NUMERO DE TENTATIVAS ULTRAPASSOU !"
          Mensagem(MSG)
          Return False
  EndIf
EndWhile
Return False
EndProc  ; (Numero_Serie)

;*******************************************************************************
;* Fecha Controle                                                              *
;*******************************************************************************
Proc Fecha_Controle()

Private DataINI

SYS_FECHA_CONTROLE_AUTOMATICAMENTE = "N"
SYS_FECHA_CONTROLE_NDIAS           = 0
If IsFile("\\Sistemas\\Cadastro\\Contrdia.cfg")
   Then Copia_Arquivo("\\Sistemas\\Cadastro\\Contrdia.cfg "+PrivDir()+"a.sc")
        Play PrivDir()+"a"
EndIf

Coedit "P_Modulo","Contrdia"
If SYS_FECHA_CONTROLE_AUTOMATICAMENTE = "S"
   Then
      Scan For [Data  ] < (Today() - SYS_FECHA_CONTROLE_NDIAS) And
               [Modulo] = "" And
               [Situacao_Controle_Dia] <> "B"
          
          [Situacao_Controle_Dia] = "B"           
      EndScan
EndIf

Moveto "P_Modulo"
Home
Scan For [Fechamento_Automatico] = "S"
 ndia =   [Dias_Controle_Aberto]  
 modulo = [Modulo              ]
 
 Moveto "Contrdia"
 Moveto [Modulo]
 Locate modulo
 If RetVal
    Then While True
           If [Data] < (Today() - ndia) And
              [Situacao_Controle_Dia] <> "B"
              Then [Situacao_Controle_Dia] = "B"
           EndIf
           Skip
           If Eot() Then QuitLoop EndIf
           Locate Next modulo
           If Not RetVal
              Then QuitLoop
           EndIf   
         EndWhile
 EndIf        
 Moveto "P_Modulo"
EndScan
Do_It!
ClearAll

If NFields("P_Modulo")>3
   Then Coedit "P_Modulo"
        Home 
        Scan For [Fechamento_Automatico] = "S"
          DataINI = (Today() - [Dias_Controle_Aberto])
          [Data_Inicio_Lancto] = DataINI
        EndScan
        Do_It!
        ClearAll 
EndIF 
Release Vars CONTROLE, CRIAR, CHAPA_USUARIO, NOME_USUARIO, wii, MSG, HOJE
EndProc ;Fecha_Controle()

;*******************************************************************************
;* Rotina para Validar Sistema                                                 *
;*******************************************************************************
Proc Valida()
Private Array_Campos,wi

SYS_COR            = ""
TableInfo Table() Fields to Array_Campos

For wi From 1 To ArraySize(Array_Campos)
 If Array_Campos[wi]="Cor_Sistema"
    Then SYS_COR   = [Cor_Sistema             ]
         QuitLoop
 EndIf
EndFor

NOMEMPRESA         = [Nome da Empresa         ]
SYS_CODIGO_CLIENTE = [Codigo do Cliente       ]
SYS_CLIENTE_CONFEC = [Codigo_Cliente_Confeccao]
SYS_DATA_SISTEMA   = [Data_Ultima_Execucao    ]
SYS_VERSAO_VISERP  = [Versao_Atual            ]

if FieldNo("Sistema",Table())>0
   then if not isblank([Sistema])
           then SYS_SISTEMA=[Sistema]
        endif   
Endif    

FileWrite PrivDir()+"SYS_COR.sc" From  "SYS_COR="+SYS_COR+"\n"

SetaCor_Sistema()

SYS_TITULO_MENU=Chr(061)+" "+Format("W11",SYS_SISTEMA)+"| "+Format("W23,AL",NOMEMPRESA)        +"| "
                            +Upper(SubSTr(Directory(),1,2))+"| "+SubStr(SYS_VERSAO_VISERP,1,6)+"| "
ShowPullDown
  SYS_TITULO_MENU : "" : ""
EndMenu
                                       
LimpaRodape(1)
ExibeRodape(2,"Carregando "+Barra(13, 1)+"  Verificando registro empresa")

If ([Data_Ultima_Execucao]>=[Data de Validade]) Or ([Expirado]="S")
   Then If Search("DEMONSTRA€ŽO P/",[Nome da Empresa])>0
           Then MSG = "Sr. USUARIO. // //"
                MSG = MSG+"ESTE SISTEMA E UMA COPIA DE DEMONSTRA€ŽO E    //"
                MSG = MSG+"ESTA EXPIRADO O DIREITO DE USO !              ////"
                MSG = MSG+"CASO QUEIRA ADQUIRIR LIBERA€ŽO DE USO ENTRE   //"
                MSG = MSG+"EM CONTATO COM A VISE INFORMATICA QUE TEREMOS //"
                MSG = MSG+"O MAIOR PRAZER EM TE-LO COMO CLIENTE/PARCEIRO.//"
                Mensagem(MSG)

                If Not Numero_Serie()
                  Then 
                       [Expirado]="S"
                       UnLockRecord

                       Return False
                EndIf

           Else MSG="ESTE SISTEMA ESTA EXPIRADO O DIREITO DE USO ! // //"
                MSG=MSG+"ENTRE EM CONTATO PARA INFORMAR N§ DE SERIE//"
                MSG=MSG+"PARA SUA RENOVA€ŽO DO DIREITO DE USO."
                Mensagem(MSG)
                If Not Numero_Serie()
                  Then 
                       [Expirado]="S"
                       UnLockRecord

                       Return False
                EndIf
        EndIf
   Else If Search("DEMONSTRA€ŽO P/",[Nome da Empresa])=0
           Then If (Today()+15)>[Data de Validade]
                   Then MSG="Sr. USUARIO. // //"
                        If [Data de Validade]>Today()
                           Then MSG=MSG+"Faltam "+ StrVal([Data de Validade]-Today())+" Dia(s) !//"
                        EndIf   
                        MSG=MSG+"ESTE SISTEMA ESTA EXPIRANDO O DIREITO DE USO !//"
                        MSG=MSG+"ACESSE A CENTRAL DO CLIENTE EM NOSSO SITE  E  //"
                        MSG=MSG+"OBTENHA O N§ DE SERIE PARA SUA RENOVA€ŽO.     // //" 
                        MSG=MSG+"DESEJA INFORMAR AGORA ?"
                        ConfGeral(MSG)  
                        If OK="S" Then Numero_Serie() EndIf
                EndIf
        EndIf
EndIf
            
Return True
EndProc ; (Valida)

;*******************************************************************************
;*** Rotina para Sair do Sistema                                            ****
;*******************************************************************************
Proc Sai_Sys()
Do_It!
ClearAll
{Tools} {More} {Protect} {ClearPasswords}
Exit
EndProc ; (Sai_Sys)

;*******************************************************************************
;*** Rotina para Limpa LogSys                                               ****
;*******************************************************************************
Proc Limpa_LogSys()

DTREFLOG=Today()-3
If Not IsEmpty("\\Sistemas\\Cadastro\\LogSys" )
   Then For im From 1 to 3
          Lock "\\Sistemas\\Cadastro\\Logsys" FL
          If Not RetVal
             Then Sleep 1000
                  Loop
          EndIf

          {Ask} {\\Sistemas\\Cadastro\\Logsys} TypeIn "Fast Delete"
          Moveto [Data] TypeIn "<~DTREFLOG or Blank"
          Do_It!
          ClearImage

          UnLock "\\Sistemas\\Cadastro\\Logsys" FL
          QuitLoop
        EndFor
        Release vars im
EndIf

Release Vars DTREFLOG
EndProc

;*******************************************************************************
;*** Rotina Principal                                                       ****
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
SetDir "\\Sistemas\\Cadastro"
Show = ""

If Not IsTable("SysTable")
   Then Play "\\Sistemas\\Cadastro\\InfoErro"
        Exit
EndIf
Password "t01avivcl"
Password "FechaSys"

KeyEnable -24 ; usando tecla alt+o que pode ir ao prompt do DOS

If IsEmpty("SysTable")
   Then CoEdit NoWindow "Usuarios","Systable"
   Else CoEdit NoWindow "Systable"
EndIf

;;If [Expirado]="S" Or Not IsFile("*.lib") Then Muda_Bib("Executar") EndIf

NOVO_DIA=False
If Not Inicio()        Then Sai_Sys() EndIf
If Not Atualiza_Data() Then Sai_Sys() EndIf
If Not Valida()        Then Sai_Sys() EndIf

UnLockRecord
Do_It!
ClearAll

If NOVO_DIA
   Then If Not IsEmpty("Contrdia" )
           Then Fecha_Controle()
        EndIf  
        Limpa_LogSys() 
EndIf

;--- Mensagem atualiza‡Æo de versÆo --------------------------------------------
Array Array_MesVersao[12]

Array_MesVersao[01]="A"
Array_MesVersao[02]="B"
Array_MesVersao[03]="C"
Array_MesVersao[04]="D"
Array_MesVersao[05]="E"
Array_MesVersao[06]="F"
Array_MesVersao[07]="G"
Array_MesVersao[08]="H"
Array_MesVersao[09]="I"
Array_MesVersao[10]="J"
Array_MesVersao[11]="K"
Array_MesVersao[12]="L"

anohoje =Year(Today())
meshoje =Month(Today())

anovers=Substr(SYS_VERSAO_VISERP,1,4)
anover =NumVal(anovers)
letra  =Upper(Substr(SYS_VERSAO_VISERP,6,1))

For i From 1 to 12
  If Array_MesVersao[i]=letra
     Then mesvers=AlinhM(StrVal(i),2)
          mesver =i
          QuitLoop
  EndIf   
EndFor

If (anover<anohoje and mesver<meshoje) or 
   (anover=anohoje and mesver<meshoje)   
   Then dtref=Ultimo_Dia(mesvers+anovers)
        If Today()>dtref And (Today()-dtref)>45
           Then
                mesproxver=mesver
                anoproxver=anover
      
                If mesproxver=12
                   Then anoproxver=anoproxver+1
                        mesproxver=1
                   Else mesproxver=mesproxver+1
                EndIf

                anoproxvers=StrVal(anoproxver)
                mesproxvers=AlinhM(StrVal(mesproxver),2)

                proxver=anoproxvers+"."+Array_MesVersao[mesproxver]        
           
                msg ="Controle de versÆo do Sistema: // //"
                msg2="     VersÆo atual  = "+SubStr(SYS_VERSAO_VISERP,1,6)+" de "+mesvers+"/"+anovers 
                msg=msg+Completa(msg2,55," ")+"//"
                msg2="VersÆo a atualizar-> "+proxver+" de "+mesproxvers+"/"+anoproxvers                     
                If (Today()-dtref)>30
                   Then msg2=msg2+" e posteriores !"
                Endif   
                msg =msg+Completa(msg2,55," ")+"// // //"
                msg =msg+"[ MANTENHA SEMPRE SEU SISTEMA ATUALIZADO ! ]"+"// //"
                msg =msg+"* Caso ainda nÆo saiba como atualizar seu sistema,"+"//"
                msg =msg+"  entre em contato com o suporte  da  Vise  para"+"//"
                msg =msg+"  orient -lo sobre este procedimento.           "+"//"
                
                COR_MENSAGEM="1"
                Mensagem(msg)
        EndIf   
EndIf
;-------------------------------------------------------------------------------

Savevars NOMEMPRESA,SYS_CODIGO_CLIENTE,SYS_CLIENTE_CONFEC,SYS_DATA_SISTEMA,
         VSDGUSUARIO,VSDGSENHA,SYS_VERSAO_VISERP,
         SYS_COR,SYS_COR_RODAPE,SYS_COR_RODAPED,SYS_COR_FUNDO, SYS_COR_MENUD,
         SYS_COR_TEXTO, SYS_COR_TEXTOS, SYS_COR_BTN, SYS_SISTEMA

If IsEmpty("\\Sistemas\\Cadastro\\Usuarios")
   Then Mensagem("N„o foi encontrado nenhum Usu rio cadastro !")
        Play "\\Sistemas\\Cadastro\\Usuarios"
EndIf
Echo Off
{Tools} {More} {Protect} {ClearPasswords}

KeyDisable -24 ; usando tecla alt+o que pode ir ao prompt do DOS

Release Vars All
Release Procs All
Play "Savevars"


