/** * 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(); }
/** * 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(); }
/** * 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.')); } }
/** * 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); }
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); }
protected function preDelete(Context $context, SequencialModel $model) { if ($model->getId() == 1) { throw new \Exception(_('Não pode remover essa prioridade')); } }
/** * 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; } }