Exemplo n.º 1
0
 /**
  * Verifica se o grupo a ser excluído possui relacionamento com alguma unidade.
  *
  * @param Novosga\Context               $context
  * @param Novosga\Model\SequencialModel $model
  */
 protected function preDelete(Context $context, SequencialModel $model)
 {
     $query = $this->em()->createQuery("\n            SELECT\n                COUNT(e) as total\n            FROM\n                Novosga\\Model\\Unidade e\n                INNER JOIN e.grupo g\n            WHERE\n                g.left >= :esquerda AND\n                g.right <= :direita\n        ");
     $query->setParameter('esquerda', $model->getLeft());
     $query->setParameter('direita', $model->getRight());
     $rs = $query->getSingleResult();
     if ($rs['total'] > 0) {
         throw new \Exception(_('Esse grupo não pode ser excluído porque possui relacionamento com uma ou mais unidades.'));
     }
 }
Exemplo n.º 2
0
 protected function doDelete(Context $context, SequencialModel $model)
 {
     if ($model->getLeft() == 1) {
         throw new Exception(_('Não pode remover a raiz'));
     }
     try {
         $this->em()->beginTransaction();
         $this->preDelete($context, $model);
         $className = get_class($model);
         // apagando os filhos
         $query = $this->em()->createQuery("DELETE FROM {$className} e WHERE e.left > :esquerda AND e.left < :direita");
         $query->setParameter('esquerda', $model->getLeft());
         $query->setParameter('direita', $model->getRight());
         $query->execute();
         // atualizando os tamanhos
         $tamanho = $model->getRight() - $model->getLeft() + 1;
         $query = $this->em()->createQuery("UPDATE {$className} e SET e.right = e.right - :tamanho WHERE e.right > :direita");
         $query->setParameter('direita', $model->getRight());
         $query->setParameter('tamanho', $tamanho);
         $query->execute();
         // atualizando os tamanhos
         $query = $this->em()->createQuery("UPDATE {$className} e SET e.left = e.left - :tamanho WHERE e.left > :direita");
         $query->setParameter('direita', $model->getRight());
         $query->setParameter('tamanho', $tamanho);
         $query->execute();
         $this->em()->remove($model);
         $this->em()->commit();
         $this->em()->flush();
     } catch (Exception $e) {
         $this->em()->rollback();
         throw new Exception(sprintf(_('Erro ao apagar o registro: %s'), $e->getMessage()));
     }
     $this->postDelete($context, $model);
 }