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 ...@@ -3,6 +3,8 @@ from django.contrib.auth import get_user_model
from django.contrib.auth.models import User, Group, Permission from django.contrib.auth.models import User, Group, Permission
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from enum import Enum from enum import Enum
from django.dispatch import receiver
from django.db.models.signals import post_save
# class UserTypes(User): # class UserTypes(User):
# USER_TYPE_CHOICES = ( # USER_TYPE_CHOICES = (
...@@ -47,6 +49,24 @@ class Profile(models.Model): ...@@ -47,6 +49,24 @@ class Profile(models.Model):
return f'{self.user.username} Profile' 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): class Action(Enum):
UPLOAD_FILE = "The user has successfully uploaded a file." UPLOAD_FILE = "The user has successfully uploaded a file."
LOGIN = "The user has logged in to their account." LOGIN = "The user has logged in to their account."
......
...@@ -5,12 +5,11 @@ from django.shortcuts import redirect, render ...@@ -5,12 +5,11 @@ from django.shortcuts import redirect, render
from django.urls import reverse from django.urls import reverse
from django.shortcuts import redirect, render from django.shortcuts import redirect, render
from django.urls import reverse 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
# 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): def create_payment(request):
# Configure PayPal SDK # Configure PayPal SDK
paypalrestsdk.configure({ paypalrestsdk.configure({
"mode": settings.PAYPAL_MODE, "mode": settings.PAYPAL_MODE,
...@@ -92,6 +91,10 @@ def execute_payment(request): ...@@ -92,6 +91,10 @@ def execute_payment(request):
# increment user_tokens # increment user_tokens
# commit changes # 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') return redirect('success')
else: else:
...@@ -99,6 +102,12 @@ def execute_payment(request): ...@@ -99,6 +102,12 @@ def execute_payment(request):
print("exiting at the end of execute_payment()") print("exiting at the end of execute_payment()")
return redirect('handler404') 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): def payment_cancelled(request):
return render(request, 'payment_cancelled.html') return render(request, 'payment_cancelled.html')
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<div class="col-span-full xl:col-auto"> <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"> <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> <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>
<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"> <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> <h3 class="mb-4 text-xl font-semibold dark:text-white">Change your password</h3>
......
...@@ -12,7 +12,7 @@ import json ...@@ -12,7 +12,7 @@ import json
from datetime import datetime from datetime import datetime
from .forms import InstrumentDetectionForm from .forms import InstrumentDetectionForm
from .models import Log, Action, User from .models import Log, Action, User, UserTokenCount
from django.http import JsonResponse from django.http import JsonResponse
from django.db import connection from django.db import connection
...@@ -150,10 +150,12 @@ def users(request): ...@@ -150,10 +150,12 @@ def users(request):
data_user = user_table(request) data_user = user_table(request)
admin_dict = json.loads(data_admin.content) admin_dict = json.loads(data_admin.content)
user_dict = json.loads(data_user.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 # Pass the data as a context variable to the template
# !!! ADMIN DATA ONLY DISPLAYED AND GET IF USER IS ADMIN !!! # !!! ADMIN DATA ONLY DISPLAYED AND GET IF USER IS ADMIN !!!
context['admin_data'] = admin_dict['data'] context['admin_data'] = admin_dict['data']
context['user_data'] = user_dict['data'] context['user_data'] = user_dict['data']
context['token_count'] = token_count
return render(request, 'user_page.html', context) 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