From 0829316038e4555b0190317f8ce38d9608234bd9 Mon Sep 17 00:00:00 2001 From: "Xavier BOL (xbo)" Date: Thu, 9 Sep 2021 17:17:43 +0200 Subject: [PATCH 01/13] [IMP] sale_project: allow portal user to click on sale order button Before this commit, in project sharing feature, when the portal user is in task form view, he can see the sale order stat button if a sale order is defined in the task but this button is disabled. This commit allows the portal user to click on this stat button if he has access to the sale order of task. If he cannot access then the stat button will be invisible. And if the portal user clicks on this button, he will be redirect to `/my/orders/`. task-2633229 Closes #82379 --- addons/sale_project/models/project.py | 32 +++++++++++++++++-- .../views/project_sharing_views.xml | 6 ++-- .../views/project_sharing_views.xml | 1 + 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/addons/sale_project/models/project.py b/addons/sale_project/models/project.py index 6de2ed1c4c9..500ff4b709d 100644 --- a/addons/sale_project/models/project.py +++ b/addons/sale_project/models/project.py @@ -4,7 +4,7 @@ from ast import literal_eval from odoo import api, fields, models, _ -from odoo.exceptions import ValidationError, UserError +from odoo.exceptions import ValidationError, AccessError class Project(models.Model): @@ -149,9 +149,12 @@ class ProjectTask(models.Model): invoice_count = fields.Integer("Number of invoices", related='sale_order_id.invoice_count') task_to_invoice = fields.Boolean("To invoice", compute='_compute_task_to_invoice', search='_search_task_to_invoice', groups='sales_team.group_sale_salesman_all_leads') + # Project sharing fields + display_sale_order_button = fields.Boolean(string='Display Sales Order', compute='_compute_display_sale_order_button') + @property def SELF_READABLE_FIELDS(self): - return super().SELF_READABLE_FIELDS | {'sale_order_id', 'sale_line_id'} + return super().SELF_READABLE_FIELDS | {'sale_order_id', 'sale_line_id', 'display_sale_order_button'} @api.depends('sale_line_id', 'project_id', 'commercial_partner_id') def _compute_sale_order_id(self): @@ -177,6 +180,18 @@ class ProjectTask(models.Model): if task.sale_line_id.order_partner_id.commercial_partner_id != task.partner_id.commercial_partner_id: task.sale_line_id = False + @api.depends('sale_order_id') + def _compute_display_sale_order_button(self): + if not self.sale_order_id: + self.display_sale_order_button = False + return + try: + sale_orders = self.env['sale.order'].search([('id', 'in', self.sale_order_id.ids)]) + for task in self: + task.display_sale_order_button = task.sale_order_id in sale_orders + except AccessError: + self.display_sale_order_button = False + @api.constrains('sale_line_id') def _check_sale_line_type(self): for task in self.sudo(): @@ -196,7 +211,6 @@ class ProjectTask(models.Model): return self.sale_order_id.ids def action_view_so(self): - self.ensure_one() so_ids = self._get_action_view_so_ids() action_window = { "type": "ir.actions.act_window", @@ -212,6 +226,18 @@ class ProjectTask(models.Model): return action_window + def action_project_sharing_view_so(self): + self.ensure_one() + if self.user_has_groups('base.group_portal'): + if not self.display_sale_order_button: + return {} + return { + "name": "Portal Sale Order", + "type": "ir.actions.act_url", + "url": self.sale_order_id.access_url, + } + return self.action_view_so() + def rating_get_partner_id(self): partner = self.partner_id or self.sale_line_id.order_id.partner_id if partner: diff --git a/addons/sale_project/views/project_sharing_views.xml b/addons/sale_project/views/project_sharing_views.xml index 85d4b1d8ca6..289b082f07b 100644 --- a/addons/sale_project/views/project_sharing_views.xml +++ b/addons/sale_project/views/project_sharing_views.xml @@ -7,10 +7,10 @@
- +
diff --git a/addons/sale_timesheet/views/project_sharing_views.xml b/addons/sale_timesheet/views/project_sharing_views.xml index 5580b34fdaf..33e6002d194 100644 --- a/addons/sale_timesheet/views/project_sharing_views.xml +++ b/addons/sale_timesheet/views/project_sharing_views.xml @@ -19,6 +19,7 @@ +