From 41d90148ada9915ca5f45e12f7feaa95d69b7a3a Mon Sep 17 00:00:00 2001 From: maciej-wichowski Date: Wed, 25 Mar 2026 11:26:59 +0100 Subject: [PATCH 1/5] [FIX] website_sale_product_reference_displayed: fix snippet filter signatures Replace positional `context` argument with `**kwargs` in all `_get_products_*` handler overrides to match the core Odoo signature. The old signature caused a TypeError when `product_template_id` was passed as a keyword argument (e.g. on the alternative products filter). --- .../models/website_snippet_filter.py | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/website_sale_product_reference_displayed/models/website_snippet_filter.py b/website_sale_product_reference_displayed/models/website_snippet_filter.py index f2e4aa30d4..5706b2eac3 100644 --- a/website_sale_product_reference_displayed/models/website_snippet_filter.py +++ b/website_sale_product_reference_displayed/models/website_snippet_filter.py @@ -4,39 +4,47 @@ class WebsiteSnippetFilter(models.Model): _inherit = "website.snippet.filter" - def _get_products_latest_sold(self, website, limit, domain, context): - products = super()._get_products_latest_sold(website, limit, domain, context) + def _get_products_latest_sold(self, website, limit, domain, **kwargs): + products = super()._get_products_latest_sold(website, limit, domain, **kwargs) if products: return products.with_context(display_default_code=True) else: return products - def _get_products_latest_viewed(self, website, limit, domain, context): - products = super()._get_products_latest_viewed(website, limit, domain, context) + def _get_products_latest_viewed(self, website, limit, domain, **kwargs): + products = super()._get_products_latest_viewed(website, limit, domain, **kwargs) if products: return products.with_context(display_default_code=True) else: return products - def _get_products_recently_sold_with(self, website, limit, domain, context): + def _get_products_recently_sold_with( + self, website, limit, domain, product_template_id, **kwargs + ): products = super()._get_products_recently_sold_with( - website, limit, domain, context + website, limit, domain, product_template_id, **kwargs ) if products: return products.with_context(display_default_code=True) else: return products - def _get_products_accessories(self, website, limit, domain, context): - products = super()._get_products_accessories(website, limit, domain, context) + def _get_products_accessories( + self, website, limit, domain, product_template_id=None, **kwargs + ): + products = super()._get_products_accessories( + website, limit, domain, product_template_id=product_template_id, **kwargs + ) if products: return products.with_context(display_default_code=True) else: return products - def _get_products_alternative_products(self, website, limit, domain, context): + def _get_products_alternative_products( + self, website, limit, domain, product_template_id=None, **kwargs + ): products = super()._get_products_alternative_products( - website, limit, domain, context + website, limit, domain, product_template_id=product_template_id, **kwargs ) if products: return products.with_context(display_default_code=True) From bf1cacaeb94dbc4474a71b8e93a734c5ce954543 Mon Sep 17 00:00:00 2001 From: maciej-wichowski Date: Wed, 25 Mar 2026 21:16:37 +0100 Subject: [PATCH 2/5] [IMP] website_sale_product_reference_displayed: add tests --- .../readme/CONTRIBUTORS.md | 2 + .../tests/__init__.py | 1 + .../tests/test_website_snippet_filter.py | 126 ++++++++++++++++++ 3 files changed, 129 insertions(+) create mode 100644 website_sale_product_reference_displayed/tests/__init__.py create mode 100644 website_sale_product_reference_displayed/tests/test_website_snippet_filter.py diff --git a/website_sale_product_reference_displayed/readme/CONTRIBUTORS.md b/website_sale_product_reference_displayed/readme/CONTRIBUTORS.md index 361ec78508..ac3a7f273b 100644 --- a/website_sale_product_reference_displayed/readme/CONTRIBUTORS.md +++ b/website_sale_product_reference_displayed/readme/CONTRIBUTORS.md @@ -5,3 +5,5 @@ - Anjeel Haria - [Kencove](https://www.kencove.com/): - Mohamed Alkobrosli +- [Versada](https://versada.eu) + - Maciej Wichowski diff --git a/website_sale_product_reference_displayed/tests/__init__.py b/website_sale_product_reference_displayed/tests/__init__.py new file mode 100644 index 0000000000..f9b5f4809f --- /dev/null +++ b/website_sale_product_reference_displayed/tests/__init__.py @@ -0,0 +1 @@ +from . import test_website_snippet_filter diff --git a/website_sale_product_reference_displayed/tests/test_website_snippet_filter.py b/website_sale_product_reference_displayed/tests/test_website_snippet_filter.py new file mode 100644 index 0000000000..7a4cdc0e4b --- /dev/null +++ b/website_sale_product_reference_displayed/tests/test_website_snippet_filter.py @@ -0,0 +1,126 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import Command +from odoo.osv import expression +from odoo.tests import tagged + +from odoo.addons.sale.tests.test_sale_product_attribute_value_config import ( + TestSaleProductAttributeValueCommon, +) +from odoo.addons.website.tools import MockRequest +from odoo.addons.website_sale.tests.common import WebsiteSaleCommon + + +@tagged("post_install", "-at_install") +class TestWebsiteSnippetFilter(WebsiteSaleCommon, TestSaleProductAttributeValueCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.SnippetFilter = cls.env["website.snippet.filter"] + cls.computer.write( + { + "company_id": False, + "website_published": True, + } + ) + cls.accessory = cls.env["product.template"].create( + { + "name": "Accessory", + "company_id": False, + "website_published": True, + } + ) + cls.alternative = cls.env["product.template"].create( + { + "name": "Alternative", + "company_id": False, + "website_published": True, + } + ) + cls.computer.write( + { + "accessory_product_ids": [ + Command.set(cls.accessory.product_variant_ids.ids) + ], + "alternative_product_ids": [Command.set(cls.alternative.ids)], + } + ) + + cls.sold_order = cls.env["sale.order"].create( + { + "partner_id": cls.partner.id, + "website_id": cls.website.id, + "order_line": [ + Command.create({"product_id": cls.computer.product_variant_id.id}), + Command.create({"product_id": cls.accessory.product_variant_id.id}), + ], + } + ) + cls.sold_order.action_confirm() + + def _domain(self): + return expression.AND( + [ + [("website_published", "=", True)], + self.website.website_domain(), + [("company_id", "in", [False, self.website.company_id.id])], + ] + ) + + def test_latest_sold_sets_display_default_code(self): + with MockRequest(self.env, website=self.website): + result = self.SnippetFilter._get_products_latest_sold( + website=self.website, limit=16, domain=self._domain() + ) + self.assertTrue(result) + self.assertTrue(result.env.context.get("display_default_code")) + + def test_latest_viewed_sets_display_default_code(self): + with MockRequest(self.env, website=self.website): + visitor = self.env["website.visitor"]._upsert_visitor( + self.env.user.partner_id.id + ) + self.env["website.track"].create( + { + "visitor_id": visitor[0], + "product_id": self.accessory.product_variant_id.id, + } + ) + result = self.SnippetFilter._get_products_latest_viewed( + website=self.website, limit=16, domain=self._domain() + ) + self.assertTrue(result) + self.assertTrue(result.env.context.get("display_default_code")) + + def test_recently_sold_with_sets_display_default_code(self): + with MockRequest(self.env, website=self.website): + result = self.SnippetFilter._get_products_recently_sold_with( + website=self.website, + limit=16, + domain=self._domain(), + product_template_id=self.computer.id, + ) + self.assertTrue(result) + self.assertTrue(result.env.context.get("display_default_code")) + + def test_accessories_sets_display_default_code(self): + with MockRequest(self.env, website=self.website): + result = self.SnippetFilter._get_products_accessories( + website=self.website, + limit=16, + domain=self._domain(), + product_template_id=self.computer.id, + ) + self.assertTrue(result) + self.assertTrue(result.env.context.get("display_default_code")) + + def test_alternative_products_sets_display_default_code(self): + with MockRequest(self.env, website=self.website): + result = self.SnippetFilter._get_products_alternative_products( + website=self.website, + limit=16, + domain=self._domain(), + product_template_id=self.computer.id, + ) + self.assertTrue(result) + self.assertTrue(result.env.context.get("display_default_code")) From 0d547a09a6cdd68bc69f3248f0fd467f733676dc Mon Sep 17 00:00:00 2001 From: mymage Date: Fri, 5 Jun 2026 06:45:47 +0000 Subject: [PATCH 3/5] Added translation using Weblate (Italian) --- website_sale_charge_payment_fee/i18n/it.po | 108 +++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 website_sale_charge_payment_fee/i18n/it.po diff --git a/website_sale_charge_payment_fee/i18n/it.po b/website_sale_charge_payment_fee/i18n/it.po new file mode 100644 index 0000000000..c447b52071 --- /dev/null +++ b/website_sale_charge_payment_fee/i18n/it.po @@ -0,0 +1,108 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_charge_payment_fee +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: website_sale_charge_payment_fee +#: model_terms:ir.ui.view,arch_db:website_sale_charge_payment_fee.method_form_fee +msgid "(Fee:" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,help:website_sale_charge_payment_fee.field_payment_provider__charge_fee +msgid "" +"An extra fee line will be added to online order when using this payment " +"method" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model_terms:ir.ui.view,arch_db:website_sale_charge_payment_fee.provider_form_fee_inherit +msgid "Charge payment fee" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,field_description:website_sale_charge_payment_fee.field_payment_provider__charge_fee_type +msgid "Computation type" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,field_description:website_sale_charge_payment_fee.field_payment_provider__charge_fee_currency_id +msgid "Fee Currency" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,field_description:website_sale_charge_payment_fee.field_payment_provider__charge_fee_description +msgid "Fee Description" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,field_description:website_sale_charge_payment_fee.field_payment_provider__charge_fee_product_id +msgid "Fee Product" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,field_description:website_sale_charge_payment_fee.field_payment_provider__charge_fee +msgid "Fee charged to customer" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields.selection,name:website_sale_charge_payment_fee.selection__payment_provider__charge_fee_type__fixed +msgid "Fixed" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,field_description:website_sale_charge_payment_fee.field_payment_provider__charge_fee_fixed_price +msgid "Fixed Price" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model_terms:ir.ui.view,arch_db:website_sale_charge_payment_fee.payment_fee +msgid "Payment Fee" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,field_description:website_sale_charge_payment_fee.field_sale_order__amount_payment_fee +msgid "Payment Fee Amount" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model:ir.model,name:website_sale_charge_payment_fee.model_payment_provider +msgid "Payment Provider" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,field_description:website_sale_charge_payment_fee.field_sale_order_line__payment_fee_line +msgid "Payment fee line" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,field_description:website_sale_charge_payment_fee.field_payment_provider__charge_fee_percentage +#: model:ir.model.fields.selection,name:website_sale_charge_payment_fee.selection__payment_provider__charge_fee_type__percentage +msgid "Percentage" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,help:website_sale_charge_payment_fee.field_payment_provider__charge_fee_percentage +msgid "Percentage applied to order total" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model:ir.model,name:website_sale_charge_payment_fee.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: website_sale_charge_payment_fee +#: model:ir.model,name:website_sale_charge_payment_fee.model_sale_order_line +msgid "Sales Order Line" +msgstr "" From c585efae79c69b4d3b38bef95e53337193b288a9 Mon Sep 17 00:00:00 2001 From: mymage Date: Fri, 5 Jun 2026 07:03:16 +0000 Subject: [PATCH 4/5] Translated using Weblate (Italian) Currently translated at 100.0% (3 of 3 strings) Translation: e-commerce-18.0/e-commerce-18.0-website_sale_attribute_filter_form_submit Translate-URL: https://translation.odoo-community.org/projects/e-commerce-18-0/e-commerce-18-0-website_sale_attribute_filter_form_submit/it/ --- website_sale_attribute_filter_form_submit/i18n/it.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website_sale_attribute_filter_form_submit/i18n/it.po b/website_sale_attribute_filter_form_submit/i18n/it.po index 366de52983..59190e0080 100644 --- a/website_sale_attribute_filter_form_submit/i18n/it.po +++ b/website_sale_attribute_filter_form_submit/i18n/it.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-02-25 07:30+0000\n" -"Last-Translator: Anonymous \n" +"PO-Revision-Date: 2026-06-05 09:46+0000\n" +"Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" @@ -19,7 +19,7 @@ msgstr "" #. module: website_sale_attribute_filter_form_submit #: model_terms:ir.ui.view,arch_db:website_sale_attribute_filter_form_submit.o_wsale_offcanvas msgid "" -msgstr "" +msgstr "" #. module: website_sale_attribute_filter_form_submit #: model_terms:ir.ui.view,arch_db:website_sale_attribute_filter_form_submit.o_wsale_offcanvas From 4c1a1253714f284ab4bcfba7743bdc2e3192cfac Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 5 Jun 2026 16:13:58 +0000 Subject: [PATCH 5/5] [BOT] post-merge updates --- README.md | 2 +- .../README.rst | 12 +++++-- .../__manifest__.py | 2 +- .../static/description/index.html | 32 ++++++++++++------- 4 files changed, 33 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index d44bf63db7..985201b3d8 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ addon | version | maintainers | summary [website_sale_product_eprel](website_sale_product_eprel/) | 18.0.1.0.0 | | Display EPREL energy label and product info on website product page. [website_sale_product_item_cart_custom_qty](website_sale_product_item_cart_custom_qty/) | 18.0.1.0.0 | CarlosRoca13 | Allows to add to cart from product items a custom quantity. [website_sale_product_minimal_price](website_sale_product_minimal_price/) | 18.0.1.0.0 | sergio-teruel | Display minimal price for products that has variants -[website_sale_product_reference_displayed](website_sale_product_reference_displayed/) | 18.0.1.0.0 | | Display product reference in e-commerce +[website_sale_product_reference_displayed](website_sale_product_reference_displayed/) | 18.0.1.0.1 | | Display product reference in e-commerce [website_sale_product_sort](website_sale_product_sort/) | 18.0.1.0.0 | | Allow to define default sort criteria for e-commerce [website_sale_require_legal](website_sale_require_legal/) | 18.0.1.0.2 | | Force the user to accept legal tems to buy in the web shop [website_sale_secondary_unit](website_sale_secondary_unit/) | 18.0.1.0.1 | | Allow manage secondary units in website shop diff --git a/website_sale_product_reference_displayed/README.rst b/website_sale_product_reference_displayed/README.rst index 6658db9ab6..899cea732a 100644 --- a/website_sale_product_reference_displayed/README.rst +++ b/website_sale_product_reference_displayed/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ======================================= Display product reference in e-commerce ======================================= @@ -7,13 +11,13 @@ Display product reference in e-commerce !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:a6dfd113a21643dcb2b2507ac89bc618fae7d47b19cfa74777ba97e6d79606e0 + !! source digest: sha256:c60f41e58b44f79f3cf43b4753536ff273c54ca58160fb66b7934d114111ff2d !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |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 +.. |badge2| image:: https://img.shields.io/badge/license-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 @@ -84,6 +88,10 @@ Contributors - Mohamed Alkobrosli +- `Versada `__ + + - Maciej Wichowski + Maintainers ----------- diff --git a/website_sale_product_reference_displayed/__manifest__.py b/website_sale_product_reference_displayed/__manifest__.py index 808da0d0d0..53e0a7d5f2 100644 --- a/website_sale_product_reference_displayed/__manifest__.py +++ b/website_sale_product_reference_displayed/__manifest__.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { "name": "Display product reference in e-commerce", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "category": "Website", "website": "https://github.com/OCA/e-commerce", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/website_sale_product_reference_displayed/static/description/index.html b/website_sale_product_reference_displayed/static/description/index.html index 71ede9e303..ab88231c8f 100644 --- a/website_sale_product_reference_displayed/static/description/index.html +++ b/website_sale_product_reference_displayed/static/description/index.html @@ -3,7 +3,7 @@ -Display product reference in e-commerce +README.rst -
-

Display product reference in e-commerce

+
+ + +Odoo Community Association + +
+

Display product reference in e-commerce

-

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

+

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

This module extends the website_sale views to display the product’s full display name, with its product reference included.

Table of contents

@@ -386,7 +391,7 @@

Display product reference in e-commerce

-

Usage

+

Usage

Just install and the products will be shown with their full display name.

You can enable or disable for each template and website in the @@ -395,7 +400,7 @@

Usage

image1

-

Bug Tracker

+

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 to smash it by providing a detailed and welcomed @@ -403,15 +408,15 @@

Bug Tracker

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Tecnativa
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -442,5 +451,6 @@

Maintainers

+