Decoupling points
parent
0b441953dc
commit
240d57194f
|
@ -45,18 +45,18 @@ ISSUETYPES = (
|
||||||
)
|
)
|
||||||
|
|
||||||
POINTS_CHOICES = (
|
POINTS_CHOICES = (
|
||||||
(-1, u'?'),
|
(1, u'?', None),
|
||||||
(0, u'0'),
|
(2, u'0', 0),
|
||||||
(-2, u'1/2'),
|
(3, u'1/2', 0.5),
|
||||||
(1, u'1'),
|
(4, u'1', 1),
|
||||||
(2, u'2'),
|
(5, u'2', 2),
|
||||||
(3, u'3'),
|
(6, u'3', 3),
|
||||||
(5, u'5'),
|
(7, u'5', 5),
|
||||||
(8, u'8'),
|
(8, u'8', 8),
|
||||||
(10, u'10'),
|
(9, u'10', 10),
|
||||||
(15, u'15'),
|
(10, u'15', 15),
|
||||||
(20, u'20'),
|
(11, u'20', 20),
|
||||||
(40, u'40'),
|
(12, u'40', 40),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -149,10 +149,17 @@ class Command(BaseCommand):
|
||||||
status=self.sd.db_object_from_queryset(UserStoryStatus.objects.filter(project=project)),
|
status=self.sd.db_object_from_queryset(UserStoryStatus.objects.filter(project=project)),
|
||||||
tags=[]
|
tags=[]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
for role in project.list_roles:
|
||||||
if milestone:
|
if milestone:
|
||||||
us.points=self.sd.db_object_from_queryset(Points.objects.filter(project=project).exclude(order=0))
|
points=self.sd.db_object_from_queryset(Points.objects.filter(project=project).exclude(order=0))
|
||||||
else:
|
else:
|
||||||
us.points=self.sd.db_object_from_queryset(Points.objects.filter(project=project))
|
points=self.sd.db_object_from_queryset(Points.objects.filter(project=project))
|
||||||
|
|
||||||
|
RolePoints.objects.create(
|
||||||
|
user_story=us,
|
||||||
|
points=points,
|
||||||
|
role=role)
|
||||||
|
|
||||||
for tag in self.sd.words().split(" "):
|
for tag in self.sd.words().split(" "):
|
||||||
us.tags.append(tag)
|
us.tags.append(tag)
|
||||||
|
|
|
@ -6,6 +6,7 @@ from django.dispatch import receiver
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.contrib.contenttypes import generic
|
from django.contrib.contenttypes import generic
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
from django.db.models.loading import get_model
|
||||||
|
|
||||||
from picklefield.fields import PickledObjectField
|
from picklefield.fields import PickledObjectField
|
||||||
|
|
||||||
|
@ -144,6 +145,8 @@ class Points(models.Model):
|
||||||
verbose_name=_('name'))
|
verbose_name=_('name'))
|
||||||
order = models.IntegerField(default=10, null=False, blank=False,
|
order = models.IntegerField(default=10, null=False, blank=False,
|
||||||
verbose_name=_('order'))
|
verbose_name=_('order'))
|
||||||
|
value = models.FloatField(default=None, null=True, blank=True,
|
||||||
|
verbose_name=_('value'))
|
||||||
project = models.ForeignKey('Project', null=False, blank=False,
|
project = models.ForeignKey('Project', null=False, blank=False,
|
||||||
related_name='points',
|
related_name='points',
|
||||||
verbose_name=_('project'))
|
verbose_name=_('project'))
|
||||||
|
@ -169,7 +172,8 @@ class Points(models.Model):
|
||||||
|
|
||||||
class Membership(models.Model):
|
class Membership(models.Model):
|
||||||
user = models.ForeignKey('base.User', null=False, blank=False)
|
user = models.ForeignKey('base.User', null=False, blank=False)
|
||||||
project = models.ForeignKey('Project', null=False, blank=False)
|
project = models.ForeignKey('Project', null=False, blank=False,
|
||||||
|
related_name="memberships")
|
||||||
role = models.ForeignKey('base.Role', null=False, blank=False)
|
role = models.ForeignKey('base.Role', null=False, blank=False)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -243,6 +247,11 @@ class Project(models.Model):
|
||||||
} for milestone in self.milestones.all().order_by('estimated_start')
|
} for milestone in self.milestones.all().order_by('estimated_start')
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def list_roles(self):
|
||||||
|
role_model = get_model('base', 'Role')
|
||||||
|
return role_model.objects.filter(id__in=list(self.memberships.values_list('role', flat=True)))
|
||||||
|
|
||||||
|
|
||||||
class Milestone(models.Model):
|
class Milestone(models.Model):
|
||||||
uuid = models.CharField(
|
uuid = models.CharField(
|
||||||
|
@ -345,6 +354,18 @@ class Milestone(models.Model):
|
||||||
return sum(points)
|
return sum(points)
|
||||||
|
|
||||||
|
|
||||||
|
class RolePoints(models.Model):
|
||||||
|
user_story = models.ForeignKey('UserStory', null=False, blank=False,
|
||||||
|
related_name='role_points',
|
||||||
|
verbose_name=_('user story'))
|
||||||
|
role = models.ForeignKey('base.Role', null=False, blank=False,
|
||||||
|
related_name='role_points',
|
||||||
|
verbose_name=_('role'))
|
||||||
|
points = models.ForeignKey('Points', null=False, blank=False,
|
||||||
|
related_name='role_points',
|
||||||
|
verbose_name=_('points'))
|
||||||
|
|
||||||
|
|
||||||
class UserStory(models.Model):
|
class UserStory(models.Model):
|
||||||
uuid = models.CharField(max_length=40, unique=True, null=False, blank=True,
|
uuid = models.CharField(max_length=40, unique=True, null=False, blank=True,
|
||||||
verbose_name=_('uuid'))
|
verbose_name=_('uuid'))
|
||||||
|
@ -362,9 +383,10 @@ class UserStory(models.Model):
|
||||||
status = models.ForeignKey('UserStoryStatus', null=False, blank=False,
|
status = models.ForeignKey('UserStoryStatus', null=False, blank=False,
|
||||||
related_name='user_stories',
|
related_name='user_stories',
|
||||||
verbose_name=_('status'))
|
verbose_name=_('status'))
|
||||||
points = models.ForeignKey('Points', null=False, blank=False,
|
points = models.ManyToManyField('Points', null=False, blank=False,
|
||||||
related_name='userstories',
|
related_name='userstories',
|
||||||
verbose_name=_('points'))
|
verbose_name=_('points'),
|
||||||
|
through="RolePoints")
|
||||||
order = models.PositiveSmallIntegerField(null=False, blank=False, default=100,
|
order = models.PositiveSmallIntegerField(null=False, blank=False, default=100,
|
||||||
verbose_name=_('order'))
|
verbose_name=_('order'))
|
||||||
created_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
|
created_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
|
||||||
|
@ -613,8 +635,9 @@ def project_post_save(sender, instance, created, **kwargs):
|
||||||
for order, name in SEVERITY_CHOICES:
|
for order, name in SEVERITY_CHOICES:
|
||||||
Severity.objects.create(project=instance, name=name, order=order)
|
Severity.objects.create(project=instance, name=name, order=order)
|
||||||
|
|
||||||
for order, name in POINTS_CHOICES:
|
for order, name, value in POINTS_CHOICES:
|
||||||
Points.objects.create(project=instance, name=name, order=order)
|
|
||||||
|
Points.objects.create(project=instance, name=name, order=order, value=value)
|
||||||
|
|
||||||
for order, name in ISSUETYPES:
|
for order, name in ISSUETYPES:
|
||||||
IssueType.objects.create(project=instance, name=name, order=order)
|
IssueType.objects.create(project=instance, name=name, order=order)
|
||||||
|
|
Loading…
Reference in New Issue