From bb0349aac94688c332c24651fde33b2de441c501 Mon Sep 17 00:00:00 2001 From: lman-odoo Date: Thu, 9 Oct 2025 09:33:02 +0000 Subject: [PATCH] [IMP] ecommerce/prices: update prices page task-3711225 X-original-commit: 9361b759d4a4ad95e8e4eaf901c11c7e3011a0dc --- content/applications/essentials/contacts.rst | 2 + .../finance/accounting/taxes/B2B_B2C.rst | 16 - .../point_of_sale/pricing/pricelists.rst | 4 +- .../products_prices/loyalty_discount.rst | 2 + .../products_prices/prices/currencies.rst | 2 + .../sales/products_prices/prices/pricing.rst | 26 +- .../products_prices/products/variants.rst | 2 + .../websites/ecommerce/checkout.rst | 8 +- .../websites/ecommerce/products.rst | 6 +- .../ecommerce/products/price_management.rst | 201 ----------- .../price_management/price-cost-per-unit.png | Bin 3116 -> 0 bytes .../price_management/price-pricelists.png | Bin 12328 -> 0 bytes .../websites/ecommerce/products/prices.rst | 330 ++++++++++++++++++ .../price-cost-per-unit-page.png | Bin .../price-strikethrough.png | Bin .../price-tax-display-type.png | Bin .../prices/pricelist-country-groups.png | Bin 0 -> 4366 bytes .../products/prices/pricelist-selector.png | Bin 0 -> 2291 bytes .../pricelists-example.png | Bin .../products/prices/prices-per-unit.png | Bin 0 -> 5845 bytes .../website/configuration/multi_website.rst | 2 +- redirects/18.0.txt | 4 +- 22 files changed, 355 insertions(+), 250 deletions(-) delete mode 100644 content/applications/websites/ecommerce/products/price_management.rst delete mode 100644 content/applications/websites/ecommerce/products/price_management/price-cost-per-unit.png delete mode 100644 content/applications/websites/ecommerce/products/price_management/price-pricelists.png create mode 100644 content/applications/websites/ecommerce/products/prices.rst rename content/applications/websites/ecommerce/products/{price_management => prices}/price-cost-per-unit-page.png (100%) rename content/applications/websites/ecommerce/products/{price_management => prices}/price-strikethrough.png (100%) rename content/applications/websites/ecommerce/products/{price_management => prices}/price-tax-display-type.png (100%) create mode 100644 content/applications/websites/ecommerce/products/prices/pricelist-country-groups.png create mode 100644 content/applications/websites/ecommerce/products/prices/pricelist-selector.png rename content/applications/websites/ecommerce/products/{price_management => prices}/pricelists-example.png (100%) create mode 100644 content/applications/websites/ecommerce/products/prices/prices-per-unit.png diff --git a/content/applications/essentials/contacts.rst b/content/applications/essentials/contacts.rst index d9c7bcced9..0877299bd5 100644 --- a/content/applications/essentials/contacts.rst +++ b/content/applications/essentials/contacts.rst @@ -118,6 +118,8 @@ Next, is the :guilabel:`Sales & Purchases` tab, which only appears when the *Sal The :guilabel:`Fiscal Position` can be set on the :guilabel:`Sales & Purchases` tab. Select a :guilabel:`Fiscal Position` from the drop-down menu. +.. _essentials/contacts/sales-section: + Sales section ~~~~~~~~~~~~~ diff --git a/content/applications/finance/accounting/taxes/B2B_B2C.rst b/content/applications/finance/accounting/taxes/B2B_B2C.rst index 000e41a691..8236b8ec9c 100644 --- a/content/applications/finance/accounting/taxes/B2B_B2C.rst +++ b/content/applications/finance/accounting/taxes/B2B_B2C.rst @@ -79,22 +79,6 @@ For the purpose of this documentation, we will use the above use case: - but we want to sell it at 10€, tax included, in our shops or eCommerce website -.. _b2b_b2c/ecommerce: - -eCommerce ---------- - -If you only use B2C or B2B prices on your website, simply select the appropriate setting in the -**Website** app settings. - -If you have both B2B and B2C prices on a single website, please follow these instructions: - -#. Activate the :ref:`developer mode ` and go to :menuselection:`General Settings - --> Users & Companies --> Groups`. -#. Open either `Technical / Tax display B2B` or `Technical / Tax display B2C`. -#. Under the :guilabel:`Users` tab, add the users requiring access to the price type. Add B2C users - in the B2C group and B2B users in the B2B group. - Setting your products --------------------- diff --git a/content/applications/sales/point_of_sale/pricing/pricelists.rst b/content/applications/sales/point_of_sale/pricing/pricelists.rst index 04ac10b97d..7833d95d6d 100644 --- a/content/applications/sales/point_of_sale/pricing/pricelists.rst +++ b/content/applications/sales/point_of_sale/pricing/pricelists.rst @@ -24,7 +24,7 @@ dynamically using percentage discounts or more complex formulas in addition to s .. note:: The selected pricelist type applies to the entire database, including the :doc:`Sales - <../../sales/products_prices/prices/pricing>` and :ref:`eCommerce ` + <../../sales/products_prices/prices/pricing>` and :ref:`eCommerce ` apps. .. _pricelists/create: @@ -128,4 +128,4 @@ the desired pricelist from the list. .. seealso:: - :doc:`../../sales/products_prices/prices/pricing` - - :ref:`How to use pricelists in an ecommerce environment ` + - :ref:`How to use pricelists in an ecommerce environment ` diff --git a/content/applications/sales/sales/products_prices/loyalty_discount.rst b/content/applications/sales/sales/products_prices/loyalty_discount.rst index 74198a62a0..b84ff17916 100644 --- a/content/applications/sales/sales/products_prices/loyalty_discount.rst +++ b/content/applications/sales/sales/products_prices/loyalty_discount.rst @@ -15,6 +15,8 @@ To begin using discount and loyalty programs, navigate to :menuselection:`Sales Gift Card` setting by checking the box next to the feature. Finally, click :guilabel:`Save` to save the changes. +.. _sales/products/loyalty-programs: + Configure discount and loyalty programs ======================================= diff --git a/content/applications/sales/sales/products_prices/prices/currencies.rst b/content/applications/sales/sales/products_prices/prices/currencies.rst index 2e21aaf0db..5c13a35011 100644 --- a/content/applications/sales/sales/products_prices/prices/currencies.rst +++ b/content/applications/sales/sales/products_prices/prices/currencies.rst @@ -159,6 +159,8 @@ and :guilabel:`...per Unit` fields to ensure all the auto-populated information example, if the main currency is set to `USD`, the columns are titled :guilabel:`Unit per USD` and :guilabel:`USD per Unit`. +.. _sales/products/currencies/currency-specific-pricelists: + Currency-specific pricelists ============================ diff --git a/content/applications/sales/sales/products_prices/prices/pricing.rst b/content/applications/sales/sales/products_prices/prices/pricing.rst index c02d5186e3..7cbf2a2cb3 100644 --- a/content/applications/sales/sales/products_prices/prices/pricing.rst +++ b/content/applications/sales/sales/products_prices/prices/pricing.rst @@ -9,6 +9,8 @@ time periods, etc., and is useful for creating pricing strategies and optimizing Odoo **Sales** has a useful pricelist feature that can be tailored to fit any unique pricing strategy. Pricelists suggest certain prices, but they can always be overridden on the sales order. +.. _sales/products/pricelist-configuration: + Configuration ============= @@ -199,26 +201,10 @@ Lastly, configure a :guilabel:`Price` for the rental rule in the respective colu .. image:: pricing/sales-pricelist-rental.png :alt: The rental tab in a pricelist configuration form. -Ecommerce Tab -------------- - -Under the :guilabel:`Ecommerce` tab, price rules can be configured for products sold on an -:doc:`Ecommerce website <../../../../websites/ecommerce/products>`. - -To enable the pricelist to be visible, select the target website in the :guilabel:`Website` field. - -The :guilabel:`Selectable` can be enabled to allow the customer to choose this pricelist. - -Finally, promotional and loyalty codes can be added to the :guilabel:`E-commerce Promotional Code` -field. - -Tick the :guilabel:`Selectable` checkbox to have this pricelist as a selectable option for customers -to choose as they shop. If the :guilabel:`Selectable` box is left unticked, customers **cannot** -select this pricelist for themselves. +.. seealso:: + :doc:`Ecommerce price configuration ` -Lastly, there is the option to add an :guilabel:`E-commerce Promotional Code`. To add a code, type -in the desired promo code that, when entered during the checkout process, applies the pricelist to -the customer, even if the customer does not fall into the previously-specified criteria. +.. _sales/products/customer-pricelist-application: Customer pricelist application ============================== @@ -285,4 +271,4 @@ rule on a fresh form. .. seealso:: - :doc:`/applications/sales/sales/products_prices/prices/currencies` - - :doc:`/applications/websites/ecommerce/products/price_management` + - :doc:`/applications/websites/ecommerce/products/prices` diff --git a/content/applications/sales/sales/products_prices/products/variants.rst b/content/applications/sales/sales/products_prices/products/variants.rst index 6561ead55e..89ae27b4c0 100644 --- a/content/applications/sales/sales/products_prices/products/variants.rst +++ b/content/applications/sales/sales/products_prices/products/variants.rst @@ -224,6 +224,8 @@ column. Similar product variant creation processes are accessible through the Purchase, Inventory, and eCommerce applications. +.. _products/variants/configure-variants: + Configure variants ------------------ diff --git a/content/applications/websites/ecommerce/checkout.rst b/content/applications/websites/ecommerce/checkout.rst index fbbcb7fca4..9ce8953c0c 100644 --- a/content/applications/websites/ecommerce/checkout.rst +++ b/content/applications/websites/ecommerce/checkout.rst @@ -53,12 +53,8 @@ redirects users to the default contact form. Removing the ability to add products to the cart is often used by businesses that want to display an online catalog but cannot share prices publicly (e.g., to offer custom or variable pricing). -To do so, go to :menuselection:`Website --> Configuration --> Settings`. Under the :guilabel:`Shop - -Products` section, tick :guilabel:`Prevent Sale of Zero Priced Product`. A new :guilabel:`Button -url` field appears to enter a redirect URL. - -Then, for all products that should display the :guilabel:`Contact Us` button, set their price to -`0` using the product form or a :doc:`pricelist <../../sales/sales/products_prices/prices/pricing>`. +To display the :guilabel:`Contact Us` button and a note saying `Not Available For Sale` , you need +to :ref:`hide your prices ` on your product page. .. image:: checkout/cart-contact-us.png :alt: Contact us button on product page diff --git a/content/applications/websites/ecommerce/products.rst b/content/applications/websites/ecommerce/products.rst index 1ad9492c08..59fadd71bc 100644 --- a/content/applications/websites/ecommerce/products.rst +++ b/content/applications/websites/ecommerce/products.rst @@ -86,6 +86,8 @@ tab, scroll down to the :guilabel:`Ecommerce description` section, and add a des .. tip:: Click the :guilabel:`Go to Website` smart button to return to the frontend product's page. +.. _ecommerce/products/product-presentation: + Product presentation -------------------- @@ -120,7 +122,7 @@ Use the :guilabel:`Customize` tab to modify the page layout or add features: they want to purchase. - :guilabel:`Tax Indication`: Toggle the switch to indicate if the price is - :ref:`VAT included or excluded `. + :ref:`VAT included or excluded `. - :guilabel:`Variants`: Show all possible product :ref:`variants ` vertically as a :guilabel:`Products List` @@ -392,5 +394,5 @@ Configuration --> Settings`, scroll down to the :guilabel:`Shop - Products` sect :titlesonly: products/catalog - products/price_management + products/prices products/cross_upselling diff --git a/content/applications/websites/ecommerce/products/price_management.rst b/content/applications/websites/ecommerce/products/price_management.rst deleted file mode 100644 index 345636ab9a..0000000000 --- a/content/applications/websites/ecommerce/products/price_management.rst +++ /dev/null @@ -1,201 +0,0 @@ -================ -Price management -================ - -Odoo offers multiple options to select the prices displayed on a website, as well as -condition-specific prices based on set criteria. - -Taxes -===== - -Tax configuration ------------------ - -To add a tax on a product, you can either set a tax in the :guilabel:`Customer Taxes` field of the -**product template** or use :doc:`fiscal positions -`. - -.. seealso:: - - :doc:`/applications/finance/accounting/taxes` - - :doc:`/applications/finance/accounting/taxes/avatax` - - :doc:`/applications/finance/accounting/taxes/fiscal_positions` - -.. _ecommerce-price-management-tax-display: - -Tax display ------------ - -Choosing the displayed price tax usually depends on a country's regulations or the type of customers -**(B2B vs. B2C)**. To select the type of price displayed, go to :menuselection:`Website --> -Configuration --> Settings`, scroll down to the :guilabel:`Shop - Products` category, and select -:guilabel:`Tax Excluded` or :guilabel:`Tax Included`. - -- :guilabel:`Tax Excluded`: the price displayed on the website is **tax-excluded**, and the tax is - computed at the cart-review step; -- :guilabel:`Tax Included`: the price displayed on the website is **tax-included**. - -.. note:: - This setting is website specific, and therefore can be altered for each website within a - database. - -To display the type of pricing next to the product price, navigate to :menuselection:`Website --> -Site --> Homepage --> Shop`, select a product, then click :guilabel:`Edit` and, in the -:guilabel:`Customize` tab, enable :guilabel:`Tax Indication`. - -.. image:: price_management/price-tax-display-type.png - :alt: Tax type displayed on the product page. - -.. seealso:: - :doc:`/applications/finance/accounting/taxes/B2B_B2C` - -Price per unit -============== - -It is possible to display a :doc:`price per unit -<../../../inventory_and_mrp/inventory/product_management/configure/uom>` on the product page. To do -that, go to :menuselection:`Website --> Configuration --> Settings` and enable :guilabel:`Product -Reference Price` under the :guilabel:`Shop - Products` section. When enabled, ensure an amount is -set in the :guilabel:`Base Unit Count` field of the product template, and in the :guilabel:`Sales -Price` field. - -.. image:: price_management/price-cost-per-unit.png - :alt: Cost per unit pricing on the product template. - -The price per unit of measure can be found above the :guilabel:`Add to Cart` button on the product -page. - -.. image:: price_management/price-cost-per-unit-page.png - :alt: Cost per unit pricing on the product page. - -.. note:: - Pay attention that having the price per unit may be **mandatory** in some countries. - -.. seealso:: - :doc:`../../../inventory_and_mrp/inventory/product_management/configure/uom` - -.. _ecommerce/pricelists: - -Pricelists -========== - -Pricelists are the primary tool to manage prices on an eCommerce website. They make it possible to -define website-specific prices - different from the price on the product template - based on the -country group, currency, minimum quantity, period, or variant. - -.. seealso:: - :doc:`/applications/sales/sales/products_prices/prices/pricing` - -Understanding default pricelists --------------------------------- - -The concept of a default pricelist in Odoo depends on the application being used. In the **Sales** -app, a customer's default pricelist is determined by their contact profile. If a pricelist is -manually assigned to a contact, the pricelist becomes their default. If no pricelist is assigned, -the default is the first pricelist listed. - -In the **eCommerce** app,the default pricelist is assigned at the website level. However, it is -influenced by the user's login status and country group settings. - -How pricelists are applied in eCommerce ---------------------------------------- - -If a portal user has a specific pricelist assigned to their contact profile, that pricelist is -applied to their purchase. However, if that pricelist is **not** assigned to the website they are -visiting, the user sees the website's default pricelist. - -.. note:: - The default website pricelist is the first available pricelist assigned to a website, without the - country group setting configured. - -Public, non-logged in users, see the website's default pricelist. - -If a pricelist includes a country group, Odoo checks the visitor's IP address and applies the -corresponding pricelist. If a visitor has a pricelist assigned in their contact profile, that -pricelist takes precedence over the country-based pricelist, unless the assigned pricelist has a -different country group. - -.. example:: - A customer from the United States visits the website. They do not have a portal account. The - :guilabel:`United States` pricelist is applied. - - A different visitor, also from the United States, has the :guilabel:`Loyal Customer Discount` - pricelist assigned in their contact record. This assignment takes precedence over the country - group assignation, so the :guilabel:`Loyal Customer Discount` is applied. - - .. image:: price_management/pricelists-example.png - :alt: An example of various pricelists assigned to a website. - -Pricelist configuration ------------------------ - -To activate pricelists, navigate to :menuselection:`Website --> Configuration --> Settings`, scroll -down to the :guilabel:`Shop - Products` section, enable the :guilabel:`Pricelist` feature, then -click :guilabel:`Save`. Once pricelists have been activated, go to :menuselection:`Website --> -eCommerce --> Pricelists` to configure them. - -Preventing sales if price is zero -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The :guilabel:`Prevent Sale of Zero Priced Product` feature prevents customers from purchasing a -product if the sales price is listed as `0`. When this feature is enabled, instead of seeing -:guilabel:`Add to Cart` when attempting to purchase a product, they see :guilabel:`Contact Us`. This -feature is useful for companies that want to hide the prices of their products. - -To utilize this feature, first navigate to :menuselection:`Website --> Configuration --> Settings` -and tick the :guilabel:`Prevent Sale of Zero Priced Product` checkbox, then click :guilabel:`Save`. - -Next, create a pricelist that sets all product prices to `0`. Ensure the pricelist is assigned to -the correct website and is listed first among the website's pricelists. - -Selectable pricelists -~~~~~~~~~~~~~~~~~~~~~ - -*Selectable pricelists* appear in the shop page's pricelist drop-down menu. When a pricelist is -designated as :guilabel:`Selectable`, it allows the customer to choose between available pricelists. - -.. important:: - If a pricelist is designated as :guilabel:`Selectable`, and is not assigned to a specific - website, then the pricelist is selectable on **all** websites. - -If a pricelist is designated as :guilabel:`Selectable`, it appears in the drop-down menu next to the -search bar. However, if a pricelist does *not* appear in the drop-down menu, it may be for one of -the following reasons: - -- If there is only one selectable pricelist, and the contact is assigned a pricelist, the drop-down - may not appear. -- If multiple selectable pricelists exist and match a visitor's country group, only those pricelists - are shown in the drop-down. - -Foreign currency ----------------- - -If you are selling in **multiple currencies** and have pricelists in foreign currencies, customers -can select their corresponding pricelist anywhere on the :guilabel:`Shop` page from the drop-down -menu next to the search bar. - -.. image:: price_management/price-pricelists.png - :alt: Pricelists selection. - -.. seealso:: - - :doc:`/applications/sales/sales/products_prices/prices/pricing` - - :doc:`/applications/sales/sales/products_prices/prices/currencies` - -Permanent discount -================== - -If you have permanently reduced the price of a product, a popular means to attract customers is the -**strikethrough** strategy. The strategy consists in displaying the previous price crossed out and -the **new discounted price** next to it. - -.. image:: price_management/price-strikethrough.png - :alt: Price strikethrough. - -To display a 'striked' price, enable the :guilabel:`Comparison Price` option under -:menuselection:`Website --> Configuration --> Settings --> Shop - Products category`. Then, head to -the product's template (:menuselection:`Website --> eCommerce --> Products`), and in the -:guilabel:`Compare to Price` field, enter the **new** price. - -.. note:: - If a pricelist contains a :ref:`Discount ` price type, the striked - price is visible to applicable customers. This is true even if the :guilabel:`Comparison Price` - feature has not been enabled. diff --git a/content/applications/websites/ecommerce/products/price_management/price-cost-per-unit.png b/content/applications/websites/ecommerce/products/price_management/price-cost-per-unit.png deleted file mode 100644 index 9c6e5fe2b9d9913f6c51da9fa0e9c562392ae878..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3116 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 Ee}XJGDF6Tf diff --git a/content/applications/websites/ecommerce/products/prices.rst b/content/applications/websites/ecommerce/products/prices.rst new file mode 100644 index 0000000000..e6de404761 --- /dev/null +++ b/content/applications/websites/ecommerce/products/prices.rst @@ -0,0 +1,330 @@ +====== +Prices +====== + +Odoo offers multiple options to configure prices on the ecommerce. For example, you can apply +:ref:`prices per unit `, offer :ref:`discounts +`, and set up :ref:`pricelists `. + +.. _ecommerce/prices/taxes: + +Taxes +===== + +To add a tax on a product, you can either set a tax in the :guilabel:`Customer Taxes` field of the +**product template** or use :doc:`fiscal positions +`. + +.. seealso:: + - :doc:`/applications/finance/accounting/taxes` + - :doc:`/applications/finance/accounting/taxes/avatax` + +.. _ecommerce-price-management-tax-display: + +Choosing the displayed price tax usually depends on a country's regulations or the type of customers +(B2B vs. B2C). To select the type of price displayed, go to :menuselection:`Website --> +Configuration --> Settings`, select the website, scroll down to the +:guilabel:`Shop - Products` section, and under :guilabel:`Display Product Prices` select between: + +- :guilabel:`Tax Excluded`: the price displayed on the website is tax-excluded, and the tax is + computed at the :ref:`order review ` step; +- :guilabel:`Tax Included`: the price displayed on the website is tax-included. + +.. note:: + This setting is website-specific and can therefore be configured independently for every + website in the database. + +.. tip:: + Switch the :ref:`Tax indication ` toggle on in the + website editor to explicitly indicate if the price is `Tax excluded` or `Tax included` on the + product page. + +.. _ecommerce/prices/price-per-unit: + +Price per unit +============== + +To display a :doc:`price per unit +` alongside the sales +price on the product page, follow these steps: + +#. Go to :menuselection:`Website --> Configuration --> Settings`, scroll to the + :guilabel:`Shop - Products` section, and enable :guilabel:`Product Reference Price`. +#. :ref:`Navigate to the product form `. +#. Set the product's :guilabel:`Sales price` and select the unit (e.g., :guilabel:`Units`). +#. In the :guilabel:`Base Unit Count` field, enter the number of units in the product, then + select the relevant unit from the dropdown list. + +.. example:: + Imagine you want to sell a 2-liter bucket of paint for $60, i.e., $30 per liter. + + .. image:: prices/prices-per-unit.png + :alt: Cost per unit pricing on the product form. + + The price per units, in this case per liter, is shown next to the sales price on the + product page. + + .. image:: prices/price-cost-per-unit-page.png + :alt: Unit pricing on the product page. + +.. note:: + The price per unit may be mandatory in some countries. + +.. seealso:: + :doc:`/applications/inventory_and_mrp/inventory/product_management/configure/uom` + +.. _ecommerce/prices/pricelists: + +Pricelists +========== + +Pricelists in Odoo allow to manage flexible pricing rules and to offer different prices and +discounts based on currencies, time periods, purchase volumes, :ref:`customers' location +`, and/or customer type. +To enable pricelists for eCommerce, go to :menuselection:`Website --> Configuration --> Settings`, +scroll down to the :guilabel:`Shop - Products` section, enable :guilabel:`Pricelists`, and +:guilabel:`Save`. Then, click :guilabel:`Pricelists` or go to :menuselection:`Website --> eCommerce +--> Pricelists` and :ref:`configure ` the relevant +pricelists. + +In the :guilabel:`Ecommerce` tab, configure options specific to online sales, such as assigning a +:guilabel:`Website` to a pricelist, allowing customers to :ref:`select it +`, and/or adding an :ref:`E-commerce Promotional Code +`. + +.. tip:: + - If you are using several websites and you want to use the same pricelist on several of them, + you need to duplicate the pricelist for each website. If you do not assign any + website, the pricelist will not be used, unless it is :ref:`selectable + `. + - Pricelists can also be :ref:`assigned to a specific customer + `. + +.. note:: + - When pricelists are enabled in the Sales app, they are automatically enabled in the eCommerce + app, and vice versa. + - In the list of pricelists, order the pricelists by priority: the first takes + precedence over the second, the second over the third, and so on. + - It is also possible to create specific pricelists for :ref:`variants + `. + +.. seealso:: + :doc:`/applications/sales/sales/products_prices/prices/pricing` + +.. _ecommerce/prices/selectable-pricelists: + +Selectable pricelists +--------------------- + +Selectable pricelists are useful, for example, when selling products in :doc:`multiple currencies +` and allow customers to +choose a pricelist using the catalog's pricelist selector located next to the :ref:`search bar +`. + +.. image:: prices/pricelist-selector.png + :alt: Pricelist selector on the ecommerce. + +To make a pricelist selectable, enable :guilabel:`Selectable`. + +.. note:: + - If a pricelist is designated as :guilabel:`Selectable`, and is not assigned to a specific + website, then the pricelist is selectable on **all** websites. + - If a pricelist does *not* appear in the selector, it may be due to the following situations: + + - Only one pricelist is defined as :guilabel:`Selectable` and the :ref:`contact has a + pricelist assigned `. + - Multiple selectable pricelists exist, but only those matching the customer's :ref:`country + group ` are shown. It is strongly recommended to disable + the :guilabel:`Selectable` option when using pricelists with country groups on the + ecommerce. + +.. seealso:: + :ref:`sales/products/currencies/currency-specific-pricelists` + +.. _ecommerce/prices/geoip: + +GeoIP & country groups +---------------------- + +It is possible to display a specific pricelist based on the visitor's location and IP address by +assigning :ref:`country groups ` to pricelists. + +.. _ecommerce/prices/country-groups: + +To do so, :ref:`navigate to the relevant pricelist form ` and select +the appropriate :guilabel:`Country Groups`. Create or edit as many pricelists for specific regions +as needed. For instance, select :guilabel:`European Union` to apply the pricelist to all EU member +states. + +To create a new country group, click :guilabel:`Search more` in the dropdown list, then +:guilabel:`New`. Add a :guilabel:`Group Name` and select the relevant :guilabel:`Countries`. +Use :ref:`Custom filters ` if needed. + +.. note:: + Each country group must contain at least one country. + +.. example:: + Use the following filter if you want to add all non-EU countries to the country group. + + `Country Group` + `is not in` + `European Union` + + .. image:: prices/pricelist-country-groups.png + :alt: Filter for country group creation. + +.. important:: + - When using GeoIP to determine the appropriate pricelist, **all** pricelists used on the + ecommerce must have a country group assigned. + - It is strongly recommended to disable the :guilabel:`Selectable` option when using pricelists + with country groups. Indeed, all pricelists with the relevant country group are automatically + applied to the catalog but if one of them is marked as :ref:`Selectable + `, the others will disappear as soon as customers + select the selectable pricelist. + + .. example:: + Imagine you create three pricelists: + + - `EU regular prices` with the `EU` country group assigned + - `EU prices with discounts` with the `EU` country group assigned + - `US prices` with the `US` country group assigned + + If the :guilabel:`Selectable` option is enabled for `EU regular prices` and + `US prices`, and the customer is from the European Union, only the pricelists + `EU regular prices` and `EU prices with discounts` will be available. However, since the + `EU prices with discount` list is not selectable, it will disappear once the customer selects + the `EU regular prices` list and prices will be displayed based on the `EU regular prices` + pricelist on the catalog. + +Pricelist application +--------------------- + +On the ecommerce, the *default* pricelist is automatically selected for public, non-logged in users +when no country group is assigned. If :ref:`GeoIP and country groups ` are +used, public users see the pricelist of their country group by default. Logged-in users with +:ref:`assigned pricelists ` see the assigned +pricelist by default **if it is assigned to the website** they are visiting. If not, the website's +default pricelist is applied (i.e., the first available pricelist assigned to the website and +without a country group, following the sequence order). + +Assigned pricelists take precedence over country-based pricelists, when applicable, unless the +assigned pricelist is linked to a different country group. + +.. example:: + A customer from the United States visits the website. They do not have a portal account. The + :guilabel:`United States` pricelist is applied. + + A different visitor, also from the United States, has the :guilabel:`Loyal Customer Discount` + pricelist assigned in their contact form. This assignment takes precedence over the country + group assignation, so the :guilabel:`Loyal Customer Discount` is applied. + + .. image:: prices/pricelists-example.png + :alt: An example of various pricelists assigned to a website. + + +.. _ecommerce/prices/discounts: + +Discounts +========= + +Discounts programs +------------------ + +To enable :doc:`discount programs ` +for your ecommerce, go to :menuselection:`Website --> Configuration --> Settings`, scroll +down to the :guilabel:`Shop - Products` section, and enable the :guilabel:`Discounts, Loyalty & Gift +Card` feature. + +:ref:`Configure ` the discount program, make sure the +:guilabel:`Website` option is enabled, and add the relevant :ref:`Pricelist +` and :guilabel:`Website` on the program form, if needed. + +.. _ecommerce/prices/permanent-discounts: + +Permanent product discount +-------------------------- + +If the price of a specific product has been permanently reduced, the strikethrough strategy is +commonly used. This involves showing the new discounted price, with the original price crossed out +alongside it. + +.. image:: prices/price-strikethrough.png + :alt: Price strikethrough. + +To display a permanently discounted price, navigate to :menuselection:`Website --> Configuration +--> Settings`, scroll down to the :guilabel:`Shop - Products`, enable the :guilabel:`Comparison +Price` option, and :guilabel:`Save`. Then, :ref:`go to the product form +`, enter the new (discounted) price in the +:guilabel:`Sales Price` field and the original one (strikethrough) in the +:guilabel:`Compare to Price` field. + +.. note:: + The :guilabel:`Compare to Price` field must contain a price that is higher than the + :guilabel:`Sales Price` for the original price to appear with a strikethrough. + +.. important:: + The :guilabel:`Compare to Price` is not displayed if discounted pricelists apply. If you want to + use the :guilabel:`Compare to price` with another discount, configure a pricelist with a + :ref:`promotional code `. + +Discounted pricelists +--------------------- + +It is also possible to create :ref:`pricelists with discounts `. +To do so, :ref:`create a pricelist ` and +:ref:`configure the discount `. + +If a :ref:`pricelist ` contains a :ref:`Discount +` price type, the price is striked through for applicable customers, +even if the :ref:`Comparison Price ` feature has not been +enabled. + +.. note:: + If using pricelists with :ref:`country groups `, the discounted pricelist + must be assigned the same country group as the one used for the non-discounted pricelist. + +.. _ecommerce/prices/promotional-code: + +E-commerce promotional code +--------------------------- + +To offer a discounted pricelist for customers with a specific discount code, access the relevant +:ref:`pricelist form `, go to the :guilabel:`Ecommerce` tab, and add +an :guilabel:`E-commerce Promotional Code`, e.g., `SUMMERSALE10%`. Then, go to the :guilabel:`Price +Rules` tab, click :guilabel:`Add a line`, and :ref:`configure the discount +`. When a customer inserts the code during the :ref:`checkout process +`, this discount is granted according to the :guilabel:`Price +Rules` configuration. + +.. note:: + Make sure that the :ref:`Promo Code ` option + in the website editor is enabled and, if using :ref:`country groups + `, that the discounted pricelist has the same country group + assigned as the non-discounted pricelist. + +.. _ecommerce/prices/hide-prices: + +Hide prices +=========== + +Some businesses, such as B2B shops or companies that sell luxury or custom items, often prefer to +showcase their products online without displaying their prices. + +To hide product prices on the ecommerce, go to :menuselection:`Website --> Configuration --> +Settings`, enable :guilabel:`Prevent Sale of Zero Priced Product` in the :guilabel:`Shop - +Products` section, and enter a redirect URL in the :guilabel:`Button URL` field. The +:guilabel:`Add to Cart` button on the product page is then replaced by a :guilabel:`Contact us` +button, which can be :ref:`customized ` if needed. + +After enabling this feature, either set the price to `0` for all desired products or create a +:ref:`pricelist ` with all product prices set to `0`. Ensure the +pricelist is assigned to the correct website and is listed first among the website's pricelists. + +.. tip:: + - Ensure no pricelist used on the ecommerce has been marked as :guilabel:`Selectable` to prevent + accidentally displaying the zero-priced pricelist. + - To hide prices from public visitors while keeping them visible to logged-in customers, create a + zero-priced pricelist to be used for non-logged-in customers and :ref:`assign + ` a regular pricelist (with actual prices) to + customers with :ref:`portal access `. + +.. seealso:: + :doc:`../customer_accounts` diff --git a/content/applications/websites/ecommerce/products/price_management/price-cost-per-unit-page.png b/content/applications/websites/ecommerce/products/prices/price-cost-per-unit-page.png similarity index 100% rename from content/applications/websites/ecommerce/products/price_management/price-cost-per-unit-page.png rename to content/applications/websites/ecommerce/products/prices/price-cost-per-unit-page.png diff --git a/content/applications/websites/ecommerce/products/price_management/price-strikethrough.png b/content/applications/websites/ecommerce/products/prices/price-strikethrough.png similarity index 100% rename from content/applications/websites/ecommerce/products/price_management/price-strikethrough.png rename to content/applications/websites/ecommerce/products/prices/price-strikethrough.png diff --git a/content/applications/websites/ecommerce/products/price_management/price-tax-display-type.png b/content/applications/websites/ecommerce/products/prices/price-tax-display-type.png similarity index 100% rename from content/applications/websites/ecommerce/products/price_management/price-tax-display-type.png rename to content/applications/websites/ecommerce/products/prices/price-tax-display-type.png diff --git a/content/applications/websites/ecommerce/products/prices/pricelist-country-groups.png b/content/applications/websites/ecommerce/products/prices/pricelist-country-groups.png new file mode 100644 index 0000000000000000000000000000000000000000..a589d3dbc37e6a9900a141288f529e1d137e7cff GIT binary patch literal 4366 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 literal 0 HcmV?d00001 diff --git a/content/applications/websites/ecommerce/products/prices/pricelist-selector.png b/content/applications/websites/ecommerce/products/prices/pricelist-selector.png new file mode 100644 index 0000000000000000000000000000000000000000..466bc178d3a5e366b2bfb7c08cd26f7e6da746a9 GIT binary patch literal 2291 zcmV+V|K8r;AtfoHqNH~~ zZT$TFTB6+l{OalH>Bhv!>g(%=ij1(bv$uFYk(JnTba#J&gl1@K`1tw%@y>-xE@o+L z*Vov9Kxp0c|Mc|rx460O?e1e{Y5(fU|Nrv;|M|moa*&dgFEly-_}q6!d#Jzgq*!R; z{{D^7_TxfXsxfX@xgp|z47e%|93}$^8Wwg`v33n@F7HlzwZBfe12(cZh(S? zf<$PUPig=1+0gL+R6Z&pB|+!s=l}WRTwh_mzQ2l$j!`TrpxXGow%FE{i2UEXGbJi_ zLv-i)`LW3Kg^7yn?CrLF&ml#KON|V`laB z_5bjiBoT=ici>!A_dq{%8Atf^}GhlvdRiDA*%i8rMFcc($}7z``EdHVV9U*Z~gr9 zkbiEtsg$t7@S~-tT8Xp&_27k2Fok-+jaM+#nOxD$&%?g6qF^^6LVUmK|DKY&v}A3{ z;s5Q_&i3l(iH6C0KxnDR76)3vf}ns}t*u(?)>^eyTy<;r-h1!8$3Oipxd3T^=gC9N4d3?}os zyEYa!wrAz2Xp+$pQ1`Kzt(M*Tr{3A;B(?;AXI&Q3XmmgC);SGT=W+V+DVJ%nJpHvn$7jC7TaP86S3JM3bVz+<`lygH~v`A)oT&3 zI=})Juz&?DU;)dOv|K-F;tkaHX1`l~1%e|vpY%SvGeIEqqVCf@(765uu3Cg=qM8pK zYI1Fi5PJ1KzVxA-D8;MyRXiJp_2$kje3Jo5Q=q-aUtgT%! zax8yC($l6YZ}Hvy;ZbV$%J|_H4@w>SvAK+9^ z#tPKDabro~rU-mxL5JU4niKUaN3WH*Vh%>(>5B27H$T<%O7BNsMbLAY=Ni|;+!8Ec z0Sj2b0v52a!UFfjzycPqfCVgIxq2<`*P8xGb+7B#aZ{&IBX`WW)3jP@_h-Yd_-3PJ z{=6|bN|1%cslK+dH6^v2W0t$_HtktjsMUq5z8z+vB*!f7W#1(8#S(IH*>Vone#dlc zOU++Dce--0_M7~WRUacue~INq?bp{{IBU7wn@g6Evy+Y0L9J&u=2%7h-WZNr6nj#O zsYZPI(q)q+y=?x+oV-@9LulgZt*;dvOX(;#f7?Sv`<56E_Azo1KI){G@ zFWZsL)w!h>F&!{Z1`Alg0v51<1uS6UkR{BA%@o_#B=Tvks7%FXi*0Lo(Xi{68P2dY z+tyaIcFj8y#ktwK=ABpHMZnbn3s}Gc7O;Q?EMNf(Sik}nuz+PG@gKP839XbxgxvrD N002ovPDHLkV1k*C!Fm7y literal 0 HcmV?d00001 diff --git a/content/applications/websites/ecommerce/products/price_management/pricelists-example.png b/content/applications/websites/ecommerce/products/prices/pricelists-example.png similarity index 100% rename from content/applications/websites/ecommerce/products/price_management/pricelists-example.png rename to content/applications/websites/ecommerce/products/prices/pricelists-example.png diff --git a/content/applications/websites/ecommerce/products/prices/prices-per-unit.png b/content/applications/websites/ecommerce/products/prices/prices-per-unit.png new file mode 100644 index 0000000000000000000000000000000000000000..1ab23fc5ea11d1e2f671fbb5a97b98e56f5d1604 GIT binary patch literal 5845 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 ByA=Qc literal 0 HcmV?d00001 diff --git a/content/applications/websites/website/configuration/multi_website.rst b/content/applications/websites/website/configuration/multi_website.rst index 1189b1e05c..0f65e91d35 100644 --- a/content/applications/websites/website/configuration/multi_website.rst +++ b/content/applications/websites/website/configuration/multi_website.rst @@ -131,7 +131,7 @@ Pricing ------- Products can be priced differently based on the website using :ref:`pricelists -`. The following configuration is required: +`. The following configuration is required: #. Go to :menuselection:`Website --> Configuration --> Settings`. #. Scroll down to the :guilabel:`Shop - Products` section and select the :guilabel:`Pricelists` diff --git a/redirects/18.0.txt b/redirects/18.0.txt index 84a760f696..99b95d79a3 100644 --- a/redirects/18.0.txt +++ b/redirects/18.0.txt @@ -43,13 +43,13 @@ applications/productivity/voip/transfer_forward.rst applications/productivity/vo # applications/websites -applications/websites/ecommerce/cart.rst applications/websites/ecommerce/checkout.rst applications/websites/website/pages/menus.rst applications/websites/website/pages/header_footer.rst applications/websites/website/building_blocks/dynamic_content.rst applications/websites/website/building_blocks.rst applications/websites/website/building_blocks/features.rst applications/websites/website/building_blocks.rst applications/websites/website/building_blocks/inner_content.rst applications/websites/website/building_blocks.rst applications/websites/website/building_blocks/structure.rst applications/websites/website/building_blocks.rst -applications/websites/website/pages/menus.rst applications/websites/website/pages/header_footer.rst applications/websites/website/pages/header_footer.rst applications/websites/website/structure/header_footer.rst applications/websites/website/pages.rst applications/websites/website/structure/pages.rst applications/websites/website/pages/seo.rst applications/websites/website/structure/seo.rst +applications/websites/ecommerce/products/price_management.rst applications/websites/ecommerce/products/prices.rst +applications/websites/ecommerce/cart.rst applications/websites/ecommerce/checkout.rst