diff --git a/taiga/projects/history/freeze_impl.py b/taiga/projects/history/freeze_impl.py index 7d5b3543..1c2fae44 100644 --- a/taiga/projects/history/freeze_impl.py +++ b/taiga/projects/history/freeze_impl.py @@ -187,6 +187,18 @@ def _generic_extract(obj:object, fields:list, default=None) -> dict: return result +@as_tuple +def extract_user_stories(obj) -> list: + for user_story in obj.user_stories.all(): + + yield {"id": user_story.id, + "ref": user_story.ref, + "subject": user_story.subject, + "project": { + "id": user_story.project.id, + "name": user_story.project.name, + "slug": user_story.project.slug}} + @as_tuple def extract_attachments(obj) -> list: for attach in obj.attachments.all(): @@ -285,8 +297,6 @@ def epic_freezer(epic) -> dict: "ref": epic.ref, "owner": epic.owner_id, "status": epic.status.id if epic.status else None, - "is_closed": epic.is_closed, - "finish_date": str(epic.finish_date), "epics_order": epic.epics_order, "subject": epic.subject, "description": epic.description, @@ -300,6 +310,7 @@ def epic_freezer(epic) -> dict: "blocked_note": epic.blocked_note, "blocked_note_html": mdrender(epic.project, epic.blocked_note), "custom_attributes": extract_epic_custom_attributes(epic), + "user_stories": extract_user_stories(epic), } return snapshot diff --git a/taiga/projects/history/models.py b/taiga/projects/history/models.py index d5c023a9..aafaa915 100644 --- a/taiga/projects/history/models.py +++ b/taiga/projects/history/models.py @@ -258,6 +258,24 @@ class HistoryEntry(models.Model): if custom_attributes["new"] or custom_attributes["changed"] or custom_attributes["deleted"]: value = custom_attributes + elif key == "user_stories": + user_stories = { + "new": [], + "deleted": [], + } + + olduss = {x["id"]:x for x in self.diff["user_stories"][0]} + newuss = {x["id"]:x for x in self.diff["user_stories"][1]} + + for usid in set(tuple(olduss.keys()) + tuple(newuss.keys())): + if usid in olduss and usid not in newuss: + user_stories["deleted"].append(olduss[usid]) + elif usid not in olduss and usid in newuss: + user_stories["new"].append(newuss[usid]) + + if user_stories["new"] or user_stories["changed"] or user_stories["deleted"]: + value = user_stories + elif key in self.values: value = [resolve_value(key, x) for x in self.diff[key]] else: