diff --git a/addons/sale_management/controllers/portal.py b/addons/sale_management/controllers/portal.py index 187c203e916..11a8d7c4e35 100644 --- a/addons/sale_management/controllers/portal.py +++ b/addons/sale_management/controllers/portal.py @@ -43,8 +43,8 @@ class CustomerPortal(portal.CustomerPortal): if not order_line or order_line.order_id != order_sudo: return False - if not order_line.sale_order_option_ids: - # Do not allow updating non optional lines from a quotation + if not order_line._can_be_edited_on_portal(): + # Do not allow updating non-optional products from a quotation return False if input_quantity is not False: diff --git a/addons/sale_management/models/sale_order_line.py b/addons/sale_management/models/sale_order_line.py index dd43b04c791..f7b29ba4f6a 100644 --- a/addons/sale_management/models/sale_order_line.py +++ b/addons/sale_management/models/sale_order_line.py @@ -35,3 +35,11 @@ class SaleOrderLine(models.Model): # used in the optional product line. optional_product_lines = self.filtered('sale_order_option_ids') super(SaleOrderLine, self - optional_product_lines)._compute_price_unit() + + #=== TOOLING ===# + + def _can_be_edited_on_portal(self): + return self.state in ('draft', 'sent') and ( + self.sale_order_option_ids + or self.product_id in self.order_id.sale_order_option_ids.product_id + ) diff --git a/addons/sale_management/views/sale_portal_templates.xml b/addons/sale_management/views/sale_portal_templates.xml index 10ecf5f72f6..6ed939e3361 100644 --- a/addons/sale_management/views/sale_portal_templates.xml +++ b/addons/sale_management/views/sale_portal_templates.xml @@ -4,7 +4,7 @@