summaryrefslogtreecommitdiff
path: root/addons/project
diff options
context:
space:
mode:
Diffstat (limited to 'addons/project')
-rw-r--r--addons/project/models/project.py74
1 files changed, 21 insertions, 53 deletions
diff --git a/addons/project/models/project.py b/addons/project/models/project.py
index d7d10055c7f..3581a360ce6 100644
--- a/addons/project/models/project.py
+++ b/addons/project/models/project.py
@@ -436,24 +436,6 @@ class Task(models.Model):
_order = "priority desc, sequence, id desc"
_check_company_auto = True
- @api.model
- def default_get(self, fields_list):
- result = super(Task, self).default_get(fields_list)
- # find default value from parent for the not given ones
- parent_task_id = result.get('parent_id') or self._context.get('default_parent_id')
- if parent_task_id:
- parent_values = self._subtask_values_from_parent(parent_task_id)
- for fname, value in parent_values.items():
- if fname not in result:
- result[fname] = value
- return result
-
- @api.model
- def _get_default_partner(self):
- if 'default_project_id' in self.env.context:
- default_project_id = self.env['project.project'].browse(self.env.context['default_project_id'])
- return default_project_id.exists().partner_id
-
def _get_default_stage_id(self):
""" Gives default stage_id """
project_id = self.env.context.get('default_project_id')
@@ -504,7 +486,8 @@ class Task(models.Model):
index=True,
copy=False,
readonly=True)
- project_id = fields.Many2one('project.project', string='Project', default=lambda self: self.env.context.get('default_project_id'),
+ project_id = fields.Many2one('project.project', string='Project',
+ compute='_compute_project_id', store=True, readonly=False,
index=True, tracking=True, check_company=True, change_default=True)
planned_hours = fields.Float("Planned Hours", help='It is the time planned to achieve the task. If this document has sub-tasks, it means the time needed to achieve this tasks and its childs.',tracking=True)
subtask_planned_hours = fields.Float("Subtasks", compute='_compute_subtask_planned_hours', help="Computed using sum of hours planned of all subtasks created from main task. Usually these hours are less or equal to the Planned Hours (of main task).")
@@ -514,7 +497,7 @@ class Task(models.Model):
index=True, tracking=True)
partner_id = fields.Many2one('res.partner',
string='Customer',
- default=lambda self: self._get_default_partner(),
+ compute='_compute_partner_id', store=True, readonly=False,
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]")
partner_city = fields.Char(related='partner_id.city', readonly=False)
manager_id = fields.Many2one('res.users', string='Project Manager', related='project_id.user_id', readonly=True, related_sudo=False)
@@ -532,7 +515,8 @@ class Task(models.Model):
child_ids = fields.One2many('project.task', 'parent_id', string="Sub-tasks", context={'active_test': False})
subtask_project_id = fields.Many2one('project.project', related="project_id.subtask_project_id", string='Sub-task Project', readonly=True)
subtask_count = fields.Integer("Sub-task count", compute='_compute_subtask_count')
- email_from = fields.Char(string='Email', help="These people will receive email.", index=True)
+ email_from = fields.Char(string='Email', help="These people will receive email.", index=True,
+ compute='_compute_email_from', store="True", readonly=False)
# Computed field about working time elapsed between record creation and assignation/closing.
working_hours_open = fields.Float(compute='_compute_elapsed', string='Working hours to assign', store=True, group_operator="avg")
working_hours_close = fields.Float(compute='_compute_elapsed', string='Working hours to close', store=True, group_operator="avg")
@@ -610,17 +594,6 @@ class Task(models.Model):
for task in self:
task.subtask_count = mapping.get(task.id, 0)
- @api.onchange('partner_id')
- def _onchange_partner_id(self):
- self.email_from = self.partner_id.email
-
- @api.onchange('parent_id')
- def _onchange_parent_id(self):
- if self.parent_id:
- for field_name, value in self._subtask_values_from_parent(self.parent_id.id).items():
- if not self[field_name]:
- self[field_name] = value
-
@api.onchange('project_id')
def _onchange_project(self):
if self.project_id:
@@ -713,11 +686,6 @@ class Task(models.Model):
if vals.get('stage_id'):
vals.update(self.update_date_end(vals['stage_id']))
vals['date_last_stage_update'] = fields.Datetime.now()
- # substask default values
- if vals.get('parent_id'):
- for fname, value in self._subtask_values_from_parent(vals['parent_id']).items():
- if fname not in vals:
- vals[fname] = value
task = super(Task, self.with_context(context)).create(vals)
return task
@@ -750,19 +718,22 @@ class Task(models.Model):
# Subtasks
# ---------------------------------------------------
- def _subtask_default_fields(self):
- """ Return the list of field name for default value when creating a subtask """
- return ['partner_id', 'email_from']
+ @api.depends('parent_id.partner_id', 'project_id.partner_id')
+ def _compute_partner_id(self):
+ for task in self:
+ if not task.partner_id:
+ task.partner_id = task.parent_id.partner_id or task.project_id.partner_id
+
+ @api.depends('partner_id.email', 'parent_id.email_from')
+ def _compute_email_from(self):
+ for task in self:
+ task.email_from = task.partner_id.email or task.email_from or task.parent_id.email_from
- def _subtask_values_from_parent(self, parent_id):
- """ Get values for substask implied field of the given"""
- result = {}
- parent_task = self.env['project.task'].browse(parent_id)
- for field_name in self._subtask_default_fields():
- result[field_name] = parent_task[field_name]
- # special case for the subtask default project
- result['project_id'] = parent_task.project_id.subtask_project_id
- return self._convert_to_write(result)
+ @api.depends('parent_id.project_id.subtask_project_id')
+ def _compute_project_id(self):
+ for task in self:
+ if not task.project_id:
+ task.project_id = task.parent_id.project_id.subtask_project_id
# ---------------------------------------------------
# Mail gateway
@@ -935,10 +906,7 @@ class Task(models.Model):
'default_company_id': default_project.company_id.id if default_project else self.env.company.id,
'search_default_parent_id': self.id,
})
- parent_values = self._subtask_values_from_parent(self.id)
- for fname, value in parent_values.items():
- if 'default_' + fname not in ctx:
- ctx['default_' + fname] = value
+
action['context'] = ctx
return action