From 4c24b7505e6d801c01521bea19a8d9ab33a32137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 9 Dec 2013 13:26:54 +0100 Subject: [PATCH] Fixed the task post save signal that update US and milestones status --- greenmine/projects/tasks/models.py | 44 ++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/greenmine/projects/tasks/models.py b/greenmine/projects/tasks/models.py index d9c52526..43179b02 100644 --- a/greenmine/projects/tasks/models.py +++ b/greenmine/projects/tasks/models.py @@ -112,7 +112,7 @@ def tasks_close_handler(sender, instance, **kwargs): if exclude_task.pk: qs = qs.exclude(pk=exclude_task.pk) - return all(task.status.is_closed for task in qs) + return not all(task.status.is_closed for task in qs) def milestone_has_open_userstories(milestone): qs = milestone.user_stories.exclude(is_closed=True) @@ -128,13 +128,47 @@ def tasks_close_handler(sender, instance, **kwargs): instance.finished_date = None if instance.user_story_id: instance.user_story.is_closed = False - instance.user_story.save(update_fields=["is_closed"]) + instance.user_story.finish_date = None + instance.user_story.save(update_fields=["is_closed", "finish_date"]) else: instance.finished_date = timezone.now() - if instance.user_story_id and us_has_open_tasks(us=instance.user_story, - exclude_task=instance): + if instance.user_story_id and not us_has_open_tasks(us=instance.user_story, + exclude_task=instance): instance.user_story.is_closed = True - instance.user_story.save(update_fields=["is_closed"]) + instance.user_story.finish_date = timezone.now() + instance.user_story.save(update_fields=["is_closed", "finish_date"]) + elif not instance.id: + if not orig_instance.status.is_closed: + instance.finished_date = None + if instance.user_story_id: + instance.user_story.is_closed = False + instance.user_story.finish_date = None + instance.user_story.save(update_fields=["is_closed", "finish_date"]) + else: + instance.finished_date = timezone.now() + if instance.user_story_id and not us_has_open_tasks(us=instance.user_story, + exclude_task=instance): + instance.user_story.is_closed = True + instance.user_story.finish_date = timezone.now() + instance.user_story.save(update_fields=["is_closed", "finish_date"]) + + # If the task change its US + if instance.user_story_id != orig_instance.user_story_id: + if (orig_instance.user_story_id and not orig_instance.status.is_closed + and not us_has_open_tasks(us=orig_instance.user_story, exclude_task=orig_instance)): + orig_instance.user_story.is_closed = True + orig_instance.user_story.finish_date = timezone.now() + orig_instance.user_story.save(update_fields=["is_closed", "finish_date"]) + + if instance.user_story_id: + if instance.user_story.is_closed: + if instance.status.is_closed: + instance.user_story.finish_date = timezone.now() + instance.user_story.save(update_fields=["finish_date"]) + else: + instance.user_story.is_closed = False + instance.user_story.finish_date = None + instance.user_story.save(update_fields=["is_closed", "finish_date"]) if instance.milestone_id: if instance.status.is_closed and not instance.milestone.closed: