diff --git a/addons/project/data/mail_message_subtype_data.xml b/addons/project/data/mail_message_subtype_data.xml
index 9ba57898e96..85eaee475f7 100644
--- a/addons/project/data/mail_message_subtype_data.xml
+++ b/addons/project/data/mail_message_subtype_data.xml
@@ -58,13 +58,6 @@
Task Waiting
-
- Task Dependency Changes
- project.task
-
-
-
-
Task Rating
project.task
@@ -113,15 +106,6 @@
project_id
-
- Task Dependency Changes
- 26
- project.project
-
-
- project_id
-
-
Update Created
19
diff --git a/addons/project/models/project_project.py b/addons/project/models/project_project.py
index aa5d0b7db8f..926867e6ded 100644
--- a/addons/project/models/project_project.py
+++ b/addons/project/models/project_project.py
@@ -543,10 +543,8 @@ class Project(models.Model):
if not self.rating_active:
res -= self.env.ref('project.mt_project_task_rating')
if len(self) == 1:
- dependency_subtype = self.env.ref('project.mt_project_task_dependency_change')
waiting_subtype = self.env.ref('project.mt_project_task_waiting')
- if not self.allow_task_dependencies and dependency_subtype in res:
- res -= dependency_subtype
+ if not self.allow_task_dependencies and waiting_subtype in res:
res -= waiting_subtype
return res
diff --git a/addons/project/models/project_task.py b/addons/project/models/project_task.py
index 21cb0b52693..6bdf9dbcdfb 100644
--- a/addons/project/models/project_task.py
+++ b/addons/project/models/project_task.py
@@ -123,7 +123,7 @@ class Task(models.Model):
stage_id = fields.Many2one('project.task.type', string='Stage', compute='_compute_stage_id',
store=True, readonly=False, ondelete='restrict', tracking=True, index=True,
default=_get_default_stage_id, group_expand='_read_group_stage_ids',
- domain="[('project_ids', '=', project_id)]", task_dependency_tracking=True)
+ domain="[('project_ids', '=', project_id)]")
tag_ids = fields.Many2many('project.tags', string='Tags')
state = fields.Selection([
@@ -132,14 +132,14 @@ class Task(models.Model):
('03_approved', 'Approved'),
*CLOSED_STATES.items(),
('04_waiting_normal', 'Waiting'),
- ], string='Status', copy=False, default='01_in_progress', required=True, compute='_compute_state', inverse='_inverse_state', readonly=False, store=True, recursive=True, task_dependency_tracking=True, tracking=True)
+ ], string='Status', copy=False, default='01_in_progress', required=True, compute='_compute_state', inverse='_inverse_state', readonly=False, store=True, recursive=True, tracking=True)
create_date = fields.Datetime("Created On", readonly=True)
write_date = fields.Datetime("Last Updated On", readonly=True)
date_end = fields.Datetime(string='Ending Date', index=True, copy=False)
date_assign = fields.Datetime(string='Assigning Date', copy=False, readonly=True,
help="Date on which this task was last assigned (or unassigned). Based on this, you can get statistics on the time it usually takes to assign tasks.")
- date_deadline = fields.Date(string='Deadline', index=True, copy=False, tracking=True, task_dependency_tracking=True)
+ date_deadline = fields.Date(string='Deadline', index=True, copy=False, tracking=True)
date_last_stage_update = fields.Datetime(string='Last Stage Update',
index=True,
@@ -694,19 +694,6 @@ class Task(models.Model):
)
return super(Task, self).get_empty_list_help(help)
- def _valid_field_parameter(self, field, name):
- # If the field has `task_dependency_tracking` on we track the changes made in the dependent task on the parent task
- return name == 'task_dependency_tracking' or super()._valid_field_parameter(field, name)
-
- @tools.ormcache('self.env.uid', 'self.env.su')
- def _get_depends_tracked_fields(self):
- """ Returns the set of tracked field names for the current model.
- Those fields are the ones tracked in the parent task when using task dependencies.
-
- See :meth:`mail.models.MailThread._track_get_fields`"""
- fields = {name for name, field in self._fields.items() if getattr(field, 'task_dependency_tracking', None)}
- return fields and set(self.fields_get(fields))
-
# ----------------------------------------
# Case management
# ----------------------------------------
@@ -1179,31 +1166,6 @@ class Task(models.Model):
'new_value_char': ', '.join(self[changed_field].mapped('name')),
}
tracking_value_ids.append(Command.create(vals))
- # Track changes on depending tasks
- depends_tracked_fields = self._get_depends_tracked_fields()
- depends_changes = changes & depends_tracked_fields
- if depends_changes and self.allow_task_dependencies and self.user_has_groups('project.group_project_task_dependencies'):
- parent_ids = self.dependent_ids
- if parent_ids:
- fields_to_ids = self.env['ir.model.fields']._get_ids('project.task')
- field_ids = [fields_to_ids.get(name) for name in depends_changes]
- depends_tracking_value_ids = [
- tracking_values for tracking_values in tracking_value_ids
- if tracking_values[2]['field'] in field_ids
- ]
- subtype = self.env['ir.model.data']._xmlid_to_res_id('project.mt_task_dependency_change')
- # We want to include the original subtype message coming from the child task
- # for example when the stage changes the message in the chatter starts with 'Stage Changed'
- child_subtype = self._track_subtype(dict((col_name, initial_values[col_name]) for col_name in changes))
- child_subtype_info = child_subtype.description or child_subtype.name if child_subtype else False
- # NOTE: the subtype does not have a description on purpose, otherwise the description would be put
- # at the end of the message instead of at the top, we use the name here
- body = self.env['ir.qweb']._render('project.task_track_depending_tasks', {
- 'child': self,
- 'child_subtype': child_subtype_info,
- })
- for p in parent_ids:
- p.message_post(body=body, subtype_id=subtype, tracking_value_ids=depends_tracking_value_ids)
return changes, tracking_value_ids
def _track_template(self, changes):
@@ -1242,12 +1204,10 @@ class Task(models.Model):
if not self.project_id.rating_active:
res -= self.env.ref('project.mt_task_rating')
if len(self) == 1:
- dependency_subtype = self.env.ref('project.mt_task_dependency_change')
waiting_subtype = self.env.ref('project.mt_task_waiting')
if ((self.project_id and not self.project_id.allow_task_dependencies)\
or (not self.project_id and not self.user_has_groups('project.group_project_task_dependencies')))\
- and dependency_subtype in res:
- res -= dependency_subtype
+ and waiting_subtype in res:
res -= waiting_subtype
return res
diff --git a/addons/project/models/res_config_settings.py b/addons/project/models/res_config_settings.py
index 0104a1fc762..9238f737cbf 100644
--- a/addons/project/models/res_config_settings.py
+++ b/addons/project/models/res_config_settings.py
@@ -49,14 +49,8 @@ class ResConfigSettings(models.TransientModel):
else:
projects[project_flag] = config_feature_enabled
- # Hide the task dependency changes subtype when the dependency setting is disabled
- task_dep_change_subtype_id = self.env.ref('project.mt_task_dependency_change')
- project_task_dep_change_subtype_id = self.env.ref('project.mt_project_task_dependency_change')
task_waiting_subtype_id = self.env.ref('project.mt_task_waiting')
project_task_waiting_subtype_id = self.env.ref('project.mt_project_task_waiting')
- if task_dep_change_subtype_id.hidden != (not self['group_project_task_dependencies']):
- task_dep_change_subtype_id.hidden = not self['group_project_task_dependencies']
- project_task_dep_change_subtype_id.hidden = not self['group_project_task_dependencies']
if task_waiting_subtype_id.hidden != (not self['group_project_task_dependencies']):
task_waiting_subtype_id.hidden = not self['group_project_task_dependencies']
project_task_waiting_subtype_id.hidden = not self['group_project_task_dependencies']
diff --git a/addons/project/tests/test_task_dependencies.py b/addons/project/tests/test_task_dependencies.py
index aa43c4f53c8..b52647ae20b 100644
--- a/addons/project/tests/test_task_dependencies.py
+++ b/addons/project/tests/test_task_dependencies.py
@@ -93,48 +93,6 @@ class TestTaskDependencies(TestProjectCommon):
})
self.assertEqual(len(self.task_2.depend_on_ids), 1, "The number of dependencies should no change in the task 2 because of a cyclic dependency.")
- def test_tracking_dependencies(self):
- # Enable the company setting
- self.env['res.config.settings'].create({
- 'group_project_task_dependencies': True
- }).execute()
- # `depend_on_ids` is tracked
- self.task_1.with_context(mail_notrack=True).write({
- 'depend_on_ids': [Command.link(self.task_2.id)]
- })
- self.cr.precommit.clear()
- # Check that adding a dependency changes the stage then logs a message in task_1
- self.flush_tracking()
- self.assertEqual(len(self.task_1.message_ids), 1,
- 'Adding task 2 as a dependencie should have logged a message in task 1.')
-
- # Check that changing a dependency tracked field in task_2 logs a message in task_1.
- self.task_2.write({'date_deadline': date(1983, 3, 1)}) # + 1 message in task_1 and task_2
- self.flush_tracking()
- self.assertEqual(len(self.task_1.message_ids), 2,
- 'Changing the deadline on task 2 should have logged a message in task 1.')
-
- # Check that changing a dependency tracked field in task_1 does not log a message in task_2.
- self.task_1.date_deadline = date(2020, 1, 2) # + 1 message in task_1
- self.flush_tracking()
- self.assertEqual(len(self.task_2.message_ids), 1,
- 'Changing the deadline on task 1 should not have logged a message in task 2.')
-
- # Check that changing a field that is not tracked at all on task 2 does not impact task 1.
- self.task_2.color = 100 # no new message
- self.flush_tracking()
- self.assertEqual(len(self.task_1.message_ids), 3,
- 'Changing the color on task 2 should not have logged a message in task 1 since it is not tracked.')
-
- # Check that changing multiple fields does not log more than one message.
- self.task_2.write({
- 'date_deadline': date(2020, 1, 1),
- 'state': '02_changes_requested',
- }) # + 1 message in task_1 and task_2
- self.flush_tracking()
- self.assertEqual(len(self.task_1.message_ids), 4,
- 'Changing multiple fields on task 2 should only log one message in task 1.')
-
def test_task_dependencies_settings_change(self):
def set_task_dependencies_setting(enabled):