Add a fake membership transaction when importing old portal

This commit is contained in:
2020-01-19 06:58:51 +00:00
parent 0fe999ca97
commit 73b6d19c19
4 changed files with 76 additions and 29 deletions

View File

@@ -136,51 +136,58 @@ class TestCalcStatus(TestCase):
def test_calc_member_status_14_days(self):
expire_date = datetime.date.today() + datetime.timedelta(days=14)
status = utils.calc_member_status(expire_date)
status, former = utils.calc_member_status(expire_date)
self.assertEqual(status, 'Current')
self.assertEqual(former, False)
def test_calc_member_status_90_days(self):
expire_date = datetime.date.today() + datetime.timedelta(days=90)
status = utils.calc_member_status(expire_date)
status, former = utils.calc_member_status(expire_date)
self.assertEqual(status, 'Prepaid')
self.assertEqual(former, False)
def test_calc_member_status_tomorrow(self):
expire_date = datetime.date.today() + datetime.timedelta(days=1)
status = utils.calc_member_status(expire_date)
status, former = utils.calc_member_status(expire_date)
self.assertEqual(status, 'Current')
self.assertEqual(former, False)
def test_calc_member_status_today(self):
expire_date = datetime.date.today()
status = utils.calc_member_status(expire_date)
status, former = utils.calc_member_status(expire_date)
self.assertEqual(status, 'Current')
self.assertEqual(status, 'Due')
self.assertEqual(former, False)
def test_calc_member_status_yesterday(self):
expire_date = datetime.date.today() - datetime.timedelta(days=1)
status = utils.calc_member_status(expire_date)
status, former = utils.calc_member_status(expire_date)
self.assertEqual(status, 'Due')
self.assertEqual(former, False)
def test_calc_member_status_85_days_ago(self):
expire_date = datetime.date.today() - datetime.timedelta(days=85)
status = utils.calc_member_status(expire_date)
status, former = utils.calc_member_status(expire_date)
self.assertEqual(status, 'Overdue')
self.assertEqual(former, False)
def test_calc_member_status_95_days_ago(self):
expire_date = datetime.date.today() - datetime.timedelta(days=95)
status = utils.calc_member_status(expire_date)
status, former = utils.calc_member_status(expire_date)
self.assertEqual(status, 'Former Member')
self.assertEqual(status, 'Overdue')
self.assertEqual(former, True)
class TestFakeMonths(TestCase):
@@ -308,7 +315,7 @@ class TestTallyMembership(TestCase):
self.assertEqual(member.expire_date, end_date)
self.assertEqual(member.status, 'Overdue')
def test_tally_membership_months_overdue(self):
def test_tally_membership_months_overdue_pause(self):
member = self.get_member_clear_transactions()
test_num_months = 1
start_date = datetime.date.today() - relativedelta.relativedelta(months=6, days=14)
@@ -328,7 +335,7 @@ class TestTallyMembership(TestCase):
self.assertEqual(member.expire_date, end_date)
self.assertEqual(member.paused_date, end_date)
self.assertEqual(member.status, 'Former Member')
self.assertEqual(member.status, 'Overdue')
def test_tally_membership_months_dont_run(self):
member = self.get_member_clear_transactions()

View File

@@ -20,20 +20,24 @@ def num_months_difference(d1, d2):
r = relativedelta.relativedelta(d1, d2)
return r.months + 12 * r.years
def calc_member_status(expire_date):
today = datetime.date.today()
def calc_member_status(expire_date, fake_date=None):
'''
Returns the member's status and if their membership should stop
'''
today = fake_date or datetime.date.today()
difference = num_months_difference(expire_date, today)
#if today + datetime.timedelta(days=29) < expire_date:
if difference >= 1:
return 'Prepaid'
return 'Prepaid', False
elif difference <= -3:
return 'Former Member'
return 'Overdue', True
elif difference <= -1:
return 'Overdue'
elif today <= expire_date:
return 'Current'
elif today > expire_date:
return 'Due'
return 'Overdue', False
elif today < expire_date:
return 'Current', False
elif today >= expire_date:
return 'Due', False
else:
raise()
@@ -70,7 +74,7 @@ def fake_missing_membership_months(member):
return tx
def tally_membership_months(member):
def tally_membership_months(member, fake_date=None):
'''
Sum together member's dues and calculate their new expire date and status
Doesn't work if member is paused.
@@ -78,18 +82,19 @@ def tally_membership_months(member):
if member.paused_date: return False
start_date = member.current_start_date
if not start_date: return False
txs = models.Transaction.objects.filter(member_id=member.id)
total_months_agg = txs.aggregate(Sum('number_of_membership_months'))
total_months = total_months_agg['number_of_membership_months__sum']
expire_date = add_months(start_date, total_months)
status = calc_member_status(expire_date)
status, former = calc_member_status(expire_date, fake_date)
member.expire_date = expire_date
member.status = status
if status == 'Former Member':
if former:
member.paused_date = expire_date
member.save()