[FIX] project: add missing stage when import tasks
Before this commit: Let's consider project P1 having no stages. Let's consider project P2 having Stage 1, Stage 2 When importing tasks via csv file: - Task 1 for project P1 and Stage 1 - Task 2 for project P1 and Stage 2 Stage 1 and Stage 2 are still assigned only to project P1. After this commit: Stage 1 and Stage 2 are now assigned to P1 and P2. Task-2996393 closes odoo/odoo#103819 X-original-commit: 2e6a7741dd2c993daa1b1aafe4ebd422cd57235c Signed-off-by: Xavier <xbo@odoo.com>
This commit is contained in:
@@ -1931,7 +1931,16 @@ class Task(models.Model):
|
||||
project_id = vals.get('project_id')
|
||||
if project_id:
|
||||
self = self.with_context(default_project_id=project_id)
|
||||
return super()._load_records_create(vals_list)
|
||||
tasks = super()._load_records_create(vals_list)
|
||||
stage_ids_per_project = defaultdict(list)
|
||||
for task in tasks:
|
||||
if task.stage_id and task.stage_id not in task.project_id.type_ids and task.stage_id.id not in stage_ids_per_project[task.project_id]:
|
||||
stage_ids_per_project[task.project_id].append(task.stage_id.id)
|
||||
|
||||
for project, stage_ids in stage_ids_per_project.items():
|
||||
project.write({'type_ids': [Command.link(stage_id) for stage_id in stage_ids]})
|
||||
|
||||
return tasks
|
||||
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
|
||||
@@ -120,3 +120,22 @@ class TestProjectBase(TestProjectCommon):
|
||||
|
||||
project_unlink.unlink()
|
||||
self.assertNotEqual(task_count, 0, "The all tasks linked to project should be deleted when user delete the project")
|
||||
|
||||
def test_auto_assign_stages_when_importing_tasks(self):
|
||||
self.assertFalse(self.project_pigs.type_ids)
|
||||
self.assertEqual(len(self.project_goats.type_ids), 2)
|
||||
first_stage = self.project_goats.type_ids[0]
|
||||
self.env['project.task']._load_records_create([{
|
||||
'name': 'First Task',
|
||||
'project_id': self.project_pigs.id,
|
||||
'stage_id': first_stage.id,
|
||||
}])
|
||||
self.assertEqual(self.project_pigs.type_ids, first_stage)
|
||||
self.env['project.task']._load_records_create([
|
||||
{
|
||||
'name': 'task',
|
||||
'project_id': self.project_pigs.id,
|
||||
'stage_id': stage.id,
|
||||
} for stage in self.project_goats.type_ids
|
||||
])
|
||||
self.assertEqual(self.project_pigs.type_ids, self.project_goats.type_ids)
|
||||
|
||||
Reference in New Issue
Block a user