$aluno->setEstado($estado);
 $aluno->setIdIndicador($idIndicador);
 $aluno->setModalidadeCurso($modalidade);
 $aluno->setAtivo(true);
 $aluno->setEscolaridade($escolaridade);
 if ($escolaridade === "superior incompleto" || $escolaridade === "superior completo" || $escolaridade === "mestrado" || $escolaridade === "doutorado") {
     $aluno->setCurso(isset($curso) ? $curso : null);
 } else {
     $aluno->setCurso(null);
 }
 $sucesso = $aluno->cadastrar($host, $db, $usuario, $senhaBD, $senha);
 if (!$sucesso) {
     $mensagem = "Já existe um usuário com esse nome \n                                     de usuário no sistema";
 } else {
     // agora fazemos a matrícula do aluno
     $idAluno = $aluno->getNumeroInscricao();
     $dadosMatricula = array($idAluno, $idCidadeMat);
     $queryMatricula = "INSERT INTO Matricula (chaveAluno, etapa, chaveCidade) \n                                            VALUES (?,1,?)";
     $query = $conexao->prepare($queryMatricula);
     $sucessoMatricula = $query->execute($dadosMatricula);
     $idUltimaMatricula = $conexao->lastInsertId();
     // agora tentamos criar os pagamentos
     // pega os valores de inscrição e parcelas da cidade
     $textoQuery = "SELECT C.nome, C.idCidade,C.ano,";
     //pega as parcelas do instituto
     if ($modalidade == "regular") {
         $textoQuery .= "C.inscricao_instituto_regular\n                                            as inscricao,\n                                            C.parcela_instituto_regular\n                                            as parcela";
     }
     if ($modalidade == "intensivo") {
         $textoQuery .= "C.inscricao_instituto_intensivo\n                                            as inscricao,\n                                            C.parcela_instituto_intensivo\n                                            as parcela";
     }
                     <p style="display:inline" class="col-sm-3">
                         <b>Aluno:</b>
                         <?php 
 echo htmlspecialchars($aluno->getNome());
 ?>
                     </p>
                     <p style="display:inline" class="col-sm-3">
                         <b>Nome de usuário:</b>
                         <?php 
 echo htmlspecialchars($aluno->getLogin());
 ?>
                     </p>
                     <p style="display:inline" class="col-sm-3">
                         <b>Número de inscrição:</b>
                         <?php 
 echo htmlspecialchars($aluno->getNumeroInscricao());
 ?>
                     </p>
                     <?php 
 $status = "";
 if ($aluno->getStatus() === "inscrito") {
     $status = "Inscrito";
 } else {
     if ($aluno->getStatus() === "preinscrito") {
         $status = "Pré-inscrito";
     } else {
         if ($aluno->getStatus() === "desistente") {
             $status = "Desistente";
         } else {
             if ($aluno->getStatus() === "formado") {
                 $status = "Formado";
     echo $e->getMessage();
 }
 $aluno = NULL;
 if (unserialize($_SESSION['usuario']) instanceof Aluno) {
     $aluno = unserialize($_SESSION['usuario']);
 } else {
     $aluno = new Aluno("");
     $aluno->setNumeroInscricao($_POST['idAluno']);
     $aluno->recebeAlunoId($host, "homeopatias", $usuario, $senhaBD);
 }
 // descobrimos o quanto esse aluno vai pagar, e se os dados recebidos são válidos
 $valorRecebido = isset($_POST['pgto-valor']) ? $_POST['pgto-valor'] : -1;
 if (isset($_POST['pagarInsc'])) {
     $textoQuery = "SELECT ((((100 - P.desconto)/100) * P.valorTotal) - P.valorPago) as\n                        valorPagar\n                        FROM PgtoMensalidade P\n                        INNER JOIN Matricula M ON M.idMatricula = P.chaveMatricula\n                        WHERE M.chaveAluno = ? AND P.fechado = 0 AND P.ano <= YEAR(NOW())\n                        AND P.numParcela = 0";
     $query = $conexao->prepare($textoQuery);
     $query->bindParam(1, $aluno->getNumeroInscricao());
     $query->setFetchMode(PDO::FETCH_ASSOC);
     $query->execute();
     if ($linha = $query->fetch()) {
         $valorRecebido = $linha['valorPagar'];
     } else {
         $valorRecebido = -1;
     }
 }
 $valorValido = preg_match("/^[0-9]*\\.?[0-9]+\$/", $valorRecebido) && $valorRecebido != -1;
 if ($valorValido) {
     // checamos se o valor a pagar é válido
     $textoQuery = "SELECT sum( (((100 - P.desconto)/100) * P.valorTotal) - P.valorPago)\n                        as valorFaltante FROM PgtoMensalidade P\n                        INNER JOIN Matricula M ON M.idMatricula = P.chaveMatricula\n                        WHERE M.chaveAluno = ? AND P.fechado = 0 AND P.ano <= YEAR(NOW())";
     $query = $conexao->prepare($textoQuery);
     $query->bindParam(1, $aluno->getNumeroInscricao());
     $query->setFetchMode(PDO::FETCH_ASSOC);
     echo "\"fotos/Padrao.png\"";
 }
 ?>
                        width="150px" height="200px">
                 </div>
                 <div class="row">
                     <p style="display:inline" class="col-sm-3">
                         <b>Aluno:</b>
                         <?php 
 echo htmlspecialchars($aluno->getNome());
 ?>
                     </p>
                     <p style="display:inline" class="col-sm-3">
                         <b>Número de inscrição:</b>
                         <?php 
 echo htmlspecialchars($aluno->getNumeroInscricao());
 ?>
                     </p>
                     <?php 
 $status = "";
 if ($aluno->getStatus() === "inscrito") {
     $status = "Inscrito";
 } else {
     if ($aluno->getStatus() === "preinscrito") {
         $status = "Pré-inscrito";
     } else {
         if ($aluno->getStatus() === "desistente") {
             $status = "Desistente";
         } else {
             if ($aluno->getStatus() === "formado") {
                 $status = "Formado";
Example #5
0
 public function atualizar($host, $bd, $usuario, $senha)
 {
     // Cria conexão com o banco
     $conexao = null;
     try {
         $conexao = new PDO("mysql:host={$host};dbname={$bd};charset=utf8", $usuario, $senha);
     } catch (PDOException $e) {
         echo $e->getMessage();
     }
     //Pega o status e o indicador atual do aluno no banco-------------------------
     $comando = "SELECT status, idIndicador FROM Aluno WHERE numeroInscricao = ?";
     $query = $conexao->prepare($comando);
     $query->bindParam(1, $this->numeroInscricao, PDO::PARAM_INT);
     $query->execute();
     $linha = $query->fetch();
     $statusAnterior = $linha["status"];
     $indicadorAnterior = $linha["idIndicador"];
     //----------------------------------------------------------------------------
     $comando = "UPDATE Usuario SET nome = :nome, cpf = :cpf, email = :email, login = :login\n                    WHERE id = :id";
     $query = $conexao->prepare($comando);
     // Usamos as TRANSACTIONs do MySql para garantir que caso haja
     // algum erro, as tabelas continuem consistentes
     $conexao->beginTransaction();
     $query->bindParam(":nome", $this->nome, PDO::PARAM_STR);
     $query->bindParam(":cpf", $this->cpf, PDO::PARAM_STR);
     $query->bindParam(":email", $this->email, PDO::PARAM_STR);
     $query->bindParam(":login", $this->login, PDO::PARAM_STR);
     $query->bindParam(":id", $this->id, PDO::PARAM_INT);
     $sucessoUsuario = $query->execute();
     $comando = "UPDATE Aluno SET status = :status, idIndicador = :indicador, \n                    telefone = :telefone, telefone2 = :telefone2, telefone3 = :telefone3,\n                    escolaridade = :escolaridade, \n                    curso = :curso ,numeroInscricao = :numInsc,\n                    cep = :cep, rua = :rua, numero = :numero, complemento = :complemento ,\n                    cidade = :cidade, estado = :estado, bairro = :bairro, pais = :pais ,\n                    tipo_curso = :tipo_curso, modalidade_curso= :modalidade_curso, \n                    tipo_cadastro = :tipo_cadastro, ativo = :ativo, recebeEmail = :recebeemail,\n                    observacao = :observacao\n\n                    WHERE numeroInscricao = :numInsc";
     $query = $conexao->prepare($comando);
     $query->bindParam(":status", $this->status, PDO::PARAM_STR);
     if ($this->idIndicador === "") {
         $query->bindValue(":indicador", null, PDO::PARAM_INT);
     } else {
         $query->bindParam(":indicador", $this->idIndicador, PDO::PARAM_INT);
     }
     $query->bindParam(":telefone", $this->telefone, PDO::PARAM_STR);
     $query->bindParam(":telefone2", $this->telefone2, PDO::PARAM_STR);
     $query->bindParam(":telefone3", $this->telefone3, PDO::PARAM_STR);
     $query->bindParam(":numInsc", $this->numeroInscricao, PDO::PARAM_INT);
     $query->bindParam(":escolaridade", $this->escolaridade, PDO::PARAM_STR);
     $query->bindParam(":curso", $this->curso, PDO::PARAM_STR);
     $query->bindParam(":cep", $this->cep, PDO::PARAM_INT);
     $query->bindParam(":rua", $this->rua, PDO::PARAM_STR);
     $query->bindParam(":numero", $this->numero, PDO::PARAM_INT);
     $query->bindParam(":complemento", $this->complemento, PDO::PARAM_STR);
     $query->bindParam(":cidade", $this->cidade, PDO::PARAM_STR);
     $query->bindParam(":estado", $this->estado, PDO::PARAM_STR);
     $query->bindParam(":bairro", $this->bairro, PDO::PARAM_STR);
     $query->bindParam(":pais", $this->pais, PDO::PARAM_STR);
     $query->bindParam(":tipo_curso", $this->tipoCurso, PDO::PARAM_STR);
     $query->bindParam(":modalidade_curso", $this->modalidadeCurso, PDO::PARAM_STR);
     $query->bindParam(":tipo_cadastro", $this->tipoCadastro, PDO::PARAM_STR);
     $query->bindParam(":ativo", $this->ativo, PDO::PARAM_STR);
     $query->bindParam(":recebeemail", $this->recebeEmail);
     $query->bindParam(":observacao", $this->observacao);
     $sucessoAluno = $query->execute();
     //Tratamento de desconto de alunos indicadores
     //Primeiro checamos se o aluno pagou a inscição deste ano (se gerou desconto)
     $comando = "SELECT EXISTS(\n                        SELECT Pg.numParcela\n                        FROM PgtoMensalidade Pg, Aluno A, Usuario U,Matricula M, Cidade C\n                        WHERE A.idUsuario     = U.id \n                        AND M.chaveAluno      = A.numeroInscricao \n                        AND M.chaveCidade     = C.idCidade\n                        AND C.ano             = YEAR(CURDATE()) \n                        AND Pg.chaveMatricula = M.idMatricula \n                        AND Pg.numParcela     = 0\n                        AND Pg.numParcela     = 0 \n                        AND Pg.fechado        = 1 \n                        AND A.numeroInscricao = ?\n                        ) as existe";
     $query = $conexao->prepare($comando);
     $query->bindParam(1, $this->numeroInscricao, PDO::PARAM_INT);
     $query->setFetchMode(PDO::FETCH_ASSOC);
     $query->execute();
     $atualizaDescontosAntigo = 0;
     $linha = $query->fetch();
     $emDia = $linha["existe"];
     if ($emDia) {
         //Estas variáveis armazenam se será necessário atualizar ou não os descontos do
         //anterior e/ou do novo
         //Se o aluno ja pagou a inscrição deste ano, checa se será necessário remover o
         //desconto do indicador, se possuir indicador
         //checa se ele possui indicador e se não possuir, se agora possui
         if ($indicadorAnterior != null || $this->idIndicador != null) {
             //O usuário mudou de id de indicador, remove o desconto do anterior e soma
             //ao novo
             if ($indicadorAnterior != $this->idIndicador) {
                 //Só será necessário mudar o desconto de um aluno válido
                 if ($indicadorAnterior != null) {
                     $atualizaDescontosAntigo = true;
                 }
             }
         }
     }
     $sucessoAluno = $sucessoAluno && $this->atualizaDesconto($host, $bd, $usuario, $senha);
     //--------------------------------------------------------------------------
     if ($sucessoUsuario && $sucessoAluno) {
         // deu tudo certo, atualizamos o aluno
         $conexao->commit();
         if ($atualizaDescontosAntigo) {
             require_once dirname(__FILE__) . "/../entidades/Aluno.php";
             $indicadorAntigo = new Aluno();
             $indicadorAntigo->setNumeroInscricao($indicadorAnterior);
             $indicadorAntigo->recebeAlunoId($host, $bd, $usuario, $senha);
             $indicadorAntigo->atualizaDesconto($host, $bd, $usuario, $senha);
         }
         if ($this->idIndicador != null) {
             require_once dirname(__FILE__) . "/../entidades/Aluno.php";
             $indicadorNovo = new Aluno();
             $indicadorNovo->setNumeroInscricao($this->idIndicador);
             $indicadorNovo->recebeAlunoId($host, $bd, $usuario, $senha);
             $sucesso = $indicadorNovo->atualizaDesconto($host, $bd, $usuario, $senha);
             $sucessoNotificacao = false;
             //faremos 10 tentativas para notificar o aluno , se todas falharem
             //mostramos que não foi possível notificar o aluno
             for ($i = 0; $i < 10 && !$sucessoNotificacao; $i++) {
                 //gera notificação para o indicador que ele recebeu 10% de desconto
                 //nas próximas parcelas
                 $conexao->beginTransaction();
                 $titulo = "Desconto por indicação";
                 $texto = "Por uma correção do sistema, um aluno corrigiu corrigiu seu indicador para";
                 $texto .= " aluno correto, seu desconto de 10% foi removido das próximas parcelas";
                 $textoQuery = "INSERT INTO Notificacao(titulo,texto,chaveAluno)\n                                    VALUES (:titulo, :texto,:idIndicador)";
                 $query = $conexao->prepare($textoQuery);
                 $query->bindParam(":titulo", $titulo, PDO::PARAM_STR);
                 $query->bindParam(":texto", $texto, PDO::PARAM_STR);
                 $query->bindParam(":idIndicador", $indicadorNovo->getNumeroInscricao(), PDO::PARAM_INT);
                 $sucessoNotificacao = $query->execute();
                 if (!$sucessoNotificacao) {
                     $conexao->rollback();
                 }
             }
             //se conseguiu notificar, confirma transação
             if ($sucessoNotificacao) {
                 $conexao->commit();
             } else {
                 //se não, mostra mensagem na tela
                 $mensagem = "Não foi possível notificar o aluno \n                                de seu desconto.";
             }
             //Se o aluno estiver em dia e mudou de status,
             // notifica o indicador que ele perdeu ou ganhou
             // seu desconto novamente
             if ($emDia && $this->status != $statusAnterior) {
                 //Caso o aluno tenha desistido, notifica o indicador que ele perdeu o desconto
                 if ($this->status !== "inscrito" && $statusAnterior === "inscrito") {
                     $sucessoNotificacao = false;
                     //faremos 10 tentativas para notificar o aluno , se todas falharem
                     //mostramos que não foi possível notificar o aluno
                     for ($i = 0; $i < 10 && !$sucessoNotificacao; $i++) {
                         //gera notificação para o indicador que ele recebeu 10% de desconto
                         //nas próximas parcelas
                         $conexao->beginTransaction();
                         $titulo = "Desconto por indicação";
                         $texto = "Um de seus indicados encerrou o curso/a etapa, seu desconto de 10%";
                         $texto .= " por sua indicação foi removido das próximas parcelas";
                         $textoQuery = "INSERT INTO Notificacao(titulo,texto,chaveAluno)\n                                            VALUES (:titulo, :texto,:idIndicador)";
                         $query = $conexao->prepare($textoQuery);
                         $query->bindParam(":titulo", $titulo, PDO::PARAM_STR);
                         $query->bindParam(":texto", $texto, PDO::PARAM_STR);
                         $query->bindParam(":idIndicador", $indicadorNovo->getNumeroInscricao(), PDO::PARAM_INT);
                         $sucessoNotificacao = $query->execute();
                         if (!$sucessoNotificacao) {
                             $conexao->rollback();
                         }
                     }
                     //se conseguiu notificar, confirma transação
                     if ($sucessoNotificacao) {
                         $conexao->commit();
                     } else {
                         //se não, mostra mensagem na tela
                         $mensagem = "Não foi possível notificar o aluno \n                                        de seu desconto.";
                     }
                 } else {
                     if ($this->status === "inscrito" && $statusAnterior != "inscrito") {
                         $sucessoNotificacao = false;
                         //faremos 10 tentativas para notificar o aluno , se todas falharem
                         //mostramos que não foi possível notificar o aluno
                         for ($i = 0; $i < 10 && !$sucessoNotificacao; $i++) {
                             //gera notificação para o indicador que ele recebeu 10% de desconto
                             //nas próximas parcelas
                             $conexao->beginTransaction();
                             $titulo = "Desconto por indicação";
                             $texto = "Um de seus indicados retomou o curso, seu desconto de 10%";
                             $texto .= " por sua indicação foi adicionado novamente às próximas";
                             $texto .= " parcelas";
                             $textoQuery = "INSERT INTO Notificacao(titulo,texto,chaveAluno)\n                                            VALUES (:titulo, :texto,:idIndicador)";
                             $query = $conexao->prepare($textoQuery);
                             $query->bindParam(":titulo", $titulo, PDO::PARAM_STR);
                             $query->bindParam(":texto", $texto, PDO::PARAM_STR);
                             $query->bindParam(":idIndicador", $indicadorNovo->getNumeroInscricao(), PDO::PARAM_INT);
                             $sucessoNotificacao = $query->execute();
                             if (!$sucessoNotificacao) {
                                 $conexao->rollback();
                             }
                         }
                         //se conseguiu notificar, confirma transação
                         if ($sucessoNotificacao) {
                             $conexao->commit();
                         } else {
                             //se não, mostra mensagem na tela
                             $mensagem = "Não foi possível notificar o aluno \n                                        de seu desconto.";
                         }
                     }
                 }
             }
         }
     } else {
         // algo deu errado, desfazemos as mudanças
         $conexao->rollBack();
     }
     // Encerramos a conexão com o BD
     $conexao = null;
     return $sucessoUsuario && $sucessoAluno;
 }