def create_choice_bet(request): if user_authenticated(request.user): if request.method == 'POST': form = ChoiceBetCreationForm(request.POST) if form.is_valid(): try: bet = form.save(request) except ValidationError: messages.error( request, "Invalid choice descriptions. Use distinct and non empty descriptions." ) # TODO Preserve Choice on form.is_invalid return render(request, 'bets/choicebet_create_form.html', {'form': form}) messages.success(request, "Succesfully created " + str(bet) + ".") return HttpResponseRedirect( reverse('bets:bet', args={bet.prim_key})) else: form = ChoiceBetCreationForm() return render(request, 'bets/choicebet_create_form.html', {'form': form}) else: messages.info( request, "You're not authenticated. Please get in contact with an administrator." ) if not request.user.is_anonymous: logger.warning("Unverified user " + request.user.username + " tried to place create a choice bet.") return redirect('profiles:profile') raise PermissionDenied
def user_can_place_bet(user, bet): """ Check if a user can bet on a bet. :param user: User to check :param bet: Bet to check :return: True, if the user can see the bet and didn't already bet on it; False otherwiese. """ from django.contrib.auth.models import User from .models import Bet from profiles.util import user_authenticated assert isinstance(user, User) assert isinstance(bet, Bet) # Users that are not logged in & verified are not allowed to participate if not user_authenticated(user): return False bet_on = [] for placed_bet in user.profile.placedchoicebet_set.all(): bet_on.append(placed_bet.placed_on) for placed_bet in user.profile.placeddatebet_set.all(): bet_on.append(placed_bet.placed_on) return bet_is_visible_to_user(bet, user) and (bet not in bet_on)
def resolve_bet_view(request, prim_key): if user_authenticated(request.user): bet = get_bet(prim_key) if bet is not None: if isinstance(bet, ChoiceBet): winning_choice = get_choice(request.POST['choice']) if winning_choice is not None: try: resolve_bet(bet, winning_choice) messages.success( request, "Succesfully resolved " + str(bet) + ".") except NoPlacedBets: messages.warning(request, "No bets have been placed yet.") return HttpResponseRedirect( reverse('bets:bet', args={bet.prim_key})) else: messages.error( request, "Choice with description " + winning_choice + " for bet " + bet + " does not exist.") raise Http404 elif isinstance(bet, DateBet): winning_date = datetime.strptime(request.POST['date'], '%Y-%m-%d').date() if winning_date is not None: try: resolve_bet(bet, winning_date) messages.success( request, "Succesfully resolved " + str(bet) + ".") except NoPlacedBets: messages.warning(request, "No bets have been placed yet.") return HttpResponseRedirect( reverse('bets:bet', args={bet.prim_key})) else: messages.error(request, "Date does not exist.") raise Http404 else: logger.warning("Bets with type " + type(bet).__name__ + " are not handled yet.") messages.warning( request, "Bets with type " + type(bet).__name__ + " are not handled yet.") raise Http404 else: messages.error( request, "No bet with primary key " + str(prim_key) + " was found.") raise Http404 else: messages.info( request, "You're not authenticated. Please get in contact with an administrator." ) if not request.user.is_anonymous: logger.warning("Unverified user " + request.user.username + " tried to resolve bet with primary key " + str(prim_key) + ".") return redirect('profiles:profile') raise PermissionDenied
def bet_view(request, prim_key): if user_authenticated(request.user): bet = get_bet(prim_key) if bet is not None: pot_size = bet.account.pot_size() placed_bet = get_placed_bet_for_profile(bet, request.user.profile) if isinstance(bet, ChoiceBet): return render( request, 'bets/bets.html', { 'choice_bet': bet, 'user_can_place_bet': user_can_place_bet( request.user, bet), 'placed_bet': placed_bet, 'pot_size': pot_size, }) elif isinstance(bet, DateBet): if bet.time_period_start: min_date = max(bet.time_period_start, datetime.now().date()) else: min_date = datetime.now().date() return render( request, 'bets/bets.html', { 'date_bet': bet, 'user_can_place_bet': user_can_place_bet( request.user, bet), 'placed_bet': placed_bet, 'pot_size': pot_size, 'min_date': min_date }) else: warning_message = "Bets with type " + type( bet).__name__ + " aren't handled yet." logger.warning(warning_message) messages.warning(request, warning_message) raise Http404 else: messages.info( request, "Bet with primary key " + str(prim_key) + " does not exist.") raise Http404 else: messages.info( request, "You're not authenticated. Please get in contact with an administrator." ) if not request.user.is_anonymous: logger.warning("Unverified user " + request.user.username + " tried to take a look at bet with primary key " + str(prim_key) + ".") return redirect('profiles:profile') raise PermissionDenied
def login_user(request): if user_authenticated(request.user): return redirect('index') else: if request.method == 'POST': form = LoginForm(data=request.POST) if form.is_valid(): login(request, form.get_user()) return redirect('index') else: form = LoginForm() return render(request, 'profiles/login.html', {'form': form})
def payment(request): if user_authenticated(request.user) and request.user.is_superuser: if request.method == 'POST': form = PaymentForm(request.POST) if form.is_valid(): transaction = form.save(authorised=request.user) messages.success(request, transaction.description) return render(request, 'profiles/payment.html', {'form': PaymentForm()}) else: form = PaymentForm() return render(request, 'profiles/payment.html', {'form': form}) else: messages.info(request, "You're not authenticated. Please get in contact with an administrator.") if not request.user.is_anonymous: logger.warning("Unverified user " + request.user.username + " tried to view payment page.") return redirect('profiles:profile') raise PermissionDenied
def signup(request): if user_authenticated(request.user): return redirect('index') else: if request.method == 'POST': form = SignupForm(request.POST) if form.is_valid(): user = form.save() user.profile.accepted_general_terms_and_conditions = True user.profile.accepted_privacy_policy = True user.backend = 'django.contrib.auth.backends.ModelBackend' user.profile.save() login(request, user) messages.info(request, "You're not authenticated. Please get in contact with an administrator.") return redirect('profiles:profile') else: form = SignupForm() return render(request, 'profiles/signup.html', {'form': form})
def index_view(request): if user_authenticated(request.user): index = generate_index(request.user) return render( request, 'bets/index.html', { 'choice_bets': index['choice_bets']['available'], 'placed_choice_bets': index['choice_bets']['placed'], 'date_bets': index['date_bets']['available'], 'placed_date_bets': index['date_bets']['placed'], }) else: messages.info( request, "You're not authenticated. Please get in contact with an administrator." ) if not request.user.is_anonymous: logger.info("Unverified user " + request.user.username + " tried to view index page.") return redirect('profiles:profile') raise PermissionDenied
def create_date_bet(request): if user_authenticated(request.user): if request.method == 'POST': form = DateBetCreationForm(data=request.POST) if form.is_valid(): bet = form.save(request.user.profile) messages.success(request, "Succesfully created " + str(bet) + ".") return HttpResponseRedirect( reverse('bets:bet', args={bet.prim_key})) else: form = DateBetCreationForm() return render(request, 'bets/datebet_create_form.html', {'form': form}) else: messages.info( request, "You're not authenticated. Please get in contact with an administrator." ) if not request.user.is_anonymous: logger.warning("Unverified user " + request.user.username + " tried to place create a date bet.") return redirect('profiles:profile') raise PermissionDenied
def error403(request): return render(request, 'the_platform/403.html', { 'user_authenticated': user_authenticated(request.user) })
def privacy_policy_view(request): if user_authenticated(request.user) or request.user.is_authenticated: return render(request, 'profiles/privacy_policy.html') else: return render(request, 'profiles/privacy_policy_anonymous.html')
def general_terms_and_conditions_view(request): if user_authenticated(request.user) or request.user.is_authenticated: return render(request, 'profiles/general_terms_and_conditions.html') else: return render(request, 'profiles/general_terms_and_conditions_anonymous.html')
def place_bet(request, prim_key): if user_authenticated(request.user): bet = get_bet(prim_key) if bet is None: messages.error( request, "No bet with primary key " + str(prim_key) + " was found.") raise Http404 elif not user_can_place_bet(user=request.user, bet=bet): messages.info(request, "You already placed a bet on " + bet.name + ".") raise Http404 else: placed_by = request.user.profile placed = int(request.POST['placed']) try: transaction = place_bet_transaction(profile=placed_by, bet=bet, amount=placed) except InsufficientFunds: messages.info( request, "Insufficient funds. Your accounts balance is " + str(request.user.profile.account.balance) + " points and you wanted to bet " + str(placed) + " points.") return HttpResponseRedirect( reverse('bets:bet', args={bet.prim_key})) if isinstance(bet, ChoiceBet): choice = bet.choice_set.get(description=request.POST['choice']) choice.picks += 1 choice.save() PlacedChoiceBet.objects.create(placed_by=placed_by, placed_on=bet, placed=placed, chosen=choice, transaction=transaction).save() elif isinstance(bet, DateBet): PlacedDateBet.objects.create(placed_by=placed_by, placed_on=bet, placed=placed, placed_date=request.POST['date'], transaction=transaction).save() else: logger.warning("Bets with type " + type(bet).__name__ + " are not handled yet.") messages.warning( request, "Bets with type " + type(bet).__name__ + " are not handled yet.") raise Http404 messages.success( request, "Succesfully placed " + str(placed) + " points on " + str(bet) + ".") return HttpResponseRedirect( reverse('bets:bet', args={bet.prim_key})) else: messages.info( request, "You're not authenticated. Please get in contact with an administrator." ) if not request.user.is_anonymous: logger.warning("Unverified user " + request.user.username + " tried to place on bet with primary key " + str(prim_key) + ".") return redirect('profiles:profile') raise PermissionDenied