[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:
Raouf
2022-10-21 18:10:59 +02:00
parent 470674ead4
commit ead52d72a7
2 changed files with 29 additions and 1 deletions
+10 -1
View File
@@ -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):
+19
View File
@@ -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)