summaryrefslogtreecommitdiff
path: root/members
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2016-03-18 20:48:35 -0400
committerTim Graham <timograham@gmail.com>2016-03-19 15:59:00 -0400
commit4400033c7a5b6031d291df7b9d50e3e30d6d2d67 (patch)
tree94c61c31f106c2e2b2b1c5b720030ea58bff5be1 /members
parent17adf71a59657e680565a902de906869b90d8c7a (diff)
Fixed #590 -- Added support for gold/platinum members on fundraising page.
Diffstat (limited to 'members')
-rw-r--r--members/models.py31
-rw-r--r--members/test_models.py34
2 files changed, 52 insertions, 13 deletions
diff --git a/members/models.py b/members/models.py
index 5066ee07..8cd046ad 100644
--- a/members/models.py
+++ b/members/models.py
@@ -1,9 +1,21 @@
+from collections import defaultdict
+
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.views.generic.dates import timezone_today
from sorl.thumbnail import ImageField, get_thumbnail
+SILVER_MEMBERSHIP = 1
+GOLD_MEMBERSHIP = 2
+PLATINUM_MEMBERSHIP = 3
+
+CORPORATE_MEMBERSHIP_AMOUNTS = {
+ 'platinum': 100000,
+ 'gold': 25000,
+ 'silver': 2000,
+}
+
class DeveloperMember(models.Model):
name = models.CharField(max_length=250)
@@ -30,12 +42,25 @@ class CorporateMemberManager(models.Manager):
).annotate(donated_amount=models.Sum('invoice__amount'))
return objs.order_by('-donated_amount', 'display_name')
+ def by_membership_level(self):
+ members_by_type = defaultdict(list)
+ members = self.for_public_display()
+ for member in members:
+ if member.membership_level == SILVER_MEMBERSHIP:
+ key = 'silver'
+ elif member.membership_level == GOLD_MEMBERSHIP:
+ key = 'gold'
+ else:
+ key = 'platinum'
+ members_by_type[key].append(member)
+ return members_by_type
+
class CorporateMember(models.Model):
MEMBERSHIP_LEVELS = (
- (1, 'Silver'),
- (2, 'Gold'),
- (3, 'Platinum'),
+ (SILVER_MEMBERSHIP, 'Silver'),
+ (GOLD_MEMBERSHIP, 'Gold'),
+ (PLATINUM_MEMBERSHIP, 'Platinum'),
)
display_name = models.CharField(max_length=250)
diff --git a/members/test_models.py b/members/test_models.py
index 219250de..2829b2cb 100644
--- a/members/test_models.py
+++ b/members/test_models.py
@@ -2,7 +2,10 @@ from datetime import date, timedelta
from django.test import TestCase
-from members.models import CorporateMember, DeveloperMember
+from members.models import (
+ GOLD_MEMBERSHIP, PLATINUM_MEMBERSHIP, SILVER_MEMBERSHIP, CorporateMember,
+ DeveloperMember,
+)
class DeveloperMemberTests(TestCase):
@@ -30,6 +33,8 @@ class DeveloperMemberTests(TestCase):
class CorporateMemberTests(TestCase):
+ today = date.today()
+ tomorrow = today + timedelta(days=1)
@classmethod
def setUpTestData(cls):
@@ -38,7 +43,7 @@ class CorporateMemberTests(TestCase):
billing_name='foo',
billing_email='c@example.com',
contact_email='c@example.com',
- membership_level=2,
+ membership_level=SILVER_MEMBERSHIP,
)
def setUp(self):
@@ -54,7 +59,7 @@ class CorporateMemberTests(TestCase):
invoice = self.member.invoice_set.create(amount=500)
self.assertEqual(self.member.is_invoiced, False)
# Invoice with an sent_date == invoiced.
- invoice.sent_date = date.today()
+ invoice.sent_date = self.today
invoice.save()
self.assertEqual(self.member.is_invoiced, True)
@@ -65,17 +70,26 @@ class CorporateMemberTests(TestCase):
invoice = self.member.invoice_set.create(amount=500)
self.assertEqual(self.member.is_paid, False)
# Invoice with a paid_date == paid.
- invoice.paid_date = date.today()
+ invoice.paid_date = self.today
invoice.save()
self.assertEqual(self.member.is_paid, True)
def test_get_expiry_date(self):
- today = date.today()
- tomorrow = today + timedelta(days=1)
self.assertIsNone(self.member.get_expiry_date())
self.member.invoice_set.create(amount=500)
self.assertIsNone(self.member.get_expiry_date())
- self.member.invoice_set.create(amount=500, expiration_date=today)
- self.assertEqual(self.member.get_expiry_date(), today)
- self.member.invoice_set.create(amount=500, expiration_date=tomorrow)
- self.assertEqual(self.member.get_expiry_date(), tomorrow)
+ self.member.invoice_set.create(amount=500, expiration_date=self.today)
+ self.assertEqual(self.member.get_expiry_date(), self.today)
+ self.member.invoice_set.create(amount=500, expiration_date=self.tomorrow)
+ self.assertEqual(self.member.get_expiry_date(), self.tomorrow)
+
+ def test_manager_by_membership_level(self):
+ self.assertEqual(CorporateMember.objects.by_membership_level(), {})
+ self.member.invoice_set.create(amount=500, expiration_date=self.tomorrow)
+ self.assertEqual(CorporateMember.objects.by_membership_level(), {'silver': [self.member]})
+ self.member.membership_level = GOLD_MEMBERSHIP
+ self.member.save()
+ self.assertEqual(CorporateMember.objects.by_membership_level(), {'gold': [self.member]})
+ self.member.membership_level = PLATINUM_MEMBERSHIP
+ self.member.save()
+ self.assertEqual(CorporateMember.objects.by_membership_level(), {'platinum': [self.member]})