diff --git a/greenmine/base/middleware.py b/greenmine/base/middleware.py index 8623f62f..26413c37 100644 --- a/greenmine/base/middleware.py +++ b/greenmine/base/middleware.py @@ -54,7 +54,7 @@ class GreenmineSessionMiddleware(object): COORS_ALLOWED_ORIGINS = getattr(settings, 'COORS_ALLOWED_ORIGINS', '*') COORS_ALLOWED_METHODS = getattr(settings, 'COORS_ALLOWED_METHODS', - ['POST', 'GET', 'OPTIONS', 'PUT', 'DELETE']) + ['POST', 'GET', 'OPTIONS', 'PUT', 'DELETE', 'PATCH']) COORS_ALLOWED_HEADERS = getattr(settings, 'COORS_ALLOWED_HEADERS', ['Content-Type', 'X-Requested-With', 'X-Session-Token', 'Accept-Encoding']) diff --git a/greenmine/scrum/admin.py b/greenmine/scrum/admin.py index 9b769a5d..e8bf37bc 100644 --- a/greenmine/scrum/admin.py +++ b/greenmine/scrum/admin.py @@ -45,7 +45,7 @@ admin.site.register(models.Milestone, MilestoneAdmin) class UserStoryAdmin(reversion.VersionAdmin): - list_display = ["ref", "milestone", "project", "owner"] + list_display = ["ref", "milestone", "project", "owner", 'status', 'is_closed'] admin.site.register(models.UserStory, UserStoryAdmin) diff --git a/greenmine/scrum/api.py b/greenmine/scrum/api.py index 3e6b8ffd..a4eb8c12 100644 --- a/greenmine/scrum/api.py +++ b/greenmine/scrum/api.py @@ -46,7 +46,7 @@ class ProjectDetail(generics.RetrieveUpdateDestroyAPIView): permission_classes = (ProjectDetailPermission,) -class MilestoneList(SimpleFilterMixin, generics.ListCreateAPIView): +class MilestoneList(generics.ListCreateAPIView): model = Milestone serializer_class = MilestoneSerializer filter_fields = ('project',) @@ -61,7 +61,7 @@ class MilestoneDetail(generics.RetrieveUpdateDestroyAPIView): permission_classes = (MilestoneDetailPermission,) -class UserStoryList(SimpleFilterMixin, generics.ListCreateAPIView): +class UserStoryList(generics.ListCreateAPIView): model = UserStory serializer_class = UserStorySerializer filter_fields = ('project', 'milestone') diff --git a/greenmine/scrum/models.py b/greenmine/scrum/models.py index 3256472d..c8a74785 100644 --- a/greenmine/scrum/models.py +++ b/greenmine/scrum/models.py @@ -247,8 +247,12 @@ class UserStory(models.Model): def __unicode__(self): return u"{0} ({1})".format(self.subject, self.ref) + @property + def is_closed(self): + return self.status.is_closed + def save(self, *args, **kwargs): - if not self.ref and self.project: + if self.ref is None and self.project: self.ref = ref_uniquely(self.project, "last_us_ref", self.__class__) super(UserStory, self).save(*args, **kwargs) diff --git a/greenmine/scrum/serializers.py b/greenmine/scrum/serializers.py index c43d79ab..691de5ab 100644 --- a/greenmine/scrum/serializers.py +++ b/greenmine/scrum/serializers.py @@ -13,7 +13,7 @@ class PickleField(serializers.WritableField): return obj def from_native(self, data): - return json.loads(data) + return data class ProjectSerializer(serializers.ModelSerializer): @@ -26,6 +26,7 @@ class ProjectSerializer(serializers.ModelSerializer): class UserStorySerializer(serializers.ModelSerializer): tags = PickleField() + is_closed = serializers.BooleanField() class Meta: model = UserStory