From c05336d273dc10cd0ce4f454baa3e90af46c736b Mon Sep 17 00:00:00 2001 From: divy-odoo Date: Tue, 22 Aug 2023 16:59:50 +0530 Subject: [PATCH] [IMP] product, *: add image option for color attribute *: website_sale, sale_product_configurator With this commit, Image options for the color variant have been implemented. Now, users can use images to represent pattern colors such as "leopard" instead of solely selecting a solid color. - User can add, remove or change the color attribute value image from the backend. If no image has been uploaded, it will use the corresponding HEX color to represent color/patterns. task-3381738 Part-of: odoo/odoo#132685 --- .../product/models/product_attribute_value.py | 6 ++++ .../product_template_attribute_value.py | 1 + .../product/views/product_attribute_views.xml | 13 ++++++-- .../controllers/main.py | 3 +- .../product_template_attribute_line.js | 1 + .../product_template_attribute_line.xml | 4 ++- addons/website_sale/views/templates.xml | 33 +++++++++++++------ .../website_sale/views/variant_templates.xml | 13 ++++++-- 8 files changed, 56 insertions(+), 18 deletions(-) diff --git a/addons/product/models/product_attribute_value.py b/addons/product/models/product_attribute_value.py index b6804793095..fcf5f9011e4 100644 --- a/addons/product/models/product_attribute_value.py +++ b/addons/product/models/product_attribute_value.py @@ -44,6 +44,12 @@ class ProductAttributeValue(models.Model): " to display the color if the attribute type is 'Color'.") display_type = fields.Selection(related='attribute_id.display_type') color = fields.Integer(string="Color Index", default=_get_default_color) + image = fields.Image( + string="Image", + help="You can upload an image that will be used as the color of the attribute value.", + max_width=70, + max_height=70, + ) _sql_constraints = [ ('value_company_uniq', diff --git a/addons/product/models/product_template_attribute_value.py b/addons/product/models/product_template_attribute_value.py index 445d8e32d0f..5e7bd6b6489 100644 --- a/addons/product/models/product_template_attribute_value.py +++ b/addons/product/models/product_template_attribute_value.py @@ -60,6 +60,7 @@ class ProductTemplateAttributeValue(models.Model): is_custom = fields.Boolean(related='product_attribute_value_id.is_custom') display_type = fields.Selection(related='product_attribute_value_id.display_type') color = fields.Integer(string="Color", default=_get_default_color) + image = fields.Image(related='product_attribute_value_id.image') _sql_constraints = [ ('attribute_value_unique', diff --git a/addons/product/views/product_attribute_views.xml b/addons/product/views/product_attribute_views.xml index 11703518fdf..1835d3300e2 100644 --- a/addons/product/views/product_attribute_views.xml +++ b/addons/product/views/product_attribute_views.xml @@ -46,7 +46,12 @@ - + + @@ -95,7 +100,8 @@ - + + @@ -113,7 +119,8 @@ - + + diff --git a/addons/sale_product_configurator/controllers/main.py b/addons/sale_product_configurator/controllers/main.py index cca3513900f..003b064eaa6 100644 --- a/addons/sale_product_configurator/controllers/main.py +++ b/addons/sale_product_configurator/controllers/main.py @@ -236,6 +236,7 @@ class ProductConfiguratorController(Controller): 'name': str, 'price_extra': float, 'html_color': str|False, + 'image': str|False, 'is_custom': bool }], 'selected_attribute_id': int, @@ -270,7 +271,7 @@ class ProductConfiguratorController(Controller): attribute=dict(**ptal.attribute_id.read(['id', 'name', 'display_type'])[0]), attribute_values=[ dict( - **ptav.read(['name', 'html_color', 'is_custom'])[0], + **ptav.read(['name', 'html_color', 'image', 'is_custom'])[0], price_extra=ptav.currency_id._convert( ptav.price_extra, currency, diff --git a/addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.js b/addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.js index adc1f271b52..ca2cff0a672 100644 --- a/addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.js +++ b/addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.js @@ -29,6 +29,7 @@ export class ProductTemplateAttributeLine extends Component { id: Number, name: String, html_color: [Boolean, String], // backend sends 'false' when there is no color + image: [Boolean, String], // backend sends 'false' when there is no image set is_custom: Boolean, price_extra: Number, excluded: { type: Boolean, optional: true }, diff --git a/addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml b/addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml index f15410b2778..93c83f84e11 100644 --- a/addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml +++ b/addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml @@ -92,9 +92,11 @@
  • + +