$texto .= "\nMétodo: " . $metodo; $queryNotificacao = $conexao->prepare("INSERT INTO Notificacao \n (titulo, texto, chaveAluno, lida) VALUES (?, ?, ?, 0)"); $dados = array("Pagamento recebido", $texto, $idAluno); $queryNotificacao->execute($dados); if ($sucesso) { $conexao->commit(); //Se a inscrição foi paga, atualiza desconto if ($pagamentos[date("Y")][0]['fechado']) { require_once dirname(__FILE__) . "/entidades/Aluno.php"; $aluno = new Aluno(""); $aluno->setNumeroInscricao($idAluno); $aluno->recebeAlunoId($host, $db, $usuario, $senhaBD); $indicador = new Aluno(""); $indicador->setNumeroInscricao($aluno->getIdIndicador()); $indicador->recebeAlunoId($host, $db, $usuario, $senhaBD); $indicador->atualizaDesconto($host, $db, $usuario, $senhaBD); $sucessoNotificacao = false; if ($aluno->getIdIndicador()) { //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 = "Você recebeu 10% de desconto por ter indicado "; $texto .= "o(a) aluno(a) : " . $aluno->getNome(); $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);
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; }