Commit 6a36ffe7b9aa51f99530e540cabf122fc13804eb
1 parent
c71465bc
Exists in
feature-76
Implementação parcial do recebimento de mais de um componente digital
Showing
2 changed files
with
116 additions
and
89 deletions
Show diff stats
rn/ProcessoEletronicoRN.php
... | ... | @@ -782,72 +782,77 @@ class ProcessoEletronicoRN extends InfraRN { |
782 | 782 | return $strHashConteudo; |
783 | 783 | } |
784 | 784 | |
785 | - private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjComponentesDigitaisSolicitados) | |
786 | - { | |
787 | - //Monta dados dos componentes digitais | |
788 | - $arrObjComponenteDigitalDTO = array(); | |
789 | - if(!is_array($parObjProcesso->documento)) { | |
790 | - $parObjProcesso->documento = array($parObjProcesso->documento); | |
791 | - } | |
792 | - | |
793 | - foreach ($parObjProcesso->documento as $objDocumento) { | |
794 | - $objComponenteDigitalDTO = new ComponenteDigitalDTO(); | |
795 | - $objComponenteDigitalDTO->setStrNumeroRegistro($parStrNumeroRegistro); | |
796 | - $objComponenteDigitalDTO->setDblIdProcedimento($parObjProcesso->idProcedimentoSEI); //TODO: Error utilizar idProcedimentoSEI devido processos apensados | |
797 | - $objComponenteDigitalDTO->setDblIdDocumento($objDocumento->idDocumentoSEI); | |
798 | - $objComponenteDigitalDTO->setNumOrdem($objDocumento->ordem); | |
799 | - $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite); | |
800 | - $objComponenteDigitalDTO->setStrProtocolo($parObjProcesso->protocolo); | |
801 | - | |
802 | - //Por enquanto, considera que o documento possui apenas um componente digital | |
803 | - if(is_array($objDocumento->componenteDigital) && count($objDocumento->componenteDigital) != 1) { | |
804 | - throw new InfraException("Erro processando componentes digitais do processo " . $parObjProcesso->protocolo . "\n Somente é permitido o recebimento de documentos com apenas um Componente Digital."); | |
805 | - } | |
806 | - | |
807 | - $objComponenteDigital = $objDocumento->componenteDigital; | |
808 | - $objComponenteDigitalDTO->setStrNome($objComponenteDigital->nome); | |
809 | - | |
810 | - $strHashConteudo = static::getHashFromMetaDados($objComponenteDigital->hash); | |
811 | - | |
812 | - $objComponenteDigitalDTO->setStrHashConteudo($strHashConteudo); | |
813 | - $objComponenteDigitalDTO->setStrAlgoritmoHash(self::ALGORITMO_HASH_DOCUMENTO); | |
814 | - $objComponenteDigitalDTO->setStrTipoConteudo($objComponenteDigital->tipoDeConteudo); | |
815 | - $objComponenteDigitalDTO->setStrMimeType($objComponenteDigital->mimeType); | |
816 | - $objComponenteDigitalDTO->setStrDadosComplementares($objComponenteDigital->dadosComplementaresDoTipoDeArquivo); | |
785 | + private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjComponentesDigitaisSolicitados) | |
786 | + { | |
787 | + //Monta dados dos componentes digitais | |
788 | + $arrObjComponenteDigitalDTO = array(); | |
789 | + if(!is_array($parObjProcesso->documento)) { | |
790 | + $parObjProcesso->documento = array($parObjProcesso->documento); | |
791 | + } | |
817 | 792 | |
818 | - //Registrar componente digital necessita ser enviado pelo trâmite espefífico //TODO: Teste $parObjComponentesDigitaisSolicitados aqui | |
819 | - if(isset($parObjComponentesDigitaisSolicitados)){ | |
820 | - $arrObjItensSolicitados = is_array($parObjComponentesDigitaisSolicitados->processo) ? $parObjComponentesDigitaisSolicitados->processo : array($parObjComponentesDigitaisSolicitados->processo); | |
793 | + foreach ($parObjProcesso->documento as $objDocumento) | |
794 | + { | |
795 | + $objComponenteDigitalDTO = new ComponenteDigitalDTO(); | |
796 | + $objComponenteDigitalDTO->setStrNumeroRegistro($parStrNumeroRegistro); | |
797 | + $objComponenteDigitalDTO->setDblIdProcedimento($parObjProcesso->idProcedimentoSEI); //TODO: Error utilizar idProcedimentoSEI devido processos apensados | |
798 | + $objComponenteDigitalDTO->setDblIdDocumento($objDocumento->idDocumentoSEI); | |
799 | + $objComponenteDigitalDTO->setNumOrdem($objDocumento->ordem); | |
800 | + $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite); | |
801 | + $objComponenteDigitalDTO->setStrProtocolo($parObjProcesso->protocolo); | |
802 | + | |
803 | + //Por enquanto, considera que o documento possui apenas um componente digital | |
804 | + // if(is_array($objDocumento->componenteDigital) && count($objDocumento->componenteDigital) != 1) { | |
805 | + // throw new InfraException("Erro processando componentes digitais do processo " . $parObjProcesso->protocolo . "\n Somente é permitido o recebimento de documentos com apenas um Componente Digital."); | |
806 | + // } | |
807 | + | |
808 | + $arrObjComponenteDigital = is_array($objDocumento->componenteDigital) ? $objDocumento->componenteDigital : array($objDocumento->componenteDigital); | |
809 | + | |
810 | + foreach ($arrObjComponenteDigital as $objComponenteDigital) | |
811 | + { | |
812 | + $objComponenteDigitalDTO->setStrNome($objComponenteDigital->nome); | |
813 | + | |
814 | + $strHashConteudo = static::getHashFromMetaDados($objComponenteDigital->hash); | |
815 | + | |
816 | + $objComponenteDigitalDTO->setStrHashConteudo($strHashConteudo); | |
817 | + $objComponenteDigitalDTO->setStrAlgoritmoHash(self::ALGORITMO_HASH_DOCUMENTO); | |
818 | + $objComponenteDigitalDTO->setStrTipoConteudo($objComponenteDigital->tipoDeConteudo); | |
819 | + $objComponenteDigitalDTO->setStrMimeType($objComponenteDigital->mimeType); | |
820 | + $objComponenteDigitalDTO->setStrDadosComplementares($objComponenteDigital->dadosComplementaresDoTipoDeArquivo); | |
821 | + | |
822 | + //Registrar componente digital necessita ser enviado pelo trâmite espefífico //TODO: Teste $parObjComponentesDigitaisSolicitados aqui | |
823 | + if (isset($parObjComponentesDigitaisSolicitados)) { | |
824 | + $arrObjItensSolicitados = is_array($parObjComponentesDigitaisSolicitados->processo) ? $parObjComponentesDigitaisSolicitados->processo : array($parObjComponentesDigitaisSolicitados->processo); | |
825 | + | |
826 | + foreach ($arrObjItensSolicitados as $objItemSolicitado) { | |
827 | + if (!is_null($objItemSolicitado)) { | |
828 | + $objItemSolicitado->hash = is_array($objItemSolicitado->hash) ? $objItemSolicitado->hash : array($objItemSolicitado->hash); | |
829 | + | |
830 | + if ($objItemSolicitado->protocolo == $objComponenteDigitalDTO->getStrProtocolo() && in_array($strHashConteudo, $objItemSolicitado->hash) && !$objDocumento->retirado) { | |
831 | + $objComponenteDigitalDTO->setStrSinEnviar("S"); | |
832 | + } | |
833 | + } | |
834 | + } | |
835 | + } | |
821 | 836 | |
822 | - foreach ($arrObjItensSolicitados as $objItemSolicitado) { | |
823 | - if(!is_null($objItemSolicitado)){ | |
824 | - $objItemSolicitado->hash = is_array($objItemSolicitado->hash) ? $objItemSolicitado->hash : array($objItemSolicitado->hash); | |
837 | + //TODO: Avaliar dados do tamanho do documento em bytes salvo na base de dados | |
838 | + $objComponenteDigitalDTO->setNumTamanho($objComponenteDigital->tamanhoEmBytes); | |
825 | 839 | |
826 | - if($objItemSolicitado->protocolo == $objComponenteDigitalDTO->getStrProtocolo() && in_array($strHashConteudo, $objItemSolicitado->hash) && !$objDocumento->retirado) { | |
827 | - $objComponenteDigitalDTO->setStrSinEnviar("S"); | |
828 | - } | |
840 | + $objComponenteDigitalDTO->setNumIdAnexo($objComponenteDigital->idAnexo); | |
841 | + $arrObjComponenteDigitalDTO[] = $objComponenteDigitalDTO; | |
829 | 842 | } |
830 | 843 | } |
831 | - } | |
832 | - | |
833 | - //TODO: Avaliar dados do tamanho do documento em bytes salvo na base de dados | |
834 | - $objComponenteDigitalDTO->setNumTamanho($objComponenteDigital->tamanhoEmBytes); | |
835 | 844 | |
836 | - $objComponenteDigitalDTO->setNumIdAnexo($objComponenteDigital->idAnexo); | |
837 | - $arrObjComponenteDigitalDTO[] = $objComponenteDigitalDTO; | |
838 | - } | |
845 | + //Chamada recursiva sobre os documentos dos processos apensados | |
846 | + if(isset($parObjProcesso->processoApensado) && count($parObjProcesso->processoApensado)) { | |
847 | + foreach ($parObjProcesso->processoApensado as $objProcessoApensado) { | |
848 | + $arrObj = $this->montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $objProcessoApensado, $parObjComponentesDigitaisSolicitados); | |
849 | + $arrObjComponenteDigitalDTO = array_merge($arrObjComponenteDigitalDTO, $arrObj); | |
850 | + } | |
851 | + } | |
839 | 852 | |
840 | - //Chamada recursiva sobre os documentos dos processos apensados | |
841 | - if(isset($parObjProcesso->processoApensado) && count($parObjProcesso->processoApensado)) { | |
842 | - foreach ($parObjProcesso->processoApensado as $objProcessoApensado) { | |
843 | - $arrObj = $this->montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $objProcessoApensado, $parObjComponentesDigitaisSolicitados); | |
844 | - $arrObjComponenteDigitalDTO = array_merge($arrObjComponenteDigitalDTO, $arrObj); | |
845 | - } | |
853 | + return $arrObjComponenteDigitalDTO; | |
846 | 854 | } |
847 | 855 | |
848 | - return $arrObjComponenteDigitalDTO; | |
849 | - } | |
850 | - | |
851 | 856 | |
852 | 857 | public function receberComponenteDigital($parNumIdentificacaoTramite, $parStrHashComponenteDigital, $parStrProtocolo) |
853 | 858 | { | ... | ... |
rn/ReceberProcedimentoRN.php
... | ... | @@ -87,9 +87,11 @@ class ReceberProcedimentoRN extends InfraRN |
87 | 87 | |
88 | 88 | #############################INICIA O RECEBIMENTO DOS COMPONENTES DIGITAIS US010################################################ |
89 | 89 | |
90 | - //Obtém lista de componentes digitais que precisam ser obtidos | |
90 | + //Realiza as validações nos componentes digitais dos documentos | |
91 | 91 | $this->validarComponentesDigitais($objProtocolo, $parNumIdentificacaoTramite); |
92 | 92 | $this->validarExtensaoComponentesDigitais($parNumIdentificacaoTramite, $objProtocolo); |
93 | + | |
94 | + //Verifica a permissão de escrita nos diretórios de arquivos externos | |
93 | 95 | $this->verificarPermissoesDiretorios($parNumIdentificacaoTramite); |
94 | 96 | |
95 | 97 | $this->gravarLogDebug("Obtém lista de componentes digitais que precisam ser obtidos", 4); |
... | ... | @@ -120,7 +122,9 @@ class ReceberProcedimentoRN extends InfraRN |
120 | 122 | |
121 | 123 | //Obter os dados do componente digital |
122 | 124 | $this->gravarLogDebug("Baixando componente digital $key", 6); |
125 | + | |
123 | 126 | $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital($parNumIdentificacaoTramite, $componentePendente, $objTramite->protocolo); |
127 | + | |
124 | 128 | $arrAnexosComponentes[$key][$componentePendente] = $receberComponenteDigitalRN->copiarComponenteDigitalPastaTemporaria($objComponenteDigital); |
125 | 129 | $arrAnexosComponentes[$key]['recebido'] = false; |
126 | 130 | |
... | ... | @@ -177,6 +181,7 @@ class ReceberProcedimentoRN extends InfraRN |
177 | 181 | } |
178 | 182 | |
179 | 183 | if(count($arrComponentesPendentesRecebimento) > 0){ |
184 | + | |
180 | 185 | //Obter dados dos componetes digitais |
181 | 186 | $this->gravarLogDebug("Iniciando o recebimento dos componentes digitais pendentes", 4); |
182 | 187 | $objComponenteDigitalDTO = new ComponenteDigitalDTO(); |
... | ... | @@ -329,7 +334,7 @@ class ReceberProcedimentoRN extends InfraRN |
329 | 334 | } |
330 | 335 | |
331 | 336 | /** |
332 | - * Valida cada componente digital, se não algum não for aceito recusa o tramite | |
337 | + * Valida cada componente digital, se algum não for aceito recusa o tramite | |
333 | 338 | * do procedimento para esta unidade |
334 | 339 | */ |
335 | 340 | private function validarComponentesDigitais($parObjProtocolo, $parNumIdentificacaoTramite) |
... | ... | @@ -356,18 +361,24 @@ class ReceberProcedimentoRN extends InfraRN |
356 | 361 | $objPenParametroRN = new PenParametroRN(); |
357 | 362 | $numTamDocExterno = $objPenParametroRN->getParametro('PEN_TAMANHO_MAXIMO_DOCUMENTO_EXPEDIDO'); |
358 | 363 | |
359 | - foreach($arrObjDocumentos as $objDocument) { | |
360 | - | |
361 | - //Não valida informações do componente digital caso o documento esteja cancelado | |
362 | - if(isset($objDocumento->retirado) && $objDocumento->retirado === true){ | |
363 | - if (is_null($objDocument->componenteDigital->tamanhoEmBytes) || $objDocument->componenteDigital->tamanhoEmBytes == 0){ | |
364 | - throw new InfraException('Tamanho de componente digital não informado.', null, 'RECUSA: '.ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); | |
365 | - } | |
364 | + foreach($arrObjDocumentos as $objDocumento) | |
365 | + { | |
366 | + $arrObjComponenteDigital = $this->obterComponentesDigitaisDocumento($objDocumento); | |
367 | + | |
368 | + //Valida o tamnho dos compoenentes digitais | |
369 | + foreach ($arrObjComponenteDigital as $objComponenteDigital) | |
370 | + { | |
371 | + //Não valida informações do componente digital caso o documento esteja cancelado | |
372 | + if(isset($objDocumento->retirado) && $objDocumento->retirado === true){ | |
373 | + if (is_null($objComponenteDigital->tamanhoEmBytes) || $objComponenteDigital->tamanhoEmBytes == 0){ | |
374 | + throw new InfraException('Tamanho de componente digital não informado.', null, 'RECUSA: '.ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); | |
375 | + } | |
366 | 376 | |
367 | - if($objDocument->componenteDigital->tamanhoEmBytes > ($numTamDocExterno * 1024 * 1024)){ | |
368 | - $numTamanhoMb = $objDocument->componenteDigital->tamanhoEmBytes / ( 1024 * 1024); | |
369 | - $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, 'Componente digital não pode ultrapassar '.round($numTamDocExterno, 2).'MBs, o tamanho do anexo é '.round($numTamanhoMb, 2).'MBs .', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); | |
370 | - throw new InfraException('Componente digital não pode ultrapassar '.round($numTamDocExterno, 2).'MBs, o tamanho do anexo é '.round($numTamanhoMb).'MBs'); | |
377 | + if($objComponenteDigital->tamanhoEmBytes > ($numTamDocExterno * 1024 * 1024)){ | |
378 | + $numTamanhoMb = $objComponenteDigital->tamanhoEmBytes / ( 1024 * 1024); | |
379 | + $this->objProcessoEletronicoRN->recusarTramite($parNumIdentificacaoTramite, 'Componente digital não pode ultrapassar '.round($numTamDocExterno, 2).'MBs, o tamanho do anexo é '.round($numTamanhoMb, 2).'MBs .', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_OUTROU); | |
380 | + throw new InfraException('Componente digital não pode ultrapassar '.round($numTamDocExterno, 2).'MBs, o tamanho do anexo é '.round($numTamanhoMb).'MBs'); | |
381 | + } | |
371 | 382 | } |
372 | 383 | } |
373 | 384 | } |
... | ... | @@ -385,6 +396,11 @@ class ReceberProcedimentoRN extends InfraRN |
385 | 396 | return $arrObjDocumento; |
386 | 397 | } |
387 | 398 | |
399 | + private function obterComponentesDigitaisDocumento($parObjDocumento) | |
400 | + { | |
401 | + return $arrObjComponenteDigital = is_array($parObjDocumento->componenteDigital) ? $parObjDocumento->componenteDigital : array($parObjDocumento->componenteDigital); | |
402 | + } | |
403 | + | |
388 | 404 | private function registrarProcesso($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProtocolo, $parObjMetadadosProcedimento) |
389 | 405 | { |
390 | 406 | // Validação dos dados do processo recebido |
... | ... | @@ -1790,25 +1806,31 @@ class ReceberProcedimentoRN extends InfraRN |
1790 | 1806 | //Instancia o bd do arquivoExtensão |
1791 | 1807 | $arquivoExtensaoBD = new ArquivoExtensaoBD($this->getObjInfraIBanco()); |
1792 | 1808 | |
1793 | - //Percorre os documentos | |
1794 | - foreach($arrDocumentos as $documento){ | |
1795 | - | |
1796 | - //Busca o nome do documento | |
1797 | - $nomeDocumento = $documento->componenteDigital->nome; | |
1798 | - | |
1799 | - //Busca pela extensão do documento | |
1800 | - $arrNomeDocumento = explode('.', $nomeDocumento); | |
1801 | - $extDocumento = $arrNomeDocumento[count($arrNomeDocumento) - 1]; | |
1802 | - | |
1803 | - //Verifica se a extensão do arquivo está cadastrada e ativa | |
1804 | - $arquivoExtensaoDTO = new ArquivoExtensaoDTO(); | |
1805 | - $arquivoExtensaoDTO->setStrSinAtivo('S'); | |
1806 | - $arquivoExtensaoDTO->setStrExtensao($extDocumento); | |
1807 | - $arquivoExtensaoDTO->retStrExtensao(); | |
1808 | - | |
1809 | - if($arquivoExtensaoBD->contar($arquivoExtensaoDTO) == 0){ | |
1810 | - $this->objProcessoEletronicoRN->recusarTramite($parIdTramite, 'Componentes digitais com formato inválido no destinatário. ', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_FORMATO); | |
1811 | - throw new InfraException("Processo recusado devido a existência de documento em formato {$extDocumento} não permitido pelo sistema. "); | |
1809 | + //Percorre os documentos para validar a extensão dos componentes digitais | |
1810 | + foreach($arrDocumentos as $documento) | |
1811 | + { | |
1812 | + $arrObjComponenteDigital = $this->obterComponentesDigitaisDocumento($documento); | |
1813 | + | |
1814 | + //Valida a extensão dos componentes digitais | |
1815 | + foreach ($arrObjComponenteDigital as $objComponenteDigital) | |
1816 | + { | |
1817 | + //Busca o nome do documento | |
1818 | + $nomeDocumento = $objComponenteDigital->nome; | |
1819 | + | |
1820 | + //Busca pela extensão do documento | |
1821 | + $arrNomeDocumento = explode('.', $nomeDocumento); | |
1822 | + $extDocumento = $arrNomeDocumento[count($arrNomeDocumento) - 1]; | |
1823 | + | |
1824 | + //Verifica se a extensão do arquivo está cadastrada e ativa | |
1825 | + $arquivoExtensaoDTO = new ArquivoExtensaoDTO(); | |
1826 | + $arquivoExtensaoDTO->setStrSinAtivo('S'); | |
1827 | + $arquivoExtensaoDTO->setStrExtensao($extDocumento); | |
1828 | + $arquivoExtensaoDTO->retStrExtensao(); | |
1829 | + | |
1830 | + if ($arquivoExtensaoBD->contar($arquivoExtensaoDTO) == 0) { | |
1831 | + $this->objProcessoEletronicoRN->recusarTramite($parIdTramite, 'Componentes digitais com formato inválido no destinatário. ', ProcessoEletronicoRN::MTV_RCSR_TRAM_CD_FORMATO); | |
1832 | + throw new InfraException("Processo recusado devido a existência de documento em formato {$extDocumento} não permitido pelo sistema. "); | |
1833 | + } | |
1812 | 1834 | } |
1813 | 1835 | } |
1814 | 1836 | } | ... | ... |