summaryrefslogtreecommitdiff
path: root/addons/project/models/project.py
diff options
context:
space:
mode:
authorVictor Feyens <vfe@odoo.com>2020-04-29 16:53:13 +0200
committerVictor Feyens <vfe@odoo.com>2020-06-15 17:36:01 +0200
commit2b10b3d75ec2d3924f0513c43ebf97ddf2ba6e7c (patch)
tree10f439182322eff269880558299287a1a799700c /addons/project/models/project.py
parentc5d7b11b171cfb034e86687a9a263c1f9ec7b1ae (diff)
[IMP] project: create tasks in batch
Diffstat (limited to 'addons/project/models/project.py')
-rw-r--r--addons/project/models/project.py45
1 files changed, 27 insertions, 18 deletions
diff --git a/addons/project/models/project.py b/addons/project/models/project.py
index b2cb1b25a9a..70c5f58f4dc 100644
--- a/addons/project/models/project.py
+++ b/addons/project/models/project.py
@@ -735,7 +735,7 @@ class Task(models.Model):
self.company_id = self.project_id.company_id
else:
self.stage_id = False
-
+
@api.onchange('company_id')
def _onchange_task_company(self):
if self.project_id.company_id != self.company_id:
@@ -805,23 +805,32 @@ class Task(models.Model):
# CRUD overrides
# ------------------------------------------------
- @api.model
- def create(self, vals):
- # context: no_log, because subtype already handle this
- context = dict(self.env.context)
- stage_id = vals.get('stage_id') or context.get('default_stage_id') or False
- # for default stage
- if vals.get('project_id') and not context.get('default_project_id'):
- context['default_project_id'] = vals.get('project_id')
- # user_id change: update date_assign
- if vals.get('user_id'):
- vals['date_assign'] = fields.Datetime.now()
- # Stage change: Update date_end if folded stage and date_last_stage_update
- if stage_id:
- vals.update(self.update_date_end(stage_id))
- vals['date_last_stage_update'] = fields.Datetime.now()
- task = super(Task, self.with_context(context)).create(vals)
- return task
+ @api.model_create_multi
+ def create(self, vals_list):
+ default_stage = dict()
+ for vals in vals_list:
+ project_id = vals.get('project_id') or self.env.context.get('default_project_id')
+ if project_id and not "company_id" in vals:
+ vals["company_id"] = self.env["project.project"].browse(
+ project_id
+ ).company_id.id or self.env.company.id
+ if project_id and "stage_id" not in vals:
+ # 1) Allows keeping the batch creation of tasks
+ # 2) Ensure the defaults are correct (and computed once by project),
+ # by using default get (instead of _get_default_stage_id or _stage_find),
+ if project_id not in default_stage:
+ default_stage[project_id] = self.with_context(
+ default_project_id=project_id
+ ).default_get(['stage_id']).get('stage_id')
+ vals["stage_id"] = default_stage[project_id]
+ # user_id change: update date_assign
+ if vals.get('user_id'):
+ vals['date_assign'] = fields.Datetime.now()
+ # Stage change: Update date_end if folded stage and date_last_stage_update
+ if vals.get('stage_id'):
+ vals.update(self.update_date_end(vals['stage_id']))
+ vals['date_last_stage_update'] = fields.Datetime.now()
+ return super().create(vals_list)
def write(self, vals):
now = fields.Datetime.now()