Exemplo n.º 1
0
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
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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})
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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})
Exemplo n.º 8
0
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
Exemplo n.º 9
0
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
Exemplo n.º 10
0
def error403(request):
    return render(request, 'the_platform/403.html', {
        'user_authenticated': user_authenticated(request.user)
    })
Exemplo n.º 11
0
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')
Exemplo n.º 12
0
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')
Exemplo n.º 13
0
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