Commit f55d89579e1fc8e36269d454c3a3b8b7ff8264d5

Authored by Guilherme Andrade Del Cantoni
1 parent f1cd004f

[Fixed #97] Correção de problema na reutilização de NRE em cancelamentos

dto/ComponenteDigitalDTO.php
@@ -28,11 +28,14 @@ class ComponenteDigitalDTO extends InfraDTO { @@ -28,11 +28,14 @@ class ComponenteDigitalDTO extends InfraDTO {
28 $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'Ordem', 'ordem'); 28 $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_NUM, 'Ordem', 'ordem');
29 $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_STR, 'SinEnviar', 'sin_enviar'); 29 $this->adicionarAtributoTabela(InfraDTO::$PREFIXO_STR, 'SinEnviar', 'sin_enviar');
30 30
  31 + $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_STR, 'StaTipoTramite', 'sta_tipo_tramite', 'md_pen_tramite');
31 $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_NUM, 'TicketEnvioComponentes', 'ticket_envio_componentes', 'md_pen_tramite'); 32 $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_NUM, 'TicketEnvioComponentes', 'ticket_envio_componentes', 'md_pen_tramite');
32 $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_STR, 'ConteudoAssinaturaDocumento', 'conteudo_assinatura', 'documento_conteudo'); 33 $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_STR, 'ConteudoAssinaturaDocumento', 'conteudo_assinatura', 'documento_conteudo');
33 $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_STR, 'ProtocoloDocumentoFormatado', 'protocolo_formatado', 'protocolo'); 34 $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_STR, 'ProtocoloDocumentoFormatado', 'protocolo_formatado', 'protocolo');
  35 + $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_STR, 'StaProtocolo', 'sta_protocolo', 'protocolo');
34 $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_STR, 'StaEstadoProtocolo', 'sta_estado', 'protocolo'); 36 $this->adicionarAtributoTabelaRelacionada(InfraDTO::$PREFIXO_STR, 'StaEstadoProtocolo', 'sta_estado', 'protocolo');
35 37
  38 +
36 $this->configurarPK('NumeroRegistro', InfraDTO::$TIPO_PK_INFORMADO); 39 $this->configurarPK('NumeroRegistro', InfraDTO::$TIPO_PK_INFORMADO);
37 $this->configurarPK('IdDocumento', InfraDTO::$TIPO_PK_INFORMADO); 40 $this->configurarPK('IdDocumento', InfraDTO::$TIPO_PK_INFORMADO);
38 41
rn/ExpedirProcedimentoRN.php
@@ -365,31 +365,45 @@ class ExpedirProcedimentoRN extends InfraRN { @@ -365,31 +365,45 @@ class ExpedirProcedimentoRN extends InfraRN {
365 365
366 //Obtenção do número de registro eletrônico do processo 366 //Obtenção do número de registro eletrônico do processo
367 $strNumeroRegistro = null; 367 $strNumeroRegistro = null;
368 - $objProcessoEletronicoBD = new ProcessoEletronicoBD($this->getObjInfraIBanco());  
369 - $objProcessoEletronicoDTO = new ProcessoEletronicoDTO();  
370 - $objProcessoEletronicoDTO->setDblIdProcedimento($objExpedirProcedimentoDTO->getDblIdProcedimento());  
371 - //TODO: Tratar situao de quando localizado dois registros para o mesmo processo  
372 - $objProcessoEletronicoDTO->setNumMaxRegistrosRetorno(1);  
373 - $objProcessoEletronicoDTO->setOrd('IdProcedimento', InfraDTO::$TIPO_ORDENACAO_DESC);  
374 - $objProcessoEletronicoDTO->retStrNumeroRegistro();  
375 368
376 - $objProcessoEletronicoDTO = $objProcessoEletronicoBD->consultar($objProcessoEletronicoDTO);  
377 - if(isset($objProcessoEletronicoDTO)) {  
378 - $strNumeroRegistro = $objProcessoEletronicoDTO->getStrNumeroRegistro(); 369 + $objTramiteBD = new TramiteBD($this->getObjInfraIBanco());
  370 + $objTramiteDTOFiltro = new TramiteDTO();
  371 + $objTramiteDTOFiltro->retStrNumeroRegistro();
  372 + $objTramiteDTOFiltro->setNumIdProcedimento($objExpedirProcedimentoDTO->getDblIdProcedimento());
  373 + $objTramiteDTOFiltro->setOrdNumIdTramite(InfraDTO::$TIPO_ORDENACAO_DESC);
  374 + $objTramiteDTOFiltro->setNumMaxRegistrosRetorno(1);
  375 +
  376 + $objTramiteDTO = $objTramiteBD->consultar($objTramiteDTOFiltro);
  377 + if(isset($objTramiteDTO)) {
  378 + $strNumeroRegistro = $objTramiteDTO->getStrNumeroRegistro();
379 } 379 }
380 380
381 // Consultar se processo eletrônico existe no PEN algum trâmite CANCELADO, caso 381 // Consultar se processo eletrônico existe no PEN algum trâmite CANCELADO, caso
382 // sim deve ser gerada uma nova NRE, pois a atual ser recusada pelo PEN quando 382 // sim deve ser gerada uma nova NRE, pois a atual ser recusada pelo PEN quando
383 // for enviado 383 // for enviado
384 - /* if(!InfraString::isBolVazia($strNumeroRegistro)) { 384 + if(!InfraString::isBolVazia($strNumeroRegistro)) {
385 $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites(null, $strNumeroRegistro); 385 $arrObjTramite = $this->objProcessoEletronicoRN->consultarTramites(null, $strNumeroRegistro);
386 - if(!empty($arrObjTramite) && is_array($arrObjTramite) && count($arrObjTramite) === 1) {  
387 - $objTramite = current($arrObjTramite);  
388 - if($objTramite->situacaoAtual == ProcessoeletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO || $objTramite->situacaoAtual == ProcessoeletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO){ 386 + if(!empty($arrObjTramite) && is_array($arrObjTramite)) {
  387 +
  388 + $arrNumSituacoesTramiteEfetivado = array(
  389 + ProcessoeletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_ENVIADO_DESTINATARIO,
  390 + ProcessoeletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE,
  391 + );
  392 +
  393 + $bolExisteTramiteConcluido = false;
  394 + foreach ($arrObjTramite as $objTramite) {
  395 + //Caso exista algum trâmite realizado com sucesso para outro destinatário, número do NRE precisa ser reutilizado
  396 + if(in_array($objTramite->situacaoAtual, $arrNumSituacoesTramiteEfetivado)){
  397 + $bolExisteTramiteConcluido = true;
  398 + break;
  399 + }
  400 + }
  401 +
  402 + if(!$bolExisteTramiteConcluido){
389 $strNumeroRegistro = null; 403 $strNumeroRegistro = null;
390 } 404 }
391 } 405 }
392 - } */ 406 + }
393 407
394 return $this->objProcessoEletronicoRN->construirCabecalho( 408 return $this->objProcessoEletronicoRN->construirCabecalho(
395 $strNumeroRegistro, 409 $strNumeroRegistro,
@@ -2241,7 +2255,7 @@ class ExpedirProcedimentoRN extends InfraRN { @@ -2241,7 +2255,7 @@ class ExpedirProcedimentoRN extends InfraRN {
2241 $tramite = $tramites ? $tramites[0] : null; 2255 $tramite = $tramites ? $tramites[0] : null;
2242 2256
2243 if (!$tramite) { 2257 if (!$tramite) {
2244 - throw new InfraException('Trâmite não encontrado para esse processo. '); 2258 + throw new InfraException("Trâmite não encontrado para esse processo. ({$objDtoProtocolo->getDblIdProtocolo()})");
2245 } 2259 }
2246 2260
2247 //Verifica se o trâmite est com o status de iniciado 2261 //Verifica se o trâmite est com o status de iniciado
rn/ProcessoEletronicoRN.php
@@ -918,9 +918,7 @@ class ProcessoEletronicoRN extends InfraRN { @@ -918,9 +918,7 @@ class ProcessoEletronicoRN extends InfraRN {
918 } 918 }
919 919
920 $objTramitesEncontrados = $this->getObjPenWs()->consultarTramites($parametro); 920 $objTramitesEncontrados = $this->getObjPenWs()->consultarTramites($parametro);
921 -  
922 if(isset($objTramitesEncontrados->tramitesEncontrados)) { 921 if(isset($objTramitesEncontrados->tramitesEncontrados)) {
923 -  
924 $arrObjTramite = $objTramitesEncontrados->tramitesEncontrados->tramite; 922 $arrObjTramite = $objTramitesEncontrados->tramitesEncontrados->tramite;
925 if(!is_array($arrObjTramite)) { 923 if(!is_array($arrObjTramite)) {
926 $arrObjTramite = array($objTramitesEncontrados->tramitesEncontrados->tramite); 924 $arrObjTramite = array($objTramitesEncontrados->tramitesEncontrados->tramite);
@@ -1455,10 +1453,10 @@ class ProcessoEletronicoRN extends InfraRN { @@ -1455,10 +1453,10 @@ class ProcessoEletronicoRN extends InfraRN {
1455 $arrObjAtividadeDTO = $objAtividadeRN->listarRN0036($objAtividadeDTO); 1453 $arrObjAtividadeDTO = $objAtividadeRN->listarRN0036($objAtividadeDTO);
1456 $numIdUnidade = SessaoSEI::getInstance()->getNumIdUnidadeAtual(); 1454 $numIdUnidade = SessaoSEI::getInstance()->getNumIdUnidadeAtual();
1457 1455
1458 - //if(!empty($arrObjAtividadeDTO)){  
1459 - // $objAtividadeDTO = $arrObjAtividadeDTO[0];  
1460 - // $numIdUnidade = $objAtividadeDTO->getNumIdUnidade();  
1461 - //} 1456 + if(!empty($arrObjAtividadeDTO)){
  1457 + $objAtividadeDTO = $arrObjAtividadeDTO[0];
  1458 + $numIdUnidade = $objAtividadeDTO->getNumIdUnidade();
  1459 + }
1462 1460
1463 return $numIdUnidade; 1461 return $numIdUnidade;
1464 } 1462 }
rn/ReceberComponenteDigitalRN.php
@@ -143,7 +143,6 @@ class ReceberComponenteDigitalRN extends InfraRN @@ -143,7 +143,6 @@ class ReceberComponenteDigitalRN extends InfraRN
143 $objDocumentoDTO->setObjProtocoloDTO($objProtocoloDTO); 143 $objDocumentoDTO->setObjProtocoloDTO($objProtocoloDTO);
144 $objProtocoloDTO->setArrObjAnexoDTO(array($parObjAnexoDTO)); 144 $objProtocoloDTO->setArrObjAnexoDTO(array($parObjAnexoDTO));
145 145
146 - $objDocumentoDTO->setStrSinBloqueado('S');  
147 $objDocumentoDTO = $objDocumentoRN->alterarRN0004($objDocumentoDTO); 146 $objDocumentoDTO = $objDocumentoRN->alterarRN0004($objDocumentoDTO);
148 } 147 }
149 } 148 }
rn/ReceberProcedimentoRN.php
@@ -94,7 +94,6 @@ class ReceberProcedimentoRN extends InfraRN @@ -94,7 +94,6 @@ class ReceberProcedimentoRN extends InfraRN
94 $this->gravarLogDebug("Obtendo metadados dos componentes digitais do processo", 4); 94 $this->gravarLogDebug("Obtendo metadados dos componentes digitais do processo", 4);
95 $arrAnexosComponentes = array(); 95 $arrAnexosComponentes = array();
96 $arrayHash = array(); 96 $arrayHash = array();
97 - $arrayHashPendentes = array();  
98 97
99 // Lista todos os componentes digitais presente no protocolo 98 // Lista todos os componentes digitais presente no protocolo
100 // Esta verificação é necessária pois existem situações em que a lista de componentes digitais 99 // Esta verificação é necessária pois existem situações em que a lista de componentes digitais
@@ -111,30 +110,21 @@ class ReceberProcedimentoRN extends InfraRN @@ -111,30 +110,21 @@ class ReceberProcedimentoRN extends InfraRN
111 110
112 $numOrdemComponente = $key + 1; 111 $numOrdemComponente = $key + 1;
113 if(!is_null($componentePendente)){ 112 if(!is_null($componentePendente)){
114 -  
115 - //Verifica se o componente já foi recebido  
116 - $bolComponenteDigitalRegistrado = $this->documentoJaRegistrado($strNumeroRegistro, $parNumIdentificacaoTramite, $componentePendente);  
117 - if(!$bolComponenteDigitalRegistrado){  
118 - $arrayHashPendentes[] = $componentePendente;  
119 - }  
120 - 113 + //TODO: Necessário otimizar trecho abaixo para evitar download desnecessário de documentos
121 //TODO: Download do componente digital é realizado, mesmo já existindo na base de dados, devido a comportamento obrigatório do Barramento para mudança de status 114 //TODO: Download do componente digital é realizado, mesmo já existindo na base de dados, devido a comportamento obrigatório do Barramento para mudança de status
122 //Ajuste deverá ser feito em versões futuas 115 //Ajuste deverá ser feito em versões futuas
123 $arrayHash[] = $componentePendente; 116 $arrayHash[] = $componentePendente;
124 117
125 - if(!$bolComponenteDigitalRegistrado || in_array($componentePendente, $arrHashPendentesDownload)) {  
126 - //Obter os dados do componente digital  
127 - $this->gravarLogDebug("Baixando componente digital $numOrdemComponente", 6);  
128 - $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital($parNumIdentificacaoTramite, $componentePendente, $objTramite->protocolo);  
129 - $arrAnexosComponentes[$key][$componentePendente] = $this->objReceberComponenteDigitalRN->copiarComponenteDigitalPastaTemporaria($objComponenteDigital);  
130 - $arrAnexosComponentes[$key]['recebido'] = false;  
131 -  
132 - //Valida a integridade do hash  
133 - $this->gravarLogDebug("Validando integridade de componente digital $numOrdemComponente", 6);  
134 - $this->objReceberComponenteDigitalRN->validarIntegridadeDoComponenteDigital($arrAnexosComponentes[$key][$componentePendente], $componentePendente, $parNumIdentificacaoTramite);  
135 - } else {  
136 - $this->gravarLogDebug("Componente digital $numOrdemComponente desconsiderado por já fazer parte do processo", 6);  
137 - } 118 + //Obter os dados do componente digital
  119 + $this->gravarLogDebug("Baixando componente digital $numOrdemComponente", 6);
  120 + $objComponenteDigital = $this->objProcessoEletronicoRN->receberComponenteDigital($parNumIdentificacaoTramite, $componentePendente, $objTramite->protocolo);
  121 + $arrAnexosComponentes[$key][$componentePendente] = $this->objReceberComponenteDigitalRN->copiarComponenteDigitalPastaTemporaria($objComponenteDigital);
  122 + $arrAnexosComponentes[$key]['recebido'] = false;
  123 +
  124 + //Valida a integridade do hash
  125 + $this->gravarLogDebug("Validando integridade de componente digital $numOrdemComponente", 6);
  126 + $this->objReceberComponenteDigitalRN->validarIntegridadeDoComponenteDigital($arrAnexosComponentes[$key][$componentePendente],
  127 + $componentePendente, $parNumIdentificacaoTramite);
138 } 128 }
139 } 129 }
140 130
@@ -154,13 +144,11 @@ class ReceberProcedimentoRN extends InfraRN @@ -154,13 +144,11 @@ class ReceberProcedimentoRN extends InfraRN
154 } 144 }
155 145
156 $this->gravarLogDebug("Persistindo/atualizando dados do processo com NRE " . $strNumeroRegistro, 4); 146 $this->gravarLogDebug("Persistindo/atualizando dados do processo com NRE " . $strNumeroRegistro, 4);
157 - $objProcedimentoDTO = $this->registrarProcesso( 147 + list($objProcedimentoDTO, $bolProcedimentoExistente) = $this->registrarProcesso(
158 $strNumeroRegistro, 148 $strNumeroRegistro,
159 $parNumIdentificacaoTramite, 149 $parNumIdentificacaoTramite,
160 $objProcesso, 150 $objProcesso,
161 - $objMetadadosProcedimento,  
162 - $arrayHash,  
163 - $arrayHashPendentes); 151 + $objMetadadosProcedimento);
164 152
165 // @join_tec US008.08 (#23092) 153 // @join_tec US008.08 (#23092)
166 $this->objProcedimentoAndamentoRN->setOpts($strNumeroRegistro, $parNumIdentificacaoTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO), $objProcedimentoDTO->getDblIdProcedimento()); 154 $this->objProcedimentoAndamentoRN->setOpts($strNumeroRegistro, $parNumIdentificacaoTramite, ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO), $objProcedimentoDTO->getDblIdProcedimento());
@@ -194,7 +182,9 @@ class ReceberProcedimentoRN extends InfraRN @@ -194,7 +182,9 @@ class ReceberProcedimentoRN extends InfraRN
194 $this->atribuirComponentesDigitaisAosDocumentos($objProcedimentoDTO, $strNumeroRegistro, $parNumIdentificacaoTramite, $arrayHash, $arrayHashPendentes); 182 $this->atribuirComponentesDigitaisAosDocumentos($objProcedimentoDTO, $strNumeroRegistro, $parNumIdentificacaoTramite, $arrayHash, $arrayHashPendentes);
195 183
196 //Finalizar o envio do documento para a respectiva unidade 184 //Finalizar o envio do documento para a respectiva unidade
197 - $this->enviarProcedimentoUnidade($objProcedimentoDTO); 185 + $this->enviarProcedimentoUnidade($objProcedimentoDTO, null, $bolProcedimentoExistente);
  186 +
  187 + $this->validarPosCondicoesTramite($objMetadadosProcedimento->metadados, $objProcedimentoDTO);
198 188
199 $this->gravarLogDebug("Enviando recibo de conclusão do trâmite $parNumIdentificacaoTramite", 6); 189 $this->gravarLogDebug("Enviando recibo de conclusão do trâmite $parNumIdentificacaoTramite", 6);
200 $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN(); 190 $objEnviarReciboTramiteRN = new EnviarReciboTramiteRN();
@@ -215,14 +205,12 @@ class ReceberProcedimentoRN extends InfraRN @@ -215,14 +205,12 @@ class ReceberProcedimentoRN extends InfraRN
215 /** 205 /**
216 * Método responsável por atribuir a lista de componentes digitais baixados do PEN aos seus respectivos documentos no SEI 206 * Método responsável por atribuir a lista de componentes digitais baixados do PEN aos seus respectivos documentos no SEI
217 * 207 *
218 - * @param ProcedimentoDTO $parObjProcedimentoDTO Protocolo que está sendo recebido pelo SEI  
219 - * @param Array $parArrHashComponentesPendentes Lista de componentes pendentes para vinculação aos documentos  
220 * @return [type] [description] 208 * @return [type] [description]
221 */ 209 */
222 private function atribuirComponentesDigitaisAosDocumentos(ProcedimentoDTO $parObjProcedimentoDTO, $parStrNumeroRegistro, $parNumIdentificacaoTramite, 210 private function atribuirComponentesDigitaisAosDocumentos(ProcedimentoDTO $parObjProcedimentoDTO, $parStrNumeroRegistro, $parNumIdentificacaoTramite,
223 - $parArrHashComponentes, $parArrHashComponentesPendentes) 211 + $parArrHashComponentes)
224 { 212 {
225 - if(count($parArrHashComponentesPendentes) > 0){ 213 + if(count($parArrHashComponentes) > 0){
226 //Obter dados dos componetes digitais 214 //Obter dados dos componetes digitais
227 $this->gravarLogDebug("Iniciando o recebimento dos componentes digitais pendentes", 4); 215 $this->gravarLogDebug("Iniciando o recebimento dos componentes digitais pendentes", 4);
228 $objComponenteDigitalDTO = new ComponenteDigitalDTO(); 216 $objComponenteDigitalDTO = new ComponenteDigitalDTO();
@@ -230,6 +218,7 @@ class ReceberProcedimentoRN extends InfraRN @@ -230,6 +218,7 @@ class ReceberProcedimentoRN extends InfraRN
230 $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite); 218 $objComponenteDigitalDTO->setNumIdTramite($parNumIdentificacaoTramite);
231 $objComponenteDigitalDTO->setStrHashConteudo($parArrHashComponentes, InfraDTO::$OPER_IN); 219 $objComponenteDigitalDTO->setStrHashConteudo($parArrHashComponentes, InfraDTO::$OPER_IN);
232 $objComponenteDigitalDTO->setOrdNumOrdem(InfraDTO::$TIPO_ORDENACAO_ASC); 220 $objComponenteDigitalDTO->setOrdNumOrdem(InfraDTO::$TIPO_ORDENACAO_ASC);
  221 + $objComponenteDigitalDTO->retDblIdProcedimento();
233 $objComponenteDigitalDTO->retDblIdDocumento(); 222 $objComponenteDigitalDTO->retDblIdDocumento();
234 $objComponenteDigitalDTO->retNumTicketEnvioComponentes(); 223 $objComponenteDigitalDTO->retNumTicketEnvioComponentes();
235 $objComponenteDigitalDTO->retStrProtocoloDocumentoFormatado(); 224 $objComponenteDigitalDTO->retStrProtocoloDocumentoFormatado();
@@ -243,33 +232,27 @@ class ReceberProcedimentoRN extends InfraRN @@ -243,33 +232,27 @@ class ReceberProcedimentoRN extends InfraRN
243 $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco()); 232 $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco());
244 $arrObjComponentesDigitaisDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO); 233 $arrObjComponentesDigitaisDTO = $objComponenteDigitalBD->listar($objComponenteDigitalDTO);
245 234
246 - if ($objComponenteDigitalBD->contar($objComponenteDigitalDTO) > 0) {  
247 - //Esta unidade deverá ser considerada para posterior desbloqueio do processo e reabertura  
248 - $numIdUnidade = ProcessoEletronicoRN::obterUnidadeParaRegistroDocumento($parObjProcedimentoDTO->getDblIdProcedimento());  
249 - SessaoSEI::getInstance()->setNumIdUnidadeAtual($numIdUnidade); 235 + if(!empty($arrObjComponentesDigitaisDTO)){
250 236
251 - try{  
252 - $arrStrNomeDocumento = $this->listarMetaDadosComponentesDigitais($objProcesso);  
253 - foreach($arrObjComponentesDigitaisDTO as $objComponenteDigitalDTOEnviado) {  
254 - if($objComponenteDigitalDTOEnviado->getStrStaEstadoProtocolo() != ProtocoloRN::$TE_DOCUMENTO_CANCELADO){  
255 - $strHash = $objComponenteDigitalDTOEnviado->getStrHashConteudo();  
256 - $strNomeDocumento = array_key_exists($strHash, $arrStrNomeDocumento) ? $arrStrNomeDocumento[$strHash]['especieNome'] : '[Desconhecido]'; 237 + $arrStrNomeDocumento = $this->listarMetaDadosComponentesDigitais($objProcesso);
  238 + foreach($arrObjComponentesDigitaisDTO as $objComponenteDigitalDTOEnviado) {
  239 + if($objComponenteDigitalDTOEnviado->getStrStaEstadoProtocolo() != ProtocoloRN::$TE_DOCUMENTO_CANCELADO){
257 240
258 - //Todo: Parei aqui: Verificar se documento já foi recebido anteriormente para poder registrar  
259 - //Alterar somente de documentos não bloqueados 241 + $dblIdProcedimento = $objComponenteDigitalDTOEnviado->getDblIdProcedimento();
  242 + $dblIdDocumento = $objComponenteDigitalDTOEnviado->getDblIdDocumento();
  243 + $strHash = $objComponenteDigitalDTOEnviado->getStrHashConteudo();
  244 +
  245 + //Verificar se documento já foi recebido anteriormente para poder registrar
  246 + if($this->documentosPendenteRegistro($dblIdProcedimento, $dblIdDocumento, $strHash)){
  247 + $strNomeDocumento = array_key_exists($strHash, $arrStrNomeDocumento) ? $arrStrNomeDocumento[$strHash]['especieNome'] : '[Desconhecido]';
260 $this->objReceberComponenteDigitalRN->receberComponenteDigital($objComponenteDigitalDTOEnviado); 248 $this->objReceberComponenteDigitalRN->receberComponenteDigital($objComponenteDigitalDTOEnviado);
261 $strMensagemRecebimento = sprintf('Recebendo %s %s', $strNomeDocumento, $objComponenteDigitalDTOEnviado->getStrProtocoloDocumentoFormatado()); 249 $strMensagemRecebimento = sprintf('Recebendo %s %s', $strNomeDocumento, $objComponenteDigitalDTOEnviado->getStrProtocoloDocumentoFormatado());
262 $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento($strMensagemRecebimento, 'S')); 250 $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento($strMensagemRecebimento, 'S'));
263 $this->gravarLogDebug($strMensagemRecebimento, 6); 251 $this->gravarLogDebug($strMensagemRecebimento, 6);
264 } 252 }
265 } 253 }
266 - } finally {  
267 - $objPenParametroRN = new PenParametroRN();  
268 - $numUnidadeReceptora = $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO');  
269 - SessaoSEI::getInstance()->setNumIdUnidadeAtual($numUnidadeReceptora);  
270 } 254 }
271 255
272 - // @join_tec US008.10 (#23092)  
273 $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Todos os componentes digitais foram recebidos', 'S')); 256 $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Todos os componentes digitais foram recebidos', 'S'));
274 }else{ 257 }else{
275 $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Nenhum componente digital para receber', 'S')); 258 $this->objProcedimentoAndamentoRN->cadastrar(ProcedimentoAndamentoDTO::criarAndamento('Nenhum componente digital para receber', 'S'));
@@ -438,8 +421,7 @@ class ReceberProcedimentoRN extends InfraRN @@ -438,8 +421,7 @@ class ReceberProcedimentoRN extends InfraRN
438 } 421 }
439 422
440 423
441 - private function registrarProcesso($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjMetadadosProcedimento,  
442 - $parArrHashComponentes, $parArrHashComponentesPendentes) 424 + private function registrarProcesso($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjMetadadosProcedimento)
443 { 425 {
444 // Validação dos dados do processo recebido 426 // Validação dos dados do processo recebido
445 $objInfraException = new InfraException(); 427 $objInfraException = new InfraException();
@@ -453,17 +435,15 @@ class ReceberProcedimentoRN extends InfraRN @@ -453,17 +435,15 @@ class ReceberProcedimentoRN extends InfraRN
453 435
454 //Verificar se procedimento já existia na base de dados do sistema 436 //Verificar se procedimento já existia na base de dados do sistema
455 $dblIdProcedimento = $this->consultarProcedimentoExistente($parStrNumeroRegistro, $parObjProcesso->protocolo); 437 $dblIdProcedimento = $this->consultarProcedimentoExistente($parStrNumeroRegistro, $parObjProcesso->protocolo);
  438 + $bolProcedimentoExistente = isset($dblIdProcedimento);
456 439
457 - if(isset($dblIdProcedimento)){  
458 - $objProcedimentoDTO = $this->atualizarProcedimento($dblIdProcedimento, $parObjMetadadosProcedimento, $parObjProcesso, $parNumIdentificacaoTramite, $parArrHashComponentes, $parArrHashComponentesPendentes); 440 + if($bolProcedimentoExistente){
  441 + $objProcedimentoDTO = $this->atualizarProcedimento($dblIdProcedimento, $parObjMetadadosProcedimento, $parObjProcesso, $parNumIdentificacaoTramite);
459 } 442 }
460 else { 443 else {
461 - $objProcedimentoDTO = $this->gerarProcedimento($parObjMetadadosProcedimento, $parObjProcesso, $parNumIdentificacaoTramite, $parArrHashComponentes, $parArrHashComponentesPendentes); 444 + $objProcedimentoDTO = $this->gerarProcedimento($parObjMetadadosProcedimento, $parObjProcesso, $parNumIdentificacaoTramite);
462 } 445 }
463 446
464 - //TODO: Fazer o envio de cada um dos procedimentos apensados (Processo principal e seus apensados, caso exista)  
465 - //...  
466 -  
467 //Chamada recursiva para registro dos processos apensados 447 //Chamada recursiva para registro dos processos apensados
468 if(isset($objProcesso->processoApensado)) { 448 if(isset($objProcesso->processoApensado)) {
469 if(!is_array($objProcesso->processoApensado)) { 449 if(!is_array($objProcesso->processoApensado)) {
@@ -475,7 +455,7 @@ class ReceberProcedimentoRN extends InfraRN @@ -475,7 +455,7 @@ class ReceberProcedimentoRN extends InfraRN
475 } 455 }
476 } 456 }
477 457
478 - return $objProcedimentoDTO; 458 + return array($objProcedimentoDTO, $bolProcedimentoExistente);
479 } 459 }
480 460
481 private function tramiteRecebimentoRegistrado($parStrNumeroRegistro, $parNumIdentificacaoTramite) 461 private function tramiteRecebimentoRegistrado($parStrNumeroRegistro, $parNumIdentificacaoTramite)
@@ -489,18 +469,6 @@ class ReceberProcedimentoRN extends InfraRN @@ -489,18 +469,6 @@ class ReceberProcedimentoRN extends InfraRN
489 } 469 }
490 470
491 471
492 - private function documentoJaRegistrado($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parStrHashComponenteDigital)  
493 - {  
494 - //Verifica se componente digital já está registrado para o documento  
495 - $objComponenteDigitalDTO = new ComponenteDigitalDTO();  
496 - $objComponenteDigitalDTO->setStrNumeroRegistro($parStrNumeroRegistro);  
497 - $objComponenteDigitalDTO->setStrHashConteudo($parStrHashComponenteDigital);  
498 - $objComponenteDigitalDTO->setNumIdAnexo(null, InfraDTO::$OPER_DIFERENTE);  
499 -  
500 - $objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco());  
501 - return $objComponenteDigitalBD->contar($objComponenteDigitalDTO) > 0;  
502 - }  
503 -  
504 472
505 private function consultarProcedimentoExistente($parStrNumeroRegistro, $parStrProtocolo = null) 473 private function consultarProcedimentoExistente($parStrNumeroRegistro, $parStrProtocolo = null)
506 { 474 {
@@ -520,7 +488,7 @@ class ReceberProcedimentoRN extends InfraRN @@ -520,7 +488,7 @@ class ReceberProcedimentoRN extends InfraRN
520 return $dblIdProcedimento; 488 return $dblIdProcedimento;
521 } 489 }
522 490
523 - private function atualizarProcedimento($parDblIdProcedimento, $objMetadadosProcedimento, $objProcesso, $parNumIdTramite, $parArrHashComponentes, $parArrHashComponentesPendentes) 491 + private function atualizarProcedimento($parDblIdProcedimento, $objMetadadosProcedimento, $objProcesso, $parNumIdTramite)
524 { 492 {
525 if(!isset($parDblIdProcedimento)){ 493 if(!isset($parDblIdProcedimento)){
526 throw new InfraException('Parâmetro $parDblIdProcedimento não informado.'); 494 throw new InfraException('Parâmetro $parDblIdProcedimento não informado.');
@@ -530,7 +498,6 @@ class ReceberProcedimentoRN extends InfraRN @@ -530,7 +498,6 @@ class ReceberProcedimentoRN extends InfraRN
530 throw new InfraException('Parâmetro $objMetadadosProcedimento não informado.'); 498 throw new InfraException('Parâmetro $objMetadadosProcedimento não informado.');
531 } 499 }
532 500
533 -  
534 if ($this->destinatarioReal) { 501 if ($this->destinatarioReal) {
535 $objDestinatario = $this->destinatarioReal; 502 $objDestinatario = $this->destinatarioReal;
536 } else { 503 } else {
@@ -542,6 +509,8 @@ class ReceberProcedimentoRN extends InfraRN @@ -542,6 +509,8 @@ class ReceberProcedimentoRN extends InfraRN
542 $numIdUnidade = ProcessoEletronicoRN::obterUnidadeParaRegistroDocumento($parDblIdProcedimento); 509 $numIdUnidade = ProcessoEletronicoRN::obterUnidadeParaRegistroDocumento($parDblIdProcedimento);
543 SessaoSEI::getInstance()->setNumIdUnidadeAtual($numIdUnidade); 510 SessaoSEI::getInstance()->setNumIdUnidadeAtual($numIdUnidade);
544 511
  512 + $objPenParametroRN = new PenParametroRN();
  513 +
545 try { 514 try {
546 $objSeiRN = new SeiRN(); 515 $objSeiRN = new SeiRN();
547 $objAtividadeDTO = new AtividadeDTO(); 516 $objAtividadeDTO = new AtividadeDTO();
@@ -567,49 +536,49 @@ class ReceberProcedimentoRN extends InfraRN @@ -567,49 +536,49 @@ class ReceberProcedimentoRN extends InfraRN
567 $objProcedimentoRN = new ProcedimentoRN(); 536 $objProcedimentoRN = new ProcedimentoRN();
568 $objProcedimentoDTO = $objProcedimentoRN->consultarRN0201($objProcedimentoDTO); 537 $objProcedimentoDTO = $objProcedimentoRN->consultarRN0201($objProcedimentoDTO);
569 538
570 - $this->registrarAndamentoRecebimentoProcesso($objProcedimentoDTO, $objMetadadosProcedimento);  
571 -  
572 if($flgReabrir){ 539 if($flgReabrir){
573 $objEntradaReabrirProcessoAPI = new EntradaReabrirProcessoAPI(); 540 $objEntradaReabrirProcessoAPI = new EntradaReabrirProcessoAPI();
574 $objEntradaReabrirProcessoAPI->setIdProcedimento($parDblIdProcedimento); 541 $objEntradaReabrirProcessoAPI->setIdProcedimento($parDblIdProcedimento);
575 $objSeiRN->reabrirProcesso($objEntradaReabrirProcessoAPI); 542 $objSeiRN->reabrirProcesso($objEntradaReabrirProcessoAPI);
576 } 543 }
577 544
578 - //Cadastro das atividades para quando o destinatário é desviado pelo receptor (!3!)  
579 - if ($this->destinatarioReal->numeroDeIdentificacaoDaEstrutura) {  
580 - $this->gerarAndamentoUnidadeReceptora($parDblIdProcedimento);  
581 - }  
582 -  
583 ProcessoEletronicoRN::desbloquearProcesso($parDblIdProcedimento); 545 ProcessoEletronicoRN::desbloquearProcesso($parDblIdProcedimento);
584 546
585 - //TODO: Obter código da unidade através de mapeamento entre SEI e Barramento  
586 - $objUnidadeDTO = $this->atribuirDadosUnidade($objProcedimentoDTO, $objDestinatario); 547 + $numUnidadeReceptora = $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO');
  548 + $this->enviarProcedimentoUnidade($objProcedimentoDTO, $numUnidadeReceptora);
  549 +
  550 + } finally {
  551 + $numUnidadeReceptora = $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO');
  552 + SessaoSEI::getInstance()->setNumIdUnidadeAtual($numUnidadeReceptora);
  553 + }
587 554
588 - $this->atribuirDocumentos($objProcedimentoDTO, $objProcesso, $objUnidadeDTO, $objMetadadosProcedimento); 555 + $this->registrarAndamentoRecebimentoProcesso($objProcedimentoDTO, $objMetadadosProcedimento);
589 556
590 - $this->registrarProcedimentoNaoVisualizado($objProcedimentoDTO); 557 + //Cadastro das atividades para quando o destinatário é desviado pelo receptor (!3!)
  558 + if ($this->destinatarioReal->numeroDeIdentificacaoDaEstrutura) {
  559 + $this->gerarAndamentoUnidadeReceptora($parDblIdProcedimento);
  560 + }
591 561
592 - //TODO: Avaliar necessidade de restringir referência circular entre processos  
593 - //TODO: Registrar que o processo foi recebido com outros apensados. Necessário para posterior reenvio  
594 - $this->atribuirProcessosApensados($objProcedimentoDTO, $objProcesso->processoApensado); 562 + //TODO: Obter código da unidade através de mapeamento entre SEI e Barramento
  563 + $objUnidadeDTO = $this->atribuirDadosUnidade($objProcedimentoDTO, $objDestinatario);
595 564
596 - //Realiza a alteração dos metadados do processo  
597 - //TODO: Implementar alteração de todos os metadados  
598 - $this->alterarMetadadosProcedimento($objProcedimentoDTO->getDblIdProcedimento(), $objProcesso); 565 + $this->atribuirDocumentos($objProcedimentoDTO, $objProcesso, $objUnidadeDTO, $objMetadadosProcedimento);
599 566
600 - //Finaliza o envio do documento para a respectiva unidade  
601 - //$this->enviarProcedimentoUnidade($objProcedimentoDTO, true); 567 + $this->registrarProcedimentoNaoVisualizado($objProcedimentoDTO);
602 568
603 - return $objProcedimentoDTO; 569 + //TODO: Avaliar necessidade de restringir referência circular entre processos
  570 + //TODO: Registrar que o processo foi recebido com outros apensados. Necessário para posterior reenvio
  571 + $this->atribuirProcessosApensados($objProcedimentoDTO, $objProcesso->processoApensado);
604 572
605 - } finally {  
606 - $objPenParametroRN = new PenParametroRN();  
607 - $numUnidadeReceptora = $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO');  
608 - SessaoSEI::getInstance()->setNumIdUnidadeAtual($numUnidadeReceptora);  
609 - }  
610 - } 573 + //Realiza a alteração dos metadados do processo
  574 + //TODO: Implementar alteração de todos os metadados
  575 + $this->alterarMetadadosProcedimento($objProcedimentoDTO->getDblIdProcedimento(), $objProcesso);
611 576
  577 + //Finaliza o envio do documento para a respectiva unidade
  578 + //$this->enviarProcedimentoUnidade($objProcedimentoDTO, true);
612 579
  580 + return $objProcedimentoDTO;
  581 + }
613 582
614 583
615 private function gerarAndamentoUnidadeReceptora($parNumIdProcedimento) 584 private function gerarAndamentoUnidadeReceptora($parNumIdProcedimento)
@@ -643,7 +612,7 @@ class ReceberProcedimentoRN extends InfraRN @@ -643,7 +612,7 @@ class ReceberProcedimentoRN extends InfraRN
643 $objAtividadeRN->gerarInternaRN0727($objAtividadeDTO); 612 $objAtividadeRN->gerarInternaRN0727($objAtividadeDTO);
644 } 613 }
645 614
646 - private function gerarProcedimento($objMetadadosProcedimento, $objProcesso, $parNumIdTramite, $parArrHashComponentes, $parArrHashComponentesPendentes) 615 + private function gerarProcedimento($objMetadadosProcedimento, $objProcesso, $parNumIdTramite)
647 { 616 {
648 if(!isset($objMetadadosProcedimento)){ 617 if(!isset($objMetadadosProcedimento)){
649 throw new InfraException('Parâmetro $objMetadadosProcedimento não informado.'); 618 throw new InfraException('Parâmetro $objMetadadosProcedimento não informado.');
@@ -791,18 +760,8 @@ class ReceberProcedimentoRN extends InfraRN @@ -791,18 +760,8 @@ class ReceberProcedimentoRN extends InfraRN
791 $objProtocoloDTO->setNumIdHipoteseLegal($this->obterHipoteseLegalSEI($parObjMetadadoProcedimento->hipoteseLegal->identificacao)); 760 $objProtocoloDTO->setNumIdHipoteseLegal($this->obterHipoteseLegalSEI($parObjMetadadoProcedimento->hipoteseLegal->identificacao));
792 } 761 }
793 762
794 - //Esta unidade deverá ser considerada para posterior desbloqueio do processo e reabertura  
795 - $numIdUnidade = ProcessoEletronicoRN::obterUnidadeParaRegistroDocumento($parNumIdProcedimento);  
796 - SessaoSEI::getInstance()->setNumIdUnidadeAtual($numIdUnidade);  
797 -  
798 - try{  
799 - $objProtocoloRN = new ProtocoloRN();  
800 - $objProtocoloRN->alterarRN0203($objProtocoloDTO);  
801 - } finally {  
802 - $objPenParametroRN = new PenParametroRN();  
803 - $numUnidadeReceptora = $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO');  
804 - SessaoSEI::getInstance()->setNumIdUnidadeAtual($numUnidadeReceptora);  
805 - } 763 + $objProtocoloRN = new ProtocoloRN();
  764 + $objProtocoloRN->alterarRN0203($objProtocoloDTO);
806 } 765 }
807 766
808 private function alterarMetadadosDocumento($parNumIdProcedimento, $parNumIdDocumento, $parObjMetadadoDocumento) 767 private function alterarMetadadosDocumento($parNumIdProcedimento, $parNumIdDocumento, $parObjMetadadoDocumento)
@@ -816,18 +775,8 @@ class ReceberProcedimentoRN extends InfraRN @@ -816,18 +775,8 @@ class ReceberProcedimentoRN extends InfraRN
816 $objProtocoloDTO->setNumIdHipoteseLegal($this->obterHipoteseLegalSEI($parObjMetadadoDocumento->hipoteseLegal->identificacao)); 775 $objProtocoloDTO->setNumIdHipoteseLegal($this->obterHipoteseLegalSEI($parObjMetadadoDocumento->hipoteseLegal->identificacao));
817 } 776 }
818 777
819 - //Esta unidade deverá ser considerada para posterior desbloqueio do processo e reabertura  
820 - $numIdUnidade = ProcessoEletronicoRN::obterUnidadeParaRegistroDocumento($parNumIdProcedimento);  
821 - SessaoSEI::getInstance()->setNumIdUnidadeAtual($numIdUnidade);  
822 -  
823 - try{  
824 - $objProtocoloRN = new ProtocoloRN();  
825 - $objProtocoloRN->alterarRN0203($objProtocoloDTO);  
826 - } finally {  
827 - $objPenParametroRN = new PenParametroRN();  
828 - $numUnidadeReceptora = $objPenParametroRN->getParametro('PEN_UNIDADE_GERADORA_DOCUMENTO_RECEBIDO');  
829 - SessaoSEI::getInstance()->setNumIdUnidadeAtual($numUnidadeReceptora);  
830 - } 778 + $objProtocoloRN = new ProtocoloRN();
  779 + $objProtocoloRN->alterarRN0203($objProtocoloDTO);
831 } 780 }
832 781
833 782
@@ -1203,16 +1152,17 @@ class ReceberProcedimentoRN extends InfraRN @@ -1203,16 +1152,17 @@ class ReceberProcedimentoRN extends InfraRN
1203 $objAtividadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); 1152 $objAtividadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual());
1204 1153
1205 //TODO: Possivelmente, essa regra é desnecessária já que o processo pode ser enviado para outra unidade do órgão através da expedição 1154 //TODO: Possivelmente, essa regra é desnecessária já que o processo pode ser enviado para outra unidade do órgão através da expedição
1206 - $objAtividadeRN = new AtividadeRN();  
1207 - if ($objAtividadeRN->contarRN0035($objAtividadeDTO) == 0) {  
1208 - throw new InfraException('Unidade '.$objUnidadeDTO->getStrSigla().' não possui acesso ao Procedimento '.$objProcedimentoDTO->getStrProtocoloProcedimentoFormatado().'.');  
1209 - } 1155 + //$objAtividadeRN = new AtividadeRN();
  1156 + //if ($objAtividadeRN->contarRN0035($objAtividadeDTO) == 0) {
  1157 + // throw new InfraException('Unidade '.$objUnidadeDTO->getStrSigla().' não possui acesso ao Procedimento '.$objProcedimentoDTO->getStrProtocoloProcedimentoFormatado().'.');
  1158 + //}
1210 1159
1211 $objAtividadeDTO = new AtividadeDTO(); 1160 $objAtividadeDTO = new AtividadeDTO();
1212 $objAtividadeDTO->setDblIdProtocolo($objDocumentoDTO->getDblIdProcedimento()); 1161 $objAtividadeDTO->setDblIdProtocolo($objDocumentoDTO->getDblIdProcedimento());
1213 $objAtividadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); 1162 $objAtividadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual());
1214 $objAtividadeDTO->setDthConclusao(null); 1163 $objAtividadeDTO->setDthConclusao(null);
1215 1164
  1165 + $objAtividadeRN = new AtividadeRN();
1216 if ($objAtividadeRN->contarRN0035($objAtividadeDTO) == 0) { 1166 if ($objAtividadeRN->contarRN0035($objAtividadeDTO) == 0) {
1217 $objReabrirProcessoDTO = new ReabrirProcessoDTO(); 1167 $objReabrirProcessoDTO = new ReabrirProcessoDTO();
1218 $objReabrirProcessoDTO->setDblIdProcedimento($objDocumentoDTO->getDblIdProcedimento()); 1168 $objReabrirProcessoDTO->setDblIdProcedimento($objDocumentoDTO->getDblIdProcedimento());
@@ -1555,23 +1505,34 @@ class ReceberProcedimentoRN extends InfraRN @@ -1555,23 +1505,34 @@ class ReceberProcedimentoRN extends InfraRN
1555 $objAtividadeRN->atualizarVisualizacao($objAtividadeDTOVisualizacao); 1505 $objAtividadeRN->atualizarVisualizacao($objAtividadeDTOVisualizacao);
1556 } 1506 }
1557 1507
1558 - private function enviarProcedimentoUnidade(ProcedimentoDTO $parObjProcedimentoDTO, $retransmissao = false) 1508 + private function enviarProcedimentoUnidade(ProcedimentoDTO $parObjProcedimentoDTO, $parUnidadeDestino=null, $retransmissao=false)
1559 { 1509 {
1560 $objAtividadeRN = new PenAtividadeRN(); 1510 $objAtividadeRN = new PenAtividadeRN();
  1511 + $objPenParametroRN = new PenParametroRN();
1561 $objInfraException = new InfraException(); 1512 $objInfraException = new InfraException();
1562 1513
1563 - if(!$parObjProcedimentoDTO->isSetArrObjUnidadeDTO() || count($parObjProcedimentoDTO->getArrObjUnidadeDTO()) == 0) {  
1564 - $objInfraException->lancarValidacao('Unidade de destino do processo não informada.');  
1565 - } 1514 + $strEnviaEmailNotificacao = 'N';
  1515 + $numIdUnidade = $parUnidadeDestino;
1566 1516
1567 - $arrObjUnidadeDTO = $parObjProcedimentoDTO->getArrObjUnidadeDTO(); 1517 + //Caso a unidade de destino não tenha sido informada, considerar as unidades atribuídas ao processo
  1518 + if(is_null($numIdUnidade)){
  1519 + if(!$parObjProcedimentoDTO->isSetArrObjUnidadeDTO() || count($parObjProcedimentoDTO->getArrObjUnidadeDTO()) == 0) {
  1520 + $objInfraException->lancarValidacao('Unidade de destino do processo não informada.');
  1521 + }
1568 1522
1569 - if(count($parObjProcedimentoDTO->getArrObjUnidadeDTO()) > 1) {  
1570 - $objInfraException->lancarValidacao('Não permitido a indicação de múltiplas unidades de destino para um processo recebido externamente.'); 1523 + $arrObjUnidadeDTO = $parObjProcedimentoDTO->getArrObjUnidadeDTO();
  1524 + if(count($parObjProcedimentoDTO->getArrObjUnidadeDTO()) > 1) {
  1525 + $objInfraException->lancarValidacao('Não permitido a indicação de múltiplas unidades de destino para um processo recebido externamente.');
  1526 + }
  1527 +
  1528 + $arrObjUnidadeDTO = array_values($parObjProcedimentoDTO->getArrObjUnidadeDTO());
  1529 + $objUnidadeDTO = $arrObjUnidadeDTO[0];
  1530 + $numIdUnidade = $objUnidadeDTO->getNumIdUnidade();
  1531 +
  1532 + //Somente considera regra de envio de e-mail para unidades vinculadas ao processo
  1533 + $strEnviaEmailNotificacao = $objPenParametroRN->getParametro('PEN_ENVIA_EMAIL_NOTIFICACAO_RECEBIMENTO');
1571 } 1534 }
1572 1535
1573 - $arrObjUnidadeDTO = array_values($parObjProcedimentoDTO->getArrObjUnidadeDTO());  
1574 - $objUnidadeDTO = $arrObjUnidadeDTO[0];  
1575 1536
1576 $objProcedimentoDTO = new ProcedimentoDTO(); 1537 $objProcedimentoDTO = new ProcedimentoDTO();
1577 $objProcedimentoDTO->retDblIdProcedimento(); 1538 $objProcedimentoDTO->retDblIdProcedimento();
@@ -1580,7 +1541,8 @@ class ReceberProcedimentoRN extends InfraRN @@ -1580,7 +1541,8 @@ class ReceberProcedimentoRN extends InfraRN
1580 $objProcedimentoDTO->retNumIdTipoProcedimento(); 1541 $objProcedimentoDTO->retNumIdTipoProcedimento();
1581 $objProcedimentoDTO->retStrNomeTipoProcedimento(); 1542 $objProcedimentoDTO->retStrNomeTipoProcedimento();
1582 $objProcedimentoDTO->retStrStaNivelAcessoGlobalProtocolo(); 1543 $objProcedimentoDTO->retStrStaNivelAcessoGlobalProtocolo();
1583 - $objProcedimentoDTO->setStrProtocoloProcedimentoFormatado($parObjProcedimentoDTO->getStrProtocoloProcedimentoFormatado()); 1544 + $objProcedimentoDTO->setDblIdProcedimento($parObjProcedimentoDTO->getDblIdProcedimento());
  1545 +
1584 1546
1585 $objProcedimentoRN = new ProcedimentoRN(); 1547 $objProcedimentoRN = new ProcedimentoRN();
1586 $objProcedimentoDTO = $objProcedimentoRN->consultarRN0201($objProcedimentoDTO); 1548 $objProcedimentoDTO = $objProcedimentoRN->consultarRN0201($objProcedimentoDTO);
@@ -1592,7 +1554,7 @@ class ReceberProcedimentoRN extends InfraRN @@ -1592,7 +1554,7 @@ class ReceberProcedimentoRN extends InfraRN
1592 if ($objProcedimentoDTO->getStrStaNivelAcessoGlobalProtocolo()==ProtocoloRN::$NA_RESTRITO) { 1554 if ($objProcedimentoDTO->getStrStaNivelAcessoGlobalProtocolo()==ProtocoloRN::$NA_RESTRITO) {
1593 $objAcessoDTO = new AcessoDTO(); 1555 $objAcessoDTO = new AcessoDTO();
1594 $objAcessoDTO->setDblIdProtocolo($objProcedimentoDTO->getDblIdProcedimento()); 1556 $objAcessoDTO->setDblIdProtocolo($objProcedimentoDTO->getDblIdProcedimento());
1595 - $objAcessoDTO->setNumIdUnidade($objUnidadeDTO->getNumIdUnidade()); 1557 + $objAcessoDTO->setNumIdUnidade($numIdUnidade);
1596 1558
1597 $objAcessoRN = new AcessoRN(); 1559 $objAcessoRN = new AcessoRN();
1598 if ($objAcessoRN->contar($objAcessoDTO)==0) { 1560 if ($objAcessoRN->contar($objAcessoDTO)==0) {
@@ -1628,7 +1590,6 @@ class ReceberProcedimentoRN extends InfraRN @@ -1628,7 +1590,6 @@ class ReceberProcedimentoRN extends InfraRN
1628 1590
1629 $objInfraException->lancarValidacoes(); 1591 $objInfraException->lancarValidacoes();
1630 1592
1631 -  
1632 $objEnviarProcessoDTO = new EnviarProcessoDTO(); 1593 $objEnviarProcessoDTO = new EnviarProcessoDTO();
1633 $objEnviarProcessoDTO->setArrAtividadesOrigem($arrObjProcedimentoDTO[0]->getArrObjAtividadeDTO()); 1594 $objEnviarProcessoDTO->setArrAtividadesOrigem($arrObjProcedimentoDTO[0]->getArrObjAtividadeDTO());
1634 1595
@@ -1636,14 +1597,11 @@ class ReceberProcedimentoRN extends InfraRN @@ -1636,14 +1597,11 @@ class ReceberProcedimentoRN extends InfraRN
1636 $objAtividadeDTO->setDblIdProtocolo($objProcedimentoDTO->getDblIdProcedimento()); 1597 $objAtividadeDTO->setDblIdProtocolo($objProcedimentoDTO->getDblIdProcedimento());
1637 $objAtividadeDTO->setNumIdUsuario(null); 1598 $objAtividadeDTO->setNumIdUsuario(null);
1638 $objAtividadeDTO->setNumIdUsuarioOrigem(SessaoSEI::getInstance()->getNumIdUsuario()); 1599 $objAtividadeDTO->setNumIdUsuarioOrigem(SessaoSEI::getInstance()->getNumIdUsuario());
1639 - $objAtividadeDTO->setNumIdUnidade($objUnidadeDTO->getNumIdUnidade()); 1600 + $objAtividadeDTO->setNumIdUnidade($numIdUnidade);
1640 $objAtividadeDTO->setNumIdUnidadeOrigem(SessaoSEI::getInstance()->getNumIdUnidadeAtual()); 1601 $objAtividadeDTO->setNumIdUnidadeOrigem(SessaoSEI::getInstance()->getNumIdUnidadeAtual());
1641 $objEnviarProcessoDTO->setArrAtividades(array($objAtividadeDTO)); 1602 $objEnviarProcessoDTO->setArrAtividades(array($objAtividadeDTO));
1642 1603
1643 - $objPenParametroRN = new PenParametroRN();  
1644 -  
1645 $objEnviarProcessoDTO->setStrSinManterAberto('N'); 1604 $objEnviarProcessoDTO->setStrSinManterAberto('N');
1646 - $strEnviaEmailNotificacao = $objPenParametroRN->getParametro('PEN_ENVIA_EMAIL_NOTIFICACAO_RECEBIMENTO');  
1647 $objEnviarProcessoDTO->setStrSinEnviarEmailNotificacao($strEnviaEmailNotificacao); 1605 $objEnviarProcessoDTO->setStrSinEnviarEmailNotificacao($strEnviaEmailNotificacao);
1648 $objEnviarProcessoDTO->setStrSinRemoverAnotacoes('S'); 1606 $objEnviarProcessoDTO->setStrSinRemoverAnotacoes('S');
1649 $objEnviarProcessoDTO->setDtaPrazo(null); 1607 $objEnviarProcessoDTO->setDtaPrazo(null);
@@ -1894,4 +1852,77 @@ class ReceberProcedimentoRN extends InfraRN @@ -1894,4 +1852,77 @@ class ReceberProcedimentoRN extends InfraRN
1894 InfraDebug::getInstance()->gravar($strLog); 1852 InfraDebug::getInstance()->gravar($strLog);
1895 } 1853 }
1896 1854
  1855 +
  1856 + /**
  1857 + * Verifica se existe documentos com pendência de download de seus componentes digitais
  1858 + * @param [type] $parNumIdProcedimento Identificador do processo
  1859 + * @param [type] $parNumIdDocumento Identificador do documento
  1860 + * @param [type] $parStrHashComponenteDigital Hash do componente digital
  1861 + * @return [type] Indicação se existe pendência ou não
  1862 + */
  1863 + private function documentosPendenteRegistro($parNumIdProcedimento, $parNumIdDocumento=null, $parStrHashComponenteDigital=null)
  1864 + {
  1865 + //Valida se algum documento ficou sem seus respectivos componentes digitais
  1866 + $sql = "select doc.id_documento as id_documento, comp.hash_conteudo as hash_conteudo
  1867 + from procedimento proc join documento doc on (doc.id_procedimento = proc.id_procedimento)
  1868 + join protocolo prot_doc on (doc.id_documento = prot_doc.id_protocolo)
  1869 + left join md_pen_componente_digital comp on (comp.id_documento = doc.id_documento)
  1870 + where proc.id_procedimento = $parNumIdProcedimento and prot_doc.sta_protocolo = 'R' and
  1871 + not exists (select 1 from anexo where anexo.id_protocolo = prot_doc.id_protocolo) ";
  1872 +
  1873 + //Adiciona filtro adicional para verificar pelo identificador do documento, caso parâmetro tenha sido informado
  1874 + if(!is_null($parNumIdDocumento)){
  1875 + $sql .= " and doc.id_documento = $parNumIdDocumento";
  1876 + }
  1877 +
  1878 + $recordset = $this->getObjInfraIBanco()->consultarSql($sql);
  1879 +
  1880 + $bolDocumentoPendente = !empty($recordset);
  1881 +
  1882 + //Verifica especificamente um determinado hash através da verificação do hash do componente, caso parâmetro tenha sido informado
  1883 + if($bolDocumentoPendente && !is_null($parStrHashComponenteDigital)) {
  1884 + foreach ($recordset as $item) {
  1885 + if(!is_null($item['hash_conteudo']) && $item['hash_conteudo'] === $parStrHashComponenteDigital){
  1886 + $bolDocumentoPendente = true;
  1887 + return $bolDocumentoPendente;
  1888 + }
  1889 + }
  1890 +
  1891 + $bolDocumentoPendente = false;
  1892 + }
  1893 +
  1894 + return $bolDocumentoPendente;
  1895 + }
  1896 +
  1897 + /**
  1898 + * Validação de pós condições para garantir que nenhuma inconsistência foi identificada no recebimento do processo
  1899 + *
  1900 + * @param [type] $parObjMetadadosProcedimento Metadados do Protocolo
  1901 + * @param [type] $parObjProcedimentoDTO Dados do Processo gerado no recebimento
  1902 + */
  1903 + private function validarPosCondicoesTramite($parObjMetadadosProcedimento, $parObjProcedimentoDTO)
  1904 + {
  1905 + $strMensagemPadrao = "Inconsistência identificada no recebimento de processo: \n";
  1906 + $strMensagemErro = "";
  1907 +
  1908 + //Valida se metadados do trâmite e do protocolo foram identificado
  1909 + if(is_null($parObjMetadadosProcedimento)){
  1910 + $strMensagemErro = "- Metadados do trâmite não identificado. \n";
  1911 + }
  1912 +
  1913 + //Valida se metadados do trâmite e do protocolo foram identificado
  1914 + if(is_null($parObjProcedimentoDTO)){
  1915 + $strMensagemErro = "- Dados do processo não identificados \n";
  1916 + }
  1917 +
  1918 + //Valida se algum documento ficou sem seus respectivos componentes digitais
  1919 + if($this->documentosPendenteRegistro($parObjProcedimentoDTO->getDblIdProcedimento())){
  1920 + $strProtocoloFormatado = $parObjProcedimentoDTO->getStrProtocoloProcedimentoFormatado();
  1921 + $strMensagemErro = "- Componente digital de pelo menos um dos documentos do processo [$strProtocoloFormatado] não pode ser recebido. \n";
  1922 + }
  1923 +
  1924 + if(!InfraString::isBolVazia($strMensagemErro)){
  1925 + throw new InfraException($strMensagemPadrao . $strMensagemErro);
  1926 + }
  1927 + }
1897 } 1928 }
verificar-servicos.sh
@@ -1,43 +0,0 @@ @@ -1,43 +0,0 @@
1 -#!/bin/bash  
2 -  
3 -PATH=/usr/bin:/sbin:/bin:/usr/sbin  
4 -export PATH  
5 -  
6 -GEARMAN=$(ls /etc/init.d | grep -owih gearman.*)  
7 -if [[ -z $GEARMAN ]]; then  
8 - echo "ERROR: Instalação do Gearman não pode ser localizada."  
9 - exit 1  
10 -else  
11 - ps cax | grep -ih gearman.* > /dev/null  
12 - if [ $? -ne 0 ]; then  
13 - echo "Gearman: Iniciando serviço de gerenciamento de fila de tarefas..."  
14 - /etc/init.d/$GEARMAN start;  
15 - fi  
16 -fi  
17 -  
18 -SUPERVISOR=$(ls /etc/init.d | grep -owih supervisor.*)  
19 -if [[ -z $SUPERVISOR ]]; then  
20 - echo "ERROR: Instalação do Supervisor não pode ser localizada."  
21 - exit 1  
22 -else  
23 - ps cax | grep -ih supervisor.* > /dev/null  
24 - if [ $? -ne 0 ]; then  
25 - echo "Supervisor: Iniciando serviço de monitoramento dos processos de integração..."  
26 - /etc/init.d/$SUPERVISOR start;  
27 - else  
28 -  
29 - COMMAND=$(ps -C php -f | grep -o "PendenciasTramiteRN.php");  
30 - if [ -z "$COMMAND" ]; then  
31 - echo "Supervisor: Reiniciando serviço de monitoramento dos processos de integração..."  
32 - /etc/init.d/$SUPERVISOR stop;  
33 - /etc/init.d/$SUPERVISOR start;  
34 - fi  
35 -  
36 - COMMAND=$(ps -C php -f | grep -o "ProcessarPendenciasRN.php");  
37 - if [ -z "$COMMAND" ]; then  
38 - echo "Supervisor: Reiniciando serviço de monitoramento dos processos de integração..."  
39 - /etc/init.d/$SUPERVISOR stop;  
40 - /etc/init.d/$SUPERVISOR start;  
41 - fi  
42 - fi  
43 -fi