diff --git a/greenmine/scrum/api.py b/greenmine/scrum/api.py index d1707f66..600e250f 100644 --- a/greenmine/scrum/api.py +++ b/greenmine/scrum/api.py @@ -135,22 +135,6 @@ class ChangeAttachmentDetail(generics.RetrieveUpdateDestroyAPIView): permission_classes = (IsAuthenticated, ChangeAttachmentDetailPermission,) -class IssueList(generics.ListCreateAPIView): - model = Issue - serializer_class = IssueSerializer - filter_fields = ('project',) - permission_classes = (IsAuthenticated,) - - def get_queryset(self): - return self.model.objects.filter(project__members=self.request.user) - - -class IssueDetail(generics.RetrieveUpdateDestroyAPIView): - model = Issue - serializer_class = IssueSerializer - permission_classes = (IsAuthenticated, IssueDetailPermission,) - - class TaskList(generics.ListCreateAPIView): model = Task serializer_class = TaskSerializer @@ -179,10 +163,19 @@ class IssueList(generics.ListCreateAPIView): def pre_save(self, obj): obj.owner = self.request.user + def get_queryset(self): + return self.model.objects.filter(project__members=self.request.user) + class IssueDetail(generics.RetrieveUpdateDestroyAPIView): model = Issue serializer_class = IssueSerializer + permission_classes = (IsAuthenticated, IssueDetailPermission,) + + def pre_save(self, obj, created=False): + with reversion.create_revision(): + #Update the comment in the last version + reversion.set_comment(self.request.DATA['comment']) class SeverityList(generics.ListCreateAPIView): diff --git a/greenmine/scrum/serializers.py b/greenmine/scrum/serializers.py index 3c98ce31..af3749e8 100644 --- a/greenmine/scrum/serializers.py +++ b/greenmine/scrum/serializers.py @@ -71,49 +71,56 @@ class TaskSerializer(serializers.ModelSerializer): model = Task fields = () - -class IssueSerializer(serializers.ModelSerializer): +class BaseIssueSerializer(serializers.ModelSerializer): tags = PickleField() - history = serializers.SerializerMethodField('get_history') + comment = serializers.SerializerMethodField('get_comment') class Meta: model = Issue fields = () - def get_issues_diff(self, old_issue_version, new_issue_version): - old_obj = old_issue_version.field_dict - new_obj = new_issue_version.field_dict + def get_comment(self, obj): + return '' + + +class IssueSerializer(BaseIssueSerializer): + tags = PickleField() + comment = serializers.SerializerMethodField('get_comment') + history = serializers.SerializerMethodField('get_history') + + def get_issues_diff(self, old_data, new_data, by, comment): diff_dict = { - 'modified_date': new_obj['modified_date'], - 'by': old_issue_version.revision.user, + 'modified_date': new_data['modified_date'], + 'by': by, + 'comment': comment, } - for key in old_obj.keys(): - if key == 'modified_date': + for key in old_data.keys(): + if key in ['modified_date', 'created_date', 'comment']: continue - if old_obj[key] == new_obj[key]: + if old_data[key] == new_data[key]: continue diff_dict[key] = { - 'old': old_obj[key], - 'new': new_obj[key], + 'old': old_data[key], + 'new': new_data[key], } return diff_dict def get_history(self, obj): - #TODO: add comments info diff_list = [] - current = None + current_data = BaseIssueSerializer(obj).data for version in reversed(list(reversion.get_for_object(obj))): - if current: - issues_diff = self.get_issues_diff(current, version) - diff_list.append(issues_diff) - - current = version + version_data = version.field_dict + by = version.revision.user + comment = version.revision.comment + issues_diff = self.get_issues_diff(current_data, version_data, by, comment) + diff_list.append(issues_diff) + current_data = version.field_dict return diff_list