"Formato de componente digital não suportado", "02" => "Componente digital corrompido", "03" => "Falta de componentes digitais", "99" => "Outro" ); private $strWSDL = null; private $objPenWs = null; private $options = null; public function __construct() { $objInfraParametro = new InfraParametro(BancoSEI::getInstance()); $strEnderecoWebService = $objInfraParametro->getValor('PEN_ENDERECO_WEBSERVICE'); $strLocalizacaoCertificadoDigital = $objInfraParametro->getValor('PEN_LOCALIZACAO_CERTIFICADO_DIGITAL'); $strSenhaCertificadoDigital = $objInfraParametro->getValor('PEN_SENHA_CERTIFICADO_DIGITAL'); if (InfraString::isBolVazia($strEnderecoWebService)) { throw new InfraException('Endereço do serviço de integração do Processo Eletrônico Nacional (PEN) não informado.'); } if (!@file_get_contents($strLocalizacaoCertificadoDigital)) { throw new InfraException("Certificado digital de autenticação do serviço de integração do Processo Eletrônico Nacional(PEN) não encontrado."); } //TODO: Urgente - Remover senha do certificado de autenticação dos serviços do PEN da tabela de parâmetros if (InfraString::isBolVazia($strSenhaCertificadoDigital)) { throw new InfraException('Dados de autenticação do serviço de integração do Processo Eletrõnico Nacional(PEN) não informados.'); } $this->strWSDL = $strEnderecoWebService . '?wsdl'; $this->strComumXSD = $strEnderecoWebService . '?xsd=comum.xsd'; $this->strLocalCert = $strLocalizacaoCertificadoDigital; $this->strLocalCertPassword = $strSenhaCertificadoDigital; $this->options = array( 'soap_version' => SOAP_1_1 , 'local_cert' => $this->strLocalCert , 'passphrase' => $this->strLocalCertPassword , 'resolve_wsdl_remote_includes' => true , 'trace' => true , 'encoding' => 'UTF-8' , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM , 'ssl' => array( 'allow_self_signed' => true ) ); } protected function inicializarObjInfraIBanco() { return BancoSEI::getInstance(); } /** * Verifica se o uma url esta ativa * * @param string $strUrl url a ser testada * @param string $strLocalCert local físico do certificado .pem * @throws InfraException * @return null */ private function testaUrl($strUrl = '', $strLocalCert = ''){ $arrParseUrl = parse_url($this->strWSDL); // é melhor a página inicial que todo o arquivo wsdl $strUrl = $arrParseUrl['scheme'].'://'.$arrParseUrl['host']; $strCommand = sprintf('curl %s --insecure --cert %s 2>&1', $strUrl, $this->options['local_cert']); $numRetorno = 0; $arrOutput = array(); @exec($strCommand, $arrOutput, $numRetorno); if($numRetorno > 0){ throw new InfraException('Falha de comunicação com o Barramento de Serviços. Por favor, tente novamente mais tarde.', $e); } } private function getObjPenWs() { if($this->objPenWs == null) { $this->testaUrl($this->strWSDL, $this->options['local_cert']); // try { $objConfig = ConfiguracaoSEI::getInstance(); if($objConfig->isSetValor('SEI', 'LogPenWs')){ $this->objPenWs = new LogPenWs($objConfig->getValor('SEI', 'LogPenWs'), $this->strWSDL, $this->options); } else { $this->objPenWs = new BeSimple\SoapClient\SoapClient($this->strWSDL, $this->options); } /* } catch (Exception $e) { echo "
";
var_dump($e->getMessage());
die("");
throw new InfraException('Erro acessando serviço.', $e);
}*/
}
return $this->objPenWs;
}
//TODO: Avaliar otimização de tal serviço para buscar individualmente os dados do repositório de estruturas
public function consultarRepositoriosDeEstruturas($numIdentificacaoDoRepositorioDeEstruturas) {
$objRepositorioDTO = null;
try{
$parametros = new stdClass();
$parametros->filtroDeConsultaDeRepositoriosDeEstrutura = new stdClass();
$parametros->filtroDeConsultaDeRepositoriosDeEstrutura->ativos = false;
$result = $this->getObjPenWs()->consultarRepositoriosDeEstruturas($parametros);
if(isset($result->repositoriosEncontrados->repositorio)){
if(!is_array($result->repositoriosEncontrados->repositorio)) {
$result->repositoriosEncontrados->repositorio = array($result->repositoriosEncontrados->repositorio);
}
foreach ($result->repositoriosEncontrados->repositorio as $repositorio) {
if($repositorio->id == $numIdentificacaoDoRepositorioDeEstruturas){
$objRepositorioDTO = new RepositorioDTO();
$objRepositorioDTO->setNumId($repositorio->id);
$objRepositorioDTO->setStrNome(utf8_decode($repositorio->nome));
$objRepositorioDTO->setBolAtivo($repositorio->ativo);
}
}
}
} catch(Exception $e){
throw new InfraException("Erro durante obtenção dos repositórios", $e);
}
return $objRepositorioDTO;
}
public function listarRepositoriosDeEstruturas() {
$arrObjRepositorioDTO = array();
try{
$parametros = new stdClass();
$parametros->filtroDeConsultaDeRepositoriosDeEstrutura = new stdClass();
$parametros->filtroDeConsultaDeRepositoriosDeEstrutura->ativos = true;
$result = $this->getObjPenWs()->consultarRepositoriosDeEstruturas($parametros);
if(isset($result->repositoriosEncontrados->repositorio)){
if(!is_array($result->repositoriosEncontrados->repositorio)) {
$result->repositoriosEncontrados->repositorio = array($result->repositoriosEncontrados->repositorio);
}
foreach ($result->repositoriosEncontrados->repositorio as $repositorio) {
$item = new RepositorioDTO();
$item->setNumId($repositorio->id);
$item->setStrNome(utf8_decode($repositorio->nome));
$item->setBolAtivo($repositorio->ativo);
$arrObjRepositorioDTO[] = $item;
}
}
} catch(Exception $e){
throw new InfraException("Erro durante obtenção dos repositórios", $e);
}
return $arrObjRepositorioDTO;
}
public function consultarEstrutura($idRepositorioEstrutura, $numeroDeIdentificacaoDaEstrutura, $bolRetornoRaw = false) {
try {
$parametros = new stdClass();
$parametros->filtroDeEstruturas = new stdClass();
$parametros->filtroDeEstruturas->identificacaoDoRepositorioDeEstruturas = $idRepositorioEstrutura;
$parametros->filtroDeEstruturas->numeroDeIdentificacaoDaEstrutura = $numeroDeIdentificacaoDaEstrutura;
$parametros->filtroDeEstruturas->apenasAtivas = false;
$result = $this->getObjPenWs()->consultarEstruturas($parametros);
if ($result->estruturasEncontradas->totalDeRegistros == 1) {
$arrObjEstrutura = is_array($result->estruturasEncontradas->estrutura) ? $result->estruturasEncontradas->estrutura : array($result->estruturasEncontradas->estrutura);
$objEstrutura = current($arrObjEstrutura);
$objEstrutura->nome = utf8_decode($objEstrutura->nome);
$objEstrutura->sigla = utf8_decode($objEstrutura->sigla);
if ($bolRetornoRaw !== false) {
if (isset($objEstrutura->hierarquia) && isset($objEstrutura->hierarquia->nivel)) {
$objEstrutura->hierarquia->nivel = (array) $objEstrutura->hierarquia->nivel;
foreach ($objEstrutura->hierarquia->nivel as &$objNivel) {
$objNivel->nome = utf8_decode($objNivel->nome);
}
}
return $objEstrutura;
}
else {
$objEstruturaDTO = new EstruturaDTO();
$objEstruturaDTO->setNumNumeroDeIdentificacaoDaEstrutura($objEstrutura->numeroDeIdentificacaoDaEstrutura);
$objEstruturaDTO->setStrNome($objEstrutura->nome);
$objEstruturaDTO->setStrSigla($objEstrutura->sigla);
$objEstruturaDTO->setBolAtivo($objEstrutura->ativo);
$objEstruturaDTO->setBolAptoParaReceberTramites($objEstrutura->aptoParaReceberTramites);
$objEstruturaDTO->setStrCodigoNoOrgaoEntidade($objEstrutura->codigoNoOrgaoEntidade);
return $objEstruturaDTO;
}
}
}
catch (Exception $e) {
throw new InfraException("Erro durante obtenção das unidades", $e);
}
}
public function listarEstruturas($idRepositorioEstrutura, $nome='')
{
$arrObjEstruturaDTO = array();
try{
$idRepositorioEstrutura = filter_var($idRepositorioEstrutura, FILTER_SANITIZE_NUMBER_INT);
if(!$idRepositorioEstrutura) {
throw new InfraException("Repositório de Estruturas inválido");
}
$parametros = new stdClass();
$parametros->filtroDeEstruturas = new stdClass();
$parametros->filtroDeEstruturas->identificacaoDoRepositorioDeEstruturas = $idRepositorioEstrutura;
//$parametros->filtroDeEstruturas->numeroDeIdentificacaoDaEstrutura = 218794;//$numeroDeIdentificacaoDaEstrutura;
$parametros->filtroDeEstruturas->nome = utf8_encode($nome);
$parametros->filtroDeEstruturas->apenasAtivas = false;
$result = $this->getObjPenWs()->consultarEstruturas($parametros);
if($result->estruturasEncontradas->totalDeRegistros > 0) {
if(!is_array($result->estruturasEncontradas->estrutura)) {
$result->estruturasEncontradas->estrutura = array($result->estruturasEncontradas->estrutura);
}
foreach ($result->estruturasEncontradas->estrutura as $estrutura) {
$item = new EstruturaDTO();
$item->setNumNumeroDeIdentificacaoDaEstrutura($estrutura->numeroDeIdentificacaoDaEstrutura);
$item->setStrNome(utf8_decode($estrutura->nome));
$item->setStrSigla(utf8_decode($estrutura->sigla));
$item->setBolAtivo($estrutura->ativo);
$item->setBolAptoParaReceberTramites($estrutura->aptoParaReceberTramites);
$item->setStrCodigoNoOrgaoEntidade($estrutura->codigoNoOrgaoEntidade);
if(!empty($estrutura->hierarquia->nivel)) {
$array = array();
foreach($estrutura->hierarquia->nivel as $nivel) {
$array[] = utf8_decode($nivel->sigla);
}
$item->setArrHierarquia($array);
}
$arrObjEstruturaDTO[] = $item;
}
}
} catch (Exception $e) {
throw new InfraException("Erro durante obtenção das unidades", $e);
}
return $arrObjEstruturaDTO;
}
public function consultarMotivosUrgencia()
{
$curl = curl_init($this->strComumXSD);
curl_setopt($curl, CURLOPT_URL, $this->strComumXSD);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSLCERT, $this->strLocalCert);
curl_setopt($curl, CURLOPT_SSLCERTPASSWD, $this->strLocalCertPassword);
$output = curl_exec($curl);
curl_close($curl);
$dom = new DOMDocument;
$dom->loadXML($output);
$xpath = new DOMXPath($dom);
$rootNamespace = $dom->lookupNamespaceUri($dom->namespaceURI);
$xpath->registerNamespace('x', $rootNamespace);
$entries = $xpath->query('/x:schema/x:simpleType[@name="motivoDaUrgencia"]/x:restriction/x:enumeration');
$resultado = array();
foreach ($entries as $entry) {
$valor = $entry->getAttribute('value');
$documentationNode = $xpath->query('x:annotation/x:documentation', $entry);
$descricao = $documentationNode->item(0)->nodeValue;
$resultado[$valor] = utf8_decode($descricao);
}
return $resultado;
}
public function enviarProcesso($parametros)
{
try {
//error_log("PARAMETROS:" . print_r($parametros, true));
return $this->getObjPenWs()->enviarProcesso($parametros);
} catch (\SoapFault $fault) {
//error_log("REQUEST:" . $this->getObjPenWs()->__getLastRequest());
//error_log("ERROR:" . print_r($fault, true));
$mensagem = $this->tratarFalhaWebService($fault);
//TODO: Remover formatação do javascript após resolução do BUG enviado para Mairon
//relacionado ao a renderização de mensagens de erro na barra de progresso
error_log($mensagem);
throw new InfraException(InfraString::formatarJavaScript($mensagem), $fault);
} catch (\Exception $e) {
throw new InfraException("Error Processing Request", $e);
}
}
public function listarPendencias($bolTodasPendencias)
{
$arrObjPendenciaDTO = array();
try {
$parametros = new stdClass();
$parametros->filtroDePendencias = new stdClass();
$parametros->filtroDePendencias->todasAsPendencias = $bolTodasPendencias;
$result = $this->getObjPenWs()->listarPendencias($parametros);
if(isset($result->listaDePendencias->IDT)){
if(!is_array($result->listaDePendencias->IDT)) {
$result->listaDePendencias->IDT = array($result->listaDePendencias->IDT);
}
foreach ($result->listaDePendencias->IDT as $idt) {
$item = new PendenciaDTO();
$item->setNumIdentificacaoTramite($idt->_);
$item->setStrStatus($idt->status);
$arrObjPendenciaDTO[] = $item;
}
}
} catch (\SoapFault $fault) {
$mensagem = $this->tratarFalhaWebService($fault);
throw new InfraException(InfraString::formatarJavaScript($mensagem), $fault);
} catch (\Exception $e) {
throw new InfraException("Error Processing Request", $e);
}
return $arrObjPendenciaDTO;
}
//TODO: Tratar cada um dos possíveis erros gerados pelos serviços de integração do PEN
private function tratarFalhaWebService(SoapFault $fault)
{
error_log('$e->faultcode:' . $fault->faultcode);
error_log('$e->detail:' . print_r($fault->detail, true));
$mensagem = $fault->getMessage();
if(isset($fault->detail->interoperabilidadeException)){
$strWsException = $fault->detail->interoperabilidadeException;
switch ($strWsException->codigoErro) {
case '0044':
$mensagem = 'Processo já possui um trâmite em andamento';
break;
default:
$mensagem = utf8_decode($fault->detail->interoperabilidadeException->mensagem);
break;
}
}
return $mensagem;
}
public function construirCabecalho($strNumeroRegistro = null, $idRepositorioOrigem = 0, $idUnidadeOrigem = 0, $idRepositorioDestino = 0,
$idUnidadeDestino = 0, $urgente = false, $motivoUrgencia = 0, $enviarTodosDocumentos = false)
{
$cabecalho = new stdClass();
if(isset($strNumeroRegistro)) {
$cabecalho->NRE = $strNumeroRegistro;
}
$cabecalho->remetente = new stdClass();
$cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $idRepositorioOrigem;
$cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $idUnidadeOrigem;
$cabecalho->destinatario = new stdClass();
$cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $idRepositorioDestino;
$cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura = $idUnidadeDestino;
$cabecalho->urgente = $urgente;
$cabecalho->motivoDaUrgencia = $motivoUrgencia;
$cabecalho->obrigarEnvioDeTodosOsComponentesDigitais = $enviarTodosDocumentos;
return $cabecalho;
}
public function enviarComponenteDigital($parametros)
{
try {
//error_log('$this->getObjPenWs()->enviarComponenteDigital($parametros)');
//error_log("||||||||||||||||||" . print_r($parametros, true));
return $this->getObjPenWs()->enviarComponenteDigital($parametros);
} catch (\SoapFault $fault) {
//error_log("REQUEST:" . $this->getObjPenWs()->__getLastRequest());
//error_log("ERROR:" . print_r($fault, true));
$mensagem = $this->tratarFalhaWebService($fault);
//TODO: Remover formatação do javascript após resolução do BUG enviado para Mairon
//relacionado ao a renderização de mensagens de erro na barra de progresso
throw new InfraException(InfraString::formatarJavaScript($mensagem), $fault);
} catch (\Exception $e) {
throw new InfraException("Error Processing Request", $e);
}
}
public function solicitarMetadados($parNumIdentificacaoTramite) {
try
{
$parametros = new stdClass();
$parametros->IDT = $parNumIdentificacaoTramite;
return $this->getObjPenWs()->solicitarMetadados($parametros);
} catch (\SoapFault $fault) {
$mensagem = $this->tratarFalhaWebService($fault);
//TODO: Remover formatação do javascript após resolução do BUG enviado para Mairon
//relacionado ao a renderização de mensagens de erro na barra de progresso
error_log($mensagem);
throw new InfraException(InfraString::formatarJavaScript($mensagem), $fault);
} catch (\Exception $e) {
throw new InfraException("Error Processing Request", $e);
}
}
public static function converterDataWebService($dataHoraSEI)
{
$resultado = '';
if(isset($dataHoraSEI)){
$resultado = InfraData::getTimestamp($dataHoraSEI);
$resultado = date(DateTime::W3C, $resultado);
}
return $resultado;
}
public static function converterDataSEI($dataHoraWebService)
{
$resultado = null;
if(isset($dataHoraWebService)){
$resultado = strtotime($dataHoraWebService);
$resultado = date('d/m/Y H:i:s', $resultado);
}
return $resultado;
}
public static function obterIdTarefaModulo($strIdTarefaModulo)
{
$objTarefaDTO = new TarefaDTO();
$objTarefaDTO->retNumIdTarefa();
$objTarefaDTO->setStrIdTarefaModulo($strIdTarefaModulo);
$objTarefaRN = new TarefaRN();
$objTarefaDTO = $objTarefaRN->consultar($objTarefaDTO);
if($objTarefaDTO){
return $objTarefaDTO->getNumIdTarefa();
}else{
return false;
}
}
public function cadastrarTramiteDeProcesso($parDblIdProcedimento, $parStrNumeroRegistro, $parNumIdentificacaoTramite, $parDthRegistroTramite, $parObjProcesso, $parNumTicketComponentesDigitais = null, $parObjComponentesDigitaisSolicitados = null)
{
if(!isset($parDblIdProcedimento) || $parDblIdProcedimento == 0) {
throw new InfraException('Parâmetro $parDblIdProcedimento não informado.');
}
if(!isset($parStrNumeroRegistro)) {
throw new InfraException('Parâmetro $parStrNumeroRegistro não informado.');
}
if(!isset($parNumIdentificacaoTramite) || $parNumIdentificacaoTramite == 0) {
throw new InfraException('Parâmetro $parStrNumeroRegistro não informado.');
}
if(!isset($parObjProcesso)) {
throw new InfraException('Parâmetro $objProcesso não informado.');
}
//Monta dados do processo eletrônico
$objProcessoEletronicoDTO = new ProcessoEletronicoDTO();
$objProcessoEletronicoDTO->setStrNumeroRegistro($parStrNumeroRegistro);
$objProcessoEletronicoDTO->setDblIdProcedimento($parDblIdProcedimento);
//Montar dados dos procedimentos apensados
if(isset($parObjProcesso->processoApensado)){
if(!is_array($parObjProcesso->processoApensado)){
$parObjProcesso->processoApensado = array($parObjProcesso->processoApensado);
}
$arrObjRelProcessoEletronicoApensadoDTO = array();
$objRelProcessoEletronicoApensadoDTO = null;
foreach ($parObjProcesso->processoApensado as $objProcessoApensado) {
$objRelProcessoEletronicoApensadoDTO = new RelProcessoEletronicoApensadoDTO();
$objRelProcessoEletronicoApensadoDTO->setStrNumeroRegistro($parStrNumeroRegistro);
$objRelProcessoEletronicoApensadoDTO->setDblIdProcedimentoApensado($objProcessoApensado->idProcedimentoSEI);
$objRelProcessoEletronicoApensadoDTO->setStrProtocolo($objProcessoApensado->protocolo);
$arrObjRelProcessoEletronicoApensadoDTO[] = $objRelProcessoEletronicoApensadoDTO;
}
$objProcessoEletronicoDTO->setArrObjRelProcessoEletronicoApensado($arrObjRelProcessoEletronicoApensadoDTO);
}
//Monta dados do trâmite do processo
$objTramiteDTO = new TramiteDTO();
$objTramiteDTO->setStrNumeroRegistro($parStrNumeroRegistro);
$objTramiteDTO->setNumIdTramite($parNumIdentificacaoTramite);
$objTramiteDTO->setNumTicketEnvioComponentes($parNumTicketComponentesDigitais);
$objTramiteDTO->setDthRegistro($this->converterDataSEI($parDthRegistroTramite));
$objProcessoEletronicoDTO->setArrObjTramiteDTO(array($objTramiteDTO));
//Monta dados dos componentes digitais
$arrObjComponenteDigitalDTO = $this->montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProcesso, $parObjComponentesDigitaisSolicitados);
$objTramiteDTO->setArrObjComponenteDigitalDTO($arrObjComponenteDigitalDTO);
$objProcessoEletronicoDTO = $this->cadastrarTramiteDeProcessoInterno($objProcessoEletronicoDTO);
return $objProcessoEletronicoDTO;
}
//TODO: Tratar a exceção de recebimento de um trâmite que já havia sido tratado no sistema
protected function cadastrarTramiteDeProcessoInternoControlado(ProcessoEletronicoDTO $parObjProcessoEletronicoDTO) {
if(!isset($parObjProcessoEletronicoDTO)) {
throw new InfraException('Parâmetro $parObjProcessoEletronicoDTO não informado.');
}
$idProcedimento = $parObjProcessoEletronicoDTO->getDblIdProcedimento();
//Registra os dados do processo eletrônico
//TODO: Revisar a forma como o barramento tratar o NRE para os processos apensados
$objProcessoEletronicoDTOFiltro = new ProcessoEletronicoDTO();
$objProcessoEletronicoDTOFiltro->setStrNumeroRegistro($parObjProcessoEletronicoDTO->getStrNumeroRegistro());
$objProcessoEletronicoDTOFiltro->setDblIdProcedimento($parObjProcessoEletronicoDTO->getDblIdProcedimento());
$objProcessoEletronicoDTOFiltro->retStrNumeroRegistro();
$objProcessoEletronicoDTOFiltro->retDblIdProcedimento();
$objProcessoEletronicoBD = new ProcessoEletronicoBD($this->getObjInfraIBanco());
$objProcessoEletronicoDTO = $objProcessoEletronicoBD->consultar($objProcessoEletronicoDTOFiltro);
if(empty($objProcessoEletronicoDTO)) {
$objProcessoEletronicoDTO = $objProcessoEletronicoBD->cadastrar($objProcessoEletronicoDTOFiltro);
}
//Registrar processos apensados
if($parObjProcessoEletronicoDTO->isSetArrObjRelProcessoEletronicoApensado()) {
$objRelProcessoEletronicoApensadoBD = new RelProcessoEletronicoApensadoBD($this->getObjInfraIBanco());
foreach ($parObjProcessoEletronicoDTO->getArrObjRelProcessoEletronicoApensado() as $objRelProcessoEletronicoApensadoDTOFiltro) {
if($objRelProcessoEletronicoApensadoBD->contar($objRelProcessoEletronicoApensadoDTOFiltro) < 1){
$objRelProcessoEletronicoApensadoBD->cadastrar($objRelProcessoEletronicoApensadoDTOFiltro);
}
}
}
//Registrar informações sobre o trâmite do processo
$arrObjTramiteDTO = $parObjProcessoEletronicoDTO->getArrObjTramiteDTO();
$parObjTramiteDTO = $arrObjTramiteDTO[0];
$objTramiteDTO = new TramiteDTO();
$objTramiteDTO->retNumIdTramite();
$objTramiteDTO->setStrNumeroRegistro($parObjTramiteDTO->getStrNumeroRegistro());
$objTramiteDTO->setNumIdTramite($parObjTramiteDTO->getNumIdTramite());
$objTramiteBD = new TramiteBD($this->getObjInfraIBanco());
$objTramiteDTO = $objTramiteBD->consultar($objTramiteDTO);
if($objTramiteDTO == null) {
$objTramiteDTO = $objTramiteBD->cadastrar($parObjTramiteDTO);
}
$objProcessoEletronicoDTO->setArrObjTramiteDTO(array($objTramiteDTO));
//Registra informações sobre o componente digital do documento
$arrObjComponenteDigitalDTO = array();
$objComponenteDigitalBD = new ComponenteDigitalBD($this->getObjInfraIBanco());
$numOrdem = 1;
foreach ($parObjTramiteDTO->getArrObjComponenteDigitalDTO() as $objComponenteDigitalDTO) {
$objComponenteDigitalDTOFiltro = new ComponenteDigitalDTO();
$objComponenteDigitalDTOFiltro->setStrNumeroRegistro($objComponenteDigitalDTO->getStrNumeroRegistro());
$objComponenteDigitalDTOFiltro->setDblIdProcedimento($objComponenteDigitalDTO->getDblIdProcedimento());
$objComponenteDigitalDTOFiltro->setDblIdDocumento($objComponenteDigitalDTO->getDblIdDocumento());
if($objComponenteDigitalBD->contar($objComponenteDigitalDTOFiltro) > 0){
$numOrdem++;
}
}
foreach ($parObjTramiteDTO->getArrObjComponenteDigitalDTO() as $objComponenteDigitalDTO) {
//Verifica se o documento foi inserido pelo trâmite atual
if($objComponenteDigitalDTO->getDblIdDocumento() != null){
$objComponenteDigitalDTO->setDblIdProcedimento($idProcedimento);
$objComponenteDigitalDTOFiltro = new ComponenteDigitalDTO();
$objComponenteDigitalDTOFiltro->setStrNumeroRegistro($objComponenteDigitalDTO->getStrNumeroRegistro());
$objComponenteDigitalDTOFiltro->setDblIdProcedimento($objComponenteDigitalDTO->getDblIdProcedimento());
$objComponenteDigitalDTOFiltro->setDblIdDocumento($objComponenteDigitalDTO->getDblIdDocumento());
if($objComponenteDigitalBD->contar($objComponenteDigitalDTOFiltro) < 1){
$objComponenteDigitalDTO->setNumOrdem($numOrdem);
$objComponenteDigitalDTO->unSetStrDadosComplementares();
$objComponenteDigitalDTO = $objComponenteDigitalBD->cadastrar($objComponenteDigitalDTO);
$numOrdem++;
}
else {
//Verifica se foi setado o envio
if(!$objComponenteDigitalDTO->isSetStrSinEnviar()){
$objComponenteDigitalDTO->setStrSinEnviar('N');
}
// Muda a ID do tramite e o arquivo pode ser enviado
$objComponenteDigitalBD->alterar($objComponenteDigitalDTO);
}
$arrObjComponenteDigitalDTO[] = $objComponenteDigitalDTO;
}
}
$objTramiteDTO->setArrObjComponenteDigitalDTO($arrObjComponenteDigitalDTO);
//TODO: Adicionar controle de excessão
//...
return $objProcessoEletronicoDTO;
}
/**
* Retorna o hash do objecto do solicitarMetadadosResponse
*
* @param object $objMeta tem que ser o componenteDigital->hash
* @return string
*/
public static function getHashFromMetaDados($objMeta){
$strHashConteudo = '';
if (isset($objMeta)) {
$matches = array();
$strHashConteudo = (isset($objMeta->enc_value)) ? $objMeta->enc_value : $objMeta->_;
if (preg_match('/^