public function validate(Context $context) { $username = $context->request()->post('username'); $password = $context->request()->post('password'); $error = null; if (!empty($username) && !empty($password)) { $em = $context->database()->createEntityManager(); $config = \Novosga\Model\Configuracao::get($em, \Novosga\Auth\AuthenticationProvider::KEY); $auth = $config ? $config->getValor() : array(); $provider = App::authenticationFactory()->create($context, $auth); $user = $provider->auth($username, $password); if ($user) { // atualizando o session id $user->setSessionId(session_id()); $user->setUltimoAcesso(new \DateTime()); $em->merge($user); $em->flush(); // caso o usuario so tenha acesso a uma unica unidade, ja define como atual $us = new \Novosga\Model\Util\UsuarioSessao($user); $unidades = $this->app()->getAcessoService()->unidades($context, $us); if (sizeof($unidades) == 1) { $us->setUnidade($unidades[0]); } $context->setUser($us); } else { $error = _('Usuário ou senha inválido'); } } if (!$error) { $this->app()->gotoHome(); } else { $this->app()->flash('error', $error); $this->app()->gotoLogin(); } }
/** * 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); }
public function create(Context $context, array $config = array()) { $type = Arrays::value($config, 'type'); $providerConfig = Arrays::value($config, $type, array()); $em = $context->database()->createEntityManager(); switch ($type) { case 'ldap': return new LdapProvider($em, $providerConfig); default: return new DatabaseProvider($em, $providerConfig); } }
public function subservicos(Context $context) { $response = new \Novosga\Http\JsonResponse(); $id = $context->request()->get('id'); $servico = $this->findById($id); if ($servico) { foreach ($servico->getSubServicos() as $sub) { $response->data[] = array('id' => $sub->getId(), 'nome' => $sub->getNome()); } $response->success = true; } echo $response->toJson(); exit; }
protected function postSave(Context $context, SequencialModel $model) { /* * Se o pai tem unidades vinculadas a ele, é porque esse é o primeiro filho. * Então move todas as unidades para esse novo grupo */ if ($this->adicionando) { $em = $context->database()->createEntityManager(); $unidades = $this->countUnidades($model->getParent($em)); if ($unidades > 0) { $query = $this->em()->createQuery("\n UPDATE\n Novosga\\Model\\Unidade e\n SET\n e.grupo = :novo\n WHERE\n e.grupo = :grupo\n "); $query->setParameter('grupo', $model->getParent($em)->getId()); $query->setParameter('novo', $model->getId()); $query->execute(); } } }
protected function postSave(Context $context, SequencialModel $model) { // atualizando permissoes do cargo $query = $this->em()->createQuery("DELETE FROM Novosga\\Model\\Permissao e WHERE e.cargo = :cargo"); $query->setParameter('cargo', $model->getId()); $query->execute(); $permissoes = $context->request()->post('permissoes'); if (!empty($permissoes)) { foreach ($permissoes as $modulo) { $permissao = new \Novosga\Model\Permissao(); $permissao->setModulo($this->em()->find('Novosga\\Model\\Modulo', $modulo)); $permissao->setCargo($model); $permissao->setPermissao(3); $this->em()->persist($permissao); } $this->em()->flush(); } }
protected function preSave(Context $context, SequencialModel $model) { $query = $this->em()->createQuery("SELECT COUNT(e) as total FROM Novosga\\Model\\Unidade e WHERE e.codigo = :codigo AND e.id != :id"); $query->setParameter('codigo', $model->getCodigo()); $query->setParameter('id', $model->getId()); $rs = $query->getSingleResult(); if ($rs['total']) { throw new \Exception(_('Código de Unidade já existe')); } $grupo_id = (int) $context->request()->post('grupo_id'); $grupo = $this->em()->find('Novosga\\Model\\Grupo', $grupo_id); if (!$grupo || !$grupo->isLeaf()) { throw new \Exception(_('Grupo inválido')); } $this->isNew = !$model->getId(); if ($this->isNew) { $model->setStatusImpressao(1); $model->setMensagemImpressao('Novo SGA'); } $model->setGrupo($grupo); }
public function delete_oauth_client(Context $context) { $response = new JsonResponse(true); $client_id = $context->request()->post('client_id'); $this->delete_auth_client_by_id($client_id); return $response; }
public function acumular_atendimentos(Context $context) { $response = new JsonResponse(); try { if (!$context->request()->isPost()) { throw new \Exception(_('Somente via POST')); } $unidade = $context->getUnidade(); if (!$unidade) { throw new Exception(_('Nenhum unidade definida')); } $service = new AtendimentoService($this->em()); $service->acumularAtendimentos($unidade); $response->success = true; } catch (Exception $e) { $response->message = $e->getMessage(); } return $response; }
public function desativar_sessao(Context $context) { $response = new JsonResponse(true); $usuario = $context->getUser(); $usuario->setAtivo(false); $context->setUser($usuario); return $response; }
/** * Atualiza o status da senha para cancelado. * * @param Novosga\Context $context */ public function cancelar(Context $context) { $response = new JsonResponse(); try { $unidade = $context->getUser()->getUnidade(); if (!$unidade) { throw new Exception(_('Nenhuma unidade selecionada')); } $id = (int) $context->request()->post('id'); $atendimento = $this->getAtendimento($unidade, $id); $service = new AtendimentoService($this->em()); $response->success = $service->cancelar($atendimento, $unidade); } catch (Exception $e) { $response->message = $e->getMessage(); } return $response; }
public function toggle(Context $context) { $modulo = $this->find($context->request()->post('id')); if ($modulo) { $modulo->setStatus(!$modulo->getStatus()); $this->em()->merge($modulo); $this->em()->flush(); } return new JsonResponse(true); }
public function relatorio(Context $context) { $id = (int) $context->request()->get('relatorio'); $dataInicial = $context->request()->get('inicial'); $dataFinal = $context->request()->get('final'); $unidade = (int) $context->request()->get('unidade'); $unidade = $unidade > 0 ? $unidade : 0; if (isset($this->relatorios[$id])) { $relatorio = $this->relatorios[$id]; $this->app()->view()->set('dataInicial', DateUtil::format($dataInicial, _('d/m/Y'))); $this->app()->view()->set('dataFinal', DateUtil::format($dataFinal, _('d/m/Y'))); $dataFinal = $dataFinal . ' 23:59:59'; switch ($id) { case 1: $relatorio->setDados($this->servicos_disponiveis_global()); break; case 2: $relatorio->setDados($this->servicos_disponiveis_unidade($unidade)); break; case 3: $relatorio->setDados($this->servicos_codificados($dataInicial, $dataFinal, $unidade)); break; case 4: $relatorio->setDados($this->atendimentos_concluidos($dataInicial, $dataFinal, $unidade)); break; case 5: $relatorio->setDados($this->atendimentos_status($dataInicial, $dataFinal, $unidade)); break; case 6: $relatorio->setDados($this->tempo_medio_atendentes($dataInicial, $dataFinal)); break; case 7: $servico = $context->request()->get('servico'); $relatorio->setDados($this->lotacoes($unidade, $servico)); break; case 8: $relatorio->setDados($this->cargos()); break; } $this->app()->view()->set('relatorio', $relatorio); } $this->app()->view()->set('page', "relatorios/{$relatorio->getArquivo()}.html.twig"); $this->app()->view()->set('isNumeracaoServico', AtendimentoService::isNumeracaoServico()); }
public function do_install(Context $context) { if ($context->request()->isPost()) { $response = new JsonResponse(true, _('Instalação concluída com sucesso')); $conn = null; $session = $context->session(); try { if (App::isInstalled()) { throw new Exception(_('O SGA já está instalado')); } $data = $session->get(InstallData::SESSION_KEY); if (!$data) { throw new Exception(_('Os dados da instalação não foram encontrados. Favor iniciar novamente')); } $db = new DatabaseConfig($data->database); $em = $db->createEntityManager(); $conn = $em->getConnection(); //$conn->beginTransaction(); $version = Configuracao::get($em, 'version'); // atualizando/migrando if ($version) { $scripts = self::migrationScripts($version->getValor(), App::VERSION); foreach ($scripts as $sql) { if (!is_readable($sql)) { $msg = _('Script SQL de instalação não encontrado (%s)'); throw new Exception(sprintf($msg, $sql)); } // executando arquivo sql de migracao $conn->exec(file_get_contents($sql)); } } else { $sqlInitFile = $this->script_create($session->get('adapter')); // verifica se consegue ler o arquivo de criacao do banco if (!is_readable($sqlInitFile)) { $msg = _('Script SQL de instalação não encontrado (%s)'); throw new Exception(sprintf($msg, $sqlInitFile)); } // executando arquivo sql de criacao $conn->exec(file_get_contents($sqlInitFile)); // instalando modulos $service = new \Novosga\Service\ModuloService($em); $modules = $this->modules(); foreach ($modules as $dir) { $service->install($dir, 'sga.' . basename($dir), 1); } // finalizando instalacao com SQL auxiliar $sqlDataFile = $this->script_data(); // verifica se consegue ler o arquivo dos dados iniciais if (!is_readable($sqlDataFile)) { $msg = _('Script SQL de instalação não encontrado (%s)'); throw new Exception(sprintf($msg, $sqlDataFile)); } // executando arquivo sql de dados iniciais $adm = $data->admin; $adm['senha'] = Security::passEncode($adm['senha']); $sql = Strings::format(file_get_contents($sqlDataFile), $adm); $conn->exec($sql); } //$conn->commit(); // atualiza versao no banco Configuracao::set($em, 'version', App::VERSION); // atualizando arquivo de configuracao $db->save(); // se sucesso limpa a sessao $context->session()->clear(); } catch (Exception $e) { if ($conn && $conn->isTransactionActive()) { $conn->rollBack(); } $response->success = false; $response->message = $e->getMessage(); } } else { $response = $this->postErrorResponse(); } return $response; }
/** * Busca os atendimentos a partir do número da senha. * * @param Novosga\Context $context */ public function consulta_senha(Context $context) { $response = new JsonResponse(); $unidade = $context->getUser()->getUnidade(); if ($unidade) { $numero = $context->request()->get('numero'); $atendimentos = $this->atendimentoService->buscaAtendimentos($unidade, $numero); $response->data['total'] = count($atendimentos); foreach ($atendimentos as $atendimento) { $response->data['atendimentos'][] = $atendimento->jsonSerialize(); } $response->success = true; } else { $response->message = _('Nenhuma unidade selecionada'); } return $response; }
/** * Altera a senha do usuario que está sendo editado * @param Novosga\Context $context */ public function alterar_senha(Context $context) { $response = new JsonResponse(); $id = (int) $context->request()->post('id'); $senha = $context->request()->post('senha'); $confirmacao = $context->request()->post('confirmacao'); $usuario = $this->findById($id); if ($usuario) { try { $hash = $this->app()->getAcessoService()->verificaSenha($senha, $confirmacao); $query = $this->em()->createQuery("UPDATE Novosga\\Model\\Usuario u SET u.senha = :senha WHERE u.id = :id"); $query->setParameter('senha', $hash); $query->setParameter('id', $usuario->getId()); $query->execute(); $response->success = true; } catch (Exception $e) { $response->message = $e->getMessage(); } } else { $response->message = _('Usuário inválido'); } return $response; }
public function unidades(Context $context, UsuarioSessao $usuario) { if (!empty($this->unidades)) { return $this->unidades; } $em = $context->database()->createEntityManager(); $query = $em->createQuery("\n SELECT \n e\n FROM \n Novosga\\Model\\Unidade e\n INNER JOIN e.grupo g\n WHERE \n e.status = 1 AND\n g.left >= :esquerda AND\n g.right <= :direita\n ORDER BY\n e.nome\n "); $lotacoes = $usuario->getWrapped()->getLotacoes(); if (!empty($lotacoes)) { foreach ($lotacoes as $lotacao) { $query->setParameter('esquerda', $lotacao->getGrupo()->getLeft()); $query->setParameter('direita', $lotacao->getGrupo()->getRight()); $this->unidades = array_merge($this->unidades, $query->getResult()); } } return $this->unidades; }