diff --git a/members/fixtures/members.json b/members/fixtures/members.json index 2ea45ae2..02fdde93 100644 --- a/members/fixtures/members.json +++ b/members/fixtures/members.json @@ -12,7 +12,8 @@ "seller": 1, "semester": 6, "uio_username": null, - "user": null + "user": null, + "gdpr_approval": false }, "model": "members.member", "pk": 1 @@ -30,7 +31,8 @@ "seller": 1, "semester": 6, "uio_username": null, - "user": null + "user": null, + "gdpr_approval": true }, "model": "members.member", "pk": 2 @@ -48,7 +50,8 @@ "seller": 1, "semester": 6, "uio_username": null, - "user": null + "user": null, + "gdpr_approval": true }, "model": "members.member", "pk": 3 @@ -66,7 +69,8 @@ "seller": 1, "semester": 6, "uio_username": null, - "user": null + "user": null, + "gdpr_approval": true }, "model": "members.member", "pk": 4 @@ -84,7 +88,8 @@ "seller": 1, "semester": 6, "uio_username": null, - "user": null + "user": null, + "gdpr_approval": true }, "model": "members.member", "pk": 5 diff --git a/members/migrations/0009_member_last_edited_by.py b/members/migrations/0009_member_last_edited_by.py index 6f1c5dbb..354f8467 100644 --- a/members/migrations/0009_member_last_edited_by.py +++ b/members/migrations/0009_member_last_edited_by.py @@ -14,7 +14,7 @@ class Migration(migrations.Migration): operations = [ migrations.AddField( model_name='member', - name='last_edited_by', + name='gdpr_approval', field=models.ForeignKey(null=True, to=settings.AUTH_USER_MODEL, related_name='modifier'), ), ] diff --git a/members/migrations/0011_auto_20190110_1219.py b/members/migrations/0011_auto_20190110_1219.py new file mode 100644 index 00000000..0de2c487 --- /dev/null +++ b/members/migrations/0011_auto_20190110_1219.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.18 on 2019-01-10 12:19 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('members', '0010_auto_20160315_2114'), + ] + + operations = [ + migrations.AddField( + model_name='member', + name='last_edited_by', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='modifier', to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='member', + name='gdpr_approval', + field=models.BooleanField(default=False, null=True, help_text='Privacy policy agreement'), + ), + ] diff --git a/members/models.py b/members/models.py index c01490da..d50f4b03 100644 --- a/members/models.py +++ b/members/models.py @@ -17,6 +17,7 @@ class Member(models.Model): -name of the member -email address that can be blank -uio username that can be blank. + -if member have approved privacy policy Can only be one member with the same name and email address per semester. """ @@ -32,6 +33,7 @@ class Member(models.Model): uio_username = models.CharField(max_length=15, null=True, blank=True) comments = models.TextField(null=True, blank=True) last_edited_by = models.ForeignKey(User, related_name='modifier', null=True) + gdpr_approval = models.BooleanField(default=False, help_text='Privacy policy agreement') def __str__(self): return self.name diff --git a/members/rest.py b/members/rest.py index c989ab18..2f836c5d 100644 --- a/members/rest.py +++ b/members/rest.py @@ -20,7 +20,7 @@ class MemberViewSet(viewsets.ModelViewSet): permission_classes = (DjangoModelPermissions,) filter_class = MemberFilter filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter) - filter_fields = ('lifetime',) + filter_fields = ('lifetime', 'gdpr_approval',) search_fields = ('name',) ordering_fields = ('date_joined', 'name') @@ -53,6 +53,7 @@ def create(self, request, **kwargs): lifetime=serializer.data['lifetime'], email=serializer.data['email'], honorary=False, + gdpr_approval=serializer.data['gdpr_approval'], ) if 'uio_username' in serializer.data: member.uio_username = serializer.data['uio_username'] @@ -116,4 +117,4 @@ def make_stats_dict(self, semester): 'lifetime': lifetime, 'honorary': honorary, 'normal': normal, 'semester': semester} - return semdict \ No newline at end of file + return semdict diff --git a/members/serializers.py b/members/serializers.py index 9234b28c..f294ab85 100644 --- a/members/serializers.py +++ b/members/serializers.py @@ -14,7 +14,7 @@ class Meta: model = Member fields = ( 'id', 'name', 'email', 'date_joined', 'semester', 'lifetime', 'honorary', 'date_lifetime', 'uio_username', - 'seller', 'comments', 'last_edited_by') + 'seller', 'comments', 'last_edited_by', 'gdpr_approval',) class AddMemberSerializer(serializers.Serializer): @@ -23,6 +23,8 @@ class AddMemberSerializer(serializers.Serializer): lifetime = serializers.BooleanField(help_text='Is the member a lifetime member?') uio_username = serializers.CharField(max_length=15, allow_blank=True, required=False, help_text='Your Uio username. Is optional.') + gdpr_approval = serializers.BooleanField(help_text='Is the privacy policy approved?') + class MemberSimpleSerializer(serializers.Serializer): @@ -30,7 +32,7 @@ class Meta: model = Member fields = ( 'id', 'name', 'email', 'date_joined', 'semester', 'lifetime', 'honorary', 'date_lifetime', 'uio_username', - 'seller', 'comments', 'last_edited_by') + 'seller', 'comments', 'last_edited_by', 'gdpr_approval') class MemberSemesterSerializer(serializers.Serializer): diff --git a/members/tests.py b/members/tests.py index 0fd99194..069e6f51 100644 --- a/members/tests.py +++ b/members/tests.py @@ -18,7 +18,7 @@ def test_semester_fixtures(self): class MemberRestTestCase(APITestCase): - new_member = {'name': 'Test Testeren', 'email': 'text@example.com', 'lifetime': False} + new_member = {'name': 'Test Testeren', 'email': 'text@example.com', 'lifetime': False, 'gdpr_approval': True,} def test_add_member(self): url = reverse('member-members-list') @@ -32,6 +32,7 @@ def test_add_member(self): self.assertEqual(member.name, self.new_member.get('name')) self.assertEqual(member.email, self.new_member.get('email')) self.assertEqual(member.lifetime, self.new_member.get('lifetime')) + self.assertEqual(member.gdpr_approval, self.new_member.get('gdpr_approval')) def test_add_member_not_logged_in(self): url = reverse('member-members-list') diff --git a/scripts/update-dev.sh b/scripts/update-dev.sh index 3cbd4b0e..40e7fc4d 100755 --- a/scripts/update-dev.sh +++ b/scripts/update-dev.sh @@ -8,5 +8,6 @@ fi pip install -r requirements.txt pip install -r requirements_saml.txt +./manage.py makemigrations ./manage.py migrate scripts/load_fixtures.sh