diff options
| author | Kevin Baptiste <kba@odoo.com> | 2020-02-27 13:06:27 +0000 |
|---|---|---|
| committer | Yannick Tivisse <yti@odoo.com> | 2020-05-08 08:12:51 +0000 |
| commit | 42c430a539711e3b4f27b9e53fb449bb34a8d463 (patch) | |
| tree | eb60044953801e296763aa89e8e96039d84a19a5 /addons/project/models | |
| parent | a9d117178f815455461e9475e324eef2f12cecca (diff) | |
[IMP] project: add closed stage in project
closes odoo/odoo#46749
Taskid: 2205057
Related: odoo/enterprise#9119
Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
Diffstat (limited to 'addons/project/models')
| -rw-r--r-- | addons/project/models/project.py | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/addons/project/models/project.py b/addons/project/models/project.py index 5ae41e236c7..8accaa81de7 100644 --- a/addons/project/models/project.py +++ b/addons/project/models/project.py @@ -50,6 +50,7 @@ class ProjectTaskType(models.Model): help="Automatically modify the kanban state when the customer replies to the feedback for this stage.\n" " * A good feedback from the customer will update the kanban state to 'ready for the new stage' (green bullet).\n" " * A medium or a bad feedback will set the kanban state to 'blocked' (red bullet).\n") + is_closed = fields.Boolean('Closing Stage', help="Tasks in this stage are considered as closed.") def unlink_wizard(self, stage_view=False): self = self.with_context(active_test=False) @@ -102,7 +103,7 @@ class Project(models.Model): ]) def _compute_task_count(self): - task_data = self.env['project.task'].read_group([('project_id', 'in', self.ids), '|', ('stage_id.fold', '=', False), ('stage_id', '=', False)], ['project_id'], ['project_id']) + task_data = self.env['project.task'].read_group([('project_id', 'in', self.ids), '|', '&', ('stage_id.is_closed', '=', False), ('stage_id.fold', '=', False), ('stage_id', '=', False)], ['project_id'], ['project_id']) result = dict((data['project_id'][0], data['project_id_count']) for data in task_data) for project in self: project.task_count = result.get(project.id, 0) @@ -517,7 +518,7 @@ class Task(models.Model): project_id = self.env.context.get('default_project_id') if not project_id: return False - return self.stage_find(project_id, [('fold', '=', False)]) + return self.stage_find(project_id, [('fold', '=', False), ('is_closed', '=', False)]) @api.model def _default_company_id(self): @@ -592,6 +593,7 @@ class Task(models.Model): legend_blocked = fields.Char(related='stage_id.legend_blocked', string='Kanban Blocked Explanation', readonly=True, related_sudo=False) legend_done = fields.Char(related='stage_id.legend_done', string='Kanban Valid Explanation', readonly=True, related_sudo=False) legend_normal = fields.Char(related='stage_id.legend_normal', string='Kanban Ongoing Explanation', readonly=True, related_sudo=False) + is_closed = fields.Boolean(related="stage_id.is_closed", string="Closing Stage", readonly=True, related_sudo=False) parent_id = fields.Many2one('project.task', string='Parent Task', index=True) 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) @@ -716,7 +718,7 @@ class Task(models.Model): self.partner_id = self.project_id.partner_id # find stage if self.project_id not in self.stage_id.project_ids: - self.stage_id = self.stage_find(self.project_id.id, [('fold', '=', False)]) + self.stage_id = self.stage_find(self.project_id.id, [('fold', '=', False), ('is_closed', '=', False)]) # keep multi company consistency self.company_id = self.project_id.company_id else: @@ -795,6 +797,7 @@ class Task(models.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') @@ -802,8 +805,8 @@ class Task(models.Model): 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'])) + 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 @@ -831,7 +834,7 @@ class Task(models.Model): def update_date_end(self, stage_id): project_task_type = self.env['project.task.type'].browse(stage_id) - if project_task_type.fold: + if project_task_type.fold or project_task_type.is_closed: return {'date_end': fields.Datetime.now()} return {'date_end': False} |
