Save related stories in history items for epics

remotes/origin/issue/4795/notification_even_they_are_disabled
David Barragán Merino 2016-07-05 13:16:28 +02:00
parent 46006706c5
commit 6bdfe25503
2 changed files with 31 additions and 2 deletions

View File

@ -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

View File

@ -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: