Example #1
0
 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();
     }
 }
Example #2
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);
 }
 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);
     }
 }
Example #4
0
 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;
 }
Example #5
0
 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();
         }
     }
 }
Example #6
0
 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();
     }
 }
Example #7
0
 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);
 }
Example #8
0
 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;
 }
Example #9
0
 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;
 }
Example #10
0
 public function desativar_sessao(Context $context)
 {
     $response = new JsonResponse(true);
     $usuario = $context->getUser();
     $usuario->setAtivo(false);
     $context->setUser($usuario);
     return $response;
 }
Example #11
0
 /**
  * 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;
 }
Example #12
0
 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());
 }
Example #14
0
 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;
 }
Example #16
0
 /**
  * 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;
 }
Example #17
0
 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;
 }