diff --git a/content/applications/sales/subscriptions/products.rst b/content/applications/sales/subscriptions/products.rst index ed518d06f..b06644865 100644 --- a/content/applications/sales/subscriptions/products.rst +++ b/content/applications/sales/subscriptions/products.rst @@ -2,136 +2,251 @@ 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. +By closely integrating with the Odoo **Sales** app, the **Subscriptions** app enables users to sell +subscription products and services alongside regular sales products. While regular products are sold +on a one-time basis, subscription products and services are sold on a renewing basis, generating +recurring revenue. Configure recurrence periods ============================ -To get started with subscriptions, the *recurrence periods* must be properly configured, as needed. +To get started with subscriptions, the *Recurring Plans* **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. +*Recurring Plans* represent the time periods in which subscriptions renew. They designate how often +the customer pays for (and receives) subscription products and services. -To configure recurrence periods, go to :menuselection:`Subscriptions app --> Configuration --> -Recurrence periods`. +To configure recurring plans, go to :menuselection:`Subscriptions app --> Configuration --> +Recurring Plans`. -.. image:: products/recurrence-periods-page.png +.. figure:: products/recurring-plans-page.png :align: center - :alt: The recurrence periods page in Odoo Subscriptions application. + :alt: The Recurring Plans page in Odoo Subscriptions application. -The *Subscriptions* app comes with some basic recurrence periods already configured: + The Recurring Plans page, under the Configuration menu, in Odoo Subscriptions application. + +The *Subscriptions* app comes with some basic recurring plans already configured: - :guilabel:`Monthly` -- :guilabel:`Quarterly` -- :guilabel:`Weekly` -- :guilabel:`2 Weeks` - :guilabel:`Yearly` -- :guilabel:`3 Years` -- :guilabel:`5 Years` +- :guilabel:`6 Months` -New recurrence periods can be added and/or edited at any time. +New recurring plans 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. +To create a new recurring plans, click :guilabel:`New` on the :guilabel:`Recurring Plans` page. +Doing so reveals a blank recurring plan form. -.. image:: products/recurrence-period-form.png +.. image:: products/recurring-plan-form.png :align: center - :alt: A recurrence period form in Odoo Subscriptions application. + :alt: A Recurring Plan 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. +Type in the :guilabel:`Name` of the plan at the top of the form. -.. 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. +In the :guilabel:`Details` section, there are four fields to configure: - This limitation is there to avoid sales orders that would generate daily invoices. +- :guilabel:`Billing Period`: designate the time period in which the customer is billed for their + subscription purchase. Start by choosing a number in the first field, then choose the unit of time + in the drop-down field to the right. The options are: :guilabel:`Weeks`, :guilabel:`Months`, or + :guilabel:`Years`. + + .. important:: + The unit of *Days* **cannot** be used as a :guilabel:`Billing Period` option on subscriptions. + The daily recurrence is meant for rentals. This limitation avoids sales orders that would + generate daily invoices. + +- :guilabel:`Automatic Closing`: designate a period of time after which the subscription is + automatically closed, if the subscription is unpaid or the payment method attached to the + subscription fails. The amount configured in this field is in :guilabel:`Days`. +- :guilabel:`Company`: choose which company in the database should be attached to this plan, if + working in a multi-company environment. If no selection is made, the plan applies to all companies + in the database. +- :guilabel:`Invoice Email Template`: choose to use a preconfigured email template for the automatic + invoicing of a subscription. If no selection is made, the invoice email is **not** sent + automatically. + +In the :guilabel:`Self-Service` section, there are four optional fields: + +- :guilabel:`Closable`: Tick this checkbox to allow the customer to close their subscription on + their own. +- :guilabel:`Add Products`: Tick this checkbox to allow customers to create an upsell quote to + adjust the quantity of products in their subscription. **Only** products list as *optional + products* can be modified. +- :guilabel:`Renew`: Tick this checkbox to allow customers to renew their subscription on their own. +- :guilabel:`Optional Plans`: Choose to allow customers to switch from this plan to another on their + quotation (new subscription or renewal), by selecting other recurring plans in this field. + Multiple options can be selected in this field. + +In the :guilabel:`Pricing` tab, click :guilabel:`Add a price rule` to add :guilabel:`Products` to +the recurring plan, along with :guilabel:`Product Variants`, custom :guilabel:`Pricelist`, and +special :guilabel:`Recurring Price`, if desired. + +At the top of the form, there is a :guilabel:`Subscriptions` smart button that appears when there +are subscription sales orders related to that recurring plan. 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. - -.. important:: - When creating a physical subscription product in the Odoo **Sales** application, the - :guilabel:`Invoicing Policy` must be set to :guilabel:`Ordered quantities`. - - Setting it to :guilabel:`Delivered quantities` causes issues with invoice creation, and disrupts - the subscription process. - - Similarly, when creating a physical subscription product in the Odoo **Subscriptions** - application, the :guilabel:`Invoicing Policy` must **not** be set to :guilabel:`Based on - Delivered Quantity (Manual)` for the same reasons. +Products`, and click :guilabel:`New`. Doing so reveals a blank product form, which can be configured +and customized in a number of ways. .. image:: products/subscription-product-form.png :align: center - :alt: A basic subscription product form in Odoo Subscriptions application. + :alt: A subscription product form being filled out in the Odoo Subscriptions application. -Time-based pricing ------------------- +.. tip:: + Subscription products can also be created in the **Sales** app, by navigating to + :menuselection:`Sales app --> Products --> Products`, clicking :guilabel:`New`, and ensure the + :guilabel:`Subscriptions` checkbox beneath the :guilabel:`Product` title field is ticked. Then, + follow the workflow detailed below. + +.. note:: + There are numerous fields and tabs that appear on product forms, but for this documentation, the + focus is mainly on the necessary fields and tabs that are directly related to subscription + products. + +Give the subscription product a name in the :guilabel:`Product` field at the top of the form. + +When creating a subscription product, via the **Subscriptions** app, the :guilabel:`Subscriptions` +checkbox on product forms is already ticked, prompting Odoo to recognize it as a subscription +product. Be sure to leave the :guilabel:`Subscriptions` and :guilabel:`Sales` checkboxes ticked. + +Should an accompanying image of the product be added, hover the cursor over the :guilabel:`(camera +plus)` square to the right of the :guilabel:`Product` field, and click the :icon:`fa-pencil` +:guilabel:`(pencil)` icon, and upload the desired image. + +General Information tab +----------------------- + +The :guilabel:`Product Type` field is set to :ref:`Service `, by default. +However, subscription products can be set to :ref:`Goods ` or :ref:`Combo +`, if necessary. Depending on the :guilabel:`Product Type` selection, corresponding +fields appear on the left-side of the :guilabel:`General Information` tab. + +All other fields on the right-side of the tab remain the same, and should be filled in accordingly. + +.. _products/goods: + +Product type: Goods +~~~~~~~~~~~~~~~~~~~ + +When creating a storable or consumable subscription product, select the :guilabel:`Goods` option. +Then, it is recommended to select the :guilabel:`Invoicing Policy` option: :guilabel:`Ordered +quantities`. + +.. important:: + Setting the :guilabel:`Invoicing Policy` to :guilabel:`Delivered quantities` causes issues with + the invoice creation, and disrupts the subscription process. + +If creating a storable subscription product, the :guilabel:`Track Inventory` checkbox **must** be +ticked, and a selection from the drop-down field that appears **must** be chosen. The options are: +:guilabel:`By Unique Serial Number`, :guilabel:`By Lots`, or :guilabel:`By Quantity`. + +If creating a consumable subscription product, do **not** tick the :guilabel:`Track Inventory` +checkbox. + +If the **Repairs** application is installed, the option to :guilabel:`Create Repair` appears beneath +the :guilabel:`Track Inventory` checkbox. If ticked, the option to link an existing repair order to +a confirmed sales order becomes available. + +.. _products/service: + +Product type: Service +~~~~~~~~~~~~~~~~~~~~~ + +When creating a subscription service product, select the :guilabel:`Services` option. Then, unless +a specific option is needed, leave the :guilabel:`Create on Order` field set to the default +:guilabel:`Nothing` option. + +In the :guilabel:`Invoicing Policy` field, it is recommended to set it to :guilabel:`Prepaid/Fixed +Price`. This means Odoo invoices ordered quantities as soon as the service is sold. The ability to +create projects or tasks later is still available, which can be linked to the sales order to track +time, if needed. + +There is also an option to :guilabel:`Warn the salesperson for an upsell when work done exceeeds` a +predetermined percentage of hours sold, if desired. + +If needed, tick the checkbox beside the :guilabel:`Plan Services` option, and select an employee +from the adjacent drop-down menu to plan shifts related to this order for employees with that +selected role. This field is **not** required. + +If the **Repairs** application is installed, the option to :guilabel:`Create Repair` appears beneath +the :guilabel:`Track Inventory` checkbox. If ticked, the option to link an existing repair order to +a confirmed sales order becomes available. + +.. _products/combo: + +Product type: Combo +~~~~~~~~~~~~~~~~~~~ + +When creating a combination subscription product, select :guilabel:`Combo` as the :guilabel:`Product +Type`. + +.. note:: + When :guilabel:`Combo` is selected as the :guilabel:`Product Type`, some tabs on the form may + disappear, depending on what other applications are installed on the database. + +Once the :guilabel:`Combo` option has been selected, the only field that remains on the right-side +of the :guilabel:`General Information` tab is the :guilabel:`Combo Choices` field. + +In the :guilabel:`Combo Choices` field, select which pre-existing combo products should be included +in this subscription product. Multiple selections can be made. + +To view and/or modify a combo selection in the :guilabel:`Combo Choices` field, click into a +selected option from the field to reveal a pop-up window, showing the included products in that +combo. Add or delete products from this pop-up window, as desired. + +Or, create a new combo directly from the :guilabel:`Combo Choices` field, by typing in the name of +the new combo in the field, and clicking :guilabel:`Create and edit` from the resulting drop-down +menu. + +Doing so reveals a pop-up window, wherein products can be added, and their prices can be customized, +if desired. Once all modifications are complete, click :guilabel:`Save & Close` to save the combo +configurations, and close the pop-up window. Or, click :guilabel:`Save & New` to save the combo, and +immediately create a new combo product from a fresh pop-up window. + +Recurring Prices tab +-------------------- Once the desired fields in the :guilabel:`General Information` tab have been entered, click the -:guilabel:`Time-based pricing` tab on the product form. +:guilabel:`Recurring Prices` tab on the product form. -.. image:: products/time-based-pricing-tab.png +.. image:: products/recurring-prices-tab.png :align: center - :alt: The time-based pricing tab on a subscription product form in Odoo Subscriptions. + :alt: The recurring prices tab on a subscription product form in Odoo Subscriptions. -From here, click :guilabel:`Add a price` to begin defining recurring prices. +From here, click :guilabel:`Add a price rule` to begin defining recurring plans and 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. +In the :guilabel:`Recurring Plan` column, select a desired recurring plan. In the +:guilabel:`Pricelist` column, select a pricelist, if needed. Then, in the :guilabel:`Recurring +Price` column, enter the price for that recurring plan. .. 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. + There is *no limit* to how many lines can be added to the :guilabel:`Recurring Prices` tab. .. 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. + An existing product can be made into a subscription product, simply by ticking the + :guilabel:`Subscriptions` checkbox on its product form, and configuring :guilabel:`Recurring + Prices` tab. Pricelists ~~~~~~~~~~ :doc:`Pricelists <../sales/products_prices/prices/pricing>` can be used with subscription products -to give special pricing to customers included in pricelists. +to give special pricing to customers, who are included in pricelists. -This can be configured either in the :guilabel:`Time-based pricing` tab of the product form, or on +This can be configured either in the :guilabel:`Recurring Prices` 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 +To create recurring price rules for specific pricelists in the :guilabel:`Recurring Prices` 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:`Recurring Prices` tab, the pricelist form in the *Sales* +app is automatically updated. -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. +Recurring price 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). @@ -140,19 +255,19 @@ click :guilabel:`New` to create a new pricelist). 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`. +Then, on the pricelist form, under the :guilabel:`Recurring Prices` tab, click :guilabel:`Add a +price rule`. -.. image:: products/pricelist-form-time-based-rules-tab.png +.. image:: products/pricelist-form-recurring-prices-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. +Then, select a subscription product in the :guilabel:`Products` column, along with any desired +:guilabel:`Product Variants`. Then, select a :guilabel:`Recurring Plan`. Lastly, enter a +:guilabel:`Recurring Price` for that particular product and plan. 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. +When :guilabel:`Recurring Prices` are added to the pricelist form, the :guilabel:`Recurring Prices` +tab of the product form is automatically updated. .. seealso:: :doc:`ecommerce` diff --git a/content/applications/sales/subscriptions/products/pricelist-form-recurring-prices-tab.png b/content/applications/sales/subscriptions/products/pricelist-form-recurring-prices-tab.png new file mode 100644 index 000000000..85eebc784 Binary files /dev/null and b/content/applications/sales/subscriptions/products/pricelist-form-recurring-prices-tab.png differ diff --git a/content/applications/sales/subscriptions/products/pricelist-form-time-based-rules-tab.png b/content/applications/sales/subscriptions/products/pricelist-form-time-based-rules-tab.png deleted file mode 100644 index dc57b22de..000000000 Binary files a/content/applications/sales/subscriptions/products/pricelist-form-time-based-rules-tab.png and /dev/null differ diff --git a/content/applications/sales/subscriptions/products/pricelist-time-based-pricing.png b/content/applications/sales/subscriptions/products/pricelist-time-based-pricing.png deleted file mode 100644 index dc1f968af..000000000 Binary files a/content/applications/sales/subscriptions/products/pricelist-time-based-pricing.png and /dev/null differ diff --git a/content/applications/sales/subscriptions/products/recurrence-period-form.png b/content/applications/sales/subscriptions/products/recurrence-period-form.png deleted file mode 100644 index 5e152a037..000000000 Binary files a/content/applications/sales/subscriptions/products/recurrence-period-form.png and /dev/null differ diff --git a/content/applications/sales/subscriptions/products/recurrence-periods-page.png b/content/applications/sales/subscriptions/products/recurrence-periods-page.png deleted file mode 100644 index 6aa6dc719..000000000 Binary files a/content/applications/sales/subscriptions/products/recurrence-periods-page.png and /dev/null differ diff --git a/content/applications/sales/subscriptions/products/recurring-plan-form.png b/content/applications/sales/subscriptions/products/recurring-plan-form.png new file mode 100644 index 000000000..8370fa518 Binary files /dev/null and b/content/applications/sales/subscriptions/products/recurring-plan-form.png differ diff --git a/content/applications/sales/subscriptions/products/recurring-plans-page.png b/content/applications/sales/subscriptions/products/recurring-plans-page.png new file mode 100644 index 000000000..bfebec996 Binary files /dev/null and b/content/applications/sales/subscriptions/products/recurring-plans-page.png differ diff --git a/content/applications/sales/subscriptions/products/recurring-prices-tab.png b/content/applications/sales/subscriptions/products/recurring-prices-tab.png new file mode 100644 index 000000000..8fb787ea0 Binary files /dev/null and b/content/applications/sales/subscriptions/products/recurring-prices-tab.png differ diff --git a/content/applications/sales/subscriptions/products/subscription-product-form.png b/content/applications/sales/subscriptions/products/subscription-product-form.png index e1deb093c..2dfce16c8 100644 Binary files a/content/applications/sales/subscriptions/products/subscription-product-form.png and b/content/applications/sales/subscriptions/products/subscription-product-form.png differ diff --git a/content/applications/sales/subscriptions/products/time-based-pricing-tab.png b/content/applications/sales/subscriptions/products/time-based-pricing-tab.png deleted file mode 100644 index eaad7c0e7..000000000 Binary files a/content/applications/sales/subscriptions/products/time-based-pricing-tab.png and /dev/null differ diff --git a/content/applications/sales/subscriptions/products/validation-error-popup.png b/content/applications/sales/subscriptions/products/validation-error-popup.png deleted file mode 100644 index adeb7e759..000000000 Binary files a/content/applications/sales/subscriptions/products/validation-error-popup.png and /dev/null differ