diff --git a/aleksis/apps/abi/forms.py b/aleksis/apps/abi/forms.py index 4627f03fa8627087749ec6584c0c09a3cf55306b..36a853bf1b4380cdb868b0f6ea6e1d22f33b823b 100644 --- a/aleksis/apps/abi/forms.py +++ b/aleksis/apps/abi/forms.py @@ -43,7 +43,12 @@ class AbiGroupForm(forms.ModelForm): class RankingCategoryForm(forms.ModelForm): layout = Layout( - "name", "instruction_text", "group", "number_of_persons", "number_of_persons_per_weight" + "name", + "instruction_text", + "voter_groups", + "group", + "number_of_persons", + "number_of_persons_per_weight", ) class Meta: @@ -51,6 +56,7 @@ class RankingCategoryForm(forms.ModelForm): fields = [ "name", "instruction_text", + "voter_groups", "group", "number_of_persons", "number_of_persons_per_weight", @@ -184,6 +190,12 @@ def ranking_form_factory(request: HttpRequest) -> forms.Form: rankings_by_user = Ranking.objects.filter(ranked_by=request.user.person.abi_person) for category in RankingCategory.objects.all(): + if ( + category.voter_groups.count() > 0 + and not category.voter_groups.filter(members=request.user.person.abi_person).exists() + ): + continue + field_layout.setdefault(category, []) instruction_field = forms.CharField(widget=PlainTextWidget(), required=False) diff --git a/aleksis/apps/abi/migrations/0017_rankingcategory_voter_groups.py b/aleksis/apps/abi/migrations/0017_rankingcategory_voter_groups.py new file mode 100644 index 0000000000000000000000000000000000000000..c98fad32671f26721335ff16a69db5b97442379f --- /dev/null +++ b/aleksis/apps/abi/migrations/0017_rankingcategory_voter_groups.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.16 on 2023-01-14 14:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('abi', '0016_rename_field_profilefieldvalue_profile_field'), + ] + + operations = [ + migrations.AddField( + model_name='rankingcategory', + name='voter_groups', + field=models.ManyToManyField(blank=True, help_text='Only persons in these groups will be able to vote. Leave empty to allow all groups.', null=True, related_name='ranking_categories_voters', to='abi.AbiGroup', verbose_name='Voter Groups'), + ), + ] diff --git a/aleksis/apps/abi/models.py b/aleksis/apps/abi/models.py index 4aabfcb87f66f921269e3b15e328ea9b3185dea3..fcf37576ecba3b3d2cf3269273c50146e9271f73 100644 --- a/aleksis/apps/abi/models.py +++ b/aleksis/apps/abi/models.py @@ -213,6 +213,16 @@ class RankingCategory(ExtensibleModel): blank=True, help_text=_("This will be shown under the ranking's name on the ranking page."), ) + voter_groups = models.ManyToManyField( + to=AbiGroup, + verbose_name=_("Voter Groups"), + help_text=_( + "Only persons in these groups will be able to vote. Leave empty to allow all groups." + ), + related_name="ranking_categories_voters", + blank=True, + null=True, + ) group = models.ForeignKey( to=AbiGroup, on_delete=models.CASCADE,