From c6afb3f13c95c207691b24be42fe0c4bee8e8733 Mon Sep 17 00:00:00 2001 From: Matheus Marques Date: Thu, 16 Mar 2023 18:16:56 -0300 Subject: [PATCH 1/2] feat: Adicionado rotina de reenvio do processo bloqueado por um envio anterior --- src/PENIntegracao.php | 17 +- src/pen_reenviar_processo.php | 553 ++++++++++++++++++ .../sip_atualizar_versao_modulo_pen.php | 11 + 3 files changed, 578 insertions(+), 3 deletions(-) create mode 100644 src/pen_reenviar_processo.php diff --git a/src/PENIntegracao.php b/src/PENIntegracao.php index b8d7728be..49b886c82 100755 --- a/src/PENIntegracao.php +++ b/src/PENIntegracao.php @@ -1,7 +1,7 @@ '; } + + // Reenvio externo de processos + $bolAcaoReenviarProcesso = $objSessaoSEI->verificarPermissao('pen_reenviar_processo'); + if ($bolAcaoReenviarProcesso && ($objAtividadeDTO && $objAtividadeDTO->getNumIdTarefa() == ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO))) { + $numTabBotao = $objPaginaSEI->getProxTabBarraComandosSuperior(); + $strAcoesProcedimento .= 'Reenvio Externo de Processo'; + } return array($strAcoesProcedimento); } @@ -474,6 +481,10 @@ public function processarControlador($strAcao) case 'pen_expedir_lote_listar': require_once dirname(__FILE__) . '/pen_expedir_lote_listar.php'; break; + + case 'pen_reenviar_processo': + require_once dirname(__FILE__) . '/pen_reenviar_processo.php'; + break; default: return false; @@ -664,12 +675,12 @@ public static function verificarCompatibilidadeConfiguracoes(){ */ public static function compararVersoes($strVersao1, $strVersao2){ $numVersao1 = explode('.', $strVersao1); - $numVersao1 = array_map(function($item){ return str_pad($item, 2, '0', STR_PAD_LEFT); + $numVersao1 = array_map(function($item){ return str_pad($item, 2, '0', STR_PAD_LEFT); }, $numVersao1); $numVersao1 = intval(join($numVersao1)); $numVersao2 = explode('.', $strVersao2); - $numVersao2 = array_map(function($item){ return str_pad($item, 2, '0', STR_PAD_LEFT); + $numVersao2 = array_map(function($item){ return str_pad($item, 2, '0', STR_PAD_LEFT); }, $numVersao2); $numVersao2 = intval(join($numVersao2)); diff --git a/src/pen_reenviar_processo.php b/src/pen_reenviar_processo.php new file mode 100644 index 000000000..2c203520d --- /dev/null +++ b/src/pen_reenviar_processo.php @@ -0,0 +1,553 @@ +setBolLigado(true); + //InfraDebug::getInstance()->setBolDebugInfra(true); + //InfraDebug::getInstance()->limpar(); + ////////////////////////////////////////////////////////////////////////////// + + $objSessaoSEI = SessaoSEI::getInstance(); + $objPaginaSEI = PaginaSEI::getInstance(); + + $objSessaoSEI->validarLink(); + $objSessaoSEI->validarPermissao($_GET['acao']); + + $strParametros = ''; + $bolErrosValidacao = false; + $executarExpedicao = false; + $arrComandos = array(); + $objExpedirProcedimentosRN = new ExpedirProcedimentoRN(); + + $idProcedimento = filter_var($_GET['id_procedimento'], FILTER_SANITIZE_NUMBER_INT); + $strDiretorioModulo = PENIntegracao::getDiretorio(); + + if(!$idProcedimento){ + throw new InfraException('Processo não informado.'); + } + + if ($idProcedimento) { + $strParametros .= '&id_procedimento=' . $idProcedimento; + } + + if (isset($_GET['arvore'])) { + $objPaginaSEI->setBolArvore($_GET['arvore']); + $strParametros .= '&arvore=' . $_GET['arvore']; + } + + if (isset($_GET['executar'])) { + $executarExpedicao = filter_var($_GET['executar'], FILTER_VALIDATE_BOOLEAN); + } + + $strLinkValidacao = $objPaginaSEI->formatarXHTML($objSessaoSEI->assinarLink('controlador.php?acao=' . $_GET['acao'] . '&acao_origem=' . $_GET['acao'] . $strParametros)); + $strLinkProcedimento = $objSessaoSEI->assinarLink('controlador.php?acao=procedimento_trabalhar&acao_origem=procedimento_controlar&acao_retorno=procedimento_controlar&id_procedimento='.$idProcedimento); + + switch ($_GET['acao']) { + + case 'pen_reenviar_processo': + $strTitulo = 'Reenvio Externo de Processo'; + $arrComandos[] = ''; + $arrComandos[] = ''; + + //Carregar dados do procedimento no primeiro acesso à página + if (!isset($_POST['hdnIdProcedimento'])) { + $objProcedimentoRN = new ProcedimentoRN(); + $objProcedimentoDTO = $objExpedirProcedimentosRN->consultarProcedimento($idProcedimento); + $numIdProcedimento = $objProcedimentoDTO->getDblIdProcedimento(); + $strProtocoloProcedimentoFormatado = $objProcedimentoDTO->getStrProtocoloProcedimentoFormatado(); + } + + // + $procedimentoAndamentoDTO = new ProcedimentoAndamentoDTO(); + $procedimentoAndamentoDTO->retNumIdEstruturaDestino(); + $procedimentoAndamentoDTO->retNumIdRepositorioDestino(); + $procedimentoAndamentoDTO->setDistinct(true); + $procedimentoAndamentoDTO->setDblIdProcedimento($idProcedimento); + + $procedimentoAndamentoRN = new ProcedimentoAndamentoRN(); + $arrObjProcedimentoAndamentoDTO = $procedimentoAndamentoRN->listar($procedimentoAndamentoDTO); + $objProcedimentoAndamentoDTO = $arrObjProcedimentoAndamentoDTO[0]; + + $numIdRepositorio = $objProcedimentoAndamentoDTO->getNumIdRepositorioDestino(); + $numIdUnidadeDestino = $objProcedimentoAndamentoDTO->getNumIdEstruturaDestino(); + + $objConecaoWebServerRN = new ProcessoEletronicoRN(); + $arrObjEstruturas = $objConecaoWebServerRN->consultarEstrutura($numIdRepositorio, $numIdUnidadeDestino, false); + $strNomeUnidadeDestino = $arrObjEstruturas->getStrNome(); + + //Obter dados do repositório em que o SEI está registrado (Repositório de Origem) + $objPenParametroRN = new PenParametroRN(); + $numIdRepositorioOrigem = $objPenParametroRN->getParametro('PEN_ID_REPOSITORIO_ORIGEM'); + + //Preparação dos dados para montagem da tela de expedição de processos + $repositorios = $objExpedirProcedimentosRN->listarRepositoriosDeEstruturas(); + $motivosDeUrgencia = $objExpedirProcedimentosRN->consultarMotivosUrgencia(); + + $idRepositorioSelecionado = (isset($numIdRepositorio)) ? $numIdRepositorio : ''; + $strItensSelRepositorioEstruturas = InfraINT::montarSelectArray('', 'Selecione', $idRepositorioSelecionado, $repositorios); + + $idMotivosUrgenciaSelecionado = (isset($idMotivosUrgenciaSelecionado)) ? $idMotivosUrgenciaSelecionado : ''; + $strItensSelMotivosUrgencia = InfraINT::montarSelectArray('', 'Selecione', $idMotivosUrgenciaSelecionado, $motivosDeUrgencia); + + $strLinkAjaxUnidade = $objSessaoSEI->assinarLink('controlador_ajax.php?acao_ajax=pen_unidade_auto_completar_expedir_procedimento&acao=' . $_GET['acao']); + $strLinkAjaxProcedimentoApensado = $objSessaoSEI->assinarLink('controlador_ajax.php?acao_ajax=pen_apensados_auto_completar_expedir_procedimento'); + + $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."); + } + + if(isset($_POST['sbmExpedir'])) { + $numVersao = $objPaginaSEI->getNumVersao(); + $numIdMotivoUrgente = $_POST['selMotivosUrgencia']; + $numIdProcedimento = $_POST['hdnIdProcedimento']; + $numIdUnidadeOrigem = $objUnidadeDTO->getNumIdUnidadeRH(); + $boolSinUrgente = $objPaginaSEI->getCheckbox($_POST['chkSinUrgente'], true, false); + $arrIdProcedimentosApensados = $objPaginaSEI->getArrValuesSelect($_POST['hdnProcedimentosApensados']); + echo "\n"; + echo ""; + + $strTituloPagina = "Reenvio externo do processo $strProtocoloProcedimentoFormatado"; + $objPaginaSEI->prepararBarraProgresso($strTitulo, $strTituloPagina); + + $objExpedirProcedimentoDTO = new ExpedirProcedimentoDTO(); + $objExpedirProcedimentoDTO->setNumIdRepositorioOrigem($numIdRepositorioOrigem); + $objExpedirProcedimentoDTO->setNumIdUnidadeOrigem($numIdUnidadeOrigem); + + $objExpedirProcedimentoDTO->setNumIdRepositorioDestino($numIdRepositorio); + $objExpedirProcedimentoDTO->setStrRepositorioDestino($strRepositorio); + $objExpedirProcedimentoDTO->setNumIdUnidadeDestino($numIdUnidadeDestino); + $objExpedirProcedimentoDTO->setStrUnidadeDestino($strNomeUnidadeDestino); + $objExpedirProcedimentoDTO->setArrIdProcessoApensado($arrIdProcedimentosApensados); + $objExpedirProcedimentoDTO->setBolSinUrgente($boolSinUrgente); + $objExpedirProcedimentoDTO->setDblIdProcedimento($numIdProcedimento); + $objExpedirProcedimentoDTO->setNumIdMotivoUrgencia($numIdMotivoUrgente); + $objExpedirProcedimentoDTO->setBolSinProcessamentoEmLote(false); + $objExpedirProcedimentoDTO->setNumIdLote(null); + $objExpedirProcedimentoDTO->setNumIdAtividade(null); + $objExpedirProcedimentoDTO->setNumIdUnidade(null); + + try { + $objExpedirProcedimentosRN->setEventoEnvioMetadados(function($parNumIdTramite) use ($strLinkProcedimento){ + $strLinkCancelarAjax = SessaoSEI::getInstance()->assinarLink('controlador_ajax.php?acao_ajax=pen_procedimento_expedir_cancelar&id_tramite='.$parNumIdTramite); + echo " "; + }); + + $respostaExpedir = $objExpedirProcedimentosRN->expedirProcedimento($objExpedirProcedimentoDTO); + $bolBotaoFecharCss = InfraUtil::compararVersoes(SEI_VERSAO, ">", "4.0.1"); + + // Muda situação da barra de progresso para Concluído + echo " "; + } catch(\Exception $e) { + $objPaginaSEI->processarExcecao($e); + echo " "; + } + + $objPaginaSEI->finalizarBarraProgresso(null, false); + } + + break; + default: + throw new InfraException("Ação '" . $_GET['acao'] . "' não reconhecida."); + } + +} catch (Exception $e) { + throw new InfraException("Erro processando requisição de reenvio externo de processo", $e); +} + +$objPaginaSEI->montarDocType(); +$objPaginaSEI->abrirHtml(); +$objPaginaSEI->abrirHead(); +$objPaginaSEI->montarMeta(); +$objPaginaSEI->montarTitle(':: ' . $objPaginaSEI->getStrNomeSistema() . ' - ' . $strTitulo . ' ::'); +$objPaginaSEI->montarStyle(); +echo "\n"; + +$objPaginaSEI->abrirStyle(); +?> + +div.infraAreaDados { + margin-bottom: 10px; +} + +#lblProtocoloExibir {position:absolute;left:0%;top:0%;} +#txtProtocoloExibir {position:absolute;left:0%;top:38%;width:51%;} + +#lblRepositorioEstruturas {position:absolute;left:0%;top:0%;width:50%;} +#selRepositorioEstruturas {position:absolute;left:0%;top:38%;width:51%;} + +#lblUnidades {position:absolute;left:0%;top:0%;} +#txtUnidade {left:0%;top:38%;width:60%;border:.1em solid #666;} +#imgLupaUnidades {position:absolute;left:52%;top:48%;} + +.alinhamentoBotaoImput{position:absolute;left:0%;top:48%;width:85%;}; + +#btnIdUnidade {float: right;} +#imgPesquisaAvancada { + vertical-align: middle; + margin-left: 10px; + width: 20px; + height: 20px; +} + +#lblProcedimentosApensados {position:absolute;left:0%;top:0%;} +#txtProcedimentoApensado {position:absolute;left:0%;top:25%;width:50%;border:.1em solid #666;} + +#selProcedimentosApensados {position:absolute;left:0%;top:43%;width:86%;} +#imgLupaProcedimentosApensados {position:absolute;left:87%;top:43%;} +#imgExcluirProcedimentosApensados {position:absolute;left:87%;top:60%;} + +#lblMotivosUrgencia {position:absolute;left:0%;top:0%;width:50%;} +#selMotivosUrgencia {position:absolute;left:0%;top:38%;width:51%;} + + +fecharStyle(); +$objPaginaSEI->montarJavaScript(); +?> + +fecharHead(); +$objPaginaSEI->abrirBody($strTitulo, 'onload="inicializar();"'); +?> +
+ + +montarBarraComandosSuperior($arrComandos); +?> +
+ + +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ + + + + + + + + + +montarBarraComandosInferior($arrComandos); +?> +
+montarAreaDebug(); +$objPaginaSEI->fecharBody(); +$objPaginaSEI->fecharHtml(); +?> diff --git a/src/scripts/sip_atualizar_versao_modulo_pen.php b/src/scripts/sip_atualizar_versao_modulo_pen.php index 21f5e0e39..8742f0f66 100755 --- a/src/scripts/sip_atualizar_versao_modulo_pen.php +++ b/src/scripts/sip_atualizar_versao_modulo_pen.php @@ -278,6 +278,8 @@ protected function atualizarVersaoConectado() $this->instalarV3022(); case '3.2.2': $this->instalarV3023(); + case '3.2.4': + $this->instalarV3024(); break; // Ausência de [break;] proposital para realizar a atualização incremental de versões @@ -1799,6 +1801,15 @@ protected function instalarV3023() $this->atualizarNumeroVersao("3.2.3"); } + protected function instalarV3024() + { + $numIdSistema = $this->getNumIdSistema('SEI'); + $numIdPerfilSeiAdministrador = ScriptSip::obterIdPerfil($numIdSistema, "Administrador"); + $this->criarRecurso('pen_reenviar_processo', 'Reenviar processo bloqueado por envio anterior', $numIdSistema); + ScriptSip::adicionarRecursoPerfil($numIdSistema, $numIdPerfilSeiAdministrador, 'pen_reenviar_processo'); + $this->atualizarNumeroVersao("3.2.4"); + } + } From 01c78831c3b50e72e54f54a983a9ef19c73083c0 Mon Sep 17 00:00:00 2001 From: Matheus Marques Date: Tue, 20 Jun 2023 12:51:03 -0300 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20Foram=20adicionadas=20duas=20novas?= =?UTF-8?q?=20regras=20s=C3=A3o=20elas:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1° O botão reenviar processo só é exibido quando o processo está bloqueado na origem e com o trâmite na situação Tramitação externa do processo XXXXXX.XXXXXX/XXXX-XX concluída com sucesso Alterado o ícone de reenvio externo de processo --- src/PENIntegracao.php | 2 +- src/imagens/pen_enviar.svg | 25 ++++++++++++++++++++++++ src/int/ProcessoEletronicoINT.php | 2 +- src/pen_procedimento_expedir_validar.php | 6 ++++++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 src/imagens/pen_enviar.svg diff --git a/src/PENIntegracao.php b/src/PENIntegracao.php index c49786d32..a23096266 100755 --- a/src/PENIntegracao.php +++ b/src/PENIntegracao.php @@ -161,7 +161,7 @@ public function montarBotaoProcesso(ProcedimentoAPI $objSeiIntegracaoDTO) // Reenvio externo de processos $bolAcaoReenviarProcesso = $objSessaoSEI->verificarPermissao('pen_reenviar_processo'); - if ($bolAcaoReenviarProcesso && ($objAtividadeDTO && $objAtividadeDTO->getNumIdTarefa() == ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO))) { + if ($bolAcaoReenviarProcesso && ($objAtividadeDTO && $objAtividadeDTO->getNumIdTarefa() == ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_EXTERNO)) && $objProcedimentoDTO->getStrStaEstadoProtocolo() == ProtocoloRN::$TE_PROCEDIMENTO_BLOQUEADO) { $numTabBotao = $objPaginaSEI->getProxTabBarraComandosSuperior(); $strAcoesProcedimento .= 'Reenvio Externo de Processo'; } diff --git a/src/imagens/pen_enviar.svg b/src/imagens/pen_enviar.svg new file mode 100644 index 000000000..e700993dd --- /dev/null +++ b/src/imagens/pen_enviar.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + diff --git a/src/int/ProcessoEletronicoINT.php b/src/int/ProcessoEletronicoINT.php index 8729da4b9..ec70bf064 100755 --- a/src/int/ProcessoEletronicoINT.php +++ b/src/int/ProcessoEletronicoINT.php @@ -120,7 +120,7 @@ public static function getCaminhoIcone($imagem, $relPath = null) { case '/pen_expedir_procedimento.gif': // return '/infra_css/svg/upload.svg'; // return 'svg/arquivo_mapeamento_assunto.svg'; - return 'modulos/' . $strModulo . '/imagens/pen_enviar.png'; + return 'modulos/' . $strModulo . '/imagens/pen_enviar.svg'; break; case '/pen_consultar_recibos.png': // return '/infra_css/svg/pesquisar.svg'; diff --git a/src/pen_procedimento_expedir_validar.php b/src/pen_procedimento_expedir_validar.php index f474e01ed..98b598892 100755 --- a/src/pen_procedimento_expedir_validar.php +++ b/src/pen_procedimento_expedir_validar.php @@ -39,6 +39,12 @@ $objInfraException->adicionarValidacao('Informe Unidade de destino', $strProtocoloFormatado); } + if (isset($_POST['penReenviarProcesso'])) { + $objProcedimentoDTO->setBolPenReenviarProcesso($_POST['penReenviarProcesso']); + } else { + $objProcedimentoDTO->setBolPenReenviarProcesso(false); + } + if(!$objInfraException->contemValidacoes()) { $objProcedimentoDTO->setArrObjDocumentoDTO($objExpedirProcedimentosRN->listarDocumentos($dblIdProcedimento)); $objProcedimentoDTO->setArrObjParticipanteDTO($objExpedirProcedimentosRN->listarInteressados($dblIdProcedimento));