[REF] Subscriptions: rewrite overview, integrate products page

closes odoo/documentation#12823

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
This commit is contained in:
Zachary Straub (ZST)
2025-04-07 13:08:41 -07:00
parent 0625fa1d2b
commit 16a969e1e5
20 changed files with 153 additions and 201 deletions

View File

@@ -34,6 +34,8 @@ modified.
After clicking the checkbox beside the :guilabel:`Pricelists` feature, select one of those two
options, then click :guilabel:`Save` to save all changes.
.. _sales/product_prices/pricelist:
Pricelists
==========
@@ -118,9 +120,8 @@ for detailed steps on how to add advanced price rules to a pricelist.
Time-based rules tab
--------------------
Time-based rules are used specifically with :doc:`subscription products
</applications/sales/subscriptions/products>`. Be sure to check out the Odoo *Subscriptions*
:doc:`documentation </applications/sales/subscriptions>`.
Time-based rules are used specifically with subscription products. Be sure to check out the Odoo
:doc:`Subscriptions </applications/sales/subscriptions>` documentation for more information.
Under the :guilabel:`Time-based rules` tab, the same functionality of the :guilabel:`Price Rules`
tab is present, with the only difference being that a repeating time period can be applied in the
@@ -177,6 +178,8 @@ Lastly, there is the option to add an :guilabel:`E-commerce Promotional Code`. T
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_prices/discounts:
Show discount percentage to customers
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@@ -1,42 +1,160 @@
:show-content:
:hide-toc:
=============
Subscriptions
=============
Odoo *Subscriptions* is used to run recurring businesses: :ref:`sell new contracts
<subscriptions/quotations>`, :doc:`upsell customers </applications/sales/subscriptions/upselling>`,
keep the churn under control, and :doc:`generate reports
</applications/sales/subscriptions/reports>` on the main :abbr:`KPIs (Key Performance Indicators)`:
:abbr:`MRR (Monthly Recurring Revenue)`, :abbr:`ARR (Annual Recurring Revenue)`, retention, churn,
etc.
The Odoo **Subscriptions** app is designed to manage recurring revenue through subscription-based
products or services. It supports automated invoicing, renewal management, and customer lifecycle
tracking.
Subscriptions can be created manually or automatically through online sales, with varying options
for recurring billing. The app integrates with other Odoo modules such as **Invoicing**, **CRM**,
**Sales**, and **Helpdesk** to support end-to-end subscription workflows.
.. cards::
.. card:: Subscription plans
:target: subscriptions/plans
:large:
Customize subscription plan templates tailored to various product offerings
.. card:: Renew a subscription
:target: subscriptions/plans
:large:
Understand the core management activity for subscriptions
.. card:: Upsell a subscription
:target: subscriptions/plans
:large:
Offer more value for current subscribers on the same sales order
.. card:: Integrate subscriptions with eCommerce
:target: subscriptions/plans
:large:
Offer subscription products with an Odoo **eCommerce** app integration
.. seealso::
- `Odoo Tutorials: Subscriptions <https://www.odoo.com/slides/subscription-20>`_
- :doc:`/applications/sales/subscriptions/products`
- :doc:`/applications/sales/subscriptions/ecommerce`
- :doc:`/applications/sales/subscriptions/plans`
- :doc:`/applications/sales/subscriptions/upselling`
- :doc:`/applications/sales/subscriptions/renewals`
- :doc:`/applications/sales/subscriptions/closing`
- :doc:`/applications/sales/subscriptions/automatic_alerts`
- :doc:`/applications/sales/subscriptions/reports`
Set up recurrence periods
=========================
To get started with subscription products in Odoo, *recurrence periods* must first be configured.
Recurrence periods are the time windows in which subscriptions are active before they renew again.
While a subscription is active, customers receive products or services, and may also have access to
additional benefits such as support desk triage. In terms of payment, these recurrence periods
designate how often the customer is charged in order to maintain the benefits of their subscription.
To configure recurrence periods, go to :menuselection:`Subscriptions app --> Configuration -->
Recurrence periods`.
By default, the **Subscriptions** app includes a number of common recurrence periods already
available, such as :guilabel:`Monthly` and :guilabel:`Yearly`.
Create new recurrence periods by clicking :guilabel:`NEW` on the :guilabel:`Recurrence Periods`
dashboard, to reveal a blank form where the period :guilabel:`Name`, :guilabel:`Duration` and
:guilabel:`Unit` values are specified.
.. image:: subscriptions/recurrence-period-blank-form.png
:alt: A blank recurrence period form in the Odoo Subscriptions application.
.. important::
The unit :guilabel:`Days` *cannot* be used as a recurrence period for subscription products. The
daily recurrence period in Odoo is designated for rentals, and **cannot** be added to
subscription-based sales orders.
This limitation is there to avoid sales orders that would generate daily invoices.
Product form configuration
==========================
With recurrence periods set up, create a subscription product by navigating to
:menuselection:`Subscriptions app --> Subscriptions --> Products`, and either clicking an existing
product to turn into a subscription, or by clicking :guilabel:`NEW` to open up a blank product form.
.. note::
By default, the :guilabel:`Recurring` option is already enabled, prompting Odoo to recognize it
as a subscription product. Be sure to leave the :guilabel:`Recurring` and :guilabel:`Can be Sold`
options enabled.
.. image:: subscriptions/subscription-product-form.png
:alt: A basic subscription product form in Odoo Subscriptions application.
On the product form, configure the following items in the :guilabel:`General Information` tab so the
subscription product will function correctly:
- :guilabel:`Recurring`: check this box to turn the product into a subscription in Odoo.
- :guilabel:`Product type`: this value is typically set to a :guilabel:`Service`, however other
product types may be used (e.g., physical product box subscriptions, eLearning course, etc.).
- :doc:`Invoicing policy <sales/invoicing/invoicing_policy>`: set this value to when the customer
should be charged for their subscription.
- :guilabel:`Unit of Measure`: how the product should be counted in Odoo, for stock purposes. For
most subscriptions, the :abbr:`UoM (Unit of Measure)` will be :guilabel:`Units`.
- :guilabel:`Sales Price`: enter the recurring cost of the subscription that the customer will pay
per recurrence period.
Optionally set up information on the :doc:`Attributes & Variants
<sales/products_prices/products/variants>` tab if the subscription contains multiple choices for
customers (i.e. food delivery, tailored fashion boxes, etc.).
In the :guilabel:`Time-based pricing` tab, clarify the pricing options for the subscription. For
each option available, click :guilabel:`Add a price` to add a new row.
.. tip::
Longer time :guilabel:`Period` options are typically incentivized with cost savings. Consider
dropping the total :guilabel:`Price` values to offer customers a discount while supporting the
business's financial runway.
Last, if the subscription is meant to be purchased on the **eCommerce** website, click the
:icon:`fa-globe` :menuselection:`Go To Website` smart button and in the product page header, click
the gray slider from :guilabel:`Unpublished` to the green :guilabel:`Published` status.
.. _subscriptions/quotations:
Subscription quotations
=======================
Create a subscriptions quotation
================================
Manually create a new customer subscription by navigating to either the :menuselection:`Sales` or
:menuselection:`Subscriptions` app dashboards, and then clicking :guilabel:`NEW`.
.. note::
Products that have been marked as :guilabel:`Recurring` on their product forms, and are also sold
on the **eCommerce** website will *automatically* create and confirm subscription quotations in
the backend of Odoo.
.. important::
Sales orders with a defined recurrence become subscriptions.
Sales orders with a defined recurrence period automatically become subscriptions.
To create a new subscription, click on :guilabel:`New` from the *Subscription* or the :doc:`Sales
</applications/sales>` app. You can either:
On the quotation form, fill in the necessary fields such as :guilabel:`Customer` and
:guilabel:`Recurrence`, as well as the :guilabel:`Order Lines` tab.
- Select a :doc:`subscription plan </applications/sales/subscriptions/plans>` to prefill the
quotation instantly, or
- Fill out the quotation normally, making sure to select a recurrence and an end date if necessary
and adding :doc:`recurrent products </applications/sales/subscriptions/products>`.
Optionally, specify a:
- :doc:`Quotation Template <sales/send_quotations/quote_template>`, if one is readily available to
help populate the form fields.
- :guilabel:`Expiration` date, to indicate when the subscription offer is no longer valid.
.. tip::
Expiration dates pair well with :ref:`discounts <sales/products_prices/discounts>` to
incentivize faster purchases, since the discount will expire with the quotation if it's not
turned into a sales order within the specified date range.
- :ref:`Pricelist <sales/product_prices/pricelist>`, if one is available and appropriate to use
(i.e., summer sale discount, VIP customer, etc.).
- :guilabel:`Payment Terms`, to set a specified time window for when the subscription must be paid.
This is not to be confused for when the quotation is *confirmed* and becomes a sales order, to
where, payment may then be obtained immediately or within a certain amount of days, weeks, months,
etc.
.. image:: subscriptions/new-subscription-form.png
:alt: A completed example of a new subscription quotation in Odoo.
.. tip::
You can define different invoice and delivery addresses by enabling the :doc:`Customer Addresses
@@ -47,37 +165,19 @@ To create a new subscription, click on :guilabel:`New` from the *Subscription* o
Confirmation
============
Send the quotation to the customer for confirmation by clicking on :guilabel:`Send by email`, or
confirm it immediately by clicking on :guilabel:`Confirm`.
Send the quotation to the customer for confirmation by clicking on :guilabel:`SEND BY EMAIL`, or
confirm it immediately by clicking on :guilabel:`CONFIRM`.
.. tip::
Click on :guilabel:`Customer Preview` to preview the customer portal where the customer can view
their quotation, sign and pay it, and communicate with you.
.. _subscriptions/automatic-payments:
Automatic payments
==================
You can require the customer to set an automatic payment method and pre-pay the subscription's first
occurrence before they can confirm their quotation. To do so, go to the :guilabel:`Other Info` tab
of the quotation and check the :guilabel:`Payment` option in the :guilabel:`Online confirmation`
field.
If you leave :guilabel:`Payment` unchecked, the customer doesn't have to pre-pay to start the
subscription. This means that the payment is not automatic and that the customer must pay each
invoice manually.
.. important::
If the online confirmation requires a pre-payment, your customer can select only the
:ref:`payment providers <payment_providers/supported_providers>` that have the :ref:`tokenization
feature <payment_providers/tokenization>`. This ensures that the customer is automatically
charged at each new period.
If a signature or a payment is required to confirm the quotation, set either (or both) of these
options in the :guilabel:`Other Info` tab, next to the :guilabel:`Online confirmation` field.
.. toctree::
:titlesonly:
subscriptions/products
subscriptions/ecommerce
subscriptions/plans
subscriptions/upselling

View File

@@ -87,5 +87,4 @@ retention rates very high.
.. seealso::
- :doc:`../subscriptions`
- :doc:`plans`
- :doc:`products`
- :doc:`../../essentials/in_app_purchase`

View File

@@ -104,4 +104,3 @@ added by the customer.
.. seealso::
- :doc:`../subscriptions`
- :doc:`plans`
- :doc:`products`

View File

@@ -13,7 +13,7 @@ To add more recurrence periods to the eCommerce product page, create a *product
recurrence period.
.. seealso::
- :doc:`Configure subscription products </applications/sales/subscriptions/products>`
- :doc:`Configure subscription products </applications/sales/subscriptions>`
- :doc:`Product variants </applications/sales/sales/products_prices/products/variants>`
Create recurrence periods as product variants

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@@ -1,147 +0,0 @@
=====================
Subscription products
=====================
By closely integrating with the Odoo *Sales* app, the *Subscriptions* app enables users to sell
subscription products alongside regular sales products. While regular products are sold on a
one-time basis, subscription products are sold on a renewing basis, generating recurring revenue.
In Odoo, subscription products are also called *recurring* products.
Configure recurrence periods
============================
To get started with subscriptions, the *recurrence periods* must be properly configured, as needed.
Recurrence periods are the time periods in which subscriptions renew. They designate how often the
customer pays for (and receives) subscription products.
To configure recurrence periods, go to :menuselection:`Subscriptions app --> Configuration -->
Recurrence periods`.
.. image:: products/recurrence-periods-page.png
:align: center
:alt: The recurrence periods page in Odoo Subscriptions application.
The *Subscriptions* app comes with some basic recurrence periods already configured:
- :guilabel:`Monthly`
- :guilabel:`Quarterly`
- :guilabel:`Weekly`
- :guilabel:`2 Weeks`
- :guilabel:`Yearly`
- :guilabel:`3 Years`
- :guilabel:`5 Years`
New recurrence periods can be added and/or edited at any time.
To create a new recurrence period, click :guilabel:`New` on the :guilabel:`Recurrence Periods` page.
Doing so reveals a blank recurrence period form.
.. image:: products/recurrence-period-form.png
:align: center
:alt: A recurrence period form in Odoo Subscriptions application.
Then, type in the :guilabel:`Name` and :guilabel:`Duration` of the recurrence period, and select the
:guilabel:`Unit` that defines the duration.
.. important::
The unit :guilabel:`Days` *cannot* be used as a recurrence period on subscriptions. The daily
recurrence is meant for rentals, and **cannot** be added on recurring subscription sales orders.
This limitation is there to avoid sales orders that would generate daily invoices.
Product form configuration
==========================
To create a new subscription product, navigate to :menuselection:`Subscriptions app --> Products -->
Products`, and click :guilabel:`New`.
Doing so reveals a blank product form, which can be configured and customized in a number of ways.
.. note::
By default, the :guilabel:`Recurring` option is already enabled, prompting Odoo to recognize it
as a subscription product. Be sure to leave the :guilabel:`Recurring` and :guilabel:`Can be Sold`
options enabled.
The :guilabel:`Product Type` field is set to :guilabel:`Service` by default, as well. However,
subscription products *can* be set to other types, if needed.
.. image:: products/subscription-product-form.png
:align: center
:alt: A basic subscription product form in Odoo Subscriptions application.
Time-based pricing
------------------
Once the desired fields in the :guilabel:`General Information` tab have been entered, click the
:guilabel:`Time-based pricing` tab on the product form.
.. image:: products/time-based-pricing-tab.png
:align: center
:alt: The time-based pricing tab on a subscription product form in Odoo Subscriptions.
From here, click :guilabel:`Add a price` to begin defining recurring prices.
In the :guilabel:`Period` column, select a desired recurrence period. In the :guilabel:`Pricelist`
column, select a pricelist, if needed. Then, in the :guilabel:`Price` column, enter the price for
that recurrence period.
.. note::
:guilabel:`Daily` and :guilabel:`Hourly` periods **cannot** be used on recurring products.
.. image:: products/validation-error-popup.png
:align: center
:alt: The validation error pop-up window that appears in Odoo Subscriptions.
.. note::
There is *no limit* to how many lines can be added to the :guilabel:`Time-based pricing` table.
.. tip::
An existing product can be made into a subscription product, simply by marking it as
:guilabel:`Recurring`, and configuring :guilabel:`Time-based pricing` on the product form.
Pricelists
~~~~~~~~~~
:doc:`Pricelists <../sales/products_prices/prices/pricing>` can be used with subscription products
to give special pricing to customers included in pricelists.
This can be configured either in the :guilabel:`Time-based pricing` tab of the product form, or on
the pricelist form in the *Sales* application.
To create recurring price rules for specific pricelists in the :guilabel:`Time-based pricing` tab of
the product form, select a pricelist in the :guilabel:`Pricelist` column.
.. image:: products/pricelist-time-based-pricing.png
:align: center
:alt: Pricelists in the "Time-based pricing" tab of the product form.
When pricelists are added to the :guilabel:`Time-based pricing` tab, the pricelist form in the
*Sales* app is automatically updated.
Time-based pricing rules can also be configured directly on the pricelist form.
To do this, go to :menuselection:`Sales app --> Products --> Pricelists`, and select a pricelist (or
click :guilabel:`New` to create a new pricelist).
.. note::
Pricelists are also accessible through the Odoo *Subscriptions* app by following the same menu
steps.
Then, on the pricelist form, under the :guilabel:`Time-based rules` tab, click :guilabel:`Add a
line`.
.. image:: products/pricelist-form-time-based-rules-tab.png
:align: center
:alt: The time-based rules tab on a pricelist form in Odoo Sales.
Then, select a subscription product in the :guilabel:`Products` column, and select a recurrence
period in the :guilabel:`Period` column. Lastly, enter a :guilabel:`Price` for that particular
product and period. Add as many lines as needed.
When :guilabel:`Time-based rules` are added to the pricelist form, the :guilabel:`Time-based
pricing` tab of the product form is automatically updated.
.. seealso::
:doc:`ecommerce`

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -79,4 +79,3 @@ to your *Subscriptions dashboard* and use the filter *To renew*.
.. seealso::
- :doc:`../subscriptions`
- :doc:`plans`
- :doc:`products`

View File

@@ -119,4 +119,3 @@ apply and the salesperson you want to analyze.
.. seealso::
- :doc:`../subscriptions`
- :doc:`plans`
- :doc:`products`

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View File

@@ -82,5 +82,4 @@ The only difference between your two sales orders is the description underneath
.. seealso::
- :doc:`../subscriptions`
- :doc:`plans`
- :doc:`products`

View File

@@ -162,6 +162,7 @@ applications/sales/subscriptions/sales_flow/closing.rst applications/sales/subsc
applications/sales/subscriptions/sales_flow/create_a_quotation.rst applications/sales/subscriptions.rst # subscriptions/sales_flow/create_a_quotation --> subscriptions
applications/sales/subscriptions/sales_flow/renewals.rst applications/sales/subscriptions/renewals.rst # sales_flow/* --> *
applications/sales/subscriptions/sales_flow/upselling.rst applications/sales/subscriptions/upselling.rst # sales_flow/* --> *
applications/sales/subscriptions/products.rst applications/sales/subscriptions.rst # subscriptions/products --> subscriptions
# applications/services