Skip to content
Snippets Groups Projects
Commit 4583a60c authored by b2-wilton's avatar b2-wilton
Browse files

Merge branch 'brodybranch' into 'main'

Implement user token count model and display user tokens in dashboard

See merge request !28
parents b7a98cd4 0f8b2d26
Branches
No related tags found
1 merge request!28Implement user token count model and display user tokens in dashboard
......@@ -3,6 +3,8 @@ from django.contrib.auth import get_user_model
from django.contrib.auth.models import User, Group, Permission
from django.contrib.contenttypes.models import ContentType
from enum import Enum
from django.dispatch import receiver
from django.db.models.signals import post_save
# class UserTypes(User):
# USER_TYPE_CHOICES = (
......@@ -47,6 +49,24 @@ class Profile(models.Model):
return f'{self.user.username} Profile'
# Model to hold the user token count
class UserTokenCount(models.Model):
# User
user = models.OneToOneField(User, on_delete=models.CASCADE)
# Token count
token_count = models.IntegerField(default=0)
def __str__(self):
return f'{self.user.username}\'s token count: {self.token_count}'
# Automatically create a UserTokenCount entry for each user on user creation
@receiver(post_save, sender=User)
def create_or_update_user_profile(sender, instance, created, **kwargs):
if created:
UserTokenCount.objects.create(user=instance)
# Profile.objects.create(user=instance)
# instance.profile.save()
class Action(Enum):
UPLOAD_FILE = "The user has successfully uploaded a file."
LOGIN = "The user has logged in to their account."
......
......@@ -5,12 +5,11 @@ from django.shortcuts import redirect, render
from django.urls import reverse
from django.shortcuts import redirect, render
from django.urls import reverse
from .models import UserTokenCount
# Create a payment that can be made via the PayPal API
# Create a payment that can be made via the PayPal API
def create_payment(request):
# Configure PayPal SDK
paypalrestsdk.configure({
"mode": settings.PAYPAL_MODE,
......@@ -92,13 +91,23 @@ def execute_payment(request):
# increment user_tokens
# commit changes
# TODO: Change something here such that the token amount added depends on a detail of the transaction,
# i.e. £9.99 payment for one token or £24.99 for
#
add_tokens(user, tokens_purchased)
return redirect('success')
else:
#TODO: Change this to a more appropriate error message
print("exiting at the end of execute_payment()")
return redirect('handler404')
def add_tokens(user, tokens):
token_count_instance, created = UserTokenCount.objects.get_or_create(user=user)
token_count_instance.token_count += tokens
token_count_instance.save()
def payment_cancelled(request):
return render(request, 'payment_cancelled.html')
......
......@@ -11,7 +11,7 @@
<div class="col-span-full xl:col-auto">
<div class="p-4 mb-4 bg-white border boder-gray-200 rounded-lg shadow-sm 2xl:col-span-2 dark:border-gray-700 sm:p-6 dark:bg-gray-800">
<h3 class="mb-4 text-xl font-semibold dark:text-white">Tokens:</h3>
<p class="mb-4 text-xl font-semibold dark:text-white">Token Count</p>
<p class="mb-4 text-xl font-semibold dark:text-white">{{ token_count }}</p>
</div>
<div class="p-4 mb-4 bg-white border boder-gray-200 rounded-lg shadow-sm 2xl:col-span-2 dark:border-gray-700 sm:p-6 dark:bg-gray-800">
<h3 class="mb-4 text-xl font-semibold dark:text-white">Change your password</h3>
......
......@@ -12,7 +12,7 @@ import json
from datetime import datetime
from .forms import InstrumentDetectionForm
from .models import Log, Action, User
from .models import Log, Action, User, UserTokenCount
from django.http import JsonResponse
from django.db import connection
......@@ -150,10 +150,12 @@ def users(request):
data_user = user_table(request)
admin_dict = json.loads(data_admin.content)
user_dict = json.loads(data_user.content)
token_count = UserTokenCount.objects.get(user=request.user).token_count
# Pass the data as a context variable to the template
# !!! ADMIN DATA ONLY DISPLAYED AND GET IF USER IS ADMIN !!!
context['admin_data'] = admin_dict['data']
context['user_data'] = user_dict['data']
context['token_count'] = token_count
return render(request, 'user_page.html', context)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment