diff --git a/addons/project/models/project.py b/addons/project/models/project.py index 0c858d7f054..46262d3e874 100644 --- a/addons/project/models/project.py +++ b/addons/project/models/project.py @@ -2373,6 +2373,15 @@ class Task(models.Model): res.update(super(Task, leftover)._notify_get_reply_to(default=default)) return res + def _ensure_personal_stages(self): + user = self.env.user + ProjectTaskTypeSudo = self.env['project.task.type'].sudo() + # In the case no stages have been found, we create the default stages for the user + if not ProjectTaskTypeSudo.search_count([('user_id', '=', user.id)], limit=1): + ProjectTaskTypeSudo.with_context(lang=user.lang, default_project_id=False).create( + self.with_context(lang=user.lang)._get_default_personal_stage_create_vals(user.id) + ) + def email_split(self, msg): email_list = tools.email_split((msg.get('to') or '') + ',' + (msg.get('cc') or '')) # check left-part is not already an alias diff --git a/addons/project/tests/test_personal_stages.py b/addons/project/tests/test_personal_stages.py index 06cd7164a89..bdc929e0bf4 100644 --- a/addons/project/tests/test_personal_stages.py +++ b/addons/project/tests/test_personal_stages.py @@ -90,6 +90,28 @@ class TestPersonalStages(TestProjectCommon): self.assertEqual(1, total_stage_0) self.assertEqual(1, total_stage_1) + def test_default_personal_stage(self): + user_without_stage, user_with_stages = self.env['res.users'].create([{ + 'login': 'test_no_stage', + 'name': "Test User without stage", + }, { + 'login': 'test_stages', + 'name': "Test User with stages", + }]) + personal_stage = self.env['project.task.type'].create({ + 'name': 'personal stage', + 'user_id': user_with_stages.id, + }) + ProjectTaskTypeSudo = self.env['project.task.type'].sudo() + # ensure that a user without personal stage is getting the default stages + self.task_1.with_user(user_without_stage)._ensure_personal_stages() + stages = ProjectTaskTypeSudo.search([('user_id', '=', user_without_stage.id)]) + self.assertEqual(len(stages), 7, "As this user had no personal stage, the default ones should have been created for him") + # ensure that the user's personal stages are not changing if the user already had some + self.task_1.with_user(user_with_stages)._ensure_personal_stages() + stages = ProjectTaskTypeSudo.search([('user_id', '=', user_with_stages.id)]) + self.assertEqual(stages, personal_stage, "As this user already had a personal stage, none should be added") + @tagged('-at_install', 'post_install') class TestPersonalStageTour(HttpCase, TestProjectCommon): diff --git a/addons/project/views/project_views.xml b/addons/project/views/project_views.xml index 90331343c0a..cfbd1a9d345 100644 --- a/addons/project/views/project_views.xml +++ b/addons/project/views/project_views.xml @@ -1770,8 +1770,17 @@ + + menu view My Tasks + + code + + model._ensure_personal_stages(); action = env["ir.actions.actions"]._for_xml_id("project.action_view_my_task") + + + + action="action_server_view_my_task" sequence="2" groups="group_project_user"/>