Implemented a properly separation between computable and not computable roles.

remotes/origin/enhancement/email-actions
Andrey Antukh 2013-10-17 12:22:22 +02:00
parent dc2672078c
commit 57586a7980
3 changed files with 19 additions and 2 deletions

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from django.db import models
from django.dispatch import receiver
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import UserManager, AbstractUser
@ -37,6 +38,7 @@ class Role(models.Model):
verbose_name=_('permissions'))
order = models.IntegerField(default=10, null=False, blank=False,
verbose_name=_("order"))
computable = models.BooleanField(default=True)
class Meta:
verbose_name = 'role'
@ -45,3 +47,18 @@ class Role(models.Model):
def __str__(self):
return self.name
# On Role object is changed, update all membership
# related to current role.
@receiver(models.signals.post_save, sender=Role,
dispatch_uid='role_post_save')
def role_post_save(sender, instance, created, **kwargs):
# ignore if object is just created
if created:
return
unique_projects = set(map(lambda x: x.project, instance.memberships.all()))
for project in unique_projects:
project.update_role_points()

View File

@ -33,4 +33,4 @@ class RecoverySerializer(serializers.Serializer):
class RoleSerializer(serializers.ModelSerializer):
class Meta:
model = Role
fields = ('id', 'name', 'slug', 'permissions',)
fields = ('id', 'name', 'slug', 'permissions', 'computable')

View File

@ -133,7 +133,7 @@ class Project(models.Model):
rolepoints_model = get_model("userstories", "RolePoints")
# Get all available roles on this project
roles = self.get_roles()
roles = self.get_roles().filter(computable=True)
# Get point instance that represent a null/undefined
null_points_value = self.points.get(value=None)