feat(members/waitinglist): refine wait confirmation status

Rework the wait cofirmation status shown in the admin: If there is a pending wait confirmation
request (i.e. the number of sent reminders is positive), the status is either `None` (i.e. undecided)
or `False`. Otherwise the status is `True`.
cm-remove-jet
Christian Merten 10 months ago
parent 0f19ce01e4
commit 3591ebd08e
Signed by: christian.merten
GPG Key ID: D953D69721B948B3

@ -938,10 +938,17 @@ class MemberWaitingList(Person):
def waiting_confirmed(self): def waiting_confirmed(self):
"""Returns if the persons waiting status is considered to be confirmed.""" """Returns if the persons waiting status is considered to be confirmed."""
cutoff = timezone.now() \ if self.sent_reminders > 0:
- timezone.timedelta(days= settings.GRACE_PERIOD_WAITING_CONFIRMATION \ # there was sent at least one wait confirmation request
+ settings.WAITING_CONFIRMATION_FREQUENCY) if timezone.now() < self.wait_confirmation_key_expire:
return self.last_wait_confirmation > cutoff.date() # the request has not expired yet
return None
else:
# we sent a request that has expired
return False
else:
# if there exist no pending or expired reminders, the waiter remains confirmed
return True
waiting_confirmed.admin_order_field = 'last_wait_confirmation' waiting_confirmed.admin_order_field = 'last_wait_confirmation'
waiting_confirmed.boolean = True waiting_confirmed.boolean = True
waiting_confirmed.short_description = _('Waiting status confirmed') waiting_confirmed.short_description = _('Waiting status confirmed')

@ -1479,15 +1479,14 @@ class ConfirmWaitingViewTestCase(BasicMemberTestCase):
self.assertEqual(waiter.leave_key, '') self.assertEqual(waiter.leave_key, '')
def test_get_expired(self): def test_get_expired(self):
self.waiter.last_wait_confirmation = datetime.date(1900, 1, 1) # waiter has a pending confirmation request
self.waiter.save() self.assertEqual(self.waiter.waiting_confirmed(), None)
# after setting the last wait confirmation to an old date, the waiting status
# should be unconfirmed
self.assertFalse(self.waiter.waiting_confirmed())
url = reverse('members:confirm_waiting') url = reverse('members:confirm_waiting')
self.waiter.wait_confirmation_key_expire = timezone.now() - timezone.timedelta(days=10) self.waiter.wait_confirmation_key_expire = timezone.now() - timezone.timedelta(days=10)
self.waiter.save() self.waiter.save()
# waiter has pending confirmation request, but request has expired
self.assertEqual(self.waiter.waiting_confirmed(), False)
response = self.client.get(url, data={'key': self.key}) response = self.client.get(url, data={'key': self.key})
self.assertEqual(response.status_code, HTTPStatus.OK) self.assertEqual(response.status_code, HTTPStatus.OK)
self.assertContains(response, _('rejoin the waiting list')) self.assertContains(response, _('rejoin the waiting list'))

Loading…
Cancel
Save