diff --git a/openslides/motion/forms.py b/openslides/motion/forms.py index 139d4205e..1ddac7b97 100644 --- a/openslides/motion/forms.py +++ b/openslides/motion/forms.py @@ -15,7 +15,7 @@ from django.utils.translation import ugettext as _ from openslides.utils.forms import CssClassMixin from openslides.utils.person import PersonFormField, MultiplePersonFormField -from .models import Motion, Workflow +from .models import Motion, Workflow, Category class BaseMotionForm(forms.ModelForm, CssClassMixin): @@ -90,6 +90,12 @@ class MotionDisableVersioningMixin(forms.ModelForm): last_version will be used.""" +class MotionCategoryMixin(forms.ModelForm): + """Mixin to let the user choose the category for the motion.""" + + category = forms.ModelChoiceField(queryset=Category.objects.all(), required=False) + + class ConfigForm(CssClassMixin, forms.Form): """Form for the configuration tab of OpenSlides.""" motion_min_supporters = forms.IntegerField( diff --git a/openslides/motion/models.py b/openslides/motion/models.py index f8de1544d..2446747c6 100644 --- a/openslides/motion/models.py +++ b/openslides/motion/models.py @@ -65,7 +65,9 @@ class Motion(SlideMixin, models.Model): unique=True) """A string as human readable identifier for the motion.""" - # category = models.ForeignKey('Category', null=True, blank=True) + category = models.ForeignKey('Category', null=True, blank=True) + """ForeignKey to one category of motions.""" + # TODO: proposal #master = models.ForeignKey('self', null=True, blank=True) @@ -523,12 +525,16 @@ class MotionSupporter(models.Model): return unicode(self.person) -## class Category(models.Model): - ## name = models.CharField(max_length=255, verbose_name=ugettext_lazy("Category name")) - ## prefix = models.CharField(max_length=32, verbose_name=ugettext_lazy("Category prefix")) +class Category(models.Model): + name = models.CharField(max_length=255, verbose_name=ugettext_lazy("Category name")) + prefix = models.CharField(max_length=32, verbose_name=ugettext_lazy("Category prefix")) - ## def __unicode__(self): - ## return self.name + def __unicode__(self): + return self.name + + def get_absolute_url(self, link='update'): + if link == 'update' or link == 'edit': + return reverse('motion_category_update', args=[str(self.id)]) ## class Comment(models.Model): diff --git a/openslides/motion/templates/motion/category_form.html b/openslides/motion/templates/motion/category_form.html new file mode 100644 index 000000000..5114c9a0a --- /dev/null +++ b/openslides/motion/templates/motion/category_form.html @@ -0,0 +1,33 @@ +{% extends "base.html" %} + +{% load tags %} +{% load i18n %} + +{% block title %} + {{ block.super }} – + {% if motion %} + {% trans "Edit category" %} + {% else %} + {% trans "New category" %} + {% endif %} +{% endblock %} + +{% block content %} +
No Categories
+ {% endfor %} + +{% endblock %} diff --git a/openslides/motion/urls.py b/openslides/motion/urls.py index a2b6b49e2..06bccb7b2 100644 --- a/openslides/motion/urls.py +++ b/openslides/motion/urls.py @@ -19,8 +19,9 @@ urlpatterns = patterns('openslides.motion.views', name='motion_list', ), - url(r'^create/$', + url(r'^new/$', 'motion_create', + # TODO: rename to motion_create name='motion_new', ), @@ -103,4 +104,19 @@ urlpatterns = patterns('openslides.motion.views', 'motion_detail_pdf', name='motion_detail_pdf', ), + + url(r'^category/$', + 'category_list', + name='motion_category_list', + ), + + url(r'^category/new/$', + 'category_create', + name='motion_category_create', + ), + + url(r'^category/(?P