From cd67ddcb1649209e2eb22b1d9d7639f45a361110 Mon Sep 17 00:00:00 2001 From: Josinaldo Junior Date: Thu, 14 Mar 2019 12:53:15 -0300 Subject: [PATCH] Implementação de recebimento de documentos avulsos para homologação --- pen_procedimento_estado.php | 3 +++ rn/ExpedirProcedimentoRN.php | 2 +- rn/PenAtividadeRN.php | 10 ++++++++++ rn/PenAtualizarSeiRN.php | 45 +++++++++++++++++++++++++++++++++++++++++++++ rn/ProcessoEletronicoRN.php | 40 +++++++++++++++++++++++----------------- rn/ReceberProcedimentoRN.php | 223 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------- rn/ReciboTramiteRN.php | 5 +++-- 7 files changed, 221 insertions(+), 107 deletions(-) diff --git a/pen_procedimento_estado.php b/pen_procedimento_estado.php index 267b9da..1d04ab5 100644 --- a/pen_procedimento_estado.php +++ b/pen_procedimento_estado.php @@ -208,10 +208,13 @@ try { $arrAgruparProcedimentoAndamentoDTO = array(); foreach($arrObjProcedimentoAndamentoDTO as &$objProcedimentoAndamentoDTO){ +// print_r($objProcedimentoAndamentoDTO->getNumTarefa()); die; if(ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO) == $objProcedimentoAndamentoDTO->getNumTarefa()) $numIdEstrutura = $objProcedimentoAndamentoDTO->getNumIdEstruturaDestino(); elseif (ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO) == $objProcedimentoAndamentoDTO->getNumTarefa()) $numIdEstrutura = $objProcedimentoAndamentoDTO->getNumIdEstruturaOrigem(); + elseif (ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_DOCUMENTO_AVULSO_RECEBIDO) == $objProcedimentoAndamentoDTO->getNumTarefa()) + $numIdEstrutura = $objProcedimentoAndamentoDTO->getNumIdEstruturaOrigem(); $key = $objProcedimentoAndamentoDTO->getDblIdTramite() . '-' . $numIdEstrutura . '-' . $objProcedimentoAndamentoDTO->getNumTarefa(); $arrAgruparProcedimentoAndamentoDTO[$key][] = $objProcedimentoAndamentoDTO; diff --git a/rn/ExpedirProcedimentoRN.php b/rn/ExpedirProcedimentoRN.php index d9ce5d6..e290488 100644 --- a/rn/ExpedirProcedimentoRN.php +++ b/rn/ExpedirProcedimentoRN.php @@ -2178,7 +2178,7 @@ class ExpedirProcedimentoRN extends InfraRN { $objAtributoAndamentoDTOUser = new AtributoAndamentoDTO(); $objAtributoAndamentoDTOUser->setStrNome('USUARIO'); - $objAtributoAndamentoDTOUser->setStrIdOrigem(null); + $objAtributoAndamentoDTOUser->setStrIdOrigem(SessaoSEI::getInstance()->getNumIdUsuario()); $objAtributoAndamentoDTOUser->setStrValor(SessaoSEI::getInstance()->getStrNomeUsuario()); $objAtividadeDTO->setArrObjAtributoAndamentoDTO(array($objAtributoAndamentoDTOHora, $objAtributoAndamentoDTOUser)); diff --git a/rn/PenAtividadeRN.php b/rn/PenAtividadeRN.php index 0c49829..6f6dc77 100644 --- a/rn/PenAtividadeRN.php +++ b/rn/PenAtividadeRN.php @@ -80,6 +80,16 @@ class PenAtividadeRN extends AtividadeRN { $objReciboTramiteBD = new ReciboTramiteRecebidoBD($objBancoSEI); $objReturn->bolReciboExiste = ($objReciboTramiteBD->contar($objReciboTramiteDTO) > 0) ? true : false; break; + case ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_DOCUMENTO_AVULSO_RECEBIDO): + $strMensagem = 'Recebimento do Documento %s remetido por %s'; + $strNome = 'ENTIDADE_ORIGEM'; + + $objReciboTramiteDTO = new ReciboTramiteRecebidoDTO(); + $objReciboTramiteDTO->setNumIdTramite($numIdTramite); + + $objReciboTramiteBD = new ReciboTramiteRecebidoBD($objBancoSEI); + $objReturn->bolReciboExiste = ($objReciboTramiteBD->contar($objReciboTramiteDTO) > 0) ? true : false; + break; } $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); diff --git a/rn/PenAtualizarSeiRN.php b/rn/PenAtualizarSeiRN.php index 5605c36..ef3fd9f 100644 --- a/rn/PenAtualizarSeiRN.php +++ b/rn/PenAtualizarSeiRN.php @@ -61,6 +61,7 @@ class PenAtualizarSeiRN extends PenAtualizadorRN { case '1.1.12': $this->instalarV1113(); case '1.1.13': $this->instalarV1114(); case '1.1.14': $this->instalarV1115(); + case '1.1.16': $this->instalarV1115_feature50(); break; default: @@ -1395,4 +1396,48 @@ class PenAtualizarSeiRN extends PenAtualizadorRN { $objInfraParametroDTO->setStrValor('1.1.15'); $objInfraParametroBD->alterar($objInfraParametroDTO); } + + + protected function instalarV1115_feature50() + { + print_r('cadastra tarefa'); + + $objBD = new GenericoBD(BancoSEI::getInstance()); + $objDTO = new TarefaDTO(); + + $fnCadastrar = function($strNome = '', $strHistoricoCompleto = 'N', $strHistoricoCompleto = 'N', $strFecharAndamentosAbertos = 'N', $strLancarAndamentoFechado = 'N', $strPermiteProcessoFechado = 'N', $strIdTarefaModulo = '') use($objDTO, $objBD) { + + $objDTO->unSetTodos(); + $objDTO->setStrIdTarefaModulo($strIdTarefaModulo); + + if ($objBD->contar($objDTO) == 0) { + + $objUltimaTarefaDTO = new TarefaDTO(); + $objUltimaTarefaDTO->retNumIdTarefa(); + $objUltimaTarefaDTO->setNumMaxRegistrosRetorno(1); + $objUltimaTarefaDTO->setOrd('IdTarefa', InfraDTO::$TIPO_ORDENACAO_DESC); + $objUltimaTarefaDTO = $objBD->consultar($objUltimaTarefaDTO); + + $objDTO->setNumIdTarefa($objUltimaTarefaDTO->getNumIdTarefa() + 1); + $objDTO->setStrNome($strNome); + $objDTO->setStrSinHistoricoResumido($strHistoricoCompleto); + $objDTO->setStrSinHistoricoCompleto($strHistoricoCompleto); + $objDTO->setStrSinFecharAndamentosAbertos($strFecharAndamentosAbertos); + $objDTO->setStrSinLancarAndamentoFechado($strLancarAndamentoFechado); + $objDTO->setStrSinPermiteProcessoFechado($strPermiteProcessoFechado); + $objDTO->setStrIdTarefaModulo($strIdTarefaModulo); + $objBD->cadastrar($objDTO); + } + }; + + $fnCadastrar('Documento recebido da entidade @ENTIDADE_ORIGEM@ - @REPOSITORIO_ORIGEM@ (@PROCESSO@, @ENTIDADE_ORIGEM@, @UNIDADE_DESTINO@, @USUARIO@)', 'S', 'S', 'N', 'S', 'N', 'PEN_DOCUMENTO_AVULSO_RECEBIDO'); + +// //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.1.XX'); +// $objInfraParametroBD->alterar($objInfraParametroDTO); + } + } diff --git a/rn/ProcessoEletronicoRN.php b/rn/ProcessoEletronicoRN.php index 30c36d5..77465b7 100644 --- a/rn/ProcessoEletronicoRN.php +++ b/rn/ProcessoEletronicoRN.php @@ -12,6 +12,7 @@ class ProcessoEletronicoRN extends InfraRN { public static $TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_RECUSADO = 'PEN_PROCESSO_RECUSADO'; public static $TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_EXTERNO = 'PEN_OPERACAO_EXTERNA'; public static $TI_PROCESSO_ELETRONICO_PROCESSO_ABORTADO = 'PEN_EXPEDICAO_PROCESSO_ABORTADA'; + public static $TI_DOCUMENTO_AVULSO_RECEBIDO = 'PEN_DOCUMENTO_AVULSO_RECEBIDO'; /* NÍVEL DE SIGILO DE PROCESSOS E DOCUMENTOS */ @@ -558,7 +559,7 @@ class ProcessoEletronicoRN extends InfraRN { } public function cadastrarTramiteDeProcesso($parDblIdProcedimento, $parStrNumeroRegistro, $parNumIdentificacaoTramite, $parStrStaTipoTramite, $parDthRegistroTramite, $parNumIdRepositorioOrigem, - $parNumIdEstruturaOrigem, $parNumIdRepositorioDestino, $parNumIdEstruturaDestino, $parObjProcesso, $parNumTicketComponentesDigitais = null, $parObjComponentesDigitaisSolicitados = null) + $parNumIdEstruturaOrigem, $parNumIdRepositorioDestino, $parNumIdEstruturaDestino, $parObjProtocolo, $parNumTicketComponentesDigitais = null, $parObjComponentesDigitaisSolicitados = null) { if(!isset($parDblIdProcedimento) || $parDblIdProcedimento == 0) { @@ -593,7 +594,7 @@ class ProcessoEletronicoRN extends InfraRN { throw new InfraException('Parâmetro $parNumIdEstruturaDestino não informado.'); } - if(!isset($parObjProcesso)) { + if(!isset($parObjProtocolo)) { throw new InfraException('Parâmetro $objProcesso não informado.'); } @@ -603,14 +604,14 @@ class ProcessoEletronicoRN extends InfraRN { $objProcessoEletronicoDTO->setDblIdProcedimento($parDblIdProcedimento); //Montar dados dos procedimentos apensados - if(isset($parObjProcesso->processoApensado)){ - if(!is_array($parObjProcesso->processoApensado)){ - $parObjProcesso->processoApensado = array($parObjProcesso->processoApensado); + if(isset($parObjProtocolo->processoApensado)){ + if(!is_array($parObjProtocolo->processoApensado)){ + $parObjProtocolo->processoApensado = array($parObjProtocolo->processoApensado); } $arrObjRelProcessoEletronicoApensadoDTO = array(); $objRelProcessoEletronicoApensadoDTO = null; - foreach ($parObjProcesso->processoApensado as $objProcessoApensado) { + foreach ($parObjProtocolo->processoApensado as $objProcessoApensado) { $objRelProcessoEletronicoApensadoDTO = new RelProcessoEletronicoApensadoDTO(); $objRelProcessoEletronicoApensadoDTO->setStrNumeroRegistro($parStrNumeroRegistro); $objRelProcessoEletronicoApensadoDTO->setDblIdProcedimentoApensado($objProcessoApensado->idProcedimentoSEI); @@ -637,7 +638,7 @@ class ProcessoEletronicoRN extends InfraRN { $objProcessoEletronicoDTO->setArrObjTramiteDTO(array($objTramiteDTO)); //Monta dados dos componentes digitais - $arrObjComponenteDigitalDTO = $this->montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjComponentesDigitaisSolicitados); + $arrObjComponenteDigitalDTO = $this->montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProtocolo, $parObjComponentesDigitaisSolicitados); $objTramiteDTO->setArrObjComponenteDigitalDTO($arrObjComponenteDigitalDTO); $objProcessoEletronicoDTO = $this->cadastrarTramiteDeProcessoInterno($objProcessoEletronicoDTO); @@ -782,26 +783,31 @@ class ProcessoEletronicoRN extends InfraRN { return $strHashConteudo; } - private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjComponentesDigitaisSolicitados) + private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProtocolo, $parObjComponentesDigitaisSolicitados) { //Monta dados dos componentes digitais $arrObjComponenteDigitalDTO = array(); - if(!is_array($parObjProcesso->documento)) { - $parObjProcesso->documento = array($parObjProcesso->documento); - } - foreach ($parObjProcesso->documento as $objDocumento) { + $arrObjDocumento = array(); + if(isset($parObjProtocolo->documento)){ + $arrObjDocumento = is_array($parObjProtocolo->documento) ? $parObjProtocolo->documento : array($parObjProtocolo->documento); + } else { + $arrObjDocumento = array($parObjProtocolo); + } + + + foreach ($arrObjDocumento as $objDocumento) { $objComponenteDigitalDTO = new ComponenteDigitalDTO(); $objComponenteDigitalDTO->setStrNumeroRegistro($parStrNumeroRegistro); - $objComponenteDigitalDTO->setDblIdProcedimento($parObjProcesso->idProcedimentoSEI); //TODO: Error utilizar idProcedimentoSEI devido processos apensados + $objComponenteDigitalDTO->setDblIdProcedimento($parObjProtocolo->idProcedimentoSEI); //TODO: Error utilizar idProcedimentoSEI devido processos apensados $objComponenteDigitalDTO->setDblIdDocumento($objDocumento->idDocumentoSEI); $objComponenteDigitalDTO->setNumOrdem($objDocumento->ordem); $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite); - $objComponenteDigitalDTO->setStrProtocolo($parObjProcesso->protocolo); + $objComponenteDigitalDTO->setStrProtocolo($parObjProtocolo->protocolo); //Por enquanto, considera que o documento possui apenas um componente digital if(is_array($objDocumento->componenteDigital) && count($objDocumento->componenteDigital) != 1) { - throw new InfraException("Erro processando componentes digitais do processo " . $parObjProcesso->protocolo . "\n Somente é permitido o recebimento de documentos com apenas um Componente Digital."); + throw new InfraException("Erro processando componentes digitais do processo " . $parObjProtocolo->protocolo . "\n Somente é permitido o recebimento de documentos com apenas um Componente Digital."); } $objComponenteDigital = $objDocumento->componenteDigital; @@ -838,8 +844,8 @@ class ProcessoEletronicoRN extends InfraRN { } //Chamada recursiva sobre os documentos dos processos apensados - if(isset($parObjProcesso->processoApensado) && count($parObjProcesso->processoApensado)) { - foreach ($parObjProcesso->processoApensado as $objProcessoApensado) { + if(isset($parObjProtocolo->processoApensado) && count($parObjProtocolo->processoApensado)) { + foreach ($parObjProtocolo->processoApensado as $objProcessoApensado) { $arrObj = $this->montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $objProcessoApensado, $parObjComponentesDigitaisSolicitados); $arrObjComponenteDigitalDTO = array_merge($arrObjComponenteDigitalDTO, $arrObj); } diff --git a/rn/ReceberProcedimentoRN.php b/rn/ReceberProcedimentoRN.php index c6465df..cfcfaf7 100644 --- a/rn/ReceberProcedimentoRN.php +++ b/rn/ReceberProcedimentoRN.php @@ -6,6 +6,8 @@ require_once dirname(__FILE__) . '/../../../SEI.php'; class ReceberProcedimentoRN extends InfraRN { const STR_APENSACAO_PROCEDIMENTOS = 'Relacionamento representando a apensação de processos recebidos externamente'; + const TIPO_PROTOCOLO_PROCESSO = 'P'; + const TIPO_PROTOCOLO_DOCUMENTO_AVULSO = 'D'; private $objProcessoEletronicoRN; private $objInfraParametro; @@ -63,12 +65,16 @@ class ReceberProcedimentoRN extends InfraRN $objDocumento = $objMetadadosProcedimento->metadados->documento; $objProtocolo = isset($objProcesso) ? $objProcesso : $objDocumento; + $objProtocolo->staTipoProtocolo = isset($objProcesso) ? self::TIPO_PROTOCOLO_PROCESSO : self::TIPO_PROTOCOLO_DOCUMENTO_AVULSO; - $this->objProcedimentoAndamentoRN->setOpts($strNumeroRegistro, $parNumIdentificacaoTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO)); + $strIdTarefa = isset($objProcesso) ? ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO : ProcessoEletronicoRN::$TI_DOCUMENTO_AVULSO_RECEBIDO; + $numIdTarefa = ProcessoEletronicoRN::obterIdTarefaModulo($strIdTarefa); + + $this->objProcedimentoAndamentoRN->setOpts($strNumeroRegistro, $parNumIdentificacaoTramite, $numIdTarefa); $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Iniciando recebimento de processo externo', 'S')); //Tratamento para evitar o recebimento simultâneo do mesmo procedimento em serviços/processos concorrentes - $this->sincronizarRecebimentoProcessos($strNumeroRegistro, $parNumIdentificacaoTramite); + $this->sincronizarRecebimentoProcessos($strNumeroRegistro, $parNumIdentificacaoTramite, $numIdTarefa); //Verifica se processo já foi registrado para esse trâmite if($this->tramiteRecebimentoRegistrado($strNumeroRegistro, $parNumIdentificacaoTramite)) { @@ -148,8 +154,8 @@ class ReceberProcedimentoRN extends InfraRN $objProcedimentoDTO = $this->registrarProcesso($strNumeroRegistro, $parNumIdentificacaoTramite, $objProtocolo, $objMetadadosProcedimento); // @join_tec US008.08 (#23092) - $this->objProcedimentoAndamentoRN->setOpts($strNumeroRegistro, $parNumIdentificacaoTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO), $objProcedimentoDTO->getDblIdProcedimento()); - $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Obtendo metadados do processo', 'S')); + $this->objProcedimentoAndamentoRN->setOpts($strNumeroRegistro, $parNumIdentificacaoTramite, $numIdTarefa, $objProcedimentoDTO->getDblIdProcedimento()); + $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Obtendo metadados do protocolo', 'S')); $this->gravarLogDebug("Registrando trâmite externo do processo", 4); $objProcessoEletronicoDTO = $this->objProcessoEletronicoRN->cadastrarTramiteDeProcesso( @@ -162,7 +168,7 @@ class ReceberProcedimentoRN extends InfraRN $objMetadadosProcedimento->metadados->remetente->numeroDeIdentificacaoDaEstrutura, $objMetadadosProcedimento->metadados->destinatario->identificacaoDoRepositorioDeEstruturas, $objMetadadosProcedimento->metadados->destinatario->numeroDeIdentificacaoDaEstrutura, - $objProcesso); + $objProtocolo); //Verifica se o tramite se encontra na situação correta $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites($parNumIdentificacaoTramite); @@ -585,37 +591,6 @@ class ReceberProcedimentoRN extends InfraRN return $objProcedimentoDTO; } - private function gerarAndamentoUnidadeReceptora($parNumIdProcedimento) - { - $objUnidadeDTO = new PenUnidadeDTO(); - $objUnidadeDTO->setNumIdUnidadeRH($this->destinatarioReal->numeroDeIdentificacaoDaEstrutura); - $objUnidadeDTO->setStrSinAtivo('S'); - $objUnidadeDTO->retStrDescricao(); //descricao - - $objUnidadeRN = new UnidadeRN(); - $objUnidadeDTO = $objUnidadeRN->consultarRN0125($objUnidadeDTO); - - $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); - $objAtributoAndamentoDTO->setStrNome('DESCRICAO'); - $objAtributoAndamentoDTO->setStrValor('Processo remetido para a unidade ' . $objUnidadeDTO->getStrDescricao()); - $objAtributoAndamentoDTO->setStrIdOrigem($this->destinatarioReal->numeroDeIdentificacaoDaEstrutura); - - $arrObjAtributoAndamentoDTO = array($objAtributoAndamentoDTO); - - $objAtividadeDTO = new AtividadeDTO(); - $objAtividadeDTO->setDblIdProtocolo($parNumIdProcedimento); - $objAtividadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); - $objAtividadeDTO->setNumIdUsuario(SessaoSEI::getInstance()->getNumIdUsuario()); - $objAtividadeDTO->setNumIdTarefa(TarefaRN::$TI_ATUALIZACAO_ANDAMENTO); - $objAtividadeDTO->setArrObjAtributoAndamentoDTO($arrObjAtributoAndamentoDTO); - $objAtividadeDTO->setDthConclusao(null); - $objAtividadeDTO->setNumIdUsuarioConclusao(null); - $objAtividadeDTO->setStrSinInicial('N'); - - $objAtividadeRN = new AtividadeRN(); - $objAtividadeRN->gerarInternaRN0727($objAtividadeDTO); - } - private function gerarProcedimento($objMetadadosProcedimento, $parObjProtocolo) { if(!isset($objMetadadosProcedimento)){ @@ -657,9 +632,12 @@ class ReceberProcedimentoRN extends InfraRN } } - $objProtocoloDTO->setStrProtocoloFormatado(utf8_decode($parObjProtocolo->protocolo)); + // O protocolo formatado do novo processo somente deverá reutilizar o número definido pelo Remetente em caso de + // trâmites de processos. No caso de recebimento de documentos avulsos, o número do novo processo sempre deverá ser + // gerado pelo destinatário, conforme regras definidas em legislação vigente + $strProtocoloFormatado = ($parObjProtocolo->staTipoProtocolo == self::TIPO_PROTOCOLO_PROCESSO) ? $parObjProtocolo->protocolo : null; + $objProtocoloDTO->setStrProtocoloFormatado(utf8_decode($strProtocoloFormatado)); $objProtocoloDTO->setDtaGeracao($this->objProcessoEletronicoRN->converterDataSEI($parObjProtocolo->dataHoraDeProducao)); -// $objProtocoloDTO->setDtaGeracao($this->objProcessoEletronicoRN->converterDataSEI($parObjProtocolo->dataHoraDeProducao)); $objProtocoloDTO->setArrObjAnexoDTO(array()); $objProtocoloDTO->setArrObjRelProtocoloAssuntoDTO(array()); $objProtocoloDTO->setArrObjRelProtocoloProtocoloDTO(array()); @@ -696,7 +674,7 @@ class ReceberProcedimentoRN extends InfraRN $objProcedimentoDTO->setDblIdProcedimento(null); $objProcedimentoDTO->setObjProtocoloDTO($objProtocoloDTO); $objProcedimentoDTO->setDtaGeracaoProtocolo($this->objProcessoEletronicoRN->converterDataSEI($parObjProtocolo->dataHoraDeProducao)); - $objProcedimentoDTO->setStrProtocoloProcedimentoFormatado(utf8_decode($parObjProtocolo->protocolo)); + $objProcedimentoDTO->setStrProtocoloProcedimentoFormatado(utf8_decode($strProtocoloFormatado)); $objProcedimentoDTO->setStrSinGerarPendencia('S'); $objProcedimentoDTO->setArrObjDocumentoDTO(array()); @@ -731,8 +709,19 @@ class ReceberProcedimentoRN extends InfraRN //TODO: Finalizar criação do procedimento $objProcedimentoRN = new ProcedimentoRN(); - $objProcedimentoDTOGerado = $objProcedimentoRN->gerarRN0156($objProcedimentoDTO); + + try{ + //Alterado contexto de unidade atual para a unidade de destino do processo para que o núcleo do SEI possa + //gerar o número de processo correto do destino e não o número da unidade de recebimento do processo + SessaoSEI::getInstance(false)->setNumIdUnidadeAtual($objUnidadeDTO->getNumIdUnidade()); + $objProcedimentoDTOGerado = $objProcedimentoRN->gerarRN0156($objProcedimentoDTO); + } + finally{ + SessaoSEI::getInstance(false)->setNumIdUnidadeAtual($objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO')); + } + $objProcedimentoDTO->setDblIdProcedimento($objProcedimentoDTOGerado->getDblIdProcedimento()); + $objProcedimentoDTO->setStrProtocoloProcedimentoFormatado($objProcedimentoDTO->getObjProtocoloDTO()->getStrProtocoloFormatado()); $this->registrarAndamentoRecebimentoProcesso($objProcedimentoDTO, $objMetadadosProcedimento); $this->atribuirDocumentos($objProcedimentoDTO, $parObjProtocolo, $objUnidadeDTO, $objMetadadosProcedimento); @@ -749,6 +738,37 @@ class ReceberProcedimentoRN extends InfraRN return $objProcedimentoDTO; } + private function gerarAndamentoUnidadeReceptora($parNumIdProcedimento) + { + $objUnidadeDTO = new PenUnidadeDTO(); + $objUnidadeDTO->setNumIdUnidadeRH($this->destinatarioReal->numeroDeIdentificacaoDaEstrutura); + $objUnidadeDTO->setStrSinAtivo('S'); + $objUnidadeDTO->retStrDescricao(); //descricao + + $objUnidadeRN = new UnidadeRN(); + $objUnidadeDTO = $objUnidadeRN->consultarRN0125($objUnidadeDTO); + + $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); + $objAtributoAndamentoDTO->setStrNome('DESCRICAO'); + $objAtributoAndamentoDTO->setStrValor('Processo remetido para a unidade ' . $objUnidadeDTO->getStrDescricao()); + $objAtributoAndamentoDTO->setStrIdOrigem($this->destinatarioReal->numeroDeIdentificacaoDaEstrutura); + + $arrObjAtributoAndamentoDTO = array($objAtributoAndamentoDTO); + + $objAtividadeDTO = new AtividadeDTO(); + $objAtividadeDTO->setDblIdProtocolo($parNumIdProcedimento); + $objAtividadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); + $objAtividadeDTO->setNumIdUsuario(SessaoSEI::getInstance()->getNumIdUsuario()); + $objAtividadeDTO->setNumIdTarefa(TarefaRN::$TI_ATUALIZACAO_ANDAMENTO); + $objAtividadeDTO->setArrObjAtributoAndamentoDTO($arrObjAtributoAndamentoDTO); + $objAtividadeDTO->setDthConclusao(null); + $objAtividadeDTO->setNumIdUsuarioConclusao(null); + $objAtividadeDTO->setStrSinInicial('N'); + + $objAtividadeRN = new AtividadeRN(); + $objAtividadeRN->gerarInternaRN0727($objAtividadeDTO); + } + private function alterarMetadadosProcedimento($parNumIdProcedimento, $parObjMetadadoProcedimento) { //Realiza a alteração dos metadados do processo(Por hora, apenas do nível de sigilo e hipótese legal) @@ -797,7 +817,9 @@ class ReceberProcedimentoRN extends InfraRN //TODO: Atribuir atributos necessários para formação da mensagem do andamento //TODO: Especificar quais andamentos serão registrados $objRemetente = $parObjMetadadosProcedimento->metadados->remetente; - $objProcesso = $objMetadadosProcedimento->metadados->processo; + $objProcesso = $parObjMetadadosProcedimento->metadados->processo; + $objDocumento = $parObjMetadadosProcedimento->metadados->documento; + $objProtocolo = isset($objProcesso) ? $objProcesso : $objDocumento; $arrObjAtributoAndamentoDTO = array(); @@ -824,6 +846,32 @@ class ReceberProcedimentoRN extends InfraRN $objAtributoAndamentoDTO->setStrIdOrigem($objEstrutura->numeroDeIdentificacaoDaEstrutura); $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO; + $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); + $objAtributoAndamentoDTO->setStrNome('PROCESSO'); + $objAtributoAndamentoDTO->setStrValor($objProtocolo->protocolo); + $objAtributoAndamentoDTO->setStrIdOrigem(null); + $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO; + + $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); + $objAtributoAndamentoDTO->setStrNome('USUARIO'); + $objAtributoAndamentoDTO->setStrValor(SessaoSEI::getInstance()->getStrNomeUsuario()); + $objAtributoAndamentoDTO->setStrIdOrigem(SessaoSEI::getInstance()->getNumIdUsuario()); + $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO; + + //Obtém dados da unidade de destino atribuída anteriormente para o protocolo + if($objProcedimentoDTO->isSetArrObjUnidadeDTO() && count($objProcedimentoDTO->getArrObjUnidadeDTO()) == 1) { + $arrObjUnidadesDestinoDTO = $objProcedimentoDTO->getArrObjUnidadeDTO(); + $objUnidadesDestinoDTO = $arrObjUnidadesDestinoDTO[0]; + $objAtributoAndamentoDTO = new AtributoAndamentoDTO(); + $objAtributoAndamentoDTO->setStrNome('UNIDADE_DESTINO'); + $objAtributoAndamentoDTO->setStrValor($objUnidadesDestinoDTO->getStrDescricao()); + $objAtributoAndamentoDTO->setStrIdOrigem($objUnidadesDestinoDTO->getNumIdUnidade()); + $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTO; + } + + + + if(isset($objEstrutura->hierarquia)) { $arrObjNivel = $objEstrutura->hierarquia->nivel; @@ -862,7 +910,10 @@ class ReceberProcedimentoRN extends InfraRN $objAtividadeDTO->setDblIdProtocolo($objProcedimentoDTO->getDblIdProcedimento()); $objAtividadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); $objAtividadeDTO->setNumIdUsuario(SessaoSEI::getInstance()->getNumIdUsuario()); - $objAtividadeDTO->setNumIdTarefa(ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO)); + + $strIdTarefa = isset($objProcesso) ? ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO : ProcessoEletronicoRN::$TI_DOCUMENTO_AVULSO_RECEBIDO; + + $objAtividadeDTO->setNumIdTarefa(ProcessoEletronicoRN::obterIdTarefaModulo($strIdTarefa)); $objAtividadeDTO->setArrObjAtributoAndamentoDTO($arrObjAtributoAndamentoDTO); $objAtividadeDTO->setDthConclusao(null); $objAtividadeDTO->setNumIdUsuarioConclusao(null); @@ -1092,6 +1143,7 @@ class ReceberProcedimentoRN extends InfraRN $objProcedimentoDTO2->retStrNomeTipoProcedimento(); $objProcedimentoDTO2->adicionarCriterio(array('IdProcedimento','ProtocoloProcedimentoFormatado','ProtocoloProcedimentoFormatadoPesquisa'), array(InfraDTO::$OPER_IGUAL,InfraDTO::$OPER_IGUAL,InfraDTO::$OPER_IGUAL), + //TODO: Possivelmente, a pesquisa pelos campos ProtocoloProcedimentoFormatado e ProtocoloProcedimentoFormatadoPesquisa está incorreta array($objDocumentoDTO->getDblIdProcedimento(),$objDocumentoDTO->getDblIdProcedimento(),$objDocumentoDTO->getDblIdProcedimento()), array(InfraDTO::$OPER_LOGICO_OR,InfraDTO::$OPER_LOGICO_OR)); @@ -1305,8 +1357,8 @@ class ReceberProcedimentoRN extends InfraRN $objProcedimentoDTOApensado = null; foreach ($objProcedimento->processoApensado as $processoApensado){ - $objProcedimentoDTOApensado = $this->gerarProcedimento($objMetadadosProcedimento, $processoApensado); - $this->relacionarProcedimentos($objProcedimentoDTOPrincipal, $objProcedimentoDTOApensado); + $objProcedimentoDTOApensado = $this->gerarProcedimento($objProcedimento, $processoApensado); + $this->relacionarProcedimentos($objProcedimento, $objProcedimentoDTOApensado); $this->registrarProcedimentoNaoVisualizado($objProcedimentoDTOApensado); } } @@ -1542,8 +1594,6 @@ class ReceberProcedimentoRN extends InfraRN $objInfraException->lancarValidacao('Unidade de destino do processo não informada.'); } - $arrObjUnidadeDTO = $parObjProcedimentoDTO->getArrObjUnidadeDTO(); - if(count($parObjProcedimentoDTO->getArrObjUnidadeDTO()) > 1) { $objInfraException->lancarValidacao('Não permitido a indicação de múltiplas unidades de destino para um processo recebido externamente.'); } @@ -1558,7 +1608,6 @@ class ReceberProcedimentoRN extends InfraRN $objProcedimentoDTO->retNumIdTipoProcedimento(); $objProcedimentoDTO->retStrNomeTipoProcedimento(); $objProcedimentoDTO->retStrStaNivelAcessoGlobalProtocolo(); - // $objProcedimentoDTO->retStrStaEstadoProtocolo(); $objProcedimentoDTO->setStrProtocoloProcedimentoFormatado($parObjProcedimentoDTO->getStrProtocoloProcedimentoFormatado()); $objProcedimentoRN = new ProcedimentoRN(); @@ -1722,6 +1771,44 @@ class ReceberProcedimentoRN extends InfraRN } } + /** + * Método que realiza a validação da extensão dos componentes digitais a serem recebidos + * + * @param integer $parIdTramite + * @param object $parObjProtocolo + * @throws InfraException + */ + public function validarExtensaoComponentesDigitais($parIdTramite, $parObjProtocolo) + { + //Armazena o array de documentos + $arrDocumentos = $this->obterDocumentosProtocolo($parObjProtocolo); + + //Instancia o bd do arquivoExtensão + $arquivoExtensaoBD = new ArquivoExtensaoBD($this->getObjInfraIBanco()); + + //Percorre os documentos + foreach($arrDocumentos as $documento){ + + //Busca o nome do documento + $nomeDocumento = $documento->componenteDigital->nome; + + //Busca pela extensão do documento + $arrNomeDocumento = explode('.', $nomeDocumento); + $extDocumento = $arrNomeDocumento[count($arrNomeDocumento) - 1]; + + //Verifica se a extensão do arquivo está cadastrada e ativa + $arquivoExtensaoDTO = new ArquivoExtensaoDTO(); + $arquivoExtensaoDTO->setStrSinAtivo('S'); + $arquivoExtensaoDTO->setStrExtensao($extDocumento); + $arquivoExtensaoDTO->retStrExtensao(); + + if($arquivoExtensaoBD->contar($arquivoExtensaoDTO) == 0){ + $this->objProcessoEletronicoRN->recusarTramite($parIdTramite, 'Componentes digitais com formato inválido no destinatário. ', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_FORMATO); + throw new InfraException("Processo recusado devido a existência de documento em formato {$extDocumento} não permitido pelo sistema. "); + } + } + } + protected function receberTramiteRecusadoInternoControlado(ReceberTramiteRecusadoDTO $objReceberTramiteRecusadoDTO) { //Realiza o desbloqueio do processo @@ -1776,44 +1863,6 @@ class ReceberProcedimentoRN extends InfraRN } /** - * Método que realiza a validação da extensão dos componentes digitais a serem recebidos - * - * @param integer $parIdTramite - * @param object $parObjProtocolo - * @throws InfraException - */ - public function validarExtensaoComponentesDigitais($parIdTramite, $parObjProtocolo) - { - //Armazena o array de documentos - $arrDocumentos = $this->obterDocumentosProtocolo($parObjProtocolo); - - //Instancia o bd do arquivoExtensão - $arquivoExtensaoBD = new ArquivoExtensaoBD($this->getObjInfraIBanco()); - - //Percorre os documentos - foreach($arrDocumentos as $documento){ - - //Busca o nome do documento - $nomeDocumento = $documento->componenteDigital->nome; - - //Busca pela extensão do documento - $arrNomeDocumento = explode('.', $nomeDocumento); - $extDocumento = $arrNomeDocumento[count($arrNomeDocumento) - 1]; - - //Verifica se a extensão do arquivo está cadastrada e ativa - $arquivoExtensaoDTO = new ArquivoExtensaoDTO(); - $arquivoExtensaoDTO->setStrSinAtivo('S'); - $arquivoExtensaoDTO->setStrExtensao($extDocumento); - $arquivoExtensaoDTO->retStrExtensao(); - - if($arquivoExtensaoBD->contar($arquivoExtensaoDTO) == 0){ - $this->objProcessoEletronicoRN->recusarTramite($parIdTramite, 'Componentes digitais com formato inválido no destinatário. ', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_FORMATO); - throw new InfraException("Processo recusado devido a existência de documento em formato {$extDocumento} não permitido pelo sistema. "); - } - } - } - - /** * Método que verifica as permissões de escrita nos diretórios utilizados no recebimento de processos e documentos * * @param integer $parIdTramite @@ -1835,13 +1884,13 @@ class ReceberProcedimentoRN extends InfraRN } } - private function sincronizarRecebimentoProcessos($parStrNumeroRegistro, $parNumIdentificacaoTramite) + private function sincronizarRecebimentoProcessos($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parNumIdTarefa) { $objProcedimentoAndamentoDTO = new ProcedimentoAndamentoDTO(); $objProcedimentoAndamentoDTO->retDblIdAndamento(); $objProcedimentoAndamentoDTO->setStrNumeroRegistro($parStrNumeroRegistro); $objProcedimentoAndamentoDTO->setDblIdTramite($parNumIdentificacaoTramite); - $objProcedimentoAndamentoDTO->setNumTarefa(ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO)); + $objProcedimentoAndamentoDTO->setNumTarefa($parNumIdTarefa); $objProcedimentoAndamentoDTO->setNumMaxRegistrosRetorno(1); $objProcedimentoAndamentoBD = new ProcedimentoAndamentoBD($this->getObjInfraIBanco()); diff --git a/rn/ReciboTramiteRN.php b/rn/ReciboTramiteRN.php index f70f2dc..2c5f480 100644 --- a/rn/ReciboTramiteRN.php +++ b/rn/ReciboTramiteRN.php @@ -3,7 +3,7 @@ require_once dirname(__FILE__) . '/../../../SEI.php'; /** - * Repostório da entidade ReciboTramite + * Repost�rio da entidade ReciboTramite * * @author Join Tecnologia */ @@ -18,7 +18,7 @@ class ReciboTramiteRN extends InfraRN { } /** - * retorna um array de recibos de tramites ( geralmente é somente um ) + * retorna um array de recibos de tramites ( geralmente � somente um ) * * @param string $strAtividade pode ser RECEBER ou ENVIAR * @return array @@ -44,6 +44,7 @@ class ReciboTramiteRN extends InfraRN { break; case ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO): + case ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_DOCUMENTO_AVULSO_RECEBIDO): $objReciboTramiteDTO = new ReciboTramiteRecebidoDTO(); $objReciboTramiteDTO->setNumIdTramite($numIdTramite); $objReciboTramiteDTO->retStrNumeroRegistro(); -- libgit2 0.21.2