diff --git a/addons/hr_timesheet/controllers/portal.py b/addons/hr_timesheet/controllers/portal.py index 30e61e4f2ec..93d54d12492 100644 --- a/addons/hr_timesheet/controllers/portal.py +++ b/addons/hr_timesheet/controllers/portal.py @@ -33,8 +33,8 @@ class TimesheetCustomerPortal(CustomerPortal): 'name': {'input': 'name', 'label': _('Search in Description')}, } - def _task_get_searchbar_sortings(self, milestones_allowed): - values = super()._task_get_searchbar_sortings(milestones_allowed) + def _task_get_searchbar_sortings(self, milestones_allowed, project=False): + values = super()._task_get_searchbar_sortings(milestones_allowed, project) values['progress'] = {'label': _('Progress'), 'order': 'progress asc', 'sequence': 10} return values diff --git a/addons/project/controllers/portal.py b/addons/project/controllers/portal.py index 04a52235b6f..b3fd5cb1932 100644 --- a/addons/project/controllers/portal.py +++ b/addons/project/controllers/portal.py @@ -33,7 +33,7 @@ class ProjectCustomerPortal(CustomerPortal): domain = [('project_id', '=', project.id)] # pager url = "/my/projects/%s" % project.id - values = self._prepare_tasks_values(page, date_begin, date_end, sortby, search, search_in, groupby, url, domain, su=bool(access_token)) + values = self._prepare_tasks_values(page, date_begin, date_end, sortby, search, search_in, groupby, url, domain, su=bool(access_token), project=project) pager = portal_pager(**values['pager']) values.update( @@ -264,11 +264,10 @@ class ProjectCustomerPortal(CustomerPortal): return values - def _task_get_searchbar_sortings(self, milestones_allowed): + def _task_get_searchbar_sortings(self, milestones_allowed, project=False): values = { 'date': {'label': _('Newest'), 'order': 'create_date desc', 'sequence': 1}, 'name': {'label': _('Title'), 'order': 'name', 'sequence': 2}, - 'project': {'label': _('Project'), 'order': 'project_id, stage_id', 'sequence': 3}, 'users': {'label': _('Assignees'), 'order': 'user_ids', 'sequence': 4}, 'stage': {'label': _('Stage'), 'order': 'stage_id, project_id', 'sequence': 5}, 'status': {'label': _('Status'), 'order': 'state', 'sequence': 6}, @@ -276,19 +275,22 @@ class ProjectCustomerPortal(CustomerPortal): 'date_deadline': {'label': _('Deadline'), 'order': 'date_deadline asc', 'sequence': 9}, 'update': {'label': _('Last Stage Update'), 'order': 'date_last_stage_update desc', 'sequence': 11}, } + if not project: + values['project'] = {'label': _('Project'), 'order': 'project_id, stage_id', 'sequence': 3} if milestones_allowed: values['milestone'] = {'label': _('Milestone'), 'order': 'milestone_id', 'sequence': 7} return values - def _task_get_searchbar_groupby(self, milestones_allowed): + def _task_get_searchbar_groupby(self, milestones_allowed, project=False): values = { 'none': {'input': 'none', 'label': _('None'), 'order': 1}, - 'project': {'input': 'project', 'label': _('Project'), 'order': 2}, 'stage': {'input': 'stage', 'label': _('Stage'), 'order': 4}, 'status': {'input': 'status', 'label': _('Status'), 'order': 5}, 'priority': {'input': 'priority', 'label': _('Priority'), 'order': 7}, 'customer': {'input': 'customer', 'label': _('Customer'), 'order': 10}, } + if not project: + values['project'] = {'input': 'project', 'label': _('Project'), 'order': 2} if milestones_allowed: values['milestone'] = {'input': 'milestone', 'label': _('Milestone'), 'order': 6} return dict(sorted(values.items(), key=lambda item: item[1]["order"])) @@ -310,18 +312,20 @@ class ProjectCustomerPortal(CustomerPortal): return order return '%s, %s' % (field_name, order) - def _task_get_searchbar_inputs(self, milestones_allowed): + def _task_get_searchbar_inputs(self, milestones_allowed, project=False): values = { 'all': {'input': 'all', 'label': _('Search in All'), 'order': 1}, 'content': {'input': 'content', 'label': Markup(_('Search (in Content)')), 'order': 1}, 'ref': {'input': 'ref', 'label': _('Search in Ref'), 'order': 1}, - 'project': {'input': 'project', 'label': _('Search in Project'), 'order': 2}, 'users': {'input': 'users', 'label': _('Search in Assignees'), 'order': 3}, 'stage': {'input': 'stage', 'label': _('Search in Stages'), 'order': 4}, 'status': {'input': 'status', 'label': _('Search in Status'), 'order': 5}, 'priority': {'input': 'priority', 'label': _('Search in Priority'), 'order': 7}, + 'customer': {'input': 'customer', 'label': _('Search in Customer'), 'order': 10}, 'message': {'input': 'message', 'label': _('Search in Messages'), 'order': 11}, } + if not project: + values['project'] = {'input': 'project', 'label': _('Search in Project'), 'order': 2} if milestones_allowed: values['milestone'] = {'input': 'milestone', 'label': _('Search in Milestone'), 'order': 6} @@ -354,16 +358,16 @@ class ProjectCustomerPortal(CustomerPortal): search_domain.append([('state', 'ilike', state_dict.get(search, search))]) return OR(search_domain) - def _prepare_tasks_values(self, page, date_begin, date_end, sortby, search, search_in, groupby, url="/my/tasks", domain=None, su=False): + def _prepare_tasks_values(self, page, date_begin, date_end, sortby, search, search_in, groupby, url="/my/tasks", domain=None, su=False, project=False): values = self._prepare_portal_layout_values() Task = request.env['project.task'] milestone_domain = AND([domain, [('allow_milestones', '=', 'True')]]) milestones_allowed = Task.sudo().search_count(milestone_domain, limit=1) == 1 - searchbar_sortings = dict(sorted(self._task_get_searchbar_sortings(milestones_allowed).items(), + searchbar_sortings = dict(sorted(self._task_get_searchbar_sortings(milestones_allowed, project).items(), key=lambda item: item[1]["sequence"])) - searchbar_inputs = self._task_get_searchbar_inputs(milestones_allowed) - searchbar_groupby = self._task_get_searchbar_groupby(milestones_allowed) + searchbar_inputs = self._task_get_searchbar_inputs(milestones_allowed, project) + searchbar_groupby = self._task_get_searchbar_groupby(milestones_allowed, project) if not domain: domain = [] @@ -379,6 +383,8 @@ class ProjectCustomerPortal(CustomerPortal): # default group by value if not groupby or (groupby == 'milestone' and not milestones_allowed): groupby = 'project' + if project: + groupby = 'stage' if date_begin and date_end: domain += [('create_date', '>', date_begin), ('create_date', '<=', date_end)] diff --git a/addons/project/models/project_project.py b/addons/project/models/project_project.py index 1ebd49a71c0..646aa061e50 100644 --- a/addons/project/models/project_project.py +++ b/addons/project/models/project_project.py @@ -771,6 +771,9 @@ class Project(models.Model): # Business Methods # --------------------------------------------------- + def _get_hide_partner(self): + return False + @api.model def _create_analytic_account_from_values(self, values): company = self.env['res.company'].browse(values.get('company_id')) if values.get('company_id') else self.env.company diff --git a/addons/project/models/project_task.py b/addons/project/models/project_task.py index a5f78e3f247..e415efd49cc 100644 --- a/addons/project/models/project_task.py +++ b/addons/project/models/project_task.py @@ -179,10 +179,6 @@ class Task(models.Model): string='Customer', recursive=True, tracking=True, compute='_compute_partner_id', store=True, readonly=False, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]") - partner_phone = fields.Char( - compute='_compute_partner_phone', inverse='_inverse_partner_phone', - string="Phone", readonly=False, store=True, copy=False) - partner_city = fields.Char(related='partner_id.city', readonly=False) email_cc = fields.Char(help='Email addresses that were in the CC of the incoming emails from this task and that are not currently linked to an existing customer.') company_id = fields.Many2one( 'res.company', string='Company', compute='_compute_company_id', store=True, readonly=False, recursive=True, @@ -469,17 +465,6 @@ class Task(models.Model): for task in tasks_with_dependency: task.dependent_tasks_count = dependent_tasks_count_dict.get(task.id, 0) - @api.depends('partner_id.phone') - def _compute_partner_phone(self): - for task in self: - if task.partner_phone != task.partner_id.phone: - task.partner_phone = task.partner_id.phone - - def _inverse_partner_phone(self): - for task in self: - if task.partner_id and task.partner_phone != task.partner_id.phone: - task.partner_id.phone = task.partner_phone - @api.constrains('parent_id') def _check_parent_id(self): if not self._check_recursion(): diff --git a/addons/project/models/project_task_recurrence.py b/addons/project/models/project_task_recurrence.py index f43e1cd8e12..c20b15c994b 100644 --- a/addons/project/models/project_task_recurrence.py +++ b/addons/project/models/project_task_recurrence.py @@ -48,7 +48,6 @@ class ProjectTaskRecurrence(models.Model): 'name', 'parent_id', 'partner_id', - 'partner_phone', 'planned_hours', 'project_id', 'project_privacy_visibility', diff --git a/addons/project/views/project_sharing_project_task_views.xml b/addons/project/views/project_sharing_project_task_views.xml index 3589bcbc01d..20802099d53 100644 --- a/addons/project/views/project_sharing_project_task_views.xml +++ b/addons/project/views/project_sharing_project_task_views.xml @@ -175,7 +175,7 @@ - + @@ -198,7 +198,7 @@ attrs="{'invisible': [('allow_milestones', '=', False)], 'column_invisible': [('parent.allow_milestones', '=', False)]}" /> - + diff --git a/addons/project/views/project_task_views.xml b/addons/project/views/project_task_views.xml index 43c3cf361b0..adb4224d562 100644 --- a/addons/project/views/project_task_views.xml +++ b/addons/project/views/project_task_views.xml @@ -52,7 +52,7 @@ 999 - + @@ -61,7 +61,7 @@ - + @@ -342,7 +342,6 @@ -