/**
  * @param type $entity
  * @param type $dto
  * @param type $objArtProDto
  */
 public function postSave($entity, $dto = null, $objArtProDto = null)
 {
     $retorno = false;
     $this->getEntityManager()->beginTransaction();
     $sqPessoaCorporativo = \Core_Integration_Sica_User::getPersonId();
     try {
         // salva o artefato_processo
         $objArtProDto->setSqArtefato($entity);
         $this->saveArtefatoProcesso($objArtProDto);
         $arrPesArtDto = array('entity' => 'Sgdoce\\Model\\Entity\\PessoaArtefato', 'mapping' => array('sqPessoaFuncao' => 'Sgdoce\\Model\\Entity\\PessoaFuncao', 'sqPessoaSgdoce' => 'Sgdoce\\Model\\Entity\\PessoaSgdoce', 'sqArtefato' => 'Sgdoce\\Model\\Entity\\Artefato'));
         $sqPessoaSgdoce = $this->_getRepository('app:PessoaSgdoce')->findBySqPessoaCorporativo($sqPessoaCorporativo);
         if (empty($sqPessoaSgdoce)) {
             $filter = new \Zend_Filter_Digits();
             $data['sqPessoaCorporativo'] = $this->_getRepository('app:VwPessoa')->find($sqPessoaCorporativo);
             $dtoPessoaSearch = \Core_Dto::factoryFromData($data, 'search');
             $cpfCnpjPassaportUnfiltered = $this->getServiceLocator()->getService('VwPessoa')->returnCpfCnpjPassaporte($dtoPessoaSearch);
             $cpfCnpjPassaport = $filter->filter($cpfCnpjPassaportUnfiltered);
             $noPessoaCorporativo = $data['sqPessoaCorporativo']->getNoPessoa();
             $this->addPessoaSgdoce($sqPessoaCorporativo, $noPessoaCorporativo, $cpfCnpjPassaport);
             $sqPessoaSgdoce = $this->_getRepository('app:PessoaSgdoce')->findBySqPessoaCorporativo($sqPessoaCorporativo);
         }
         $arrParams = array();
         $arrParams['sqArtefato'] = $entity->getSqArtefato();
         $arrParams['sqPessoaFuncao'] = \Core_Configuration::getSgdocePessoaFuncaoAutor();
         $arrParams['sqPessoaSgdoce'] = $sqPessoaSgdoce[0]->getSqPessoaSgdoce();
         $objPessoArtefato = $this->getServiceLocator()->getService('PessoaArtefato')->findBy($arrParams);
         if (!count($objPessoArtefato)) {
             $objPessoaArtefatoDto = \Core_Dto::factoryFromData($arrParams, 'entity', $arrPesArtDto);
             $this->getServiceLocator()->getService('PessoaArtefato')->savePessoaArtefato($objPessoaArtefatoDto);
         }
         $this->_salvaOrigem($entity, $dto);
         // SALVA GRAU DE ACESSO.
         if ($dto->getSqGrauAcesso()) {
             $grauAcesso = $this->getEntityManager()->getPartialReference('app:GrauAcesso', $dto->getSqGrauAcesso());
             $this->getServiceLocator()->getService('GrauAcessoArtefato')->saveGrauAcessoArtefato($entity, $grauAcesso);
         }
         /*
          * ##### VOLUME #####
          *
          * só é postado no create
          *
          */
         if ($dto->getDataVolume()) {
             $dataIntessado = $dto->getDataVolume();
             $sqPessoaAbertura = \Core_Integration_Sica_User::getPersonId();
             $sqUnidadeOrgAbertura = \Core_Integration_Sica_User::getUserUnit();
             foreach ($dataIntessado->getApi() as $method) {
                 $line = $dataIntessado->{$method}();
                 if (!(int) $line->getNuVolume()) {
                     throw new \Core_Exception_ServiceLayer('Volume não informado.');
                 }
                 $nuFolhaFinal = (int) $line->getNuFolhaFinal();
                 $dtEncerramento = null;
                 if (!empty($nuFolhaFinal)) {
                     $dtEncerramento = \Zend_Date::now();
                 } else {
                     $nuFolhaFinal = null;
                 }
                 $add = $this->getServiceLocator()->getService('ProcessoVolume')->addVolume(array('nuVolume' => (int) $line->getNuVolume(), 'nuFolhaInicial' => (int) $line->getNuFolhaInicial(), 'nuFolhaFinal' => $nuFolhaFinal, 'sqArtefato' => $entity->getSqArtefato(), 'sqPessoa' => $sqPessoaAbertura, 'sqUnidadeOrg' => $sqUnidadeOrgAbertura, 'dtAbertura' => \Zend_Date::now(), 'dtEncerramento' => $dtEncerramento));
                 if (!$add) {
                     throw new \Core_Exception_ServiceLayer('Erro ao adicionar volume.');
                 }
             }
         }
         /*
          * ##### INTERESSADO #####
          *
          * só é postado no create, em caso de edit os interessados são
          * manutenidos no proprio formulario
          *
          */
         if ($dto->getDataInteressado()) {
             $dataIntessado = $dto->getDataInteressado();
             foreach ($dataIntessado->getApi() as $method) {
                 $line = $dataIntessado->{$method}();
                 //metodo foi copiado e adaptado de Artefato_PessoaController::addInteressadoAction()
                 $add = $this->getServiceLocator()->getService('Documento')->addInteressado(array('noPessoa' => $line->getNoPessoa(), 'unidFuncionario' => $line->getUnidFuncionario(), 'sqPessoaCorporativo' => $line->getSqPessoaCorporativo(), 'sqTipoPessoa' => $line->getSqTipoPessoa(), 'sqPessoaFuncao' => $line->getSqPessoaFuncao(), 'sqArtefato' => $entity->getSqArtefato()));
                 if (!$add) {
                     throw new \Core_Exception_ServiceLayer($line->getNoPessoa() . ' já é um interessado deste processo.');
                 }
             }
         }
         /*
          * ##### REFERÊNCIA (VINCULO) #####
          *
          * só é postado no create, em caso de edit os vinculos são
          * manutenidos no proprio formulario
          *
          */
         if ($dto->getDataVinculo()) {
             //só é postado no create
             $dataVinculo = $dto->getDataVinculo();
             foreach ($dataVinculo->getApi() as $method) {
                 $gridLine = $dataVinculo->{$method}();
                 //metodo foi copiado e adaptado de Artefato_DocumentoController::addDocumentoEletronicoAction()
                 $add = $this->getServiceLocator()->getService('Documento')->addVinculo(array('nuDigital' => $gridLine->getNuDigital(), 'nuArtefatoVinculacao' => $gridLine->getNuArtefatoVinculacao(), 'sqTipoArtefato' => $gridLine->getSqTipoArtefato(), 'sqArtefato' => $entity->getSqArtefato(), 'tipoVinculo' => \Core_Configuration::getSgdoceTipoVinculoArtefatoReferencia(), 'inOriginal' => $gridLine->getInOriginal()));
                 if (!$add) {
                     $msg = "A digital <b>{$gridLine->getNuDigital()}</b> já esta vinculada a este documento";
                     if ($gridLine->getSqTipoArtefato() == \Core_Configuration::getSgdoceTipoArtefatoProcesso()) {
                         $msg = "O processo <b>{$gridLine->getNuArtefatoVinculacao()}</b> já esta vinculado a este processo.";
                     }
                     throw new \Core_Exception_ServiceLayer($msg);
                 }
             }
         }
         // #HistoricoArtefato::save();
         $dtAcao = new \Zend_Date(\Zend_Date::now());
         $sqOcorrencia = 0;
         if ($this->_firstTramite) {
             $sqOcorrencia = \Core_Configuration::getSgdoceSqOcorrenciaCadastrar();
             $message = "Processo cadastrado com sucesso";
             $strHMessage = sprintf(\Core_Registry::getMessage()->translate('MH007'), \Core_Integration_Sica_User::getUserName(), $dtAcao->get(\Zend_Date::DATETIME_MEDIUM));
         } else {
             $sqOcorrencia = \Core_Configuration::getSgdoceSqOcorrenciaAlterar();
             $message = "Processo alterado com sucesso";
             if ($dto->getIsAutuacao()) {
                 $message = "Processo autuado com sucesso!";
             }
             $strHMessage = sprintf(\Core_Registry::getMessage()->translate('MH008'), \Core_Integration_Sica_User::getUserName(), $dtAcao->get(\Zend_Date::DATETIME_MEDIUM));
         }
         $this->getServiceLocator()->getService('HistoricoArtefato')->registrar($entity->getSqArtefato(), $sqOcorrencia, $strHMessage);
         if ($this->_firstTramite) {
             $this->getServiceLocator()->getService('TramiteArtefato')->insertFirstTramite($entity->getSqArtefato());
         }
         $this->getMessaging()->addSuccessMessage($message, "User");
         $retorno = $this->getEntityManager()->commit();
     } catch (\Exception $objException) {
         $this->getEntityManager()->rollback();
         $this->getMessaging()->addErrorMessage("[" . $objException->getCode() . "] " . $objException->getMessage(), "User");
         $retorno = $objException;
     }
     $this->getMessaging()->dispatchPackets();
     return $retorno;
 }
 /**
  *
  * @param integer $sqArtefato
  * @throws \Exception
  * @throws \Core_Exception_ServiceLayer_Verification
  */
 public function unarchive($sqArtefato)
 {
     $this->getEntityManager()->beginTransaction();
     try {
         if (!$this->_getRepository()->hasArquivamento($sqArtefato)) {
             $nuArtefato = $this->_getNuArtefatoToUnarchive($sqArtefato);
             throw new \Core_Exception_ServiceLayer_Verification("Artefato {$nuArtefato} já foi desarquivado.");
         }
         $entityArquivoSetorial = $this->_getRepository()->find($this->_getRepository()->getKeyArquivamento($sqArtefato));
         if (NULL === $entityArquivoSetorial) {
             $nuArtefato = $this->_getNuArtefatoToUnarchive($sqArtefato);
             throw new \Core_Exception_ServiceLayer_Verification("Artefato {$nuArtefato} não localizado no arquivo setorial. Já deve ter sido desarquivado");
         }
         $entityPessoaDesarquivamento = $this->getEntityManager()->getPartialReference('app:VwPessoa', \Core_Integration_Sica_User::getPersonId());
         $dtDesarquivamento = \Zend_Date::now();
         $entityArquivoSetorial->setDtDesarquivamento($dtDesarquivamento)->setSqPessoaDesarquivamento($entityPessoaDesarquivamento);
         $this->getEntityManager()->persist($entityArquivoSetorial);
         # persiste o historico no artefato
         $serviceHA = $this->getServiceLocator()->getService('HistoricoArtefato');
         $sqOcorrencia = \Core_Configuration::getSgdoceSqOcorrenciaDesarquivarSetor();
         $strMessage = $serviceHA->getMessage('MH026', \Core_Integration_Sica_User::getUserUnitName(), $dtDesarquivamento->get(\Zend_Date::DATETIME_MEDIUM), \Core_Integration_Sica_User::getUserName());
         $serviceHA->registrar($sqArtefato, $sqOcorrencia, $strMessage);
         sleep(1);
         //só pra organizar o histórico
         $this->_processTramite($entityArquivoSetorial->getSqArtefato());
         $this->getEntityManager()->flush($entityArquivoSetorial);
         $this->getEntityManager()->commit();
     } catch (\Exception $e) {
         $this->getEntityManager()->rollback();
         throw $e;
     }
 }
Beispiel #3
0
 /**
  * Metódo que realiza o post Save.
  * @param Object $entity
  * @param Object $dto
  */
 public function postSave($entity, $dto = NULL)
 {
     try {
         // RN - Caso não exista Grau de Acesso ao Artefato sera por default publico(1)
         if (!$dto->getSqGrauAcesso()) {
             $data = array('sqGrauAcesso' => \Core_Configuration::getSgdoceGrauAcessoPublico());
             $dtoAcesso = new \Core_Dto_Mapping($data, array_keys($data));
             $sqGrauAcesso = $this->_getRepository('app:GrauAcesso')->find($dtoAcesso->getSqGrauAcesso());
         } else {
             $sqGrauAcesso = $this->_getRepository('app:GrauAcesso')->find($dto->getSqGrauAcesso());
         }
         // realizando a persistencia do Grau de Acesso
         $this->getServiceLocator()->getService('Dossie')->persistGrauAcessoArtefato($entity, $sqGrauAcesso);
         $strMessage = NULL;
         if ($this->_firstTramite) {
             $strMessage = $this->getServiceLocator()->getService('HistoricoArtefato')->getMessage('MH005', $entity->getDtCadastro()->get(\Zend_Date::DATETIME_MEDIUM), \Core_Integration_Sica_User::getUserName());
             $nuOcorrencia = \Core_Configuration::getSgdoceSqOcorrenciaCadastrar();
         } else {
             $strMessage = $this->getServiceLocator()->getService('HistoricoArtefato')->getMessage('MH006', \Zend_Date::now()->get(\Zend_Date::DATETIME_MEDIUM), \Core_Integration_Sica_User::getUserName());
             $nuOcorrencia = \Core_Configuration::getSgdoceSqOcorrenciaAlterar();
         }
         $this->getServiceLocator()->getService('HistoricoArtefato')->registrar($entity->getSqArtefato(), $nuOcorrencia, $strMessage);
         // verificando atributo
         // noResponsavelAssinatura vem o sqPessoa selecionado no autocomplete
         if ($dto->getNoResponsavelAssinatura() != NULL) {
             /**
              * em caso de update de documento de origem externa ou com tipo de documento sem assinatura e que não tiver assinante
              * efetua a exclusão caso ja tenha sido preenchido
              * anteriormente
              */
             if ($entity->getSqArtefato() && !$dto->getNoResponsavelAssinatura()) {
                 $this->_checkExcluirAssinante($entity, $dto);
             } else {
                 $sqPessoaResponsavelAssinatura = $dto->getNoResponsavelAssinatura_hidden() ? $dto->getNoResponsavelAssinatura_hidden() : $dto->getNoResponsavelAssinatura();
                 $noPessoaResponsavelAssinatura = $dto->getNoResponsavelAssinatura_autocomplete() ? $dto->getNoResponsavelAssinatura_autocomplete() : $dto->getNoResponsavelAssinatura();
                 if (!is_numeric($sqPessoaResponsavelAssinatura)) {
                     throw new \Core_Exception_ServiceLayer_Verification('Ocorreu um erro na identificação do assintante do documento. ' . "Preencha o campo <b>Assinatura</b> novamente.");
                 }
                 $entityPessoa = $this->pessoaCorporativoSgdoce($sqPessoaResponsavelAssinatura, $noPessoaResponsavelAssinatura);
                 $pessoaArtefato = $this->getServiceLocator()->getService('Artefato')->cadastrarPessoaArtefato($entity, $entityPessoa, \Core_Configuration::getSgdocePessoaFuncaoAssinatura());
                 $this->getEntityManager()->persist($pessoaArtefato);
                 $this->getEntityManager()->flush($pessoaArtefato);
                 // verificando se existe registro em PessoaAssinanteArtefato
                 if ($dto->getProcedenciaInterno() != 'externo') {
                     //só quando é unidade
                     if ($dto->getSqPessoaOrigem() != '') {
                         $sqPessoaOrigem = NULL;
                     } else {
                         $sqPessoaOrigem = $dto->getSqPessoaIcmbio();
                     }
                     $pessoaUnidadeOrg = $this->hasPessoaUnidadeOrg($entityPessoa, $dto->getNoPessoaFuncaoAssinante(), $sqPessoaOrigem);
                     $criteria = array('sqArtefato' => $entity->getSqArtefato());
                     $entPessoaAssinante = $this->_getRepository('app:PessoaAssinanteArtefato')->findOneBy($criteria);
                     // verificando se existe registro
                     if (count($entPessoaAssinante)) {
                         // atualizando PessoaAssinanteArtefato
                         $entPessoaAssinante->setSqPessoaUnidadeOrg($pessoaUnidadeOrg);
                         if ($dto->getNoPessoaFuncaoAssinante() != $entPessoaAssinante->getNoCargoAssinante()) {
                             $entPessoaAssinante->setNoCargoAssinante($dto->getNoPessoaFuncaoAssinante());
                         }
                     } else {
                         // Preparando Entidade para salvar
                         /** @var PessoaAssinanteArtefato $resPessoaAssinante */
                         $entPessoaAssinante = $this->_newEntity('app:PessoaAssinanteArtefato');
                         //                            $entPessoaAssinante->setSqArtefato($this->_getRepository('app:Artefato')->find($entity->getSqArtefato()));
                         $entPessoaAssinante->setSqArtefato($entity);
                         $entPessoaAssinante->setSqPessoaUnidadeOrg($pessoaUnidadeOrg);
                         $entPessoaAssinante->setNoCargoAssinante($dto->getNoPessoaFuncaoAssinante());
                     }
                     // salvando PessoaAssinanteArtefato
                     $this->getEntityManager()->persist($entPessoaAssinante);
                     $this->getEntityManager()->flush($entPessoaAssinante);
                 }
             }
         } else {
             /**
              * em caso de update de documento de origem externa e não tiver assinante efetua a exclusão caso ja tenha sido preenchido
              * anteriormente
              */
             $this->_checkExcluirAssinante($entity, $dto);
         }
         //sqPrazo = 1 (data) e sqPrazo = 2 (dias)
         $entity->setDtPrazo($dto->getSqPrazo() == 2 ? NULL : $dto->getDtPrazo() != '' ? $dto->getDtPrazo() : NULL);
         $entity->setNuDiasPrazo($dto->getNuDiasPrazo() == '' ? NULL : $dto->getNuDiasPrazo());
         //Tira os Espaços do 'enter' para salvar com 250 caracteres
         $txAssuntoComplementar = $this->getServiceLocator()->getService('MinutaEletronica')->fixNewlines($entity->getTxAssuntoComplementar());
         $entity->setTxAssuntoComplementar(!$txAssuntoComplementar ? NULL : $txAssuntoComplementar);
         // salvando Origem e Destino
         self::salvaOrigemDestino($entity, $dto);
         if ($entity->getNuDigital() && !$entity->getNuDigital() instanceof \Sgdoce\Model\Entity\EtiquetaNupSiorg) {
             $entityEtiquetaNupSiorg = $this->getEntityManager()->getPartialReference('app:EtiquetaNupSiorg', $entity->getNuDigital());
             $entity->setNuDigital($entityEtiquetaNupSiorg);
         }
         // persistindo informacao
         $this->getEntityManager()->persist($entity);
         $this->getEntityManager()->flush($entity);
         /*
          * ##### INTERESSADO #####
          *
          * só é postado no create, em caso de edit os interessados são
          * manutenidos no proprio formulario
          *
          */
         if ($dto->getDataInteressado()) {
             $dataIntessado = $dto->getDataInteressado();
             foreach ($dataIntessado->getApi() as $method) {
                 $line = $dataIntessado->{$method}();
                 //metodo foi copiado e adaptado de Artefato_PessoaController::addInteressadoAction()
                 $add = $this->addInteressado(array('noPessoa' => $line->getNoPessoa(), 'unidFuncionario' => $line->getUnidFuncionario(), 'sqPessoaCorporativo' => $line->getSqPessoaCorporativo(), 'sqTipoPessoa' => $line->getSqTipoPessoa(), 'sqPessoaFuncao' => $line->getSqPessoaFuncao(), 'sqArtefato' => $entity->getSqArtefato()));
                 if (!$add) {
                     throw new \Core_Exception_ServiceLayer($line->getNoPessoa() . ' já é um interessado deste documento.');
                 }
             }
         }
         /*
          * ##### REFERÊNCIA (VINCULO) #####
          *
          * só é postado no create, em caso de edit os vinculos são
          * manutenidos no proprio formulario
          *
          */
         if ($dto->getDataVinculo()) {
             //só é postado no create
             $dataVinculo = $dto->getDataVinculo();
             foreach ($dataVinculo->getApi() as $method) {
                 $gridLine = $dataVinculo->{$method}();
                 //metodo foi copiado e adaptado de Artefato_DocumentoController::addDocumentoEletronicoAction()
                 $add = $this->addVinculo(array('nuDigital' => $gridLine->getNuDigital(), 'nuArtefatoVinculacao' => $gridLine->getNuArtefatoVinculacao(), 'sqTipoArtefato' => $gridLine->getSqTipoArtefato(), 'sqArtefato' => $entity->getSqArtefato(), 'tipoVinculo' => \Core_Configuration::getSgdoceTipoVinculoArtefatoReferencia(), 'inOriginal' => $gridLine->getInOriginal()));
                 if (!$add) {
                     $msg = "A digital <b>{$gridLine->getNuDigital()}</b> já esta vinculada a este documento";
                     if ($gridLine->getSqTipoArtefato() == \Core_Configuration::getSgdoceTipoArtefatoProcesso()) {
                         $msg = "O processo <b>{$gridLine->getNuArtefatoVinculacao()}</b> já esta vinculado a este documento";
                     }
                     throw new \Core_Exception_ServiceLayer($msg);
                 }
             }
         }
         #processar anexos para SIC
         if (true === (bool) $dto->getIsSic() && (int) $dto->getUploader_count() > 0) {
             $this->_processaAnexoSIC($entity, $dto);
         }
         if ($this->_firstTramite) {
             $this->getServiceLocator()->getService('TramiteArtefato')->insertFirstTramite($entity->getSqArtefato());
         }
     } catch (\Exception $e) {
         $this->getEntityManager()->getConnection()->rollback();
         throw $e;
     }
 }
Beispiel #4
0
 public function excluirImagem($entArtefato, $txObservacao, $stAtivo = FALSE)
 {
     try {
         $entArtefatoImagem = $this->_getRepository("app:ArtefatoImagem")->findBy(array('sqArtefato' => $entArtefato->getSqArtefato(), 'stAtivo' => true));
         $entArtefatoImagem = current($entArtefatoImagem);
         if ($entArtefatoImagem) {
             $arrDto = array('sqPessoa' => \Core_Integration_Sica_User::getPersonId(), 'sqUnidade' => \Core_Integration_Sica_User::getUserUnit());
             $objCDto = \Core_Dto::factoryFromData($arrDto, 'search');
             $entVwPessoa = $this->getServiceLocator()->getService('Pessoa')->findbyPessoaCorporativo($objCDto);
             $entVwUnidOrg = $this->getServiceLocator()->getService('VwUnidadeOrg')->getDadosUnidade($objCDto);
             $entArtefatoImagem->setStAtivo($stAtivo);
             $entArtefatoImagem->setSqPessoaInativacao($entVwPessoa);
             $entArtefatoImagem->setSqUnidadeOrgInativacao($entVwUnidOrg);
             $entArtefatoImagem->setTxObservacao($txObservacao);
             $entArtefatoImagem->setDtInativacao(\Zend_Date::now());
             $this->getEntityManager()->persist($entArtefatoImagem);
             $this->getEntityManager()->flush();
             // REGISTRO DA EXCLUSÃO DA IMAGEM. #HistoricoArtefato::save();
             $haService = $this->getServiceLocator()->getService('HistoricoArtefato');
             $sqOcorrencia = \Core_Configuration::getSgdoceSqOcorrenciaExcluirImagem();
             $strMessage = $haService->getMessage('MH024', \Zend_Date::now()->get(\Zend_Date::DATETIME_MEDIUM), \Core_Integration_Sica_User::getUserName());
             $haService->registrar($entArtefato->getSqArtefato(), $sqOcorrencia, $strMessage);
             $this->getMessaging()->addSuccessMessage('MD003', 'User');
         } else {
             $this->getMessaging()->addErrorMessage('MN174', 'User');
         }
         $this->getMessaging()->dispatchPackets();
         return $entArtefatoImagem;
     } catch (\Core_Exception_ServiceLayer $e) {
         $this->getMessaging()->addErrorMessage($e->getMessage(), 'User');
         $this->getMessaging()->dispatchPackets();
     }
     return false;
 }
Beispiel #5
0
 /**
  * Retorna o nome do usuário logado
  * @return string
  */
 public function userName()
 {
     $name = Core_Integration_Sica_User::getUserName();
     return $name;
 }
 public function postSave($service)
 {
     $data = $service->getData();
     $arquivar = (bool) $data['arquivar'];
     # persiste o historico no artefato
     $serviceHA = $this->getServiceLocator()->getService('HistoricoArtefato');
     $sqOcorrencia = \Core_Configuration::getSgdoceSqOcorrenciaClassificarArtefato();
     $strMessage = $serviceHA->getMessage('MH015', $service->getEntity()->getSqClassificacao()->getNuClassificacao(), \Zend_Date::now()->toString('dd/MM/YYYY HH:mm:ss'), \Core_Integration_Sica_User::getUserName());
     $serviceHA->registrar($service->getEntity()->getSqArtefato()->getSqArtefato(), $sqOcorrencia, $strMessage);
     if ($arquivar) {
         try {
             if (!isset($data['sqCaixa']) || !$data['sqCaixa']) {
                 throw new \Core_Exception_ServiceLayer_Verification('Nenhuma caixa informada para arquivamento após a classificação');
             }
             $entityCaixaArtefato = \Core_Dto::factoryFromData(array(), 'entity', array('entity' => '\\Sgdoce\\Model\\Entity\\CaixaArtefato'));
             $entitiCaixa = $this->getServiceLocator()->getService('CaixaArquivo')->find($data['sqCaixa']);
             $entityCaixaArtefato->setSqArtefato($service->getEntity()->getSqArtefato());
             $entityCaixaArtefato->setSqCaixa($entitiCaixa);
             //                sleep(1); //retarda o arquivamento para não gerar historicos com mesma data
             $this->getServiceLocator()->getService('CaixaArtefato')->arquivar($entityCaixaArtefato);
             $nuCaixa = $entitiCaixa->getNuCaixa() . '/' . $entitiCaixa->getNuAno();
             $unidade = $entitiCaixa->getSqUnidadeOrg()->getNoUnidadeOrg();
             $msg = "Artefato Classificado <b>{$service->getEntity()->getSqClassificacao()->getNuClassificacao()}</b> ";
             $msg .= "e arquivado na caixa n° {$nuCaixa} da {$unidade}";
         } catch (\Exception $e) {
             $msg = "Artefato Classificado <b>{$service->getEntity()->getSqClassificacao()->getNuClassificacao()}</b> ";
             $msg .= "porém ocorreu um erro ao efetuar o arquivamento. Tente arquivar novamente mais tarde";
             $msgLog = sprintf('[SGDoc-e] Exception %s in %s(%d): "%s"', get_class($e), __METHOD__, $service->getEntity()->getSqArtefato()->getSqArtefato(), $e->getMessage());
             error_log($msgLog);
         }
         $this->getMessaging()->addInfoMessage($msg, 'User');
     } else {
         $this->getMessaging()->addInfoMessage("Artefato Classificado <b>{$service->getEntity()->getSqClassificacao()->getNuClassificacao()}</b>", 'User');
     }
 }
 /**
  * Resgata um artefato recebido por um usuário para a area de trabalho da unidade;
  *
  * @param \Core_Dto_Abstract $dto
  * @return \Sgdoce\Model\Entity\TramiteArtefato
  */
 public function rescue(\Core_Dto_Abstract $dto)
 {
     $sqArtefato = $dto->getSqArtefato();
     $entityUTA = $this->_getRepository($this->_entityVwUltimoTramiteArtefato)->find($sqArtefato);
     $noPessoaRecebimento = 'Não identificado';
     if ($entityUTA->getSqPessoaRecebimento()) {
         $noPessoaRecebimento = $entityUTA->getSqPessoaRecebimento()->getNoPessoa();
     }
     $entityArtefato = $this->_getRepository($this->_entityArtefato)->find($sqArtefato);
     $noTipoArtefato = $entityArtefato->getSqTipoArtefatoAssunto()->getSqTipoArtefato()->getNoTipoArtefato();
     $params = array('sqArtefato' => $sqArtefato, 'sqTipoRastreamento' => NULL, 'txCodigoRastreamento' => NULL, 'dtTramite' => \Zend_Date::now(), 'sqPessoaTramite' => \Core_Integration_Sica_User::getPersonId(), 'sqUnidadeOrgTramite' => \Core_Integration_Sica_User::getUserUnit(), 'sqStatusTramite' => \Core_Configuration::getSgdoceStatusTramiteTramitado(), 'sqPessoaDestino' => \Core_Integration_Sica_User::getUserUnit(), 'inImpresso' => TRUE, 'nuTramite' => $this->getNextTramiteNumber($dto));
     $entityDto = $this->montaEntidateTramite($params);
     $entityTramiteArtefato = $this->save($entityDto);
     $serviceHA = $this->getServiceLocator()->getService('HistoricoArtefato');
     sleep(1);
     //só pro historico ser a ultima movimentação
     $strMessage = $serviceHA->getMessage('MH017', $noTipoArtefato, \Zend_Date::now()->get(\Zend_Date::DATETIME_MEDIUM), $noPessoaRecebimento, \Core_Integration_Sica_User::getUserName());
     $nuOcorrencia = \Core_Configuration::getSgdoceSqOcorrenciaResgateTramite();
     $serviceHA->registrar($sqArtefato, $nuOcorrencia, $strMessage);
     $this->finish();
     return $entityTramiteArtefato;
 }