new apps/dashboard/wallet.html for stripe payment integration and user's consumables; nav added to _footer.html & also dynamic copyright year with django now Y template; new apps.dash.tests ITs & UTs reflect new wallet functionality in .urls & .views
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
import uuid
|
||||
|
||||
from datetime import timedelta
|
||||
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
|
||||
from django.db import models
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
from django.utils import timezone
|
||||
|
||||
|
||||
class UserManager(BaseUserManager):
|
||||
@@ -17,7 +21,7 @@ class UserManager(BaseUserManager):
|
||||
user.save(using=self._db)
|
||||
return user
|
||||
|
||||
class Token(models.Model):
|
||||
class LoginToken(models.Model):
|
||||
email = models.EmailField()
|
||||
uid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
|
||||
@@ -40,3 +44,48 @@ class User(AbstractBaseUser):
|
||||
|
||||
def has_module_perms(self, app_label):
|
||||
return self.is_superuser
|
||||
|
||||
class Wallet(models.Model):
|
||||
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="wallet")
|
||||
writs = models.IntegerField(default=0)
|
||||
esteem = models.IntegerField(default=0)
|
||||
|
||||
class Token(models.Model):
|
||||
COIN = "coin"
|
||||
FREE = "Free"
|
||||
TITHE = "tithe"
|
||||
TOKEN_TYPE_CHOICES = [
|
||||
(COIN, "Coin-on-a-String"),
|
||||
(FREE, "Free Token"),
|
||||
(TITHE, "Tithe Token"),
|
||||
]
|
||||
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="tokens")
|
||||
token_type = models.CharField(max_length=8, choices=TOKEN_TYPE_CHOICES)
|
||||
expires_at = models.DateTimeField(null=True, blank=True)
|
||||
|
||||
def tooltip_text(self):
|
||||
if self.token_type == self.COIN:
|
||||
return (
|
||||
"Coin-on-a-String: Admit 1 Entry"
|
||||
" (and another after that, and another after that\u2026)"
|
||||
" \u2014 no expiry"
|
||||
)
|
||||
if self.token_type == self.FREE:
|
||||
return (
|
||||
f"Free Token: Admit 1 Entry"
|
||||
f" \u2014 Expires {self.expires_at.strftime('%Y-%m-%d')}"
|
||||
)
|
||||
return self.get_token_type_display()
|
||||
|
||||
@receiver(post_save, sender=User)
|
||||
def create_wallet_and_tokens(sender, instance, created, **kwargs):
|
||||
if not created:
|
||||
return
|
||||
Wallet.objects.create(user=instance, writs=144)
|
||||
Token.objects.create(user=instance, token_type=Token.COIN)
|
||||
Token.objects.create(
|
||||
user=instance,
|
||||
token_type=Token.FREE,
|
||||
expires_at=timezone.now() + timedelta(days=7),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user