From b491d67bf2a54be96518e8e7412288199d3d9f4b Mon Sep 17 00:00:00 2001 From: Sergio Teruel Date: Thu, 16 May 2019 00:00:08 +0200 Subject: [PATCH 1/2] [11.0][NEW] website_sale_product_detail_attribute_image: new module --- .../README.rst | 85 ++++ .../__init__.py | 3 + .../__manifest__.py | 25 + .../controllers/__init__.py | 2 + .../controllers/main.py | 16 + .../data/demo.xml | 72 +++ .../i18n/es.po | 108 +++++ ...te_sale_product_detail_attribute_image.pot | 107 +++++ .../models/__init__.py | 2 + .../models/product_attribute.py | 24 + .../readme/CONTRIBUTORS.rst | 3 + .../readme/CREDITS.rst | 1 + .../readme/DESCRIPTION.rst | 3 + .../readme/USAGE.rst | 7 + .../static/description/index.html | 437 ++++++++++++++++++ .../static/src/img/EN374.png | Bin 0 -> 18972 bytes .../static/src/img/EN374:2003.png | Bin 0 -> 6432 bytes .../static/src/img/EN388.png | Bin 0 -> 7694 bytes ...ale_product_detail_attribute_image_tour.js | 30 ++ .../static/src/less/style.less | 3 + .../tests/__init__.py | 2 + ...ite_sale_product_detail_attribute_image.py | 19 + .../views/assets.xml | 13 + .../views/product_attribute_views.xml | 52 +++ .../views/templates.xml | 25 + 25 files changed, 1039 insertions(+) create mode 100644 website_sale_product_detail_attribute_image/README.rst create mode 100644 website_sale_product_detail_attribute_image/__init__.py create mode 100644 website_sale_product_detail_attribute_image/__manifest__.py create mode 100644 website_sale_product_detail_attribute_image/controllers/__init__.py create mode 100644 website_sale_product_detail_attribute_image/controllers/main.py create mode 100644 website_sale_product_detail_attribute_image/data/demo.xml create mode 100644 website_sale_product_detail_attribute_image/i18n/es.po create mode 100644 website_sale_product_detail_attribute_image/i18n/website_sale_product_detail_attribute_image.pot create mode 100644 website_sale_product_detail_attribute_image/models/__init__.py create mode 100644 website_sale_product_detail_attribute_image/models/product_attribute.py create mode 100644 website_sale_product_detail_attribute_image/readme/CONTRIBUTORS.rst create mode 100644 website_sale_product_detail_attribute_image/readme/CREDITS.rst create mode 100644 website_sale_product_detail_attribute_image/readme/DESCRIPTION.rst create mode 100644 website_sale_product_detail_attribute_image/readme/USAGE.rst create mode 100644 website_sale_product_detail_attribute_image/static/description/index.html create mode 100644 website_sale_product_detail_attribute_image/static/src/img/EN374.png create mode 100644 website_sale_product_detail_attribute_image/static/src/img/EN374:2003.png create mode 100644 website_sale_product_detail_attribute_image/static/src/img/EN388.png create mode 100644 website_sale_product_detail_attribute_image/static/src/js/website_sale_product_detail_attribute_image_tour.js create mode 100644 website_sale_product_detail_attribute_image/static/src/less/style.less create mode 100644 website_sale_product_detail_attribute_image/tests/__init__.py create mode 100644 website_sale_product_detail_attribute_image/tests/test_website_sale_product_detail_attribute_image.py create mode 100644 website_sale_product_detail_attribute_image/views/assets.xml create mode 100755 website_sale_product_detail_attribute_image/views/product_attribute_views.xml create mode 100755 website_sale_product_detail_attribute_image/views/templates.xml diff --git a/website_sale_product_detail_attribute_image/README.rst b/website_sale_product_detail_attribute_image/README.rst new file mode 100644 index 0000000000..70a0e345d5 --- /dev/null +++ b/website_sale_product_detail_attribute_image/README.rst @@ -0,0 +1,85 @@ +=========================================== +Website Sale Product Detail Attribute Image +=========================================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fe--commerce-lightgray.png?logo=github + :target: https://github.com/OCA/e-commerce/tree/11.0/website_sale_product_detail_attribute_image + :alt: OCA/e-commerce +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/e-commerce-11-0/e-commerce-11-0-website_sale_product_detail_attribute_image + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/113/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of website sale module to allow display +product attributes images in shop product detail. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +* Go to 'Website > Settings > Configuration > Products > Attributes'. +* Set an image in 'Website image' field to display this attribute in shop + product detail. +* Check 'Display in shop product detail' field to display this attribute in + shop product detail. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* `Tecnativa `_: + + * Sergio Teruel + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/e-commerce `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/website_sale_product_detail_attribute_image/__init__.py b/website_sale_product_detail_attribute_image/__init__.py new file mode 100644 index 0000000000..df9b9c226b --- /dev/null +++ b/website_sale_product_detail_attribute_image/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import controllers +from . import models diff --git a/website_sale_product_detail_attribute_image/__manifest__.py b/website_sale_product_detail_attribute_image/__manifest__.py new file mode 100644 index 0000000000..e35e973e32 --- /dev/null +++ b/website_sale_product_detail_attribute_image/__manifest__.py @@ -0,0 +1,25 @@ +# Copyright 2019 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + 'name': 'Website Sale Product Detail Attribute Image', + 'summary': 'Display attributes images in shop product detail', + 'version': '11.0.1.0.0', + 'development_status': 'Beta', + 'category': 'Website', + 'website': 'https://github.com/OCA/e-commerce', + 'author': 'Tecnativa, Odoo Community Association (OCA)', + 'license': 'AGPL-3', + 'application': False, + 'installable': True, + 'depends': [ + 'website_sale', + ], + 'data': [ + 'views/assets.xml', + 'views/product_attribute_views.xml', + 'views/templates.xml', + ], + 'demo': [ + 'data/demo.xml', + ] +} diff --git a/website_sale_product_detail_attribute_image/controllers/__init__.py b/website_sale_product_detail_attribute_image/controllers/__init__.py new file mode 100644 index 0000000000..dea930adca --- /dev/null +++ b/website_sale_product_detail_attribute_image/controllers/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import main diff --git a/website_sale_product_detail_attribute_image/controllers/main.py b/website_sale_product_detail_attribute_image/controllers/main.py new file mode 100644 index 0000000000..6a19cd0dfc --- /dev/null +++ b/website_sale_product_detail_attribute_image/controllers/main.py @@ -0,0 +1,16 @@ +# Copyright 2019 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.addons.website_sale.controllers.main import WebsiteSale +from odoo import http + + +class WebsiteSaleProductDetailAttributeImage(WebsiteSale): + + @http.route() + def product(self, product, category='', search='', **kwargs): + res = super().product( + product, category=category, search=search, **kwargs) + attributes_detail = product.attribute_line_ids.filtered( + lambda x: x.attribute_id.website_product_detail_image_published) + res.qcontext['attributes_detail'] = attributes_detail + return res diff --git a/website_sale_product_detail_attribute_image/data/demo.xml b/website_sale_product_detail_attribute_image/data/demo.xml new file mode 100644 index 0000000000..880ce7172b --- /dev/null +++ b/website_sale_product_detail_attribute_image/data/demo.xml @@ -0,0 +1,72 @@ + + + + + + Dangerousness + + + + + + High dangerousness + + + + Low dangerousness + + + + + + + + + + + + + + Policy One + Website Policy One + + + + + + Policy One Value 1 + Policy One Value 1 for website + + + + + + + + + + + + + + + Policy Two + + + + + + Policy Two Value 1 + + + + + + + + + + + + + diff --git a/website_sale_product_detail_attribute_image/i18n/es.po b/website_sale_product_detail_attribute_image/i18n/es.po new file mode 100644 index 0000000000..af54cdbb64 --- /dev/null +++ b/website_sale_product_detail_attribute_image/i18n/es.po @@ -0,0 +1,108 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_detail_attribute_image +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-05-17 08:52+0000\n" +"PO-Revision-Date: 2019-05-17 10:54+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.0.6\n" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute,name:website_sale_product_detail_attribute_image.product_attribute_image_danger +msgid "Dangerousness" +msgstr "Peligrosidad" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.model.fields,help:website_sale_product_detail_attribute_image.field_product_attribute_website_product_detail_image_published +msgid "Display attribute image in shop online product detail" +msgstr "Mostrar la imagen del atributo en el detalle del producto de la tienda online" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute.value,name:website_sale_product_detail_attribute_image.product_attribute_image_high +msgid "High dangerousness" +msgstr "Peligrosidad alta" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.model.fields,help:website_sale_product_detail_attribute_image.field_product_attribute_website_product_detail_image +msgid "Image of the attribute for shop online product detail." +msgstr "Imagen del atributo en el detalle del producto de la tienda online." + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute.value,name:website_sale_product_detail_attribute_image.product_attribute_image_low +msgid "Low dangerousness" +msgstr "Peligrosidad baja" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute,name:website_sale_product_detail_attribute_image.product_attribute_image_policy_one +msgid "Policy One" +msgstr "Regla uno" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute.value,name:website_sale_product_detail_attribute_image.product_attribute_image_policy_one_1 +msgid "Policy One Value 1" +msgstr "Regla uno valor 1" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute.value,website_name:website_sale_product_detail_attribute_image.product_attribute_image_policy_one_1 +msgid "Policy One Value 1 for website" +msgstr "Regla uno valor 1 website" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute,name:website_sale_product_detail_attribute_image.product_attribute_image_policy_two +msgid "Policy Two" +msgstr "Regla dos" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute.value,name:website_sale_product_detail_attribute_image.product_attribute_image_policy_two_1 +msgid "Policy Two Value 1" +msgstr "Regla dos valor 1" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.model,name:website_sale_product_detail_attribute_image.model_product_attribute +msgid "Product Attribute" +msgstr "Atributo de producto" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.model.fields,field_description:website_sale_product_detail_attribute_image.field_product_attribute_website_product_detail_image_published +msgid "Publish in website" +msgstr "Mostrar en producto" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute,website_name:website_sale_product_detail_attribute_image.product_attribute_image_policy_one +msgid "Website Policy One" +msgstr "Regla uno website" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.model.fields,field_description:website_sale_product_detail_attribute_image.field_product_attribute_website_product_detail_image +msgid "Website detail image" +msgstr "Imagen detalle website" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.model.fields,field_description:website_sale_product_detail_attribute_image.field_product_attribute_website_name +msgid "Website name" +msgstr "Nombre para website" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.ui.view,arch_db:website_sale_product_detail_attribute_image.product_attribute_view_form +msgid "Website product image detail" +msgstr "Imagen detalle producto para website" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.model.fields,field_description:website_sale_product_detail_attribute_image.field_product_attribute_value_website_name +msgid "Website value" +msgstr "Valor para website" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.model,name:website_sale_product_detail_attribute_image.model_product_attribute_value +msgid "product.attribute.value" +msgstr "" diff --git a/website_sale_product_detail_attribute_image/i18n/website_sale_product_detail_attribute_image.pot b/website_sale_product_detail_attribute_image/i18n/website_sale_product_detail_attribute_image.pot new file mode 100644 index 0000000000..73d6761fdb --- /dev/null +++ b/website_sale_product_detail_attribute_image/i18n/website_sale_product_detail_attribute_image.pot @@ -0,0 +1,107 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_detail_attribute_image +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-05-17 08:52+0000\n" +"PO-Revision-Date: 2019-05-17 08:52+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute,name:website_sale_product_detail_attribute_image.product_attribute_image_danger +msgid "Dangerousness" +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.model.fields,help:website_sale_product_detail_attribute_image.field_product_attribute_website_product_detail_image_published +msgid "Display attribute image in shop online product detail" +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute.value,name:website_sale_product_detail_attribute_image.product_attribute_image_high +msgid "High dangerousness" +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.model.fields,help:website_sale_product_detail_attribute_image.field_product_attribute_website_product_detail_image +msgid "Image of the attribute for shop online product detail." +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute.value,name:website_sale_product_detail_attribute_image.product_attribute_image_low +msgid "Low dangerousness" +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute,name:website_sale_product_detail_attribute_image.product_attribute_image_policy_one +msgid "Policy One" +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute.value,name:website_sale_product_detail_attribute_image.product_attribute_image_policy_one_1 +msgid "Policy One Value 1" +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute.value,website_name:website_sale_product_detail_attribute_image.product_attribute_image_policy_one_1 +msgid "Policy One Value 1 for website" +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute,name:website_sale_product_detail_attribute_image.product_attribute_image_policy_two +msgid "Policy Two" +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute.value,name:website_sale_product_detail_attribute_image.product_attribute_image_policy_two_1 +msgid "Policy Two Value 1" +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.model,name:website_sale_product_detail_attribute_image.model_product_attribute +msgid "Product Attribute" +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.model.fields,field_description:website_sale_product_detail_attribute_image.field_product_attribute_website_product_detail_image_published +msgid "Publish in website" +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:product.attribute,website_name:website_sale_product_detail_attribute_image.product_attribute_image_policy_one +msgid "Website Policy One" +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.model.fields,field_description:website_sale_product_detail_attribute_image.field_product_attribute_website_product_detail_image +msgid "Website detail image" +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.model.fields,field_description:website_sale_product_detail_attribute_image.field_product_attribute_website_name +msgid "Website name" +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.ui.view,arch_db:website_sale_product_detail_attribute_image.product_attribute_view_form +msgid "Website product image detail" +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.model.fields,field_description:website_sale_product_detail_attribute_image.field_product_attribute_value_website_name +msgid "Website value" +msgstr "" + +#. module: website_sale_product_detail_attribute_image +#: model:ir.model,name:website_sale_product_detail_attribute_image.model_product_attribute_value +msgid "product.attribute.value" +msgstr "" + diff --git a/website_sale_product_detail_attribute_image/models/__init__.py b/website_sale_product_detail_attribute_image/models/__init__.py new file mode 100644 index 0000000000..383e1becc9 --- /dev/null +++ b/website_sale_product_detail_attribute_image/models/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import product_attribute diff --git a/website_sale_product_detail_attribute_image/models/product_attribute.py b/website_sale_product_detail_attribute_image/models/product_attribute.py new file mode 100644 index 0000000000..b3487c9bdb --- /dev/null +++ b/website_sale_product_detail_attribute_image/models/product_attribute.py @@ -0,0 +1,24 @@ +# Copyright 2019 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class ProductAttribute(models.Model): + _inherit = 'product.attribute' + + website_product_detail_image = fields.Binary( + string='Website detail image', + attachment=True, + help='Image of the attribute for shop online product detail.', + ) + website_product_detail_image_published = fields.Boolean( + string='Publish in website', + help='Display attribute image in shop online product detail', + ) + website_name = fields.Char(string='Website name', translate=True) + + +class ProductAttributevalue(models.Model): + _inherit = 'product.attribute.value' + + website_name = fields.Char(string='Website value', translate=True) diff --git a/website_sale_product_detail_attribute_image/readme/CONTRIBUTORS.rst b/website_sale_product_detail_attribute_image/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..3bfad993cb --- /dev/null +++ b/website_sale_product_detail_attribute_image/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `Tecnativa `_: + + * Sergio Teruel diff --git a/website_sale_product_detail_attribute_image/readme/CREDITS.rst b/website_sale_product_detail_attribute_image/readme/CREDITS.rst new file mode 100644 index 0000000000..810f314436 --- /dev/null +++ b/website_sale_product_detail_attribute_image/readme/CREDITS.rst @@ -0,0 +1 @@ +This module has free images from https://www.iconfinder.com/ diff --git a/website_sale_product_detail_attribute_image/readme/DESCRIPTION.rst b/website_sale_product_detail_attribute_image/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..31ee869471 --- /dev/null +++ b/website_sale_product_detail_attribute_image/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +This module extends the functionality of website sale module to allow to +display images, name and values related to product attributes in e-commerce +product page. diff --git a/website_sale_product_detail_attribute_image/readme/USAGE.rst b/website_sale_product_detail_attribute_image/readme/USAGE.rst new file mode 100644 index 0000000000..bf219d5e21 --- /dev/null +++ b/website_sale_product_detail_attribute_image/readme/USAGE.rst @@ -0,0 +1,7 @@ +* Go to 'Website > Settings > Configuration > Products > Attributes'. +* Set an image in 'Website image' field to display this attribute in shop + product detail. +* You can set alternative name for attribute in field "Bebsite name". +* You can set alternative name for attribute value in field "Bebsite name". +* Active 'Publish in website' field to display this attribute in + shop product detail. diff --git a/website_sale_product_detail_attribute_image/static/description/index.html b/website_sale_product_detail_attribute_image/static/description/index.html new file mode 100644 index 0000000000..cd43263211 --- /dev/null +++ b/website_sale_product_detail_attribute_image/static/description/index.html @@ -0,0 +1,437 @@ + + + + + + +Website Sale Product Detail Attribute Image + + + +
+

Website Sale Product Detail Attribute Image

+ + +

Beta License: AGPL-3 OCA/e-commerce Translate me on Weblate Try me on Runbot

+

This module extends the functionality of website sale module to allow display +product attributes images in shop product detail.

+

Table of contents

+ +
+

Usage

+
    +
  • Go to ‘Website > Settings > Configuration > Products > Attributes’.
  • +
  • Set an image in ‘Website image’ field to display this attribute in shop +product detail.
  • +
  • Check ‘Display in shop product detail’ field to display this attribute in +shop product detail.
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/e-commerce project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/website_sale_product_detail_attribute_image/static/src/img/EN374.png b/website_sale_product_detail_attribute_image/static/src/img/EN374.png new file mode 100644 index 0000000000000000000000000000000000000000..79761403f022104d5d7c823bccb81b3a1aec07bc GIT binary patch literal 18972 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

9wZY@UIB@#h5Y(Sn($KOI_RjCX}PejZnL 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 literal 0 HcmV?d00001 diff --git a/website_sale_product_detail_attribute_image/static/src/img/EN374:2003.png b/website_sale_product_detail_attribute_image/static/src/img/EN374:2003.png new file mode 100644 index 0000000000000000000000000000000000000000..f2b9e19af5b4986d74ea181c7b6d8487a662be0e GIT binary patch literal 6432 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

okZ@uFf1r` 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 literal 0 HcmV?d00001 diff --git a/website_sale_product_detail_attribute_image/static/src/js/website_sale_product_detail_attribute_image_tour.js b/website_sale_product_detail_attribute_image/static/src/js/website_sale_product_detail_attribute_image_tour.js new file mode 100644 index 0000000000..4836ab92ed --- /dev/null +++ b/website_sale_product_detail_attribute_image/static/src/js/website_sale_product_detail_attribute_image_tour.js @@ -0,0 +1,30 @@ +/* Copyright 2019 Sergio Teruel + * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */ + +odoo.define("website_sale_product_detail_attribute_image.tour", function (require) { + "use strict"; + + var tour = require("web_tour.tour"); + var base = require("web_editor.base"); + + var steps = [ + { + trigger: "a:contains('iPod')", + }, + { + trigger: "a[href='/shop']", + extra_trigger: ".product-detail-attributes:has(span:contains('Policy One Value 1')):not(:has(span:contains('Dangerousness'))):has(span:contains('Policy One Value 1 for website'))", + }, + ]; + tour.register("website_sale_product_detail_attribute_image", + { + url: "/shop", + test: true, + wait_for: base.ready(), + }, + steps + ); + return { + steps: steps, + }; +}); diff --git a/website_sale_product_detail_attribute_image/static/src/less/style.less b/website_sale_product_detail_attribute_image/static/src/less/style.less new file mode 100644 index 0000000000..177b9f2da4 --- /dev/null +++ b/website_sale_product_detail_attribute_image/static/src/less/style.less @@ -0,0 +1,3 @@ +.product-detail-attributes div { + font-size: 85%; +} diff --git a/website_sale_product_detail_attribute_image/tests/__init__.py b/website_sale_product_detail_attribute_image/tests/__init__.py new file mode 100644 index 0000000000..8c4fd98953 --- /dev/null +++ b/website_sale_product_detail_attribute_image/tests/__init__.py @@ -0,0 +1,2 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from . import test_website_sale_product_detail_attribute_image diff --git a/website_sale_product_detail_attribute_image/tests/test_website_sale_product_detail_attribute_image.py b/website_sale_product_detail_attribute_image/tests/test_website_sale_product_detail_attribute_image.py new file mode 100644 index 0000000000..49e084eb51 --- /dev/null +++ b/website_sale_product_detail_attribute_image/tests/test_website_sale_product_detail_attribute_image.py @@ -0,0 +1,19 @@ +# Copyright 2019 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.tests.common import HttpCase + + +class WebsiteSaleHttpCase(HttpCase): + + def test_ui_website(self): + """Test frontend tour.""" + tour = ( + "odoo.__DEBUG__.services['web_tour.tour']", + "website_sale_product_detail_attribute_image", + ) + self.phantom_js( + url_path="/", + code="%s.run('%s')" % tour, + ready="%s.tours['%s'].ready" % tour, + login="admin" + ) diff --git a/website_sale_product_detail_attribute_image/views/assets.xml b/website_sale_product_detail_attribute_image/views/assets.xml new file mode 100644 index 0000000000..b1455cbe4c --- /dev/null +++ b/website_sale_product_detail_attribute_image/views/assets.xml @@ -0,0 +1,13 @@ + + + +