public function alterarAction()
 {
     try {
         $conexao = $this->conexao->getConexao();
         //$redirecionar = montaRedirect($_SERVER["QUERY_STRING"], array("id", "acao"));
         $breadcrumbs = array();
         $dadosUsuario = $this->dao->findByPk($conexao, "usuarios", getVariavel("id"));
         // usuário só poderá alterar os dados dele mesmo
         if ($dadosUsuario["id"] != $_SESSION[PREFIX . "loginId"]) {
             throw new Exception("Você não tem permissão para atualizar dados de outros usuários");
         }
         $breadcrumbs[] = array($dadosUsuario["nome"] => "", "Alterar dados" => "");
         // armazena a senha atual em uma variável
         $senhaAtual = $dadosUsuario["senha"];
         $novaSenha = $dadosUsuario["senha"];
         // se submeteu dados
         if (count($_POST) > 0) {
             $redirecionar = NULL;
             $dados = $_POST;
             // todos os dados são obrigatórios
             $obrigatorios = array("nome" => array("tipo" => "input", "nome" => "Nome"), "login" => array("tipo" => "input", "nome" => "Login"), "email" => array("tipo" => "input", "nome" => "E-mail"));
             // se o usuário informar a nova senha, deverá informar a senha atual
             if (!empty($dados["novaSenha"])) {
                 $obrigatorios["senhaAtual"] = array("tipo" => "input", "nome" => "Senha atual");
             }
             // valida
             $mensagem = validaPost($obrigatorios, $dados);
             if (!empty($mensagem)) {
                 throw new Exception($mensagem);
             }
             // recebe e codifica a senha atual
             $dados["senhaAtual"] = !empty($dados["senhaAtual"]) ? md5(trim($dados["senhaAtual"])) : $senhaAtual;
             if ($dados["senhaAtual"] != $senhaAtual) {
                 throw new Exception("Senha atual não confere");
             }
             $dados["senha"] = $dados["novaSenha"] = !empty($dados["novaSenha"]) ? md5(trim($dados["novaSenha"])) : $novaSenha;
             $dados = retiraDoArray(array("novaSenha", "senhaAtual"), $dados);
             $dados = $this->dao->salva($conexao, "usuarios", $dados);
             // adiciona nos logs
             //$this->logDAO->adicionar ($conexao, "alterou", "dados", $_SESSION[PREFIX . "loginNome"], $dados["nome"], "Usuário atualizou seus dados.");
             $conexao->commit();
             $conexao->disconnect();
             setMensagem("info", "Dados atualizados");
             Application::redirect('?modulo=index&acao=alterar&id=' . $dados["id"]);
             exit;
         }
     } catch (Exception $e) {
         $conexao->rollback();
         setMensagem("error", $e->getMessage());
         if ($redirecionar != NULL) {
             Application::redirect($redirecionar);
             exit;
         }
     }
     $conexao->disconnect();
     $view = new View($_GET["modulo"], "extendido", "alterar.phtml");
     $view->setParams(array("title" => getTitulo($breadcrumbs), "breadcrumbs" => $breadcrumbs, "usuario" => $dadosUsuario));
     $view->showContents();
 }
 public function atendimentoAction()
 {
     try {
         $conexao = $this->conexao->getConexao();
         $redirecionar = "?modulo=" . $_GET["modulo"];
         $breadcrumbs = array();
         $breadcrumbs[] = array("Pacientes" => "?modulo=" . $_GET["modulo"]);
         // recupera o paciente e o atendimento.
         $paciente = $this->dao->findByPk($conexao, "pacientes", getVariavel("paciente"));
         $atendimento = $this->dao->find($conexao, "atendimentos", array("where" => array("paciente" => (int) $paciente["id"])));
         // se não existir nenhum atendimento, cria um.
         if (count($atendimento) == 0) {
             $this->dao->salva($conexao, "atendimentos", array("id" => 0, "hipertenso" => -1, "diabetico" => -1, "fuma" => -1, "bebe" => -1, "esportes" => -1, "suplementos" => -1, "medicamentos" => -1, "doencasFamilia" => -1, "gravidez" => -1, "paciente" => $paciente["id"]));
             $conexao->commit();
             Application::redirect('?modulo=pacientes&acao=atendimento&paciente=' . $paciente['id']);
             exit;
         }
         $doresAtuais = $atendimento["dores"] = $this->dao->findAll($conexao, "atendimentos_dores", array("where" => array("atendimento" => (int) $atendimento["id"])));
         $historico = $this->dao->findAll($conexao, "atendimentos_historico", array("where" => array("atendimento" => (int) $atendimento["id"]), "order" => array("data" => "desc")));
         if (isset($_GET["id"])) {
             $breadcrumbs[] = array("Atendimento" => "");
             $acao = "editar";
         } else {
             $breadcrumbs[] = array("Cadastrar" => "");
             $acao = "novo";
         }
         if (count($_POST) > 0) {
             $redirecionar = NULL;
             $atendimentoIn = $atendimento = $_POST['Atendimento'];
             $atendimento["intestinos"] = $atendimentoIn["intestinos"] = isset($atendimentoIn["intestinos"]) ? $atendimentoIn["intestinos"] : 0;
             $atendimento["sono"] = $atendimentoIn["sono"] = isset($atendimentoIn["sono"]) ? $atendimentoIn["sono"] : 0;
             $atendimento["agua"] = $atendimentoIn["agua"] = isset($atendimentoIn["agua"]) ? $atendimentoIn["agua"] : 0;
             $atendimento["alimentacao"] = $atendimentoIn["alimentacao"] = isset($atendimentoIn["alimentacao"]) ? $atendimentoIn["alimentacao"] : 0;
             $atendimento["dores"] = $dores = $_POST['Dores'];
             $locaisAtuais = $locais = array();
             foreach ($doresAtuais as $dor) {
                 $locaisAtuais[$dor["id"]] = $dor["local"];
             }
             foreach ($dores as $dor) {
                 if (isset($dor["local"])) {
                     $locais[$dor["id"]] = $dor["local"];
                 }
             }
             $mensagens = array();
             $mensagem = validaPost($obrigatorios, $atendimentoIn);
             if (!empty($mensagem)) {
                 $mensagens[] = $mensagem;
             }
             $mensagem = validaPost($obrigatorios, $_POST);
             if (!empty($mensagem)) {
                 $mensagens[] = $mensagem;
             }
             if (count($mensagens) > 0) {
                 throw new Exception(implode("<br />", $mensagens));
             }
             $atendimentoIn = $this->dao->salva($conexao, "atendimentos", $atendimentoIn);
             $time = time();
             $historico = $this->dao->salva($conexao, "atendimentos_historico", array("id" => 0, "atendimento" => $atendimentoIn["id"], "timestamp" => $time, "data" => date('d/m/Y H:i:s', $time), "observacoes" => 'Atendimento realizado'));
             $result = array_diff($locaisAtuais, $locais);
             foreach (array_diff($locaisAtuais, $locais) as $id => $value) {
                 $this->dao->excluiByPk($conexao, "atendimentos_dores", $id);
             }
             foreach ($dores as $dor) {
                 $d = array();
                 // só vai cadastrar se for definida a localização da dor
                 // mesmo que não defina a característica nem o grau
                 if (!empty($dor["local"])) {
                     $d["id"] = $dor["id"];
                     $d["atendimento"] = $atendimentoIn["id"];
                     $d["local"] = $dor["local"];
                     $d["caracteristica"] = $dor["caracteristica"];
                     $d["grau"] = $dor["grau"];
                     $d["intensidade"] = isset($dor["intensidade"]) ? implode(",", $dor["intensidade"]) : 0;
                     $this->dao->salva($conexao, "atendimentos_dores", $d);
                 }
             }
             $conexao->commit();
             setMensagem("info", "Atendimento realizado");
             Application::redirect("?modulo=" . $_GET["modulo"] . "&acao=atendimento&paciente=" . $paciente["id"]);
             exit;
         }
     } catch (Exception $e) {
         $conexao->rollback();
         setMensagem("error", $e->getMessage());
         if ($redirecionar != NULL) {
             Application::redirect($redirecionar);
             exit;
         }
     }
     $conexao->disconnect();
     $view = new View($_GET["modulo"], "painel", "atendimento.phtml");
     $view->setParams(array("title" => getTitulo($breadcrumbs), "breadcrumbs" => $breadcrumbs, "paciente" => $paciente, "atendimento" => $atendimento, "objetos" => $historico));
     $view->showContents();
 }
 public function cadastrarAction()
 {
     try {
         $conexao = $this->conexao->getConexao();
         $redirecionar = "?modulo=agenda";
         $tipos = Agenda::getTipos();
         $breadcrumbs = array();
         $breadcrumbs[] = array("Agenda" => "?modulo=" . $_GET["modulo"], "Novo compromisso" => "");
         $dados = inicializaDados(new Agenda());
         $dados["marcador"] = 0;
         $dados["data"] = isset($_GET['data']) ? $_GET['data'] : date('d/m/Y');
         $dados["hora"] = isset($_GET['hora']) ? $_GET['hora'] : '';
         $dados["tipo"] = isset($_GET['tipo']) ? $_GET['tipo'] : '0';
         $fisioterapeutas = $this->dao->findAll($conexao, "vw_usuarios", array("where" => array("permissao" => Permissao::PERMISSAO_FISIOTERAPEUTA), "order" => array("nome" => "asc")));
         // recupera os pacientes para o autocomplete
         $pacientes = $this->dao->findAll($conexao, "pacientes");
         $pacientesArr = array();
         foreach ($pacientes as $paciente) {
             $pacientesArr[] = '"' . $paciente["nome"] . '"';
         }
         if (count($_POST) > 0) {
             $redirecionar = NULL;
             $dados = $dadosIn = $_POST;
             $idsFisioterapeutas = array();
             $dados["fisioterapeutas"] = $dadosIn["fisioterapeutas"] = isset($dadosIn["fisioterapeutas"]) ? $dadosIn["fisioterapeutas"] : array();
             $obrigatorios = array("tipo" => array("tipo" => "select", "nome" => "Tipo"), "nomePaciente" => array("tipo" => "input", "nome" => "Paciente"), "data" => array("tipo" => "input", "nome" => "Data"), "hora" => array("tipo" => "input", "nome" => "Hora"), "fisioterapeutas" => array("tipo" => "array", "nome" => "Fisioterapeutas"));
             $mensagens = array();
             $mensagem = validaPost($obrigatorios, $dadosIn);
             if (!empty($mensagem)) {
                 $mensagens[] = $mensagem;
             }
             if (!empty($dadosIn["hora"]) && !validaHora($dadosIn["hora"])) {
                 $mensagens[] = "Informe uma hora válida.";
             }
             foreach ($dadosIn["fisioterapeutas"] as $f) {
                 list($nome, $id) = explode("-", $f);
                 $idsFisioterapeutas[] = $id;
                 $quantidadeCompromissos = $this->dao->count($conexao, "agenda", array("leftJoin" => array("agenda_fisioterapeutas" => "agenda_fisioterapeutas.compromisso = agenda.id"), "where" => array("agenda.data" => $dadosIn["data"], "agenda.hora" => $dadosIn["hora"], "agenda_fisioterapeutas.fisioterapeuta" => $id), "whereNot" => array("agenda.id" => $dadosIn["id"])));
                 if ($quantidadeCompromissos > 0) {
                     $mensagens[] = "Já existe um compromisso para " . $nome . " nesta mesma data e horário";
                 }
             }
             if (count($mensagens) > 0) {
                 throw new Exception(implode('<br />', $mensagens));
             }
             if ($dadosIn["id"] == 0) {
                 $dadosIn["timestampC"] = time();
                 $dadosIn["dataC"] = date('d/m/Y H:i:s', $dadosIn["timestampC"]);
             }
             $dadosIn = retiraDoArray(array("fisioterapeutas"), $dadosIn);
             list($dadosIn["dia"], $dadosIn["mes"], $dadosIn["ano"]) = explode("/", $dadosIn["data"]);
             $dadosIn = $this->dao->salva($conexao, "agenda", $dadosIn);
             foreach ($idsFisioterapeutas as $id) {
                 $this->dao->salva($conexao, "agenda_fisioterapeutas", array("id" => 0, "compromisso" => $dadosIn["id"], "fisioterapeuta" => $id));
             }
             $conexao->commit();
             setMensagem("info", "Compromisso do dia " . desconverteData($dadosIn["data"]) . " às " . $dadosIn["hora"] . " cadastrado [" . $paciente["nome"] . "]");
             Application::redirect("?modulo=agenda&acao=cadastrar");
             exit;
         }
     } catch (Exception $e) {
         $conexao->rollback();
         setMensagem("error", $e->getMessage());
         if ($redirecionar != NULL) {
             Application::redirect($redirecionar);
             exit;
         }
     }
     $conexao->disconnect();
     $view = new View($_GET["modulo"], "painel", "novo.phtml");
     $view->setParams(array("title" => getTitulo($breadcrumbs), "breadcrumbs" => $breadcrumbs, "compromisso" => $dados, "pacientes" => implode(",", $pacientesArr), "fisioterapeutas" => $fisioterapeutas));
     $view->showContents();
 }
 public function alterarAction()
 {
     try {
         $conexao = $this->conexao->getConexao();
         $redirecionar = NULL;
         $breadcrumbs = array();
         $id = isset($_GET["id"]) ? (int) $_GET["id"] : 0;
         $dadosUsuario = $this->dao->getById($conexao, "usuarios", $id);
         if (count($dadosUsuario) == 0) {
             throw new Exception("Usuário não encontrado");
         }
         // usuário só poderá alterar os dados dele mesmo
         if ($id != $_SESSION[PREFIX . "loginId"]) {
             $dadosUsuario = array("nome" => "", "login" => "", "senhaAtual" => "", "novaSenha" => "", "email" => "");
             throw new Exception("Você não tem permissão para visualizar os dados deste usuário");
         }
         $breadcrumbs[] = array($dadosUsuario["nome"] => "?modulo=" . $_GET["modulo"] . "&acao=alterar&id=" . $dadosUsuario["id"], "Alterar dados" => "");
         // armazena a senha atual em uma variável
         $senhaAtual = $dadosUsuario["senha"];
         $novaSenha = $dadosUsuario["senha"];
         // se submeteu dados
         if (count($_POST) > 0) {
             // todos os dados são obrigatórios
             $obrigatorios = array("nome" => array("tipo" => "input", "nome" => "Nome"), "login" => array("tipo" => "input", "nome" => "Login"), "email" => array("tipo" => "input", "nome" => "E-mail"));
             // recebe os dados
             $dados = $_POST;
             // se o usuário informar a nova senha, deverá informar a senha atual
             if ($dados["novaSenha"] != "") {
                 $obrigatorios["senhaAtual"] = array("tipo" => "input", "nome" => "Senha atual");
             }
             // valida
             $mensagem = validaPost($obrigatorios, $dados);
             if ($mensagem != "") {
                 throw new Exception($mensagem);
             }
             // recebe e codifica a senha atual
             $dados["senhaAtual"] = $dados["senhaAtual"] != "" ? md5(trim($dados["senhaAtual"])) : $senhaAtual;
             if ($dados["senhaAtual"] != $senhaAtual) {
                 throw new Exception("Senha atual não confere");
             }
             $dados["novaSenha"] = $dados["novaSenha"] != "" ? md5(trim($dados["novaSenha"])) : $novaSenha;
             $dadosUsuario["nome"] = $dados["nome"];
             $dadosUsuario["login"] = $dados["login"];
             $dadosUsuario["senha"] = $dados["novaSenha"];
             $dadosUsuario["email"] = $dados["email"];
             // atualiza o usuário
             $dadosUsuario = trataDados($dadosUsuario);
             $this->dao->atualizar($conexao, "usuarios", $dadosUsuario);
             // adiciona nos logs
             //$this->logDAO->adicionar ($conexao, "alterou", "dados", $_SESSION[PREFIX . "loginNome"], $dadosUsuario["nome"], "Usuário atualizou seus dados.");
             $conexao->commit();
             $conexao->disconnect();
             setMensagem("info", "Dados alterados");
         }
     } catch (Exception $e) {
         $conexao->rollback();
         setMensagem("error", $e->getMessage());
         if ($redirecionar != NULL) {
             Application::redirect($redirecionar);
             exit;
         }
     }
     $conexao->disconnect();
     $view = new View($_GET['modulo'], "painel", "alterar.phtml");
     $view->setParams(array("title" => getTitulo($breadcrumbs), "breadcrumbs" => $breadcrumbs, "usuario" => $dadosUsuario));
     $view->showContents();
 }