$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";
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; }