diff --git a/greenmine/scrum/models.py b/greenmine/scrum/models.py index ef7bd810..4239a1fe 100644 --- a/greenmine/scrum/models.py +++ b/greenmine/scrum/models.py @@ -455,6 +455,9 @@ class UserStory(models.Model): def is_closed(self): return self.status.is_closed + def get_role_points(self): + return self.role_points + class Attachment(models.Model): owner = models.ForeignKey('base.User', null=False, blank=False, diff --git a/greenmine/scrum/serializers.py b/greenmine/scrum/serializers.py index 2493be45..8b1a2572 100644 --- a/greenmine/scrum/serializers.py +++ b/greenmine/scrum/serializers.py @@ -34,15 +34,33 @@ class ProjectSerializer(serializers.ModelSerializer): fields = () +class RolePointsField(serializers.WritableField): + def to_native(self, obj): + return {str(o.role.id): o.points.order for o in obj.all()} + + def from_native(self, obj): + return json.loads(obj) + + class UserStorySerializer(serializers.ModelSerializer): tags = PickleField() is_closed = serializers.Field(source='is_closed') + points = RolePointsField(source='role_points') class Meta: model = UserStory fields = () depth = 0 + def save_object(self, obj, **kwargs): + role_points = obj._related_data.pop('role_points') + super(UserStorySerializer, self).save_object(obj, **kwargs) + + for role_id, points_order in role_points.items(): + role_points = obj.role_points.get(role__id=role_id) + role_points.points.order = points_order + role_points.points.save() + class MilestoneSerializer(serializers.ModelSerializer): user_stories = UserStorySerializer(many=True, required=False)