diff --git a/addons/project/data/project_demo.xml b/addons/project/data/project_demo.xml
index c8b388a39b7..f8b0a6ddb0a 100644
--- a/addons/project/data/project_demo.xml
+++ b/addons/project/data/project_demo.xml
@@ -11,6 +11,10 @@
+
+
+
+
diff --git a/addons/project/models/project.py b/addons/project/models/project.py
index 82c5ec9b59b..1410b39ae0a 100644
--- a/addons/project/models/project.py
+++ b/addons/project/models/project.py
@@ -45,6 +45,9 @@ PROJECT_TASK_READABLE_FIELDS = {
'legend_done',
'user_ids',
'display_parent_task_button',
+ 'allow_milestones',
+ 'milestone_id',
+ 'has_late_and_unreached_milestone',
}
PROJECT_TASK_WRITABLE_FIELDS = {
@@ -1138,7 +1141,6 @@ class Task(models.Model):
has_late_and_unreached_milestone = fields.Boolean(
compute='_compute_has_late_and_unreached_milestone',
search='_search_has_late_and_unreached_milestone',
- groups='project.group_project_milestone',
)
# Task Dependencies fields
@@ -2024,7 +2026,7 @@ class Task(models.Model):
if all(not task.allow_milestones for task in self):
self.has_late_and_unreached_milestone = False
return
- late_milestones = self.env['project.milestone']._search([
+ late_milestones = self.env['project.milestone'].sudo()._search([ # sudo is needed for the portal user in Project Sharing.
('id', 'in', self.milestone_id.ids),
('is_reached', '=', False),
('deadline', '<', fields.Date.today()),
diff --git a/addons/project/models/res_config_settings.py b/addons/project/models/res_config_settings.py
index 0dd42cc8a62..93ebc05699a 100644
--- a/addons/project/models/res_config_settings.py
+++ b/addons/project/models/res_config_settings.py
@@ -14,7 +14,7 @@ class ResConfigSettings(models.TransientModel):
group_project_stages = fields.Boolean("Project Stages", implied_group="project.group_project_stages")
group_project_recurring_tasks = fields.Boolean("Recurring Tasks", implied_group="project.group_project_recurring_tasks")
group_project_task_dependencies = fields.Boolean("Task Dependencies", implied_group="project.group_project_task_dependencies")
- group_project_milestone = fields.Boolean('Milestones', implied_group='project.group_project_milestone')
+ group_project_milestone = fields.Boolean('Milestones', implied_group='project.group_project_milestone', group='base.group_portal,base.group_user')
rating_status = fields.Selection(
[('stage', 'Rating when changing stage'),
('periodic', 'Periodic rating')
diff --git a/addons/project/views/project_sharing_views.xml b/addons/project/views/project_sharing_views.xml
index a148174051b..f5d06ca7d48 100644
--- a/addons/project/views/project_sharing_views.xml
+++ b/addons/project/views/project_sharing_views.xml
@@ -44,6 +44,8 @@
+
+
@@ -56,6 +58,10 @@
+
+
+
+
@@ -119,10 +125,12 @@
+
+
@@ -179,6 +187,13 @@
+
+
+
+
@@ -240,6 +261,7 @@
+
@@ -253,6 +275,7 @@
domain="[('activity_ids.date_deadline', '>', context_today().strftime('%Y-%m-%d'))]"/>
+