Ejemplo n.º 1
0
 def test_update_task(self):
     done_status = tasks_service.get_done_status()
     tasks_service.update_task(self.task.id,
                               {"task_status_id": done_status["id"]})
     self.assertEquals(str(self.task.task_status_id), done_status["id"])
     self.assertIsNotNone(self.task.end_date)
     self.assertLess(self.task.end_date, datetime.datetime.now())
Ejemplo n.º 2
0
    def test_get_todos(self):
        task_id = self.task.id
        shot_task_id = self.shot_task.id

        path = "data/user/tasks/"
        tasks = self.get(path)
        self.assertEquals(len(tasks), 0)

        self.assign_user(task_id)
        self.assign_user(shot_task_id)

        path = "data/user/tasks/"
        tasks = self.get(path)
        self.assertEquals(len(tasks), 2)

        tasks_service.update_task(
            shot_task_id,
            {"task_status_id": tasks_service.get_done_status()["id"]})

        self.assign_user(task_id)
        self.assign_user(shot_task_id)

        path = "data/user/tasks/"
        tasks = self.get(path)
        self.assertEquals(len(tasks), 1)
Ejemplo n.º 3
0
def _manage_status_change(task_status, task, comment):
    status_changed = task_status["id"] != task["task_status_id"]
    new_data = {
        "task_status_id": task_status["id"],
        "last_comment_date": comment["created_at"],
    }
    if status_changed:
        if task_status["is_retake"]:
            retake_count = task["retake_count"]
            if retake_count is None or retake_count == "NoneType":
                retake_count = 0
            new_data["retake_count"] = retake_count + 1

        if task_status["is_done"]:
            new_data["end_date"] = datetime.datetime.now()
        else:
            new_data["end_date"] = None

        if (task_status["short_name"] == "wip"
                and task["real_start_date"] is None):
            new_data["real_start_date"] = datetime.datetime.now()

    tasks_service.update_task(task["id"], new_data)
    task.update(new_data)
    if status_changed:
        events.emit("task:status-changed", {
            "task_id": task["id"],
            "new_task_status_id": new_data["task_status_id"],
            "previous_task_status_id": task["task_status_id"],
            "person_id": comment["person_id"]
        },
                    project_id=task["project_id"])
    return task, status_changed
Ejemplo n.º 4
0
    def post(self, task_id):
        (task_status_id, comment, person_id) = self.get_arguments()

        task = tasks_service.get_task(task_id)
        if not permissions.has_manager_permissions():
            user_service.check_assigned(task_id)

        task_status = tasks_service.get_task_status(task_status_id)

        if person_id:
            person = persons_service.get_person(person_id)
        else:
            person = persons_service.get_current_user()

        comment = tasks_service.create_comment(object_id=task_id,
                                               object_type="Task",
                                               task_status_id=task_status_id,
                                               person_id=person["id"],
                                               text=comment)

        status_changed = task_status_id != task["task_status_id"]

        tasks_service.update_task(task_id, {"task_status_id": task_status_id})

        notifications_service.create_notifications_for_task_and_comment(
            task, comment, change=status_changed)

        comment["task_status"] = task_status
        comment["person"] = person
        events.emit("comment:new", {"id": comment["id"]})
        return comment, 201
Ejemplo n.º 5
0
    def test_get_todos(self):
        task_id = self.task.id
        shot_task_id = self.shot_task.id

        path = "data/user/tasks/"
        tasks = self.get(path)
        self.assertEqual(len(tasks), 0)

        self.assign_user(task_id)
        self.assign_user(shot_task_id)

        path = "data/user/tasks/"
        tasks = self.get(path)
        self.assertEqual(len(tasks), 2)

        tasks_service.update_task(
            shot_task_id,
            {
                "task_status_id":
                tasks_service.get_or_create_status(
                    "Done", "done", "#22d160", is_done=True)["id"]
            },
        )

        path = "data/user/tasks/"
        tasks = self.get(path)
        self.assertEqual(len(tasks), 1)
Ejemplo n.º 6
0
 def update_task_status(self, task_id):
     tasks_service.get_task(task_id)
     new_status_id = tasks_service.get_todo_status()["id"]
     comments = tasks_service.get_comments(task_id)
     if len(comments) > 0:
         new_status_id = comments[0]["task_status_id"]
     tasks_service.update_task(task_id, {"task_status_id": new_status_id})
Ejemplo n.º 7
0
    def import_row(self, row, project_id, task_type_id, episode_id=None):
        key = slugify("%s%s" % (row["Parent"], row["Entity"]))

        if self.assets_map.get(key):
            entity_id = self.assets_map[key]
        elif self.shots_map.get(key):
            entity_id = self.shots_map[key]
        else:
            raise RowException("Entity not found")

        new_data = {}

        if row.get("Estimation") is not None:
            new_data["estimation"] = round(
                float(row["Estimation"]) * self.organisation.hours_by_day * 60)

        if row.get("Start date") is not None:
            new_data["start_date"] = date_helpers.get_date_from_string(
                row["Start date"])

        if row.get("Due date") is not None:
            new_data["due_date"] = date_helpers.get_date_from_string(
                row["Due date"])
        elif new_data.get("start_date") and new_data.get("estimation"):
            new_data["due_date"] = date_helpers.add_business_days_to_date(
                new_data["start_date"],
                float(row["Estimation"]) - 1)

        tasks_service.update_task(self.tasks_map[entity_id], new_data)
Ejemplo n.º 8
0
    def test_get_done_tasks_for_person(self):
        self.task_id = self.task.id
        tasks = self.get("/data/persons/%s/done-tasks" % self.person.id)
        self.assertEqual(len(tasks), 0)

        done_status = tasks_service.get_done_status()
        tasks_service.update_task(self.task_id,
                                  {"task_status_id": done_status["id"]})

        tasks = self.get("/data/persons/%s/done-tasks" % self.person.id)
        self.assertEquals(len(tasks), 1)
Ejemplo n.º 9
0
    def post(self, task_id):
        (task_status_id, comment, person_id) = self.get_arguments()

        task = tasks_service.get_task(task_id)
        user_service.check_project_access(task["project_id"])
        task_status = tasks_service.get_task_status(task_status_id)

        if person_id:
            person = persons_service.get_person(person_id)
        else:
            person = persons_service.get_current_user()

        comment = tasks_service.create_comment(
            object_id=task_id,
            object_type="Task",
            task_status_id=task_status_id,
            person_id=person["id"],
            text=comment,
        )

        status_changed = task_status_id != task["task_status_id"]
        new_data = {
            "task_status_id": task_status_id,
            "last_comment_date": comment["created_at"],
        }
        if status_changed:
            if task_status["is_retake"]:
                retake_count = task["retake_count"]
                if retake_count is None or retake_count == "NoneType":
                    retake_count = 0
                new_data["retake_count"] = retake_count + 1

            if task_status["is_done"]:
                new_data["end_date"] = datetime.datetime.now()
            else:
                new_data["end_date"] = None

            if (task_status["short_name"] == "wip"
                    and task["real_start_date"] is None):
                new_data["real_start_date"] = datetime.datetime.now()

        tasks_service.update_task(task_id, new_data)
        task = tasks_service.get_task_with_relations(task_id)

        notifications_service.create_notifications_for_task_and_comment(
            task, comment, change=status_changed)
        news_service.create_news_for_task_and_comment(task,
                                                      comment,
                                                      change=status_changed)

        comment["task_status"] = task_status
        comment["person"] = person
        return comment, 201
Ejemplo n.º 10
0
    def test_get_open_projects(self):
        projects = self.get("data/user/projects/open")
        self.assertEquals(len(projects), 0)

        tasks_service.update_task(self.task_id, {"assignees": [self.user]})

        projects = self.get("data/user/projects/open")
        self.assertEquals(len(projects), 1)

        tasks_service.update_task(self.task_id,
                                  {"project_id": self.project_closed_id})
        projects = self.get("data/user/projects/open")
        self.assertEquals(len(projects), 0)
Ejemplo n.º 11
0
    def test_get_done_tasks_for_person(self):
        projects = [self.project.serialize()]
        tasks = tasks_service.get_person_done_tasks(self.user.id, projects)
        self.assertEqual(len(tasks), 0)

        tasks_service.assign_task(self.task.id, self.user.id)
        tasks = tasks_service.get_person_done_tasks(self.user.id, projects)
        self.assertEqual(len(tasks), 0)

        done_status = tasks_service.get_done_status()
        tasks_service.update_task(self.task.id,
                                  {"task_status_id": done_status["id"]})
        tasks = tasks_service.get_person_done_tasks(self.user.id, projects)
        self.assertEqual(len(tasks), 1)
Ejemplo n.º 12
0
    def test_get_done_tasks_for_person(self):
        self.generate_fixture_task()
        self.task_id = self.task.id
        tasks = self.get("/data/persons/%s/done-tasks" % self.person.id)
        self.assertEqual(len(tasks), 0)

        done_status = tasks_service.get_or_create_status("Done",
                                                         "done",
                                                         "#22d160",
                                                         is_done=True)
        tasks_service.update_task(self.task_id,
                                  {"task_status_id": done_status["id"]})

        tasks = self.get("/data/persons/%s/done-tasks" % self.person.id)
        self.assertEqual(len(tasks), 1)
Ejemplo n.º 13
0
    def test_get_done_tasks(self):
        task_id = self.task.id

        path = "data/user/done-tasks/"
        tasks = self.get(path)
        self.assertEquals(len(tasks), 0)

        self.assign_user(task_id)

        path = "data/user/done-tasks/"
        tasks = self.get(path)
        self.assertEquals(len(tasks), 0)

        done_status = tasks_service.get_done_status()
        tasks_service.update_task(task_id,
                                  {"task_status_id": done_status["id"]})

        path = "data/user/done-tasks/"
        tasks = self.get(path)
        self.assertEquals(len(tasks), 1)
Ejemplo n.º 14
0
    def post(self, task_id):
        (
            task_status_id,
            comment,
            person_id
        ) = self.get_arguments()

        task = tasks_service.get_task(task_id)
        user_service.check_project_access(task["project_id"])

        task_status = tasks_service.get_task_status(task_status_id)

        if person_id:
            person = persons_service.get_person(person_id)
        else:
            person = persons_service.get_current_user()

        comment = tasks_service.create_comment(
            object_id=task_id,
            object_type="Task",
            task_status_id=task_status_id,
            person_id=person["id"],
            text=comment
        )

        status_changed = task_status_id != task["task_status_id"]

        tasks_service.update_task(
            task_id,
            {"task_status_id": task_status_id}
        )

        notifications_service.create_notifications_for_task_and_comment(
            task, comment, change=status_changed
        )

        comment["task_status"] = task_status
        comment["person"] = person
        return comment, 201
Ejemplo n.º 15
0
    def test_get_done_tasks(self):
        task_id = self.task.id

        path = "data/user/done-tasks/"
        tasks = self.get(path)
        self.assertEqual(len(tasks), 0)

        self.assign_user(task_id)

        path = "data/user/done-tasks/"
        tasks = self.get(path)
        self.assertEqual(len(tasks), 0)

        done_status = tasks_service.get_or_create_status("Done",
                                                         "done",
                                                         "#22d160",
                                                         is_done=True)
        tasks_service.update_task(task_id,
                                  {"task_status_id": done_status["id"]})

        path = "data/user/done-tasks/"
        tasks = self.get(path)
        self.assertEqual(len(tasks), 1)
Ejemplo n.º 16
0
    def post(self, task_id):
        (task_status_id, comment, person_id, created_at,
         checklist) = self.get_arguments()

        task = tasks_service.get_task(task_id)
        user_service.check_project_access(task["project_id"])
        user_service.check_entity_access(task["entity_id"])
        task_status = tasks_service.get_task_status(task_status_id)

        if not permissions.has_manager_permissions():
            person_id = None
            created_at = None

        if person_id:
            person = persons_service.get_person(person_id)
        else:
            person = persons_service.get_current_user()

        comment = tasks_service.create_comment(object_id=task_id,
                                               object_type="Task",
                                               files=request.files,
                                               person_id=person["id"],
                                               task_status_id=task_status_id,
                                               text=comment,
                                               checklist=checklist,
                                               created_at=created_at)

        status_changed = task_status_id != task["task_status_id"]
        new_data = {
            "task_status_id": task_status_id,
            "last_comment_date": comment["created_at"],
        }
        if status_changed:
            if task_status["is_retake"]:
                retake_count = task["retake_count"]
                if retake_count is None or retake_count == "NoneType":
                    retake_count = 0
                new_data["retake_count"] = retake_count + 1

            if task_status["is_done"]:
                new_data["end_date"] = datetime.datetime.now()
            else:
                new_data["end_date"] = None

            if (task_status["short_name"] == "wip"
                    and task["real_start_date"] is None):
                new_data["real_start_date"] = datetime.datetime.now()

        tasks_service.update_task(task_id, new_data)
        if status_changed:
            events.emit(
                "task:status-changed", {
                    "task_id": task_id,
                    "new_task_status_id": new_data["task_status_id"],
                    "previous_task_status_id": task["task_status_id"]
                })

        task = tasks_service.get_task_with_relations(task_id)

        notifications_service.create_notifications_for_task_and_comment(
            task, comment, change=status_changed)
        news_service.create_news_for_task_and_comment(task,
                                                      comment,
                                                      change=status_changed)

        comment["task_status"] = task_status
        comment["person"] = person
        return comment, 201