diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index b53f5560..df373b55 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -184,7 +184,7 @@ private function getObjPenWs() public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorioDeEstruturas) { $objRepositorioDTO = null; - $endpoint = "repositorios-de-estruturas/{$numIdentificacaoDoRepositorioDeEstruturas}/estruturas-organizacionais"; + $endpoint = 'repositorios-de-estruturas'; try { $parametros = [ 'ativo' => true @@ -193,10 +193,12 @@ public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorio if (isset($arrResultado)) { foreach ($arrResultado as $repositorio) { + if ($repositorio['id'] == $numIdentificacaoDoRepositorioDeEstruturas) { $objRepositorioDTO = new RepositorioDTO(); $objRepositorioDTO->setNumId($repositorio['id']); $objRepositorioDTO->setStrNome(mb_convert_encoding($repositorio['nome'], 'ISO-8859-1', 'UTF-8')); $objRepositorioDTO->setBolAtivo($repositorio['ativo']); + } } } } catch (Exception $e) { @@ -1233,8 +1235,20 @@ public function solicitarMetadados($parNumIdentificacaoTramite) $objResultado = new stdClass(); $objResultado->IDT = $parNumIdentificacaoTramite; $objResultado->NRE = $arrResultado['nre']; + + $multivalorado = false; + if (count($arrResultado['processo']['documentos']) <= 1) { + $arrResultado['processo']['documentos'] = (object) $arrResultado['processo']['documentos'][0]; + } else { + $multivalorado = true; + } + $objResultado->metadados = $this->converterArrayParaObjeto($arrResultado); + if ($multivalorado) { + $objResultado->metadados->processo->documentos = (array) $objResultado->metadados->processo->documentos; + } + return $objResultado; } catch (\Exception $e) { @@ -1478,6 +1492,10 @@ protected function cadastrarTramiteDeProcessoInternoControlado(ProcessoEletronic */ public static function getHashFromMetaDados($objMeta) { + if (is_array($objMeta)) { + $objMeta = (object) $objMeta; + } + $strHashConteudo = ''; if (isset($objMeta)) { @@ -1485,7 +1503,7 @@ public static function getHashFromMetaDados($objMeta) $strHashConteudo = $objMeta; } else { $matches = array(); - $strHashConteudo = (isset($objMeta->enc_value)) ? $objMeta->enc_value : $objMeta['conteudo']; + $strHashConteudo = (isset($objMeta->enc_value)) ? $objMeta->enc_value : $objMeta->conteudo; if (preg_match('/^(.*)<\/hash>$/', $strHashConteudo, $matches, PREG_OFFSET_CAPTURE)) { $strHashConteudo = $matches[1][0]; @@ -1612,8 +1630,8 @@ private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIden $objComponenteDigitalDTO->setStrNome(utf8_decode($objComponenteDigital->nome)); if(isset($objDocumento->especie)){ - $objComponenteDigitalDTO->setNumCodigoEspecie(intval($objDocumento->especie['codigo'])); - $objComponenteDigitalDTO->setStrNomeEspecieProdutor(utf8_decode($objDocumento->especie['nomeNoProdutor'])); + $objComponenteDigitalDTO->setNumCodigoEspecie(intval($objDocumento->especie->codigo)); + $objComponenteDigitalDTO->setStrNomeEspecieProdutor(utf8_decode($objDocumento->especie->nomeNoProdutor)); } $strHashConteudo = static::getHashFromMetaDados($objComponenteDigital->hash); @@ -2318,7 +2336,7 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair { $arrObjDocumento = array(); if(isset($parObjProtocolo->documentos)){ - $arrObjProtocolo = is_array($parObjProtocolo->documentos) ? $parObjProtocolo->documentos : json_decode(json_encode($parObjProtocolo->documentos), true); + $arrObjProtocolo = is_array($parObjProtocolo->documentos) ? $parObjProtocolo->documentos : array($parObjProtocolo->documentos); usort($arrObjProtocolo, array("ProcessoEletronicoRN", "comparacaoOrdemAjustadaDocumentos")); //Tratamento recursivo para processos anexados @@ -2352,13 +2370,12 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair $arrObjDocumentoPadronizados = ($parBolExtrairAnexados) ? $arrObjDocumento : $arrObjProtocolo; - foreach ($arrObjDocumentoPadronizados as $documento) { - if (is_array($documento) && $documento['componentesDigitais']) { - $documento['componentesDigitais'] = self::obterComponentesDocumentos($documento); - } else { - $documento->componentesDigitais = self::obterComponentesDocumentos($documento); + foreach ($arrObjDocumentoPadronizados as $documento) { + if (is_array($documento) && $documento['componentesDigitais']) { + $documento = (object) $documento; + } + $documento->componentesDigitais = self::obterComponentesDocumentos($documento); } - } return $arrObjDocumentoPadronizados; } @@ -2366,11 +2383,7 @@ public static function obterDocumentosProtocolo($parObjProtocolo, $parBolExtrair public static function obterComponentesDocumentos($parObjDocumento) { - - if (is_array($parObjDocumento) && isset($parObjDocumento['componentesDigitais'])) { - return $parObjDocumento['componentesDigitais']; - } - + $arrObjComponenteDigital = array(); if (isset($parObjDocumento->componentesDigitais)) { $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); @@ -2430,11 +2443,11 @@ public static function obterUnidadeParaRegistroDocumento($parDblIdProcedimento) * @param $parObjDocumento * @return array */ - public static function obterComponentesDigitaisDocumento($parObjDocumento) + public static function obterComponentesDigitaisDocumento($parObjDocumento) { $arrObjComponenteDigital = array(); - if (isset($parObjDocumento['componentesDigitais'])) { - $arrObjComponenteDigital = is_array($parObjDocumento['componentesDigitais']) ? $parObjDocumento['componentesDigitais'] : array($parObjDocumento['componentesDigitais']); + if(isset($parObjDocumento->componentesDigitais)){ + $arrObjComponenteDigital = is_array($parObjDocumento->componentesDigitais) ? $parObjDocumento->componentesDigitais : array($parObjDocumento->componentesDigitais); } return $arrObjComponenteDigital; @@ -2454,9 +2467,6 @@ public static function obterComponentesDigitaisDocumento($parObjDocumento) */ public static function desmembrarProcessosAnexados($parObjProtocolo) { - if (is_array($parObjProtocolo)) { - $parObjProtocolo = (object) $parObjProtocolo; - } if(!ProcessoEletronicoRN::existeProcessoAnexado($parObjProtocolo)){ return $parObjProtocolo; @@ -2731,18 +2741,30 @@ public function listarAssociacoesDocumentos($idProcedimento) /** * Converter arrays associativo para objetos */ - public static function converterArrayParaObjeto($array) + public static function converterArrayParaObjeto($array) + { + if (is_array($array)) { + // Verificar se o array é associativo + if (self::verificarSeArrayAssociativo($array)) { + $object = new stdClass(); + foreach ($array as $key => $value) { + $object->$key = self::converterArrayParaObjeto($value); + } + return $object; + } else { + // Para arrays indexados, manter como está + return array_map([self::class, 'converterArrayParaObjeto'], $array); + } + } + + return $array; + } + + private static function verificarSeArrayAssociativo(array $array): bool { - if (is_array($array)) { - $object = new stdClass(); - foreach ($array as $key => $value) { - $object->$key = self::converterArrayParaObjeto($value); - } - return $object; + return array_keys($array) !== range(0, count($array) - 1); } - - return $array; - } + /** * Consulta as estruturas de um repositório de estruturas. diff --git a/src/rn/ReceberComponenteDigitalRN.php b/src/rn/ReceberComponenteDigitalRN.php index 70b829d8..82077f3e 100755 --- a/src/rn/ReceberComponenteDigitalRN.php +++ b/src/rn/ReceberComponenteDigitalRN.php @@ -254,11 +254,15 @@ private function atualizarAnexoDoComponenteDigital($parObjComponenteDigitalDTO, * @return AnexoDTO * */ - public function copiarComponenteDigitalPastaTemporaria($parArrComponenteDigital, $parObjConteudo) + public function copiarComponenteDigitalPastaTemporaria($parObjComponenteDigital, $parObjConteudo) { - if (!isset($parArrComponenteDigital)) { + if (!isset($parObjComponenteDigital)) { throw new InfraException("Componente Digital não informado"); } + + if (is_array($parObjComponenteDigital)) { + $parObjComponenteDigital = (object) $parObjComponenteDigital; + } $objAnexoRN = new AnexoRN(); $strNomeArquivoUpload = $objAnexoRN->gerarNomeArquivoTemporario(); $strConteudoCodificado = $parObjConteudo->conteudoDoComponenteDigital; @@ -273,7 +277,7 @@ public function copiarComponenteDigitalPastaTemporaria($parArrComponenteDigital, $objAnexoDTO->setDthInclusao(InfraData::getStrDataHoraAtual()); $objAnexoDTO->setNumTamanho(filesize(DIR_SEI_TEMP.'/'.$strNomeArquivoUpload)); $objAnexoDTO->setNumIdUsuario(SessaoSEI::getInstance()->getNumIdUsuario()); - $objAnexoDTO->setStrNome($parArrComponenteDigital['nome']); + $objAnexoDTO->setStrNome($parObjComponenteDigital->nome); return $objAnexoDTO; } diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index c9da9bef..70886f4d 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -246,7 +246,7 @@ private function baixarComponentesDigitais($parObjTramite, $parObjMetadadosProce // pendentes de recebimento informado pelo Tramita.gov.br não está de acordo com a lista atual de arquivos // mantida pela aplicação. $arrHashComponentesProtocolo = $this->listarHashDosComponentesMetadado($objProtocolo); - $arrHashPendentesRecebimento = $parObjTramite->componenteDigitalPendenteDeRecebimento; + $arrHashPendentesRecebimento = $parObjTramite->hashDosComponentesPendentesDeRecebimento; $numQtdComponentes = count($arrHashComponentesProtocolo); $this->gravarLogDebug("$numQtdComponentes componentes digitais identificados no protocolo {$objProtocolo->protocolo}", 2); @@ -648,14 +648,19 @@ private function listarHashDosComponentesMetadado($parObjProtocolo) $arrObjDocumento = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); foreach($arrObjDocumento as $objDocumento){ //Desconsidera os componendes digitais de documentos cancelados - if(!isset($objDocumento['retirado']) || $objDocumento['retirado'] == false) { - if(!isset($objDocumento['componentesDigitais'])){ - throw new InfraException("Metadados do componente digital do documento de ordem {$objDocumento['ordem']} não informado."); + if(!isset($objDocumento->retirado) || $objDocumento->retirado == false) { + if(!isset($objDocumento->componentesDigitais)){ + throw new InfraException("Metadados do componente digital do documento de ordem {$objDocumento->ordem} não informado."); } - $arrObjComponentesDigitais = is_array($objDocumento['componentesDigitais']) ? $objDocumento['componentesDigitais'] : array($objDocumento['componentesDigitais']); + $arrObjComponentesDigitais = is_array($objDocumento->componentesDigitais) ? $objDocumento->componentesDigitais : array($objDocumento->componentesDigitais); foreach ($arrObjComponentesDigitais as $objComponenteDigital) { - $arrHashsComponentesDigitais[] = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital['hash']); + + if (is_array($objComponenteDigital)) { + $objComponenteDigital = (object) $objComponenteDigital; + } + + $arrHashsComponentesDigitais[] = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital->hash); } } } @@ -675,8 +680,11 @@ private function listarMetaDadosComponentesDigitais($parObjProtocolo) $objMapBD = new GenericoBD($this->getObjInfraIBanco()); $arrObjDocumento = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo, true); - foreach($arrObjDocumento as $objDocumento){ - $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objDocumento->componenteDigital->hash); + foreach($arrObjDocumento as $key => $objDocumento){ + if (is_array($objDocumento->componentesDigitais[$key])) { + $objDocumento->componentesDigitais[$key] = (object) $objDocumento->componentesDigitais[$key]; + } + $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objDocumento->componentesDigitais[$key]->hash); $objMapDTO = new PenRelTipoDocMapRecebidoDTO(true); $objMapDTO->setNumMaxRegistrosRetorno(1); $objMapDTO->setNumCodigoEspecie($objDocumento->especie->codigo); @@ -721,25 +729,30 @@ private function validarComponentesDigitais($parObjProtocolo, $parNumIdentificac if(!isset($numIdTipoDocumentoPadrao)){ foreach($arrObjDocumentos as $objDocument){ + $especie = $objDocument->especie; + if (is_array($especie)) { + $objDocument->especie = (object) $objDocument->especie; + } + $objPenRelTipoDocMapEnviadoDTO = new PenRelTipoDocMapRecebidoDTO(); $objPenRelTipoDocMapEnviadoDTO->retTodos(); - $objPenRelTipoDocMapEnviadoDTO->setNumCodigoEspecie($objDocument['especie']['codigo']); + $objPenRelTipoDocMapEnviadoDTO->setNumCodigoEspecie($objDocument->especie->codigo); $objProcessoEletronicoDB = new PenRelTipoDocMapRecebidoBD(BancoSEI::getInstance()); $numContador = (int)$objProcessoEletronicoDB->contar($objPenRelTipoDocMapEnviadoDTO); // Não achou, ou seja, não esta cadastrado na tabela, então não é aceito nesta unidade como válido if($numContador <= 0) { - $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, sprintf('O Documento do tipo %s não está mapeado para recebimento no sistema de destino. OBS: A recusa é uma das três formas de conclusão de trâmite. Portanto, não é um erro.', utf8_decode($objDocument['especie']['nomeNoProdutor'])), ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA); - throw new InfraException(sprintf('Documento do tipo %s não está mapeado. Motivo da Recusa no Barramento: %s', $objDocument['especie']['nomeNoProdutor'], ProcessoEletronicoRN::$MOTIVOS_RECUSA[ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA])); + $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, sprintf('O Documento do tipo %s não está mapeado para recebimento no sistema de destino. OBS: A recusa é uma das três formas de conclusão de trâmite. Portanto, não é um erro.', utf8_decode($objDocument->especie->nomeNoProdutor)), ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA); + throw new InfraException(sprintf('Documento do tipo %s não está mapeado. Motivo da Recusa no Barramento: %s', $objDocument->especie->nomeNoProdutor, ProcessoEletronicoRN::$MOTIVOS_RECUSA[ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_ESPECIE_NAO_MAPEADA])); } } } //Não valida informações do componente digital caso o documento esteja cancelado foreach ($arrObjDocumentos as $objDocumento) { - if (!isset($objDocument['retirado']) || $objDocumento['retirado'] === false) { - foreach ($objDocumento['componentesDigitais'] as $objComponenteDigital) { + if (!isset($objDocumento->retirado) || $objDocumento->retirado === false) { + foreach ($objDocumento->componentesDigitais as $objComponenteDigital) { $this->validaTamanhoComponenteDigital($objComponenteDigital); } } @@ -748,7 +761,11 @@ private function validarComponentesDigitais($parObjProtocolo, $parNumIdentificac private function validaTamanhoComponenteDigital($objComponenteDigital) { - if (is_null($objComponenteDigital['tamanhoEmBytes']) || $objComponenteDigital['tamanhoEmBytes'] == 0){ + if (is_array($objComponenteDigital)) { + $objComponenteDigital = (object) $objComponenteDigital; + } + + if (is_null($objComponenteDigital->tamanhoEmBytes) || $objComponenteDigital->tamanhoEmBytes == 0){ throw new InfraException('Tamanho de componente digital não informado.', null, 'RECUSA: '.ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); } } @@ -1717,7 +1734,7 @@ private function atribuirDocumentos($parObjProcedimentoDTO, $parObjProtocolo, $o $objSerieDTO = $this->obterSerieMapeada($objDocumento); if ($objSerieDTO==null){ - throw new InfraException('Tipo de documento [Espécie '.$objDocumento->especie['codigo'].'] não encontrado.'); + throw new InfraException('Tipo de documento [Espécie '.$objDocumento->especie->codigo.'] não encontrado.'); } if (InfraString::isBolVazia($objDocumento->dataHoraDeProducao)) { @@ -2293,7 +2310,7 @@ private function obterUnidadeMapeada($numIdentificacaoDaEstrutura) private function obterSerieMapeada($documento) { $bolPossuiDocumentoReferenciado = isset($documento->ordemDoDocumentoReferenciado); - $numCodigoEspecie = (!$bolPossuiDocumentoReferenciado) ? intval($documento->especie['codigo']) : self::NUM_ESPECIE_PEN_ANEXO; + $numCodigoEspecie = (!$bolPossuiDocumentoReferenciado) ? intval($documento->especie->codigo) : self::NUM_ESPECIE_PEN_ANEXO; return $this->objPenRelTipoDocMapRecebidoRN->obterSerieMapeada($numCodigoEspecie); } @@ -2537,12 +2554,16 @@ public function validarExtensaoComponentesDigitais($parIdTramite, $parObjProtoco $arquivoExtensaoBD = new ArquivoExtensaoBD($this->getObjInfraIBanco()); foreach($arrDocumentos as $objDocumento){ - if (!isset($objDocumento['retirado']) || $objDocumento['retirado'] == false) { - $arrComponentesDigitais = $objDocumento['componentesDigitais']; + if (!isset($objDocumento->retirado) || $objDocumento->retirado == false) { + $arrComponentesDigitais = $objDocumento->componentesDigitais; foreach ($arrComponentesDigitais as $componenteDigital) { + + if (is_array($componenteDigital)) { + $componenteDigital = (object) $componenteDigital; + } //Busca o nome do documento - $nomeDocumento = $componenteDigital['nome']; + $nomeDocumento = $componenteDigital->nome; //Busca pela extensão do documento $arrNomeDocumento = explode('.', $nomeDocumento); @@ -2657,9 +2678,14 @@ private function obterTamanhoComponenteDigitalPendente($parObjProtocolo, $parCom //Percorre os documentos e compoenntes para pegar o tamanho em bytes do componente foreach ($arrObjDocumentos as $objDocumento) { $arrObjComponentesDigitais = ProcessoEletronicoRN::obterComponentesDigitaisDocumento($objDocumento); - foreach ($arrObjComponentesDigitais as $arrComponentesDigital) { - if (ProcessoEletronicoRN::getHashFromMetaDados($arrComponentesDigital['hash']) == $parComponentePendente) { - $tamanhoComponentePendende = $arrComponentesDigital['tamanhoEmBytes']; + foreach ($arrObjComponentesDigitais as $objComponentesDigital) { + + if (is_array($objComponentesDigital)) { + $objComponentesDigital = (object) $objComponentesDigital; + } + + if (ProcessoEletronicoRN::getHashFromMetaDados($objComponentesDigital->hash) == $parComponentePendente) { + $tamanhoComponentePendende = $objComponentesDigital->tamanhoEmBytes; break; } } @@ -2733,11 +2759,16 @@ private function indexarComponenteDigitaisDoProtocolo($parObjProtocolo) $resultado = array(); $arrObjDocumentos = ProcessoEletronicoRN::obterDocumentosProtocolo($parObjProtocolo); foreach ($arrObjDocumentos as $arrDocumento) { - if(isset($arrDocumento['componentesDigitais']) && !is_array($arrDocumento['componentesDigitais'])){ - $arrDocumento['componentesDigitais'] = array($arrDocumento['componentesDigitais']); + if(isset($arrDocumento->componentesDigitais) && !is_array($arrDocumento->componentesDigitais)){ + $arrDocumento->componentesDigitais = array($arrDocumento->componentesDigitais); } - foreach ($arrDocumento['componentesDigitais'] as $objComponente) { - $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objComponente['hash']); + foreach ($arrDocumento->componentesDigitais as $objComponente) { + + if (is_array($objComponente)) { + $objComponente = (object) $objComponente; + } + + $strHash = ProcessoEletronicoRN::getHashFromMetaDados($objComponente->hash); $resultado[$strHash] = $objComponente; } } @@ -2822,7 +2853,7 @@ private function criarDiretorioAnexo($parObjAnexoDTO) private function adicionarObservacoesSobreNumeroDocumento($parObjDocumento) { $arrObjObservacoes = array(); - $strNumeroDocumentoOrigem = isset($parObjDocumento->protocolo) ? $parObjDocumento->protocolo : $parObjDocumento->produtor['numeroDeIdentificacao']; + $strNumeroDocumentoOrigem = isset($parObjDocumento->protocolo) ? $parObjDocumento->protocolo : $parObjDocumento->produtor->numeroDeIdentificacao; if(!empty($strNumeroDocumentoOrigem)){ $objObservacaoDTO = new ObservacaoDTO(); $objObservacaoDTO->setStrDescricao("Número do Documento na Origem: " . $strNumeroDocumentoOrigem);