/**
  * Verifica se já existe unidade usando o serviço.
  *
  * @param Novosga\Model\SequencialModel $model
  */
 protected function preDelete(Context $context, SequencialModel $model)
 {
     $error = _('Já existem atendimentos para o serviço que está tentando remover');
     // quantidade de atendimentos do servico
     $query = $this->em()->createQuery("SELECT COUNT(e) as total FROM Novosga\\Model\\Atendimento e JOIN e.servicoUnidade su WHERE su.servico = :servico");
     $query->setParameter('servico', $model->getId());
     $rs = $query->getSingleResult();
     if ($rs['total'] > 0) {
         throw new \Exception($error);
     }
     // quantidade de atendimentos do servico, no historico
     $query = $this->em()->createQuery("SELECT COUNT(e) as total FROM Novosga\\Model\\ViewAtendimento e WHERE e.servico = :servico");
     $query->setParameter('servico', $model->getId());
     $rs = $query->getSingleResult();
     if ($rs['total'] > 0) {
         throw new \Exception($error);
     }
     // apagando vinculo com as unidades
     $this->em()->beginTransaction();
     $query = $this->em()->createQuery("DELETE FROM Novosga\\Model\\ServicoUsuario e WHERE e.servico = :servico");
     $query->setParameter('servico', $model->getId());
     $query->execute();
     $query = $this->em()->createQuery("DELETE FROM Novosga\\Model\\ServicoUnidade e WHERE e.servico = :servico");
     $query->setParameter('servico', $model->getId());
     $query->execute();
 }
示例#2
0
 /**
  * Deletando vinculos (permissoes e lotacoes).
  *
  * @param Novosga\Context               $context
  * @param Novosga\Model\SequencialModel $model
  */
 protected function preDelete(Context $context, SequencialModel $model)
 {
     $query = $this->em()->createQuery("DELETE FROM Novosga\\Model\\Permissao p WHERE p.cargo = :cargo");
     $query->setParameter('cargo', $model->getId());
     $query->execute();
     $query = $this->em()->createQuery("DELETE FROM Novosga\\Model\\Lotacao l WHERE l.cargo = :cargo");
     $query->setParameter('cargo', $model->getId());
     $query->execute();
 }
示例#3
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.'));
     }
 }
示例#4
0
 /**
  * Exibe o formulário de cadastro, tanto novo quanto para alteração.
  *
  * @param Novosga\Context $context
  *
  * @throws \Exception
  */
 public function edit(Context $context, $id = 0)
 {
     $id = (int) $id;
     if ($id > 0) {
         // editando
         $this->model = $this->findById($id);
         // invalid id
         if (!$this->model) {
             if ($context->getModulo()) {
                 $this->app()->gotoModule();
             } else {
                 $this->app()->gotoHome();
             }
         }
     } else {
         $this->model = $this->createModel();
     }
     if ($context->request()->isPost()) {
         $redirUrl = $_SERVER['HTTP_REFERER'];
         $message = ['success' => true, 'text' => ''];
         $requiredFields = $this->requiredFields();
         try {
             foreach ($requiredFields as $field) {
                 $value = trim($context->request()->post($field));
                 if (empty($value) && $value !== '0') {
                     throw new \Exception(_('Preencha os campos obrigatórios'));
                 }
                 Objects::set($this->model, $field, $_POST[$field]);
             }
             $id = $context->request()->post('id', 0);
             if ($id > 0) {
                 // editando
                 $this->model->setId($id);
                 $this->doSave($context, $this->model);
                 $message['text'] = _('Registro alterado com sucesso');
             } else {
                 // criando
                 $this->doSave($context, $this->model);
                 $id = $this->model->getId();
                 $redirUrl .= '/' . $id;
                 if ($id > 0) {
                     $message['text'] = _('Novo registro adicionado com sucesso');
                 } else {
                     $message['text'] = _('Erro ao salvar o novo registro. Favor tentar novamente');
                     $message['success'] = false;
                 }
             }
         } catch (\Exception $e) {
             $message['text'] = $e->getMessage();
             $message['success'] = false;
         }
         if (!empty($message['text'])) {
             $this->app()->flash($message['success'] ? 'success' : 'error', $message['text']);
         }
         $this->app()->redirect($redirUrl);
     }
     $this->app()->view()->set('id', $id);
     $this->app()->view()->set('model', $this->model);
 }
示例#5
0
 protected function preDelete(Context $context, SequencialModel $model)
 {
     if ($context->getUser()->getId() === $model->getId()) {
         throw new \Exception(_('Não é possível excluir si próprio.'));
     }
     // verificando a quantidade de atendimentos do usuario
     $total = 0;
     $models = array('Atendimento', 'ViewAtendimento');
     foreach ($models as $atendimentoModel) {
         $query = $this->em()->createQuery("SELECT COUNT(e) as total FROM Novosga\\Model\\{$atendimentoModel} e WHERE e.usuario = :usuario");
         $query->setParameter('usuario', $model->getId());
         $rs = $query->getSingleResult();
         $total += $rs['total'];
     }
     if ($total > 0) {
         throw new \Exception(_('Não é possível excluir esse usuário pois o mesmo já realizou atendimentos.'));
     }
     // excluindo vinculos do usuario (servicos e lotacoes)
     $models = array('ServicoUsuario', 'Lotacao');
     foreach ($models as $vinculoModel) {
         $query = $this->em()->createQuery("DELETE FROM Novosga\\Model\\{$vinculoModel} e WHERE e.usuario = :usuario");
         $query->setParameter('usuario', $model->getId());
         $query->execute();
     }
 }
 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);
 }
示例#7
0
 protected function preDelete(Context $context, SequencialModel $model)
 {
     if ($model->getId() == 1) {
         throw new \Exception(_('Não pode remover essa prioridade'));
     }
 }
示例#8
0
 /**
  * Remove a unidade caso a mesma não possua atendimento. Se possuir uma 
  * exceção será lançada.
  * @param Novosga\Context $context
  * @param Novosga\Model\SequencialModel $model
  * @throws \Exception
  * @throws \modules\sga\unidades\Exception
  */
 protected function doDelete(Context $context, SequencialModel $model)
 {
     // verificando se ja tem atendimentos
     $query = $this->em()->createQuery("SELECT COUNT(e) as total FROM Novosga\\Model\\ViewAtendimento e WHERE e.unidade = :unidade");
     $query->setParameter('unidade', $model->getId());
     $rs = $query->getSingleResult();
     if ($rs['total'] > 0) {
         throw new \Exception(_('Não pode excluir essa unidade porque a mesma já possui atendimentos.'));
     }
     $this->em()->beginTransaction();
     try {
         // removendo servicos
         $query = $this->em()->createQuery("DELETE FROM Novosga\\Model\\ServicoUnidade e WHERE e.unidade = :unidade");
         $query->setParameter('unidade', $model->getId());
         $query->execute();
         // removendo a unidade
         $this->em()->remove($model);
         $this->em()->commit();
         $this->em()->flush();
     } catch (\Exception $e) {
         $this->em()->rollback();
         throw $e;
     }
 }