diff --git a/meinberlin/apps/budgeting/rules.py b/meinberlin/apps/budgeting/rules.py index f0db612155..f16a1ed078 100644 --- a/meinberlin/apps/budgeting/rules.py +++ b/meinberlin/apps/budgeting/rules.py @@ -1,6 +1,7 @@ import rules from adhocracy4.modules import predicates as module_predicates +from adhocracy4.phases import predicates as phase_predicates from . import models @@ -38,3 +39,8 @@ module_predicates.is_context_moderator | module_predicates.is_context_initiator ) + +rules.add_perm( + 'meinberlin_budgeting.vote_proposal', + phase_predicates.phase_allows_vote(models.Proposal) +) diff --git a/meinberlin/apps/budgeting/templates/meinberlin_budgeting/proposal_list.html b/meinberlin/apps/budgeting/templates/meinberlin_budgeting/proposal_list.html index 57a1c565e9..84ae381afd 100644 --- a/meinberlin/apps/budgeting/templates/meinberlin_budgeting/proposal_list.html +++ b/meinberlin/apps/budgeting/templates/meinberlin_budgeting/proposal_list.html @@ -1,5 +1,5 @@ {% extends extends %} -{% load i18n discovery_tags static maps_tags react_proposals %} +{% load i18n discovery_tags static maps_tags react_proposals widget_tweaks rules %} {% block extra_js %} @@ -18,6 +18,23 @@ {% trans 'Submit proposal' %} {% endif %} + {% has_perm 'meinberlin_budgeting.vote_proposal' request.user module as vote_allowed %} + {% if vote_allowed %} + {% if request.session.voting_token %} + You are using token {{ request.session.voting_token }} + {% else %} +
+
+ {% csrf_token %} +
+ {{ token_form.token }} +
+ {{ token_form.token.errors }} + +
+
+ {% endif %} + {% endif %} {% endblock %} {% block phase_content %} diff --git a/meinberlin/apps/budgeting/templatetags/react_proposals.py b/meinberlin/apps/budgeting/templatetags/react_proposals.py index fedeaec51c..636ecb9cd7 100644 --- a/meinberlin/apps/budgeting/templatetags/react_proposals.py +++ b/meinberlin/apps/budgeting/templatetags/react_proposals.py @@ -4,14 +4,21 @@ from django.urls import reverse from django.utils.html import format_html +from adhocracy4.phases.predicates import has_feature_active +from meinberlin.apps.budgeting.models import Proposal + register = template.Library() @register.simple_tag(takes_context=True) -def react_proposals(context, obj): - proposals_api_url = reverse('proposals-list', kwargs={'module_pk': obj.pk}) +def react_proposals(context, module): + proposals_api_url = reverse('proposals-list', + kwargs={'module_pk': module.pk}) attributes = {'proposals_api_url': proposals_api_url, - 'is_voting_phase': 'voting' in obj.active_phase.type} + 'is_voting_phase': has_feature_active(module, + Proposal, + 'vote') + } return format_html( '