/**
  * LISTA DE TIPO DE ASSUNTO DE SOLICITAÇÃO.
  *
  * @param \Core_Dto_Search $dto
  * @param string $sort
  * @param string $order
  * @return array
  */
 public function listTipoAssuntoSolicitacao($dto, $sort = 'a.noTipoAssuntoSolicitacao', $order = 'ASC')
 {
     $queryBuilder = $this->_em->createQueryBuilder()->select('a.sqTipoAssuntoSolicitacao, a.noTipoAssuntoSolicitacao, a.inTipoParaArtefato')->from('app:TipoAssuntoSolicitacao', 'a')->orderBy($sort, $order);
     if ($dto->getQuery() != "") {
         $search = mb_strtolower($dto->getQuery(), 'UTF-8');
         $noTipoAssuntoSolicitacao = $queryBuilder->expr()->lower($queryBuilder->expr()->trim('a.noTipoAssuntoSolicitacao'));
         $queryBuilder->where($queryBuilder->expr()->like('clear_accentuation(' . $noTipoAssuntoSolicitacao . ')', $queryBuilder->expr()->literal($this->removeAccent('%' . $search . '%'))));
     }
     $inTipoParaArtefato = $dto->getInTipoParaArtefato();
     if (!is_null($inTipoParaArtefato)) {
         $paraArtefato = $dto->getInTipoParaArtefato() > 0 ? '1' : '0';
         $queryBuilder->andWhere("a.inTipoParaArtefato = :inTipoParaArtefato")->setParameter(":inTipoParaArtefato", $paraArtefato);
         if ($paraArtefato) {
             $arrAssuntoProcesso = array(\Core_Configuration::getSgdoceTipoAssuntoSolicitacaoComentario(), \Core_Configuration::getSgdoceTipoAssuntoSolicitacaoDespacho(), \Core_Configuration::getSgdoceTipoAssuntoSolicitacaoAlterarCadastro(), \Core_Configuration::getSgdoceTipoAssuntoSolicitacaoVolumeDeProcesso(), \Core_Configuration::getSgdoceTipoAssuntoSolicitacaoDesanexaProcesso(), \Core_Configuration::getSgdoceTipoAssuntoSolicitacaoDesmembraPecas(), \Core_Configuration::getSgdoceTipoAssuntoSolicitacaoRemoverPeca());
             $arrAssuntoDocumento = array(\Core_Configuration::getSgdoceTipoAssuntoSolicitacaoComentario(), \Core_Configuration::getSgdoceTipoAssuntoSolicitacaoAlterarCadastro(), \Core_Configuration::getSgdoceTipoAssuntoSolicitacaoDespacho(), \Core_Configuration::getSgdoceTipoAssuntoSolicitacaoDesanexaDigital(), \Core_Configuration::getSgdoceTipoAssuntoSolicitacaoExcluirImagem());
             $arrAssunto = $inTipoParaArtefato == \Core_Configuration::getSgdoceTipoArtefatoProcesso() ? $arrAssuntoProcesso : $arrAssuntoDocumento;
             $queryBuilder->andWhere("a.sqTipoAssuntoSolicitacao IN(:sqTipoAssuntoSolicitacaoiIn)")->setParameter(":sqTipoAssuntoSolicitacaoiIn", $arrAssunto);
         }
     }
     $queryBuilder->andWhere("a.stRegistroAtivo = :stRegistroAtivo")->setParameter(":stRegistroAtivo", TRUE);
     return $queryBuilder->getQuery()->useResultCache(TRUE, NULL, __METHOD__)->execute();
 }
 public function preSave($entity, $dto = NULL)
 {
     $this->getEntityManager()->getConnection()->beginTransaction();
     try {
         /**
          * valida se esta em minha area de trabalho
          */
         if (!$this->checkPermisionArtefato($entity->getSqArtefato()->getSqArtefato())) {
             throw new \Core_Exception_ServiceLayer(\Core_Registry::getMessage()->translate('MN146'));
         }
         if ($entity->getSqDespachoInterlocutorio()) {
             $entity->setDtDespacho(new \Zend_Date($entity->getDtDespacho()));
             $hasDemandaDespacho = $this->getServiceLocator()->getService('Solicitacao')->hasDemandaAbertaByAssuntoPessoaResponsavel(\Core_Dto::factoryFromData(array('sqArtefato' => $entity->getSqArtefato()->getSqArtefato(), 'sqTipoAssuntoSolicitacao' => \Core_Configuration::getSgdoceTipoAssuntoSolicitacaoDespacho()), 'search'));
             /**
              * se a data do despacho é menor que a data do último tramite NÃO pode excluir
              * 0 = equal, 1 = later, -1 = earlier
              */
             if (\Zend_Registry::get('isUserSgi') && !$hasDemandaDespacho && $this->_checkArtefatoLastTramite($entity) < 1) {
                 throw new \Core_Exception_ServiceLayer(\Core_Registry::getMessage()->translate('MN147'));
             }
             $this->getMessaging()->addSuccessMessage('MD002', 'User');
         } else {
             $this->getMessaging()->addSuccessMessage('MD001', 'User');
         }
         $sqCargoAssinatura = $dto->getSqCargoAssinatura();
         $sqFuncaoAssinatura = $dto->getSqFuncaoAssinatura();
         if (empty($sqCargoAssinatura) && empty($sqFuncaoAssinatura)) {
             $this->getMessaging()->addErrorMessage(\Core_Registry::getMessage()->translate('MN179'), 'User');
         } else {
             if (!empty($sqCargoAssinatura)) {
                 $entCargoAssinatura = $this->getEntityManager()->getPartialReference('app:VwCargo', $sqCargoAssinatura);
                 $entity->setSqCargoAssinatura($entCargoAssinatura);
             } else {
                 $entity->setSqCargoAssinatura(null);
             }
             if (!empty($sqFuncaoAssinatura)) {
                 $entFuncaoAssinatura = $this->getEntityManager()->getPartialReference('app:VwFuncao', $sqFuncaoAssinatura);
                 $entity->setSqFuncaoAssinatura($entFuncaoAssinatura);
             } else {
                 $entity->setSqFuncaoAssinatura(null);
             }
         }
         if (!$entity->getSqDespachoInterlocutorio()) {
             $entity->setDtDespacho(\Zend_Date::now());
         }
         $this->getMessaging()->dispatchPackets();
         $this->getEntityManager()->getConnection()->commit();
     } catch (\Exception $e) {
         $this->getEntityManager()->getConnection()->rollback();
         throw $e;
     }
 }