From 5e645f475a5bf9fb2d8b3f8b89f8a07b93a31856 Mon Sep 17 00:00:00 2001 From: Eduardo Santos Date: Mon, 28 Apr 2014 13:02:53 -0300 Subject: [PATCH] Corrige exclusão de locais --- src/Cacic/CommonBundle/Controller/LocalController.php | 3 ++- src/Cacic/CommonBundle/Entity/LocalRepository.php | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/src/Cacic/CommonBundle/Controller/LocalController.php b/src/Cacic/CommonBundle/Controller/LocalController.php index 4af6316..329bd36 100644 --- a/src/Cacic/CommonBundle/Controller/LocalController.php +++ b/src/Cacic/CommonBundle/Controller/LocalController.php @@ -136,7 +136,7 @@ class LocalController extends Controller /** * Primeiramente, remove as configurações aplicadas ao Local */ - $this->getDoctrine()->getRepository('CacicCommonBundle:ConfiguracaoLocal')->removerConfiguracoesDoLocal( $local ); + $this->getDoctrine()->getManager()->getRepository('CacicCommonBundle:Local')->excluirLocal( $local ); $em->remove( $local ); // Tenta excluir o registro da base de dados $em->flush(); @@ -147,6 +147,7 @@ class LocalController extends Controller } catch ( \Doctrine\DBAL\DBALException $e ) { + $this->get('logger')->error("Erro na exclusão do local\n".$e->getMessage()); $out = array('status' => 'error', 'code' => false); if ( preg_match('#SQLSTATE\[(\d+)\]#', $e->getMessage(), $tmp) ) $out['code'] = $tmp[1]; diff --git a/src/Cacic/CommonBundle/Entity/LocalRepository.php b/src/Cacic/CommonBundle/Entity/LocalRepository.php index 65eee8a..1aa447c 100644 --- a/src/Cacic/CommonBundle/Entity/LocalRepository.php +++ b/src/Cacic/CommonBundle/Entity/LocalRepository.php @@ -43,5 +43,73 @@ class LocalRepository extends EntityRepository return $this->getEntityManager()->createQuery( $_dql )->getArrayResult(); } + + /** + * Retorna o último local cadastrado + * + * @return mixed + */ + + public function getMaxLocal($local) { + $_dql = "SELECT l + FROM CacicCommonBundle:Local l + WHERE l.idLocal <> :local + ORDER BY l.idLocal desc + "; + + return $this->getEntityManager() + ->createQuery( $_dql ) + ->setMaxResults(1) + ->setParameter('local', $local) + ->getSingleResult(); + } + + /** + * Move os usuários de local + * + * @param $local + */ + + public function moveUsuarios($local) { + $em = $this->getEntityManager(); + $usuarios = $local->getUsuarios(); + $maxLocal = $em->getRepository('CacicCommonBundle:Local')->getMaxLocal($local->getIdLocal()); + // Coloca cada usuário em no último local cadastrado + foreach ($usuarios as $modificar) { + $modificar->setIdLocal($maxLocal); + $em->persist($modificar); + } + $em->flush(); + } + + /** + * Excluir local + * + * @param $local + */ + + public function excluirLocal($local) { + $em = $this->getEntityManager(); + $em->getRepository('CacicCommonBundle:ConfiguracaoLocal')->removerConfiguracoesDoLocal( $local ); + $em->getRepository('CacicCommonBundle:Local')->moveUsuarios( $local ); + + $config = $em->getRepository('CacicCommonBundle:PatrimonioConfigInterface')->findBy(array('local' => $local->getIdLocal())); + foreach ($config as $excluir) { + $em->remove($excluir); + } + + $config = $em->getRepository('CacicCommonBundle:UnidOrganizacionalNivel2')->findBy(array('idLocal' => $local->getIdLocal())); + foreach ($config as $excluir) { + $em->remove($excluir); + } + + $config = $em->getRepository('CacicCommonBundle:Rede')->findBy(array('idLocal' => $local->getIdLocal())); + foreach ($config as $excluir) { + $excluir->setIdLocal(null); + $em->persist($excluir); + } + + $em->flush(); + } } \ No newline at end of file -- libgit2 0.21.2