Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions content/applications/finance/accounting/payments.rst
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@ payment method.

.. _accounting/payments/from-invoice-bill:

.. _finance/accounting/register-payment-invoice-bill:

Registering payment from an invoice or bill
===========================================

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,8 @@ Notes tab
In the :guilabel:`Notes` tab of the quotation form, enter any specific internal notes about the
quotation and/or customer, if desired.

.. _sales/sales_quotations/send-and-confirm:

Sending and confirming quotations
=================================

Expand Down
148 changes: 58 additions & 90 deletions content/applications/sales/subscriptions/renewals.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,127 +2,95 @@
Renew subscriptions
===================

The foundation of any subscription business model is recurring payments. This is when customers
reliably pay a regular amount at specific intervals, in exchange for access to a subscription
product or service.

Subscription renewal is the process customers follow when they willingly choose to continue
participating in, and paying for, a subscription product or service.

Subscribers experience the renewal process at different intervals -- weekly, monthly, annually, etc.
-- depending on the duration of the agreed-upon contract.

Most companies that offer subscriptions prefer to automate the renewal process for customers.
However, manual subscription renewals are still used in some cases.

With the Odoo **Subscriptions** application, a company can manage all of its subscriptions in one
place. Renewals can be processed automatically, or manually, include additional products or upsells
per renewal order, and be filtered in batch views to quickly locate customers who need to renew
Subscription renewal is the process customers follow when they willingly choose to continue a
subscription product or service. Subscribers go through the renewal process at different intervals
-- weekly, monthly, annually, etc. -- depending on the duration of the agreed-upon contract. Most
companies that offer subscriptions prefer to automate the renewal process for customers. However,
manual subscription renewals are still used in some cases.

With the Odoo :guilabel:`Subscriptions` application, a company can manage all of its subscriptions
in one place. Renewals can be processed automatically or manually, include additional products or
upsells per renewal order, and be filtered in batch views to locate customers who need to renew
their subscriptions.
Comment on lines +11 to 14
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Amazing paragraph! 💯 this clearly explains the value of the renew feature and nicely distinguishes between manual and automatic renewals. I also like the mention of batch view filters to locate customers who need to renew.

Just a small note: since let's cover how to set up automatic renewals and how to locate customers that need to renew subscriptions in a future PR. And then once the doc section is written, add a ref link here so the reader can jump to those related documents if they're interested in setting it up! Let's talk about that after we merge this.

The only change I have here is that instead of guilabels, when referring to applications, we use bold. Then, I moved some words around to fit 100 characters on each line.

Suggested change
With the Odoo :guilabel:`Subscriptions` application, a company can manage all of its subscriptions
in one place. Renewals can be processed automatically or manually, include additional products or
upsells per renewal order, and be filtered in batch views to locate customers who need to renew
their subscriptions.
With the Odoo **Subscriptions** application, a company can manage all of its subscriptions in one
place. Renewals can be processed automatically or manually, include additional products or upsells
per renewal order, and be filtered in batch views to locate customers who need to renew their
subscriptions.


Subscription renewals
=====================
Opening a renewal quotation
===========================
Comment on lines +16 to +17
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we're thinking of distinguishing between the manual and automatic renewal process, let's be more intentional in the naming that this is for the manual process! Here are some ideas for ways we could title this

Suggested change
Opening a renewal quotation
===========================
Manual renewals
===============

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The title above is the most concise option, but if we want to consider SEO and make it more action-oriented, we could try:

Suggested change
Opening a renewal quotation
===========================
Create a renewal manually
=========================

I dropped “quotation” from the title since it feels a bit Odoo-specific and might not be something a general user would search for. That said, this is just my take and gut feeling, I don’t have data to back it up! 😅

You’re the one diving deep into the Subscriptions app, so I’d love for you to decide what feels right here! If "renewal quotation" is an industry-standard term or makes more sense for our audience, feel free to keep it! I trust your judgment as you build your expertise in this area. 🙌


In order to renew a subscription, a quotation with a subscription product **must** be confirmed,
with a configured *Recurring Plan* selected.
In order to create a renewal quotation, there are certain prerequisites that a subscription must
meet.
Comment on lines +19 to +20
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And a response to the above message about titles, I personally would leave the wording like you have it here on "renewal quotation", since we're getting into the step-by-step instructions in Odoo, so Odoo-isms are expected and encouraged to build the reader's familiarity with our terminology (: (things like smart buttons)


To open a subscription quotation, navigate to :menuselection:`Subscriptions app --> Subscriptions
--> Quotations`, and select the desired quotation from the list. Or, create a new one by clicking
:guilabel:`New` to open a new quotation form.
- A quotation with a subscription product must be confirmed.
- A configured *recurring plan* must be selected.
- Payment from the customer for the initial subscription must be invoiced and registered.

.. note::
- Only a singular product is required.
- A subscription service counts as a product, as it is considered a recurring product.

Subscription quotations **must** be confirmed, and payment from the customer for the
initial subscription **must** be invoiced and registered in order to successfully open a *Renewal
Quotation*.

.. seealso::
For more information on the above process of confirming quotations and invoicing payments,
see:
- :doc:`../sales/sales_quotations/create_quotations`
- :doc:`../sales/sales_quotations/get_paid_to_validate`

Once the payment from the subscription quotation is confirmed, the quotation turns into a sales
order. An :guilabel:`In Progress` tag is applied to the sales order form, and a series of buttons
also appear at the top of the sales order, including a :guilabel:`Renew` button.
To check if an existing subscription quotation meets the prerequisites, navigate to
:menuselection:`Subscriptions app --> Subscriptions--> Quotations` and select the desired quotation
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
:menuselection:`Subscriptions app --> Subscriptions--> Quotations` and select the desired quotation
:menuselection:`Subscriptions app --> Subscriptions --> Quotations` and select the desired quotation

from the list. Properly configured subscriptions show as being in the :guilabel:`Sales Order` stage,
have an :guilabel:`In Progress` tag, and have the :guilabel:`Renew` button in the row of buttons
directly above the order form.
Comment on lines +28 to +30
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good clarification on the state of a proper subscription! (:


.. image:: renewals/renew-button.png
:align: center
Comment on lines 31 to 33
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn’t need to be updated for this PR, since the images are still accurate in version 18. But just for future reference: we’ve updated our style guidelines to stop using red boxes to mark up screenshots. For your next PRs, please take screenshots without them.

:alt: Renew button on subscription sales order with Odoo Subscriptions.

When the :guilabel:`Renew` button is clicked, Odoo instantly presents a new renewal quotation,
complete with a :guilabel:`Renewal Quotation` tag.

.. image:: renewals/renewal-quotation.png
:align: center
:alt: Renewal quotation in the Odoo Subscriptions application.

From here, a standard sales flow can occur to confirm the quotation. This typically begins
by clicking :guilabel:`Send by Email`, which sends a copy of the quotation to the customer, by
email, for them to confirm, and eventually, pay for.

.. note::
In the chatter of the :guilabel:`Renewal Quotation`, it is mentioned that this subscription is
the renewal of the subscription from the original sales order.

Once the :guilabel:`Renewal Quotation` is confirmed, it becomes a sales order, and a
:guilabel:`Sales History` smart button appears at the top of the page.

.. image:: renewals/sales-history-smart-button.png
:align: center
:alt: Sales History smart button in the Odoo Subscriptions application.

When that :guilabel:`Sales History` smart button is clicked, Odoo reveals a separate page,
showcasing the different sales orders attached to this subscription, along with their individual
complete with a :guilabel:`Renewal Quotation` tag. Important reference information like the start
date and next invoice date are automatically added to the renewal quotation's chatter.

From here, follow the standard sales flow to
:ref:`confirm the quotation <sales/sales_quotations/send-and-confirm>`,
:doc:`invoice the order <../../sales/sales/invoicing/invoicing_policy>`, and :ref:`register payment
<finance/accounting/register-payment-invoice-bill>`.

Once the renewal quotation is confirmed, it becomes a sale order and a :icon:`fa-usd`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Once the renewal quotation is confirmed, it becomes a sale order and a :icon:`fa-usd`
Once the renewal quotation is confirmed, it becomes a sales order and a :icon:`fa-usd`

Just a quick note about terminology here!

I know we had this discussion last week that the smart button currently says "Sale Order" but sales order is more correct grammatically.

In cases like this, we follow the UI exactly when using a guilabel (even if it's grammatically wrong) and we can submit R&D feedback to Belgium to suggest the fix.

Since you’re referring to sales orders in general here (and not using a guilabel), it’s perfectly fine to write “sales order” in the grammatically correct form! (:

:guilabel:`Sales History` smart button appears at the top of the page. When the :icon:`fa-usd`
:guilabel:`Sales History` smart button is clicked, Odoo loads a new page showcasing the different
sales orders attached to this subscription, along with their individual
:guilabel:`Subscription Status`.

.. image:: renewals/sales-history-page.png
:align: center
:alt: Renewal quotation in the Odoo Subscriptions application.

Additionally, once the :guilabel:`Renewal Quotation` is confirmed, an :guilabel:`MRR` smart button
also appears at the top of the sales order.

.. image:: renewals/mrr-smart-button.png
:align: center
:alt: MRR smart button in the Odoo Subscriptions application.

When clicked, Odoo reveals an :guilabel:`MRR Analysis` page, detailing the monthly recurring revenue
related to this specific subscription.

.. important::
On rare occasions, automatic payment can fail, which results in a *Payment Failure* tag on the
top-right of the sales order, if there is an error in the payment method.
On rare occasions, automatic payments can fail to register properly, which results in a
:guilabel:`Payment Failure` tag on the sale order and the :guilabel:`Contract in exception`
checkbox being automatically ticked in the :guilabel:`Subscription` section of the sale order's
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
checkbox being automatically ticked in the :guilabel:`Subscription` section of the sale order's
checkbox being automatically ticked in the :guilabel:`Subscription` section of the sales order's

:guilabel:`Other Info` tab.

This is done to prevent the system from charging the customer again the next time a scheduled
action is run. Because the status of the payment is unknown, Odoo requests a manual operation to
check if the payment has been made, before the payment can be used again.
Being marked Contract in exception prevents scheduled actions from running, which keeps the
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Being marked Contract in exception prevents scheduled actions from running, which keeps the
Being marked :guilabel:`Contract in exception` prevents scheduled actions from running, which keeps the

Probably guilabel here since it appears on the UI? (:

system from accidentally double-charging the customer if the automatic payment actually went
through. Because the status of the payment failed to register with the system, users must
manually check if the payment has been made before automatic payments and other scheduled actions
can resume.

To do this, navigate to :menuselection:`Subscriptions app --> Subscriptions --> Quotations`.
Click into the desired subscription, then check the *Chatter* to see if the payment was made.
Click into the desired subscription, then check the Chatter to see if the payment was made.

If the payment was **not** made, first enter :doc:`debug mode <../../general/developer_mode>`.
If the payment *was not* made, first enter :doc:`Developer Mode <../../general/developer_mode>`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no need to capitalize!

Suggested change
If the payment *was not* made, first enter :doc:`Developer Mode <../../general/developer_mode>`.
If the payment *was not* made, first enter :doc:`developer mode <../../general/developer_mode>`.

Then, click the :guilabel:`Other Info` tab, and untick the checkbox next to :guilabel:`Contract
in exception`. Reload the sales order, and the :guilabel:`Payment Failure` tag is gone.
in exception`. Reload the sale order and confirm that the :guilabel:`Payment Failure` tag is
gone.

If the payment **was** made, a new invoice must be made and posted manually. This automatically
updates the next invoice date of the subscription. Once created, enter :doc:`debug mode
<../../general/developer_mode>`, and navigate to the new sales order. Click the :guilabel:`Other
Info` tab, and untick the checkbox next to :guilabel:`Contract in exception`.
Reload the sales order, and the :guilabel:`Payment Failure` tag is gone.
If the payment *was* made, a new invoice must be made and posted manually. This automatically
updates the next invoice date of the subscription. Once the invoice is created, enter
:doc:`Developer Mode <../../general/developer_mode>` and navigate to the new sale order. Click
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
:doc:`Developer Mode <../../general/developer_mode>` and navigate to the new sale order. Click
:doc:`developer mode <../../general/developer_mode>` and navigate to the new sales order. Click

the :guilabel:`Other Info` tab, and untick the checkbox next to
:guilabel:`Contract in exception`. Reload the sale order and confirm that the
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
:guilabel:`Contract in exception`. Reload the sale order and confirm that the
:guilabel:`Contract in exception`. Reload the sales order and confirm that the

:guilabel:`Payment Failure` tag is gone.

.. figure:: renewals/contract-in-exception.png
:align: center
:alt: The "contract in exception" option selected with the "payment failure" tag shown.

The :guilabel:`contract in exception`` option selected with the :guilabel:`payment failure`
The :guilabel:`Contract in exception` option selected with the :guilabel:`Payment Failure`
tag shown.

In both cases, once the :guilabel:`Contract in exception` option is no longer selected, Odoo
handles renewals automatically again. If the subscription remains in *payment failure*, it is
skipped by Odoo until the sales order is closed.
In both cases, once the :guilabel:`Contract in exception` checkbox is no longer ticked, Odoo
handles renewals automatically again. If the subscription remains in Payment Failure, it is
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
handles renewals automatically again. If the subscription remains in Payment Failure, it is
handles renewals automatically again. If the subscription remains in :guilabel:`Payment Failure`, it is

ignored by Odoo until the sale order is closed.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
ignored by Odoo until the sale order is closed.
ignored by Odoo until the sales order is closed.


.. seealso::
- :doc:`../subscriptions`
- :doc:`../sales/sales_quotations/create_quotations`
- :doc:`../sales/sales_quotations/get_paid_to_validate`