From 3612868c5cd17661f96f6bf6939e6c8c8ced3365 Mon Sep 17 00:00:00 2001 From: Mauro Costa <83025710+Mauro1706@users.noreply.github.com> Date: Thu, 6 Jun 2024 17:39:16 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20limita=C3=A7=C3=A3o=20de=20repositorio?= =?UTF-8?q?=20e=20unidade=20para=20envio=20de=20processos=20(#511)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Mauro Costa --- src/PENIntegracao.php | 85 ++++++++-- src/bd/PenUnidadeRestricaoBD.php | 12 ++ src/dto/PenUnidadeRestricaoDTO.php | 43 +++++ src/int/ProcessoEletronicoINT.php | 19 +++ src/pen_map_unidade_cadastrar.php | 110 ++++++++---- src/pen_procedimento_expedir.php | 35 +++- src/rn/ExpedirProcedimentoRN.php | 17 +- src/rn/PenUnidadeRestricaoRN.php | 158 ++++++++++++++++++ src/rn/ReceberProcedimentoRN.php | 6 +- .../sei_atualizar_versao_modulo_pen.php | 35 ++++ .../src/paginas/PaginaMapUnidades.php | 145 ++++++++++++++++ .../funcional/tests/CenarioBaseTestCase.php | 2 + ...toDeUnidadesComLimitacaoDeRepositorios.php | 155 +++++++++++++++++ .../src/paginas/PaginaMapUnidades.php | 145 ++++++++++++++++ .../funcional/tests/CenarioBaseTestCase.php | 2 + ...toDeUnidadesComLimitacaoDeRepositorios.php | 155 +++++++++++++++++ .../src/paginas/PaginaMapUnidades.php | 145 ++++++++++++++++ .../funcional/tests/CenarioBaseTestCase.php | 3 +- ...toDeUnidadesComLimitacaoDeRepositorios.php | 155 +++++++++++++++++ 19 files changed, 1362 insertions(+), 65 deletions(-) create mode 100644 src/bd/PenUnidadeRestricaoBD.php create mode 100644 src/dto/PenUnidadeRestricaoDTO.php create mode 100644 src/rn/PenUnidadeRestricaoRN.php create mode 100644 tests_sei4/funcional/src/paginas/PaginaMapUnidades.php create mode 100644 tests_sei4/funcional/tests/MapeamentoDeUnidadesComLimitacaoDeRepositorios.php create mode 100644 tests_sei41/funcional/src/paginas/PaginaMapUnidades.php create mode 100644 tests_sei41/funcional/tests/MapeamentoDeUnidadesComLimitacaoDeRepositorios.php create mode 100644 tests_super/funcional/src/paginas/PaginaMapUnidades.php create mode 100644 tests_super/funcional/tests/MapeamentoDeUnidadesComLimitacaoDeRepositorios.php diff --git a/src/PENIntegracao.php b/src/PENIntegracao.php index d8c7e185d..8859b590b 100755 --- a/src/PENIntegracao.php +++ b/src/PENIntegracao.php @@ -874,26 +874,87 @@ public function processarControlador($strAcao) return true; } + public function autoCompletarExpedirProcedimento($xml) { + $bolPermiteEnvio = false; + if ($_GET['acao'] != 'pen_procedimento_expedir') { + $bolPermiteEnvio = true; + } + + $restricaoCadastrada = false; + if ($bolPermiteEnvio == false) { + $objUnidadeDTO = new PenUnidadeDTO(); + $objUnidadeDTO->retNumIdUnidadeRH(); + $objUnidadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); + + $objUnidadeRN = new UnidadeRN(); + $objUnidadeDTO = $objUnidadeRN->consultarRN0125($objUnidadeDTO); + + $arrObjEstruturaDTO = array(); + try { + $objPenUnidadeRestricaoDTO = new PenUnidadeRestricaoDTO(); + $objPenUnidadeRestricaoDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); + $objPenUnidadeRestricaoDTO->setNumIdUnidadeRH($objUnidadeDTO->getNumIdUnidadeRH()); + $objPenUnidadeRestricaoDTO->setNumIdUnidadeRestricao($_POST['id_repositorio']); + $objPenUnidadeRestricaoDTO->retNumIdUnidadeRHRestricao(); + $objPenUnidadeRestricaoDTO->retStrNomeUnidadeRHRestricao(); + + $objPenUnidadeRestricaoRN = new PenUnidadeRestricaoRN(); + $restricaoCadastrada = $objPenUnidadeRestricaoRN->contar($objPenUnidadeRestricaoDTO); + $restricaoCadastrada = $restricaoCadastrada > 0; + + if ($restricaoCadastrada) { + $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRHRestricao('%' . $_POST['palavras_pesquisa'] . '%', InfraDTO::$OPER_LIKE); + $arrEstruturas = $objPenUnidadeRestricaoRN->listar($objPenUnidadeRestricaoDTO); + + foreach ($arrEstruturas as $key => $unidade) { + if ($unidade->getNumIdUnidadeRHRestricao() != null) { + $arrObjEstruturaDTO[] = $unidade; + } + } + } + } catch (Exception $e) { + } + + if (count($arrObjEstruturaDTO) > 0) { + $xml = InfraAjax::gerarXMLItensArrInfraDTO($arrObjEstruturaDTO, 'IdUnidadeRHRestricao', 'NomeUnidadeRHRestricao'); + } else if ($restricaoCadastrada) { + return ''; + } + } + if (!$restricaoCadastrada && (is_null($arrObjEstruturaDTO) || count($arrObjEstruturaDTO) == 0)) { + $arrObjEstruturaDTO = (array) ProcessoEletronicoINT::autoCompletarEstruturasAutoCompletar($_POST['id_repositorio'], $_POST['palavras_pesquisa'], $bolPermiteEnvio); + + if (count($arrObjEstruturaDTO['itens']) > 0) { + $xml = self::gerarXMLItensArrInfraDTOAutoCompletar($arrObjEstruturaDTO, 'NumeroDeIdentificacaoDaEstrutura', 'Nome'); + } else { + return ''; + } + } + + return $xml; + } public function processarControladorAjax($strAcao) { $xml = null; switch ($_GET['acao_ajax']) { - case 'pen_unidade_auto_completar_expedir_procedimento': - $bolPermiteEnvio = false; - if ($_GET['acao'] != 'pen_procedimento_expedir') { - $bolPermiteEnvio = true; - } - - $arrObjEstruturaDTO = (array) ProcessoEletronicoINT::autoCompletarEstruturasAutoCompletar($_POST['id_repositorio'], $_POST['palavras_pesquisa'], $bolPermiteEnvio); - - if (count($arrObjEstruturaDTO['itens']) > 0) { - $xml = self::gerarXMLItensArrInfraDTOAutoCompletar($arrObjEstruturaDTO, 'NumeroDeIdentificacaoDaEstrutura', 'Nome'); - } else { - return ''; + case 'pen_listar_repositorios_estruturas_auto_completar': + try { + $arrObjEstruturaDTO = (array) ProcessoEletronicoINT::autoCompletarRepositorioEstruturas($_POST['palavras_pesquisa']); + if (count($arrObjEstruturaDTO) > 0) { + $xml = InfraAjax::gerarXMLItensArrInfraDTO($arrObjEstruturaDTO, 'Id', 'Nome'); + } else { + return ''; + } + }catch(Throwable $e){ + $mensagem = "Falha na obtenção dos Repositórios de Estruturas Organizacionais"; + throw new InfraException($mensagem, $e); } break; + case 'pen_unidade_auto_completar_expedir_procedimento': + $xml = $this->autoCompletarExpedirProcedimento($xml); + break; case 'pen_unidade_auto_completar_mapeados': // DTO de paginao diff --git a/src/bd/PenUnidadeRestricaoBD.php b/src/bd/PenUnidadeRestricaoBD.php new file mode 100644 index 000000000..981e1e069 --- /dev/null +++ b/src/bd/PenUnidadeRestricaoBD.php @@ -0,0 +1,12 @@ + diff --git a/src/dto/PenUnidadeRestricaoDTO.php b/src/dto/PenUnidadeRestricaoDTO.php new file mode 100644 index 000000000..da5e6849a --- /dev/null +++ b/src/dto/PenUnidadeRestricaoDTO.php @@ -0,0 +1,43 @@ +adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'Id', 'id'); + $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'IdUnidade', 'id_unidade'); + $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'IdUnidadeRH', 'id_unidade_rh'); + $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'IdUnidadeRestricao', 'id_unidade_restricao'); + $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_STR, 'NomeUnidadeRestricao', 'nome_unidade_restricao'); + $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'IdUnidadeRHRestricao', 'id_unidade_rh_restricao'); + $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_STR, 'NomeUnidadeRHRestricao', 'nome_unidade_rh_restricao'); + $this->configurarPK('Id', InfraDTO::$TIPO_PK_NATIVA); + + $this->configurarFK('IdUnidade', 'unidade', 'id_unidade'); + } +} diff --git a/src/int/ProcessoEletronicoINT.php b/src/int/ProcessoEletronicoINT.php index 2d0b156a5..e6c700a41 100755 --- a/src/int/ProcessoEletronicoINT.php +++ b/src/int/ProcessoEletronicoINT.php @@ -111,6 +111,25 @@ public static function autoCompletarEstruturasAutoCompletar($idRepositorioEstrut return static::gerarHierarquiaEstruturasAutoCompletar($arrObjEstruturas); } + /** + * Auto completar repositorio de estruturas + * + * @param string $strPalavrasPesquisa + * @return array + */ + public static function autoCompletarRepositorioEstruturas($strPalavrasPesquisa) + { + $objProcessoEletronicoRN = new ProcessoEletronicoRN(); + $arrObjRepositorioDTO = (array) $objProcessoEletronicoRN->listarRepositoriosDeEstruturas(); + $arrayRepositorioEstruturas = array(); + foreach ($arrObjRepositorioDTO as $value) { + if (strpos(strtoupper($value->getStrNome()), strtoupper($strPalavrasPesquisa)) !== false) { + $arrayRepositorioEstruturas[] = $value; + } + } + return $arrayRepositorioEstruturas; + } + public static function autoCompletarProcessosApensados($dblIdProcedimentoAtual, $numIdUnidadeAtual, $strPalavrasPesquisa) { $objExpedirProcedimentoRN = new ExpedirProcedimentoRN(); return $objExpedirProcedimentoRN->listarProcessosApensados($dblIdProcedimentoAtual, $numIdUnidadeAtual, $strPalavrasPesquisa); diff --git a/src/pen_map_unidade_cadastrar.php b/src/pen_map_unidade_cadastrar.php index d4ef992fa..060599bd2 100755 --- a/src/pen_map_unidade_cadastrar.php +++ b/src/pen_map_unidade_cadastrar.php @@ -62,11 +62,17 @@ if(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') { if(!array_key_exists('id_unidade', $_POST) || empty($_POST['id_unidade'])) { - throw new InfraException('Nenhuma "Unidade" foi selecionada'); + $params = http_build_query($_POST); + $objPagina->adicionarMensagem('Nenhuma "Unidade" foi selecionada', InfraPagina::$TIPO_MSG_AVISO); + header('Location: '.$objSessao->assinarLink('controlador.php?acao='.PEN_RECURSO_BASE.'_cadastrar&acao_origem='.$_GET['acao'].'&id_mapeamento='.$numIdUnidade.PaginaSEI::getInstance()->montarAncora($numIdUnidade). '&'.$params)); + exit(0); } if(!array_key_exists('id_unidade_rh', $_POST) || $_POST['id_unidade_rh'] === '' || $_POST['id_unidade_rh'] === null) { - throw new InfraException('Nenhuma "Unidade RH" foi selecionada'); + $params = http_build_query($_POST); + $objPagina->adicionarMensagem('Nenhuma "Unidade RH" foi selecionada', InfraPagina::$TIPO_MSG_AVISO); + header('Location: '.$objSessao->assinarLink('controlador.php?acao='.PEN_RECURSO_BASE.'_cadastrar&acao_origem='.$_GET['acao'].'&id_mapeamento='.$numIdUnidade.PaginaSEI::getInstance()->montarAncora($numIdUnidade). '&'.$params)); + exit(0); } $objGenericoBD = new GenericoBD($objBanco); @@ -110,15 +116,34 @@ $numIdUnidade = ''; if(array_key_exists(PEN_PAGINA_GET_ID, $_GET) && !empty($_GET[PEN_PAGINA_GET_ID])) { - $objPenUnidadeDTO->setNumIdUnidade($_GET[PEN_PAGINA_GET_ID]); - $unidade = $objPenUnidadeRN->alterar($objPenUnidadeDTO); - $numIdUnidade = $_GET[PEN_PAGINA_GET_ID]; + $objPenUnidadeDTO->setNumIdUnidade($_GET[PEN_PAGINA_GET_ID]); + $unidade = $objPenUnidadeRN->alterar($objPenUnidadeDTO); + $numIdUnidade = $_GET[PEN_PAGINA_GET_ID]; } else { - $unidade = $objPenUnidadeRN->cadastrar($objPenUnidadeDTO); - $numIdUnidade = $unidade->getNumIdUnidade(); + $unidade = $objPenUnidadeRN->cadastrar($objPenUnidadeDTO); + $numIdUnidade = $unidade->getNumIdUnidade(); + } + + $objPenUnidadeRestricaoRN = new PenUnidadeRestricaoRN(); + + $objPenUnidadeRestricaoDTO = new PenUnidadeRestricaoDTO(); + $objPenUnidadeRestricaoDTO->setNumIdUnidade($_POST['id_unidade']); + $objPenUnidadeRestricaoDTO->setNumIdUnidadeRH($_POST['id_unidade_rh']); + $objPenUnidadeRestricaoRN->prepararExcluir($objPenUnidadeRestricaoDTO); + + $arrObjPenUnidadeRestricaoDTO = $objPenUnidadeRestricaoRN->prepararRepoEstruturas( + $_POST['id_unidade'], + $_POST['id_unidade_rh'], + !empty($_POST['hdnRepoEstruturas']) ? $_POST['hdnRepoEstruturas'] : "" + ); + + if (count($arrObjPenUnidadeRestricaoDTO) > 0) { + $objPenUnidadeRestricaoRN->cadastrar($arrObjPenUnidadeRestricaoDTO); } + $objPagina->adicionarMensagem('Mapeamento de Unidade gravado com sucesso.', 5); + header('Location: '.$objSessao->assinarLink('controlador.php?acao='.PEN_RECURSO_BASE.'_listar&acao_origem='.$_GET['acao'].'&id_mapeamento='.$numIdUnidade.PaginaSEI::getInstance()->montarAncora($numIdUnidade))); exit(0); } @@ -173,7 +198,16 @@ }else{ $strNomeUnidadeSelecionada = 'Unidade não encontrada.'; } + } else if (!empty($_GET['id_unidade_rh']) && !empty($_GET['txtUnidadePen'])){ + $strNomeUnidadeSelecionada = $_GET['txtUnidadePen']; + $objPenUnidadeDTO->setNumIdUnidadeRH($_GET['id_unidade_rh']); } + + $strCssRestricao = ""; + $strHtmlRestricao = ""; + $strJsGlobalRestricao = ""; + $strJsInicializarRestricao = ""; + ProcessoEletronicoINT::montarRestricaoTramitaGovBr($objPenUnidadeDTO->getNumIdUnidade(), $strCssRestricao, $strHtmlRestricao, $strJsGlobalRestricao, $strJsInicializarRestricao); } catch (InfraException $e) { $objPagina->processarExcecao($e); @@ -237,31 +271,58 @@ #txtUnidadePen{position:absolute;left:0%;top:53%;width:60%;} #btnUnidadeRh2{position:absolute;left:61%;top:53%;} + + +fecharHead(); +$objPagina->abrirBody($strTitulo, 'onload="inicializar();"'); +?> +
+ montarBarraComandosSuperior($arrComandos); ?> + abrirAreaDados('15em'); ?> + + + + + + + + + + fecharAreaDados(); ?> + + abrirAreaDados('15em'); ?> + + fecharAreaDados(); ?> +
+fecharBody(); ?> montarJavaScript(); ?> -fecharHead(); -$objPagina->abrirBody($strTitulo, 'onload="inicializar();"'); -?> -
- montarBarraComandosSuperior($arrComandos); ?> - abrirAreaDados('15em'); ?> - - - - - - - - + - fecharAreaDados(); ?> -
-fecharBody(); ?> + fecharHtml(); ?> diff --git a/src/pen_procedimento_expedir.php b/src/pen_procedimento_expedir.php index fe5a806b1..5a8de1456 100755 --- a/src/pen_procedimento_expedir.php +++ b/src/pen_procedimento_expedir.php @@ -56,8 +56,36 @@ $objPenParametroRN = new PenParametroRN(); $numIdRepositorioOrigem = $objPenParametroRN->getParametro('PEN_ID_REPOSITORIO_ORIGEM'); + try { + $objUnidadeDTO = new PenUnidadeDTO(); + $objUnidadeDTO->retNumIdUnidadeRH(); + $objUnidadeDTO->setNumIdUnidade($objSessaoSEI->getNumIdUnidadeAtual()); + + $objUnidadeRN = new UnidadeRN(); + $objUnidadeDTO = $objUnidadeRN->consultarRN0125($objUnidadeDTO); + + $objPenUnidadeRestricaoDTO = new PenUnidadeRestricaoDTO(); + $objPenUnidadeRestricaoDTO->setNumIdUnidade($objSessaoSEI->getNumIdUnidadeAtual()); + $objPenUnidadeRestricaoDTO->setNumIdUnidadeRH($objUnidadeDTO->getNumIdUnidadeRH()); + $objPenUnidadeRestricaoDTO->retNumIdUnidadeRestricao(); + $objPenUnidadeRestricaoDTO->retStrNomeUnidadeRestricao(); + + $objPenUnidadeRestricaoRN = new PenUnidadeRestricaoRN(); + $arrIdUnidadeRestricao = $objPenUnidadeRestricaoRN->listar($objPenUnidadeRestricaoDTO); + //Preparação dos dados para montagem da tela de expedição de processos + if ($arrIdUnidadeRestricao != null) { + $repositorios = array(); + foreach ($arrIdUnidadeRestricao as $value) { + $repositorios[$value->getNumIdUnidadeRestricao()] = $value->getStrNomeUnidadeRestricao(); + } + } else { + $repositorios = $objExpedirProcedimentosRN->listarRepositoriosDeEstruturas(); + } + } catch (Exception $e) { $repositorios = $objExpedirProcedimentosRN->listarRepositoriosDeEstruturas(); + } + $motivosDeUrgencia = $objExpedirProcedimentosRN->consultarMotivosUrgencia(); $idRepositorioSelecionado = (isset($numIdRepositorio)) ? $numIdRepositorio : ''; @@ -72,13 +100,6 @@ $strLinkProcedimentosApensadosSelecao = $objSessaoSEI->assinarLink('controlador.php?acao=pen_apensados_selecionar_expedir_procedimento&tipo_selecao=2&id_object=objLupaProcedimentosApensados&id_procedimento='.$idProcedimento.''); $strLinkUnidadesAdministrativasSelecao = $objSessaoSEI->assinarLink('controlador.php?acao=pen_unidades_administrativas_externas_selecionar_expedir_procedimento&tipo_pesquisa=1&id_object=objLupaUnidadesAdministrativas&idRepositorioEstrutura=1'); - $objUnidadeDTO = new PenUnidadeDTO(); - $objUnidadeDTO->retNumIdUnidadeRH(); - $objUnidadeDTO->setNumIdUnidade($objSessaoSEI->getNumIdUnidadeAtual()); - - $objUnidadeRN = new UnidadeRN(); - $objUnidadeDTO = $objUnidadeRN->consultarRN0125($objUnidadeDTO); - if (!$objUnidadeDTO) { throw new InfraException("A unidade atual não foi mapeada."); } diff --git a/src/rn/ExpedirProcedimentoRN.php b/src/rn/ExpedirProcedimentoRN.php index db3b4283a..384927ab5 100755 --- a/src/rn/ExpedirProcedimentoRN.php +++ b/src/rn/ExpedirProcedimentoRN.php @@ -2100,12 +2100,17 @@ private function enviarComponentesDigitais($strNumeroRegistro, $numIdTramite, $s $dadosDoComponenteDigital->hashDoComponenteDigital = $objComponenteDigitalDTO->getStrHashConteudo(); $arrObjDocumentoDTOAssociacao = $this->listarDocumentosRelacionados($objComponenteDigitalDTO->getDblIdProcedimento(), $objComponenteDigitalDTO->getDblIdDocumento()); - $arrObjDocumentoDTOAssociacao = array_filter($arrObjDocumentoDTOAssociacao, function($item){ - return $item["StaAssociacao"] == RelProtocoloProtocoloRN::$TA_DOCUMENTO_ASSOCIADO; - }); - $arrObjDocumentoDTOAssociacao = array_values($arrObjDocumentoDTOAssociacao); - $objDocumentoDTO = count($arrObjDocumentoDTOAssociacao) == 1 ? $arrObjDocumentoDTOAssociacao[0]['Documento'] : null; - $strStaAssociacao = count($arrObjDocumentoDTOAssociacao) == 1 ? $arrObjDocumentoDTOAssociacao[0]['StaAssociacao'] : null; + $objDocumentoDTO = null; + $strStaAssociacao = null; + $bolMultiplosComponentesCount = 0; + foreach ($arrObjDocumentoDTOAssociacao as $objDocumentoDTOAssociacao) { + $strStaAssociacao = $objDocumentoDTOAssociacao['StaAssociacao']; + if($strStaAssociacao != RelProtocoloProtocoloRN::$TA_DOCUMENTO_MOVIDO){ + $objDocumentoDTO = $objDocumentoDTOAssociacao['Documento']; + $bolMultiplosComponentesCount++; + } + } + $bolMultiplosComponentes = $bolMultiplosComponentesCount > 1; $strNomeDocumento = $this->consultarNomeDocumentoPEN($objDocumentoDTO); //Verifica se existe o objeto anexoDTO para recuperar informações do arquivo diff --git a/src/rn/PenUnidadeRestricaoRN.php b/src/rn/PenUnidadeRestricaoRN.php new file mode 100644 index 000000000..939ffa521 --- /dev/null +++ b/src/rn/PenUnidadeRestricaoRN.php @@ -0,0 +1,158 @@ +getObjInfraIBanco()); + return $objPenUnidadeRestricaoBD->listar($objPenUnidadeRestricaoDTO); + } catch (Exception $e) { + throw new InfraException('Erro listando Unidades.', $e); + } + } + + /** + * Método utilizado para preparar cadastro de dados. + * @param string $hdnRepoEstruturas + * @param string $IdUnidade + * @param string $IdUnidadeRH + * @return array + * @throws InfraException + */ + public function prepararRepoEstruturas($IdUnidade, $IdUnidadeRH, $hdnRepoEstruturas) + { + $arrUnidadesSelecionadas = array(); + $arrayObjPenUnidadeRestricaoDTO = array(); + $arrOpcoes = PaginaSEI::getInstance()->getArrOptionsSelect($hdnRepoEstruturas); + foreach ($arrOpcoes as $opcoes) { + $hdnRepoEstruturasUnidades = 'hdnRepoEstruturas' . $opcoes[0]; + if(array_key_exists($hdnRepoEstruturasUnidades, $_POST) && !empty($_POST[$hdnRepoEstruturasUnidades])) { + $arrOpcoesUnidades = PaginaSEI::getInstance()->getArrOptionsSelect($_POST[$hdnRepoEstruturasUnidades]); + foreach ($arrOpcoesUnidades as $opcoesUnidades) { + if (!in_array($opcoesUnidades[0], $arrUnidadesSelecionadas)) { + $arrUnidadesSelecionadas[] = $opcoesUnidades[0]; + $objPenUnidadeRestricaoDTO = new PenUnidadeRestricaoDTO(); + $objPenUnidadeRestricaoDTO->setNumIdUnidade($IdUnidade); + $objPenUnidadeRestricaoDTO->setNumIdUnidadeRH($IdUnidadeRH); + $objPenUnidadeRestricaoDTO->setNumIdUnidadeRestricao($opcoes[0]); + $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRestricao($opcoes[1]); + $objPenUnidadeRestricaoDTO->setNumIdUnidadeRHRestricao($opcoesUnidades[0]); + $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRHRestricao($opcoesUnidades[1]); + $arrayObjPenUnidadeRestricaoDTO[] = $objPenUnidadeRestricaoDTO; + } + } + } else { + if (!in_array($opcoes[0], $arrUnidadesSelecionadas)) { + $arrUnidadesSelecionadas[] = $opcoes[0]; + $objPenUnidadeRestricaoDTO = new PenUnidadeRestricaoDTO(); + $objPenUnidadeRestricaoDTO->setNumIdUnidade($IdUnidade); + $objPenUnidadeRestricaoDTO->setNumIdUnidadeRH($IdUnidadeRH); + $objPenUnidadeRestricaoDTO->setNumIdUnidadeRestricao($opcoes[0]); + $objPenUnidadeRestricaoDTO->setStrNomeUnidadeRestricao($opcoes[1]); + $arrayObjPenUnidadeRestricaoDTO[] = $objPenUnidadeRestricaoDTO; + } + } + } + return $arrayObjPenUnidadeRestricaoDTO; + } + + /** + * Método utilizado para cadastro de lista de dados. + * @param array $arrayObjDTO + * @return array + * @throws InfraException + */ + protected function cadastrarConectado($arrayObjDTO) + { + try { + $retArrayObjDTO = array(); + $objBD = new PenUnidadeRestricaoBD(BancoSEI::getInstance()); + foreach ($arrayObjDTO as $objDTO) { + $retArrayObjDTO[] = $objBD->cadastrar($objDTO); + } + return $retArrayObjDTO; + } catch (Exception $e) { + throw new InfraException('Erro cadastrando restrição de tramite no mapeamento de unidades.', $e); + } + } + + /** + * Método utilizado para exclusão de dados. + * @param PenUnidadeRestricaoDTO $objDTO + * @return array + * @throws InfraException + */ + protected function prepararExcluirControlado(PenUnidadeRestricaoDTO $objDTO) + { + try { + $arrayObjPenUnidadeRestricaoDTO = array(); + $objDTO->retTodos(); + $objPenUnidadeRestricaoDTO = $this->listar($objDTO); + if ($objPenUnidadeRestricaoDTO != null) { + foreach ($objPenUnidadeRestricaoDTO as $value) { + $arrayObjPenUnidadeRestricaoDTO[] = $this->excluir($value); + } + } + return $arrayObjPenUnidadeRestricaoDTO; + } catch (Exception $e) { + throw new InfraException('Erro excluindo mapeamento de unidades.', $e); + } + } + + /** + * Método utilizado para exclusão de dados. + * @param PenUnidadeRestricaoDTO $objDTO + * @return array + * @throws InfraException + */ + protected function excluirControlado(PenUnidadeRestricaoDTO $objDTO) + { + try { + $objBD = new PenUnidadeRestricaoBD(BancoSEI::getInstance()); + return $objBD->excluir($objDTO); + } catch (Exception $e) { + throw new InfraException('Erro excluindo mapeamento de unidades.', $e); + } + } + + /** + * Método utilizado para contagem de unidades mapeadas + * @param UnidadeDTO $objUnidadeDTO + * @return array + * @throws InfraException + */ + protected function contarConectado(PenUnidadeRestricaoDTO $objPenUnidadeDTO) + { + try { + //Valida Permissao + $objPenUnidadeBD = new PenUnidadeRestricaoBD($this->getObjInfraIBanco()); + return $objPenUnidadeBD->contar($objPenUnidadeDTO); + } catch (Exception $e) { + throw new InfraException('Erro contando mapeamento de unidades.', $e); + } + } +} diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index c0ae917d7..2671b786f 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -1116,9 +1116,9 @@ private function gerarProcedimento($objMetadadosProcedimento, $parObjProtocolo) $objInfraParametro->setValor('SEI_FEDERACAO_NUMERO_PROCESSO', 0); $objProcedimentoDTOGerado = $objProcedimentoRN->gerarRN0156($objProcedimentoDTO); - if ($alterouTipoProcesso) { - $this->atribuirTipoProcedimentoRelacinado($objProcedimentoDTO->getNumIdTipoProcedimento(), $objProcedimentoDTOGerado->getDblIdProcedimento(), $strProcessoNegocio); - } + if ($alterouTipoProcesso) { + $this->atribuirTipoProcedimentoRelacinado($objProcedimentoDTO->getNumIdTipoProcedimento(), $objProcedimentoDTOGerado->getDblIdProcedimento(), $strProcessoNegocio); + } $objProcedimentoDTO->setDblIdProcedimento($objProcedimentoDTOGerado->getDblIdProcedimento()); $objProcedimentoDTO->setStrProtocoloProcedimentoFormatado($objProcedimentoDTO->getObjProtocoloDTO()->getStrProtocoloFormatado()); diff --git a/src/scripts/sei_atualizar_versao_modulo_pen.php b/src/scripts/sei_atualizar_versao_modulo_pen.php index 5ec63e237..d37c5e218 100755 --- a/src/scripts/sei_atualizar_versao_modulo_pen.php +++ b/src/scripts/sei_atualizar_versao_modulo_pen.php @@ -2106,6 +2106,41 @@ protected function instalarV2000_beta1() $objInfraAgendamentoTarefaBD->cadastrar($objReceberProcessosPEN); } + $objMetaBD = $this->objMeta; + // Remoção de coluna sin_padrao da tabela md_pen_rel_doc_map_enviado + $this->logar("CRIANDO TABELA DE CONFIGURACAO PARA RESTRICAO "); + $objMetaBD->criarTabela(array( + 'tabela' => 'md_pen_unidade_restricao', + 'cols' => array( + 'id' => array($objMetaBD->tipoNumeroGrande(), PenMetaBD::NNULLO), + 'id_unidade' => array($objMetaBD->tipoNumero(), PenMetaBD::NNULLO), + 'id_unidade_rh' => array($objMetaBD->tipoNumeroGrande(), PenMetaBD::NNULLO), + 'id_unidade_restricao' => array($objMetaBD->tipoNumeroGrande(), PenMetaBD::SNULLO), + 'nome_unidade_restricao' => array($objMetaBD->tipoTextoVariavel(255), PenMetaBD::SNULLO), + 'id_unidade_rh_restricao' => array($objMetaBD->tipoNumeroGrande(), PenMetaBD::SNULLO), + 'nome_unidade_rh_restricao' => array($objMetaBD->tipoTextoVariavel(255), PenMetaBD::SNULLO), + ), + 'pk' => array('cols' => array('id')), + 'fks' => array( + 'unidade' => array('id_unidade', 'id_unidade') + ) + )); + + // Criando nova sequência + $objInfraSequenciaRN = new InfraSequenciaRN(); + $objInfraSequenciaDTO = new InfraSequenciaDTO(); + + //Sequência: md_pen_seq_hipotese_legal + $rs = BancoSEI::getInstance()->consultarSql('select max(id) as total from md_pen_unidade_restricao'); + $numMaxId = $rs[0]['total']; + if ($numMaxId == null) { + $numMaxId = 0; + } + BancoSEI::getInstance()->criarSequencialNativa('md_pen_seq_unidade_restricao', $numMaxId + 1); + $objInfraSequenciaDTO->setStrNome('md_pen_unidade_restricao'); + $objInfraSequenciaDTO->retStrNome(); + $arrObjInfraSequenciaDTO = $objInfraSequenciaRN->listar($objInfraSequenciaDTO); + $objInfraSequenciaRN->excluir($arrObjInfraSequenciaDTO); // Remoção de agendamento de tarefas do verificação dos serviços do Barramento por não ser mais necessário $objInfraAgendamentoTarefaBD = new InfraAgendamentoTarefaBD(BancoSEI::getInstance()); diff --git a/tests_sei4/funcional/src/paginas/PaginaMapUnidades.php b/tests_sei4/funcional/src/paginas/PaginaMapUnidades.php new file mode 100644 index 000000000..6990cd554 --- /dev/null +++ b/tests_sei4/funcional/src/paginas/PaginaMapUnidades.php @@ -0,0 +1,145 @@ +test->byId("txtInfraPesquisarMenu")->value('Listar'); + $this->test->byXPath("//a[@link='pen_map_unidade_listar']")->click(); + } + + /** + * Lispar campo de pesquisa + * Colocar texto para pesquisa + * Clicar no bot?o pesquisar + * + * @param string $textoPesquisa + * @return void + */ + public function pesquisarUnidade($textoPesquisa) + { + $this->test->byId('txtSiglaUnidade')->clear(); + $this->test->byId('txtSiglaUnidade')->value($textoPesquisa); + $this->test->byId("btnPesquisar")->click(); + } + + /** + * Seleciona botão editar da primeira linha de tabela + * + * @return void + */ + public function selecionarEditar() + { + $this->test->byXPath("(//img[@title='Alterar Mapeamento'])[1]")->click(); + } + + public function selecionarRepoEstruturas($textoEstruturas) + { + $this->repoEstruturaInput = $this->test->byId('txtRepoEstruturas'); + $this->repoEstruturaInput->clear(); + $this->repoEstruturaInput->value($textoEstruturas); + $this->test->keys(Keys::ENTER); + $sucesso = $this->test->waitUntil(function($testCase) { + $bolExisteAlerta=null; + $nomeEstrutura = $testCase->byId('txtRepoEstruturas')->value(); + + try{ + $bolExisteAlerta = $this->alertTextAndClose(); + if($bolExisteAlerta!=null)$this->test->keys(Keys::ENTER); + }catch(Exception $e){} + $testCase->byPartialLinkText($nomeEstrutura)->click(); + return true; + }, PEN_WAIT_TIMEOUT); + + $this->test->assertTrue($sucesso); + } + + public function selecionarUnidade($textoUnidade) + { + $this->repoUnidadeInput = $this->test->byId('txtUnidade'); + $this->repoUnidadeInput->clear(); + $this->repoUnidadeInput->value($textoUnidade); + $this->test->keys(Keys::ENTER); + $sucesso = $this->test->waitUntil(function($testCase) { + $bolExisteAlerta=null; + $nomeUnidade = $testCase->byId('txtUnidade')->value(); + + try{ + $bolExisteAlerta = $this->alertTextAndClose(); + if($bolExisteAlerta!=null)$this->test->keys(Keys::ENTER); + }catch(Exception $e){} + $testCase->byPartialLinkText($nomeUnidade)->click(); + return true; + }, PEN_WAIT_TIMEOUT); + + $this->test->assertTrue($sucesso); + } + + /** + * Selcionar botão salvar da página + * + * @return void + */ + public function salvar() + { + $this->test->byId("btnSalvar")->click(); + } + + public function limparRestricoes() + { + $options = $this->test->byId('selRepoEstruturas') + ->elements($this->test->using('css selector')->value('option')); + if (count($options)) { + $this->test->byXPath("//img[@title='Remover Estruturas Selecionadas']")->click(); + } + } + + /** + * Buscar mensagem de alerta da página + * + * @return string + */ + public function buscarMensagemAlerta() + { + $alerta = $this->test->byXPath("(//div[@id='divInfraMsg0'])[1]"); + return !empty($alerta->text()) ? $alerta->text() : ""; + } + + public function validarRepositorio($siglaRepositorio) + { + $repositorioSelect = $this->test->select($this->test->byId('selRepositorioEstruturas')); + + $options = $repositorioSelect + ->elements($this->test->using('css selector')->value('option')); + + $contador = 0; + foreach ($options as $option) { + $value = trim($option->value()); + if (empty($value) || is_null($value) || $value == "null") { + continue; + } + + $contador++; + } + + if(isset($siglaRepositorio)){ + $repositorioSelect->selectOptionByLabel($siglaRepositorio); + } + + $this->test->assertEquals(1, $contador); + + return $this->test->byId('selRepositorioEstruturas')->value(); + } +} diff --git a/tests_sei4/funcional/tests/CenarioBaseTestCase.php b/tests_sei4/funcional/tests/CenarioBaseTestCase.php index 32ff5379e..e0ee2c299 100755 --- a/tests_sei4/funcional/tests/CenarioBaseTestCase.php +++ b/tests_sei4/funcional/tests/CenarioBaseTestCase.php @@ -47,6 +47,7 @@ class CenarioBaseTestCase extends Selenium2TestCase protected $paginaTramiteEmBloco = null; protected $paginaEnvioParcialListar = null; protected $paginaPenHipoteseLegalListar = null; + protected $paginaMapUnidades = null; public function setUpPage(): void { @@ -74,6 +75,7 @@ public function setUpPage(): void $this->paginaTramiteEmBloco = new PaginaTramiteEmBloco($this); $this->paginaEnvioParcialListar = new PaginaEnvioParcialListar($this); $this->paginaPenHipoteseLegalListar = new PaginaPenHipoteseLegalListar($this); + $this->paginaMapUnidades = new PaginaMapUnidades($this); $this->currentWindow()->maximize(); } diff --git a/tests_sei4/funcional/tests/MapeamentoDeUnidadesComLimitacaoDeRepositorios.php b/tests_sei4/funcional/tests/MapeamentoDeUnidadesComLimitacaoDeRepositorios.php new file mode 100644 index 000000000..721ca68b9 --- /dev/null +++ b/tests_sei4/funcional/tests/MapeamentoDeUnidadesComLimitacaoDeRepositorios.php @@ -0,0 +1,155 @@ +definirContextoTeste(CONTEXTO_ORGAO_A); + + $penMapUnidadesFixture = new \PenMapUnidadesFixture(); + $this->penMapUnidadesFixture = $penMapUnidadesFixture->carregar([ + 'Id' => self::$remetente['ID_ESTRUTURA'], + 'Sigla' => self::$remetente['SIGLA_ESTRUTURA'], + 'Nome' => self::$remetente['NOME_UNIDADE'] + ]); + } + + /** + * Teste mapeamento de unidades e limitação dos repositórios para tramite + * + * @return void + */ + public function test_mapeamento_unidades_com_limitacao_de_repositorios() + { + $this->acessarSistema( + self::$remetente['URL'], + self::$remetente['SIGLA_UNIDADE'], + self::$remetente['LOGIN'], + self::$remetente['SENHA'] + ); + $this->paginaMapUnidades->navegarPenMapeamentoUnidades(); + $this->paginaMapUnidades->pesquisarUnidade(self::$remetente['SIGLA_UNIDADE']); + sleep(2); + + $this->paginaMapUnidades->selecionarEditar(); + $this->paginaMapUnidades->limparRestricoes(); + + $this->paginaMapUnidades->selecionarRepoEstruturas(self::$remetente['REP_ESTRUTURAS']); + $this->paginaMapUnidades->selecionarUnidade(self::$remetente['NOME_UNIDADE']); + + $this->paginaMapUnidades->salvar(); + sleep(2); + $mensagem = $this->paginaCadastroOrgaoExterno->buscarMensagemAlerta(); + $this->assertStringContainsString( + 'Mapeamento de Unidade gravado com sucesso.', + $mensagem + ); + $this->sairSistema(); + } + + /** + * Teste para validar se aplicou a restrição de mapeamento de unidades no tramite + * + * @return void + */ + public function test_tramitar_com_limitacao_de_repositorios() + { + $this->criarProcesso(); + + $this->acessarSistema( + self::$remetente['URL'], + self::$remetente['SIGLA_UNIDADE'], + self::$remetente['LOGIN'], + self::$remetente['SENHA'] + ); + + $this->abrirProcesso($this->objProtocoloDTO->getStrProtocoloFormatado()); + + $this->paginaProcesso->navegarParaTramitarProcesso(); + $this->paginaMapUnidades->validarRepositorio(self::$remetente['REP_ESTRUTURAS']); + $this->paginaMapUnidades->selecionarUnidade(self::$remetente['NOME_UNIDADE']); + $this->sairSistema(); + } + + /** + * Criar processo para validar tramitação por Fixture + * + * @return void + */ + private function criarProcesso() + { + $objProtocoloFixture = new ProtocoloFixture(); + $this->objProtocoloDTO = $objProtocoloFixture->carregar([], function ($objProtocoloDTO) { + + $objProcedimentoFixture = new ProcedimentoFixture(); + $objProcedimentoDTO = $objProcedimentoFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo() + ]); + + $objAtividadeFixture = new AtividadeFixture(); + $objAtividadeDTO = $objAtividadeFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(), + ]); + + $objParticipanteFixture = new ParticipanteFixture(); + $objParticipanteFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(), + 'IdContato' => 100000006 + ]); + + $objProtocoloAssuntoFixture = new RelProtocoloAssuntoFixture(); + $objProtocoloAssuntoFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo() + ]); + + $objAtributoAndamentoFixture = new AtributoAndamentoFixture(); + $objAtributoAndamentoFixture->carregar([ + 'IdAtividade' => $objAtividadeDTO->getNumIdAtividade() + ]); + + $objDocumentoFixture = new DocumentoFixture(); + $objDocumentoDTO = $objDocumentoFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(), + 'IdProcedimento' => $objProcedimentoDTO->getDblIdProcedimento(), + 'IdSerie' => 34 + ]); + + $objAtividadeFixture = new AtividadeFixture(); + $objAtividadeDTO = $objAtividadeFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(), + 'IdTarefa' => TarefaRN::$TI_ASSINATURA_DOCUMENTO + ]); + + $objAssinaturaFixture = new AssinaturaFixture(); + $objAssinaturaFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(), + 'IdDocumento' => $objDocumentoDTO->getDblIdDocumento(), + 'IdAtividade' => $objAtividadeDTO->getNumIdAtividade() + ]); + }); + } +} diff --git a/tests_sei41/funcional/src/paginas/PaginaMapUnidades.php b/tests_sei41/funcional/src/paginas/PaginaMapUnidades.php new file mode 100644 index 000000000..6990cd554 --- /dev/null +++ b/tests_sei41/funcional/src/paginas/PaginaMapUnidades.php @@ -0,0 +1,145 @@ +test->byId("txtInfraPesquisarMenu")->value('Listar'); + $this->test->byXPath("//a[@link='pen_map_unidade_listar']")->click(); + } + + /** + * Lispar campo de pesquisa + * Colocar texto para pesquisa + * Clicar no bot?o pesquisar + * + * @param string $textoPesquisa + * @return void + */ + public function pesquisarUnidade($textoPesquisa) + { + $this->test->byId('txtSiglaUnidade')->clear(); + $this->test->byId('txtSiglaUnidade')->value($textoPesquisa); + $this->test->byId("btnPesquisar")->click(); + } + + /** + * Seleciona botão editar da primeira linha de tabela + * + * @return void + */ + public function selecionarEditar() + { + $this->test->byXPath("(//img[@title='Alterar Mapeamento'])[1]")->click(); + } + + public function selecionarRepoEstruturas($textoEstruturas) + { + $this->repoEstruturaInput = $this->test->byId('txtRepoEstruturas'); + $this->repoEstruturaInput->clear(); + $this->repoEstruturaInput->value($textoEstruturas); + $this->test->keys(Keys::ENTER); + $sucesso = $this->test->waitUntil(function($testCase) { + $bolExisteAlerta=null; + $nomeEstrutura = $testCase->byId('txtRepoEstruturas')->value(); + + try{ + $bolExisteAlerta = $this->alertTextAndClose(); + if($bolExisteAlerta!=null)$this->test->keys(Keys::ENTER); + }catch(Exception $e){} + $testCase->byPartialLinkText($nomeEstrutura)->click(); + return true; + }, PEN_WAIT_TIMEOUT); + + $this->test->assertTrue($sucesso); + } + + public function selecionarUnidade($textoUnidade) + { + $this->repoUnidadeInput = $this->test->byId('txtUnidade'); + $this->repoUnidadeInput->clear(); + $this->repoUnidadeInput->value($textoUnidade); + $this->test->keys(Keys::ENTER); + $sucesso = $this->test->waitUntil(function($testCase) { + $bolExisteAlerta=null; + $nomeUnidade = $testCase->byId('txtUnidade')->value(); + + try{ + $bolExisteAlerta = $this->alertTextAndClose(); + if($bolExisteAlerta!=null)$this->test->keys(Keys::ENTER); + }catch(Exception $e){} + $testCase->byPartialLinkText($nomeUnidade)->click(); + return true; + }, PEN_WAIT_TIMEOUT); + + $this->test->assertTrue($sucesso); + } + + /** + * Selcionar botão salvar da página + * + * @return void + */ + public function salvar() + { + $this->test->byId("btnSalvar")->click(); + } + + public function limparRestricoes() + { + $options = $this->test->byId('selRepoEstruturas') + ->elements($this->test->using('css selector')->value('option')); + if (count($options)) { + $this->test->byXPath("//img[@title='Remover Estruturas Selecionadas']")->click(); + } + } + + /** + * Buscar mensagem de alerta da página + * + * @return string + */ + public function buscarMensagemAlerta() + { + $alerta = $this->test->byXPath("(//div[@id='divInfraMsg0'])[1]"); + return !empty($alerta->text()) ? $alerta->text() : ""; + } + + public function validarRepositorio($siglaRepositorio) + { + $repositorioSelect = $this->test->select($this->test->byId('selRepositorioEstruturas')); + + $options = $repositorioSelect + ->elements($this->test->using('css selector')->value('option')); + + $contador = 0; + foreach ($options as $option) { + $value = trim($option->value()); + if (empty($value) || is_null($value) || $value == "null") { + continue; + } + + $contador++; + } + + if(isset($siglaRepositorio)){ + $repositorioSelect->selectOptionByLabel($siglaRepositorio); + } + + $this->test->assertEquals(1, $contador); + + return $this->test->byId('selRepositorioEstruturas')->value(); + } +} diff --git a/tests_sei41/funcional/tests/CenarioBaseTestCase.php b/tests_sei41/funcional/tests/CenarioBaseTestCase.php index 5b460d2cf..4ede0c589 100755 --- a/tests_sei41/funcional/tests/CenarioBaseTestCase.php +++ b/tests_sei41/funcional/tests/CenarioBaseTestCase.php @@ -47,6 +47,7 @@ class CenarioBaseTestCase extends Selenium2TestCase protected $paginaTramiteEmBloco = null; protected $paginaEnvioParcialListar = null; protected $paginaPenHipoteseLegalListar = null; + protected $paginaMapUnidades = null; public function setUpPage(): void { @@ -75,6 +76,7 @@ public function setUpPage(): void $this->paginaTramiteEmBloco = new PaginaTramiteEmBloco($this); $this->paginaEnvioParcialListar = new PaginaEnvioParcialListar($this); $this->paginaPenHipoteseLegalListar = new PaginaPenHipoteseLegalListar($this); + $this->paginaMapUnidades = new PaginaMapUnidades($this); $this->currentWindow()->maximize(); } diff --git a/tests_sei41/funcional/tests/MapeamentoDeUnidadesComLimitacaoDeRepositorios.php b/tests_sei41/funcional/tests/MapeamentoDeUnidadesComLimitacaoDeRepositorios.php new file mode 100644 index 000000000..721ca68b9 --- /dev/null +++ b/tests_sei41/funcional/tests/MapeamentoDeUnidadesComLimitacaoDeRepositorios.php @@ -0,0 +1,155 @@ +definirContextoTeste(CONTEXTO_ORGAO_A); + + $penMapUnidadesFixture = new \PenMapUnidadesFixture(); + $this->penMapUnidadesFixture = $penMapUnidadesFixture->carregar([ + 'Id' => self::$remetente['ID_ESTRUTURA'], + 'Sigla' => self::$remetente['SIGLA_ESTRUTURA'], + 'Nome' => self::$remetente['NOME_UNIDADE'] + ]); + } + + /** + * Teste mapeamento de unidades e limitação dos repositórios para tramite + * + * @return void + */ + public function test_mapeamento_unidades_com_limitacao_de_repositorios() + { + $this->acessarSistema( + self::$remetente['URL'], + self::$remetente['SIGLA_UNIDADE'], + self::$remetente['LOGIN'], + self::$remetente['SENHA'] + ); + $this->paginaMapUnidades->navegarPenMapeamentoUnidades(); + $this->paginaMapUnidades->pesquisarUnidade(self::$remetente['SIGLA_UNIDADE']); + sleep(2); + + $this->paginaMapUnidades->selecionarEditar(); + $this->paginaMapUnidades->limparRestricoes(); + + $this->paginaMapUnidades->selecionarRepoEstruturas(self::$remetente['REP_ESTRUTURAS']); + $this->paginaMapUnidades->selecionarUnidade(self::$remetente['NOME_UNIDADE']); + + $this->paginaMapUnidades->salvar(); + sleep(2); + $mensagem = $this->paginaCadastroOrgaoExterno->buscarMensagemAlerta(); + $this->assertStringContainsString( + 'Mapeamento de Unidade gravado com sucesso.', + $mensagem + ); + $this->sairSistema(); + } + + /** + * Teste para validar se aplicou a restrição de mapeamento de unidades no tramite + * + * @return void + */ + public function test_tramitar_com_limitacao_de_repositorios() + { + $this->criarProcesso(); + + $this->acessarSistema( + self::$remetente['URL'], + self::$remetente['SIGLA_UNIDADE'], + self::$remetente['LOGIN'], + self::$remetente['SENHA'] + ); + + $this->abrirProcesso($this->objProtocoloDTO->getStrProtocoloFormatado()); + + $this->paginaProcesso->navegarParaTramitarProcesso(); + $this->paginaMapUnidades->validarRepositorio(self::$remetente['REP_ESTRUTURAS']); + $this->paginaMapUnidades->selecionarUnidade(self::$remetente['NOME_UNIDADE']); + $this->sairSistema(); + } + + /** + * Criar processo para validar tramitação por Fixture + * + * @return void + */ + private function criarProcesso() + { + $objProtocoloFixture = new ProtocoloFixture(); + $this->objProtocoloDTO = $objProtocoloFixture->carregar([], function ($objProtocoloDTO) { + + $objProcedimentoFixture = new ProcedimentoFixture(); + $objProcedimentoDTO = $objProcedimentoFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo() + ]); + + $objAtividadeFixture = new AtividadeFixture(); + $objAtividadeDTO = $objAtividadeFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(), + ]); + + $objParticipanteFixture = new ParticipanteFixture(); + $objParticipanteFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(), + 'IdContato' => 100000006 + ]); + + $objProtocoloAssuntoFixture = new RelProtocoloAssuntoFixture(); + $objProtocoloAssuntoFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo() + ]); + + $objAtributoAndamentoFixture = new AtributoAndamentoFixture(); + $objAtributoAndamentoFixture->carregar([ + 'IdAtividade' => $objAtividadeDTO->getNumIdAtividade() + ]); + + $objDocumentoFixture = new DocumentoFixture(); + $objDocumentoDTO = $objDocumentoFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(), + 'IdProcedimento' => $objProcedimentoDTO->getDblIdProcedimento(), + 'IdSerie' => 34 + ]); + + $objAtividadeFixture = new AtividadeFixture(); + $objAtividadeDTO = $objAtividadeFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(), + 'IdTarefa' => TarefaRN::$TI_ASSINATURA_DOCUMENTO + ]); + + $objAssinaturaFixture = new AssinaturaFixture(); + $objAssinaturaFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(), + 'IdDocumento' => $objDocumentoDTO->getDblIdDocumento(), + 'IdAtividade' => $objAtividadeDTO->getNumIdAtividade() + ]); + }); + } +} diff --git a/tests_super/funcional/src/paginas/PaginaMapUnidades.php b/tests_super/funcional/src/paginas/PaginaMapUnidades.php new file mode 100644 index 000000000..6990cd554 --- /dev/null +++ b/tests_super/funcional/src/paginas/PaginaMapUnidades.php @@ -0,0 +1,145 @@ +test->byId("txtInfraPesquisarMenu")->value('Listar'); + $this->test->byXPath("//a[@link='pen_map_unidade_listar']")->click(); + } + + /** + * Lispar campo de pesquisa + * Colocar texto para pesquisa + * Clicar no bot?o pesquisar + * + * @param string $textoPesquisa + * @return void + */ + public function pesquisarUnidade($textoPesquisa) + { + $this->test->byId('txtSiglaUnidade')->clear(); + $this->test->byId('txtSiglaUnidade')->value($textoPesquisa); + $this->test->byId("btnPesquisar")->click(); + } + + /** + * Seleciona botão editar da primeira linha de tabela + * + * @return void + */ + public function selecionarEditar() + { + $this->test->byXPath("(//img[@title='Alterar Mapeamento'])[1]")->click(); + } + + public function selecionarRepoEstruturas($textoEstruturas) + { + $this->repoEstruturaInput = $this->test->byId('txtRepoEstruturas'); + $this->repoEstruturaInput->clear(); + $this->repoEstruturaInput->value($textoEstruturas); + $this->test->keys(Keys::ENTER); + $sucesso = $this->test->waitUntil(function($testCase) { + $bolExisteAlerta=null; + $nomeEstrutura = $testCase->byId('txtRepoEstruturas')->value(); + + try{ + $bolExisteAlerta = $this->alertTextAndClose(); + if($bolExisteAlerta!=null)$this->test->keys(Keys::ENTER); + }catch(Exception $e){} + $testCase->byPartialLinkText($nomeEstrutura)->click(); + return true; + }, PEN_WAIT_TIMEOUT); + + $this->test->assertTrue($sucesso); + } + + public function selecionarUnidade($textoUnidade) + { + $this->repoUnidadeInput = $this->test->byId('txtUnidade'); + $this->repoUnidadeInput->clear(); + $this->repoUnidadeInput->value($textoUnidade); + $this->test->keys(Keys::ENTER); + $sucesso = $this->test->waitUntil(function($testCase) { + $bolExisteAlerta=null; + $nomeUnidade = $testCase->byId('txtUnidade')->value(); + + try{ + $bolExisteAlerta = $this->alertTextAndClose(); + if($bolExisteAlerta!=null)$this->test->keys(Keys::ENTER); + }catch(Exception $e){} + $testCase->byPartialLinkText($nomeUnidade)->click(); + return true; + }, PEN_WAIT_TIMEOUT); + + $this->test->assertTrue($sucesso); + } + + /** + * Selcionar botão salvar da página + * + * @return void + */ + public function salvar() + { + $this->test->byId("btnSalvar")->click(); + } + + public function limparRestricoes() + { + $options = $this->test->byId('selRepoEstruturas') + ->elements($this->test->using('css selector')->value('option')); + if (count($options)) { + $this->test->byXPath("//img[@title='Remover Estruturas Selecionadas']")->click(); + } + } + + /** + * Buscar mensagem de alerta da página + * + * @return string + */ + public function buscarMensagemAlerta() + { + $alerta = $this->test->byXPath("(//div[@id='divInfraMsg0'])[1]"); + return !empty($alerta->text()) ? $alerta->text() : ""; + } + + public function validarRepositorio($siglaRepositorio) + { + $repositorioSelect = $this->test->select($this->test->byId('selRepositorioEstruturas')); + + $options = $repositorioSelect + ->elements($this->test->using('css selector')->value('option')); + + $contador = 0; + foreach ($options as $option) { + $value = trim($option->value()); + if (empty($value) || is_null($value) || $value == "null") { + continue; + } + + $contador++; + } + + if(isset($siglaRepositorio)){ + $repositorioSelect->selectOptionByLabel($siglaRepositorio); + } + + $this->test->assertEquals(1, $contador); + + return $this->test->byId('selRepositorioEstruturas')->value(); + } +} diff --git a/tests_super/funcional/tests/CenarioBaseTestCase.php b/tests_super/funcional/tests/CenarioBaseTestCase.php index 6f0a9e84b..3032d1d41 100755 --- a/tests_super/funcional/tests/CenarioBaseTestCase.php +++ b/tests_super/funcional/tests/CenarioBaseTestCase.php @@ -50,6 +50,7 @@ class CenarioBaseTestCase extends Selenium2TestCase protected $paginaTramiteEmBloco = null; protected $paginaEnvioParcialListar = null; protected $paginaPenHipoteseLegalListar = null; + protected $paginaMapUnidades = null; public function setUpPage(): void { @@ -79,7 +80,7 @@ public function setUpPage(): void $this->paginaTramiteEmBloco = new PaginaTramiteEmBloco($this); $this->paginaEnvioParcialListar = new PaginaEnvioParcialListar($this); $this->paginaPenHipoteseLegalListar = new PaginaPenHipoteseLegalListar($this); - + $this->paginaMapUnidades = new PaginaMapUnidades($this); $this->currentWindow()->maximize(); } diff --git a/tests_super/funcional/tests/MapeamentoDeUnidadesComLimitacaoDeRepositorios.php b/tests_super/funcional/tests/MapeamentoDeUnidadesComLimitacaoDeRepositorios.php new file mode 100644 index 000000000..721ca68b9 --- /dev/null +++ b/tests_super/funcional/tests/MapeamentoDeUnidadesComLimitacaoDeRepositorios.php @@ -0,0 +1,155 @@ +definirContextoTeste(CONTEXTO_ORGAO_A); + + $penMapUnidadesFixture = new \PenMapUnidadesFixture(); + $this->penMapUnidadesFixture = $penMapUnidadesFixture->carregar([ + 'Id' => self::$remetente['ID_ESTRUTURA'], + 'Sigla' => self::$remetente['SIGLA_ESTRUTURA'], + 'Nome' => self::$remetente['NOME_UNIDADE'] + ]); + } + + /** + * Teste mapeamento de unidades e limitação dos repositórios para tramite + * + * @return void + */ + public function test_mapeamento_unidades_com_limitacao_de_repositorios() + { + $this->acessarSistema( + self::$remetente['URL'], + self::$remetente['SIGLA_UNIDADE'], + self::$remetente['LOGIN'], + self::$remetente['SENHA'] + ); + $this->paginaMapUnidades->navegarPenMapeamentoUnidades(); + $this->paginaMapUnidades->pesquisarUnidade(self::$remetente['SIGLA_UNIDADE']); + sleep(2); + + $this->paginaMapUnidades->selecionarEditar(); + $this->paginaMapUnidades->limparRestricoes(); + + $this->paginaMapUnidades->selecionarRepoEstruturas(self::$remetente['REP_ESTRUTURAS']); + $this->paginaMapUnidades->selecionarUnidade(self::$remetente['NOME_UNIDADE']); + + $this->paginaMapUnidades->salvar(); + sleep(2); + $mensagem = $this->paginaCadastroOrgaoExterno->buscarMensagemAlerta(); + $this->assertStringContainsString( + 'Mapeamento de Unidade gravado com sucesso.', + $mensagem + ); + $this->sairSistema(); + } + + /** + * Teste para validar se aplicou a restrição de mapeamento de unidades no tramite + * + * @return void + */ + public function test_tramitar_com_limitacao_de_repositorios() + { + $this->criarProcesso(); + + $this->acessarSistema( + self::$remetente['URL'], + self::$remetente['SIGLA_UNIDADE'], + self::$remetente['LOGIN'], + self::$remetente['SENHA'] + ); + + $this->abrirProcesso($this->objProtocoloDTO->getStrProtocoloFormatado()); + + $this->paginaProcesso->navegarParaTramitarProcesso(); + $this->paginaMapUnidades->validarRepositorio(self::$remetente['REP_ESTRUTURAS']); + $this->paginaMapUnidades->selecionarUnidade(self::$remetente['NOME_UNIDADE']); + $this->sairSistema(); + } + + /** + * Criar processo para validar tramitação por Fixture + * + * @return void + */ + private function criarProcesso() + { + $objProtocoloFixture = new ProtocoloFixture(); + $this->objProtocoloDTO = $objProtocoloFixture->carregar([], function ($objProtocoloDTO) { + + $objProcedimentoFixture = new ProcedimentoFixture(); + $objProcedimentoDTO = $objProcedimentoFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo() + ]); + + $objAtividadeFixture = new AtividadeFixture(); + $objAtividadeDTO = $objAtividadeFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(), + ]); + + $objParticipanteFixture = new ParticipanteFixture(); + $objParticipanteFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(), + 'IdContato' => 100000006 + ]); + + $objProtocoloAssuntoFixture = new RelProtocoloAssuntoFixture(); + $objProtocoloAssuntoFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo() + ]); + + $objAtributoAndamentoFixture = new AtributoAndamentoFixture(); + $objAtributoAndamentoFixture->carregar([ + 'IdAtividade' => $objAtividadeDTO->getNumIdAtividade() + ]); + + $objDocumentoFixture = new DocumentoFixture(); + $objDocumentoDTO = $objDocumentoFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(), + 'IdProcedimento' => $objProcedimentoDTO->getDblIdProcedimento(), + 'IdSerie' => 34 + ]); + + $objAtividadeFixture = new AtividadeFixture(); + $objAtividadeDTO = $objAtividadeFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(), + 'IdTarefa' => TarefaRN::$TI_ASSINATURA_DOCUMENTO + ]); + + $objAssinaturaFixture = new AssinaturaFixture(); + $objAssinaturaFixture->carregar([ + 'IdProtocolo' => $objProtocoloDTO->getDblIdProtocolo(), + 'IdDocumento' => $objDocumentoDTO->getDblIdDocumento(), + 'IdAtividade' => $objAtividadeDTO->getNumIdAtividade() + ]); + }); + } +}