From a7dc4fc28a64c7dc0582c1427b6385ef933dfe51 Mon Sep 17 00:00:00 2001 From: Guilherme Andrade Del Cantoni Date: Mon, 1 Apr 2019 12:08:14 -0300 Subject: [PATCH] [Fixed #51] Incompatibilidade do módulo com a versão SEI 3.1 --- PENIntegracao.php | 7 ++++--- bd/PenMetaBD.php | 4 ++-- rn/ExpedirProcedimentoRN.php | 12 ++++++++++-- rn/PenAtualizarSeiRN.php | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++----------- sip_atualizar_versao_modulo_pen.php | 20 +++++++++++++++++++- 5 files changed, 85 insertions(+), 19 deletions(-) diff --git a/PENIntegracao.php b/PENIntegracao.php index 0ebc18c..07994bf 100644 --- a/PENIntegracao.php +++ b/PENIntegracao.php @@ -2,7 +2,7 @@ class PENIntegracao extends SeiIntegracao { - const COMPATIBILIDADE_MODULO_SEI = array('3.0.5', '3.0.6', '3.0.7', '3.0.8', '3.0.9', '3.0.11', '3.0.12', '3.0.13', '3.0.14', '3.0.15'); + const COMPATIBILIDADE_MODULO_SEI = array('3.0.5', '3.0.6', '3.0.7', '3.0.8', '3.0.9', '3.0.11', '3.0.12', '3.0.13', '3.0.14', '3.0.15', '3.1.0'); private static $strDiretorio; @@ -11,7 +11,7 @@ class PENIntegracao extends SeiIntegracao { } public function getVersao() { - return '1.1.17'; + return '1.2.0'; } public function getInstituicao() { @@ -353,7 +353,8 @@ class PENIntegracao extends SeiIntegracao { return $xml; } - public static function validarCompatibilidadeModulo($bolGerarExcecao = true, $strVersaoSEI = SEI_VERSAO) { + public static function validarCompatibilidadeModulo($bolGerarExcecao = true, $strVersaoSEI = SEI_VERSAO) + { $objPENIntegracao = new PENIntegracao(); if(!in_array($strVersaoSEI, self::COMPATIBILIDADE_MODULO_SEI)) { throw new InfraException(sprintf("Módulo %s (versão %s) não é compatível com a versão %s do SEI.", $objPENIntegracao->getNome(), $objPENIntegracao->getVersao(), $strVersaoSEI)); diff --git a/bd/PenMetaBD.php b/bd/PenMetaBD.php index 21a7579..95f6d9a 100644 --- a/bd/PenMetaBD.php +++ b/bd/PenMetaBD.php @@ -326,10 +326,10 @@ class PenMetaBD extends InfraMetaBD { return $this; } - public function adicionarChaveEstrangeira($strNomeFK, $strTabela, $arrCampos, $strTabelaOrigem, $arrCamposOrigem) { + public function adicionarChaveEstrangeira($strNomeFK, $strTabela, $arrCampos, $strTabelaOrigem, $arrCamposOrigem, $bolCriarIndice = true) { if(!$this->isChaveExiste($strTabela, $strNomeFK)) { - parent::adicionarChaveEstrangeira($strNomeFK, $strTabela, $arrCampos, $strTabelaOrigem, $arrCamposOrigem); + parent::adicionarChaveEstrangeira($strNomeFK, $strTabela, $arrCampos, $strTabelaOrigem, $arrCamposOrigem, $bolCriarIndice); } return $this; } diff --git a/rn/ExpedirProcedimentoRN.php b/rn/ExpedirProcedimentoRN.php index 667d874..6ac4d19 100644 --- a/rn/ExpedirProcedimentoRN.php +++ b/rn/ExpedirProcedimentoRN.php @@ -1209,8 +1209,16 @@ class ExpedirProcedimentoRN extends InfraRN { $objEditorDTO->setStrSinProcessarLinks('S'); } - $numVersaoAtual = intval(str_replace('.', '', SEI_VERSAO)); - $numVersaoCarimboObrigatorio = intval(str_replace('.', '', self::VERSAO_CARIMBO_PUBLICACAO_OBRIGATORIO)); + //Normaliza o formato de número de versão considerando dois caracteres para cada item (3.0.15 -> 030015) + $numVersaoAtual = explode('.', SEI_VERSAO); + $numVersaoAtual = array_map(function($item){ return str_pad($item, 2, '0', STR_PAD_LEFT); }, $numVersaoAtual); + $numVersaoAtual = intval(join($numVersaoAtual)); + + //Normaliza o formato de número de versão considerando dois caracteres para cada item (3.0.7 -> 030007) + $numVersaoCarimboObrigatorio = explode('.', self::VERSAO_CARIMBO_PUBLICACAO_OBRIGATORIO); + $numVersaoCarimboObrigatorio = array_map(function($item){ return str_pad($item, 2, '0', STR_PAD_LEFT); }, $numVersaoCarimboObrigatorio); + $numVersaoCarimboObrigatorio = intval(join($numVersaoCarimboObrigatorio)); + if ($numVersaoAtual >= $numVersaoCarimboObrigatorio) { $objEditorDTO->setStrSinCarimboPublicacao('N'); } diff --git a/rn/PenAtualizarSeiRN.php b/rn/PenAtualizarSeiRN.php index 7adec63..8d340e6 100644 --- a/rn/PenAtualizarSeiRN.php +++ b/rn/PenAtualizarSeiRN.php @@ -27,22 +27,24 @@ class PenAtualizarSeiRN extends PenAtualizadorRN { !(BancoSEI::getInstance() instanceof InfraOracle)) { $this->finalizar('BANCO DE DADOS NAO SUPORTADO: ' . get_parent_class(BancoSEI::getInstance()), true); - } + } + + PENIntegracao::validarCompatibilidadeModulo(); //testando permissoes de criações de tabelas - $objInfraMetaBD = new InfraMetaBD(BancoSEI::getInstance()); + $objInfraMetaBD = new InfraMetaBD(BancoSEI::getInstance()); - if (count($objInfraMetaBD->obterTabelas('pen_sei_teste')) == 0) { - BancoSEI::getInstance()->executarSql('CREATE TABLE pen_sei_teste (id ' . $objInfraMetaBD->tipoNumero() . ' null)'); - } - BancoSEI::getInstance()->executarSql('DROP TABLE pen_sei_teste'); + if (count($objInfraMetaBD->obterTabelas('pen_sei_teste')) == 0) { + BancoSEI::getInstance()->executarSql('CREATE TABLE pen_sei_teste (id ' . $objInfraMetaBD->tipoNumero() . ' null)'); + } + BancoSEI::getInstance()->executarSql('DROP TABLE pen_sei_teste'); - $objInfraParametro = new InfraParametro(BancoSEI::getInstance()); + $objInfraParametro = new InfraParametro(BancoSEI::getInstance()); // Aplicação de scripts de atualização de forma incremental // Ausência de [break;] proposital para realizar a atualização incremental de versões - $strVersaoModuloPen = $objInfraParametro->getValor(self::PARAMETRO_VERSAO_MODULO, false) ?: $objInfraParametro->getValor(self::PARAMETRO_VERSAO_MODULO_ANTIGO, false); - switch ($strVersaoModuloPen) { + $strVersaoModuloPen = $objInfraParametro->getValor(self::PARAMETRO_VERSAO_MODULO, false) ?: $objInfraParametro->getValor(self::PARAMETRO_VERSAO_MODULO_ANTIGO, false); + switch ($strVersaoModuloPen) { case '': $this->instalarV100(); // Nenhuma versão instalada case '1.0.0': $this->instalarV101(); case '1.0.1': $this->instalarV110(); @@ -63,6 +65,7 @@ class PenAtualizarSeiRN extends PenAtualizadorRN { case '1.1.14': $this->instalarV1115(); case '1.1.15': $this->instalarV1116(); case '1.1.16': $this->instalarV1117(); + case '1.1.17': $this->instalarV1200(); break; default: @@ -1482,8 +1485,32 @@ class PenAtualizarSeiRN extends PenAtualizadorRN { $fnCadastrar(++$numMaxId, 'PEN_EXPEDICAO_PROCESSO_ABORTADA'); InfraDebug::getInstance()->gravar('Atualizando sequência das tabelas do sistema'); - $objVersaoRN = new VersaoRN(); - $objVersaoRN->atualizarSequencias(); + + + //Na versão 3.1.0 do SEI, houve uma mudança na rotina de atualização das sequences do banco de dados, + //deixando de se utilizar a classe VersaoRN para utilizar a nova classe ScriptRN. + //Devido a esta mudança, é necessário avaliar qual a atual versão do SEI executar a rotina correta + + //Normaliza o formato de número de versão considerando dois caracteres para cada item (3.1.0 -> 030100) + $numVersaoAtualSEI = explode('.', SEI_VERSAO); + $numVersaoAtualSEI = array_map(function($item){ return str_pad($item, 2, '0', STR_PAD_LEFT); }, $numVersaoAtualSEI); + $numVersaoAtualSEI = intval(join($numVersaoAtualSEI)); + + //Normaliza o formato de número de versão considerando dois caracteres para cada item (3.1.0 -> 030100) + $numVersaoMudancaAtualizarSequencias = explode('.', '3.1.0'); + $numVersaoMudancaAtualizarSequencias = array_map(function($item){ return str_pad($item, 2, '0', STR_PAD_LEFT); }, $numVersaoMudancaAtualizarSequencias); + $numVersaoMudancaAtualizarSequencias = intval(join($numVersaoMudancaAtualizarSequencias)); + + if($numVersaoMudancaAtualizarSequencias >= $numVersaoAtualSEI){ + //Procedimento de atualização de sequências compatível com SEI 3.1.X + $objScriptRN = new ScriptRN(); + $objScriptRN->atualizarSequencias(); + } else { + //Procedimento de atualização de sequências compatível com SEI 3.0.X + $objVersaoRN = new VersaoRN(); + $objVersaoRN->atualizarSequencias(); + } + //Altera o parâmetro da versão de banco $objInfraParametroBD = new InfraParametroBD(BancoSEI::getInstance()); @@ -1492,4 +1519,16 @@ class PenAtualizarSeiRN extends PenAtualizadorRN { $objInfraParametroDTO->setStrValor('1.1.17'); $objInfraParametroBD->alterar($objInfraParametroDTO); } + + + /* Contêm atualizações da versao 1.2.0 do módulo */ + protected function instalarV1200() + { + //altera o parâmetro da versão de banco + $objInfraParametroBD = new InfraParametroBD(BancoSEI::getInstance()); + $objInfraParametroDTO = new InfraParametroDTO(); + $objInfraParametroDTO->setStrNome(self::PARAMETRO_VERSAO_MODULO); + $objInfraParametroDTO->setStrValor('1.2.0'); + $objInfraParametroBD->alterar($objInfraParametroDTO); + } } diff --git a/sip_atualizar_versao_modulo_pen.php b/sip_atualizar_versao_modulo_pen.php index ae23d0e..463b85a 100644 --- a/sip_atualizar_versao_modulo_pen.php +++ b/sip_atualizar_versao_modulo_pen.php @@ -9,9 +9,10 @@ set_include_path(implode(PATH_SEPARATOR, array( class PenAtualizarSipRN extends InfraRN { - protected $versaoMinRequirida = '1.30.0'; const PARAMETRO_VERSAO_MODULO_ANTIGO = 'PEN_VERSAO_MODULO_SIP'; const PARAMETRO_VERSAO_MODULO = 'VERSAO_MODULO_PEN'; + + protected $versaoMinRequirida = '1.30.0'; private $arrRecurso = array(); private $arrMenu = array(); @@ -99,6 +100,7 @@ class PenAtualizarSipRN extends InfraRN { case '1.1.14': $this->instalarV1115(); case '1.1.15': $this->instalarV1116(); case '1.1.16': $this->instalarV1117(); + case '1.1.17': $this->instalarV1200(); break; default: @@ -118,6 +120,7 @@ class PenAtualizarSipRN extends InfraRN { } } + /** * Finaliza o script informando o tempo de execução. * @@ -1117,6 +1120,21 @@ class PenAtualizarSipRN extends InfraRN { $objInfraParametroDTO->setStrValor('1.1.17'); $objInfraParametroBD->alterar($objInfraParametroDTO); } + + /** + * Instala/Atualiza os módulo PEN para versão 1.2.0 + */ + protected function instalarV1200() + { + //Corrigir a versão do módulo no banco de dados + $objInfraParametroDTO = new InfraParametroDTO(); + $objInfraParametroDTO->setStrNome(self::PARAMETRO_VERSAO_MODULO); + $objInfraParametroDTO->retTodos(); + $objInfraParametroBD = new InfraParametroBD(BancoSip::getInstance()); + $objInfraParametroDTO = $objInfraParametroBD->consultar($objInfraParametroDTO); + $objInfraParametroDTO->setStrValor('1.2.0'); + $objInfraParametroBD->alterar($objInfraParametroDTO); + } } try { -- libgit2 0.21.2