Commit b7e118b8376d9bc43fefbbbb7747dc375263e123

Authored by Guilherme Del Cantoni
1 parent 2fc5620f

[Fixed #93] Erro no envio de recibo durante reprocessamento de status 3

PENIntegracao.php
@@ -11,7 +11,7 @@ class PENIntegracao extends SeiIntegracao { @@ -11,7 +11,7 @@ class PENIntegracao extends SeiIntegracao {
11 } 11 }
12 12
13 public function getVersao() { 13 public function getVersao() {
14 - return '1.2.0'; 14 + return '1.2.2';
15 } 15 }
16 16
17 public function getInstituicao() { 17 public function getInstituicao() {
rn/ProcessarPendenciasRN.php
@@ -33,9 +33,9 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa @@ -33,9 +33,9 @@ class ProcessarPendenciasRN extends InfraAgendamentoTarefa
33 ini_set('max_execution_time','0'); 33 ini_set('max_execution_time','0');
34 ini_set('memory_limit','-1'); 34 ini_set('memory_limit','-1');
35 35
36 - InfraDebug::getInstance()->setBolLigado(false); 36 + InfraDebug::getInstance()->setBolLigado(true);
37 InfraDebug::getInstance()->setBolDebugInfra(false); 37 InfraDebug::getInstance()->setBolDebugInfra(false);
38 - InfraDebug::getInstance()->setBolEcho(false); 38 + InfraDebug::getInstance()->setBolEcho(true);
39 InfraDebug::getInstance()->limpar(); 39 InfraDebug::getInstance()->limpar();
40 40
41 PENIntegracao::validarCompatibilidadeModulo(); 41 PENIntegracao::validarCompatibilidadeModulo();
rn/ProcessoEletronicoRN.php
@@ -28,7 +28,8 @@ class ProcessoEletronicoRN extends InfraRN { @@ -28,7 +28,8 @@ class ProcessoEletronicoRN extends InfraRN {
28 public static $STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE = 6; // Recibo de conclusão do trâmite recebido pelo remetente do processo 28 public static $STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE = 6; // Recibo de conclusão do trâmite recebido pelo remetente do processo
29 public static $STA_SITUACAO_TRAMITE_CANCELADO = 7; // Trâmite do processo ou documento cancelado pelo usuário (Qualquer situação diferente de 5 e 6) 29 public static $STA_SITUACAO_TRAMITE_CANCELADO = 7; // Trâmite do processo ou documento cancelado pelo usuário (Qualquer situação diferente de 5 e 6)
30 public static $STA_SITUACAO_TRAMITE_RECUSADO = 8; // Trâmite do processo recusado pelo destinatário (Situações 2, 3, 4) 30 public static $STA_SITUACAO_TRAMITE_RECUSADO = 8; // Trâmite do processo recusado pelo destinatário (Situações 2, 3, 4)
31 - public static $STA_SITUACAO_TRAMITE_CIENCIA_RECUSA = 9; // Remetente ciente da recusa do trâmite 31 + public static $STA_SITUACAO_TRAMITE_CIENCIA_RECUSA = 9; // Remetente ciente da recusa do trâmite
  32 + public static $STA_SITUACAO_TRAMITE_CANCELADO_AUTOMATICAMENTE = 10;
32 33
33 /* TIPO DE TRÂMITE EXTERNO DE PROCESSO */ 34 /* TIPO DE TRÂMITE EXTERNO DE PROCESSO */
34 public static $STA_TIPO_TRAMITE_ENVIO = 'E'; // Trâmite de ENVIO de processo externo 35 public static $STA_TIPO_TRAMITE_ENVIO = 'E'; // Trâmite de ENVIO de processo externo
@@ -1254,10 +1255,10 @@ class ProcessoEletronicoRN extends InfraRN { @@ -1254,10 +1255,10 @@ class ProcessoEletronicoRN extends InfraRN {
1254 1255
1255 //@TODOJOIN: Adicionar a seguinte linha abaixo dessa : $parametros->filtroDeConsultaDeTramites = new stdClass() 1256 //@TODOJOIN: Adicionar a seguinte linha abaixo dessa : $parametros->filtroDeConsultaDeTramites = new stdClass()
1256 //Faz a consulta do tramite 1257 //Faz a consulta do tramite
1257 - $paramConsultaTramite = new stdClass();  
1258 - $paramConsultaTramite->filtroDeConsultaDeTramites = new stdClass();  
1259 - $paramConsultaTramite->filtroDeConsultaDeTramites->IDT = $idTramite;  
1260 - $dadosTramite = $this->getObjPenWs()->consultarTramites($paramConsultaTramite); 1258 + //$paramConsultaTramite = new stdClass();
  1259 + //$paramConsultaTramite->filtroDeConsultaDeTramites = new stdClass();
  1260 + //$paramConsultaTramite->filtroDeConsultaDeTramites->IDT = $idTramite;
  1261 + //$dadosTramite = $this->getObjPenWs()->consultarTramites($paramConsultaTramite);
1261 1262
1262 //Requisita o cancelamento 1263 //Requisita o cancelamento
1263 $parametros = new stdClass(); 1264 $parametros = new stdClass();
rn/ReceberProcedimentoRN.php
@@ -103,12 +103,20 @@ class ReceberProcedimentoRN extends InfraRN @@ -103,12 +103,20 @@ class ReceberProcedimentoRN extends InfraRN
103 $arrayHash = array(); 103 $arrayHash = array();
104 $arrayHashPendentes = array(); 104 $arrayHashPendentes = array();
105 105
  106 + // Lista todos os componentes digitais presente no protocolo
  107 + // Esta verificação é necessária pois existem situações em que a lista de componentes digitais
  108 + // pendentes de recebimento informado pelo PEN não está de acordo com a lista atual de arquivos
  109 + // mantida pela aplicação.
  110 + $arrHashComponentesProtocolo = $this->listarHashDosComponentesMetadado($objProcesso);
  111 +
106 //Percorre os componentes que precisam ser recebidos 112 //Percorre os componentes que precisam ser recebidos
107 - foreach($objTramite->componenteDigitalPendenteDeRecebimento as $key => $componentePendente){ 113 + foreach($arrHashComponentesProtocolo as $key => $componentePendente){
108 114
  115 + $numOrdemComponente = $key + 1;
109 if(!is_null($componentePendente)){ 116 if(!is_null($componentePendente)){
110 117
111 - if(!$this->documentoJaRegistrado($strNumeroRegistro, $parNumIdentificacaoTramite, $componentePendente)){ 118 + $bolComponenteDigitalRegistrado = $this->documentoJaRegistrado($strNumeroRegistro, $parNumIdentificacaoTramite, $componentePendente);
  119 + if(!$bolComponenteDigitalRegistrado){
112 $arrayHashPendentes[] = $componentePendente; 120 $arrayHashPendentes[] = $componentePendente;
113 } 121 }
114 122
@@ -116,15 +124,19 @@ class ReceberProcedimentoRN extends InfraRN @@ -116,15 +124,19 @@ class ReceberProcedimentoRN extends InfraRN
116 //Ajuste deverá ser feito em versões futuas 124 //Ajuste deverá ser feito em versões futuas
117 $arrayHash[] = $componentePendente; 125 $arrayHash[] = $componentePendente;
118 126
119 - //Obter os dados do componente digital  
120 - $this->gravarLogDebug("Baixando componente digital $key", 6);  
121 - $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital($parNumIdentificacaoTramite, $componentePendente, $objTramite->protocolo);  
122 - $arrAnexosComponentes[$key][$componentePendente] = $receberComponenteDigitalRN->copiarComponenteDigitalPastaTemporaria($objComponenteDigital);  
123 - $arrAnexosComponentes[$key]['recebido'] = false;  
124 -  
125 - //Valida a integridade do hash  
126 - $this->gravarLogDebug("Validando integridade de componente digital $key", 6);  
127 - $receberComponenteDigitalRN->validarIntegridadeDoComponenteDigital($arrAnexosComponentes[$key][$componentePendente], $componentePendente, $parNumIdentificacaoTramite); 127 + if(!$bolComponenteDigitalRegistrado) {
  128 + //Obter os dados do componente digital
  129 + $this->gravarLogDebug("Baixando componente digital $numOrdemComponente", 6);
  130 + $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital($parNumIdentificacaoTramite, $componentePendente, $objTramite->protocolo);
  131 + $arrAnexosComponentes[$key][$componentePendente] = $receberComponenteDigitalRN->copiarComponenteDigitalPastaTemporaria($objComponenteDigital);
  132 + $arrAnexosComponentes[$key]['recebido'] = false;
  133 +
  134 + //Valida a integridade do hash
  135 + $this->gravarLogDebug("Validando integridade de componente digital $numOrdemComponente", 6);
  136 + $receberComponenteDigitalRN->validarIntegridadeDoComponenteDigital($arrAnexosComponentes[$key][$componentePendente], $componentePendente, $parNumIdentificacaoTramite);
  137 + } else {
  138 + $this->gravarLogDebug("Componente digital desconsiderado por já fazer parte do processo", 6);
  139 + }
128 } 140 }
129 } 141 }
130 142
@@ -234,6 +246,33 @@ class ReceberProcedimentoRN extends InfraRN @@ -234,6 +246,33 @@ class ReceberProcedimentoRN extends InfraRN
234 } 246 }
235 } 247 }
236 248
  249 + /**
  250 + * Método para recuperar a lista de todos os hashs dos componentes digitais presentes no protocolo recebido
  251 + *
  252 + * @return Array Lista de hashs dos componentes digitais
  253 + */
  254 + private function listarHashDosComponentesMetadado($parObjProtocolo)
  255 + {
  256 + if(!isset($parObjProtocolo->documento)){
  257 + throw new InfraException("Metadados do componente digital do documento de ordem {$objDocumento->ordem} não informado.");
  258 + }
  259 +
  260 + $arrHashsComponentesDigitais = array();
  261 + $arrObjDocumento = is_array($parObjProtocolo->documento) ? $parObjProtocolo->documento : array($parObjProtocolo->documento);
  262 + foreach($arrObjDocumento as $objDocumento){
  263 + if(!isset($objDocumento->componenteDigital)){
  264 + throw new InfraException("Metadados do componente digital do documento de ordem {$objDocumento->ordem} não informado.");
  265 + }
  266 +
  267 + $arrObjComponentesDigitais = is_array($objDocumento->componenteDigital) ? $objDocumento->componenteDigital : array($objDocumento->componenteDigital);
  268 + foreach ($arrObjComponentesDigitais as $objComponenteDigital) {
  269 + $arrHashsComponentesDigitais[] = ProcessoEletronicoRN::getHashFromMetaDados($objComponenteDigital->hash);
  270 + }
  271 + }
  272 +
  273 + return $arrHashsComponentesDigitais;
  274 + }
  275 +
237 public function fecharProcedimentoEmOutraUnidades(ProcedimentoDTO $objProcedimentoDTO, $parObjMetadadosProcedimento){ 276 public function fecharProcedimentoEmOutraUnidades(ProcedimentoDTO $objProcedimentoDTO, $parObjMetadadosProcedimento){
238 277
239 $objPenUnidadeDTO = new PenUnidadeDTO(); 278 $objPenUnidadeDTO = new PenUnidadeDTO();
@@ -421,6 +460,7 @@ class ReceberProcedimentoRN extends InfraRN @@ -421,6 +460,7 @@ class ReceberProcedimentoRN extends InfraRN
421 $objComponenteDigitalDTO->setStrNumeroRegistro($parStrNumeroRegistro); 460 $objComponenteDigitalDTO->setStrNumeroRegistro($parStrNumeroRegistro);
422 $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite); 461 $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite);
423 $objComponenteDigitalDTO->setStrHashConteudo($parStrHashComponenteDigital); 462 $objComponenteDigitalDTO->setStrHashConteudo($parStrHashComponenteDigital);
  463 + $objComponenteDigitalDTO->setNumIdAnexo(null, InfraDTO::$OPER_DIFERENTE);
424 464
425 $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco()); 465 $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco());
426 return $objComponenteDigitalBD->contar($objComponenteDigitalDTO) > 0; 466 return $objComponenteDigitalBD->contar($objComponenteDigitalDTO) > 0;