;** EXEC_DAT *******************************************************************
;*  Consulta da Posi‡„o do Cliente                                             *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/08/2019 por Bruno Carvalho              
;Ultima Alteracao: 12/08/2019 por Kamila Gomes                           
;Motivo Alteracao: Ajuste verifica‡Æo de data do mˆs atual

;*******************************************************************************
;** Verifica VersÆo antes da realiza‡Æo do DATAM                             ***
;*******************************************************************************
Proc Sys_Datam_Mensagem(DIR)
Private DIR, ROTINA

;DIR pode ser passado com ","  Ex: "Estoque,Vendas,Caixa/Banco"

ROTINA = ""
PosI=Search(",",DIR)
If PosI>0
   Then CONT_ARRAY = 0
        While PosI>0
          If ROTINA<>"" Then ROTINA = ROTINA + ", " EndIf
          ROTINA = ROTINA + SubStr(DIR,1,PosI-1) 
          DIR = SubStr(DIR,PosI+1,Len(DIR))
          PosI=Search(",",DIR)
          If PosI=0
             Then If ROTINA<>"" Then ROTINA = ROTINA + " e " EndIf
                  ROTINA = ROTINA + DIR 
          EndIf         
        EndWhile
   Else ROTINA = DIR
EndIf   

Mensagem("Pacote "+DATAM_VERSAO+" ! ("+Ltrim(MESEXT(Month(DATAM_DATA)))+"/"+StrVal(Year(DATAM_DATA))+")// //"+
         "Rotina "+ROTINA+"//"+
         "//Tabelas do Sistema e Base ser„o atualizadas !!!//"+
         "// Este processo deve ser executado sem que outros Usuarios//"+
         "// estejam utilizando o Sistema, Ok !!!")

While True
  If Verifica_Usuario()
     Then QuitLoop
     Else ConfGeral("Comunicar os usuarios !// //Deseja Continuar com Atualizacao ?")
          If OK<>"S"
             Then Return False
          EndIf
  EndIf
EndWhile

Return True

Release Vars DIR,ROTINA

EndProc ;Sys_Datam_Mensagem() 

;******************************************************************************
;** Verifica VersÆo antes da realiza‡Æo do DATAM                            ***
;******************************************************************************
Proc Sys_Datam() 
Private VERSAO_SISTEMA,VERSAO_ATUAL,VERSAO_ATUAL_AUX,VERSAO_ATUAL_DATA,Prox_Versao,
        Prox_Versao_Aux,MSG,Processa

If Not IsAssigned(DATAM_DATA) Or ((IsAssigned(DATAM_DATA) And DATAM_DATA < Dateval("01.08.2019"))) Or SubStr(Upper(Directory()),1,1)="N" 
   Then Return True
EndIf   

If Not IsAssigned(DATAM_DATA)   Or 
   Not IsAssigned(DATAM_VERSAO) 
   Then Mensagem("NÆo foram setados valores para DATAM_DATA ou DATAM_VERSAO no script do DATAM!")
        Return False
EndIf   
   
Password("FechaSys") 
View "SysTable"
VERSAO_SISTEMA    = [Versao_Atual]
VERSAO_ATUAL      = SubStr([Versao_atual],1,6)
VERSAO_ATUAL_AUX  = SubStr([Versao_atual],1,4)+SubStr([Versao_atual],6,1)
VERSAO_ATUAL_DATA = DateVal(SubStr([Versao_atual],11,10)) 
ClearAll

If SubStr(VERSAO_ATUAL,6,1)="L"
   Then Prox_Versao    =StrVal(NumVal(SubStr(VERSAO_ATUAL,1,4))+1)+".A"
        Prox_Versao_Aux=StrVal(NumVal(SubStr(VERSAO_ATUAL,1,4))+1)+"A"
   Else Prox_Versao    =SubStr(VERSAO_ATUAL,1,4)+"."+Chr(Asc(SubStr(VERSAO_ATUAL,6,1))+1)
        Prox_Versao_Aux=SubStr(VERSAO_ATUAL,1,4)+Chr(Asc(SubStr(VERSAO_ATUAL,6,1))+1)
EndIf

MSG = ""
Switch
  Case Month(DATAM_DATA)=Month(VERSAO_ATUAL_DATA) And (DATAM_VERSAO=VERSAO_ATUAL Or DATAM_VERSAO=Prox_Versao) : 
       Processa = True
  Case DATAM_VERSAO=VERSAO_ATUAL :                                                                   ;Mˆs Atual
       If VERSAO_ATUAL_DATA <= DATAM_DATA   
          Then Processa = True
          Else MSG = MSG + Completa("SYSTABLE",60," ")+"//"
               MSG = MSG + Completa("  Data: "+StrVal(VERSAO_ATUAL_DATA),60," ")+"//"
               MSG = MSG + Completa("VersÆo: "+VERSAO_ATUAL,60," ")+"////"
               Switch
                 Case VERSAO_ATUAL_DATA > DATAM_DATA :
                      MSG = MSG + Completa("DATAM com data inferior … DATA ATUAL do Sistema!",60," ")+"//"
                 Case Month(VERSAO_ATUAL_DATA) <> Month(DATAM_DATA) :
                      MSG = MSG + Completa("DATAM com o mˆs inferior/superior … DATA ATUAL do Sistema!",60," ")+"//"
                 OtherWise                           :
                      MSG = MSG + Completa("DATAM com data incorreta no Sistema!",60," ")+"//"       
               EndSwitch  
               MSG = MSG + Completa(">> Data no DATAM ‚ de "+StrVal(DATAM_DATA),60," ")
       EndIf   
  
  Case DATAM_VERSAO=Prox_Versao And VERSAO_ATUAL_DATA <= DATAM_DATA : Processa = True                ;Pr¢ximo Mˆs
  OtherWise                      : MSG = MSG + Completa("SYSTABLE",60," ")+"//"
                                   MSG = MSG + Completa("  Data: "+StrVal(VERSAO_ATUAL_DATA),60," ")+"//"
                                   MSG = MSG + Completa("VersÆo: "+VERSAO_ATUAL,60," ")+"////"
                                   MSG = MSG + Completa("DATAM",60," ")+"//"
                                   MSG = MSG + Completa("  Data: "+StrVal(DATAM_DATA),60," ")+"////"
                                   MSG = MSG + Completa("VersÆo: "+DATAM_VERSAO,60," ")+"//"
                                   MSG = MSG + Completa("NÆo ‚ poss¡vel prosseguir com a execu‡Æo deste DATAM!",60," ")
EndSwitch

If MSG<>""
   Then Mensagem(MSG)
        Return False
EndIf

Return True        

EndProc ;Sys_Datam()

;******************************************************************************
;** Atualiza VersÆo na SysTable                                             ***
;******************************************************************************
Proc Atualiza_SysTable()

;Datam_SetaDir() seta a variavel CONT_TABLE_ERROR

If Not IsAssigned(CONT_TABLE_ERROR) Then CONT_TABLE_ERROR=0 EndIf

If CONT_TABLE_ERROR = 0
   Then ;----------------- Corrigindo Autor -----------------
        Password("FechaSys")
        Coedit "Systable"
        [Versao_atual]=DATAM_VERSAO+" de "+StrVal(DATAM_DATA)
        
        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            ]
        SYS_SISTEMA        = [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
        
        Do_It!
        ClearAll
        UnPassword("FechaSys")
   Else MSG="Foi detectado que "+StrVal(CONT_TABLE_ERROR)+" tabela(s) "
        MSG=MSG+"//apresentaram inconsistˆncia !"
        Mensagem(MSG)
EndIf
                
EndProc ;Atualiza_SysTable()

;******************************************************************************
;** Seta Diret¢rio no DATAM                                                 ***
;******************************************************************************
Proc Datam_SetaDir(PARAM,OPCAO)
Private PARAM,OPCAO

;PARAM => Diret¢rio   Ex: "ESTOQUE", "Vendas", "FacCao"
;OPCAO => Caso for executar o DATAM em mˆs fechado o parƒmetro OPCAO deve ser informado, senÆo ""   Ex: "FechaMes", "FECHAMES" , ""

If DirExists("\\Sistemas\\"+PARAM+"\\")=0
   Then CONT_TABLE_ERROR = 1
        Mensagem("Diret¢rio \\Sistemas\\"+PARAM+"\\"+" nÆo existe!")
        Return 
EndIf   

Diretorio="\\Sistemas\\"+PARAM+"\\"
If OPCAO=""
   Then ;---- Diret¢rio Atual -------------------------------------------------
        Aguardes("Atualizando Pasta: "+Diretorio)
        {Tools} {More} {Directory} TypeIn Diretorio Enter
        Sys_Correcao_Tabelas(PARAM)
        
   Else ;---- FechaMes --------------------------------------------------------
        Diretorios_Fechames_C(Diretorio)
        Array_Diretorios[1]=""
        For i From 1 to DynArraySize(Array_Diretorios)
          If i=1  
             Then Diretorio="\\Sistemas\\"+PARAM+"\\"
             Else Diretorio="\\Sistemas\\"+PARAM+"\\Fechames\\"+Array_Diretorios[i]
          EndIf   
          Aguardes("Atualizando Pasta: "+Diretorio)
          {Tools} {More} {Directory} TypeIn Diretorio Enter
          Sys_Correcao_Tabelas(PARAM)
          LimpAguarde()
        EndFor    
        LimpAguardes()    
        
        ;---- FechaAno --------------------------------------------------------
        DiretorioFechAno  ="\\FechAno"
        Modulo            ="\\"+PARAM
        Diretorios_FechAno(DiretorioFechAno)
        For i From 1 to DynArraySize(Array_Diretorios)
          LimpAguardes()
          DiretorioFA=DiretorioFechAno+"\\"+Array_Diretorios[i]+Modulo
          If DirExists(DiretorioFA)=0 Then Loop EndIf
                  
          Lista_Diretorio(DiretorioFA)
          For j From 1 to DynArraySize(Array_Lista_Diretorios)
            Diretorio=DiretorioFA+"\\"+Array_Lista_Diretorios[j]+"\\"
            Aguardes("Atualizando Pasta: "+Diretorio)
            {Tools} {More} {Directory} TypeIn Diretorio Enter
                  
           Sys_Correcao_Tabelas(PARAM)
           LimpAguarde()
          EndFor  
        EndFor           
EndIf
LimpAguardes()

EndProc ;Datam_SetaDir()

;******************************************************************************
;** Executa a proc de corre‡Æo das tabelas que sÆo processadas no DATAM       *
;******************************************************************************
Proc Sys_Correcao_Tabelas(PARAM)

Switch
  Case Upper(PARAM)="CADASTRO" : Correcao_Tabelas_Cadastro()
  Case Upper(PARAM)="CARTAOP"  : Correcao_Tabelas_CartaoP()
  Case Upper(PARAM)="CHEQREC"  : Correcao_Tabelas_CheqRec()
  Case Upper(PARAM)="COBRANCA" : Correcao_Tabelas_Cobranca()
  Case Upper(PARAM)="COBRMON"  : Correcao_Tabelas_Cobrmon()
  Case Upper(PARAM)="COMPRAS"  : Correcao_Tabelas_Compras()
  Case Upper(PARAM)="CTACOR"   : Correcao_Tabelas_CtaCor()
  Case Upper(PARAM)="CTAPAG"   : Correcao_Tabelas_CtaPag()
  Case Upper(PARAM)="CTAREC"   : Correcao_Tabelas_CtaRec()
  Case Upper(PARAM)="CURTUME"  : Correcao_Tabelas_Curtume()
  Case Upper(PARAM)="ESTOQUE"  : Correcao_Tabelas_Estoque()
  Case Upper(PARAM)="FACCAO"   : Correcao_Tabelas_Faccao()
  Case Upper(PARAM)="FUNDIC2"  : Correcao_Tabelas_Fundic2()
  Case Upper(PARAM)="FUNDICAO" : Correcao_Tabelas_Fundicao()
  Case Upper(PARAM)="GEEC"     : Correcao_Tabelas_Geec()
  Case Upper(PARAM)="ICMS_IPI" : Correcao_Tabelas_Icms_Ipi()
  Case Upper(PARAM)="MDFE"     : Correcao_Tabelas_Mdfe()
  Case Upper(PARAM)="MOBILETS" : Correcao_Tabelas_Mobilets()
  Case Upper(PARAM)="PRODUCAO" : Correcao_Tabelas_Producao()
  Case Upper(PARAM)="USUARIOS" : Correcao_Tabelas_Usuarios()
  Case Upper(PARAM)="VENDAS"   : Correcao_Tabelas_Vendas()
  Case Upper(PARAM)="VISITA"   : Correcao_Tabelas_Visita()
EndSwitch

EndProc ;Sys_Correcao_Tabelas()

;******************************************************************************
;** Executa a proc de corre‡Æo das tabelas que sÆo processadas no DATAM       *
;******************************************************************************
Proc Sys_Datam_Release()

Release Vars DATAM_DATA,DATAM_VERSAO,DATAM_ROTINA,DATAM_FECHAMES,Diretorio
Release Procs Sys_Correcao_Tabelas,Sys_Datam_Mensagem,Sys_Datam,Atualiza_SysTable,Datam_SetaDir,
              Correcao_Tabelas_Cadastro,Correcao_Tabelas_CartaoP,Correcao_Tabelas_CheqRec,
              Correcao_Tabelas_Cobranca,Correcao_Tabelas_Cobrmon,Correcao_Tabelas_Compras,
              Correcao_Tabelas_CtaCor,Correcao_Tabelas_CtaPag,Correcao_Tabelas_CtaRec,
              Correcao_Tabelas_Curtume,Correcao_Tabelas_Estoque,Correcao_Tabelas_Faccao,
              Correcao_Tabelas_Fundic2,Correcao_Tabelas_Fundicao,Correcao_Tabelas_Geec,
              Correcao_Tabelas_Icms_Ipi,Correcao_Tabelas_Mdfe,Correcao_Tabelas_Mobilets,
              Correcao_Tabelas_Producao,Correcao_Tabelas_Usuarios,Correcao_Tabelas_Vendas,
              Correcao_Tabelas_Visita

EndProc ;Sys_Datam_Release()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
TEMP=True

While True
  Switch
    Case DATAM_EXECUTA = "SYS_DATAM"          : If Not Sys_Datam() 
                                                   Then TEMP=False
                                                EndIf   
    Case DATAM_EXECUTA = "SYS_DATAM_MENSAGEM" : If Not IsAssigned(DATAM_ROTINA) 
                                                   Then TEMP=False
                                                        QuitLoop 
                                                EndIf
                                                If Not Sys_Datam_Mensagem(DATAM_ROTINA) 
                                                   Then TEMP=False
                                                EndIf
    Case DATAM_EXECUTA = "DATAM_SETDIR"       : If Not IsAssigned(DATAM_ROTINA) Or Not IsAssigned(DATAM_FECHAMES) 
                                                   Then TEMP=False
                                                   Else Datam_SetaDir(DATAM_ROTINA,DATAM_FECHAMES)   
                                                EndIf
    Case DATAM_EXECUTA = "DATAM_SYSTABLE"     : Atualiza_SysTable()
    Case DATAM_EXECUTA = "DATAM_RELEASE"      : Sys_Datam_Release()
  EndSwitch
  QuitLoop
EndWhile

If Not TEMP 
   Then DATAM_EXECUTA = False
        CONT_TABLE_ERROR = 1 
   Else DATAM_EXECUTA = True
EndIf
