[IMP] purchase: update bill control policy doc

closes odoo/documentation#8390

Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
This commit is contained in:
Brandon Seltenrich (BRSE) 2024-03-27 10:07:01 -04:00
parent 0f44035783
commit d25a0d261b
10 changed files with 119 additions and 89 deletions

View File

@ -2,127 +2,157 @@
Bill control policies
=====================
In Odoo, the *bill control* policy determines the quantities billed by vendors on every purchase
order, for ordered or received quantities. The policy selected in the settings will act as the
default value and will be applied to any new product created.
.. _purchase/manage_deals/control-bills:
.. |PO| replace:: :abbr:`PO (Purchase Order)`
.. |POs| replace:: :abbr:`POs (Purchase Orders)`
In Odoo's *Purchase* app, the *bill control* policy determines the quantities billed by vendors on
every purchase order (PO), for either ordered or received quantities.
The policy selected in the *Purchase* app settings acts as the default value, and is applied to any
new product created.
Configuration
=============
To view the default bill control policy and make changes, go to :menuselection:`Purchase -->
Configuration --> Settings`, and scroll down to the :guilabel:`Invoicing` section. Here, there are
the two :guilabel:`Bill Control` policy options: :guilabel:`Ordered quantities` and
:guilabel:`Received quantities`.
To configure the *bill control* policy, navigate to :menuselection:`Purchase app --> Configuration
--> Settings`, and scroll down to the :guilabel:`Invoicing` section. Under :guilabel:`Bill Control`,
select either :guilabel:`Ordered quantities` or :guilabel:`Received quantities`. Then, click
:guilabel:`Save`.
The policy selected will be the default for any new product created. The definition of each policy
is as follows:
- :guilabel:`Ordered quantities`: creates a vendor bill as soon as a purchase order is confirmed.
The products and quantities in the purchase order are used to generate a draft bill.
- :guilabel:`Received quantities`: a bill is created only *after* part of the total order has been
received. The products and quantities *received* are used to generate a draft bill. An error
message will appear if creation of a vendor bill is attempted without receiving anything.
.. image:: control_bills/bill-control-policy-error-message.png
.. image:: control_bills/control-bills-selected-policy.png
:align: center
:alt: Bill control policy draft bill error message.
:alt: Selected bill control policy in Purchase app settings.
- :guilabel:`Ordered quantities`: creates a vendor bill as soon as a |PO| is confirmed. The products
and quantities in the |PO| are used to generate a draft bill.
- :guilabel:`Received quantities`: a bill is created only *after* part of the total order has been
received. The products and quantities received are used to generate a draft bill. An error message
appears if creation of a vendor bill is attempted without receiving anything.
.. image:: control_bills/control-bills-error-message-popup.png
:align: center
:alt: Bill control policy draft bill error message.
.. note::
If one or two products need a different control policy, the default bill control setting can be
overridden by going to the :guilabel:`Purchase` tab in a product's template and modifying its
:guilabel:`Control Policy` field.
If a specific product should use a different control policy than selected in the *Purchase* app
settings, the :guilabel:`Bill Control` policy for that product can be changed from its product
form.
Example flow: Ordered quantities
--------------------------------
To complete an example workflow using the *ordered quantities* bill control policy, first go to
:menuselection:`Purchase --> Configuration --> Settings`, scroll down to the :guilabel:`Invoicing`
section, and select :guilabel:`Ordered quantities`. Then, :guilabel:`Save` changes.
In the :guilabel:`Purchase` app, create a new :abbr:`RFQ (Request for Quotation)`. Fill out the
information on the quotation form, add products to the invoice lines, and click :guilabel:`Confirm
Order`. Then, click :guilabel:`Create Bill`. Since the policy is set to *ordered quantities*, the
draft bill can be confirmed as soon as it is created, without any products actually being received.
Example flow: Received quantities
---------------------------------
To complete an example workflow using the *received quantities* bill control policy, first go to
:menuselection:`Purchase --> Configuration --> Settings`, scroll down to the :guilabel:`Invoicing`
section, and select :guilabel:`Received quantities`. Then, :guilabel:`Save` changes.
In the :guilabel:`Purchase` app, create a new :abbr:`RFQ (Request for Quotation)`. Fill out the
information on the quotation form, add products to the invoice lines, and click :guilabel:`Confirm
Order`. Then, click on the :guilabel:`Receipt smart button`. Set the quantities in the
:guilabel:`Done` column to match the quantities in the :guilabel:`Demand` column, and
:guilabel:`Validate` the changes. Then, in the purchase order, click :guilabel:`Create Bill` and
:guilabel:`Confirm`. Since the policy is set to *received quantities*, the draft bill can be
confirmed *only* when at least some of the quantities are received.
To do that, navigate to :menuselection:`Purchase app --> Products --> Products`, and select a
product. From the product form, click the :guilabel:`Purchase` tab. Under the :guilabel:`Vendor
Bills` section, modify the selection in the :guilabel:`Control Policy` field.
3-way matching
==============
Activating :guilabel:`3-way matching` ensures that vendor bills are only paid once some or all of
the products included in the purchase order have actually been received. To activate it, go to
:menuselection:`Purchase --> Configuration --> Settings`, and scroll down to the
:guilabel:`Invoicing` section. Then, click :guilabel:`3-way matching: purchases, receptions, and
bills`.
The *3-way matching* feature ensures vendor bills are only paid once some (or all) of the products
included in the |PO| have been received.
.. note::
3-way matching is *only* intended to work when the bill control policy is set to *received
quantities*.
To activate *3-way matching*, navigate to :menuselection:`Purchase app --> Configuration -->
Settings`, and scroll down to the :guilabel:`Invoicing` section. Then, tick the checkbox for
:guilabel:`3-way matching` to enable the feature, and click :guilabel:`Save`.
.. image:: control_bills/control-bills-three-way-matching.png
:align: center
:alt: Enabled 3-way matching feature in Purchase app settings.
.. important::
The :guilabel:`3-way matching` feature **only** works with the :guilabel:`Bill Control` policy
set to :guilabel:`Received quantities`.
Pay vendor bills with 3-way matching
------------------------------------
When :guilabel:`3-way matching` is activated, vendor bills will display the :guilabel:`Should Be
Paid` field under the :guilabel:`Other Info` tab. When a new vendor bill is created, the field will
be set to :guilabel:`Yes`, since a bill can't be created until at least some of the products
included in a purchase order have been received.
When *3-way matching* is enabled, vendor bills display a :guilabel:`Should Be Paid` field under the
:guilabel:`Other Info` tab. When a new vendor bill is created, the field is set to :guilabel:`Yes`,
since a bill **cannot** be created until at least some of the products included in a |PO| have been
received.
.. image:: control_bills/vendor-bill-should-be-paid.png
To create a vendor bill from a |PO|, navigate to :menuselection:`Purchase app --> Orders -->
Purchase Orders`. From the :guilabel:`Purchase Orders` page, select the desired |PO| from the list.
Then, click :guilabel:`Create Bill`. Doing so opens a new draft :guilabel:`Vendor Bill` form, in the
:guilabel:`Draft` stage. Click the :guilabel:`Other Info` tab, and locate the :guilabel:`Should Be
Paid` field.
.. important::
The |PO| selected from the list **must not** be billed yet, or an :guilabel:`Invalid Operation`
pop-up window appears. This occurs for |POs| with a :guilabel:`Received quantities` policy, and a
:guilabel:`Fully Billed` :guilabel:`Billing Status`.
.. image:: control_bills/control-bills-invalid-operation.png
:align: center
:alt: Invalid Operation pop-up window for billed Purchase Order.
Click the drop-down menu next to :guilabel:`Should Be Paid` to view the available options:
:guilabel:`Yes`, :guilabel:`No`, and :guilabel:`Exception`.
.. image:: control_bills/control-bills-should-be-paid.png
:align: center
:alt: Draft bill should be paid field status.
:alt: Should Be Paid field status on draft vendor bill.
.. note::
If the total quantity of products from a purchase order has not been received, Odoo only includes
the products that *have* been received in the draft vendor bill.
If the total quantity of products from a |PO| has not been received, Odoo only includes the
products that *have* been received in the draft vendor bill.
Draft bills can be edited to increase the billed quantity, change the price of the products in the
bill, and add additional products to the bill. If this is done, the :guilabel:`Should Be Paid` field
status will be set to :guilabel:`Exception`. This means that Odoo notices the discrepancy, but
doesn't block the changes or display an error message, since there might be a valid reason for
making changes to the draft bill.
Draft vendor bills can be edited to increase the billed quantity, change the price of the products
in the bill, and add additional products to the bill.
Once payment has been registered for a vendor bill and displays the green :guilabel:`Paid` banner,
the :guilabel:`Should Be Paid` field status will be set to :guilabel:`No`.
If the draft bill's information is changed, the :guilabel:`Should Be Paid` field status is set to
:guilabel:`Exception`. This means that Odoo notices the discrepancy, but does not block the changes
or display an error message, since there might be a valid reason for making changes to the draft
bill.
To process the vendor bill, select a date in the :guilabel:`Bill Date` field, and click
:guilabel:`Confirm`, followed by :guilabel:`Register Payment`.
This opens a :guilabel:`Register Payment` pop-up window. From this window, accounting information is
pre-populated based on the database's accounting settings. Click :guilabel:`Create Payment` to
process the vendor bill.
Once payment has been registered for a vendor bill, and the bill displays the green :guilabel:`Paid`
banner, the :guilabel:`Should Be Paid` field status is set to :guilabel:`No`.
.. tip::
The :guilabel:`Should Be Paid` status on bills is set automatically by Odoo. However, the status
can be changed manually by clicking the field's drop-down menu inside the :guilabel:`Other Info`
The :guilabel:`Should Be Paid` status on bills is automatically set by Odoo. However, the status
can be manually changed by clicking the field's drop-down menu inside the :guilabel:`Other Info`
tab.
View a purchase order's billing status
======================================
When a purchase order is confirmed, its :guilabel:`Billing Status` can be viewed under the
:guilabel:`Other Information` tab on the purchase order form.
Once a |PO| is confirmed, its :guilabel:`Billing Status` can be viewed under the :guilabel:`Other
Information` tab on the |PO| form.
.. image:: control_bills/billing-status-nothing-to-bill.png
To view the :guilabel:`Billing Status` of a |PO|, navigate to :menuselection:`Purchase app -->
Orders --> Purchase Orders`, and select a |PO| to view.
Click the :guilabel:`Other Information` tab, and locate the :guilabel:`Billing Status` field.
.. image:: control_bills/control-bills-billing-status.png
:align: center
:alt: Purchase order billing status.
:alt: Billing status field on a purchase order form.
Below is a list of the different statuses that a :guilabel:`Billing Status` could appear as and when
they are displayed, depending on the bill control policy used.
The table below details the different values the :guilabel:`Billing Status` field could read, and
when they are displayed, depending on the *Bill Control* policy used.
+------------------------------+--------------------------------------------------------------------------+
| :guilabel:`Billing Status` | **Conditions** |
| +------------------------------------------------+-------------------------+
| | *On received quantities* | *On ordered quantities* |
+------------------------------+------------------------------------------------+-------------------------+
| :guilabel:`Nothing to Bill` | PO confirmed; no products received | *Not applicable* |
+------------------------------+------------------------------------------------+-------------------------+
| :guilabel:`Waiting Bills` | All/some products received; bill not created | PO confirmed |
+------------------------------+------------------------------------------------+-------------------------+
| :guilabel:`Fully Billed` | All/some products received; draft bill created | Draft bill created |
+------------------------------+------------------------------------------------+-------------------------+
.. list-table::
:header-rows: 1
:stub-columns: 1
* - Billing Status
- On received quantities
- On ordered quantities
* - Nothing to Bill
- PO confirmed; no products received
- *Not applicable*
* - Waiting Bills
- All/some products received; bill not created
- PO confirmed
* - Fully Billed
- All/some products received; draft bill created
- Draft bill created
.. seealso::
:doc:`manage`

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB