Skip to content
Snippets Groups Projects
Commit d85a8e9c authored by frekk's avatar frekk
Browse files

added some overcomplicated membership type logic & model field changes

parent 347d561f
No related merge requests found
from django.db import models from django.db import models
from django.db.models import F
from django.core.validators import RegexValidator from django.core.validators import RegexValidator
import datetime import datetime
MEMBERSHIP_TYPES = [ """
('pseudo:11', 'O\' Day Special'), dictionary of membership types & descriptions, should be updated if these are changed in dispense.
('pseudo:10', 'Student and UWA Guild member'), """
('pseudo:9', 'Student and not UWA Guild member'), MEMBERSHIP_TYPES_ = [
('pseudo:8', 'Non-Student and UWA Guild member'), {
('pseudo:7', 'Non-Student and not UWA Guild member'), 'dispense':'pseudo:11',
('', 'Life member'), 'desc':'O\' Day Special',
'is_guild':True,
'is_student':True,
'must_be_fresh':True,
},
{
'dispense':'pseudo:10',
'desc':'Student and UWA Guild member',
'is_guild':True,
'is_student':True,
'must_be_fresh':False,
},
{
'dispense':'pseudo:9',
'desc':'Student and not UWA Guild member',
'is_guild':False,
'is_student':True,
'must_be_fresh':False,
},
{
'dispense':'pseudo:8',
'desc':'Non-Student and UWA Guild member',
'is_guild':True,
'is_student':False,
'must_be_fresh':False,
},
{
'dispense':'pseudo:7',
'desc':'Non-Student and not UWA Guild member',
'is_guild':False,
'is_student':False,
'must_be_fresh':False,
},
{
'dispense':'',
'desc':'Life member',
'is_guild':False,
'is_student':False,
'must_be_fresh':False,
}
] ]
def get_membership_types():
l = []
for t in MEMBERSHIP_TYPES_:
l += [(t['dispense'], t['desc'])]
return l
MEMBERSHIP_TYPES = get_membership_types()
PAYMENT_METHODS = [ PAYMENT_METHODS = [
('dispense', 'Existing dispense credit'), ('dispense', 'Existing dispense credit'),
('cash', 'Cash (in person)'), ('cash', 'Cash (in person)'),
('card', 'Tap-n-Go via Square (in person)'), ('card', 'Tap-n-Go via Square (in person)'),
('online', 'Online payment via Square'), ('online', 'Online payment via Square'),
('eft', 'Bank transfer') ('eft', 'Bank transfer'),
('', 'No payment')
] ]
""" """
...@@ -26,11 +75,17 @@ Note: these data should only be changed administratively or with suitable valida ...@@ -26,11 +75,17 @@ Note: these data should only be changed administratively or with suitable valida
class IncAssocMember (models.Model): class IncAssocMember (models.Model):
first_name = models.CharField ('First name', max_length=200) first_name = models.CharField ('First name', max_length=200)
last_name = models.CharField ('Surname', max_length=200) last_name = models.CharField ('Surname', max_length=200)
email_address = models.EmailField ('Email address', blank=True) email_address = models.EmailField ('Email address', blank=False)
updated = models.DateTimeField ('IncA. info last updated', auto_now=True) updated = models.DateTimeField ('IncA. info last updated', auto_now=True)
created = models.DateTimeField ('When created', auto_now_add=True) created = models.DateTimeField ('When created', auto_now_add=True)
def __str__ (self): def __str__ (self):
return "%s %s <%s>" % (self.first_name, self.last_name, self.email_address) return "%s %s <%s>" % (self.first_name, self.last_name, self.email_address)
class Meta:
verbose_name = "Incorporations Act member data"
verbose_name_plural = verbose_name
default_permissions = ['view']
""" """
Member table: only latest information, one record per member Member table: only latest information, one record per member
...@@ -41,11 +96,11 @@ class Member (IncAssocMember): ...@@ -41,11 +96,11 @@ class Member (IncAssocMember):
display_name = models.CharField ('Display name', max_length=200) display_name = models.CharField ('Display name', max_length=200)
username = models.SlugField ('Username', max_length=32, blank=False, unique=True, validators=[RegexValidator(regex='^[a-z0-9._-]+$')]) username = models.SlugField ('Username', max_length=32, blank=False, unique=True, validators=[RegexValidator(regex='^[a-z0-9._-]+$')])
phone_number = models.CharField ('Phone number', max_length=20, blank=False, validators=[RegexValidator(regex='^\+?[0-9() -]+$')]) phone_number = models.CharField ('Phone number', max_length=20, blank=False, validators=[RegexValidator(regex='^\+?[0-9() -]+$')])
last_renew = models.DateField ('Last renewal', blank=True, null=True)
is_student = models.BooleanField ('Student at UWA', default=True, blank=True) is_student = models.BooleanField ('Student at UWA', default=True, blank=True)
is_guild = models.BooleanField ('UWA Guild member', default=True, blank=True) is_guild = models.BooleanField ('UWA Guild member', default=True, blank=True)
id_number = models.CharField ('Student number or Drivers License', max_length=50 , blank=False) id_number = models.CharField ('Student number or Drivers License', max_length=50 , blank=False)
member_updated = models.DateTimeField ('Other info last updated', auto_now=True) member_updated = models.DateTimeField ('Internal UCC info last updated', auto_now=True)
def __str__ (self): def __str__ (self):
if (self.display_name != "%s %s" % (self.first_name, self.last_name)): if (self.display_name != "%s %s" % (self.first_name, self.last_name)):
name = "%s (%s %s)" % (self.display_name, self.first_name, self.last_name) name = "%s (%s %s)" % (self.display_name, self.first_name, self.last_name)
...@@ -53,16 +108,25 @@ class Member (IncAssocMember): ...@@ -53,16 +108,25 @@ class Member (IncAssocMember):
name = self.display_name name = self.display_name
return "[%s] %s" % (self.username, name) return "[%s] %s" % (self.username, name)
class Meta:
verbose_name = "Internal UCC member record"
""" """
Membership table: store information related to individual (successful/accepted) signups/renewals Membership table: store information related to individual (successful/accepted) signups/renewals
""" """
class Membership (models.Model): class Membership (models.Model):
member = models.ForeignKey (Member, on_delete=models.CASCADE) member = models.ForeignKey (Member, on_delete=models.CASCADE, related_name='memberships')
membership_type = models.CharField ('Membership type', max_length=10, blank=False, null=True, choices=MEMBERSHIP_TYPES) membership_type = models.CharField ('Membership type', max_length=10, blank=False, null=True, choices=MEMBERSHIP_TYPES)
payment_method = models.CharField ('Payment method', max_length=10, choices=PAYMENT_METHODS, blank=True) payment_method = models.CharField ('Payment method', max_length=10, blank=False, null=True, choices=PAYMENT_METHODS)
accepted = models.BooleanField ('Membership approved', default=False) approved = models.BooleanField ('Membership approved', default=False)
approver = models.ForeignKey (Member, on_delete=models.SET_NULL, null=True, blank=True, related_name='approved_memberships')
date_submitted = models.DateTimeField ('Date signed up', auto_now_add=True) date_submitted = models.DateTimeField ('Date signed up', auto_now_add=True)
date_paid = models.DateTimeField ('Date of payment', blank=True, null=True) date_paid = models.DateTimeField ('Date of payment', blank=True, null=True)
date_accepted = models.DateTimeField ('Date approved', blank=True, null=True) date_approved = models.DateTimeField ('Date approved', blank=True, null=True)
def __str__ (self): def __str__ (self):
return "%s" % (self.member.display_name); return "Member [%s] (%s) renewed membership on %s" % (self.member.username, self.member.display_name, self.date_submitted.strftime("%Y-%m-%d"))
\ No newline at end of file
class Meta:
verbose_name = "Membership renewal record"
ordering = ['-approved', 'member__username', '-date_submitted']
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment