diff --git a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst index e3a06d8ac..49ed880b3 100644 --- a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst +++ b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills.rst @@ -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` diff --git a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/bill-control-policy-error-message.png b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/bill-control-policy-error-message.png deleted file mode 100644 index 821cb294e..000000000 Binary files a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/bill-control-policy-error-message.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/billing-status-nothing-to-bill.png b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/billing-status-nothing-to-bill.png deleted file mode 100644 index 261730ec9..000000000 Binary files a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/billing-status-nothing-to-bill.png and /dev/null differ diff --git a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-billing-status.png b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-billing-status.png new file mode 100644 index 000000000..a9542b57a Binary files /dev/null and b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-billing-status.png differ diff --git a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-error-message-popup.png b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-error-message-popup.png new file mode 100644 index 000000000..9ef0f70aa Binary files /dev/null and b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-error-message-popup.png differ diff --git a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-invalid-operation.png b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-invalid-operation.png new file mode 100644 index 000000000..71f3eff80 Binary files /dev/null and b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-invalid-operation.png differ diff --git a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-selected-policy.png b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-selected-policy.png new file mode 100644 index 000000000..552e83635 Binary files /dev/null and b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-selected-policy.png differ diff --git a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-should-be-paid.png b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-should-be-paid.png new file mode 100644 index 000000000..523df5935 Binary files /dev/null and b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-should-be-paid.png differ diff --git a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-three-way-matching.png b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-three-way-matching.png new file mode 100644 index 000000000..aaa2efeb2 Binary files /dev/null and b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/control-bills-three-way-matching.png differ diff --git a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/vendor-bill-should-be-paid.png b/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/vendor-bill-should-be-paid.png deleted file mode 100644 index 17ac530f6..000000000 Binary files a/content/applications/inventory_and_mrp/purchase/manage_deals/control_bills/vendor-bill-should-be-paid.png and /dev/null differ