Fix #679
This commit is contained in:
parent
36ff05f977
commit
31c04c280a
@ -343,18 +343,13 @@ class Motion(SlideMixin, models.Model):
|
|||||||
"""
|
"""
|
||||||
Return the newest version of the motion.
|
Return the newest version of the motion.
|
||||||
"""
|
"""
|
||||||
# TODO: Fix the case, that the motion has no version
|
# TODO: Fix the case, that the motion has no version.
|
||||||
|
# Check whether the case, that a motion has not any version, can still appear.
|
||||||
try:
|
try:
|
||||||
return self.versions.order_by('-version_number')[0]
|
return self.versions.order_by('-version_number')[0]
|
||||||
except IndexError:
|
except IndexError:
|
||||||
return self.new_version
|
return self.new_version
|
||||||
|
|
||||||
def get_last_not_rejected_version(self):
|
|
||||||
"""
|
|
||||||
Returns the newest version of the motion, which is not rejected.
|
|
||||||
"""
|
|
||||||
return self.versions.filter(rejected=False).order_by('-version_number')[0]
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def submitters(self):
|
def submitters(self):
|
||||||
return sorted([object.person for object in self.submitter.all()],
|
return sorted([object.person for object in self.submitter.all()],
|
||||||
@ -517,7 +512,7 @@ class Motion(SlideMixin, models.Model):
|
|||||||
|
|
||||||
def set_active_version(self, version):
|
def set_active_version(self, version):
|
||||||
"""
|
"""
|
||||||
Set the active state of a version to 'version'.
|
Set the active version of a motion to 'version'.
|
||||||
|
|
||||||
'version' can be a version object, or the version_number of a version.
|
'version' can be a version object, or the version_number of a version.
|
||||||
"""
|
"""
|
||||||
@ -525,25 +520,6 @@ class Motion(SlideMixin, models.Model):
|
|||||||
version = self.versions.get(version_number=version)
|
version = self.versions.get(version_number=version)
|
||||||
self.active_version = version
|
self.active_version = version
|
||||||
|
|
||||||
if version.rejected:
|
|
||||||
version.rejected = False
|
|
||||||
version.save()
|
|
||||||
|
|
||||||
def reject_version(self, version):
|
|
||||||
"""
|
|
||||||
Reject a version of this motion.
|
|
||||||
|
|
||||||
'version' can be a version object, or the version_number of a version.
|
|
||||||
"""
|
|
||||||
if type(version) is int:
|
|
||||||
version = self.versions.get(version_number=version)
|
|
||||||
|
|
||||||
if version.active:
|
|
||||||
raise MotionError('The active version can not be rejected')
|
|
||||||
|
|
||||||
version.rejected = True
|
|
||||||
version.save()
|
|
||||||
|
|
||||||
|
|
||||||
class MotionVersion(models.Model):
|
class MotionVersion(models.Model):
|
||||||
"""
|
"""
|
||||||
@ -568,9 +544,6 @@ class MotionVersion(models.Model):
|
|||||||
reason = models.TextField(null=True, blank=True, verbose_name=ugettext_lazy("Reason"))
|
reason = models.TextField(null=True, blank=True, verbose_name=ugettext_lazy("Reason"))
|
||||||
"""The reason for a motion."""
|
"""The reason for a motion."""
|
||||||
|
|
||||||
rejected = models.BooleanField(default=False)
|
|
||||||
"""Saves if the version is rejected."""
|
|
||||||
|
|
||||||
creation_time = models.DateTimeField(auto_now=True)
|
creation_time = models.DateTimeField(auto_now=True)
|
||||||
"""Time when the version was saved."""
|
"""Time when the version was saved."""
|
||||||
|
|
||||||
|
@ -57,18 +57,18 @@
|
|||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
<div class="span8">
|
<div class="span8">
|
||||||
{# TODO: show only for workflow with versioning #}
|
{# TODO: show only for workflow with versioning #}
|
||||||
{% if motion.version.version_number != motion.get_last_not_rejected_version.version_number %}
|
{% if motion.version.version_number != motion.last_version.version_number %}
|
||||||
<span class="label label-warning">
|
<span class="label label-warning">
|
||||||
<i class="icon-warning-sign icon-white"></i> {% trans "This is not the last not rejected version." %}
|
<i class="icon-warning-sign icon-white"></i> {% trans "This is not the newest version." %}
|
||||||
</span>
|
</span>
|
||||||
<a href="{% model_url motion.get_last_not_rejected_version %}" class="btn btn-small">{% trans "Go to last not rejected version" %}
|
<a href="{% model_url motion.last_version %}" class="btn btn-small">{% trans "Go to the newest version" %}
|
||||||
(# {{ motion.get_last_not_rejected_version.version_number }})</a>
|
(# {{ motion.last_version.version_number }})</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if motion.version.version_number != motion.active_version.version_number %}
|
{% if motion.version.version_number != motion.active_version.version_number %}
|
||||||
<span class="label label-warning">
|
<span class="label label-warning">
|
||||||
<i class="icon-warning-sign icon-white"></i> {% trans "This version is not authorized." %}
|
<i class="icon-warning-sign icon-white"></i> {% trans "This version is not authorized." %}
|
||||||
</span>
|
</span>
|
||||||
<a href="{% model_url motion.active_version %}" class="btn btn-small">{% trans "Go to last authorized version" %}
|
<a href="{% model_url motion.active_version %}" class="btn btn-small">{% trans "Go to the authorized version" %}
|
||||||
(# {{ motion.active_version.version_number }})</a>
|
(# {{ motion.active_version.version_number }})</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
@ -110,12 +110,6 @@
|
|||||||
{% if perms.motion.can_manage_motion %}
|
{% if perms.motion.can_manage_motion %}
|
||||||
<a class="btn btn-mini" href="{% url 'motion_version_permit' motion.id version.version_number %}" title="{% trans 'Permit this version' %}"><i class="icon-ok"></i></a>
|
<a class="btn btn-mini" href="{% url 'motion_version_permit' motion.id version.version_number %}" title="{% trans 'Permit this version' %}"><i class="icon-ok"></i></a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if not version.rejected and version.id > motion.active_version.id and perms.motion.can_manage_motion %}
|
|
||||||
<a class="btn btn-mini" href="{% url 'motion_version_reject' motion.id version.version_number %}" title="{% trans 'Reject this version' %}"><i class="icon-ban-circle"></i></a>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
{% if version.rejected %}
|
|
||||||
<span class="badge badge-important" title="{% trans 'This version is rejected' %}"><i class="icon-ban-circle icon-white"></i></span>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td>{{ version.version_number }}</td>
|
<td>{{ version.version_number }}</td>
|
||||||
|
@ -50,11 +50,6 @@ urlpatterns = patterns('openslides.motion.views',
|
|||||||
name='motion_version_permit',
|
name='motion_version_permit',
|
||||||
),
|
),
|
||||||
|
|
||||||
url(r'^(?P<pk>\d+)/version/(?P<version_number>\d+)/reject/$',
|
|
||||||
'version_reject',
|
|
||||||
name='motion_version_reject',
|
|
||||||
),
|
|
||||||
|
|
||||||
url(r'^(?P<pk>\d+)/diff/$',
|
url(r'^(?P<pk>\d+)/diff/$',
|
||||||
'version_diff',
|
'version_diff',
|
||||||
name='motion_version_diff',
|
name='motion_version_diff',
|
||||||
|
@ -65,7 +65,7 @@ class GetVersionMixin(object):
|
|||||||
except MotionVersion.DoesNotExist:
|
except MotionVersion.DoesNotExist:
|
||||||
raise Http404('Version %s not found' % version_number)
|
raise Http404('Version %s not found' % version_number)
|
||||||
else:
|
else:
|
||||||
object.version = object.get_last_not_rejected_version()
|
object.version = object.active_version
|
||||||
return object
|
return object
|
||||||
|
|
||||||
|
|
||||||
@ -277,50 +277,6 @@ class VersionPermitView(GetVersionMixin, SingleObjectMixin, QuestionMixin, Redir
|
|||||||
version_permit = VersionPermitView.as_view()
|
version_permit = VersionPermitView.as_view()
|
||||||
|
|
||||||
|
|
||||||
class VersionRejectView(GetVersionMixin, SingleObjectMixin, QuestionMixin, RedirectView):
|
|
||||||
"""
|
|
||||||
View to reject a version.
|
|
||||||
"""
|
|
||||||
|
|
||||||
model = Motion
|
|
||||||
question_url_name = 'motion_version_detail'
|
|
||||||
success_url_name = 'motion_detail'
|
|
||||||
|
|
||||||
def get(self, *args, **kwargs):
|
|
||||||
"""
|
|
||||||
Set self.object to a motion.
|
|
||||||
"""
|
|
||||||
self.object = self.get_object()
|
|
||||||
return super(VersionRejectView, self).get(*args, **kwargs)
|
|
||||||
|
|
||||||
def get_url_name_args(self):
|
|
||||||
"""
|
|
||||||
Return a list with arguments to create the success- and question_url.
|
|
||||||
"""
|
|
||||||
return [self.object.pk, self.object.version.version_number]
|
|
||||||
|
|
||||||
def get_question(self):
|
|
||||||
return _('Are you sure you want reject Version %s?') % self.object.version.version_number
|
|
||||||
|
|
||||||
def case_yes(self):
|
|
||||||
"""
|
|
||||||
Reject the version, if the user chooses 'yes'.
|
|
||||||
"""
|
|
||||||
self.object.reject_version(self.object.version)
|
|
||||||
self.object.save(ignore_version_data=True)
|
|
||||||
self.object.write_log(
|
|
||||||
message_list=[ugettext_noop('Version %d rejected') % self.object.version.version_number],
|
|
||||||
person=self.request.user)
|
|
||||||
|
|
||||||
def get_success_url_name_args(self):
|
|
||||||
"""
|
|
||||||
Returns the motion pk as argument for the success url name.
|
|
||||||
"""
|
|
||||||
return [self.object.pk]
|
|
||||||
|
|
||||||
version_reject = VersionRejectView.as_view()
|
|
||||||
|
|
||||||
|
|
||||||
class VersionDiffView(DetailView):
|
class VersionDiffView(DetailView):
|
||||||
"""Show diff between two versions of a motion."""
|
"""Show diff between two versions of a motion."""
|
||||||
permission_required = 'motion.can_see_motion'
|
permission_required = 'motion.can_see_motion'
|
||||||
|
Loading…
Reference in New Issue
Block a user