diff --git a/addons/project/static/tests/tours/project_update_tour_tests.js b/addons/project/static/tests/tours/project_update_tour_tests.js
index 5227a4e960b..ae9c3fe0ccf 100644
--- a/addons/project/static/tests/tours/project_update_tour_tests.js
+++ b/addons/project/static/tests/tours/project_update_tour_tests.js
@@ -73,9 +73,93 @@ tour.register('project_update_tour', {
extra_trigger: '.o_kanban_project_tasks',
run: "drag_and_drop .o_kanban_group:eq(1) ",
}, {
+ trigger: '.o_back_button',
+ content: 'Go back to edit the project created',
+}, {
+ // an invisible element cannot be used as a trigger so this small hack is mandatory for the next step
+ trigger: '.o_kanban_record:contains("New Project")',
+ run: function () {
+ $('.o_kanban_record:contains("New Project") .o_dropdown_kanban').css('visibility', 'visible');
+ }
+}, {
+ trigger: '.oe_kanban_global_click :contains("New Project") .o_dropdown_kanban',
+ content: 'Open the project dropdown'
+}, {
+ trigger: '.o_kanban_record:contains("New Project") .dropdown-menu a:contains("See More")',
+ content: 'Start editing the project',
+}, {
+ trigger: '.nav-item:contains("Invoicing") .nav-link',
+ content: 'Start the assignement of a default sale order id to the project'
+}, {
+ trigger: '.o_form_button_edit',
+ content: 'Start editing the project'
+}, {
+ trigger: 'div[name="sale_line_id"]',
+ content: 'Select the first sale order of the list',
+ run: function (actions) {
+ actions.text('Prepaid', this.$anchor.find('input'));
+ },
+}, {
+ trigger: 'ul.ui-autocomplete > li:first-child > a',
+ content: 'Select the first item on the autocomplete dropdown'
+}, {
+ trigger: '.o_form_button_save',
+ content: 'Save the modifications'
+}, {
+ trigger: '.o_back_button',
+ content: 'Go back to the kanban view the project created',
+}, {
+ trigger: '.oe_kanban_global_click :contains("New Project")',
+ content: 'Open the project'
+}, {
trigger: ".o_project_updates_breadcrumb",
+ content: 'Open Updates'
+}, {
+ trigger: ".oe_button_box .o_stat_text:contains('Sales Order')",
+ run: function () {}
+}, {
+ trigger: ".o_rightpanel_title:eq(0):contains('Sold')",
+ content: 'Check the user sees Sold section',
+ run: function () {}
+}, {
+ trigger: ".o_rightpanel_left_text:eq(0):contains('Prepaid Hours')",
+ content: 'Check the user sees Sold subsection',
+ run: function () {},
+}, {
+ trigger: ".o_rightpanel_title:eq(1):contains('Total Sold')",
+ content: 'Check the user sees Total Sold section',
+ run: function () {}
+}, {
+ trigger: ".o_rightpanel_header:eq(1) .o_rightpanel_right_col:contains('Hours')",
+ content: 'Check the user sees Total Sold hours title',
+ run: function () {},
+}, {
+ trigger: ".o_rightpanel_section:eq(2) .o_rightpanel_data_row:contains('Effective')",
+ content: 'Check the user sees Total Sold subsection row',
+ run: function () {},
+}, {
+ trigger: ".o_rightpanel_section:eq(2) .o_rightpanel_data_row:contains('Remaining')",
+ content: 'Check the user sees Total Sold subsection row',
+ run: function () {},
+}, {
+ trigger: ".o_rightpanel_title:eq(2):contains('Profitability')",
+ content: 'Check the user sees Profitability section',
+ run: function () {}
+}, {
+ trigger: ".o_rightpanel_section:eq(3) .o_rightpanel_data_row:contains('Revenues')",
+ content: 'Check the user sees Profitability subsection row',
+ run: function () {},
+}, {
+ trigger: ".o_rightpanel_section:eq(3) .o_rightpanel_data_row:contains('Costs')",
+ content: 'Check the user sees Profitability subsection row',
+ run: function () {},
+}, {
+ trigger: ".o_rightpanel_section:eq(3) .o_rightpanel_data_row:contains('Margin')",
+ content: 'Check the user sees Profitability subsection row',
+ run: function () {},
}, {
trigger: ".o_add_milestone a",
+ content: "Add a first milestone"
}, {
trigger: "input.o_field_widget[name=name]",
run: 'text New milestone'
@@ -91,22 +175,13 @@ tour.register('project_update_tour', {
run: 'text Second milestone'
}, {
trigger: "input.datetimepicker-input[name=deadline]",
- run: 'text 12/12/2021'
+ run: 'text 12/12/2022'
}, {
trigger: ".modal-footer button"
}, {
- trigger: ".o_rightpanel_left_button:eq(0)"
-}, {
- trigger: ".breadcrumb :contains('Tasks Analysis')",
-}, {
- trigger: ".o_back_button"
-}, {
- trigger: ".o_rightpanel_left_button:eq(1)"
-}, {
- trigger: ".breadcrumb :contains('Burndown Chart')",
-}, {
- trigger: ".o_back_button"
-}, {
+ trigger: '.o_back_button',
+ content: 'Go back to edit to the list view',
+
trigger: ".o_open_milestone:eq(1) .o_milestone_detail span:eq(0)",
extra_trigger: ".o_add_milestone a",
run: function () {
@@ -120,25 +195,35 @@ tour.register('project_update_tour', {
}, {
trigger: ".modal-footer button"
}, {
- trigger: ".o-kanban-button-new"
+ trigger: ".o-kanban-button-new",
+ content: "Create a new update"
}, {
trigger: "input.o_field_widget[name=name]",
run: 'text New update'
}, {
trigger: ".o_form_button_save"
}, {
- trigger: ".o_field_widget[name=description] :contains('1 tasks are open, out of 2.')",
+ trigger: ".o_field_widget[name=description] h1:contains('Activities')",
run: function () {},
}, {
- trigger: ".o_field_widget[name=description] :contains('2 were created')",
+ trigger: ".o_field_widget[name=description] h3:contains('Sold')",
+ run: function () {},
+ }, {
+ trigger: ".o_field_widget[name=description] td:contains('Customer Care')",
run: function () {},
}, {
- trigger: ".o_field_widget[name=description] :contains('1 was closed')",
+ trigger: ".o_field_widget[name=description] h3:contains('Profitability')",
run: function () {},
}, {
- trigger: ".o_field_widget[name=description] :contains('New milestone') :contains('(due on 12/12/2100)')",
+ trigger: ".o_field_widget[name=description] h3:contains('Milestones')",
run: function () {},
}, {
- trigger: ".o_field_widget[name=description] :contains('New milestone') :contains('(12/12/2099 => 12/12/2100)')",
+ trigger: ".o_field_widget[name=description] div[name='milestone'] ul li:contains('(12/12/2099 => 12/12/2100)')",
+ run: function () {},
+}, {
+ trigger: ".o_field_widget[name=description] div[name='milestone'] ul li span:contains('(due on 12/12/2022)')",
+ run: function () {},
+}, {
+ trigger: ".o_field_widget[name=description] div[name='milestone'] ul li span:contains('(due on 12/12/2100)')",
run: function () {},
}]);
diff --git a/addons/project/tests/test_project_update_flow.py b/addons/project/tests/test_project_update_flow.py
index 18179a572dd..4435f265197 100644
--- a/addons/project/tests/test_project_update_flow.py
+++ b/addons/project/tests/test_project_update_flow.py
@@ -26,8 +26,7 @@ class TestProjectUpdate(TestProjectCommon):
self.assertEqual(update.user_id, self.env.user, "The author is the user who created the update.")
self.assertNotEqual(len(update.description), 0, "The description should not be empty.")
- self.assertTrue("Tasks" in update.description, "The description should contain 'Tasks'.")
- self.assertTrue("Milestone" in update.description, "The description should contain 'Milestone'.")
+ self.assertTrue("Activities" in update.description, "The description should contain 'Activities'.")
self.assertEqual(update.status, 'on_track', "The status should be the default one.")
with Form(self.env['project.update'].with_context({'default_project_id': self.project_pigs.id})) as update_form:
@@ -48,11 +47,6 @@ class TestProjectUpdate(TestProjectCommon):
template_values = self.env['project.update']._get_template_values(self.project_pigs)
- self.assertEqual(template_values['tasks']['open_tasks'], 2, "Open tasks should be equal to 2")
- self.assertEqual(template_values['tasks']['total_tasks'], 2, "Total tasks should be equal to 2")
- self.assertEqual(template_values['tasks']['created_tasks'], 2, "Created tasks should be equal to 2")
- self.assertEqual(template_values['tasks']['closed_tasks'], 0, "Closed tasks should be equal to 0")
-
self.assertEqual(len(template_values['milestones']['list']), 2, "Milestone list length should be equal to 2")
self.assertEqual(len(template_values['milestones']['created']), 3, "Milestone created length tasks should be equal to 3")
@@ -70,7 +64,6 @@ class TestProjectUpdate(TestProjectCommon):
panel_data = self.project_pigs.get_panel_data()
- self.assertEqual(len(panel_data['tasks_analysis']['data']), 2, "Panel data should contain 'tasks' entry")
self.assertEqual(len(panel_data['milestones']['data']), 3, "Panel data should contain 'milestone' entry")
self.assertFalse(panel_data['milestones']['data'][0]['is_deadline_exceeded'], "Milestone is achieved")
self.assertTrue(panel_data['milestones']['data'][1]['is_deadline_exceeded'], "Milestone is exceeded")
diff --git a/addons/project/views/project_update_templates.xml b/addons/project/views/project_update_templates.xml
index 459b1e56ec6..42a21c0565a 100644
--- a/addons/project/views/project_update_templates.xml
+++ b/addons/project/views/project_update_templates.xml
@@ -10,23 +10,19 @@
-
-
Tasks
-
- tasks are open tasks are open, out of . In the last 30 days,
-
-
were created
-
was created
-
were closed (folded stage)
-
was closed (folded stage)
-
+
+
Sprint Summary
+
How’s this project going?
-
+
+
Activities
+
-
Milestones
+
+
Milestones
@@ -39,8 +35,8 @@
-Over the last 30 days, the deadline of the following milestones has been updated :
-Over the last 30 days, the deadline of the following milestone has been updated :
+The deadline of the following milestones has been updated since the last project update () :
+The deadline of the following milestone has been updated since the last project update () :
@@ -51,8 +47,8 @@
-The following milestones have been added :
-The following milestone has been added :
+The following milestones have been added since the last project update () :
+The following milestone has been added since the last project update () :