Implemented a properly separation between computable and not computable roles.
parent
dc2672078c
commit
57586a7980
|
@ -1,6 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.dispatch import receiver
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.contrib.auth.models import UserManager, AbstractUser
|
from django.contrib.auth.models import UserManager, AbstractUser
|
||||||
|
|
||||||
|
@ -37,6 +38,7 @@ class Role(models.Model):
|
||||||
verbose_name=_('permissions'))
|
verbose_name=_('permissions'))
|
||||||
order = models.IntegerField(default=10, null=False, blank=False,
|
order = models.IntegerField(default=10, null=False, blank=False,
|
||||||
verbose_name=_("order"))
|
verbose_name=_("order"))
|
||||||
|
computable = models.BooleanField(default=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = 'role'
|
verbose_name = 'role'
|
||||||
|
@ -45,3 +47,18 @@ class Role(models.Model):
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
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()
|
||||||
|
|
||||||
|
|
|
@ -33,4 +33,4 @@ class RecoverySerializer(serializers.Serializer):
|
||||||
class RoleSerializer(serializers.ModelSerializer):
|
class RoleSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Role
|
model = Role
|
||||||
fields = ('id', 'name', 'slug', 'permissions',)
|
fields = ('id', 'name', 'slug', 'permissions', 'computable')
|
||||||
|
|
|
@ -133,7 +133,7 @@ class Project(models.Model):
|
||||||
rolepoints_model = get_model("userstories", "RolePoints")
|
rolepoints_model = get_model("userstories", "RolePoints")
|
||||||
|
|
||||||
# Get all available roles on this project
|
# 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
|
# Get point instance that represent a null/undefined
|
||||||
null_points_value = self.points.get(value=None)
|
null_points_value = self.points.get(value=None)
|
||||||
|
|
Loading…
Reference in New Issue