setStrProtocoloFormatadoProtocolo($arrPalavrasPesquisa[0],InfraDTO::$OPER_LIKE);
}else{
$objAtividadeDTO->unSetStrProtocoloFormatadoProtocolo();
$a = array_fill(0,count($arrPalavrasPesquisa),'ProtocoloFormatadoProtocolo');
$b = array_fill(0,count($arrPalavrasPesquisa),InfraDTO::$OPER_LIKE);
$d = array_fill(0,count($arrPalavrasPesquisa)-1,InfraDTO::$OPER_LOGICO_AND);
$objAtividadeDTO->adicionarCriterio($a,$b,$arrPalavrasPesquisa,$d);
}
$arrResultado = array();
$arrObjAtividadeDTO = $this->objAtividadeRN->listarRN0036($objAtividadeDTO);
$arrObjAtividadeDTOIndexado = InfraArray::indexarArrInfraDTO($arrObjAtividadeDTO, 'ProtocoloFormatadoProtocolo', true);
foreach ($arrObjAtividadeDTOIndexado as $key => $value) {
if(is_array($value) && count($value) == 1) {
$arrResultado[] = $value[0];
}
}
$arrObjProcessosApensados = array_slice($arrResultado, 0, $numRegistros);
} catch(Exception $e) {
throw new InfraException("Error Processing Request", $e);
}
return $arrObjProcessosApensados;
}
/**
* Recebe o recibo de tramite do procedimento do barramento
*
* @param int $parNumIdTramite
* @return bool
*/
protected function receberReciboDeEnvioControlado($parNumIdTramite){
if (empty($parNumIdTramite)) {
return false;
}
$objReciboTramiteEnviadoDTO = new ReciboTramiteEnviadoDTO();
$objReciboTramiteEnviadoDTO->setNumIdTramite($parNumIdTramite);
$objGenericoBD = new GenericoBD(BancoSEI::getInstance());
if ($objGenericoBD->contar($objReciboTramiteEnviadoDTO) > 0) {
return false;
}
$objReciboEnvio = $this->objProcessoEletronicoRN->receberReciboDeEnvio($parNumIdTramite);
$objDateTime = new DateTime($objReciboEnvio->reciboDeEnvio->dataDeRecebimentoDoUltimoComponenteDigital);
$objReciboTramiteDTO = new ReciboTramiteEnviadoDTO();
$objReciboTramiteDTO->setStrNumeroRegistro($objReciboEnvio->reciboDeEnvio->NRE);
$objReciboTramiteDTO->setNumIdTramite($objReciboEnvio->reciboDeEnvio->IDT);
$objReciboTramiteDTO->setDthRecebimento($objDateTime->format('d/m/Y H:i:s'));
$objReciboTramiteDTO->setStrCadeiaCertificado($objReciboEnvio->cadeiaDoCertificado);
$objReciboTramiteDTO->setStrHashAssinatura($objReciboEnvio->hashDaAssinatura);
$objGenericoBD->cadastrar($objReciboTramiteDTO);
if(isset($objReciboEnvio->reciboDeEnvio->hashDoComponenteDigital)) {
$objReciboEnvio->reciboDeEnvio->hashDoComponenteDigital = !is_array($objReciboEnvio->reciboDeEnvio->hashDoComponenteDigital) ? array($objReciboEnvio->reciboDeEnvio->hashDoComponenteDigital) : $objReciboEnvio->reciboDeEnvio->hashDoComponenteDigital;
if($objReciboEnvio->reciboDeEnvio->hashDoComponenteDigital && is_array($objReciboEnvio->reciboDeEnvio->hashDoComponenteDigital)){
foreach($objReciboEnvio->reciboDeEnvio->hashDoComponenteDigital as $strHashComponenteDigital){
$objReciboTramiteHashDTO = new ReciboTramiteHashDTO();
$objReciboTramiteHashDTO->setStrNumeroRegistro($objReciboEnvio->reciboDeEnvio->NRE);
$objReciboTramiteHashDTO->setNumIdTramite($objReciboEnvio->reciboDeEnvio->IDT);
$objReciboTramiteHashDTO->setStrHashComponenteDigital($strHashComponenteDigital);
$objReciboTramiteHashDTO->setStrTipoRecibo(ProcessoEletronicoRN::$STA_TIPO_RECIBO_ENVIO);
$objGenericoBD->cadastrar($objReciboTramiteHashDTO);
}
}
}
return true;
}
/**
* Atualiza os dados do protocolo somente para o modulo PEN
*
* @param int $dblIdProtocolo
* @return null
*/
private function atualizarPenProtocolo($dblIdProtocolo = 0){
$objProtocoloDTO = new PenProtocoloDTO();
$objProtocoloDTO->setDblIdProtocolo($dblIdProtocolo);
$objProtocoloDTO->retTodos();
$objProtocoloDTO->getNumMaxRegistrosRetorno(1);
$objProtocoloBD = new ProtocoloBD($this->getObjInfraIBanco());
$objProtocoloDTO = $objProtocoloBD->consultar($objProtocoloDTO);
if(empty($objProtocoloDTO)) {
$objProtocoloDTO = new PenProtocoloDTO();
$objProtocoloDTO->setDblIdProtocolo($dblIdProtocolo);
$objProtocoloDTO->setStrSinObteveRecusa('N');
$objProtocoloBD->cadastrar($objProtocoloDTO);
}
else {
$objProtocoloDTO->setStrSinObteveRecusa('N');
$objProtocoloBD->alterar($objProtocoloDTO);
}
}
/**
* @author Fabio.braga@softimais.com.br
* @deprecated consulta processo
* data : 28/05/2015
* @return objet
*/
public function listarTramiteParaCancelar($idProcedimento) {
$objProtocoloDTO = $this->consultarProtocoloPk($idProcedimento);
echo "DEBUG protocolo
";
var_dump($objProtocoloDTO);
die("
");
$result = $this->objProcessoEletronicoRN->serviceConsultarTramitesProtocolo( $objProtocoloDTO->getStrProtocoloFormatado( ) );
return $result;
}
/**
* Cancela uma expedio de um Procedimento para outra unidade
*
* @param int $dblIdProcedimento
* @throws InfraException
*/
public function cancelarTramite($dblIdProcedimento) {
//Busca os dados do protocolo
$objDtoProtocolo = new ProtocoloDTO();
$objDtoProtocolo->retStrProtocoloFormatado();
$objDtoProtocolo->retDblIdProtocolo();
$objDtoProtocolo->setDblIdProtocolo($dblIdProcedimento);
$objProtocoloBD = new ProtocoloBD($this->getObjInfraIBanco());
$objDtoProtocolo = $objProtocoloBD->consultar($objDtoProtocolo);
$this->cancelarTramiteInternoControlado($objDtoProtocolo);
}
protected function cancelarTramiteInternoControlado(ProtocoloDTO $objDtoProtocolo) {
//Obtem o id_rh que representa a unidade no barramento
$objPenParametroRN = new PenParametroRN();
$numIdRespositorio = $objPenParametroRN->getParametro('PEN_ID_REPOSITORIO_ORIGEM');
//Obtem os dados da unidade
$objPenUnidadeDTO = new PenUnidadeDTO();
$objPenUnidadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual());
$objPenUnidadeDTO->retNumIdUnidadeRH();
$objGenericoBD = new GenericoBD($this->inicializarObjInfraIBanco());
$objPenUnidadeDTO = $objGenericoBD->consultar($objPenUnidadeDTO);
$objTramiteDTO = new TramiteDTO();
$objTramiteDTO->setNumIdProcedimento($objDtoProtocolo->retDblIdProtocolo());
$objTramiteDTO->setOrd('Registro', InfraDTO::$TIPO_ORDENACAO_DESC);
$objTramiteDTO->setNumMaxRegistrosRetorno(1);
$objTramiteDTO->retNumIdTramite();
$objTramiteBD = new TramiteBD($this->getObjInfraIBanco());
$arrObjTramiteDTO = $objTramiteBD->listar($objTramiteDTO);
if(!$arrObjTramiteDTO){
throw new InfraException('Trâmite não encontrado para esse processo. ');
}
$objTramiteDTO = $arrObjTramiteDTO[0];
//Armazena o id do protocolo
$dblIdProcedimento = $objDtoProtocolo->getDblIdProtocolo();
$tramites = $this->objProcessoEletronicoRN->consultarTramites($objTramiteDTO->getNumIdTramite(), null, $objPenUnidadeDTO->getNumIdUnidadeRH(), null, null, $numIdRespositorio);
$tramite = $tramites ? $tramites[0] : null;
if (!$tramite) {
throw new InfraException('Trâmite não encontrado para esse processo. ');
}
//Verifica se o trâmite est com o status de iniciado
if ($tramite->situacaoAtual == ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_INICIADO) {
$this->objProcessoEletronicoRN->cancelarTramite($tramite->IDT);
return true;
}
//Busca o processo eletrônico
$objDTOFiltro = new ProcessoEletronicoDTO();
$objDTOFiltro->setDblIdProcedimento($dblIdProcedimento);
$objDTOFiltro->retStrNumeroRegistro();
$objDTOFiltro->setNumMaxRegistrosRetorno(1);
$objBD = new ProcessoEletronicoBD($this->getObjInfraIBanco());
$objProcessoEletronicoDTO = $objBD->consultar($objDTOFiltro);
if (empty($objProcessoEletronicoDTO)) {
throw new InfraException('Não foi encontrado o processo pelo ID ' . $dblIdProcedimento);
}
//Armazena a situao atual
$numSituacaoAtual = $tramite->situacaoAtual;
//Valida os status
switch ($numSituacaoAtual) {
case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_ENVIADO_DESTINATARIO:
throw new InfraException("O sistema destinatário já iniciou o recebimento desse processo, portanto não é possível realizar o cancelamento");
break;
case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECIBO_RECEBIDO_REMETENTE:
throw new InfraException("O sistema destinatário já recebeu esse processo, portanto não é possivel realizar o cancelamento");
break;
case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO:
throw new InfraException("O trâmite externo para esse processo já se encontra cancelado.");
break;
case ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_RECUSADO:
throw new InfraException("O trâmite externo para esse processo encontra-se recusado.");
break;
}
$this->objProcessoEletronicoRN->cancelarTramite($tramite->IDT);
//Desbloqueia o processo
$objEntradaDesbloquearProcessoAPI = new EntradaDesbloquearProcessoAPI();
$objEntradaDesbloquearProcessoAPI->setIdProcedimento($dblIdProcedimento);
$objSeiRN = new SeiRN();
$objSeiRN->desbloquearProcesso($objEntradaDesbloquearProcessoAPI);
$objDTOFiltro = new TramiteDTO();
$objDTOFiltro->setNumIdTramite($tramite->IDT);
$objDTOFiltro->setNumMaxRegistrosRetorno(1);
$objDTOFiltro->setOrdNumIdTramite(InfraDTO::$TIPO_ORDENACAO_DESC);
$objDTOFiltro->retNumIdTramite();
$objDTOFiltro->retStrNumeroRegistro();
$objTramiteBD = new TramiteBD($this->getObjInfraIBanco());
$objTramiteDTO = $objTramiteBD->consultar($objDTOFiltro);
$objTramiteDTO->setNumIdAndamento(ProcessoEletronicoRN::$STA_SITUACAO_TRAMITE_CANCELADO);
$objTramiteDTO = $objTramiteBD->alterar($objTramiteDTO);
//Cria o Objeto que registrar a Atividade de cancelamento
$objAtividadeDTO = new AtividadeDTO();
$objAtividadeDTO->setDblIdProtocolo($dblIdProcedimento);
$objAtividadeDTO->setNumIdUnidade(SessaoSEI::getInstance()->getNumIdUnidadeAtual());
$objAtividadeDTO->setNumIdTarefa(ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_CANCELADO));
//Seta os atributos do tamplate de descrio dessa atividade
$objAtributoAndamentoDTOHora = new AtributoAndamentoDTO();
$objAtributoAndamentoDTOHora->setStrNome('DATA_HORA');
$objAtributoAndamentoDTOHora->setStrIdOrigem(null);
$objAtributoAndamentoDTOHora->setStrValor(date('d/m/Y H:i'));
$objAtributoAndamentoDTOUser = new AtributoAndamentoDTO();
$objAtributoAndamentoDTOUser->setStrNome('USUARIO');
$objAtributoAndamentoDTOUser->setStrIdOrigem(null);
$objAtributoAndamentoDTOUser->setStrValor(SessaoSEI::getInstance()->getStrNomeUsuario());
$objAtividadeDTO->setArrObjAtributoAndamentoDTO(array($objAtributoAndamentoDTOHora, $objAtributoAndamentoDTOUser));
$objAtividadeRN = new AtividadeRN();
$objAtividadeRN->gerarInternaRN0727($objAtividadeDTO);
}
/**
* Verifica se o processo se encontra em expedio
*
* @param integer $parNumIdProcedimento
* @return boolean|object
*/
public function verificarProcessoEmExpedicao($parNumIdProcedimento){
$objProcedimentoDTO = new ProcedimentoDTO();
$objProcedimentoDTO->setDblIdProcedimento($parNumIdProcedimento);
$objProcedimentoDTO->retStrStaEstadoProtocolo();
$objProcedimentoDTO->retDblIdProcedimento();
$objProcedimentoRN = new ProcedimentoRN();
$objProcedimentoDTO = $objProcedimentoRN->consultarRN0201($objProcedimentoDTO);
if($objProcedimentoDTO && $objProcedimentoDTO->getStrStaEstadoProtocolo() == ProtocoloRN::$TE_PROCEDIMENTO_BLOQUEADO){
$objAtividadeDTO = new AtividadeDTO();
$objAtividadeDTO->setDblIdProtocolo($objProcedimentoDTO->getDblIdProcedimento());
$objAtividadeDTO->setNumIdTarefa(
array(ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_EXPEDIDO),
ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_RECEBIDO),
ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_CANCELADO),
ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_RECUSADO),
ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_TRAMITE_EXTERNO),
ProcessoEletronicoRN::obterIdTarefaModulo(ProcessoEletronicoRN::$TI_PROCESSO_ELETRONICO_PROCESSO_ABORTADO),
),
InfraDTO::$OPER_IN);
$objAtividadeDTO->setNumMaxRegistrosRetorno(1);
$objAtividadeDTO->setOrdDthAbertura(InfraDTO::$TIPO_ORDENACAO_DESC);
$objAtividadeDTO->retNumIdAtividade();
$objAtividadeDTO->retNumIdTarefa();
$objAtividadeRN = new AtividadeRN();
$arrAtividadeDTO = (array) $objAtividadeRN->listarRN0036($objAtividadeDTO);
if($arrAtividadeDTO){
return $arrAtividadeDTO[0];
}else{
return false;
}
}else{
return false;
}
}
public function consultaUnidadePk($idUnidade) {
$objUnidadeDTO = new UnidadeDTO();
$objUnidadeDTO->setNumIdUnidade($idUnidade);
$objUnidadeDTO->retTodos();
$objUnidadeDTO = $this->objUnidadeRN->consultarRN0125($objUnidadeDTO);
return $objUnidadeDTO;
}
public function consultaUsuarioPk($idUsuario) {
$objUsuarioDTO = new UsuarioDTO();
$objUsuarioDTO->setNumIdUsuario($idUsuario);
$objUsuarioDTO->retTodos();
$objUsuarioDTO = $this->objUsuarioRN->consultarRN0489($objUsuarioDTO);
return $objUsuarioDTO;
}
public function consultarProtocoloPk($idPrtocedimento) {
$idPrtocedimento = (int)$idPrtocedimento;
$objProtocoloDTO = new ProtocoloDTO();
$objProtocoloDTO->setDblIdProtocolo($idPrtocedimento);
$objProtocoloDTO->retTodos();
$objProtocoloDTO = $this->objProtocoloRN->consultarRN0186($objProtocoloDTO);
$objProtocoloDTO->UnidadeGeradora = $this->consultaUnidadePk($objProtocoloDTO->getNumIdUnidadeGeradora());
$objProtocoloDTO->UsuarioCriador = $this->consultaUsuarioPk($objProtocoloDTO->getNumIdUsuarioGerador());
$objProtocoloDTO->Documentos = $this->consultaDocumentosProcesso($idPrtocedimento);
return $objProtocoloDTO;
}
public function consultaDocumentosProcesso($idPrtocedimento) {
$documentoRespArray = array();
$documentoDTO = new DocumentoDTO();
$documentoDTO->setDblIdProcedimento($idPrtocedimento);
$documentoDTO->retTodos();
$documentoDTO = $this->objDocumentoRN->listarRN0008($documentoDTO);
return $documentoDTO;
}
}