Fixed tasks permissions

remotes/origin/enhancement/email-actions
David Barragán Merino 2013-10-30 15:06:48 +01:00
parent 1faca07dcd
commit d31a6cc39f
1 changed files with 22 additions and 21 deletions

View File

@ -25,8 +25,9 @@ class Task(WatchedMixin):
related_name="tasks", verbose_name=_("status")) related_name="tasks", verbose_name=_("status"))
project = models.ForeignKey("projects.Project", null=False, blank=False, project = models.ForeignKey("projects.Project", null=False, blank=False,
related_name="tasks", verbose_name=_("project")) related_name="tasks", verbose_name=_("project"))
milestone = models.ForeignKey("milestones.Milestone", null=True, blank=True, default=None, milestone = models.ForeignKey("milestones.Milestone", null=True, blank=True,
related_name="tasks", verbose_name=_("milestone")) default=None, related_name="tasks",
verbose_name=_("milestone"))
created_date = models.DateTimeField(auto_now_add=True, null=False, blank=False, created_date = models.DateTimeField(auto_now_add=True, null=False, blank=False,
verbose_name=_("created date")) verbose_name=_("created date"))
modified_date = models.DateTimeField(auto_now=True, null=False, blank=False, modified_date = models.DateTimeField(auto_now=True, null=False, blank=False,
@ -62,14 +63,7 @@ class Task(WatchedMixin):
ordering = ["project", "created_date"] ordering = ["project", "created_date"]
unique_together = ("ref", "project") unique_together = ("ref", "project")
permissions = ( permissions = (
("comment_task", "Can comment tasks"), ("view_task", "Can view task"),
("change_owned_task", "Can modify owned tasks"),
("change_assigned_task", "Can modify assigned tasks"),
("assign_task_to_other", "Can assign tasks to others"),
("assign_task_to_myself", "Can assign tasks to myself"),
("change_task_state", "Can change the task state"),
("view_task", "Can view the task"),
("add_task_to_us", "Can add tasks to a user story"),
) )
def __str__(self): def __str__(self):
@ -103,39 +97,46 @@ def task_ref_handler(sender, instance, **kwargs):
def tasks_close_handler(sender, instance, **kwargs): def tasks_close_handler(sender, instance, **kwargs):
if instance.id: # Edit task if instance.id: # Edit task
if (sender.objects.get(id=instance.id).status.is_closed == False and if (sender.objects.get(id=instance.id).status.is_closed == False and
instance.status.is_closed == True): # Closed task instance.status.is_closed == True): # Close task
instance.finished_date = timezone.now() instance.finished_date = timezone.now()
if instance.user_story and (all([task.status.is_closed for task in if instance.user_story and (all([task.status.is_closed for task in
instance.user_story.tasks.exclude(id=instance.id)])): # All us's tasks are close instance.user_story.tasks.exclude(id=instance.id)])): # All close
us_closed_status = instance.project.us_statuses.filter(is_closed=True).order_by("order")[0] us_closed_status = instance.project.us_statuses.filter(
is_closed=True).order_by(
"order")[0]
instance.user_story.status = us_closed_status instance.user_story.status = us_closed_status
instance.user_story.finish_date = timezone.now() instance.user_story.finish_date = timezone.now()
instance.user_story.save() instance.user_story.save()
elif (sender.objects.get(id=instance.id).status.is_closed == True and elif (sender.objects.get(id=instance.id).status.is_closed == True and
instance.status.is_closed == False): # Opened task instance.status.is_closed == False): # Opene task
instance.finished_date = None instance.finished_date = None
if instance.user_story and instance.user_story.status.is_closed == True: # Us is close if instance.user_story and instance.user_story.status.is_closed == True: # Us close
us_opened_status = instance.project.us_statuses.filter(is_closed=False).order_by("-order")[0] us_opened_status = instance.project.us_statuses.filter(
is_closed=False).order_by(
"-order")[0]
instance.user_story.status = us_opened_status instance.user_story.status = us_opened_status
instance.user_story.finish_date = None instance.user_story.finish_date = None
instance.user_story.save() instance.user_story.save()
else: # Create Task else: # Create Task
if instance.status.is_closed == True: # Task is close if instance.status.is_closed == True: # Task is close
instance.finished_date = timezone.now() instance.finished_date = timezone.now()
if instance.user_story: if instance.user_story:
if instance.user_story.status.is_closed == True: # Us is close if instance.user_story.status.is_closed == True: # Us is close
instance.user_story.finish_date = timezone.now() instance.user_story.finish_date = timezone.now()
instance.user_story.save() instance.user_story.save()
elif all([task.status.is_closed for task in instance.user_story.tasks.all()]): # All us's tasks are close elif all([task.status.is_closed for task in
instance.user_story.tasks.all()]): # All us's tasks are close
# if any stupid robot/machine/user/alien create an open US # if any stupid robot/machine/user/alien create an open US
us_closed_status = instance.project.us_statuses.filter(is_closed=True).order_by("order")[0] us_closed_status = instance.project.us_statuses.filter(is_closed=True).order_by("order")[0]
instance.user_story.status = us_closed_status instance.user_story.status = us_closed_status
instance.user_story.finish_date = timezone.now() instance.user_story.finish_date = timezone.now()
instance.user_story.save() instance.user_story.save()
else: # Task is opene else: # Task is opene
instance.finished_date = None instance.finished_date = None
if instance.user_story and instance.user_story.status.is_closed == True: # US is close if instance.user_story and instance.user_story.status.is_closed == True: # US is close
us_opened_status = instance.project.us_statuses.filter(is_closed=False).order_by("-order")[0] us_opened_status = instance.project.us_statuses.filter(
is_closed=False).order_by(
"-order")[0]
instance.user_story.status = us_opened_status instance.user_story.status = us_opened_status
instance.user_story.finish_date = None instance.user_story.finish_date = None
instance.user_story.save() instance.user_story.save()