From 0e9498a345fb9fca64f9aa50b9c6e337acfc6747 Mon Sep 17 00:00:00 2001 From: hiroh-odoo Date: Wed, 16 Nov 2022 11:27:32 +0000 Subject: [PATCH] [IMP] project,sale_timesheet: improve generic ux Purpose of this commit is to improve the generic usage of the project app. So in this commit done the following changes: - add done task count field in milestone and display it in milestone form view stat button all tasks under this milestone and the done tasks of the milestone. - rename 'project.project' form view field lable from 'Name of the tasks' to 'Name of the Tasks'. - add 'invoiced' column in the project update description under the sales section. - remove helper for 'project.project' name field in form view. - add a placeholder in the 'project.task' form view. task-3073860 closes odoo/odoo#107076 Related: odoo/enterprise#34593 Signed-off-by: Xavier Bol (xbo) --- addons/project/models/project_milestone.py | 12 +++++++++--- addons/project/models/project_project.py | 3 +-- addons/project/views/project_milestone_views.xml | 8 ++++++-- addons/project/views/project_project_views.xml | 2 +- addons/project/views/project_task_views.xml | 2 +- addons/sale_timesheet/models/project_update.py | 2 ++ .../views/project_update_templates.xml | 2 ++ 7 files changed, 22 insertions(+), 9 deletions(-) diff --git a/addons/project/models/project_milestone.py b/addons/project/models/project_milestone.py index ba6645d0434..24fef86195b 100644 --- a/addons/project/models/project_milestone.py +++ b/addons/project/models/project_milestone.py @@ -25,6 +25,7 @@ class ProjectMilestone(models.Model): is_deadline_exceeded = fields.Boolean(compute="_compute_is_deadline_exceeded") is_deadline_future = fields.Boolean(compute="_compute_is_deadline_future") task_count = fields.Integer('# of Tasks', compute='_compute_task_count', groups='project.group_project_milestone') + done_task_count = fields.Integer('# of Done Tasks', compute='_compute_task_count', groups='project.group_project_milestone') can_be_marked_as_done = fields.Boolean(compute='_compute_can_be_marked_as_done', groups='project.group_project_milestone') @api.depends('is_reached') @@ -45,10 +46,15 @@ class ProjectMilestone(models.Model): @api.depends('task_ids.milestone_id') def _compute_task_count(self): - task_read_group = self.env['project.task']._read_group([('milestone_id', 'in', self.ids), ('allow_milestones', '=', True)], ['milestone_id'], ['milestone_id']) - task_count_per_milestone = {res['milestone_id'][0]: res['milestone_id_count'] for res in task_read_group} + all_and_done_task_count_per_milestone = { + group['milestone_id'][0]: (group['milestone_id_count'], group['is_closed'].count(True)) + for group in self.env['project.task']._read_group( + [('milestone_id', 'in', self.ids), ('allow_milestones', '=', True)], + ['milestone_id', 'is_closed:array_agg'], ['milestone_id'] + ) + } for milestone in self: - milestone.task_count = task_count_per_milestone.get(milestone.id, 0) + milestone.task_count, milestone.done_task_count = all_and_done_task_count_per_milestone.get(milestone.id, (0, 0)) def _compute_can_be_marked_as_done(self): if not any(self._ids): diff --git a/addons/project/models/project_project.py b/addons/project/models/project_project.py index a4d89ab3fc7..1ebd49a71c0 100644 --- a/addons/project/models/project_project.py +++ b/addons/project/models/project_project.py @@ -97,8 +97,7 @@ class Project(models.Model): def _read_group_stage_ids(self, stages, domain, order): return self.env['project.project.stage'].search([], order=order) - name = fields.Char("Name", index='trigram', required=True, tracking=True, translate=True, default_export_compatible=True, - help="Name of your project. It can be anything you want e.g. the name of a customer or a service.") + name = fields.Char("Name", index='trigram', required=True, tracking=True, translate=True, default_export_compatible=True) description = fields.Html(help="Description to provide more information and context about this project") active = fields.Boolean(default=True, help="If the active field is set to False, it will allow you to hide the project without removing it.") diff --git a/addons/project/views/project_milestone_views.xml b/addons/project/views/project_milestone_views.xml index 10b91d16485..3e8c3284abb 100644 --- a/addons/project/views/project_milestone_views.xml +++ b/addons/project/views/project_milestone_views.xml @@ -18,9 +18,13 @@ >
- + + Tasks + + + + Done - Tasks
diff --git a/addons/project/views/project_project_views.xml b/addons/project/views/project_project_views.xml index 9bc0403db7f..1349c35f5fc 100644 --- a/addons/project/views/project_project_views.xml +++ b/addons/project/views/project_project_views.xml @@ -60,7 +60,7 @@ - + diff --git a/addons/project/views/project_task_views.xml b/addons/project/views/project_task_views.xml index 196e8c1c735..4e1541ff218 100644 --- a/addons/project/views/project_task_views.xml +++ b/addons/project/views/project_task_views.xml @@ -368,7 +368,7 @@ name="task_properties" nolabel="1" columns="2" hideKanbanOption="1"/> - + Sold Delivered Remaining +Invoiced @@ -20,6 +21,7 @@ +