diff --git a/elections/migrations/0028_election_visible.py b/elections/migrations/0028_election_visible.py new file mode 100644 index 0000000..28b774b --- /dev/null +++ b/elections/migrations/0028_election_visible.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.4 on 2021-06-17 08:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("elections", "0027_auto_20210614_1123"), + ] + + operations = [ + migrations.AddField( + model_name="election", + name="visible", + field=models.BooleanField(default=True, verbose_name="visible au public"), + ), + ] diff --git a/elections/migrations/0029_alter_election_visible.py b/elections/migrations/0029_alter_election_visible.py new file mode 100644 index 0000000..853df45 --- /dev/null +++ b/elections/migrations/0029_alter_election_visible.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.4 on 2021-06-17 09:51 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("elections", "0028_election_visible"), + ] + + operations = [ + migrations.AlterField( + model_name="election", + name="visible", + field=models.BooleanField(default=False, verbose_name="visible au public"), + ), + ] diff --git a/elections/mixins.py b/elections/mixins.py index 69d44eb..45f928b 100644 --- a/elections/mixins.py +++ b/elections/mixins.py @@ -55,12 +55,13 @@ class OpenElectionOnlyMixin(RestrictAccessMixin): filters = super().get_filters() filters[f_prefix + "start_date__lt"] = timezone.now() filters[f_prefix + "end_date__gt"] = timezone.now() + filters[f_prefix + "visible"] = True filters[f_prefix + "tallied"] = False filters[f_prefix + "archived"] = False return filters -class CreatorOnlyMixin(AdminOnlyMixin, RestrictAccessMixin): +class CreatorOnlyMixin(AdminOnlyMixin, RestrictAccessMixin, SingleObjectMixin): """Restreint l'accès au créateurice de l'élection""" def get_next_url(self): @@ -73,7 +74,7 @@ class CreatorOnlyMixin(AdminOnlyMixin, RestrictAccessMixin): return filters -class CreatorOnlyEditMixin(CreatorOnlyMixin, SingleObjectMixin): +class CreatorOnlyEditMixin(CreatorOnlyMixin): """Permet au créateurice de modifier l'élection implicitement""" def get_filters(self): @@ -83,7 +84,7 @@ class CreatorOnlyEditMixin(CreatorOnlyMixin, SingleObjectMixin): return filters -class ClosedElectionMixin(CreatorOnlyMixin, SingleObjectMixin): +class ClosedElectionMixin(CreatorOnlyMixin): """Permet d'agir sur une élection terminée""" def get_filters(self): @@ -96,12 +97,15 @@ class ClosedElectionMixin(CreatorOnlyMixin, SingleObjectMixin): class NotArchivedMixin: - """Permet de ne garder que les élections non archivées ou dont on est l'admin""" + """ + Permet de ne garder que les élections non archivées, et visibles + ou dont on est l'admin + """ def get_queryset(self): user = self.request.user qs = super().get_queryset() if user.is_authenticated: - return qs.filter(Q(archived=False) | Q(created_by=user)) + return qs.filter(Q(archived=False, visible=True) | Q(created_by=user)) return qs.filter(archived=False) diff --git a/elections/models.py b/elections/models.py index cc66bc0..cdc02e2 100644 --- a/elections/models.py +++ b/elections/models.py @@ -39,6 +39,8 @@ class Election(models.Model): start_date = models.DateTimeField(_("date et heure de début")) end_date = models.DateTimeField(_("date et heure de fin")) + visible = models.BooleanField(_("visible au public"), default=False) + vote_restrictions = TranslatedFieldWithFallback( models.TextField(_("conditions de vote"), blank=True) ) diff --git a/elections/templates/elections/election_admin.html b/elections/templates/elections/election_admin.html index 611052d..03b66a7 100644 --- a/elections/templates/elections/election_admin.html +++ b/elections/templates/elections/election_admin.html @@ -66,6 +66,16 @@