Added motion config tab
This commit is contained in:
parent
ecb6419f8c
commit
d3b340769b
@ -0,0 +1 @@
|
|||||||
|
import openslides.motion.signals
|
@ -17,7 +17,7 @@ from django.db import models
|
|||||||
from django.db.models import Max
|
from django.db.models import Max
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.translation import pgettext
|
from django.utils.translation import pgettext
|
||||||
from django.utils.translation import ugettext_lazy as _, ugettext_noop, ugettext
|
from django.utils.translation import ugettext_lazy, ugettext_noop, ugettext as _
|
||||||
|
|
||||||
from openslides.utils.utils import _propper_unicode
|
from openslides.utils.utils import _propper_unicode
|
||||||
from openslides.utils.person import PersonField
|
from openslides.utils.person import PersonField
|
||||||
@ -242,13 +242,13 @@ class Motion(SlideMixin, models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class MotionVersion(models.Model):
|
class MotionVersion(models.Model):
|
||||||
title = models.CharField(max_length=255, verbose_name=_("Title"))
|
title = models.CharField(max_length=255, verbose_name=ugettext_lazy("Title"))
|
||||||
text = models.TextField(verbose_name=_("Text"))
|
text = models.TextField(verbose_name=_("Text"))
|
||||||
reason = models.TextField(null=True, blank=True, verbose_name=_("Reason"))
|
reason = models.TextField(null=True, blank=True, verbose_name=ugettext_lazy("Reason"))
|
||||||
rejected = models.BooleanField(default=False)
|
rejected = models.BooleanField(default=False)
|
||||||
creation_time = models.DateTimeField(auto_now=True)
|
creation_time = models.DateTimeField(auto_now=True)
|
||||||
motion = models.ForeignKey(Motion, related_name='versions')
|
motion = models.ForeignKey(Motion, related_name='versions')
|
||||||
identifier = models.CharField(max_length=255, verbose_name=_("Version identifier"))
|
identifier = models.CharField(max_length=255, verbose_name=ugettext_lazy("Version identifier"))
|
||||||
note = models.TextField(null=True, blank=True)
|
note = models.TextField(null=True, blank=True)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
@ -268,8 +268,8 @@ class MotionVersion(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class Category(models.Model):
|
class Category(models.Model):
|
||||||
name = models.CharField(max_length=255, verbose_name=_("Category name"))
|
name = models.CharField(max_length=255, verbose_name=ugettext_lazy("Category name"))
|
||||||
prefix = models.CharField(max_length=32, verbose_name=_("Category prefix"))
|
prefix = models.CharField(max_length=32, verbose_name=ugettext_lazy("Category prefix"))
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
28
openslides/motion/signals.py
Normal file
28
openslides/motion/signals.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
openslides.motion.signales
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Signals for the motion app.
|
||||||
|
|
||||||
|
:copyright: 2011, 2012 by OpenSlides team, see AUTHORS.
|
||||||
|
:license: GNU GPL, see LICENSE for more details.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from django.dispatch import receiver
|
||||||
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
|
from openslides.config.signals import default_config_value
|
||||||
|
|
||||||
|
@receiver(default_config_value, dispatch_uid="motion_default_config")
|
||||||
|
def default_config(sender, key, **kwargs):
|
||||||
|
return {
|
||||||
|
'motion_min_supporters': 0,
|
||||||
|
'motion_preamble': _('The assembly may decide,'),
|
||||||
|
'motion_pdf_ballot_papers_selection': 'CUSTOM_NUMBER',
|
||||||
|
'motion_pdf_ballot_papers_number': '8',
|
||||||
|
'motion_pdf_title': _('Motions'),
|
||||||
|
'motion_pdf_preamble': '',
|
||||||
|
'motion_allow_trivial_change': False,
|
||||||
|
}.get(key)
|
22
openslides/motion/templates/motion/config.html
Normal file
22
openslides/motion/templates/motion/config.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{% extends "config/base_config.html" %}
|
||||||
|
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
{% block title %}{{ block.super }} – {% trans "Motion settings" %}{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1>{% trans "Motion settings" %}</h1>
|
||||||
|
<form action="" method="post">{% csrf_token %}
|
||||||
|
{{ form.as_p }}
|
||||||
|
<p>
|
||||||
|
<button class="button" type="submit">
|
||||||
|
<span class="icon ok">{% trans 'Save' %}</span>
|
||||||
|
</button>
|
||||||
|
<a href="{% url 'config_motion' %}">
|
||||||
|
<button class="button" type="button" onclick="window.location='{% url 'config_motion' %}'">
|
||||||
|
<span class="icon cancel">{% trans 'Cancel' %}</span>
|
||||||
|
</button>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
@ -22,7 +22,7 @@ from django.http import Http404
|
|||||||
from openslides.utils.pdf import stylesheet
|
from openslides.utils.pdf import stylesheet
|
||||||
from openslides.utils.views import (
|
from openslides.utils.views import (
|
||||||
TemplateView, RedirectView, UpdateView, CreateView, DeleteView, PDFView,
|
TemplateView, RedirectView, UpdateView, CreateView, DeleteView, PDFView,
|
||||||
DetailView, ListView)
|
DetailView, ListView, FormView)
|
||||||
from openslides.utils.template import Tab
|
from openslides.utils.template import Tab
|
||||||
from openslides.utils.utils import html_strong
|
from openslides.utils.utils import html_strong
|
||||||
from openslides.projector.api import get_active_slide
|
from openslides.projector.api import get_active_slide
|
||||||
@ -30,7 +30,7 @@ from openslides.projector.projector import Widget, SLIDE
|
|||||||
from openslides.config.models import config
|
from openslides.config.models import config
|
||||||
from .models import Motion, MotionSubmitter
|
from .models import Motion, MotionSubmitter
|
||||||
from .forms import (BaseMotionForm, MotionSubmitterMixin, MotionSupporterMixin,
|
from .forms import (BaseMotionForm, MotionSubmitterMixin, MotionSupporterMixin,
|
||||||
MotionTrivialChangesMixin)
|
MotionTrivialChangesMixin, ConfigForm)
|
||||||
|
|
||||||
class MotionListView(ListView):
|
class MotionListView(ListView):
|
||||||
"""
|
"""
|
||||||
@ -111,6 +111,35 @@ class MotionUpdateView(MotionMixin, UpdateView):
|
|||||||
motion_edit = MotionUpdateView.as_view()
|
motion_edit = MotionUpdateView.as_view()
|
||||||
|
|
||||||
|
|
||||||
|
class Config(FormView):
|
||||||
|
permission_required = 'config.can_manage_config'
|
||||||
|
form_class = ConfigForm
|
||||||
|
template_name = 'motion/config.html'
|
||||||
|
success_url_name = 'config_motion'
|
||||||
|
|
||||||
|
def get_initial(self):
|
||||||
|
return {
|
||||||
|
'motion_min_supporters': config['motion_min_supporters'],
|
||||||
|
'motion_preamble': config['motion_preamble'],
|
||||||
|
'motion_pdf_ballot_papers_selection': config['motion_pdf_ballot_papers_selection'],
|
||||||
|
'motion_pdf_ballot_papers_number': config['motion_pdf_ballot_papers_number'],
|
||||||
|
'motion_pdf_title': config['motion_pdf_title'],
|
||||||
|
'motion_pdf_preamble': config['motion_pdf_preamble'],
|
||||||
|
'motion_allow_trivial_change': config['motion_allow_trivial_change'],
|
||||||
|
}
|
||||||
|
|
||||||
|
def form_valid(self, form):
|
||||||
|
config['motion_min_supporters'] = form.cleaned_data['motion_min_supporters']
|
||||||
|
config['motion_preamble'] = form.cleaned_data['motion_preamble']
|
||||||
|
config['motion_pdf_ballot_papers_selection'] = form.cleaned_data['motion_pdf_ballot_papers_selection']
|
||||||
|
config['motion_pdf_ballot_papers_number'] = form.cleaned_data['motion_pdf_ballot_papers_number']
|
||||||
|
config['motion_pdf_title'] = form.cleaned_data['motion_pdf_title']
|
||||||
|
config['motion_pdf_preamble'] = form.cleaned_data['motion_pdf_preamble']
|
||||||
|
config['motion_allow_trivial_change'] = form.cleaned_data['motion_allow_trivial_change']
|
||||||
|
messages.success(self.request, _('Motion settings successfully saved.'))
|
||||||
|
return super(Config, self).form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
def register_tab(request):
|
def register_tab(request):
|
||||||
"""
|
"""
|
||||||
Register the projector tab.
|
Register the projector tab.
|
||||||
|
@ -127,11 +127,11 @@ class UrlMixin(object):
|
|||||||
"No URL to redirect to. Provide an apply_url_name.")
|
"No URL to redirect to. Provide an apply_url_name.")
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
messages.success(self.request, self.get_success_message())
|
|
||||||
if 'apply' in self.request.POST:
|
if 'apply' in self.request.POST:
|
||||||
return self.get_apply_url()
|
return self.get_apply_url()
|
||||||
|
|
||||||
if self.success_url_name:
|
if self.success_url_name:
|
||||||
return reverse(self.success_url)
|
return reverse(self.success_url_name)
|
||||||
elif self.success_url:
|
elif self.success_url:
|
||||||
return self.success_url
|
return self.success_url
|
||||||
else:
|
else:
|
||||||
|
Loading…
Reference in New Issue
Block a user