diff options
| author | Tim Graham <timograham@gmail.com> | 2016-03-18 20:48:35 -0400 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-03-19 15:59:00 -0400 |
| commit | 4400033c7a5b6031d291df7b9d50e3e30d6d2d67 (patch) | |
| tree | 94c61c31f106c2e2b2b1c5b720030ea58bff5be1 /members | |
| parent | 17adf71a59657e680565a902de906869b90d8c7a (diff) | |
Fixed #590 -- Added support for gold/platinum members on fundraising page.
Diffstat (limited to 'members')
| -rw-r--r-- | members/models.py | 31 | ||||
| -rw-r--r-- | members/test_models.py | 34 |
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]}) |
