diff --git a/README.md b/README.md index 04c7afcfe5..d44bf63db7 100644 --- a/README.md +++ b/README.md @@ -25,39 +25,43 @@ addon | version | maintainers | summary [product_template_multi_link](product_template_multi_link/) | 18.0.1.0.1 | | Product Multi Links (Template) [product_template_multi_link_date_span](product_template_multi_link_date_span/) | 18.0.1.0.0 | | Add an optional date span for when a link is active. [product_variant_multi_link](product_variant_multi_link/) | 18.0.1.0.0 | | Product Multi Links (Variant) -[website_sale_acquirer_confirm_order](website_sale_acquirer_confirm_order/) | 18.0.1.0.0 | pilarvargas-tecnativa | eCommerce Confirm Order By Payment Provider -[website_sale_attribute_filter_form_submit](website_sale_attribute_filter_form_submit/) | 18.0.1.0.0 | | Allow to apply manually the filters on the e-commerce +[website_sale_acquirer_confirm_order](website_sale_acquirer_confirm_order/) | 18.0.1.0.1 | pilarvargas-tecnativa | eCommerce Confirm Order By Payment Provider +[website_sale_attribute_filter_form_submit](website_sale_attribute_filter_form_submit/) | 18.0.1.0.1 | | Allow to apply manually the filters on the e-commerce [website_sale_b2x_alt_price](website_sale_b2x_alt_price/) | 18.0.1.0.0 | Yajo | Display prices with(out) taxes in eCommerce, complementing normal mode [website_sale_barcode_search](website_sale_barcode_search/) | 18.0.1.0.0 | | It improve website product search adding search by barcode [website_sale_cart_expire](website_sale_cart_expire/) | 18.0.1.0.1 | ivantodorovich | Cancel carts without activity after a configurable time [website_sale_category_breadcrumb](website_sale_category_breadcrumb/) | 18.0.1.0.0 | Rad0van | Displays Product Category Breadcrumb(s) in eCommerce +[website_sale_charge_payment_fee](website_sale_charge_payment_fee/) | 18.0.1.0.0 | miguel-S73 | Payment fee charged to customer [website_sale_checkout_country_vat](website_sale_checkout_country_vat/) | 18.0.1.0.0 | | Autocomplete VAT in checkout process -[website_sale_checkout_skip_payment](website_sale_checkout_skip_payment/) | 18.0.1.1.0 | | Skip payment for logged users in checkout process +[website_sale_checkout_skip_payment](website_sale_checkout_skip_payment/) | 18.0.1.1.1 | | Skip payment for logged users in checkout process [website_sale_comparison_hide_price](website_sale_comparison_hide_price/) | 18.0.1.0.0 | | Hide product prices on the shop +[website_sale_empty_cart](website_sale_empty_cart/) | 18.0.1.0.0 | | Adds a button in the website cart to empty all [website_sale_hide_empty_category](website_sale_hide_empty_category/) | 18.0.1.0.1 | | Hide any Product Categories that are empty [website_sale_hide_price](website_sale_hide_price/) | 18.0.1.0.0 | | Hide product prices on the shop [website_sale_order_shipping_modification](website_sale_order_shipping_modification/) | 18.0.1.0.0 | | Change the delivery address in quotes from the portal -[website_sale_order_type](website_sale_order_type/) | 18.0.1.0.0 | pilarvargas-tecnativa | This module allows sale_order_type to work with website_sale. +[website_sale_order_type](website_sale_order_type/) | 18.0.1.0.1 | pilarvargas-tecnativa | This module allows sale_order_type to work with website_sale. [website_sale_product_assortment](website_sale_product_assortment/) | 18.0.1.1.0 | CarlosRoca13 | Use product assortments to display products available on e-commerce. [website_sale_product_attribute_filter_category](website_sale_product_attribute_filter_category/) | 18.0.1.0.1 | | Allow group attributes in shop by categories -[website_sale_product_attribute_value_filter_existing](website_sale_product_attribute_value_filter_existing/) | 18.0.1.1.2 | | Allow hide attributes values not used in variants -[website_sale_product_brand](website_sale_product_brand/) | 18.0.1.0.0 | | Product Brand Filtering in Website +[website_sale_product_attribute_value_filter_existing](website_sale_product_attribute_value_filter_existing/) | 18.0.1.1.3 | | Allow hide attributes values not used in variants +[website_sale_product_brand](website_sale_product_brand/) | 18.0.1.0.1 | | Product Brand Filtering in Website +[website_sale_product_description](website_sale_product_description/) | 18.0.1.0.0 | | Shows custom e-Commerce description for products [website_sale_product_detail_attribute_image](website_sale_product_detail_attribute_image/) | 18.0.1.0.0 | | Display attributes images in shop product detail [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_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.1 | | 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.0 | | Allow manage secondary units in website shop +[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 [website_sale_stock_available](website_sale_stock_available/) | 18.0.1.0.0 | | Display 'Available to promise' in shop online instead of 'Free To Use Quantity' [website_sale_stock_list_preview](website_sale_stock_list_preview/) | 18.0.1.0.0 | | Show the stock of products on the product previews -[website_sale_stock_provisioning_date](website_sale_stock_provisioning_date/) | 18.0.1.0.0 | | Display provisioning date for a product in shop online +[website_sale_stock_provisioning_date](website_sale_stock_provisioning_date/) | 18.0.1.0.1 | | Display provisioning date for a product in shop online [website_sale_suggest_create_account](website_sale_suggest_create_account/) | 18.0.1.0.0 | | Suggest users to create an account when buying in the website [website_sale_tax_toggle](website_sale_tax_toggle/) | 18.0.1.0.0 | | Allow display price in Shop with or without taxes [website_sale_vat_required](website_sale_vat_required/) | 18.0.1.0.0 | | VAT number required in checkout form -[website_sale_wishlist_hide_price](website_sale_wishlist_hide_price/) | 18.0.1.0.0 | | Hide product prices on the shop +[website_sale_wishlist_hide_price](website_sale_wishlist_hide_price/) | 18.0.1.0.1 | | Hide product prices on the shop [website_sale_wishlist_keep](website_sale_wishlist_keep/) | 18.0.1.0.0 | | Allows to add products to my cart but keep it in my wishlist" -[website_snippet_product_category](website_snippet_product_category/) | 18.0.1.1.0 | Tardo | Adds a new snippet to show e-commerce categories +[website_snippet_product_category](website_snippet_product_category/) | 18.0.1.1.1 | Tardo | Adds a new snippet to show e-commerce categories [//]: # (end addons) diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml index d6478fef42..ba0014d0c8 100644 --- a/setup/_metapackage/pyproject.toml +++ b/setup/_metapackage/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "odoo-addons-oca-e-commerce" -version = "18.0.20260601.0" +version = "18.0.20260604.3" dependencies = [ "odoo-addon-product_template_multi_link==18.0.*", "odoo-addon-product_template_multi_link_date_span==18.0.*", @@ -11,9 +11,11 @@ dependencies = [ "odoo-addon-website_sale_barcode_search==18.0.*", "odoo-addon-website_sale_cart_expire==18.0.*", "odoo-addon-website_sale_category_breadcrumb==18.0.*", + "odoo-addon-website_sale_charge_payment_fee==18.0.*", "odoo-addon-website_sale_checkout_country_vat==18.0.*", "odoo-addon-website_sale_checkout_skip_payment==18.0.*", "odoo-addon-website_sale_comparison_hide_price==18.0.*", + "odoo-addon-website_sale_empty_cart==18.0.*", "odoo-addon-website_sale_hide_empty_category==18.0.*", "odoo-addon-website_sale_hide_price==18.0.*", "odoo-addon-website_sale_order_shipping_modification==18.0.*", @@ -22,9 +24,11 @@ dependencies = [ "odoo-addon-website_sale_product_attribute_filter_category==18.0.*", "odoo-addon-website_sale_product_attribute_value_filter_existing==18.0.*", "odoo-addon-website_sale_product_brand==18.0.*", + "odoo-addon-website_sale_product_description==18.0.*", "odoo-addon-website_sale_product_detail_attribute_image==18.0.*", "odoo-addon-website_sale_product_eprel==18.0.*", "odoo-addon-website_sale_product_item_cart_custom_qty==18.0.*", + "odoo-addon-website_sale_product_minimal_price==18.0.*", "odoo-addon-website_sale_product_reference_displayed==18.0.*", "odoo-addon-website_sale_product_sort==18.0.*", "odoo-addon-website_sale_require_legal==18.0.*", diff --git a/website_sale_acquirer_confirm_order/README.rst b/website_sale_acquirer_confirm_order/README.rst index a15ab6d2f2..9b293ebf77 100644 --- a/website_sale_acquirer_confirm_order/README.rst +++ b/website_sale_acquirer_confirm_order/README.rst @@ -11,7 +11,7 @@ eCommerce Confirm Order By Payment Provider !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:b4acb28514b2ec11b329e403c3c2ead4900831d4e7e0cf9bbed6186da3eb3a8a + !! source digest: sha256:de184824440be6e5460fb891bdcebebd36ec746d71fc9434642dcbeabe2a811a !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/website_sale_acquirer_confirm_order/__manifest__.py b/website_sale_acquirer_confirm_order/__manifest__.py index 6d17fa485b..24f815658d 100644 --- a/website_sale_acquirer_confirm_order/__manifest__.py +++ b/website_sale_acquirer_confirm_order/__manifest__.py @@ -4,7 +4,7 @@ "name": "eCommerce Confirm Order By Payment Provider", "summary": "eCommerce Confirm Order By Payment Provider", "author": "Tecnativa, Odoo Community Association (OCA)", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "category": "Website/Website", "website": "https://github.com/OCA/e-commerce", "maintainers": ["pilarvargas-tecnativa"], diff --git a/website_sale_acquirer_confirm_order/static/description/index.html b/website_sale_acquirer_confirm_order/static/description/index.html index c7f7df6fc4..2914777bc1 100644 --- a/website_sale_acquirer_confirm_order/static/description/index.html +++ b/website_sale_acquirer_confirm_order/static/description/index.html @@ -372,7 +372,7 @@

eCommerce Confirm Order By Payment Provider

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:b4acb28514b2ec11b329e403c3c2ead4900831d4e7e0cf9bbed6186da3eb3a8a +!! source digest: sha256:de184824440be6e5460fb891bdcebebd36ec746d71fc9434642dcbeabe2a811a !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This module allows you to automatically confirm orders generated from diff --git a/website_sale_acquirer_confirm_order/static/src/js/website_sale_acquirer_confirm_order_tour.esm.js b/website_sale_acquirer_confirm_order/static/src/js/website_sale_acquirer_confirm_order_tour.esm.js index 44490df55f..3408252b98 100644 --- a/website_sale_acquirer_confirm_order/static/src/js/website_sale_acquirer_confirm_order_tour.esm.js +++ b/website_sale_acquirer_confirm_order/static/src/js/website_sale_acquirer_confirm_order_tour.esm.js @@ -1,7 +1,7 @@ /* Copyright 2025 Tecnativa - Pilar Vargas * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */ -import {registry} from "@web/core/registry"; import * as tourUtils from "@website_sale/js/tours/tour_utils"; +import {registry} from "@web/core/registry"; registry.category("web_tour.tours").add("website_sale_acquirer_confirm_order", { url: "/shop", diff --git a/website_sale_attribute_filter_form_submit/README.rst b/website_sale_attribute_filter_form_submit/README.rst index 6078eecaf1..57975470b6 100644 --- a/website_sale_attribute_filter_form_submit/README.rst +++ b/website_sale_attribute_filter_form_submit/README.rst @@ -11,7 +11,7 @@ Website manual attribute filters !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:2233f253d965a8e91a0b97d7f1bc9df6186a65b928310dd95431f530dd9eec47 + !! source digest: sha256:2090971a75ea6e22ec34cdb6640b98828d985360dcd170f15723debf714ba7ee !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/website_sale_attribute_filter_form_submit/__manifest__.py b/website_sale_attribute_filter_form_submit/__manifest__.py index 0414a0bcf7..c10690528b 100644 --- a/website_sale_attribute_filter_form_submit/__manifest__.py +++ b/website_sale_attribute_filter_form_submit/__manifest__.py @@ -3,7 +3,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "Website manual attribute filters", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "category": "E-Commerce", "summary": "Allow to apply manually the filters on the e-commerce", "license": "AGPL-3", diff --git a/website_sale_attribute_filter_form_submit/i18n/es.po b/website_sale_attribute_filter_form_submit/i18n/es.po index d91d6a103a..5ef0fb6a97 100644 --- a/website_sale_attribute_filter_form_submit/i18n/es.po +++ b/website_sale_attribute_filter_form_submit/i18n/es.po @@ -17,6 +17,11 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.15.2\n" +#. 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 "" + #. module: website_sale_attribute_filter_form_submit #: model_terms:ir.ui.view,arch_db:website_sale_attribute_filter_form_submit.o_wsale_offcanvas #: model_terms:ir.ui.view,arch_db:website_sale_attribute_filter_form_submit.products_attributes_filter_manual diff --git a/website_sale_attribute_filter_form_submit/i18n/it.po b/website_sale_attribute_filter_form_submit/i18n/it.po index 9faae42753..366de52983 100644 --- a/website_sale_attribute_filter_form_submit/i18n/it.po +++ b/website_sale_attribute_filter_form_submit/i18n/it.po @@ -16,6 +16,11 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.15.2\n" +#. 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 "" + #. module: website_sale_attribute_filter_form_submit #: model_terms:ir.ui.view,arch_db:website_sale_attribute_filter_form_submit.o_wsale_offcanvas #: model_terms:ir.ui.view,arch_db:website_sale_attribute_filter_form_submit.products_attributes_filter_manual diff --git a/website_sale_attribute_filter_form_submit/i18n/website_sale_attribute_filter_form_submit.pot b/website_sale_attribute_filter_form_submit/i18n/website_sale_attribute_filter_form_submit.pot index 17c6ab7727..198d57b5f9 100644 --- a/website_sale_attribute_filter_form_submit/i18n/website_sale_attribute_filter_form_submit.pot +++ b/website_sale_attribute_filter_form_submit/i18n/website_sale_attribute_filter_form_submit.pot @@ -13,6 +13,11 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. 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 "" + #. module: website_sale_attribute_filter_form_submit #: model_terms:ir.ui.view,arch_db:website_sale_attribute_filter_form_submit.o_wsale_offcanvas #: model_terms:ir.ui.view,arch_db:website_sale_attribute_filter_form_submit.products_attributes_filter_manual diff --git a/website_sale_attribute_filter_form_submit/static/description/index.html b/website_sale_attribute_filter_form_submit/static/description/index.html index bc4eb3cb22..b59a5310c1 100644 --- a/website_sale_attribute_filter_form_submit/static/description/index.html +++ b/website_sale_attribute_filter_form_submit/static/description/index.html @@ -372,7 +372,7 @@

Website manual attribute filters

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:2233f253d965a8e91a0b97d7f1bc9df6186a65b928310dd95431f530dd9eec47 +!! source digest: sha256:2090971a75ea6e22ec34cdb6640b98828d985360dcd170f15723debf714ba7ee !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This module allows to configure the website filters in an no automatic diff --git a/website_sale_attribute_filter_form_submit/templates/website_sale.xml b/website_sale_attribute_filter_form_submit/templates/website_sale.xml index 6bf56de8cb..731e8dab09 100644 --- a/website_sale_attribute_filter_form_submit/templates/website_sale.xml +++ b/website_sale_attribute_filter_form_submit/templates/website_sale.xml @@ -46,18 +46,29 @@ class="list-group list-group-flush" t-if="a.display_type == 'select' or a.display_type == 'multi'" > - + + Configuration -> Payments -> Payment Acquirers + +open an acquirer and in CHARGE PAYMENT FEE tab, you can set the fee to +be charged to customer. + +Known issues / Roadmap +====================== + +- As for now, this module does not handle express checkout. + +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 +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Agile Business Group +* AITIC S.A.S +* Quartile Limited +* Studio73 + +Contributors +------------ + +- Lorenzo Battistini + +- AITIC S.A. + +- Quartile Limited + +- `Studio73 `__: + + - Miguel Gandia + +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. + +.. |maintainer-miguel-S73| image:: https://github.com/miguel-S73.png?size=40px + :target: https://github.com/miguel-S73 + :alt: miguel-S73 + +Current `maintainer `__: + +|maintainer-miguel-S73| + +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_charge_payment_fee/__init__.py b/website_sale_charge_payment_fee/__init__.py new file mode 100644 index 0000000000..f7209b1710 --- /dev/null +++ b/website_sale_charge_payment_fee/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import controllers diff --git a/website_sale_charge_payment_fee/__manifest__.py b/website_sale_charge_payment_fee/__manifest__.py new file mode 100644 index 0000000000..49f94e8d92 --- /dev/null +++ b/website_sale_charge_payment_fee/__manifest__.py @@ -0,0 +1,31 @@ +# Copyright 2018 Lorenzo Battistini - Agile Business Group +# Copyright 2020 AITIC S.A.S +# Copyright 2020 Quartile Limited +# Copyright 2024 Miguel Gandia - Studio73 +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). +{ + "name": "eCommerce: charge payment fee", + "summary": "Payment fee charged to customer", + "version": "18.0.1.0.0", + "category": "Website", + "website": "https://github.com/OCA/e-commerce", + "maintainers": ["miguel-S73"], + "author": "Agile Business Group, " + "AITIC S.A.S, " + "Quartile Limited, " + "Studio73, " + "Odoo Community Association (OCA)", + "license": "LGPL-3", + "application": False, + "installable": True, + "depends": ["payment", "website_sale"], + "data": ["views/payment_provider_views.xml", "views/website_sale_templates.xml"], + "assets": { + "web.assets_frontend": [ + "website_sale_charge_payment_fee/static/src/js/website_sale_fee.esm.js", + ], + "web.assets_tests": [ + "website_sale_charge_payment_fee/static/tests/tours/website_sale_fee_tour.esm.js", + ], + }, +} diff --git a/website_sale_charge_payment_fee/controllers/__init__.py b/website_sale_charge_payment_fee/controllers/__init__.py new file mode 100644 index 0000000000..12a7e529b6 --- /dev/null +++ b/website_sale_charge_payment_fee/controllers/__init__.py @@ -0,0 +1 @@ +from . import main diff --git a/website_sale_charge_payment_fee/controllers/main.py b/website_sale_charge_payment_fee/controllers/main.py new file mode 100644 index 0000000000..4dc63a9e16 --- /dev/null +++ b/website_sale_charge_payment_fee/controllers/main.py @@ -0,0 +1,43 @@ +# Copyright 2018 Lorenzo Battistini - Agile Business Group +# Copyright 2020 AITIC S.A.S +# Copyright 2020 Quartile Limited +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +from odoo import http +from odoo.http import request + +from odoo.addons.website_sale.controllers.main import WebsiteSale + + +class WebsiteSaleFee(WebsiteSale): + @http.route( + "/shop/payment", type="http", auth="public", website=True, sitemap=False + ) + def shop_payment(self, **post): + order = request.website.sudo().sale_get_order() + render_values = self._get_shop_payment_values(order, **post) + provider_id = post.get("provider_id") + payment_option_id = post.get("payment_option_id") + payment_methods_sudo = render_values.get("payment_methods_sudo") + providers_sudo = render_values.get("providers_sudo") + selected_provider = False + if provider_id or providers_sudo: + if provider_id: + selected_provider = request.env["payment.provider"].browse( + int(provider_id) + ) + else: + _selected_provider = [ + provider_sudo + for provider_sudo in payment_methods_sudo.provider_ids + if provider_sudo in providers_sudo + ][:1] + if len(_selected_provider) > 0: + selected_provider = _selected_provider[0] + order.sudo().update_fee_line(selected_provider.sudo()) + res = super().shop_payment(**post) + if payment_option_id: + res.qcontext["selected_payment_method"] = int(payment_option_id) + if selected_provider: + res.qcontext["selected_provider"] = selected_provider + return res diff --git a/website_sale_charge_payment_fee/i18n/es.po b/website_sale_charge_payment_fee/i18n/es.po new file mode 100644 index 0000000000..d0670ed20f --- /dev/null +++ b/website_sale_charge_payment_fee/i18n/es.po @@ -0,0 +1,111 @@ +# 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+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-04-17 16:07+0000\n" +"PO-Revision-Date: 2025-04-17 16:07+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_charge_payment_fee +#: model_terms:ir.ui.view,arch_db:website_sale_charge_payment_fee.method_form_fee +msgid "(Fee:" +msgstr "(Tasa:" + +#. 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 "" +"Se añadirá una línea de tarifa adicional al pedido en línea cuando se " +"utilice este método de pago" + +#. 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 "Cargo por pago" + +#. 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 "Tipo de computación" + +#. 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 "Divisa de la Tasa" + +#. 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 "Descripción de Tasa" + +#. 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 "Producto de tarifa" + +#. 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 "Tarifa cobrada al cliente" + +#. 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 "Fijo" + +#. 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 "Precio Fijo" + +#. module: website_sale_charge_payment_fee +#: model_terms:ir.ui.view,arch_db:website_sale_charge_payment_fee.payment_fee +msgid "Payment Fee" +msgstr "Cuota de pago:" + +#. 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 "Importe de la tarifa de pago" + +#. module: website_sale_charge_payment_fee +#: model:ir.model,name:website_sale_charge_payment_fee.model_payment_provider +msgid "Payment Provider" +msgstr "Proveedor de pago" + +#. 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 "Línea de cuota pago" + +#. 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 "Porcentaje" + +#. 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 "Porcentaje aplicado al total del pedido" + +#. module: website_sale_charge_payment_fee +#: model:ir.model,name:website_sale_charge_payment_fee.model_sale_order +msgid "Sales Order" +msgstr "Pedido de venta" + +#. module: website_sale_charge_payment_fee +#: model:ir.model,name:website_sale_charge_payment_fee.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línea de pedido de venta" diff --git a/website_sale_charge_payment_fee/i18n/es_AR.po b/website_sale_charge_payment_fee/i18n/es_AR.po new file mode 100644 index 0000000000..efad6ff54d --- /dev/null +++ b/website_sale_charge_payment_fee/i18n/es_AR.po @@ -0,0 +1,113 @@ +# 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 12.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-06-01 03:04+0000\n" +"PO-Revision-Date: 2020-06-01 03:04+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_charge_payment_fee +#: model_terms:ir.ui.view,arch_db:website_sale_charge_payment_fee.payment_tokens_list_fee +msgid "(Fee:" +msgstr "(Cargo:" + +#. module: website_sale_charge_payment_fee +#: model_terms:ir.ui.view,arch_db:website_sale_charge_payment_fee.cart_lines_fee +msgid "Add one" +msgstr "Agregue uno" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,help:website_sale_charge_payment_fee.field_payment_acquirer__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.acquirer_form_fee_inherit +msgid "Charge payment fee" +msgstr "Cargo por pago" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,field_description:website_sale_charge_payment_fee.field_payment_acquirer__charge_fee_type +msgid "Computation type" +msgstr "Tipo de computación" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,field_description:website_sale_charge_payment_fee.field_payment_acquirer__charge_fee_description +msgid "Fee Description" +msgstr "Descripción de la tarifa" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,field_description:website_sale_charge_payment_fee.field_payment_acquirer__charge_fee_product_id +msgid "Fee Product" +msgstr "Producto de tarifa" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,field_description:website_sale_charge_payment_fee.field_payment_acquirer__charge_fee +msgid "Fee charged to customer" +msgstr "Tarifa cobrada al cliente" + +#. module: website_sale_charge_payment_fee +#: selection:payment.acquirer,charge_fee_type:0 +msgid "Fixed" +msgstr "Fijo" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,field_description:website_sale_charge_payment_fee.field_payment_acquirer__charge_fee_fixed_price +msgid "Fixed Price" +msgstr "Precio fijo" + +#. module: website_sale_charge_payment_fee +#: model:ir.model,name:website_sale_charge_payment_fee.model_payment_acquirer +msgid "Payment Acquirer" +msgstr "Medio de pago" + +#. 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 "Línea de pago" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,field_description:website_sale_charge_payment_fee.field_payment_acquirer__charge_fee_percentage +#: selection:payment.acquirer,charge_fee_type:0 +msgid "Percentage" +msgstr "Porcentaje" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,help:website_sale_charge_payment_fee.field_payment_acquirer__charge_fee_percentage +msgid "Percentage applied to order total" +msgstr "Porcentaje aplicado al total del pedido" + +#. module: website_sale_charge_payment_fee +#: model_terms:ir.ui.view,arch_db:website_sale_charge_payment_fee.cart_lines_fee +msgid "Remove from cart" +msgstr "Eliminar del carrito" + +#. module: website_sale_charge_payment_fee +#: model_terms:ir.ui.view,arch_db:website_sale_charge_payment_fee.cart_lines_fee +msgid "Remove one" +msgstr "Eliminar uno" + +#. module: website_sale_charge_payment_fee +#: model:ir.model,name:website_sale_charge_payment_fee.model_sale_order +msgid "Sale Order" +msgstr "Pedido de venta" + +#. module: website_sale_charge_payment_fee +#: model:ir.model,name:website_sale_charge_payment_fee.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línea de pedido de venta" + +#. module: website_sale_charge_payment_fee +#: model:ir.model.fields,field_description:website_sale_charge_payment_fee.field_payment_acquirer__charge_fee_tax_ids +msgid "Taxes" +msgstr "Impuestos" + diff --git a/website_sale_charge_payment_fee/i18n/website_sale_charge_payment_fee.pot b/website_sale_charge_payment_fee/i18n/website_sale_charge_payment_fee.pot new file mode 100644 index 0000000000..b19ca5d7ad --- /dev/null +++ b/website_sale_charge_payment_fee/i18n/website_sale_charge_payment_fee.pot @@ -0,0 +1,107 @@ +# 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: \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_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 "" diff --git a/website_sale_charge_payment_fee/models/__init__.py b/website_sale_charge_payment_fee/models/__init__.py new file mode 100644 index 0000000000..816b38e533 --- /dev/null +++ b/website_sale_charge_payment_fee/models/__init__.py @@ -0,0 +1,3 @@ +from . import payment_provider +from . import sale_order +from . import sale_order_line diff --git a/website_sale_charge_payment_fee/models/payment_provider.py b/website_sale_charge_payment_fee/models/payment_provider.py new file mode 100644 index 0000000000..67b26f5652 --- /dev/null +++ b/website_sale_charge_payment_fee/models/payment_provider.py @@ -0,0 +1,41 @@ +# Copyright 2018 Lorenzo Battistini - Agile Business Group +# Copyright 2020 AITIC S.A.S +# Copyright 2020 Quartile Limited +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +from odoo import api, fields, models + + +class PaymentProvider(models.Model): + _inherit = "payment.provider" + + charge_fee = fields.Boolean( + "Fee charged to customer", + help="An extra fee line will be added to online order when using this " + "payment method", + ) + charge_fee_description = fields.Text( + "Fee Description", compute="_compute_charge_fee_description" + ) + charge_fee_product_id = fields.Many2one( + "product.product", string="Fee Product", domain="[('type', '=', 'service')]" + ) + charge_fee_fixed_price = fields.Float("Fixed Price", digits="Product Price") + charge_fee_currency_id = fields.Many2one("res.currency", string="Fee Currency") + charge_fee_percentage = fields.Float( + "Percentage", help="Percentage applied to order total" + ) + charge_fee_type = fields.Selection( + [("fixed", "Fixed"), ("percentage", "Percentage")], + string="Computation type", + default="fixed", + ) + + @api.depends("charge_fee_product_id") + def _compute_charge_fee_description(self): + for provider in self: + provider.charge_fee_description = ( + provider.charge_fee_product_id.name + if provider.charge_fee_product_id + else None + ) diff --git a/website_sale_charge_payment_fee/models/sale_order.py b/website_sale_charge_payment_fee/models/sale_order.py new file mode 100644 index 0000000000..7748aa2d1d --- /dev/null +++ b/website_sale_charge_payment_fee/models/sale_order.py @@ -0,0 +1,83 @@ +# Copyright 2018 Lorenzo Battistini - Agile Business Group +# Copyright 2020 AITIC S.A.S +# Copyright 2020 Quartile Limited +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +from odoo import api, fields, models + + +class SaleOrder(models.Model): + _inherit = "sale.order" + + # Follow the field definition as amount_delivery from + # the website_sale_delivery module. + amount_payment_fee = fields.Monetary( + compute="_compute_amount_payment_fee", + string="Payment Fee Amount", + store=True, + tracking=True, + ) + + def _compute_website_order_line(self): + res = super()._compute_website_order_line() + for order in self: + order.website_order_line = order.website_order_line.filtered( + lambda line: not line.payment_fee_line + ) + return res + + @api.depends( + "order_line.price_unit", + "order_line.tax_id", + "order_line.discount", + "order_line.product_uom_qty", + ) + def _compute_amount_payment_fee(self): + for order in self: + if ( + self.env["website"] + .get_current_website() + .show_line_subtotals_tax_selection + == "tax_excluded" + ): + order.amount_payment_fee = sum( + order.order_line.filtered("payment_fee_line").mapped( + "price_subtotal" + ) + ) + else: + order.amount_payment_fee = sum( + order.order_line.filtered("payment_fee_line").mapped("price_total") + ) + + def update_fee_line(self, provider): + self.ensure_one() + for line in self.order_line: + if line.payment_fee_line: + line.unlink() + if provider.charge_fee: + if provider.charge_fee_type == "fixed": + price = provider.charge_fee_fixed_price + if ( + provider.charge_fee_currency_id.id + != self.pricelist_id.currency_id.id + ): + price = provider.charge_fee_currency_id._convert( + price, + self.pricelist_id.currency_id, + self.company_id, + self.date_order, + ) + elif provider.charge_fee_type == "percentage": + price = (provider.charge_fee_percentage / 100.0) * self.amount_total + self.env["sale.order.line"].create( + { + "order_id": self.id, + "payment_fee_line": True, + "product_id": provider.charge_fee_product_id.id, + "product_uom": provider.charge_fee_product_id.uom_id.id, + "name": provider.charge_fee_description, + "price_unit": price, + "product_uom_qty": 1, + } + ) diff --git a/website_sale_charge_payment_fee/models/sale_order_line.py b/website_sale_charge_payment_fee/models/sale_order_line.py new file mode 100644 index 0000000000..06150137ff --- /dev/null +++ b/website_sale_charge_payment_fee/models/sale_order_line.py @@ -0,0 +1,12 @@ +# Copyright 2018 Lorenzo Battistini - Agile Business Group +# Copyright 2020 AITIC S.A.S +# Copyright 2020 Quartile Limited +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +from odoo import fields, models + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + payment_fee_line = fields.Boolean("Payment fee line", readonly=True) diff --git a/website_sale_charge_payment_fee/pyproject.toml b/website_sale_charge_payment_fee/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/website_sale_charge_payment_fee/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/website_sale_charge_payment_fee/readme/CONFIGURE.md b/website_sale_charge_payment_fee/readme/CONFIGURE.md new file mode 100644 index 0000000000..2fa4b33273 --- /dev/null +++ b/website_sale_charge_payment_fee/readme/CONFIGURE.md @@ -0,0 +1,6 @@ +Click + +Accounting -\> Configuration -\> Payments -\> Payment Acquirers + +open an acquirer and in CHARGE PAYMENT FEE tab, you can set the fee to +be charged to customer. diff --git a/website_sale_charge_payment_fee/readme/CONTRIBUTORS.md b/website_sale_charge_payment_fee/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..712a916a40 --- /dev/null +++ b/website_sale_charge_payment_fee/readme/CONTRIBUTORS.md @@ -0,0 +1,9 @@ +- Lorenzo Battistini \<\> + +- AITIC S.A. \<\> + +- Quartile Limited \<\> + +- [Studio73](https://www.studio73.es): + + > - Miguel Gandia diff --git a/website_sale_charge_payment_fee/readme/DESCRIPTION.md b/website_sale_charge_payment_fee/readme/DESCRIPTION.md new file mode 100644 index 0000000000..aefdfc90e3 --- /dev/null +++ b/website_sale_charge_payment_fee/readme/DESCRIPTION.md @@ -0,0 +1,3 @@ +This module allows to associate generic payment fee to online payment +methods. Thus, when website user select a payment method with additional +fee, an additional sale order line will be added to online order diff --git a/website_sale_charge_payment_fee/readme/ROADMAP.md b/website_sale_charge_payment_fee/readme/ROADMAP.md new file mode 100644 index 0000000000..ff8f68576e --- /dev/null +++ b/website_sale_charge_payment_fee/readme/ROADMAP.md @@ -0,0 +1 @@ +- As for now, this module does not handle express checkout. \ No newline at end of file diff --git a/website_sale_charge_payment_fee/static/description/icon.png b/website_sale_charge_payment_fee/static/description/icon.png new file mode 100644 index 0000000000..3a0328b516 Binary files /dev/null and b/website_sale_charge_payment_fee/static/description/icon.png differ diff --git a/website_sale_charge_payment_fee/static/description/index.html b/website_sale_charge_payment_fee/static/description/index.html new file mode 100644 index 0000000000..39589dcacc --- /dev/null +++ b/website_sale_charge_payment_fee/static/description/index.html @@ -0,0 +1,463 @@ + + + + + +README.rst + + + +

+ + + +Odoo Community Association + +
+

eCommerce: charge payment fee

+ +

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

+

This module allows to associate generic payment fee to online payment +methods. Thus, when website user select a payment method with additional +fee, an additional sale order line will be added to online order

+

Table of contents

+ +
+

Configuration

+

Click

+

Accounting -> Configuration -> Payments -> Payment Acquirers

+

open an acquirer and in CHARGE PAYMENT FEE tab, you can set the fee to +be charged to customer.

+
+
+

Known issues / Roadmap

+
    +
  • As for now, this module does not handle express checkout.
  • +
+
+
+

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 +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Agile Business Group
  • +
  • AITIC S.A.S
  • +
  • Quartile Limited
  • +
  • Studio73
  • +
+
+
+

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.

+

Current maintainer:

+

miguel-S73

+

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_charge_payment_fee/static/src/js/website_sale_fee.esm.js b/website_sale_charge_payment_fee/static/src/js/website_sale_fee.esm.js new file mode 100644 index 0000000000..778fbb7b2f --- /dev/null +++ b/website_sale_charge_payment_fee/static/src/js/website_sale_fee.esm.js @@ -0,0 +1,33 @@ +import {browser} from "@web/core/browser/browser"; +import paymentForm from "@payment/js/payment_form"; +paymentForm.include({ + async start() { + await this._super(...arguments); + const $paymentForm = this.target; + const $selectedProvider = $paymentForm.querySelector( + 'input[name="o_payment_radio"][checked="True"]' + ); + this.$selectedProvider = null; + if ($selectedProvider) { + this.$selectedProvider = $selectedProvider; + } + }, + + async _selectPaymentOption(ev) { + await this._super(...arguments); + const $radio = ev.target; + const providerId = this._getProviderId($radio); + const paymentOptionId = this._getPaymentOptionId($radio); + if (this.$selectedProvider !== $radio) { + this.target + .closest(".oe_website_sale") + .querySelector('button[name="o_payment_submit_button"]').disabled = + true; + browser.location.href = + "/shop/payment?provider_id=" + + providerId + + "&payment_option_id=" + + paymentOptionId; + } + }, +}); diff --git a/website_sale_charge_payment_fee/static/tests/tours/website_sale_fee_tour.esm.js b/website_sale_charge_payment_fee/static/tests/tours/website_sale_fee_tour.esm.js new file mode 100644 index 0000000000..bff11aca73 --- /dev/null +++ b/website_sale_charge_payment_fee/static/tests/tours/website_sale_fee_tour.esm.js @@ -0,0 +1,32 @@ +import * as tourUtils from "@website_sale/js/tours/tour_utils"; +import {registry} from "@web/core/registry"; + +registry.category("web_tour.tours").add("payment_fee_tour", { + url: "/shop", + steps: () => [ + ...tourUtils.searchProduct("Test-1"), + { + content: "select Test-1", + trigger: '.oe_product_cart:first a:contains("Test-1")', + run: "click", + }, + { + content: "add 3 into cart", + trigger: '#product_details input[name="add_qty"]', + run: "edit 3", + }, + { + content: "click on add to cart", + trigger: '#product_detail form[action^="/shop/cart/update"] #add_to_cart', + run: "click", + }, + { + content: "Go To Cart", + trigger: '.toast-body a:contains("View cart")', + run: "click", + expectUnloadPage: true, + }, + tourUtils.goToCheckout(), + tourUtils.confirmOrder(), + ], +}); diff --git a/website_sale_charge_payment_fee/tests/__init__.py b/website_sale_charge_payment_fee/tests/__init__.py new file mode 100644 index 0000000000..f8186b37a6 --- /dev/null +++ b/website_sale_charge_payment_fee/tests/__init__.py @@ -0,0 +1 @@ +from . import test_website_sale_fee diff --git a/website_sale_charge_payment_fee/tests/test_website_sale_fee.py b/website_sale_charge_payment_fee/tests/test_website_sale_fee.py new file mode 100644 index 0000000000..2673d2f7cd --- /dev/null +++ b/website_sale_charge_payment_fee/tests/test_website_sale_fee.py @@ -0,0 +1,107 @@ +# Copyright 2022 Studio73 - Miguel Gandía +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + + +from odoo import Command +from odoo.tests import HttpCase, RecordCapturer, tagged + + +@tagged("post_install", "-at_install") +class TestUi(HttpCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.product_product_service = cls.env["product.product"].create( + { + "name": "Discount wire tranfer", + "standard_price": 70.0, + "list_price": 79.0, + "sale_ok": True, + } + ) + cls.product_product_buy = cls.env["product.template"].create( + { + "name": "Test-1", + "standard_price": 33.0, + "list_price": 33.0, + "is_published": True, + "sale_ok": True, + "taxes_id": [Command.clear()], + } + ) + transfer_provider = cls.env.ref("payment.payment_provider_transfer") + transfer_provider.write( + { + "charge_fee": True, + "charge_fee_product_id": cls.product_product_service.id, + "charge_fee_type": "percentage", + "charge_fee_percentage": 10.00, + "state": "enabled", + "is_published": True, + } + ) + payment_method = cls.env["payment.method"].create( + { + "name": "wire transfer2", + "code": "wire_transfer2", + "sequence": 1000, + "active": True, + "provider_ids": [Command.link(transfer_provider.id)], + } + ) + transfer_provider.write( + { + "payment_method_ids": [ + Command.link(payment_method.id), + ] + } + ) + # Avoid Shipping/Billing address page + cls.env.ref("base.partner_demo_portal").write( + { + "street": "215 Vine St", + "city": "Scranton", + "zip": "18503", + "country_id": cls.env.ref("base.us").id, + "state_id": cls.env.ref("base.state_us_39").id, + "phone": "+1 555-555-5555", + "vat": "41511545146", + } + ) + cls.env["res.config.settings"].create( + { + "show_line_subtotals_tax_selection": "tax_excluded", + } + ).execute() + + def test_charge_payment_fee_percentage(self): + with RecordCapturer(self.env["sale.order"], []) as capture: + self.start_tour("/shop", "payment_fee_tour", login="portal") + created_order = capture.records + price = 10 / 100 * 99.0 + self.assertEqual(created_order.amount_payment_fee, price) + + def test_charge_payment_fee_fixed(self): + provider = self.env.ref("payment.payment_provider_transfer") + provider.write( + { + "charge_fee_type": "fixed", + "charge_fee_fixed_price": 10.00, + "charge_fee_currency_id": self.env.ref("base.USD").id, + } + ) + with RecordCapturer(self.env["sale.order"], []) as capture: + self.start_tour("/", "payment_fee_tour", login="portal") + created_order = capture.records + price = provider.charge_fee_fixed_price + if ( + provider.charge_fee_currency_id.id + != created_order.pricelist_id.currency_id.id + ): + price = provider.charge_fee_currency_id._convert( + price, + created_order.pricelist_id.currency_id, + created_order.company_id, + created_order.date_order, + ) + self.assertEqual(created_order.amount_payment_fee, price) diff --git a/website_sale_charge_payment_fee/views/payment_provider_views.xml b/website_sale_charge_payment_fee/views/payment_provider_views.xml new file mode 100644 index 0000000000..ee54b41df3 --- /dev/null +++ b/website_sale_charge_payment_fee/views/payment_provider_views.xml @@ -0,0 +1,65 @@ + + + + payment_provider.form.fee.inherit + payment.provider + + + + + + + + + + + + + + + + + + diff --git a/website_sale_charge_payment_fee/views/website_sale_templates.xml b/website_sale_charge_payment_fee/views/website_sale_templates.xml new file mode 100644 index 0000000000..dca1e469f8 --- /dev/null +++ b/website_sale_charge_payment_fee/views/website_sale_templates.xml @@ -0,0 +1,65 @@ + + + + + + diff --git a/website_sale_checkout_skip_payment/README.rst b/website_sale_checkout_skip_payment/README.rst index 96ceb3fd25..75ece5499e 100644 --- a/website_sale_checkout_skip_payment/README.rst +++ b/website_sale_checkout_skip_payment/README.rst @@ -11,7 +11,7 @@ Website Sale Checkout Skip Payment !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:f9e268081037d75ba0cab6482f2d2effac0a636924b3880cd2014003640ba2e4 + !! source digest: sha256:78d6f06d08dab36040f8f88d30aaccc09c5408f0f8aec95d100b8fd775b767a6 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/website_sale_checkout_skip_payment/__manifest__.py b/website_sale_checkout_skip_payment/__manifest__.py index db81a371fc..e6fa71a044 100644 --- a/website_sale_checkout_skip_payment/__manifest__.py +++ b/website_sale_checkout_skip_payment/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Website Sale Checkout Skip Payment", "summary": "Skip payment for logged users in checkout process", - "version": "18.0.1.1.0", + "version": "18.0.1.1.1", "category": "Website", "website": "https://github.com/OCA/e-commerce", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/website_sale_checkout_skip_payment/static/description/index.html b/website_sale_checkout_skip_payment/static/description/index.html index 55882d5fd8..043de59017 100644 --- a/website_sale_checkout_skip_payment/static/description/index.html +++ b/website_sale_checkout_skip_payment/static/description/index.html @@ -372,7 +372,7 @@

Website Sale Checkout Skip Payment

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:f9e268081037d75ba0cab6482f2d2effac0a636924b3880cd2014003640ba2e4 +!! source digest: sha256:78d6f06d08dab36040f8f88d30aaccc09c5408f0f8aec95d100b8fd775b767a6 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This module allows to logged users to checkout with no payment step. At diff --git a/website_sale_checkout_skip_payment/static/tests/tours/website_sale_checkout_skip_payment_tour.esm.js b/website_sale_checkout_skip_payment/static/tests/tours/website_sale_checkout_skip_payment_tour.esm.js index 97ee37201c..80a069d5b8 100644 --- a/website_sale_checkout_skip_payment/static/tests/tours/website_sale_checkout_skip_payment_tour.esm.js +++ b/website_sale_checkout_skip_payment/static/tests/tours/website_sale_checkout_skip_payment_tour.esm.js @@ -1,7 +1,5 @@ -/** @odoo-module **/ - -import {registry} from "@web/core/registry"; import * as tourUtils from "@website_sale/js/tours/tour_utils"; +import {registry} from "@web/core/registry"; registry.category("web_tour.tours").add("website_sale_checkout_skip_payment", { url: "/shop", diff --git a/website_sale_empty_cart/README.rst b/website_sale_empty_cart/README.rst new file mode 100644 index 0000000000..453efc9ab8 --- /dev/null +++ b/website_sale_empty_cart/README.rst @@ -0,0 +1,106 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +======================= +Website Sale Empty Cart +======================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:00ad4769e0a0beacb7ca580e67d57fe4cfcf1f68fcd5b929ad7d77d40d9721b6 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/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 + :target: https://github.com/OCA/e-commerce/tree/18.0/website_sale_empty_cart + :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-18-0/e-commerce-18-0-website_sale_empty_cart + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/e-commerce&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds a button in the website cart that let users remove all +the selected products at once + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To configure this module, you need to: + +- To enable (or disable) the cart empty button for a website, go to + Website / Configuration / Settings. Then search the "Cart Empty + Button" and edit its value. + +Usage +===== + +To use this module, you need to: + +1. Go to the "/shop/cart" path of your server website. Example: + "http://localhost:8069/shop/cart" +2. You will see your cart. If it is empty, go to "Shop" and add some + products. +3. Click on the "Empty Cart" button. +4. You will see the cart with no products. + +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 +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Sygel + +Contributors +------------ + +- `Sygel `__: + + - Alberto Martínez + - Valentin Vinagre + - Harald Panten + +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_empty_cart/__init__.py b/website_sale_empty_cart/__init__.py new file mode 100644 index 0000000000..5c2bd8c997 --- /dev/null +++ b/website_sale_empty_cart/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import controllers +from . import models diff --git a/website_sale_empty_cart/__manifest__.py b/website_sale_empty_cart/__manifest__.py new file mode 100644 index 0000000000..48d631738d --- /dev/null +++ b/website_sale_empty_cart/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2025 Alberto Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Website Sale Empty Cart", + "summary": "Adds a button in the website cart to empty all", + "version": "18.0.1.0.0", + "website": "https://github.com/OCA/e-commerce", + "author": "Sygel, Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": [ + "website_sale", + ], + "data": [ + "views/cart_templates.xml", + "views/res_config_settings.xml", + ], +} diff --git a/website_sale_empty_cart/controllers/__init__.py b/website_sale_empty_cart/controllers/__init__.py new file mode 100644 index 0000000000..f43232f012 --- /dev/null +++ b/website_sale_empty_cart/controllers/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import main diff --git a/website_sale_empty_cart/controllers/main.py b/website_sale_empty_cart/controllers/main.py new file mode 100644 index 0000000000..585c4a07ca --- /dev/null +++ b/website_sale_empty_cart/controllers/main.py @@ -0,0 +1,18 @@ +# Copyright 2025 Alberto Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import http +from odoo.http import request + +from odoo.addons.website_sale.controllers.main import WebsiteSale + + +class WebsiteSaleEmptyCart(WebsiteSale): + @http.route("/shop/cart", type="http", auth="public", website=True, sitemap=False) + def cart(self, access_token=None, revive="", **post): + empty_cart = post.get("empty_cart") + if empty_cart: + order = request.website.sale_get_order() + if order: + order.order_line.unlink() + return super().cart(access_token, revive, **post) diff --git a/website_sale_empty_cart/i18n/es.po b/website_sale_empty_cart/i18n/es.po new file mode 100644 index 0000000000..b79df19f01 --- /dev/null +++ b/website_sale_empty_cart/i18n/es.po @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_empty_cart +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-10-13 08:51+0000\n" +"PO-Revision-Date: 2025-10-13 08:51+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: website_sale_empty_cart +#: model_terms:ir.ui.view,arch_db:website_sale_empty_cart.res_config_settings_view_form +msgid "Cart Empty Button" +msgstr "Botón de vaciado de carrito" + +#. module: website_sale_empty_cart +#: model:ir.model,name:website_sale_empty_cart.model_res_config_settings +msgid "Config Settings" +msgstr "Ajustes de configuración" + +#. module: website_sale_empty_cart +#: model_terms:ir.ui.view,arch_db:website_sale_empty_cart.total_empty_cart +msgid "Empty Cart" +msgstr "Vaciar carrito" + +#. module: website_sale_empty_cart +#: model_terms:ir.ui.view,arch_db:website_sale_empty_cart.res_config_settings_view_form +msgid "Enable or disable the cart empty button" +msgstr "Habilitar o deshabilitar el botón de vaciado de carrito" + +#. module: website_sale_empty_cart +#: model:ir.model.fields,field_description:website_sale_empty_cart.field_res_config_settings__cart_empty_button +#: model:ir.model.fields,field_description:website_sale_empty_cart.field_website__cart_empty_button +msgid "Is the cart empty button enabled?" +msgstr "Está el botón de vaciado de carrito habilitado?" + +#. module: website_sale_empty_cart +#: model:ir.model,name:website_sale_empty_cart.model_website +msgid "Website" +msgstr "Sitio web" diff --git a/website_sale_empty_cart/i18n/it.po b/website_sale_empty_cart/i18n/it.po new file mode 100644 index 0000000000..5562f33846 --- /dev/null +++ b/website_sale_empty_cart/i18n/it.po @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_empty_cart +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-11-28 10:43+0000\n" +"Last-Translator: mymage \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" +"X-Generator: Weblate 5.10.4\n" + +#. module: website_sale_empty_cart +#: model_terms:ir.ui.view,arch_db:website_sale_empty_cart.res_config_settings_view_form +msgid "Cart Empty Button" +msgstr "Pulsante svuota carrello" + +#. module: website_sale_empty_cart +#: model:ir.model,name:website_sale_empty_cart.model_res_config_settings +msgid "Config Settings" +msgstr "Impostazioni configurazione" + +#. module: website_sale_empty_cart +#: model_terms:ir.ui.view,arch_db:website_sale_empty_cart.total_empty_cart +msgid "Empty Cart" +msgstr "Svuota carrello" + +#. module: website_sale_empty_cart +#: model_terms:ir.ui.view,arch_db:website_sale_empty_cart.res_config_settings_view_form +msgid "Enable or disable the cart empty button" +msgstr "Abilita o disabilita il pulsante svuota carrello" + +#. module: website_sale_empty_cart +#: model:ir.model.fields,field_description:website_sale_empty_cart.field_res_config_settings__cart_empty_button +#: model:ir.model.fields,field_description:website_sale_empty_cart.field_website__cart_empty_button +msgid "Is the cart empty button enabled?" +msgstr "Il pulsante svuota carrello è abilitato?" + +#. module: website_sale_empty_cart +#: model:ir.model,name:website_sale_empty_cart.model_website +msgid "Website" +msgstr "Sito web" diff --git a/website_sale_empty_cart/i18n/website_sale_empty_cart.pot b/website_sale_empty_cart/i18n/website_sale_empty_cart.pot new file mode 100644 index 0000000000..85fca492ab --- /dev/null +++ b/website_sale_empty_cart/i18n/website_sale_empty_cart.pot @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_empty_cart +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \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_empty_cart +#: model_terms:ir.ui.view,arch_db:website_sale_empty_cart.res_config_settings_view_form +msgid "Cart Empty Button" +msgstr "" + +#. module: website_sale_empty_cart +#: model:ir.model,name:website_sale_empty_cart.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: website_sale_empty_cart +#: model_terms:ir.ui.view,arch_db:website_sale_empty_cart.total_empty_cart +msgid "Empty Cart" +msgstr "" + +#. module: website_sale_empty_cart +#: model_terms:ir.ui.view,arch_db:website_sale_empty_cart.res_config_settings_view_form +msgid "Enable or disable the cart empty button" +msgstr "" + +#. module: website_sale_empty_cart +#: model:ir.model.fields,field_description:website_sale_empty_cart.field_res_config_settings__cart_empty_button +#: model:ir.model.fields,field_description:website_sale_empty_cart.field_website__cart_empty_button +msgid "Is the cart empty button enabled?" +msgstr "" + +#. module: website_sale_empty_cart +#: model:ir.model,name:website_sale_empty_cart.model_website +msgid "Website" +msgstr "" diff --git a/website_sale_empty_cart/models/__init__.py b/website_sale_empty_cart/models/__init__.py new file mode 100644 index 0000000000..a424e440f1 --- /dev/null +++ b/website_sale_empty_cart/models/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import res_config_settings +from . import website diff --git a/website_sale_empty_cart/models/res_config_settings.py b/website_sale_empty_cart/models/res_config_settings.py new file mode 100644 index 0000000000..8e26f0be79 --- /dev/null +++ b/website_sale_empty_cart/models/res_config_settings.py @@ -0,0 +1,14 @@ +# Copyright 2025 Alberto Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + cart_empty_button = fields.Boolean( + string="Is the cart empty button enabled?", + related="website_id.cart_empty_button", + readonly=False, + ) diff --git a/website_sale_empty_cart/models/website.py b/website_sale_empty_cart/models/website.py new file mode 100644 index 0000000000..33db903182 --- /dev/null +++ b/website_sale_empty_cart/models/website.py @@ -0,0 +1,10 @@ +# Copyright 2025 Alberto Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class Website(models.Model): + _inherit = "website" + + cart_empty_button = fields.Boolean(string="Is the cart empty button enabled?") diff --git a/website_sale_empty_cart/pyproject.toml b/website_sale_empty_cart/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/website_sale_empty_cart/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/website_sale_empty_cart/readme/CONFIGURE.md b/website_sale_empty_cart/readme/CONFIGURE.md new file mode 100755 index 0000000000..8bb42620ea --- /dev/null +++ b/website_sale_empty_cart/readme/CONFIGURE.md @@ -0,0 +1,3 @@ +To configure this module, you need to: + +- To enable (or disable) the cart empty button for a website, go to Website / Configuration / Settings. Then search the "Cart Empty Button" and edit its value. diff --git a/website_sale_empty_cart/readme/CONTRIBUTORS.md b/website_sale_empty_cart/readme/CONTRIBUTORS.md new file mode 100755 index 0000000000..f566245042 --- /dev/null +++ b/website_sale_empty_cart/readme/CONTRIBUTORS.md @@ -0,0 +1,4 @@ +- [Sygel](https://www.sygel.es): + - Alberto Martínez + - Valentin Vinagre + - Harald Panten diff --git a/website_sale_empty_cart/readme/DESCRIPTION.md b/website_sale_empty_cart/readme/DESCRIPTION.md new file mode 100755 index 0000000000..993007564c --- /dev/null +++ b/website_sale_empty_cart/readme/DESCRIPTION.md @@ -0,0 +1 @@ +This module adds a button in the website cart that let users remove all the selected products at once diff --git a/website_sale_empty_cart/readme/USAGE.md b/website_sale_empty_cart/readme/USAGE.md new file mode 100755 index 0000000000..64a0c7b99d --- /dev/null +++ b/website_sale_empty_cart/readme/USAGE.md @@ -0,0 +1,6 @@ +To use this module, you need to: + +1. Go to the "/shop/cart" path of your server website. Example: "http://localhost:8069/shop/cart" +2. You will see your cart. If it is empty, go to "Shop" and add some products. +3. Click on the "Empty Cart" button. +4. You will see the cart with no products. diff --git a/website_sale_empty_cart/static/description/icon.png b/website_sale_empty_cart/static/description/icon.png new file mode 100644 index 0000000000..3a0328b516 Binary files /dev/null and b/website_sale_empty_cart/static/description/icon.png differ diff --git a/website_sale_empty_cart/static/description/icon.svg b/website_sale_empty_cart/static/description/icon.svg new file mode 100644 index 0000000000..a7a26d0932 --- /dev/null +++ b/website_sale_empty_cart/static/description/icon.svg @@ -0,0 +1,79 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/website_sale_empty_cart/static/description/index.html b/website_sale_empty_cart/static/description/index.html new file mode 100644 index 0000000000..82fb44aeda --- /dev/null +++ b/website_sale_empty_cart/static/description/index.html @@ -0,0 +1,458 @@ + + + + + +README.rst + + + +

+ + + +Odoo Community Association + +
+

Website Sale Empty Cart

+ +

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

+

This module adds a button in the website cart that let users remove all +the selected products at once

+

Table of contents

+ +
+

Configuration

+

To configure this module, you need to:

+
    +
  • To enable (or disable) the cart empty button for a website, go to +Website / Configuration / Settings. Then search the “Cart Empty +Button” and edit its value.
  • +
+
+
+

Usage

+

To use this module, you need to:

+
    +
  1. Go to the “/shop/cart” path of your server website. Example: +“http://localhost:8069/shop/cart
  2. +
  3. You will see your cart. If it is empty, go to “Shop” and add some +products.
  4. +
  5. Click on the “Empty Cart” button.
  6. +
  7. You will see the cart with no products.
  8. +
+
+
+

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 +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Sygel
  • +
+
+
+

Contributors

+
    +
  • Sygel:
      +
    • Alberto Martínez
    • +
    • Valentin Vinagre
    • +
    • Harald Panten
    • +
    +
  • +
+
+
+

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_empty_cart/tests/__init__.py b/website_sale_empty_cart/tests/__init__.py new file mode 100644 index 0000000000..ee63dbf86b --- /dev/null +++ b/website_sale_empty_cart/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_website_sale_empty_cart diff --git a/website_sale_empty_cart/tests/test_website_sale_empty_cart.py b/website_sale_empty_cart/tests/test_website_sale_empty_cart.py new file mode 100644 index 0000000000..aec7f7be27 --- /dev/null +++ b/website_sale_empty_cart/tests/test_website_sale_empty_cart.py @@ -0,0 +1,30 @@ +# Copyright 2025 Alberto Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + + +from odoo.tests.common import tagged + +from odoo.addons.website.tools import MockRequest +from odoo.addons.website_sale.tests.test_website_sale_cart import TestWebsiteSaleCart +from odoo.addons.website_sale_empty_cart.controllers.main import WebsiteSaleEmptyCart + + +@tagged("post_install", "-at_install") +class TestWebsiteSaleEmptyCart(TestWebsiteSaleCart): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.WebsiteSaleControllerEmptyCart = WebsiteSaleEmptyCart() + + def test_clear_cart(self): + website = self.website.with_user(self.public_user) + with MockRequest(self.product.with_user(self.public_user).env, website=website): + self.WebsiteSaleController.cart_update_json( + product_id=self.product.id, add_qty=1 + ) + sale_order = website.sale_get_order() + self.assertTrue(sale_order.order_line) + + self.WebsiteSaleControllerEmptyCart.cart(empty_cart=True) + + self.assertFalse(sale_order.order_line) diff --git a/website_sale_empty_cart/views/cart_templates.xml b/website_sale_empty_cart/views/cart_templates.xml new file mode 100644 index 0000000000..17dd3575a3 --- /dev/null +++ b/website_sale_empty_cart/views/cart_templates.xml @@ -0,0 +1,36 @@ + + + + + diff --git a/website_sale_empty_cart/views/res_config_settings.xml b/website_sale_empty_cart/views/res_config_settings.xml new file mode 100644 index 0000000000..b187325ac3 --- /dev/null +++ b/website_sale_empty_cart/views/res_config_settings.xml @@ -0,0 +1,21 @@ + + + + + res.config.settings.view.form.inherit.website.sale + res.config.settings + + + + + + + + + + diff --git a/website_sale_order_type/README.rst b/website_sale_order_type/README.rst index 1d209af229..a9f0ef74b2 100644 --- a/website_sale_order_type/README.rst +++ b/website_sale_order_type/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 + ======================= Website sale order type ======================= @@ -7,13 +11,13 @@ Website sale order type !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:5f6d6f491b82d69808d11f2b0bc9db9610384f5e9b7c312b7c94712b26abcbec + !! source digest: sha256:03631f19a9ddb1cb0c60db7b60aceefe244732412a2fbe40a62084e90ff6380c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |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 diff --git a/website_sale_order_type/__manifest__.py b/website_sale_order_type/__manifest__.py index 70213b415f..36de1bb22f 100644 --- a/website_sale_order_type/__manifest__.py +++ b/website_sale_order_type/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Website sale order type", "summary": "This module allows sale_order_type to work with website_sale.", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "development_status": "Beta", "category": "Website", "website": "https://github.com/OCA/e-commerce", diff --git a/website_sale_order_type/static/description/index.html b/website_sale_order_type/static/description/index.html index 068d4cb157..955ec526cd 100644 --- a/website_sale_order_type/static/description/index.html +++ b/website_sale_order_type/static/description/index.html @@ -3,7 +3,7 @@ -Website sale order type +README.rst -
-

Website sale order type

+
+ + +Odoo Community Association + +
+

Website sale order type

-

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 allows sale_order_type to work with websitesale.

@@ -393,7 +398,7 @@

Website sale order type

-

Usage

+

Usage

  1. In the backend (Sales -> Customers) set a sale order type in any contact;
  2. @@ -404,7 +409,7 @@

    Usage

-

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 @@ -412,15 +417,15 @@

Bug Tracker

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Agile Business Group
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -452,5 +457,6 @@

Maintainers

+
diff --git a/website_sale_order_type/static/tests/tours/website_sale_order_type_tour.esm.js b/website_sale_order_type/static/tests/tours/website_sale_order_type_tour.esm.js index 01ccd896e7..f35bac0b07 100644 --- a/website_sale_order_type/static/tests/tours/website_sale_order_type_tour.esm.js +++ b/website_sale_order_type/static/tests/tours/website_sale_order_type_tour.esm.js @@ -1,4 +1,3 @@ -/** @odoo-module */ /* Copyright 2020 Tecnativa - João Marques * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */ diff --git a/website_sale_product_attribute_value_filter_existing/README.rst b/website_sale_product_attribute_value_filter_existing/README.rst index cbf71e5adc..3b25662f08 100644 --- a/website_sale_product_attribute_value_filter_existing/README.rst +++ b/website_sale_product_attribute_value_filter_existing/README.rst @@ -11,7 +11,7 @@ Website Sale Attribute Value Existing !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:d611049a1077676fa8dd3a4559191044acaed564da72eefb63661c8ccad42f31 + !! source digest: sha256:49dcb11c543e7dcf50f107fe624c65853893d910d71cdbd97e6a28c7438b46d8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png diff --git a/website_sale_product_attribute_value_filter_existing/__manifest__.py b/website_sale_product_attribute_value_filter_existing/__manifest__.py index ea804d3c85..eaeb26ab9e 100644 --- a/website_sale_product_attribute_value_filter_existing/__manifest__.py +++ b/website_sale_product_attribute_value_filter_existing/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Website Sale Attribute Value Existing", "summary": "Allow hide attributes values not used in variants", - "version": "18.0.1.1.2", + "version": "18.0.1.1.3", "development_status": "Production/Stable", "category": "Website", "website": "https://github.com/OCA/e-commerce", diff --git a/website_sale_product_attribute_value_filter_existing/static/description/index.html b/website_sale_product_attribute_value_filter_existing/static/description/index.html index 5fe4c43bdd..e60ada0429 100644 --- a/website_sale_product_attribute_value_filter_existing/static/description/index.html +++ b/website_sale_product_attribute_value_filter_existing/static/description/index.html @@ -372,7 +372,7 @@

Website Sale Attribute Value Existing

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:d611049a1077676fa8dd3a4559191044acaed564da72eefb63661c8ccad42f31 +!! source digest: sha256:49dcb11c543e7dcf50f107fe624c65853893d910d71cdbd97e6a28c7438b46d8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Production/Stable License: LGPL-3 OCA/e-commerce Translate me on Weblate Try me on Runboat

This module extends the functionality of website sale module to allow diff --git a/website_sale_product_attribute_value_filter_existing/static/src/js/website_sale_product_attribute_value_filter_existing_search_desk_tour.esm.js b/website_sale_product_attribute_value_filter_existing/static/src/js/website_sale_product_attribute_value_filter_existing_search_desk_tour.esm.js index 9124ba41a4..3413b73ee8 100644 --- a/website_sale_product_attribute_value_filter_existing/static/src/js/website_sale_product_attribute_value_filter_existing_search_desk_tour.esm.js +++ b/website_sale_product_attribute_value_filter_existing/static/src/js/website_sale_product_attribute_value_filter_existing_search_desk_tour.esm.js @@ -1,5 +1,3 @@ -/** @odoo-module **/ - import {registry} from "@web/core/registry"; registry diff --git a/website_sale_product_attribute_value_filter_existing/static/src/js/website_sale_product_attribute_value_filter_existing_tour.esm.js b/website_sale_product_attribute_value_filter_existing/static/src/js/website_sale_product_attribute_value_filter_existing_tour.esm.js index 2d4569e809..c3f3837513 100644 --- a/website_sale_product_attribute_value_filter_existing/static/src/js/website_sale_product_attribute_value_filter_existing_tour.esm.js +++ b/website_sale_product_attribute_value_filter_existing/static/src/js/website_sale_product_attribute_value_filter_existing_tour.esm.js @@ -1,5 +1,3 @@ -/** @odoo-module **/ - import {registry} from "@web/core/registry"; registry diff --git a/website_sale_product_brand/README.rst b/website_sale_product_brand/README.rst index 1683217660..65b0c18bd3 100644 --- a/website_sale_product_brand/README.rst +++ b/website_sale_product_brand/README.rst @@ -11,7 +11,7 @@ Product Brand Filtering in Website !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:2866648306719d101a1a7e53c7797ebb0c3f171e68905bf0f627ed69f5f020f4 + !! source digest: sha256:56fc967690ebf594ddae22175c85de10669282fa8adcd2d8efe631a6c2fbf42c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/website_sale_product_brand/__manifest__.py b/website_sale_product_brand/__manifest__.py index e1f89c7a99..0fb2f6b272 100644 --- a/website_sale_product_brand/__manifest__.py +++ b/website_sale_product_brand/__manifest__.py @@ -8,7 +8,7 @@ "Tecnativa, " "Odoo Community Association (OCA)", "website": "https://github.com/OCA/e-commerce", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "license": "AGPL-3", "depends": ["product_brand", "website_sale"], "data": [ diff --git a/website_sale_product_brand/controllers/main.py b/website_sale_product_brand/controllers/main.py index 7b3175227d..8551266461 100644 --- a/website_sale_product_brand/controllers/main.py +++ b/website_sale_product_brand/controllers/main.py @@ -20,7 +20,12 @@ def _get_shop_domain( ) # add selected brands to product search domain brands_list = self._get_brand_ids(request.httprequest.args) - return self._update_domain(brands_list, domain) + domain = self._update_domain(brands_list, domain) + if "brand_id" in request.context: + domain = expression.AND( + [domain, [("product_brand_id", "=", request.context["brand_id"])]] + ) + return domain def _update_domain(self, brands_list, domain): selected_brand_ids = [int(brand) for brand in brands_list] @@ -93,18 +98,6 @@ def _get_search_options( res["brand"] = request.context.get("brand_id") return res - def _get_shop_domain( - self, search, category, attrib_values, search_in_description=True - ): - domain = super()._get_shop_domain( - search, category, attrib_values, search_in_description=search_in_description - ) - if "brand_id" in request.context: - domain = expression.AND( - [domain, [("product_brand_id", "=", request.context["brand_id"])]] - ) - return domain - @http.route( [ "/shop", diff --git a/website_sale_product_brand/i18n/ar.po b/website_sale_product_brand/i18n/ar.po index c03cd58c2d..2ce8b0a7ae 100644 --- a/website_sale_product_brand/i18n/ar.po +++ b/website_sale_product_brand/i18n/ar.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/bg.po b/website_sale_product_brand/i18n/bg.po index 2691fd90f3..7ef44ff2ff 100644 --- a/website_sale_product_brand/i18n/bg.po +++ b/website_sale_product_brand/i18n/bg.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/bs.po b/website_sale_product_brand/i18n/bs.po index acf9d0f2d8..df6ef645d1 100644 --- a/website_sale_product_brand/i18n/bs.po +++ b/website_sale_product_brand/i18n/bs.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/ca.po b/website_sale_product_brand/i18n/ca.po index 66734f988f..d240973a40 100644 --- a/website_sale_product_brand/i18n/ca.po +++ b/website_sale_product_brand/i18n/ca.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/cs.po b/website_sale_product_brand/i18n/cs.po index 5bc5591029..5a524600f9 100644 --- a/website_sale_product_brand/i18n/cs.po +++ b/website_sale_product_brand/i18n/cs.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/da.po b/website_sale_product_brand/i18n/da.po index e5e52cd75a..d4650ce53b 100644 --- a/website_sale_product_brand/i18n/da.po +++ b/website_sale_product_brand/i18n/da.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/de.po b/website_sale_product_brand/i18n/de.po index 117273c129..63c1f0bcc8 100644 --- a/website_sale_product_brand/i18n/de.po +++ b/website_sale_product_brand/i18n/de.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/el_GR.po b/website_sale_product_brand/i18n/el_GR.po index 895e2f19e0..60849167a4 100644 --- a/website_sale_product_brand/i18n/el_GR.po +++ b/website_sale_product_brand/i18n/el_GR.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/en_GB.po b/website_sale_product_brand/i18n/en_GB.po index ab7627bc69..4dd56e9eb1 100644 --- a/website_sale_product_brand/i18n/en_GB.po +++ b/website_sale_product_brand/i18n/en_GB.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/es.po b/website_sale_product_brand/i18n/es.po index e27f0993b1..c8326ab12c 100644 --- a/website_sale_product_brand/i18n/es.po +++ b/website_sale_product_brand/i18n/es.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "Marca" @@ -45,6 +46,7 @@ msgstr "Puede publicar" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "Limpiar filtros" diff --git a/website_sale_product_brand/i18n/es_AR.po b/website_sale_product_brand/i18n/es_AR.po index dfbec45636..7672e55936 100644 --- a/website_sale_product_brand/i18n/es_AR.po +++ b/website_sale_product_brand/i18n/es_AR.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "Puede Publicar" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/es_CL.po b/website_sale_product_brand/i18n/es_CL.po index 2e93fe5339..c9d2e6198b 100644 --- a/website_sale_product_brand/i18n/es_CL.po +++ b/website_sale_product_brand/i18n/es_CL.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/es_CO.po b/website_sale_product_brand/i18n/es_CO.po index 2a7b0e2fcb..8cf0e09f24 100644 --- a/website_sale_product_brand/i18n/es_CO.po +++ b/website_sale_product_brand/i18n/es_CO.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/es_CR.po b/website_sale_product_brand/i18n/es_CR.po index 2a96d53a26..780b85fa90 100644 --- a/website_sale_product_brand/i18n/es_CR.po +++ b/website_sale_product_brand/i18n/es_CR.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/es_DO.po b/website_sale_product_brand/i18n/es_DO.po index 42f9e1c5bc..128f3aa93a 100644 --- a/website_sale_product_brand/i18n/es_DO.po +++ b/website_sale_product_brand/i18n/es_DO.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/es_EC.po b/website_sale_product_brand/i18n/es_EC.po index df5ab8dac6..c557c16bf9 100644 --- a/website_sale_product_brand/i18n/es_EC.po +++ b/website_sale_product_brand/i18n/es_EC.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/es_MX.po b/website_sale_product_brand/i18n/es_MX.po index 3f15e75c73..505b85b525 100644 --- a/website_sale_product_brand/i18n/es_MX.po +++ b/website_sale_product_brand/i18n/es_MX.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/es_PE.po b/website_sale_product_brand/i18n/es_PE.po index f125a7c83e..e90dccfa24 100644 --- a/website_sale_product_brand/i18n/es_PE.po +++ b/website_sale_product_brand/i18n/es_PE.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/et.po b/website_sale_product_brand/i18n/et.po index 0129937103..6ed8e6d35f 100644 --- a/website_sale_product_brand/i18n/et.po +++ b/website_sale_product_brand/i18n/et.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/eu.po b/website_sale_product_brand/i18n/eu.po index 0edd0e07f9..0273d06f99 100644 --- a/website_sale_product_brand/i18n/eu.po +++ b/website_sale_product_brand/i18n/eu.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/fa.po b/website_sale_product_brand/i18n/fa.po index 0abe6cbca7..8595537b6d 100644 --- a/website_sale_product_brand/i18n/fa.po +++ b/website_sale_product_brand/i18n/fa.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/fi.po b/website_sale_product_brand/i18n/fi.po index 1991a47519..35fd0ac441 100644 --- a/website_sale_product_brand/i18n/fi.po +++ b/website_sale_product_brand/i18n/fi.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/fr.po b/website_sale_product_brand/i18n/fr.po index ab30c9a4de..95de45d3d3 100644 --- a/website_sale_product_brand/i18n/fr.po +++ b/website_sale_product_brand/i18n/fr.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/he.po b/website_sale_product_brand/i18n/he.po index 03add13bce..10433b1f3c 100644 --- a/website_sale_product_brand/i18n/he.po +++ b/website_sale_product_brand/i18n/he.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/hr.po b/website_sale_product_brand/i18n/hr.po index 1756bbdd90..7568a20c18 100644 --- a/website_sale_product_brand/i18n/hr.po +++ b/website_sale_product_brand/i18n/hr.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/hr_HR.po b/website_sale_product_brand/i18n/hr_HR.po index 0a3a556276..5274d0a7fb 100644 --- a/website_sale_product_brand/i18n/hr_HR.po +++ b/website_sale_product_brand/i18n/hr_HR.po @@ -23,6 +23,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -42,6 +43,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/hu.po b/website_sale_product_brand/i18n/hu.po index 0a3b5eccc5..469dea03ec 100644 --- a/website_sale_product_brand/i18n/hu.po +++ b/website_sale_product_brand/i18n/hu.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/id.po b/website_sale_product_brand/i18n/id.po index 0f5795c58e..aa0d5542e9 100644 --- a/website_sale_product_brand/i18n/id.po +++ b/website_sale_product_brand/i18n/id.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/it.po b/website_sale_product_brand/i18n/it.po index 9c0497d88f..ef3ae21737 100644 --- a/website_sale_product_brand/i18n/it.po +++ b/website_sale_product_brand/i18n/it.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "Marchio" @@ -45,6 +46,7 @@ msgstr "Può pubblicare" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "Pulisci filtri" diff --git a/website_sale_product_brand/i18n/ja.po b/website_sale_product_brand/i18n/ja.po index de5d0618c9..8cd44b6807 100644 --- a/website_sale_product_brand/i18n/ja.po +++ b/website_sale_product_brand/i18n/ja.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/ko.po b/website_sale_product_brand/i18n/ko.po index 890e2034da..cbf220d0ea 100644 --- a/website_sale_product_brand/i18n/ko.po +++ b/website_sale_product_brand/i18n/ko.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/lt.po b/website_sale_product_brand/i18n/lt.po index 06bdb016d3..4a7bf6ba10 100644 --- a/website_sale_product_brand/i18n/lt.po +++ b/website_sale_product_brand/i18n/lt.po @@ -23,6 +23,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -42,6 +43,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/lv.po b/website_sale_product_brand/i18n/lv.po index c22a9d9075..d092f41803 100644 --- a/website_sale_product_brand/i18n/lv.po +++ b/website_sale_product_brand/i18n/lv.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/mk.po b/website_sale_product_brand/i18n/mk.po index 6ae2e39d78..984fde90f9 100644 --- a/website_sale_product_brand/i18n/mk.po +++ b/website_sale_product_brand/i18n/mk.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/mn.po b/website_sale_product_brand/i18n/mn.po index ed37797ed3..00609cba0b 100644 --- a/website_sale_product_brand/i18n/mn.po +++ b/website_sale_product_brand/i18n/mn.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/nb.po b/website_sale_product_brand/i18n/nb.po index fde4e96670..a4530981df 100644 --- a/website_sale_product_brand/i18n/nb.po +++ b/website_sale_product_brand/i18n/nb.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/nl.po b/website_sale_product_brand/i18n/nl.po index 18f3a32ac6..fb4b5e8a3a 100644 --- a/website_sale_product_brand/i18n/nl.po +++ b/website_sale_product_brand/i18n/nl.po @@ -18,6 +18,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -37,6 +38,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/pl.po b/website_sale_product_brand/i18n/pl.po index 78b0f28655..54f095c606 100644 --- a/website_sale_product_brand/i18n/pl.po +++ b/website_sale_product_brand/i18n/pl.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/pt_BR.po b/website_sale_product_brand/i18n/pt_BR.po index 7ab575b000..856f04c1d7 100644 --- a/website_sale_product_brand/i18n/pt_BR.po +++ b/website_sale_product_brand/i18n/pt_BR.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "Pode Publicar" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/ru.po b/website_sale_product_brand/i18n/ru.po index ebd417fbba..f1b73ef2a7 100644 --- a/website_sale_product_brand/i18n/ru.po +++ b/website_sale_product_brand/i18n/ru.po @@ -23,6 +23,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -42,6 +43,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/sk.po b/website_sale_product_brand/i18n/sk.po index 846ebcb6e5..db7ac825f4 100644 --- a/website_sale_product_brand/i18n/sk.po +++ b/website_sale_product_brand/i18n/sk.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/sl.po b/website_sale_product_brand/i18n/sl.po index 9e2719c7ab..59dbf51509 100644 --- a/website_sale_product_brand/i18n/sl.po +++ b/website_sale_product_brand/i18n/sl.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "Blagovna znamka" @@ -45,6 +46,7 @@ msgstr "Lahko objavlja" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "Počisti filtre" diff --git a/website_sale_product_brand/i18n/sr.po b/website_sale_product_brand/i18n/sr.po index c53794e93a..19e192c1ea 100644 --- a/website_sale_product_brand/i18n/sr.po +++ b/website_sale_product_brand/i18n/sr.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/sr@latin.po b/website_sale_product_brand/i18n/sr@latin.po index c38283c808..7cc52148b6 100644 --- a/website_sale_product_brand/i18n/sr@latin.po +++ b/website_sale_product_brand/i18n/sr@latin.po @@ -23,6 +23,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -42,6 +43,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/sv.po b/website_sale_product_brand/i18n/sv.po index 9b435f120b..5652e2896b 100644 --- a/website_sale_product_brand/i18n/sv.po +++ b/website_sale_product_brand/i18n/sv.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "Kan publicera" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/th.po b/website_sale_product_brand/i18n/th.po index bc8c387228..3adac5a4fa 100644 --- a/website_sale_product_brand/i18n/th.po +++ b/website_sale_product_brand/i18n/th.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/uk.po b/website_sale_product_brand/i18n/uk.po index f41ff88b54..34af8054d7 100644 --- a/website_sale_product_brand/i18n/uk.po +++ b/website_sale_product_brand/i18n/uk.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/vi.po b/website_sale_product_brand/i18n/vi.po index dd988f6d6d..2e27847d34 100644 --- a/website_sale_product_brand/i18n/vi.po +++ b/website_sale_product_brand/i18n/vi.po @@ -21,6 +21,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -40,6 +41,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/website_sale_product_brand.pot b/website_sale_product_brand/i18n/website_sale_product_brand.pot index 0865610611..4a9959f697 100644 --- a/website_sale_product_brand/i18n/website_sale_product_brand.pot +++ b/website_sale_product_brand/i18n/website_sale_product_brand.pot @@ -15,6 +15,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -34,6 +35,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/zh_CN.po b/website_sale_product_brand/i18n/zh_CN.po index e43767f9b3..fdae068e47 100644 --- a/website_sale_product_brand/i18n/zh_CN.po +++ b/website_sale_product_brand/i18n/zh_CN.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/i18n/zh_TW.po b/website_sale_product_brand/i18n/zh_TW.po index 12945dccfa..03713a8eaf 100644 --- a/website_sale_product_brand/i18n/zh_TW.po +++ b/website_sale_product_brand/i18n/zh_TW.po @@ -22,6 +22,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Brand" msgstr "" @@ -41,6 +42,7 @@ msgstr "" #. module: website_sale_product_brand #: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_products_brands +#: model_terms:ir.ui.view,arch_db:website_sale_product_brand.website_sale_filter_brand_top_products_brands msgid "Clear Filters" msgstr "" diff --git a/website_sale_product_brand/static/description/index.html b/website_sale_product_brand/static/description/index.html index a47ad3dbd5..1cd7664c3c 100644 --- a/website_sale_product_brand/static/description/index.html +++ b/website_sale_product_brand/static/description/index.html @@ -372,7 +372,7 @@

Product Brand Filtering in Website

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:2866648306719d101a1a7e53c7797ebb0c3f171e68905bf0f627ed69f5f020f4 +!! source digest: sha256:56fc967690ebf594ddae22175c85de10669282fa8adcd2d8efe631a6c2fbf42c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This module was written to extend the functionality of product filtering diff --git a/website_sale_product_brand/views/templates.xml b/website_sale_product_brand/views/templates.xml index e3b8731792..40515a2ef5 100644 --- a/website_sale_product_brand/views/templates.xml +++ b/website_sale_product_brand/views/templates.xml @@ -56,7 +56,7 @@ class="accordion-item rounded-0 border-top-0 py-3" > @@ -85,4 +85,97 @@ + diff --git a/website_sale_product_description/README.rst b/website_sale_product_description/README.rst new file mode 100644 index 0000000000..70491598a6 --- /dev/null +++ b/website_sale_product_description/README.rst @@ -0,0 +1,97 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +================================ +Website Sale Product Description +================================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:a2bfa334d5cf69e62824dce370e671fd1fe3f8e1f498e535ae23624926b04a43 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/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 + :target: https://github.com/OCA/e-commerce/tree/18.0/website_sale_product_description + :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-18-0/e-commerce-18-0-website_sale_product_description + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/e-commerce&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +With this addon you can edit a specific HTML description for a product. +This description will be shown within the e-Commerce product page. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +Once installed, website description is editable from product form: + +|image1| + +Then, this description will be shown within the e-Commerce product page: + +|image2| + +.. |image1| image:: https://raw.githubusercontent.com/OCA/e-commerce/18.0/website_sale_product_description/static/description/product.png +.. |image2| image:: https://raw.githubusercontent.com/OCA/e-commerce/18.0/website_sale_product_description/static/description/website-product.png + +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 +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Solvos + +Contributors +------------ + +- David Alonso +- Mantas Šniukas +- Maciej Wichowski + +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_description/__init__.py b/website_sale_product_description/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/website_sale_product_description/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/website_sale_product_description/__manifest__.py b/website_sale_product_description/__manifest__.py new file mode 100644 index 0000000000..5aa2420bb7 --- /dev/null +++ b/website_sale_product_description/__manifest__.py @@ -0,0 +1,21 @@ +# © 2020 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +{ + "name": "Website Sale Product Description", + "category": "Website", + "summary": "Shows custom e-Commerce description for products", + "version": "18.0.1.0.0", + "website": "https://github.com/OCA/e-commerce", + "author": "Solvos, Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": ["website_sale"], + "data": [ + "views/website_sale_template.xml", + "views/product_template.xml", + ], + "demo": [ + "data/demo_website_sale_product_description.xml", + ], +} diff --git a/website_sale_product_description/data/demo_website_sale_product_description.xml b/website_sale_product_description/data/demo_website_sale_product_description.xml new file mode 100644 index 0000000000..d2ea7ccc38 --- /dev/null +++ b/website_sale_product_description/data/demo_website_sale_product_description.xml @@ -0,0 +1,11 @@ + + + + extended + description for this product, only available on e-commerce frontend. +
+ This description can include HTML markup.]]>
+
+
diff --git a/website_sale_product_description/i18n/ca.po b/website_sale_product_description/i18n/ca.po new file mode 100644 index 0000000000..49f095d4db --- /dev/null +++ b/website_sale_product_description/i18n/ca.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_description +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-01-20 20:44+0000\n" +"Last-Translator: claudiagn \n" +"Language-Team: none\n" +"Language: ca\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" +"X-Generator: Weblate 4.3.2\n" + +#. module: website_sale_product_description +#: model:ir.model.fields,field_description:website_sale_product_description.field_product_product__public_description +#: model:ir.model.fields,field_description:website_sale_product_description.field_product_template__public_description +#: model_terms:ir.ui.view,arch_db:website_sale_product_description.product_template_form_view +msgid "Description for e-Commerce" +msgstr "Descripció per l' e-Commerce" + +#. module: website_sale_product_description +#: model:ir.model,name:website_sale_product_description.model_product_template +msgid "Product" +msgstr "" + +#. module: website_sale_product_description +#: model_terms:ir.ui.view,arch_db:website_sale_product_description.product_template_form_view +msgid "This description will be shown on e-commerce frontend" +msgstr "Aquesta descripció serà mostrada al frontend del e-commerce" + +#~ msgid "Product Template" +#~ msgstr "Plantilla de producte" diff --git a/website_sale_product_description/i18n/es.po b/website_sale_product_description/i18n/es.po new file mode 100644 index 0000000000..a6adacefa3 --- /dev/null +++ b/website_sale_product_description/i18n/es.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_description +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-10-12 11:36+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\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" +"X-Generator: Weblate 4.17\n" + +#. module: website_sale_product_description +#: model:ir.model.fields,field_description:website_sale_product_description.field_product_product__public_description +#: model:ir.model.fields,field_description:website_sale_product_description.field_product_template__public_description +#: model_terms:ir.ui.view,arch_db:website_sale_product_description.product_template_form_view +msgid "Description for e-Commerce" +msgstr "Descripción para e-Commerce" + +#. module: website_sale_product_description +#: model:ir.model,name:website_sale_product_description.model_product_template +msgid "Product" +msgstr "Producto" + +#. module: website_sale_product_description +#: model_terms:ir.ui.view,arch_db:website_sale_product_description.product_template_form_view +msgid "This description will be shown on e-commerce frontend" +msgstr "Esta descripción se mostrará en el frontend del e-commerce" + +#~ msgid "Product Template" +#~ msgstr "Producto" diff --git a/website_sale_product_description/i18n/es_AR.po b/website_sale_product_description/i18n/es_AR.po new file mode 100644 index 0000000000..bfe1e2f825 --- /dev/null +++ b/website_sale_product_description/i18n/es_AR.po @@ -0,0 +1,46 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_description +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-10-29 08:27+0000\n" +"Last-Translator: Ignacio Buioli \n" +"Language-Team: none\n" +"Language: es_AR\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" +"X-Generator: Weblate 4.17\n" + +#. module: website_sale_product_description +#: model:ir.model.fields,field_description:website_sale_product_description.field_product_product__public_description +#: model:ir.model.fields,field_description:website_sale_product_description.field_product_template__public_description +#: model_terms:ir.ui.view,arch_db:website_sale_product_description.product_template_form_view +msgid "Description for e-Commerce" +msgstr "Descripción para el e-Commerce" + +#. module: website_sale_product_description +#: model:ir.model,name:website_sale_product_description.model_product_template +msgid "Product" +msgstr "Producto" + +#. module: website_sale_product_description +#: model_terms:ir.ui.view,arch_db:website_sale_product_description.product_template_form_view +msgid "This description will be shown on e-commerce frontend" +msgstr "Esta descripción se mostrará en la interfaz de comercio electrónico" + +#~ msgid "Display Name" +#~ msgstr "Mostrar Nombre" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación en" + +#~ msgid "Product Template" +#~ msgstr "Plantilla de Producto" diff --git a/website_sale_product_description/i18n/es_ES.po b/website_sale_product_description/i18n/es_ES.po new file mode 100644 index 0000000000..d5219572ea --- /dev/null +++ b/website_sale_product_description/i18n/es_ES.po @@ -0,0 +1,32 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_description +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: es_ES\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_product_description +#: model:ir.model.fields,field_description:website_sale_product_description.field_product_product__public_description +#: model:ir.model.fields,field_description:website_sale_product_description.field_product_template__public_description +#: model_terms:ir.ui.view,arch_db:website_sale_product_description.product_template_form_view +msgid "Description for e-Commerce" +msgstr "" + +#. module: website_sale_product_description +#: model:ir.model,name:website_sale_product_description.model_product_template +msgid "Product" +msgstr "" + +#. module: website_sale_product_description +#: model_terms:ir.ui.view,arch_db:website_sale_product_description.product_template_form_view +msgid "This description will be shown on e-commerce frontend" +msgstr "" diff --git a/website_sale_product_description/i18n/it.po b/website_sale_product_description/i18n/it.po new file mode 100644 index 0000000000..4873889d86 --- /dev/null +++ b/website_sale_product_description/i18n/it.po @@ -0,0 +1,34 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_description +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-05-08 16:34+0000\n" +"Last-Translator: mymage \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" +"X-Generator: Weblate 4.17\n" + +#. module: website_sale_product_description +#: model:ir.model.fields,field_description:website_sale_product_description.field_product_product__public_description +#: model:ir.model.fields,field_description:website_sale_product_description.field_product_template__public_description +#: model_terms:ir.ui.view,arch_db:website_sale_product_description.product_template_form_view +msgid "Description for e-Commerce" +msgstr "Descrizione per e-Commerce" + +#. module: website_sale_product_description +#: model:ir.model,name:website_sale_product_description.model_product_template +msgid "Product" +msgstr "Prodotto" + +#. module: website_sale_product_description +#: model_terms:ir.ui.view,arch_db:website_sale_product_description.product_template_form_view +msgid "This description will be shown on e-commerce frontend" +msgstr "Questa descrizione verrà mostrata sul frontend e-commerce" diff --git a/website_sale_product_description/i18n/nl.po b/website_sale_product_description/i18n/nl.po new file mode 100644 index 0000000000..f49b16d3db --- /dev/null +++ b/website_sale_product_description/i18n/nl.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_description +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-04-05 18:46+0000\n" +"Last-Translator: Bosd \n" +"Language-Team: none\n" +"Language: nl\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" +"X-Generator: Weblate 4.3.2\n" + +#. module: website_sale_product_description +#: model:ir.model.fields,field_description:website_sale_product_description.field_product_product__public_description +#: model:ir.model.fields,field_description:website_sale_product_description.field_product_template__public_description +#: model_terms:ir.ui.view,arch_db:website_sale_product_description.product_template_form_view +msgid "Description for e-Commerce" +msgstr "Beschrijving voor E-Commerce" + +#. module: website_sale_product_description +#: model:ir.model,name:website_sale_product_description.model_product_template +msgid "Product" +msgstr "" + +#. module: website_sale_product_description +#: model_terms:ir.ui.view,arch_db:website_sale_product_description.product_template_form_view +msgid "This description will be shown on e-commerce frontend" +msgstr "Deze omschrijving zal worden weergegeven op de E-comerce productpagina" + +#~ msgid "Product Template" +#~ msgstr "Product Sjabloon" diff --git a/website_sale_product_description/i18n/pt.po b/website_sale_product_description/i18n/pt.po new file mode 100644 index 0000000000..323eeaffd1 --- /dev/null +++ b/website_sale_product_description/i18n/pt.po @@ -0,0 +1,46 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_description +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-07-27 18:49+0000\n" +"Last-Translator: Pedro Castro Silva \n" +"Language-Team: none\n" +"Language: pt\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" +"X-Generator: Weblate 4.3.2\n" + +#. module: website_sale_product_description +#: model:ir.model.fields,field_description:website_sale_product_description.field_product_product__public_description +#: model:ir.model.fields,field_description:website_sale_product_description.field_product_template__public_description +#: model_terms:ir.ui.view,arch_db:website_sale_product_description.product_template_form_view +msgid "Description for e-Commerce" +msgstr "Descrição para e-Commerce" + +#. module: website_sale_product_description +#: model:ir.model,name:website_sale_product_description.model_product_template +msgid "Product" +msgstr "" + +#. module: website_sale_product_description +#: model_terms:ir.ui.view,arch_db:website_sale_product_description.product_template_form_view +msgid "This description will be shown on e-commerce frontend" +msgstr "Esta descrição será exibida no frontend do e-commerce" + +#~ msgid "Display Name" +#~ msgstr "Nome a Exibir" + +#~ msgid "ID" +#~ msgstr "Id" + +#~ msgid "Last Modified on" +#~ msgstr "Última Modificação em" + +#~ msgid "Product Template" +#~ msgstr "Modelo de Produto" diff --git a/website_sale_product_description/i18n/website_sale_product_description.pot b/website_sale_product_description/i18n/website_sale_product_description.pot new file mode 100644 index 0000000000..d3f6dceef5 --- /dev/null +++ b/website_sale_product_description/i18n/website_sale_product_description.pot @@ -0,0 +1,31 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_description +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \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_description +#: model:ir.model.fields,field_description:website_sale_product_description.field_product_product__public_description +#: model:ir.model.fields,field_description:website_sale_product_description.field_product_template__public_description +#: model_terms:ir.ui.view,arch_db:website_sale_product_description.product_template_form_view +msgid "Description for e-Commerce" +msgstr "" + +#. module: website_sale_product_description +#: model:ir.model,name:website_sale_product_description.model_product_template +msgid "Product" +msgstr "" + +#. module: website_sale_product_description +#: model_terms:ir.ui.view,arch_db:website_sale_product_description.product_template_form_view +msgid "This description will be shown on e-commerce frontend" +msgstr "" diff --git a/website_sale_product_description/models/__init__.py b/website_sale_product_description/models/__init__.py new file mode 100644 index 0000000000..9649db77a1 --- /dev/null +++ b/website_sale_product_description/models/__init__.py @@ -0,0 +1 @@ +from . import product diff --git a/website_sale_product_description/models/product.py b/website_sale_product_description/models/product.py new file mode 100644 index 0000000000..bcd91b5568 --- /dev/null +++ b/website_sale_product_description/models/product.py @@ -0,0 +1,16 @@ +# © 2020 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from odoo import fields, models +from odoo.tools.translate import html_translate + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + public_description = fields.Html( + "Description for e-Commerce", + sanitize_attributes=False, + translate=html_translate, + copy=False, + ) diff --git a/website_sale_product_description/pyproject.toml b/website_sale_product_description/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/website_sale_product_description/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/website_sale_product_description/readme/CONTRIBUTORS.md b/website_sale_product_description/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..3d97751ce3 --- /dev/null +++ b/website_sale_product_description/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +- David Alonso \<\> +- Mantas Šniukas \<\> +- Maciej Wichowski \<\> diff --git a/website_sale_product_description/readme/DESCRIPTION.md b/website_sale_product_description/readme/DESCRIPTION.md new file mode 100644 index 0000000000..3c3adc9e97 --- /dev/null +++ b/website_sale_product_description/readme/DESCRIPTION.md @@ -0,0 +1,2 @@ +With this addon you can edit a specific HTML description for a product. +This description will be shown within the e-Commerce product page. diff --git a/website_sale_product_description/readme/USAGE.md b/website_sale_product_description/readme/USAGE.md new file mode 100644 index 0000000000..d472c9f3d5 --- /dev/null +++ b/website_sale_product_description/readme/USAGE.md @@ -0,0 +1,7 @@ +Once installed, website description is editable from product form: + +![](../static/description/product.png) + +Then, this description will be shown within the e-Commerce product page: + +![](../static/description/website-product.png) diff --git a/website_sale_product_description/static/description/icon.png b/website_sale_product_description/static/description/icon.png new file mode 100644 index 0000000000..3a0328b516 Binary files /dev/null and b/website_sale_product_description/static/description/icon.png differ diff --git a/website_sale_product_description/static/description/index.html b/website_sale_product_description/static/description/index.html new file mode 100644 index 0000000000..1e8596577e --- /dev/null +++ b/website_sale_product_description/static/description/index.html @@ -0,0 +1,440 @@ + + + + + +README.rst + + + +

+ + + +Odoo Community Association + +
+

Website Sale Product Description

+ +

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

+

With this addon you can edit a specific HTML description for a product. +This description will be shown within the e-Commerce product page.

+

Table of contents

+ +
+

Usage

+

Once installed, website description is editable from product form:

+

image1

+

Then, this description will be shown within the e-Commerce product page:

+

image2

+
+
+

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 +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Solvos
  • +
+
+
+

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_description/static/description/product.png b/website_sale_product_description/static/description/product.png new file mode 100644 index 0000000000..3d1f148f42 Binary files /dev/null and b/website_sale_product_description/static/description/product.png differ diff --git a/website_sale_product_description/static/description/website-product.png b/website_sale_product_description/static/description/website-product.png new file mode 100644 index 0000000000..4e3af37109 Binary files /dev/null and b/website_sale_product_description/static/description/website-product.png differ diff --git a/website_sale_product_description/views/product_template.xml b/website_sale_product_description/views/product_template.xml new file mode 100644 index 0000000000..0e833bda21 --- /dev/null +++ b/website_sale_product_description/views/product_template.xml @@ -0,0 +1,21 @@ + + + + product.template.form.view.inherit + product.template + + + + + + + + + + diff --git a/website_sale_product_description/views/website_sale_template.xml b/website_sale_product_description/views/website_sale_template.xml new file mode 100644 index 0000000000..8933596bfb --- /dev/null +++ b/website_sale_product_description/views/website_sale_template.xml @@ -0,0 +1,16 @@ + + + + diff --git a/website_sale_product_minimal_price/README.rst b/website_sale_product_minimal_price/README.rst new file mode 100644 index 0000000000..dd7ecfab7e --- /dev/null +++ b/website_sale_product_minimal_price/README.rst @@ -0,0 +1,107 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +================================== +Website Sale Product Minimal Price +================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:3b5de9ff76203306fe88ddc42e7433f4b1bf9111aea11f2f8de482ed1f8bc36e + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png + :target: https://odoo-community.org/page/development-status + :alt: Production/Stable +.. |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 + :target: https://github.com/OCA/e-commerce/tree/18.0/website_sale_product_minimal_price + :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-18-0/e-commerce-18-0-website_sale_product_minimal_price + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/e-commerce&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of website sale module to allow to +display the minimal price in '/shop' view when product has distinct +variants price and set order by minimal price in product's view. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +1. Go to backend and set a product with variants and extra price by + attribute value or define a distinct prices in public price list for + this variant. +2. Go to Website Shop. +3. You will see that in main products view appears the text "From " with + minimal price if the product has a distinct prices by attribute. +4. Click on product, the price displayed is the minimal variant price. + +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 +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Tecnativa + +Contributors +------------ + +- `Tecnativa `__: + + - Sergio Teruel + - Carlos Roca + - Pedro M. Baeza + - Pilar Vargas + - Carlos Lopez + +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. + +.. |maintainer-sergio-teruel| image:: https://github.com/sergio-teruel.png?size=40px + :target: https://github.com/sergio-teruel + :alt: sergio-teruel + +Current `maintainer `__: + +|maintainer-sergio-teruel| + +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_minimal_price/__init__.py b/website_sale_product_minimal_price/__init__.py new file mode 100644 index 0000000000..31660d6a96 --- /dev/null +++ b/website_sale_product_minimal_price/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models diff --git a/website_sale_product_minimal_price/__manifest__.py b/website_sale_product_minimal_price/__manifest__.py new file mode 100644 index 0000000000..211969b9e1 --- /dev/null +++ b/website_sale_product_minimal_price/__manifest__.py @@ -0,0 +1,26 @@ +# Copyright 2019 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Website Sale Product Minimal Price", + "summary": "Display minimal price for products that has variants", + "version": "18.0.1.0.0", + "development_status": "Production/Stable", + "maintainers": ["sergio-teruel"], + "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/templates.xml"], + "assets": { + "web.assets_frontend": [ + "/website_sale_product_minimal_price/static/src/js/*.esm.js", + "/website_sale_product_minimal_price/static/src/xml/*.xml", + ], + "web.assets_tests": [ + "/website_sale_product_minimal_price/static/src/tests/**/*.esm.js" + ], + }, +} diff --git a/website_sale_product_minimal_price/i18n/ca.po b/website_sale_product_minimal_price/i18n/ca.po new file mode 100644 index 0000000000..ec7a0aabad --- /dev/null +++ b/website_sale_product_minimal_price/i18n/ca.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_minimal_price +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-17 14:53+0000\n" +"PO-Revision-Date: 2021-05-17 16:54+0200\n" +"Last-Translator: Carlos \n" +"Language-Team: none\n" +"Language: ca\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_minimal_price +#. odoo-javascript +#: code:addons/website_sale_product_minimal_price/static/src/xml/website_sale_product_minimal_price.xml:0 +#, python-format +msgid "From" +msgstr "De" + +#. module: website_sale_product_minimal_price +#. odoo-javascript +#: code:addons/website_sale_product_minimal_price/static/src/xml/website_sale_product_price_scale.xml:0 +#, python-format +msgid "Prices per quantity (" +msgstr "Preus per quantitat (" + +#. module: website_sale_product_minimal_price +#: model:ir.model,name:website_sale_product_minimal_price.model_product_template +msgid "Product" +msgstr "" + +#~ msgid "Product Template" +#~ msgstr "Plantilla de producte" diff --git a/website_sale_product_minimal_price/i18n/es.po b/website_sale_product_minimal_price/i18n/es.po new file mode 100644 index 0000000000..3c5c320866 --- /dev/null +++ b/website_sale_product_minimal_price/i18n/es.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_minimal_price +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-17 14:53+0000\n" +"PO-Revision-Date: 2021-05-17 16:54+0200\n" +"Last-Translator: Carlos \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_minimal_price +#. odoo-javascript +#: code:addons/website_sale_product_minimal_price/static/src/xml/website_sale_product_minimal_price.xml:0 +#, python-format +msgid "From" +msgstr "Desde" + +#. module: website_sale_product_minimal_price +#. odoo-javascript +#: code:addons/website_sale_product_minimal_price/static/src/xml/website_sale_product_price_scale.xml:0 +#, python-format +msgid "Prices per quantity (" +msgstr "Precios por cantidad (" + +#. module: website_sale_product_minimal_price +#: model:ir.model,name:website_sale_product_minimal_price.model_product_template +msgid "Product" +msgstr "" + +#~ msgid "Product Template" +#~ msgstr "Plantilla de producto" diff --git a/website_sale_product_minimal_price/i18n/fr.po b/website_sale_product_minimal_price/i18n/fr.po new file mode 100644 index 0000000000..816fbaf98a --- /dev/null +++ b/website_sale_product_minimal_price/i18n/fr.po @@ -0,0 +1,39 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_minimal_price +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-09-03 13:35+0000\n" +"Last-Translator: benj-filament \n" +"Language-Team: none\n" +"Language: fr\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" +"X-Generator: Weblate 4.17\n" + +#. module: website_sale_product_minimal_price +#. odoo-javascript +#: code:addons/website_sale_product_minimal_price/static/src/xml/website_sale_product_minimal_price.xml:0 +#, python-format +msgid "From" +msgstr "À partir de" + +#. module: website_sale_product_minimal_price +#. odoo-javascript +#: code:addons/website_sale_product_minimal_price/static/src/xml/website_sale_product_price_scale.xml:0 +#, python-format +msgid "Prices per quantity (" +msgstr "Prix par quantité (" + +#. module: website_sale_product_minimal_price +#: model:ir.model,name:website_sale_product_minimal_price.model_product_template +msgid "Product" +msgstr "" + +#~ msgid "Product Template" +#~ msgstr "Modèle d'article" diff --git a/website_sale_product_minimal_price/i18n/it.po b/website_sale_product_minimal_price/i18n/it.po new file mode 100644 index 0000000000..7fef835fef --- /dev/null +++ b/website_sale_product_minimal_price/i18n/it.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_minimal_price +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-05-08 16:34+0000\n" +"Last-Translator: mymage \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" +"X-Generator: Weblate 4.17\n" + +#. module: website_sale_product_minimal_price +#. odoo-javascript +#: code:addons/website_sale_product_minimal_price/static/src/xml/website_sale_product_minimal_price.xml:0 +#, python-format +msgid "From" +msgstr "Dal" + +#. module: website_sale_product_minimal_price +#. odoo-javascript +#: code:addons/website_sale_product_minimal_price/static/src/xml/website_sale_product_price_scale.xml:0 +#, python-format +msgid "Prices per quantity (" +msgstr "Prezzi per quantità (" + +#. module: website_sale_product_minimal_price +#: model:ir.model,name:website_sale_product_minimal_price.model_product_template +msgid "Product" +msgstr "Prodotto" diff --git a/website_sale_product_minimal_price/i18n/nl.po b/website_sale_product_minimal_price/i18n/nl.po new file mode 100644 index 0000000000..5995633326 --- /dev/null +++ b/website_sale_product_minimal_price/i18n/nl.po @@ -0,0 +1,40 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_minimal_price +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-17 14:53+0000\n" +"PO-Revision-Date: 2021-05-17 16:55+0200\n" +"Last-Translator: Carlos \n" +"Language-Team: none\n" +"Language: nl\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_minimal_price +#. odoo-javascript +#: code:addons/website_sale_product_minimal_price/static/src/xml/website_sale_product_minimal_price.xml:0 +#, python-format +msgid "From" +msgstr "Van" + +#. module: website_sale_product_minimal_price +#. odoo-javascript +#: code:addons/website_sale_product_minimal_price/static/src/xml/website_sale_product_price_scale.xml:0 +#, python-format +msgid "Prices per quantity (" +msgstr "" + +#. module: website_sale_product_minimal_price +#: model:ir.model,name:website_sale_product_minimal_price.model_product_template +msgid "Product" +msgstr "" + +#~ msgid "Product Template" +#~ msgstr "Product Sjabloon" diff --git a/website_sale_product_minimal_price/i18n/pt.po b/website_sale_product_minimal_price/i18n/pt.po new file mode 100644 index 0000000000..d013857b84 --- /dev/null +++ b/website_sale_product_minimal_price/i18n/pt.po @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_minimal_price +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-08-22 14:07+0000\n" +"Last-Translator: Pedro Castro Silva \n" +"Language-Team: none\n" +"Language: pt\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" +"X-Generator: Weblate 4.3.2\n" + +#. module: website_sale_product_minimal_price +#. odoo-javascript +#: code:addons/website_sale_product_minimal_price/static/src/xml/website_sale_product_minimal_price.xml:0 +#, python-format +msgid "From" +msgstr "A partir de" + +#. module: website_sale_product_minimal_price +#. odoo-javascript +#: code:addons/website_sale_product_minimal_price/static/src/xml/website_sale_product_price_scale.xml:0 +#, python-format +msgid "Prices per quantity (" +msgstr "Preços por quantidade (" + +#. module: website_sale_product_minimal_price +#: model:ir.model,name:website_sale_product_minimal_price.model_product_template +msgid "Product" +msgstr "" + +#~ msgid "Product Template" +#~ msgstr "Modelo de Produto" + +#~ msgid "Display Name" +#~ msgstr "Nome a Exibir" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Modific. pela última vez em" diff --git a/website_sale_product_minimal_price/i18n/website_sale_product_minimal_price.pot b/website_sale_product_minimal_price/i18n/website_sale_product_minimal_price.pot new file mode 100644 index 0000000000..966e6c7c73 --- /dev/null +++ b/website_sale_product_minimal_price/i18n/website_sale_product_minimal_price.pot @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_sale_product_minimal_price +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \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_minimal_price +#: model_terms:ir.ui.view,arch_db:website_sale_product_minimal_price.products_item +msgid "From" +msgstr "" + +#. module: website_sale_product_minimal_price +#. odoo-javascript +#: code:addons/website_sale_product_minimal_price/static/src/xml/website_sale_product_price_scale.xml:0 +msgid "Prices per quantity (" +msgstr "" + +#. module: website_sale_product_minimal_price +#: model:ir.model,name:website_sale_product_minimal_price.model_product_template +msgid "Product" +msgstr "" diff --git a/website_sale_product_minimal_price/models/__init__.py b/website_sale_product_minimal_price/models/__init__.py new file mode 100644 index 0000000000..e8fa8f6bf1 --- /dev/null +++ b/website_sale_product_minimal_price/models/__init__.py @@ -0,0 +1 @@ +from . import product_template diff --git a/website_sale_product_minimal_price/models/product_template.py b/website_sale_product_minimal_price/models/product_template.py new file mode 100644 index 0000000000..e9b1aedf1e --- /dev/null +++ b/website_sale_product_minimal_price/models/product_template.py @@ -0,0 +1,200 @@ +# Copyright 2019 Tecnativa - Sergio Teruel +# Copyright 2020 Tecnativa - Pedro M. Baeza +# Copyright 2021 Tecnativa - Carlos Roca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models +from odoo.osv import expression + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + def _get_product_subpricelists(self, pricelist): + base_domain = pricelist._get_applicable_rules_domain( + self, fields.Datetime.now() + ) + domain = expression.AND( + [ + base_domain, + [("compute_price", "=", "formula"), ("base", "=", "pricelist")], + ] + ) + pricelist_data = self.env["product.pricelist.item"]._read_group( + domain, + groupby=["base_pricelist_id"], + aggregates=["base_pricelist_id:array_agg"], + ) + pricelist_ids = [item for line in pricelist_data for item in line[1]] + return self.env["product.pricelist"].browse(pricelist_ids) + + def _get_variants_from_pricelist(self, pricelist): + return pricelist.mapped("item_ids").filtered( + lambda i: i.product_id in self.product_variant_ids + ) + + def _get_pricelist_variant_items(self, pricelist): + res = self._get_variants_from_pricelist(pricelist) + next_pricelists = self._get_product_subpricelists(pricelist) + res |= self._get_variants_from_pricelist(next_pricelists) + visited_pricelists = pricelist + while next_pricelists: + pricelist = next_pricelists[0] + if pricelist not in visited_pricelists: + res |= self._get_variants_from_pricelist(pricelist) + next_pricelists |= self._get_product_subpricelists(pricelist) + next_pricelists -= pricelist + visited_pricelists |= pricelist + else: + next_pricelists -= pricelist + return res + + def _get_cheapest_info(self, pricelist): + """Helper method for getting the variant with lowest price.""" + # TODO: Cache this method for getting better performance + self.ensure_one() + min_price = 99999999 + product_find = self.env["product.product"] + add_qty = 0 + has_distinct_price = False + # Variants with extra price + variants_extra_price = self.product_variant_ids.filtered("price_extra") + variants_without_extra_price = self.product_variant_ids - variants_extra_price + # Avoid compute prices when pricelist has not item variants defined + variant_items = self._get_pricelist_variant_items(pricelist) + if variant_items: + # Take into account only the variants defined in pricelist and one + # variant not defined to compute prices defined at template or + # category level. Maybe there is any definition on template that + # has cheaper price. + variants = variant_items.mapped("product_id") + products = variants + (self.product_variant_ids - variants)[:1] + else: + products = variants_without_extra_price[:1] + products |= variants_extra_price + for product in products: + for qty in [1, 99999999]: + product_price = product.with_context( + quantity=qty, pricelist=pricelist.id + )._get_contextual_price() + if product_price != min_price and min_price != 99999999: + # Mark if there are different prices iterating over + # variants and comparing qty 1 and maximum qty + has_distinct_price = True + if product_price < min_price: + min_price = product_price + add_qty = qty + product_find = product + return product_find, add_qty, has_distinct_price + + def _get_first_possible_combination( + self, parent_combination=None, necessary_values=None + ): + """Get the cheaper product combination for the website view.""" + res = super()._get_first_possible_combination( + parent_combination=parent_combination, necessary_values=necessary_values + ) + context = self.env.context + if context.get("website_id") and self.product_variant_count > 1: + # It only makes sense to change the default one when there are + # more than one variants and we know the pricelist + current_website = self.env["website"].get_current_website() + pricelist = current_website.pricelist_id + product = self._get_cheapest_info(pricelist)[0] + # Rebuild the combination in the expected order + res = self.env["product.template.attribute.value"] + for line in product.valid_product_template_attribute_line_ids: + value = product.product_template_attribute_value_ids.filtered( + lambda x, line=line: x in line.product_template_value_ids + ) + if not value: + value = line.product_template_value_ids[:1] + res += value + return res + + def _get_combination_info( + self, + combination=False, + product_id=False, + add_qty=1, + parent_combination=False, + only_template=False, + ): + combination_info = super()._get_combination_info( + combination=combination, + product_id=product_id, + add_qty=add_qty, + parent_combination=parent_combination, + only_template=only_template, + ) + if only_template and not product_id: + return combination_info + combination = combination or self.env["product.template.attribute.value"] + if only_template: + product = self.env["product.product"] + elif product_id: + product = self.env["product.product"].browse(product_id) + if combination - product.product_template_attribute_value_ids: + # If the combination is not fully represented in the given product + # make sure to fetch the right product for the given combination + product = self._get_variant_for_combination(combination) + else: + product = self._get_variant_for_combination(combination) + if not product: + # If no product is found, return the combination info without prices + # the combination is not valid for the product or the product is archived + return combination_info + # Getting all min_quantity of the current product to compute the possible + # price scale. + qty_list = self.env["product.pricelist.item"].search( + [ + "|", + ("product_id", "=", product.id), + "|", + ("product_tmpl_id", "=", product.product_tmpl_id.id), + ( + "categ_id", + "in", + list(map(int, product.categ_id.parent_path.split("/")[0:-1])), + ), + ("min_quantity", ">", 0), + ] + ) + qty_list = sorted(set(qty_list.mapped("min_quantity"))) + price_scale = [] + last_price = product.with_context(quantity=0)._get_contextual_price() + for min_qty in qty_list: + new_price = product.with_context(quantity=min_qty)._get_contextual_price() + if new_price != last_price: + price_scale.append( + { + "min_qty": min_qty, + "price": new_price, + "currency_id": product.currency_id.id, + } + ) + last_price = new_price + combination_info.update( + uom_name=product.uom_id.name, + minimal_price_scale=price_scale, + ) + return combination_info + + def _get_sales_prices(self, website): + prices = super()._get_sales_prices(website) + pricelist = website.pricelist_id + for template in self.filtered("is_published"): + price_info = prices[template.id] + product, add_qty, has_distinct_price = template._get_cheapest_info( + pricelist + ) + product_price_info = template._get_additionnal_combination_info( + product, + quantity=add_qty, + date=fields.Date.context_today(self), + website=website, + ) + price_info.update( + distinct_prices=has_distinct_price, + price=product_price_info["list_price"], + ) + return prices diff --git a/website_sale_product_minimal_price/pyproject.toml b/website_sale_product_minimal_price/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/website_sale_product_minimal_price/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/website_sale_product_minimal_price/readme/CONTRIBUTORS.md b/website_sale_product_minimal_price/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..4103ee09d6 --- /dev/null +++ b/website_sale_product_minimal_price/readme/CONTRIBUTORS.md @@ -0,0 +1,7 @@ +- [Tecnativa](https://www.tecnativa.com): + + - Sergio Teruel + - Carlos Roca + - Pedro M. Baeza + - Pilar Vargas + - Carlos Lopez diff --git a/website_sale_product_minimal_price/readme/DESCRIPTION.md b/website_sale_product_minimal_price/readme/DESCRIPTION.md new file mode 100644 index 0000000000..48325f9367 --- /dev/null +++ b/website_sale_product_minimal_price/readme/DESCRIPTION.md @@ -0,0 +1,3 @@ +This module extends the functionality of website sale module to allow to +display the minimal price in '/shop' view when product has distinct +variants price and set order by minimal price in product's view. diff --git a/website_sale_product_minimal_price/readme/USAGE.md b/website_sale_product_minimal_price/readme/USAGE.md new file mode 100644 index 0000000000..18776d2ead --- /dev/null +++ b/website_sale_product_minimal_price/readme/USAGE.md @@ -0,0 +1,8 @@ +1. Go to backend and set a product with variants and extra price by + attribute value or define a distinct prices in public price list for + this variant. +2. Go to Website Shop. +3. You will see that in main products view appears the text "From " + with minimal price if the product has a distinct prices by + attribute. +4. Click on product, the price displayed is the minimal variant price. diff --git a/website_sale_product_minimal_price/static/description/icon.png b/website_sale_product_minimal_price/static/description/icon.png new file mode 100644 index 0000000000..3a0328b516 Binary files /dev/null and b/website_sale_product_minimal_price/static/description/icon.png differ diff --git a/website_sale_product_minimal_price/static/description/index.html b/website_sale_product_minimal_price/static/description/index.html new file mode 100644 index 0000000000..3a2c995cf7 --- /dev/null +++ b/website_sale_product_minimal_price/static/description/index.html @@ -0,0 +1,453 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Website Sale Product Minimal Price

+ +

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

+

This module extends the functionality of website sale module to allow to +display the minimal price in ‘/shop’ view when product has distinct +variants price and set order by minimal price in product’s view.

+

Table of contents

+ +
+

Usage

+
    +
  1. Go to backend and set a product with variants and extra price by +attribute value or define a distinct prices in public price list for +this variant.
  2. +
  3. Go to Website Shop.
  4. +
  5. You will see that in main products view appears the text “From “ with +minimal price if the product has a distinct prices by attribute.
  6. +
  7. Click on product, the price displayed is the minimal variant price.
  8. +
+
+
+

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 +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+
    +
  • Tecnativa:
      +
    • Sergio Teruel
    • +
    • Carlos Roca
    • +
    • Pedro M. Baeza
    • +
    • Pilar Vargas
    • +
    • Carlos Lopez
    • +
    +
  • +
+
+
+

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.

+

Current maintainer:

+

sergio-teruel

+

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_minimal_price/static/src/js/website_sale_product_price_scale.esm.js b/website_sale_product_minimal_price/static/src/js/website_sale_product_price_scale.esm.js new file mode 100644 index 0000000000..eeb2e55136 --- /dev/null +++ b/website_sale_product_minimal_price/static/src/js/website_sale_product_price_scale.esm.js @@ -0,0 +1,61 @@ +/* Copyright 2021 Carlos Roca + * Copyright 2025 Carlos Lopez - Tecnativa + * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */ + +import {WebsiteSale} from "@website_sale/js/website_sale"; +import {formatCurrency} from "@web/core/currency"; +import {renderToString} from "@web/core/utils/render"; + +WebsiteSale.include({ + /** + * @override + * Render the price scale of the product + * based on the selected combination and current pricelist . + */ + _onChangeCombination: function (ev, $parent, combination) { + const res = this._super(...arguments); + if (!this.isWebsite || combination.product_id === false) { + return res; + } + const unit_prices = combination.minimal_price_scale; + const uom_name = combination.uom_name; + $(".temporal").remove(); + if (unit_prices.length <= 0) { + return res; + } + const $form = $('form[action*="/shop/cart/update"]'); + $form.append('
'); + $form.append( + renderToString("website_sale_product_minimal_price.title", {uom: uom_name}) + ); + // We define a limit of displayed columns as 4 + const limit_col = 4; + let $div; // eslint-disable-line init-declarations + for (const i in unit_prices) { + if (unit_prices[i].price === 0) { + continue; + } + if (i % limit_col === 0) { + const id = i / limit_col; + $form.append('
'); + $div = $("#row_" + id); + } + let monetary_u = formatCurrency( + unit_prices[i].price, + unit_prices[i].currency_id + ); + monetary_u = monetary_u.replace(" ", " "); + $div.append( + renderToString("website_sale_product_minimal_price.pricelist", { + quantity: unit_prices[i].min_qty, + price: monetary_u, + }) + ); + } + $div = $('div[id*="row_"]'); + for (let i = 0; i < $div.length - 1; i++) { + $($div[i]).addClass("border-bottom"); + } + return res; + }, +}); diff --git a/website_sale_product_minimal_price/static/src/tests/tours/test_product_with_no_prices_tour.esm.js b/website_sale_product_minimal_price/static/src/tests/tours/test_product_with_no_prices_tour.esm.js new file mode 100644 index 0000000000..80eb741143 --- /dev/null +++ b/website_sale_product_minimal_price/static/src/tests/tours/test_product_with_no_prices_tour.esm.js @@ -0,0 +1,31 @@ +/* Copyright 2021 Carlos Roca + * Copyright 2025 Carlos Lopez - Tecnativa + * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */ + +import {registry} from "@web/core/registry"; +registry.category("web_tour.tours").add("test_product_with_no_prices", { + url: "/shop", + test: true, + steps: () => [ + { + trigger: + ".oe_product_cart:has(.product_price:has(span:contains('From'))) a:contains('My product test with no prices')", + content: "Product with label From", + }, + { + trigger: ".product_price:has(span:contains('10.00'))", + }, + { + trigger: "a[href='/shop']", + }, + { + trigger: + ".oe_product_cart:has(.product_price:has(span:contains('10.00'))) a:contains('My product test')", + }, + { + trigger: + ".oe_product_cart:has(.product_price:not(:has(span:contains('From'))):has(span:contains('20.00'))) a:contains('My product test no prices')", + content: "Product without label From", + }, + ], +}); diff --git a/website_sale_product_minimal_price/static/src/tests/tours/tour.esm.js b/website_sale_product_minimal_price/static/src/tests/tours/tour.esm.js new file mode 100644 index 0000000000..378436701e --- /dev/null +++ b/website_sale_product_minimal_price/static/src/tests/tours/tour.esm.js @@ -0,0 +1,27 @@ +/* Copyright 2019 Sergio Teruel + * Copyright 2025 Carlos Lopez - Tecnativa + * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */ + +import {registry} from "@web/core/registry"; +registry.category("web_tour.tours").add("website_sale_product_minimal_price", { + url: "/shop", + test: true, + steps: () => [ + { + trigger: + ".o_wsale_product_information:has(span:contains('From')) a:contains('My product test with various prices')", + }, + { + trigger: "a[href='/shop']", + }, + { + trigger: "a:contains('My product test with various prices')", + }, + { + trigger: "a[href='/shop']", + }, + { + trigger: ".product_price:has(span:contains('125.00'))", + }, + ], +}); diff --git a/website_sale_product_minimal_price/static/src/xml/website_sale_product_price_scale.xml b/website_sale_product_minimal_price/static/src/xml/website_sale_product_price_scale.xml new file mode 100644 index 0000000000..3098c70c62 --- /dev/null +++ b/website_sale_product_minimal_price/static/src/xml/website_sale_product_price_scale.xml @@ -0,0 +1,18 @@ + + + +
+ Prices per quantity ( ) +
+
+ +
+
+ +
+
+ +
+
+
+
diff --git a/website_sale_product_minimal_price/tests/__init__.py b/website_sale_product_minimal_price/tests/__init__.py new file mode 100644 index 0000000000..cd56f818f4 --- /dev/null +++ b/website_sale_product_minimal_price/tests/__init__.py @@ -0,0 +1,2 @@ +from . import test_product_with_no_prices +from . import test_website_sale_product_minimal_price diff --git a/website_sale_product_minimal_price/tests/test_product_with_no_prices.py b/website_sale_product_minimal_price/tests/test_product_with_no_prices.py new file mode 100644 index 0000000000..83025e5d2b --- /dev/null +++ b/website_sale_product_minimal_price/tests/test_product_with_no_prices.py @@ -0,0 +1,107 @@ +# Copyright 2021 Tecnativa - Carlos Roca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.fields import Command +from odoo.tests import tagged +from odoo.tests.common import HttpCase + + +@tagged("post_install", "-at_install") +class TestProductWithNoPrices(HttpCase): + """With this test we are checking that the minimal price is set + when the product has not a price defined and the price of + variants depend on a subpricelist. + """ + + def setUp(self): + super().setUp() + ProductAttribute = self.env["product.attribute"] + ProductAttributeValue = self.env["product.attribute.value"] + self.category = self.env["product.category"].create({"name": "Test category"}) + self.product_attribute = ProductAttribute.create( + {"name": "Test", "create_variant": "always"} + ) + self.product_attribute_value_test_1 = ProductAttributeValue.create( + {"name": "Test v1", "attribute_id": self.product_attribute.id} + ) + self.product_attribute_value_test_2 = ProductAttributeValue.create( + {"name": "Test v2", "attribute_id": self.product_attribute.id} + ) + self.product_template_no_price = self.env["product.template"].create( + { + "name": "My product test no prices", + "is_published": True, + "type": "consu", + "website_sequence": 1, + "categ_id": self.category.id, + "list_price": 20, + } + ) + self.product_template = self.env["product.template"].create( + { + "name": "My product test with no prices", + "is_published": True, + "type": "consu", + "website_sequence": 1, + "categ_id": self.category.id, + "attribute_line_ids": [ + Command.create( + { + "attribute_id": self.product_attribute.id, + "value_ids": [ + Command.link(self.product_attribute_value_test_1.id), + Command.link(self.product_attribute_value_test_2.id), + ], + }, + ), + ], + } + ) + self.variant_1 = self.product_template.product_variant_ids[0] + self.variant_2 = self.product_template.product_variant_ids[1] + self.pricelist_aux = self.env["product.pricelist"].create( + { + "name": "Test pricelist Aux", + "selectable": True, + "item_ids": [ + Command.create( + { + "applied_on": "0_product_variant", + "product_id": self.variant_1.id, + "compute_price": "fixed", + "fixed_price": 10, + }, + ), + Command.create( + { + "applied_on": "0_product_variant", + "product_id": self.variant_2.id, + "compute_price": "fixed", + "fixed_price": 11, + }, + ), + ], + } + ) + self.pricelist_main = self.env["product.pricelist"].create( + { + "name": "Test pricelist Main", + "selectable": True, + "item_ids": [ + Command.create( + { + "applied_on": "2_product_category", + "categ_id": self.category.id, + "compute_price": "formula", + "base": "pricelist", + "base_pricelist_id": self.pricelist_aux.id, + }, + ) + ], + } + ) + user = self.env.ref("base.user_admin") + user.property_product_pricelist = self.pricelist_main + + def test_ui_website(self): + """Test frontend tour.""" + self.start_tour("/", "test_product_with_no_prices", login="admin") diff --git a/website_sale_product_minimal_price/tests/test_website_sale_product_minimal_price.py b/website_sale_product_minimal_price/tests/test_website_sale_product_minimal_price.py new file mode 100644 index 0000000000..8695fd6d85 --- /dev/null +++ b/website_sale_product_minimal_price/tests/test_website_sale_product_minimal_price.py @@ -0,0 +1,86 @@ +# Copyright 2019 Tecnativa - Sergio Teruel +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.fields import Command +from odoo.tests import tagged +from odoo.tests.common import HttpCase + + +@tagged("post_install", "-at_install") +class WebsiteSaleProductMinimalPriceHttpCase(HttpCase): + def setUp(self): + super().setUp() + # Create and select a pricelist + # to make tests pass no matter what l10n package is enabled + self.website = self.env["website"].get_current_website() + pricelist = self.env["product.pricelist"].create( + { + "name": "website_sale_product_minimal_price public", + "currency_id": self.env.company.currency_id.id, + "selectable": True, + "sequence": 1, + "website_id": self.website.id, + } + ) + self.env.ref("base.user_admin").property_product_pricelist = pricelist + # Models + ProductAttribute = self.env["product.attribute"] + ProductAttributeValue = self.env["product.attribute.value"] + ProductTmplAttributeValue = self.env["product.template.attribute.value"] + self.product_attribute = ProductAttribute.create( + {"name": "Test", "create_variant": "always"} + ) + self.product_attribute_value_test_1 = ProductAttributeValue.create( + {"name": "Test v1", "attribute_id": self.product_attribute.id} + ) + self.product_attribute_value_test_2 = ProductAttributeValue.create( + {"name": "Test v2", "attribute_id": self.product_attribute.id} + ) + self.product_template = self.env["product.template"].create( + { + "name": "My product test with various prices", + "is_published": True, + "type": "consu", + "list_price": 100.0, + "website_id": self.website.id, + "website_sequence": 1, + "attribute_line_ids": [ + Command.create( + { + "attribute_id": self.product_attribute.id, + "value_ids": [ + Command.link(self.product_attribute_value_test_1.id), + Command.link(self.product_attribute_value_test_2.id), + ], + }, + ), + ], + } + ) + product_tmpl_att_value = ProductTmplAttributeValue.search( + [ + ("product_tmpl_id", "=", self.product_template.id), + ("attribute_id", "=", self.product_attribute.id), + ( + "product_attribute_value_id", + "=", + self.product_attribute_value_test_1.id, + ), + ] + ) + product_tmpl_att_value.price_extra = 50.0 + product_tmpl_att_value = ProductTmplAttributeValue.search( + [ + ("product_tmpl_id", "=", self.product_template.id), + ("attribute_id", "=", self.product_attribute.id), + ( + "product_attribute_value_id", + "=", + self.product_attribute_value_test_2.id, + ), + ] + ) + product_tmpl_att_value.price_extra = 25.0 + + def test_ui_website(self): + """Test frontend tour.""" + self.start_tour("/shop", "website_sale_product_minimal_price", login="admin") diff --git a/website_sale_product_minimal_price/views/templates.xml b/website_sale_product_minimal_price/views/templates.xml new file mode 100644 index 0000000000..fb17e66d43 --- /dev/null +++ b/website_sale_product_minimal_price/views/templates.xml @@ -0,0 +1,60 @@ + + + + + + diff --git a/website_sale_require_legal/README.rst b/website_sale_require_legal/README.rst index 030e0c2c67..8561894005 100644 --- a/website_sale_require_legal/README.rst +++ b/website_sale_require_legal/README.rst @@ -11,7 +11,7 @@ Require accepting legal terms to checkout !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:bf2f49e4d24fbef2d4dd56bcaf36b3e38f42f921ff8e864c774f83688a5b1133 + !! source digest: sha256:2382e0be188b877ac6028a8e0cdea0c937418528e6fbb8dbf2f4a2f54bb6ca37 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/website_sale_require_legal/__manifest__.py b/website_sale_require_legal/__manifest__.py index 3001525810..dca2eb6e68 100644 --- a/website_sale_require_legal/__manifest__.py +++ b/website_sale_require_legal/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Require accepting legal terms to checkout", "summary": "Force the user to accept legal tems to buy in the web shop", - "version": "18.0.1.0.1", + "version": "18.0.1.0.2", "category": "Website", "website": "https://github.com/OCA/e-commerce", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/website_sale_require_legal/static/description/index.html b/website_sale_require_legal/static/description/index.html index 5b8be50055..ba06077e02 100644 --- a/website_sale_require_legal/static/description/index.html +++ b/website_sale_require_legal/static/description/index.html @@ -372,7 +372,7 @@

Require accepting legal terms to checkout

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:bf2f49e4d24fbef2d4dd56bcaf36b3e38f42f921ff8e864c774f83688a5b1133 +!! source digest: sha256:2382e0be188b877ac6028a8e0cdea0c937418528e6fbb8dbf2f4a2f54bb6ca37 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This module extends your e-commerce legal compliance options:

diff --git a/website_sale_require_legal/static/tests/tours/tour.esm.js b/website_sale_require_legal/static/tests/tours/tour.esm.js index 61bc6e17b8..6d2fd204c2 100644 --- a/website_sale_require_legal/static/tests/tours/tour.esm.js +++ b/website_sale_require_legal/static/tests/tours/tour.esm.js @@ -2,8 +2,8 @@ * Copyright 2023 Pilar Vargas * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */ -import {registry} from "@web/core/registry"; import * as tourUtils from "@website_sale/js/tours/tour_utils"; +import {registry} from "@web/core/registry"; registry.category("web_tour.tours").add("website_sale_require_legal_with_payment", { url: "/shop", diff --git a/website_sale_secondary_unit/README.rst b/website_sale_secondary_unit/README.rst index 8491aa2a85..e41632b125 100644 --- a/website_sale_secondary_unit/README.rst +++ b/website_sale_secondary_unit/README.rst @@ -11,7 +11,7 @@ Website Sale Secondary Unit !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:7c8f034f6a8ff4fc811be5cfedabc61a2f238c7dac3dc14e6b0bf383712e3228 + !! source digest: sha256:6a43f97259b678e6060f295016231bb752be7b672de25e93067e0ada1d2cd8e5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/website_sale_secondary_unit/__manifest__.py b/website_sale_secondary_unit/__manifest__.py index aa7b699528..149c1ff90e 100644 --- a/website_sale_secondary_unit/__manifest__.py +++ b/website_sale_secondary_unit/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Website Sale Secondary Unit", "summary": "Allow manage secondary units in website shop", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "development_status": "Beta", "category": "Website", "website": "https://github.com/OCA/e-commerce", diff --git a/website_sale_secondary_unit/static/description/index.html b/website_sale_secondary_unit/static/description/index.html index 95b0798c7b..28a3ce1138 100644 --- a/website_sale_secondary_unit/static/description/index.html +++ b/website_sale_secondary_unit/static/description/index.html @@ -372,7 +372,7 @@

Website Sale Secondary Unit

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:7c8f034f6a8ff4fc811be5cfedabc61a2f238c7dac3dc14e6b0bf383712e3228 +!! source digest: sha256:6a43f97259b678e6060f295016231bb752be7b672de25e93067e0ada1d2cd8e5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This module extends the functionality of saleorder_secondary_unit module diff --git a/website_sale_secondary_unit/static/src/js/website_sale_secondary_unit.esm.js b/website_sale_secondary_unit/static/src/js/website_sale_secondary_unit.esm.js index dd2f0a143d..676f9f0d66 100644 --- a/website_sale_secondary_unit/static/src/js/website_sale_secondary_unit.esm.js +++ b/website_sale_secondary_unit/static/src/js/website_sale_secondary_unit.esm.js @@ -52,16 +52,17 @@ publicWidget.registry.sale_secondary_unit = publicWidget.Widget.extend(VariantMi }, _onChangeSecondaryUom: function (ev) { - if (!ev) { + let eventToUse = ev; + if (!eventToUse) { // HACK: Create a fake event to locate the form on "onChangeAddQuantity" // odoo method - ev = jQuery.Event("fakeEvent"); - ev.currentTarget = $(".form-control.quantity"); + eventToUse = jQuery.Event("fakeEvent"); + eventToUse.currentTarget = $(".form-control.quantity"); } this._setValues(); const factor = this.secondary_uom_factor * this.product_uom_factor; this.$product_qty.val(this.secondary_uom_qty * factor); - this.onChangeAddQuantity(ev); + this.onChangeAddQuantity(eventToUse); }, _onChangeProductQty: function () { this._setValues(); diff --git a/website_sale_stock_provisioning_date/README.rst b/website_sale_stock_provisioning_date/README.rst index 4980b97f4b..a70f662a93 100644 --- a/website_sale_stock_provisioning_date/README.rst +++ b/website_sale_stock_provisioning_date/README.rst @@ -11,7 +11,7 @@ Website Sale Stock Provisioning Date !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:6ad91e74a2710e63412aa1b23673baccbeb953e2e281cef39bb22e9cdee59120 + !! source digest: sha256:5dc5f06e387d00b3dba971640d9d87b7f213d8221338545ea4db1aa031077049 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png diff --git a/website_sale_stock_provisioning_date/__manifest__.py b/website_sale_stock_provisioning_date/__manifest__.py index d44ff7b60a..de9ad6a992 100644 --- a/website_sale_stock_provisioning_date/__manifest__.py +++ b/website_sale_stock_provisioning_date/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Website Sale Stock Provisioning Date", "summary": "Display provisioning date for a product in shop online", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "development_status": "Production/Stable", "category": "Website", "website": "https://github.com/OCA/e-commerce", diff --git a/website_sale_stock_provisioning_date/static/description/index.html b/website_sale_stock_provisioning_date/static/description/index.html index 3b178f2f2a..950483850f 100644 --- a/website_sale_stock_provisioning_date/static/description/index.html +++ b/website_sale_stock_provisioning_date/static/description/index.html @@ -372,7 +372,7 @@

Website Sale Stock Provisioning Date

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:6ad91e74a2710e63412aa1b23673baccbeb953e2e281cef39bb22e9cdee59120 +!! source digest: sha256:5dc5f06e387d00b3dba971640d9d87b7f213d8221338545ea4db1aa031077049 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This module extends the functionality of website to show you the future diff --git a/website_sale_stock_provisioning_date/static/src/js/website_sale_stock_provisioning_date_tour.esm.js b/website_sale_stock_provisioning_date/static/src/js/website_sale_stock_provisioning_date_tour.esm.js index 4db0539502..29c8759eb2 100644 --- a/website_sale_stock_provisioning_date/static/src/js/website_sale_stock_provisioning_date_tour.esm.js +++ b/website_sale_stock_provisioning_date/static/src/js/website_sale_stock_provisioning_date_tour.esm.js @@ -1,9 +1,9 @@ /* Copyright 2020 Tecnativa - Ernesto Tejeda * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */ +import {clickOnElement} from "@website/js/tours/tour_utils"; import {registry} from "@web/core/registry"; import {searchProduct} from "@website_sale/js/tours/tour_utils"; -import {clickOnElement} from "@website/js/tours/tour_utils"; registry.category("web_tour.tours").add("website_sale_stock_provisioning_date", { test: true, diff --git a/website_sale_wishlist_hide_price/README.rst b/website_sale_wishlist_hide_price/README.rst index e67756c196..c1ddf50040 100644 --- a/website_sale_wishlist_hide_price/README.rst +++ b/website_sale_wishlist_hide_price/README.rst @@ -11,7 +11,7 @@ Website Sale Wishlist Hide Price !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:413c7955198ddb5661fcc9ebd24b3a7a8fcb1577a03786d32e6b33eb589c7777 + !! source digest: sha256:72f1710cde5283d738e18782b0c218ba5011b7e41eacd71b6824c41b677e6c3b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/website_sale_wishlist_hide_price/__manifest__.py b/website_sale_wishlist_hide_price/__manifest__.py index b52c641bba..b234834a73 100644 --- a/website_sale_wishlist_hide_price/__manifest__.py +++ b/website_sale_wishlist_hide_price/__manifest__.py @@ -2,7 +2,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "Website Sale Wishlist Hide Price", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "category": "Website", "author": "Tecnativa, Odoo Community Association (OCA)", "website": "https://github.com/OCA/e-commerce", diff --git a/website_sale_wishlist_hide_price/static/description/index.html b/website_sale_wishlist_hide_price/static/description/index.html index acfb4289f0..3791540d8a 100644 --- a/website_sale_wishlist_hide_price/static/description/index.html +++ b/website_sale_wishlist_hide_price/static/description/index.html @@ -372,7 +372,7 @@

Website Sale Wishlist Hide Price

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:413c7955198ddb5661fcc9ebd24b3a7a8fcb1577a03786d32e6b33eb589c7777 +!! source digest: sha256:72f1710cde5283d738e18782b0c218ba5011b7e41eacd71b6824c41b677e6c3b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

This module extends the base of website_sale_hide_price to hide prices diff --git a/website_sale_wishlist_hide_price/static/tests/tours/website_sale_wishlist_hide_price_tour.esm.js b/website_sale_wishlist_hide_price/static/tests/tours/website_sale_wishlist_hide_price_tour.esm.js index 4797165eb4..db8737241e 100644 --- a/website_sale_wishlist_hide_price/static/tests/tours/website_sale_wishlist_hide_price_tour.esm.js +++ b/website_sale_wishlist_hide_price/static/tests/tours/website_sale_wishlist_hide_price_tour.esm.js @@ -1,5 +1,3 @@ -/** @odoo-module **/ - import {registry} from "@web/core/registry"; registry.category("web_tour.tours").add("website_sale_wishlist_hide_price_tour", { diff --git a/website_snippet_product_category/README.rst b/website_snippet_product_category/README.rst index fdcf7d76b8..876b5c1542 100644 --- a/website_snippet_product_category/README.rst +++ b/website_snippet_product_category/README.rst @@ -11,7 +11,7 @@ Website Snippet Product Category !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:a56e803176ac7814a30f7b8d2f55bef5e9285ee1d3d85393b46849d28eb2a9c0 + !! source digest: sha256:2a71d9053b06ded0f3b7ede7d974442c5af85eb27a57c09bf365d3c16131098a !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/website_snippet_product_category/__manifest__.py b/website_snippet_product_category/__manifest__.py index 2f458c1442..534e31b6f5 100644 --- a/website_snippet_product_category/__manifest__.py +++ b/website_snippet_product_category/__manifest__.py @@ -4,7 +4,7 @@ "name": "Website Snippet Product Category", "category": "Website", "summary": "Adds a new snippet to show e-commerce categories", - "version": "18.0.1.1.0", + "version": "18.0.1.1.1", "license": "LGPL-3", "website": "https://github.com/OCA/e-commerce", "author": "Tecnativa, Odoo Community Association (OCA)", diff --git a/website_snippet_product_category/static/description/index.html b/website_snippet_product_category/static/description/index.html index ab0b205e76..e9eef7a822 100644 --- a/website_snippet_product_category/static/description/index.html +++ b/website_snippet_product_category/static/description/index.html @@ -372,7 +372,7 @@

Website Snippet Product Category

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:a56e803176ac7814a30f7b8d2f55bef5e9285ee1d3d85393b46849d28eb2a9c0 +!! source digest: sha256:2a71d9053b06ded0f3b7ede7d974442c5af85eb27a57c09bf365d3c16131098a !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

Adds a new snippet to show e-commerce categories.

diff --git a/website_snippet_product_category/static/src/js/frontend.esm.js b/website_snippet_product_category/static/src/js/frontend.esm.js index 89481809bd..05a0836e43 100644 --- a/website_snippet_product_category/static/src/js/frontend.esm.js +++ b/website_snippet_product_category/static/src/js/frontend.esm.js @@ -1,9 +1,9 @@ // Copyright 2020 Tecnativa - Alexandre Díaz // Copyright 2025 Tecnativa - Pilar Vargas // License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). -import sAnimation from "@website/js/content/snippets.animation"; import {_t} from "@web/core/l10n/translation"; import {rpc} from "@web/core/network/rpc"; +import sAnimation from "@website/js/content/snippets.animation"; sAnimation.registry.js_product_category = sAnimation.Class.extend({ selector: ".js_product_category",