Commit 7f9522fd authored by Thom Wiggers's avatar Thom Wiggers 📐
Browse files

Merge branch 'hotfix/committee-memberships' into 'master'

Make it possible for a member to be a part of the same committee in different timespans

Voor deze MR werken de committeememberships als volgt:
Een lid kan maar één keer een periode lid zijn (geweest) van een commissie. Daarna kan een lidmaatschap niet meer worden toegevoegd omdat een lid al onderdeel is van de commissie (eigenlijk: was, maar zo werkt de controle niet)

Na deze MR:
- Als een lid op dit moment onderdeel uitmaakt van een commissie dan kan deze niet nog eens worden toegevoegd aan de commissie als de periode van het toe te voegen lidmaatschap eindigt na `now()` (en als deze ervoor ligt dan treedt de volgende regel in werking).
- Als een lid ooit lid was van de commissie in een bepaalde periode dan kan er geen lidmaatschap worden toegevoegd dat overlapt met deze periode.

See merge request !55
parents 32edc69d cb8fc29e
......@@ -197,12 +197,24 @@ class CommitteeMembership(models.Model):
# check if this member is already in the committee
if self.pk is None:
members = (self.committee.members
.filter(pk=self.member.pk)
until = self.until if self.until else timezone.now().date()
members = (CommitteeMembership.active_memberships
.filter(committee=self.committee, member=self.member)
.count())
if members >= 1:
memberships = (CommitteeMembership.objects.filter(
committee=self.committee,
member=self.member,
since__lte=until,
until__gte=self.since)
.count())
if members >= 1 and until >= timezone.now().date():
raise ValidationError({
'member': _('This member is already in the committee')})
elif memberships > 0:
raise ValidationError({
'member': _('This member is already in the committee for '
'this period')})
def save(self, *args, **kwargs):
"""Save the instance"""
......
......@@ -39,6 +39,32 @@ class CommitteeMembersTest(TestCase):
with self.assertRaises(ValidationError):
m.full_clean()
def test_join_unique2(self):
m = CommitteeMembership(committee=self.testcie,
member=self.testuser,
since=timezone.now().date().replace(
year=2014, month=1))
with self.assertRaises(ValidationError):
m.full_clean()
def test_join_unique_period(self):
m1 = CommitteeMembership(committee=self.testcie,
member=self.testuser,
since=timezone.now().date().replace(
year=2014, month=1),
until=timezone.now().date().replace(
year=2014, month=3))
m1.save()
m2 = CommitteeMembership(committee=self.testcie,
member=self.testuser,
since=timezone.now().date().replace(
year=2014, month=1),
until=timezone.now().date().replace(
year=2014, month=2))
with self.assertRaises(ValidationError):
m2.full_clean()
def test_until_date(self):
m = CommitteeMembership(committee=self.testcie,
member=self.testuser,
......
Supports Markdown
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