Compare commits

...

27 Commits

Author SHA1 Message Date
Rémy Voet (ryv) fc2e3310be [IMP] orm: update changelog for the new flush strategy 2024-01-15 10:53:13 +01:00
KC (ksc) d07052aa57 [IMP] sales: updated amazon order management
closes odoo/documentation#7381

X-original-commit: f751e9548a
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2024-01-14 21:38:51 +00:00
KC (ksc) b89d3e56c2 [IMP] sales: amazon connector features doc for 16
closes odoo/documentation#7380

X-original-commit: a43a65992e
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2024-01-14 21:38:50 +00:00
Felicious 8d87bfe462 [ADD] inventory: fefo removal
closes odoo/documentation#7366

X-original-commit: 8ebfc5cd2a
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: hojo-odoo <123424465+hojo-odoo@users.noreply.github.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
2024-01-14 02:15:41 +00:00
Sam Lieber (sali) b72d340b3c [FIX] l10n_cl: Chile typo corrections
closes odoo/documentation#7363

X-original-commit: 505547264e
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
Signed-off-by: Marco Antonio Iribe Sepulveda (masi) <masi@odoo.com>
2024-01-13 05:40:53 +00:00
Felicious a197b6c57d [ADD] inventory: fifo removal strategy
closes odoo/documentation#7354

X-original-commit: 5f416e028f
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: hojo-odoo <123424465+hojo-odoo@users.noreply.github.com>
2024-01-13 04:31:50 +00:00
Joren Van Onder f0cf3c68ac [IMP] accounting: direct customers to official fork of Taxcloud modules
Also improve wording a bit.

closes odoo/documentation#7353

X-original-commit: 968177ade5
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: Renee Carano <rca@odoo.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
2024-01-13 03:20:49 +00:00
Tom Aarab (toaa) 1f31ba3f06 [REM] accounting: multiple payments
Removing redundant page (see task)

See PR https://github.com/odoo/documentation/pull/6645

taskid-3466400

closes odoo/documentation#7350

X-original-commit: 2ef7150ebf
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2024-01-13 03:20:48 +00:00
Marion (masp) 2f0d98c9f7 [ADD] website: address autocomplete configuration
Task-3618264

closes odoo/documentation#7316

X-original-commit: ca160e4e1a
Signed-off-by: Marion Spindler (masp) <masp@odoo.com>
2024-01-12 16:21:15 +00:00
Nicolas Viseur (vin) 4210a31408 [REF] l10n_au_keypay: remove au dependency
Keypay, now called Employment Hero, is not limited to Australia
but also supports Singapore, Malaysia,...

This task will:
- remove dependencies to Australia, to make it usable with other
localisation.
- Rename the module and all references to keypay and au in order to
keep the module clean for future use.
- Implement better error messages when the api returns one.
- Render the api key, and url company specific to support using
two different API on two separate companies.

Task id # 2925767

closes odoo/documentation#7276

Related: odoo/enterprise#53685
Related: odoo/upgrade#5494
Signed-off-by: Nicolas Viseur (vin) <vin@odoo.com>
2024-01-12 11:22:55 +00:00
Nathan Marotte (nama) 080dc64e54 [ADD] Upgrade documentation: How-to-guide for developers
closes odoo/documentation#7336

X-original-commit: 44f4683519
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2024-01-11 17:21:54 +00:00
Felicious 95f8067ed5 [IMP] inventory: split removal strategy doc
closes odoo/documentation#7329

X-original-commit: 9c417efadc
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Co-authored-by: hojo-odoo <123424465+hojo-odoo@users.noreply.github.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
2024-01-11 05:37:14 +00:00
masi-odoo f453b2266f [IMP] payment_provider/mercado pago: content updates
This commit will add important clarifications to use and test the Mercado Pago payment provider and add visual documentation similar to other provider's documentation

closes odoo/documentation#7326

X-original-commit: 1596413d4b
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Marco Antonio Iribe Sepulveda (masi) <masi@odoo.com>
Co-authored-by: samueljlieber <sali@odoo.com>
2024-01-11 05:37:07 +00:00
Tom Aarab (toaa) d88b185c27 [IMP] localization: spain missing reports
Missing tax reports for

15 & 16: 347 & 349
17: 347, 349, & 390

taskid-3673259

closes odoo/documentation#7320

X-original-commit: e808a28f3a
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2024-01-10 09:02:55 +00:00
Tom Aarab (toaa) 62a4db0c7d [IMP] accounting: taxes
Updated the tax documentation for 16.4 onwards. Forward to master.

taskid-3621461

closes odoo/documentation#7303

X-original-commit: 73fc5e9be4
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2024-01-10 06:28:01 +00:00
Tom Aarab (toaa) de2999c01d [IMP] accounting: payments doc update
Updated the payments doc page.

Forward to master.

16.3 -> Change reconciliation section

taskid-3610834

closes odoo/documentation#7273

X-original-commit: 9c1efe5b20
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2024-01-08 14:23:23 +00:00
Tom Aarab (toaa) 494ae5a555 [IMP] accounting: checks
Cleared up some confusion about path menu and feature

Forward to master

taskid-3644544

closes odoo/documentation#7292

X-original-commit: c438e5a3aa
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2024-01-08 12:52:43 +00:00
Donatienne (dopi) 283c843eeb [ADD] blogs: documentation
task-3492925

closes odoo/documentation#7282

X-original-commit: 4bc2742413
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2024-01-08 12:52:42 +00:00
Julien Castiaux b0cc13d4fe [FIX] developer/reference/cli: log on stderr
Odoo is actually logging on sys.stderr and not sys.stdout[^1][^2][^3].

Remove passage about the workflows, the workflows were an OpenERP
feature removed almost a decade ago in odoo/odoo@98cb4719db.

Fixes: #7210

[^1]: https://github.com/odoo/odoo/blob/b3b9b2b49ef90d30bcce1e27a4ba0b24f888170c/odoo/netsvc.py#L156
[^2]: https://github.com/odoo/odoo/blob/b3b9b2b49ef90d30bcce1e27a4ba0b24f888170c/odoo/netsvc.py#L198
[^3]: https://docs.python.org/3/library/logging.handlers.html#logging.StreamHandler

closes odoo/documentation#7274

X-original-commit: c55e8f251a
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Julien Castiaux (juc) <juc@odoo.com>
2024-01-04 23:00:59 +00:00
Donatienne (dopi) 6016ed4e93 [IMP] to-do: create a new to-do with ctrl k shortcut
taskid-3501306

closes odoo/documentation#7252

X-original-commit: a1eaf3af64
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2024-01-04 20:40:46 +00:00
Tom Aarab (toaa) 6c561112a8 [FIX] Project: broken URL
One of the link is broken

taskid-3658558

closes odoo/documentation#7250

X-original-commit: 0311faee2f
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2024-01-04 19:10:10 +00:00
Tom Aarab (toaa) 7a8f551d67 [IMP] accounting: Incoterms
Updated the Incoterms page to add "location" field and fixed typos

taskid-3619104

closes odoo/documentation#7245

X-original-commit: 30f5433366
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2024-01-04 19:10:09 +00:00
Tom Aarab (toaa) 67adf2fc3b [IMP] accounting: batch payments
Updated screenshots from 16.3 onwards. Forward to master.

taskid-3615592

closes odoo/documentation#7242

X-original-commit: 22012bbf3e
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2024-01-04 19:10:08 +00:00
Tom Aarab (toaa) 6f3ca9f4a3 [IMP] accounting: bank sync
Changed a note that was confusing to end users. Forward to 16.3

16.3 & 16.4 --> Fetch Account/Reconnect

17.0 --> Reconnect

taskid-3619168

closes odoo/documentation#7234

X-original-commit: f0ee3420b9
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2024-01-04 17:58:34 +00:00
“Chiara d1836f349f [IMP] accounting: withholding tax
taskid-3615963

closes odoo/documentation#7236

X-original-commit: cc03963248
Signed-off-by: Chiara Prattico (chpr) <chpr@odoo.com>
2024-01-04 14:59:39 +00:00
YStorm5 e765370016 [FW][FIX] developer/tutorials/getting_started: swap headers
I think these two header got mix up.

closes odoo/documentation#7226

Forward-port-of: odoo/documentation#7199
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2024-01-03 17:43:36 +00:00
ezoer 15beccfd50 [FW][FIX] developer/user_interface: fix typo in 'attribute'
closes odoo/documentation#7225

Forward-port-of: odoo/documentation#7190
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2024-01-03 17:43:34 +00:00
112 changed files with 1499 additions and 935 deletions
+23 -26
View File
@@ -39,10 +39,11 @@ An upgrade does not cover:
- Migrating from another ERP to Odoo
.. warning::
If your database contains a **custom module**, you must first upgrade its source code to be
compatible with the new version of Odoo **before upgrading**.
.. TODOUPG : once the page for developers is published, uncomment and link
.. :doc:`first upgrade its source code </developer/reference/upgrade>`
If your database contains custom modules, it cannot be upgraded until a version of your custom
modules is available for the target version of Odoo. For customers maintaining their own custom
modules, we recommend to parallelize the process by :ref:`requesting an upgraded database
<upgrade/request-test-database>` while also :doc:`upgrading the source code of your custom
modules </developer/howtos/upgrade_custom_db>`.
Upgrading in a nutshell
@@ -51,15 +52,15 @@ Upgrading in a nutshell
#. Request an upgraded test database (see :ref:`obtaining an upgraded test database
<upgrade/request-test-database>`).
#. If applicable, upgrade the source code of your custom module to be compatible with the new
version of Odoo (see :doc:`/developer/howtos/upgrade_custom_db`).
#. Thoroughly test the upgraded database (see :ref:`testing the new version of the database
<upgrade/test_your_db>`).
#. Report any issue encountered during the testing to Odoo via the `support page
<https://odoo.com/help?stage=migration>`__.
#. (If applicable) : upgrade the source code of your custom module to be compatible with the new
version of Odoo.
#. Once all issues are resolved and you are confident that the upgraded database can be used as
your main database without any issues, plan the upgrade of your production database.
@@ -69,9 +70,6 @@ Upgrading in a nutshell
#. Report any issue encountered during the upgrade to Odoo via the `support page
<https://odoo.com/help?stage=post_upgrade>`__.
.. TODOUPG: Once the page for developers is published, put this at 4)
.. (see :ref:`upgrading customizations <upgrade/upgrading_customizations>`).
.. _upgrade/request-test-database:
Obtaining an upgraded test database
@@ -136,18 +134,13 @@ project <https://odoo.sh/project>`_.
file of the upgrade process can be found in your newly upgraded staging build by going to
:file:`~/logs/upgrade.log`.
.. note::
In databases where custom modules are installed, their source code
must be up-to-date with the target version of Odoo before the upgrade
can be performed. If there are none, the "update on commit" mode is
skipped, the upgraded database is built as soon as it is transferred from the upgrade
platform, and the upgrade mode is exited.
.. important::
In databases where custom modules are installed, their source code must be up-to-date with
the target version of Odoo before the upgrade can be performed. If there are none, the
"update on commit" mode is skipped, the upgraded database is built as soon as it is
transferred from the upgrade platform, and the upgrade mode is exited.
.. TODOUPG : once the page for developers is published, uncomment
.. Check out the :doc:`upgrade for developers'
.. documentation </developer/reference/upgrade>` for more information. In
.. addition, if a module is not needed after an upgrade, :ref:`you can
.. remove customizations <upgrade/remove_customizations>`.
Check out the :doc:`/developer/howtos/upgrade_custom_db` page for more information.
.. group-tab:: On-premise
@@ -167,6 +160,11 @@ project <https://odoo.sh/project>`_.
An upgraded test database can also be requested via the `Upgrade page
<https://upgrade.odoo.com/>`_.
.. important::
In databases where custom modules are installed, their source code must be up-to-date with
the target version of Odoo before the upgrade can be performed. Check out the
:doc:`/developer/howtos/upgrade_custom_db` page for more information.
.. note::
- For security reasons, only the person who submitted the upgrade request can download it.
- For storage reasons, the database's copy is submitted without a filestore to the upgrade
@@ -291,8 +289,8 @@ the upgrade at a time when the use of the database is minimal.
As the standard upgrade scripts and your database are constantly evolving, it is also recommended
to frequently request another upgraded test database to ensure that the upgrade process is
still successful, especially if it takes a long time to finish. Fully rehearsing the upgrade
process the day before upgrading the production database is also recommended.
still successful, especially if it takes a long time to finish. **Fully rehearsing the upgrade
process the day before upgrading the production database is also recommended.**
.. important::
- Going into production without first testing may lead to:
@@ -337,9 +335,8 @@ exceptions.
The update of your custom modules must be successful to complete the entire upgrade process.
Make sure the status of your staging upgrade is :guilabel:`successful` before trying it in
production.
.. TODOUPG : once the page for developers is published, uncomment
.. More information on how to upgrade your custom modules can be found in the :ref:`upgrading customizations documentation <upgrade/upgrading_customizations>`.
production. More information on how to upgrade your custom modules can be found on
:doc:`/developer/howtos/upgrade_custom_db`.
.. group-tab:: On-premise
@@ -221,6 +221,8 @@ and loss balance is automatically reported on the balance sheet report.
.. seealso::
:doc:`Accounting Cheat Sheet <accounting/get_started/cheat_sheet>`
.. _fiduciaries:
Fiduciaries
===========
@@ -107,9 +107,9 @@ If your connection with the proxy is disconnected, you can reconnect with the pr
:guilabel:`Fetch Account` button.
.. note::
This disconnection can be caused by the Odoo support. In this case, please contact the `support
<https://www.odoo.com/help>`_ directly with your client id or the reference of the error listed
in the chatter.
If you are unable to reconnect using the :guilabel:`Reconnect` button, please contact the
`support <https://www.odoo.com/help>`_ directly with your client id or the reference of the error
listed in the chatter.
.. _MigrationOnlineSync:
@@ -25,7 +25,9 @@ transportation, insurance, customs clearance, and other relevant aspects of the
- **DDP**: Delivered duty paid
.. seealso::
:doc:`../reporting/intrastat`
- :doc:`../reporting/intrastat`
- :doc:`../customer_invoices`
- :doc:`../vendor_bills`
.. _incoterms/invoices:
@@ -35,6 +37,16 @@ Define an Incoterm
To define an Incoterm manually, create an invoice or bill, click the :guilabel:`Other Info` tab, and
select the :guilabel:`Incoterm`.
Incoterm location
-----------------
A location relevant to the chosen Incoterm can be added to the invoice or bill under
:guilabel:`Other Info` in the :guilabel:`Incoterm Location` field.
.. example::
If the chosen Incoterm code is `CIF` (Cost, Insurance, Freight), the associated location might be
the destination port where the goods will be delivered.
.. _incoterms/default:
Default Incoterm configuration
@@ -4,15 +4,15 @@
Payments
========
In Odoo, payments can either be linked automatically to an invoice or bill or be stand-alone records
for use at a later date.
In Odoo, payments can either be automatically linked to an invoice or bill or be stand-alone records
for use at a later date:
If a payment is **linked to an invoice or bill**, it reduces the amount due of the invoice. You can
have multiple payments related to the same invoice.
- If a payment is **linked to an invoice or bill**, it reduces/settles the amount due of the
invoice. You can have multiple payments related to the same invoice.
If a payment is **not linked to an invoice or bill**, the customer has an outstanding credit with
your company, or your company has an outstanding debit with a vendor. You can use those outstanding
amounts to reduce unpaid invoices/bills.
- If a payment is **not linked to an invoice or bill**, the customer has an outstanding credit with
your company, or your company has an outstanding debit with a vendor. You can use those
outstanding amounts to reduce/settle unpaid invoices/bills.
.. seealso::
- :doc:`Internal transfers <payments/internal_transfers>`
@@ -23,59 +23,54 @@ amounts to reduce unpaid invoices/bills.
Registering payment from an invoice or bill
===========================================
When clicking on :guilabel:`Register payment` in a customer invoice or vendor bill, it generates a
new journal entry and changes the amount due according to the amount of the payment. The counterpart
is reflected in an outstanding receipts or payments account. At this point, the customer invoice or
vendor bill is marked as :guilabel:`In payment`. Then, when the outstanding account is reconciled
with a bank statement line, the invoice or vendor bill changes to the :guilabel:`Paid` status.
When clicking :guilabel:`Register payment` in a customer invoice or vendor bill, it generates a new
journal entry and changes the amount due according to the payment amount. The counterpart is
reflected in an :ref:`outstanding <bank/outstanding-accounts>` **receipts** or **payments** account.
At this point, the customer invoice or vendor bill is marked as :guilabel:`In payment`. Then, when
the outstanding account is reconciled with a bank statement line, the invoice or vendor bill changes
to the :guilabel:`Paid` status.
The information icon near the payment line displays more information about the payment. You can
access additional information, such as the related journal, by clicking on :guilabel:`View`.
access additional information, such as the related journal, by clicking :guilabel:`View`.
.. image:: payments/information-icon.png
:alt: See detailed information of a payment
:alt: See detailed information of a payment.
.. note::
- The customer invoice or vendor bill should be in the status :guilabel:`Posted` to register the
- The customer invoice or vendor bill must be in the :guilabel:`Posted` status to register the
payment.
- When clicking on :guilabel:`Register payment`, you can select the amount to pay and make a
partial or full payment.
- If your main bank account is set as :ref:`outstanding account
<bank/outstanding-accounts>`, and the payment is made in Odoo (not related to a
bank statement), invoices and bills are directly registered in the status :guilabel:`Paid`.
- If you unreconciled a payment, it still appears in your books but is no longer linked to the
- If you unreconcile a payment, it still appears in your books but is no longer linked to the
invoice.
- If you (un)reconcile a payment in a different currency, a journal entry is automatically
created to post the currency exchange gains/losses (reversal) amount.
- If you (un)reconcile a payment and an invoice having cash basis taxes, a journal entry is
automatically created to post the cash basis tax (reversal) amount.
.. seealso::
- :doc:`bank/reconciliation`
.. tip::
- If your main bank account is set as an :ref:`outstanding account
<bank/outstanding-accounts>`, and the payment is registered in Odoo (not through a related
bank statement), invoices and bills are directly registered as :guilabel:`Paid`.
Registering payments not tied to an invoice or bill
===================================================
When a new payment is registered via the menu :menuselection:`Customers / Vendors --> Payments`, it
is not directly linked to an invoice or bill. Instead, the account receivable or the account payable
are matched with the outstanding account until they are manually matched with their related invoice
or bill.
When a new payment is registered via :menuselection:`Customers / Vendors --> Payments` menu, it is
not directly linked to an invoice or bill. Instead, the account receivable or the account payable is
matched with the **outstanding account** until it is manually matched with its related invoice or
bill.
Matching invoices and bills with payments
-----------------------------------------
A blue banner appears when you validate a new invoice or bill and there is an outstanding payment
for this specific customer or vendor. It can easily be matched from the invoice or the bill by
clicking on :guilabel:`ADD` under :guilabel:`Outstanding Credits` or :guilabel:`Outstanding Debits`.
A blue banner appears when you validate a new invoice/bill and an **outstanding payment** exists for
this specific customer or vendor. It can easily be matched from the invoice or bill by clicking
:guilabel:`ADD` under :guilabel:`Outstanding Credits` or :guilabel:`Outstanding Debits`.
.. image:: payments/add-option.png
:alt: Shows the ADD option to reconcile an invoice or a bill with a payment
:alt: Shows the ADD option to reconcile an invoice or a bill with a payment.
The invoice or bill is now marked as :guilabel:`In payment` until it is reconciled with the bank
statement.
.. seealso::
- :doc:`bank/reconciliation`
The invoice or bill is now marked as :guilabel:`In payment` until it is reconciled with its
corresponding bank statement.
.. _payments/batch-payments:
@@ -83,11 +78,11 @@ Batch payment
-------------
Batch payments allow you to group different payments to ease :doc:`reconciliation
<bank/reconciliation>`. They are also useful when you deposit checks to the bank or
for SEPA Payments. To do so, go to :menuselection:`Accounting --> Customers --> Batch Payments` or
:menuselection:`Accounting --> Vendors --> Batch Payments`. In the list view of payments, you can
select several payments and group them in a batch by clicking on :menuselection:`Action --> Create
Batch Payment`.
<bank/reconciliation>`. They are also useful when you deposit :doc:`checks <payments/checks>` to the
bank or for :doc:`SEPA payments <payments/pay_sepa>`. To do so, go to :menuselection:`Accounting -->
Customers --> Batch Payments` or :menuselection:`Accounting --> Vendors --> Batch Payments`. In the
list view of payments, you can select and group several payments in a batch by clicking
:menuselection:`Action --> Create Batch Payment`.
.. seealso::
- :doc:`payments/batch`
@@ -99,36 +94,50 @@ Payments matching
-----------------
The :guilabel:`Payments matching` tool opens all unreconciled customer invoices or vendor bills and
gives you the opportunity to process them all one by one, doing the matching of all their payments
and invoices at once. You can reach this tool from the :menuselection:`Accounting Dashboard -->
Customer Invoices / Vendor Bills`, and click on :guilabel:`` and select :guilabel:`Payments
Matching`, or by going to :menuselection:`Accounting --> Reconciliation`.
allows you to process them individually, matching all payments and invoices in one place. You can
reach this tool from the :menuselection:`Accounting Dashboard --> Customer Invoices / Vendor Bills`,
click the drop-down menu button (:guilabel:`⋮`), and select :guilabel:`Payments Matching`, or go to
:menuselection:`Accounting --> Accounting --> Reconciliation`.
.. image:: payments/payments-journal.png
:alt: Payments matching menu in the drop-down menu.
.. note::
During the :doc:`reconciliation <bank/reconciliation>`, if the sum of the debits
and credits does not match, there is a remaining balance. This either needs to be reconciled at a
later date or needs to be written off directly.
During the :doc:`reconciliation <bank/reconciliation>`, if the sum of the debits and credits does
not match, there is a remaining balance. This either needs to be reconciled at a later date or
needs to be written off directly.
Batch payments matching
-----------------------
To reconcile several outstanding payments or invoices at once, for a specific customer or vendor,
the batch reconciliation feature can be used. Go to :menuselection:`Accounting --> Reporting -->
Aged Receivable / Aged Payable`. You now see all transactions that have not been reconciled yet, and
when you select a customer or vendor, the :guilabel:`Reconcile` option is displayed.
You can use the **batch reconciliation feature** to reconcile several outstanding payments or
invoices simultaneously for a specific customer or vendor. Go to your **Accounting Dashboard** and
open your **bank journal**. In the **bank reconciliation** view, select a **transaction**, and click
the :guilabel:`Batch Payments` tab. From here, you can reconcile your
:doc:`batch payments <payments/batch>` with your outstanding payments or invoices.
.. image:: payments/reconcile-option.png
:alt: See the reconcile option
:alt: The batch payment reconcile option.
Registering a partial payment
=============================
To register a **partial payment**, click :guilabel:`Register payment` from the related invoice or
bill, and enter the amount received or paid. Upon entering the amount, a prompt appears to decide
whether to :guilabel:`Keep open` the invoice or bill, or :guilabel:`Mark as fully paid`. Select
:guilabel:`Keep open` and click :guilabel:`Create payment`. The invoice or bill is now marked as
:guilabel:`Partial`. Select :guilabel:`Mark as fully paid` if you wish to settle the invoice or bill
with a difference in the amount.
.. image:: payments/payment-difference.png
:alt: Partial payment of an invoice or bill.
Reconciling payments with bank statements
=========================================
Once a payment has been registered, the status of the invoice or bill is :guilabel:`In payment`. The
next step is to reconcile it with the related bank statement line to have the transaction finalized
and the invoice or bill marked as :guilabel:`Paid`.
.. seealso::
- :doc:`bank/reconciliation`
next step is :doc:`reconciling <bank/reconciliation>` it with the related bank statement line to
have the transaction finalized and the invoice or bill marked as :guilabel:`Paid`.
.. toctree::
:titlesonly:
@@ -141,6 +150,5 @@ and the invoice or bill marked as :guilabel:`Paid`.
payments/internal_transfers
payments/pay_sepa
payments/pay_checks
payments/multiple
payments/forecast
payments/trusted_accounts
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

@@ -25,7 +25,6 @@ window, select the :guilabel:`Journal` linked to your bank account and :guilabel
the :guilabel:`Payment Method`, and click :guilabel:`Create Payment`.
.. image:: batch/batch-payments.png
:align: center
:alt: Registering a customer payment as part of a batch deposit
Add payments to a batch deposit
@@ -36,14 +35,12 @@ Payments`, and click :guilabel:`New`. Next, select the :guilabel:`Bank` and choo
Deposit` as the :guilabel:`Payment Method`.
.. image:: batch/batch-customer-payment.png
:align: center
:alt: Filling out a new inbound batch payment form
Click :guilabel:`Add a line`. In the pop-up window, tick all payments to include in the batch
deposit, then click :guilabel:`Select`.
.. image:: batch/batch-lines-selection.png
:align: center
:alt: Selecting all payments to include in the batch deposit
Once done, click :guilabel:`Validate` to finalize the batch deposit.
@@ -60,7 +57,6 @@ Items` on the related bank account. Go to the :guilabel:`Batch Payments` tab to
batch and click :guilabel:`Validate` to finalize the process.
.. image:: batch/batch-reconciliation.png
:align: center
:alt: Reconciling the batch payment with all its transactions
.. note::
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 47 KiB

@@ -1,53 +0,0 @@
=========================
Pay several bills at once
=========================
Odoo offers the possibility of grouping multiple bills' payments into one, facilitating the
reconciliation process.
.. seealso::
- :doc:`/applications/inventory_and_mrp/purchase/manage_deals/manage`
- :doc:`/applications/finance/accounting/bank/reconciliation`
Group payments
==============
To register the payment of multiple bills at once, go to :menuselection:`Accounting app -->
Vendors --> Bills`. Then, select the bills you wish to register a payment for by **ticking** the
boxes next to the bills. When done, either click :guilabel:`Register Payment` or
:menuselection:`Action --> Register Payment`.
.. image:: multiple/register-payment-button.png
:align: center
:alt: Register payment button.
.. note::
Payments can only be registered for :guilabel:`posted` bills.
When registering the payments, a **pop-up window** appears. From here, you can either create
**separate payments** for each bill all at once by clicking :guilabel:`Create Payment`, *or* create
one payment by combining **all** bills' payments. To **combine** all payments, tick the
:guilabel:`Group Payments` box.
.. note::
The :guilabel:`Group Payments` option only appears when selecting two or more bills.
.. image:: multiple/multiple-group-payments.png
:align: center
:alt: Group payments options when registering a payment.
When selecting :guilabel:`Group Payments`, the :guilabel:`amount, currency, date and memo` are all
set automatically, but you can modify them according to your needs.
Partial group payments with cash discounts
------------------------------------------
In case of **partial group payments with cash discounts**, you can follow the steps found on the
:doc:`cash discount documentation page
</applications/finance/accounting/customer_invoices/cash_discounts>`. Make sure to
apply the :doc:`payment terms
</applications/finance/accounting/customer_invoices/payment_terms>` to the **bills**
*instead* of the invoices.
.. seealso::
:doc:`/applications/finance/accounting/customer_invoices/payment_terms`
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

@@ -13,14 +13,15 @@ Activate checks payment methods
-------------------------------
To activate the checks payment method, go to :menuselection:`Accounting --> Configuration -->
Checks`, there you can activate the payment method as well as set up the :guilabel:`Check Layout`.
Once activated the :guilabel:`Checks` setting, the feature is automatically setup for your
:guilabel:`Outgoing Payments`.
Settings`, and scroll down to the :guilabel:`Vendor Payments` section. There, you can activate the
payment method as well as set up the :guilabel:`Check Layout`.
.. note::
Some countries require specific modules to print checks; such modules may be installed by
default. For instance, the :guilabel:`U.S. Checks Layout` module is required to print U.S.
checks.
- Once the :guilabel:`Checks` setting is activated, the **Checks** payment method is
automatically set up in the :guilabel:`Outgoing Payments` tabs of **bank** journals.
- Some countries require specific modules to print checks; such modules may be installed by
default. For instance, the :guilabel:`U.S. Checks Layout` module is required to print U.S.
checks.
Compatible check stationery for printing checks
===============================================
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 32 KiB

+136 -121
View File
@@ -13,36 +13,34 @@ supports all kinds of uses and computations.
Default taxes
=============
**Default Taxes** define which taxes are automatically selected when creating a new product. They
**Default taxes** define which taxes are automatically selected when creating a new product. They
are also used to prefill the :guilabel:`Taxes` field when adding a new line on an invoice in
**Accounting Firms** mode.
.. image:: taxes/default-taxes-product.png
:alt: Odoo fills out the Tax field automatically according to the Default Taxes
To change your **Default Taxes**, go to :menuselection:`Accounting --> Configuration --> Settings
--> Taxes --> Default Taxes`, select the appropriate taxes for your default **Sales Tax** and
**Purchase Tax**, and click on *Save*.
:ref:`Accounting Firms <fiduciaries>` mode.
.. image:: taxes/default-configuration.png
:alt: Odoo fills out the Tax field automatically according to the Default Taxes
To change your **default taxes**, go to :menuselection:`Accounting --> Configuration --> Settings
--> Taxes --> Default Taxes`, select the appropriate taxes for your default sales tax and purchase
tax, and click on :guilabel:`Save`.
.. image:: taxes/default-taxes.png
:alt: Define which taxes to use by default on Odoo
.. note::
**Default Taxes** are automatically set up according to the country selected at the creation of
**Default taxes** are automatically set up according to the country selected at the creation of
your database, or when you set up a :ref:`fiscal localization package
<fiscal_localizations/packages>` for your company.
.. _taxes/list_activation:
Activate Sales Taxes from the List view
Activate sales taxes from the list view
=======================================
As part of your :ref:`fiscal localization package <fiscal_localizations/packages>`, most of your
country's sales taxes are already preconfigured on your database. However, only a few of them are
activated by default, so that you can activate only the ones relevant for your business.
To activate Sale Taxes, go to :menuselection:`Accounting --> Configuration --> Taxes` and use the
*Activate* toggle button to activate or deactivate a tax.
country's sales taxes are already preconfigured on your database. However, only a few taxes are
activated by default. To activate taxes relevant to your business, go to :menuselection:`Accounting
--> Configuration --> Taxes` and enable the toggle button under the :guilabel:`Active` column.
.. image:: taxes/list.png
:alt: Activate pre-configured taxes in Odoo Accounting
@@ -52,46 +50,32 @@ To activate Sale Taxes, go to :menuselection:`Accounting --> Configuration --> T
Configuration
=============
To edit or create a **Tax**, go to :menuselection:`Accounting --> Configuration --> Taxes` and open
a tax or click on *Create*.
To edit or create a **tax**, go to :menuselection:`Accounting --> Configuration --> Taxes` and open
a tax or click on :guilabel:`New`.
.. image:: taxes/edit.png
:alt: Edition of a tax in Odoo Accounting
.. _taxes/labels:
.. important::
Taxes have three different labels, each one having a specific use. Refer to the following table to
see where they are displayed.
+------------------+-------------------------+-------------------------+
| :ref:`Tax Name | :ref:`Label on Invoice | :ref:`Tax Group |
| <taxes/name>` | <taxes/label-invoices>` | <taxes/tax-group>` |
+==================+=========================+=========================+
| Back end | *Taxes* column on | Above the *Total* line |
| | exported invoices | on exported invoices |
+------------------+-------------------------+-------------------------+
Basic Options
Basic options
-------------
.. _taxes/name:
Tax Name
Tax name
~~~~~~~~
The **Tax Name** as you want to display it for backend users. This is the :ref:`label
<taxes/labels>` you see while editing Sales Orders, Invoices, Products, etc.
The **tax name** is displayed for backend users in the :guilabel:`Taxes` field in
:doc:`sales orders <../../sales/sales>`, :doc:`invoices <customer_invoices>`, product forms, etc.
.. _taxes/computation:
Tax Computation
Tax computation
~~~~~~~~~~~~~~~
- **Group of Taxes**
The tax is a combination of multiple sub-taxes. You can add as many taxes you want, in the order
you want them to be applied.
The tax is a combination of multiple sub-taxes. You can add as many taxes as you want, in the
order you want them to be applied.
.. important::
Make sure that the tax sequence is correct, as the order in which they are may impact the
@@ -101,75 +85,93 @@ Tax Computation
- **Fixed**
The tax has a fixed amount in the default currency. The amount remains the same, regardless of the
Sales Price.
sales price.
For example, a product has a Sales Price of $1000, and we apply a *$10 fixed* tax. We then have:
.. example::
A product has a sales price of $1000, and we apply a $10 *fixed* tax. We then have:
+-------------+-------------+----------+----------+
| Product's | Price | Tax | Total |
| Sales Price | without tax | | |
+=============+=============+==========+==========+
| 1,000 | 1,000 | 10 | 1,010.00 |
+-------------+-------------+----------+----------+
+-------------+-------------+----------+----------+
| Product | Price | Tax | Total |
| sales price | without tax | | |
+=============+=============+==========+==========+
| 1,000 | 1,000 | 10 | 1,010.00 |
+-------------+-------------+----------+----------+
- **Percentage of Price**
- **Percentage of price**
The *Sales Price* is the taxable basis: the tax's amount is computed by multiplying the Sales
Price by the tax's percentage.
The *sales price* is the taxable basis: the tax amount is computed by multiplying the sales price
by the tax percentage.
For example, a product has a Sales Price of $1000, and we apply a *10% of Price* tax. We then
have:
.. example::
A product has a sales price of $1000, and we apply a *10% of Price* tax. We then have:
+-------------+-------------+----------+----------+
| Product's | Price | Tax | Total |
| Sales Price | without tax | | |
+=============+=============+==========+==========+
| 1,000 | 1,000 | 100 | 1,100.00 |
+-------------+-------------+----------+----------+
+-------------+-------------+----------+----------+
| Product | Price | Tax | Total |
| sales price | without tax | | |
+=============+=============+==========+==========+
| 1,000 | 1,000 | 100 | 1,100.00 |
+-------------+-------------+----------+----------+
- **Percentage of Price Tax Included**
The *Total* is the taxable basis: the tax's amount is a percentage of the Total.
The **total** is the taxable basis: the tax amount is a percentage of the total.
For example, a product has a Sales Price of $1000, and we apply a *10% of Price Tax Included* tax.
We then have:
.. example::
A product has a Sales Price of $1000, and we apply a *10% of Price Tax Included* tax. We then
have:
+-------------+-------------+----------+----------+
| Product's | Price | Tax | Total |
| Sales Price | without tax | | |
+=============+=============+==========+==========+
| 1,000 | 1,000 | 111.11 | 1,111.11 |
+-------------+-------------+----------+----------+
+-------------+-------------+----------+----------+
| Product | Price | Tax | Total |
| sales price | without tax | | |
+=============+=============+==========+==========+
| 1,000 | 1,000 | 111.11 | 1,111.11 |
+-------------+-------------+----------+----------+
- **Python code**
A tax defined as **Python code** consists of two snippets of Python code that are executed in a
local environment containing data such as the unit price, product or partner.
:guilabel:`Python Code` defines the amount of the tax, and :guilabel:`Applicable Code` defines if
the tax is to be applied. The formula is found at the bottom of the :guilabel:`Definition` tab.
.. example::
:guilabel:`Python Code`: `result = price_unit * 0.10`
:guilabel:`Applicable Code`: `result = true`
.. _taxes/active:
Active
~~~~~~
Only **Active** taxes can be added to new documents.
Only **active** taxes can be added to new documents.
.. important::
It is not possible to delete taxes that have already been used. Instead, you can deactivate them
to prevent future use.
.. note::
This field can be modified from the *List View*. See :ref:`above <taxes/list_activation>` for
more information.
This field can be modified from the :ref:`list view <taxes/list_activation>`.
.. _taxes/scope:
Tax Scope
~~~~~~~~~
Tax type
~~~~~~~~
The **Tax Scope** determines the tax's application, which also restricts where it is displayed.
The :guilabel:`Tax Type` determines the tax application, which also restricts where it is displayed.
- **Sales**: Customer Invoices, Product's Customer Taxes, etc.
- **Purchase**: Vendor Bills, Product's Vendor Taxes, etc.
- **Sales**: Customer invoices, product customer taxes, etc.
- **Purchase**: Vendor bills, product vendor taxes, etc.
- **None**
.. tip::
You can use **None** for taxes that you want to include in a :ref:`Group of Taxes
<taxes/computation>` but that you don't want to list along with other Sales or Purchase taxes.
You can use :guilabel:`None` for taxes that you want to include in a :ref:`Group of Taxes
<taxes/computation>` but that you do not want to list along with other sales or purchase taxes.
Tax scope
~~~~~~~~~
The :guilabel:`Tax Scope` restricts the use of taxes to a type of product, either **goods** or
**services**.
.. _taxes/definition-tab:
@@ -177,105 +179,118 @@ Definition tab
--------------
Allocate with precision the amount of the taxable basis or percentages of the computed tax to
multiple accounts and Tax Grids.
multiple accounts and tax grids.
.. image:: taxes/definition.png
:alt: Allocate tax amounts to the right accounts and tax grids
- **Based On**:
- Base: the price on the invoice line
- % of tax: a percentage of the computed tax.
- :guilabel:`Base`: the price on the invoice line
- :guilabel:`% of tax`: a percentage of the computed tax.
- **Account**: if defined, an additional Journal Item is recorded.
- **Tax Grids**: used to generate :doc:`Tax Reports <reporting/tax_returns>`
- **Account**: if defined, an additional journal item is recorded.
- **Tax Grids**: used to generate :doc:`tax reports <reporting/tax_returns>`
automatically, according to your country's regulations.
.. _taxes/advanced-tab:
Advanced Options tab
Advanced options tab
--------------------
.. _taxes/label-invoices:
Label on Invoices
Label on invoices
~~~~~~~~~~~~~~~~~
The label of the tax, as displayed on each invoice line in the **Taxes** column. This is the
:ref:`label <taxes/labels>` visible to *front end* users, on exported invoices, on their Customer
Portals, etc.
The tax label is displayed on each invoice line in the :guilabel:`Taxes` column. This is visible to
*front-end* users on exported invoices, in customer portals, etc.
.. image:: taxes/invoice-label.png
:alt: The Label on Invoices is displayed on each invoice line
:alt: The label on invoices is displayed on each invoice line
.. _taxes/tax-group:
Tax Group
Tax group
~~~~~~~~~
Select to which **Tax Group** the tax belongs. The Tax Group name is the :ref:`label
<taxes/labels>` displayed above the *Total* line on exported invoices, and the Customer Portals.
Select which **tax group** the tax belongs to. The tax group name is the displayed above the
**total** line on exported invoices and in customer portals.
Tax groups include different iterations of the same tax. This can be useful when you must record
differently the same tax according to :doc:`Fiscal Positions <taxes/fiscal_positions>`.
the same tax differently according to :doc:`fiscal positions <taxes/fiscal_positions>`.
.. image:: taxes/invoice-tax-group.png
:alt: The Tax Group name is different from the Label on Invoices
.. example::
In the example above, we see a 0% tax for Intra-Community customers in Europe. It records amounts on
specific accounts and with specific tax grids. Still, to the customer, it is a 0% tax. That's why
the :ref:`Label on the Invoice <taxes/label-invoices>` indicates *0% EU*, and the Tax Group name,
above the *Total* line, indicates *0%*.
.. image:: taxes/invoice-tax-group.png
:alt: The Tax Group name is different from the Label on Invoices
In the example above, the :guilabel:`0% EU S` tax for intra-community customers in Europe records
the amount on specific accounts and tax grids. However, it remains a 0% tax to the customer. This
is why the label indicates :guilabel:`0% EU S`, and the tax group name above the
:guilabel:`Total` line indicates :guilabel:`VAT 0%`.
.. important::
Taxes have three different labels, each one having a specific use. Refer to the following table
to see where they are displayed.
+------------------+-------------------------+-------------------------+
| :ref:`Tax Name | :ref:`Label on Invoice | :ref:`Tax Group |
| <taxes/name>` | <taxes/label-invoices>` | <taxes/tax-group>` |
+==================+=========================+=========================+
| Backend | :guilabel:`Taxes` column| Above the |
| | on exported invoices | :guilabel:`Total` line |
| | | on exported invoices |
+------------------+-------------------------+-------------------------+
.. _taxes/analytic-cost:
Include in Analytic Cost
Include in analytic cost
~~~~~~~~~~~~~~~~~~~~~~~~
With this option activated, the tax's amount is assigned to the same **Analytic Account** as the
With this option activated, the tax amount is assigned to the same **analytic account** as the
invoice line.
.. _taxes/included-in-price:
Included in Price
Included in price
~~~~~~~~~~~~~~~~~
With this option activated, the total (including the tax) equals the **Sales Price**.
With this option activated, the total (including the tax) equals the **sales price**.
:dfn:`Total = Sales Price = Computed Tax-Excluded price + Tax`
`Total = Sales Price = Computed Tax-Excluded price + Tax`
For example, a product has a Sales Price of $1000, and we apply a *10% of Price* tax, which is
*included in the price*. We then have:
.. example::
A product has a sales price of $1000, and we apply a *10% of Price* tax, which is *included in
the price*. We then have:
+-------------+-------------+----------+----------+
| Product's | Price | Tax | Total |
| Sales Price | without tax | | |
+=============+=============+==========+==========+
| 1,000 | 900.10 | 90.9 | 1,000.00 |
+-------------+-------------+----------+----------+
+-------------+-------------+----------+----------+
| Product | Price | Tax | Total |
| sales price | without tax | | |
+=============+=============+==========+==========+
| 1,000 | 900.10 | 90.9 | 1,000.00 |
+-------------+-------------+----------+----------+
.. note::
If you need to define prices accurately, both tax-included and tax-excluded, please refer to the
following documentation: :doc:`taxes/B2B_B2C`.
.. note::
- **Invoices**: By default, the Line Subtotals displayed on your invoices are *Tax-Excluded*. To
display *Tax-Included* Line Subtotals, go to :menuselection:`Accounting --> Configuration -->
Settings --> Customer Invoices`, and select *Tax-Included* in the **Line Subtotals Tax
Display** field, then click on *Save*.
- **eCommerce**: By default, the prices displayed on your eCommerce website are *Tax-Excluded*.
To display *Tax-Included* prices, go to :menuselection:`Website --> Configuration --> Settings
--> Pricing`, and select *Tax-Included* in the **Product Prices** field, then click on *Save*.
By default, only the :guilabel:`Tax excluded` column is displayed on invoices. To display the
:guilabel:`Tax included` column, click the **dropdown toggle** button and check
:guilabel:`Tax incl.`.
.. image:: taxes/toggle-button.png
.. _taxes/base-subsequent:
Affect Base of Subsequent Taxes
Affect base of subsequent taxes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
With this option, the total tax-included becomes the taxable basis for the other taxes applied to
the same product.
You can configure a new :ref:`Group of Taxes <taxes/computation>` to include this tax, or add it
You can configure a new :ref:`group of taxes <taxes/computation>` to include this tax or add it
directly to a product line.
.. image:: taxes/subsequent-line.png
@@ -293,9 +308,9 @@ directly to a product line.
:alt: The taxes' sequence in Odoo determines which tax is applied first
.. seealso::
- :doc:`taxes/fiscal_positions`
- :doc:`taxes/B2B_B2C`
- :doc:`taxes/taxcloud`
- :doc:`reporting/tax_returns`
.. toctree::
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 24 KiB

@@ -2,69 +2,41 @@
Withholding taxes
=================
A withholding tax, also called a retention tax, is a government
requirement for the payer of a customer invoice to withhold or deduct
tax from the payment, and pay that tax to the government. In most
jurisdictions, withholding tax applies to employment income.
With normal taxes, the tax is added to the subtotal to give you the
total to pay. As opposed to normal taxes, withholding taxes are deducted
from the amount to pay, as the tax will be paid by the customer.
As, an example, in Colombia you may have the following invoice:
.. image:: retention/retention03.png
:align: center
In this example, the **company** who sent the invoice owes $20 of taxes to
the **government** and the **customer** owes $10 of taxes to the **government**.
A **withholding tax**, also known as retention tax, mandates the payer of a customer invoice to
deduct a tax from the payment and remit it to the government. Typically, a tax is included in the
subtotal to calculate the total amount paid, while withholding taxes are directly subtracted from
the payment.
Configuration
=============
In Odoo, a withholding tax is defined by creating a negative tax. For a
retention of 10%, you would configure the following tax (accessible
through :menuselection:`Configuration --> Taxes`):
In Odoo, a withholding tax is defined by creating a negative tax. To create one, go
to :menuselection:`Accounting --> Configuration --> Taxes` and, in the :guilabel:`Amount` field,
enter a negative amount.
.. image:: retention/retention04.png
:align: center
.. image:: retention/negative-amount.png
:alt: negative tax amount in field
In order to make it appear as a retention on the invoice, you should set
a specific tax group **Retention** on your tax, in the **Advanced Options**
tab.
Then, go to the :menuselection:`Advanced Options` tab and create a retention :guilabel:`Tax Group`.
.. image:: retention/retention02.png
:align: center
Once the tax is defined, you can use it in your products, sales order or
invoices.
.. image:: retention/tax-group.png
:alt: tax group for retention tax.
.. tip::
If the retention is a percentage of a regular tax, create a Tax with a
**Tax Computation** as a **Tax Group** and set the two taxes in this group
(normal tax and retention).
If the retention is a percentage of a regular tax, create a :guilabel:`Tax` with a
:guilabel:`Tax Computation` as a :guilabel:`Group of Taxes`. Then, set both the regular tax and
the retention one in the :guilabel:`Definition` tab.
Applying retention taxes on invoices
====================================
Retention taxes on invoices
===========================
Once your tax is created, you can use it on customer forms, sales order
or customer invoices. You can apply several taxes on a single customer
invoice line.
Once the retention tax has been created, it can be used on customer forms, sales orders, and
customer invoices.
Several taxes can be applied on a single customer invoice line.
.. image:: retention/retention01.png
:align: center
.. note::
When you see the customer invoice on the screen, you get only a
**Taxes line** summarizing all the taxes (normal taxes & retentions).
But when you print or send the invoice, Odoo does the correct
grouping amongst all the taxes.
The printed invoice will show the different amounts in each tax group.
.. image:: retention/retention03.png
:align: center
.. image:: retention/invoice-tax.png
:alt: invoice lines with taxes
.. seealso::
* :doc:`../taxes`
:doc:`../taxes`
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

@@ -3,9 +3,12 @@ TaxCloud integration
====================
.. warning::
The Odoo TaxCloud integration has begun its decommissioning, starting in Odoo 17. New
installations are prohibited in Odoo 17, and in Odoo 18, the TaxCloud module(s) won't exist at
all. Odoo recommends the use of the Avatax platform.
The out-of-the-box Odoo TaxCloud integration has begun its decommissioning. Starting in Odoo 17,
new installations are prohibited, and in Odoo 18 the TaxCloud module(s) won't exist at all. Odoo
recommends the use of the Avatax platform.
If you are hosted on-premise or on Odoo.SH and you wish to use Taxcloud, you can contact them
directly `here <https://taxcloud.com/blog/odoo-integration/>`_.
.. seealso::
:doc:`avatax`
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

@@ -93,11 +93,12 @@ available on Odoo.
- :doc:`Kenya - Accounting <fiscal_localizations/kenya>`
- Lithuania - Accounting
- :doc:`Luxembourg - Accounting <fiscal_localizations/luxembourg>`
- :doc:`Malaysia - Accounting <fiscal_localizations/malaysia>`
- Maroc - Accounting
- :doc:`Mexico - Accounting <fiscal_localizations/mexico>`
- Mongolia - Accounting
- :doc:`Netherlands - Accounting <fiscal_localizations/netherlands>`
- New Zealand - Accounting
- :doc:`New Zealand - Accounting <fiscal_localizations/new_zealand>`
- Norway - Accounting
- OHADA - Accounting
- Pakistan - Accounting
@@ -146,8 +147,10 @@ available on Odoo.
fiscal_localizations/italy
fiscal_localizations/kenya
fiscal_localizations/luxembourg
fiscal_localizations/malaysia
fiscal_localizations/mexico
fiscal_localizations/netherlands
fiscal_localizations/new_zealand
fiscal_localizations/romania
fiscal_localizations/peru
fiscal_localizations/philippines
@@ -159,3 +162,4 @@ available on Odoo.
fiscal_localizations/vietnam
fiscal_localizations/united_arab_emirates
fiscal_localizations/united_kingdom
fiscal_localizations/employment_hero
@@ -35,9 +35,6 @@ Configuration
- `l10n_account_customer_statements`
- Allows the management and sending of monthly customer statements from the partner ledger and
the contact form. Also used in New Zealand.
* - :guilabel:`Employment Hero Australian Payroll`
- `l10n_au_keypay`
- Synchronises all pay runs from Employment Hero with Odoos journal entries.
.. _australia/coa:
@@ -861,70 +858,12 @@ from the batch.
.. _australia/employment-hero:
Employment Hero Australian Payroll
==================================
Employment Hero payroll
=======================
If your business is already up and running with `Employment Hero <https://employmenthero.com/>`_,
you can use our connector as an alternative payroll solution.
The Employment Hero module synchronises payslip accounting entries (e.g., expenses, social charges,
liabilities, taxes) automatically from Employment Hero to Odoo. Payroll administration is still done
in Employment Hero. We only record the **journal entries** in Odoo.
If your business is already up and running with :doc:`Employment Hero <employment_hero>`, you can
use our connector as an alternative payroll solution.
.. important::
KeyPay was rebranded as **Employment Hero** in March 2023.
Configuration
-------------
#. :ref:`Activate <general/install>` the :guilabel:`Employment Hero Australian Payroll` module
(`l10n_au_keypay`).
#. Configure the **Employment Hero API** by going to :menuselection:`Accounting --> Configuration
--> Settings`. More fields become visible after clicking on :guilabel:`Enable Employment Hero
Integration`.
.. image:: australia/employment-hero-integration.png
:alt: Enabling Employment Hero Integration in Odoo Accounting displays new fields in the
settings
- You can find the API Key in the :guilabel:`My Account` section of the Employment Hero platform.
.. image:: australia/employment-hero-myaccount.png
:alt: "Account Details" section on the Employment Hero dashboard
- The **Payroll URL** is pre-filled with `https://keypay.yourpayroll.com.au`.
.. warning::
Do not change the **pre-filled Payroll URL**
- You can find the **Business ID** in the Employment Hero URL. (i.e., `189241`)
.. image:: australia/employment-hero-business-id.png
:alt: The Employment Hero "Business ID" number is in the URL
- You can choose any Odoo journal to post the payslip entries.
How does the API work?
----------------------
The API syncs the journal entries from Employment Hero to Odoo and leaves them in draft mode. The
reference includes the Employment Hero payslip entry ID in brackets for the user to easily retrieve
the same record in Employment Hero and Odoo.
.. image:: australia/employment-hero-journal-entry.png
:alt: Example of a Employment Hero Journal Entry in Odoo Accounting (Australia)
By default, the synchronisation happens once per week. You can fetch the records manually by going
to :menuselection:`Accounting --> Configuration --> Settings` and, in the :guilabel:`Enable
Employment Hero Integration` option, click on :guilabel:`Fetch Payruns Manually`.
Employment Hero payslip entries also work based on double-entry bookkeeping.
The accounts used by Employment Hero are defined in the section :guilabel:`Payroll settings`.
.. image:: australia/employment-hero-chart-of-accounts.png
:alt: Chart of Accounts menu in Employment Hero
For the API to work, you need to create the same accounts as the default accounts of your Employment
Hero business (**same name and same code**) in Odoo. You also need to choose the correct account
types in Odoo to generate accurate financial reports.
To :ref:`configure the Employment Hero API <employment_hero/configuration>` for **Australia**,
use the following value as :guilabel:`Payroll URL`: `https://api.yourpayroll.com.au/`.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

@@ -37,7 +37,7 @@ localization.
* - :guilabel:`Chile - Accounting Reports`
- `l10n_cl_reports`
- Adds the *Propuesta F29* and *Balance Tributario (8 columnas)* reports.
* - :guilabel:`Chile - E-invoiving`
* - :guilabel:`Chile - E-invoicing`
- `l10n_cl_edi`
- Includes all technical and functional requirements to generate and receive electronic
invoices online based on the :abbr:`SII (Servicio de Impuestos Internos)` regulations.
@@ -45,7 +45,7 @@ localization.
- `l10n_cl_boletas`
- Includes all technical and functional requirements to generate and receive electronic
invoices digitally based on the :abbr:`SII (Servicio de Impuestos Internos)` regulations.
* - :guilabel:`Electronic Esports of Goods for Chile`
* - :guilabel:`Electronic Exports of Goods for Chile`
- `l10n_cl_edi_exports`
- Includes technical and functional requirements to generate electronic invoices for exporting
goods based on the :abbr:`SII (Servicio de Impuestos Internos)` and customs regulations.
@@ -53,10 +53,6 @@ localization.
- `l10n_cl_edi_stock`
- Includes all technical and functional requirements to generate delivery guides via web
service based on the :abbr:`SII (Servicio de Impuestos Internos)` regulations.
* - :guilabel:`Chile - E-Invoicing Delivery Guide`
- `l10n_cl_edi_stock`
- Includes all technical and functional requirements to generate delivery guides online based
on the :abbr:`SII (Servicio de Impuestos Internos)` regulations.
.. note::
- Odoo automatically installs the appropriate package for the company according to the country
@@ -0,0 +1,73 @@
=======================
Employment Hero Payroll
=======================
The `Employment Hero <https://employmenthero.com/>`_ module synchronises payslip accounting entries
(e.g., expenses, social charges, liabilities, taxes) automatically from Employment Hero to Odoo.
Payroll administration is still done in Employment Hero. We only record the **journal entries** in
Odoo.
.. important::
KeyPay was rebranded as **Employment Hero** in March 2023.
.. _employment_hero/configuration:
Configuration
-------------
#. :ref:`Activate <general/install>` the :guilabel:`Employment Hero Payroll` module
(`l10n_employment_hero`).
#. Configure the **Employment Hero API** by going to :menuselection:`Accounting --> Configuration
--> Settings`. More fields become visible after clicking on :guilabel:`Enable Employment Hero
Integration`.
.. image:: employment_hero/employment-hero-integration.png
:alt: Enabling Employment Hero Integration in Odoo Accounting displays new fields in the
settings
- You can find the API Key in the :guilabel:`My Account` section of the Employment Hero platform.
.. image:: employment_hero/employment-hero-myaccount.png
:alt: "Account Details" section on the Employment Hero dashboard
- The **Payroll URL** is left empty by default to avoid any confusion. Please fill it according
to the documentation specific to your localization.
.. note::
Employment hero is available for :ref:`Australia <australia/employment-hero>`,
:ref:`Malaysia <malaysia/employment-hero>`,
:ref:`New Zealand <new-zealand/employment-hero>`,
:ref:`Singapore <singapore/employment-hero>`,
and the :ref:`United Kingdom <united-kingdom/employment-hero>`.
- You can find the **Business ID** in the Employment Hero URL. (i.e., `189241`)
.. image:: employment_hero/employment-hero-business-id.png
:alt: The Employment Hero "Business ID" number is in the URL
- You can choose any Odoo journal to post the payslip entries.
How does the API work?
----------------------
The API syncs the journal entries from Employment Hero to Odoo and leaves them in draft mode. The
reference includes the Employment Hero payslip entry ID in brackets for the user to easily retrieve
the same record in Employment Hero and Odoo.
.. image:: employment_hero/employment-hero-journal-entry.png
:alt: Example of a Employment Hero Journal Entry in Odoo Accounting (Australia)
By default, the synchronisation happens once per week. You can fetch the records manually by going
to :menuselection:`Accounting --> Configuration --> Settings` and, in the :guilabel:`Enable
Employment Hero Integration` option, click on :guilabel:`Fetch Payruns Manually`.
Employment Hero payslip entries also work based on double-entry bookkeeping.
The accounts used by Employment Hero are defined in the section :guilabel:`Payroll settings`.
.. image:: employment_hero/employment-hero-chart-of-accounts.png
:alt: Chart of Accounts menu in Employment Hero
For the API to work, you need to create the same accounts as the default accounts of your Employment
Hero business (**same name and same code**) in Odoo. You also need to choose the correct account
types in Odoo to generate accurate financial reports.
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

@@ -0,0 +1,15 @@
========
Malaysia
========
.. _malaysia/employment-hero:
Employment Hero payroll
=======================
If your business is already up and running with :doc:`Employment Hero <employment_hero>`, you can
use our connector as an alternative payroll solution.
.. important::
To :ref:`configure the Employment Hero API <employment_hero/configuration>` for **Malaysia**, use
the following value as :guilabel:`Payroll URL`: `https://apimy.yourpayroll.io/`.
@@ -0,0 +1,15 @@
===========
New Zealand
===========
.. _new-zealand/employment-hero:
Employment Hero payroll
=======================
If your business is already up and running with :doc:`Employment Hero <employment_hero>`, you can
use our connector as an alternative payroll solution.
.. important::
To :ref:`configure the Employment Hero API <employment_hero/configuration>` for **New Zealand**,
use the following value as :guilabel:`Payroll URL`: `https://api.nzpayroll.co.nz/`.
@@ -80,7 +80,7 @@ withholding tax.
The same process above can also be done for a *single* vendor :doc:`payment
<../accounting/payments>` if they were linked to one or more :doc:`vendor bills
<../accounting/payments/multiple>` with applied withholding taxes.
<../accounting/payments>` with applied withholding taxes.
.. note::
- If there is no withholding tax applied, then the XLS file will not generate records for those
@@ -52,3 +52,16 @@ QR-code` option to *EMV Merchant-Presented QR-code*.
Ensure that the :guilabel:`Recipient Bank` is the one you configured, as Odoo uses this field to
generate the PayNow QR code.
.. _singapore/employment-hero:
Employment Hero payroll
=======================
If your business is already up and running with :doc:`Employment Hero <employment_hero>`, you can
use our connector as an alternative payroll solution.
.. important::
To :ref:`configure the Employment Hero API <employment_hero/configuration>` for **Singapore**,
use the following value as :guilabel:`Payroll URL`: `https://apisg.yourpayroll.io/`.
@@ -2,29 +2,34 @@
Spain
=====
Spanish Chart of Accounts
Spanish chart of accounts
=========================
In Odoo, there are several Spanish Chart of Accounts that are available by default:
Several Spanish charts of accounts are available by default in Odoo:
- PGCE PYMEs 2008
- PGCE Completo 2008
- PGCE Entitades
You can choose the one you want by going in :menuselection:`Accounting --> Configuration`
then choose the package you want in the **Fiscal Localization** section.
Be careful, you can only change the accounting package as long as you have not created any accounting entry.
To choose the one you want, go to :menuselection:`Accounting --> Configuration --> Settings`,
then select a package in the :guilabel:`Fiscal localization` section.
.. tip::
When you create a new Odoo Online database, the PGCE PYMEs 2008 is installed by default.
Spanish Accounting Reports
.. warning::
You can only change the accounting package as long as you have not created any accounting entry.
Spanish accounting reports
==========================
If the Spanish Accounting Localization is installed, you will have access to accounting reports specific to Spain:
If the Spanish accounting localization is installed, you have access to accounting reports specific
to Spain:
- Balance Sheet
- Tax Report (Modelo 111)
- Tax Report (Modelo 115)
- Tax Report (Modelo 303)
- Tax Report (Modelo 347)
- Tax Report (Modelo 349)
- Tax Report (Modelo 390)
@@ -118,3 +118,15 @@ each submission:
.. note::
During this process, the :guilabel:`Connect to HMRC` button no longer appears for other UK-based
companies.
.. _united-kingdom/employment-hero:
Employment Hero payroll
=======================
If your business is already up and running with :doc:`Employment Hero <employment_hero>`, you can
use our connector as an alternative payroll solution.
.. important::
To :ref:`configure the Employment Hero API <employment_hero/configuration>` for **United
Kingdom**, use the following value as :guilabel:`Payroll URL`: `https://api.yourpayroll.co.uk/`.
@@ -21,6 +21,9 @@ Configuration on Mercado Pago Dashboard
If you are trying Mercado Pago as a test, select :guilabel:`Credienciales de prueba` in the left
part of the application page, then copy the test :guilabel:`Access token`.
.. image:: mercado_pago/mp-credentials.png
:alt: Production and testing credentials in Mercado Pago.
.. _payment_providers/mercado_pago/configure_odoo:
Configuration on Odoo
@@ -29,8 +32,9 @@ Configuration on Odoo
#. :ref:`Navigate to the payment provider Mercado Pago <payment_providers/add_new>` and change its
state to :guilabel:`Enabled`.
#. In the :guilabel:`Credentials` tab, fill in the :guilabel:`Access Token` with the value you saved
at the step :ref:`payment_providers/mercado_pago/configure_dashboard`.
at the :ref:`payment_providers/mercado_pago/configure_dashboard` step.
#. Configure the rest of the options to your liking.
.. seealso::
:doc:`../payment_providers`
- :doc:`../payment_providers`
- `Mercado Pago Odoo webinar <https://www.youtube.com/watch?v=CX8vPHMb1ic>`_
Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

@@ -16,7 +16,7 @@ or food), and can be used to trace a product back to a group. This is especially
managing product recalls or expiration dates.
.. seealso::
:doc:`/applications/inventory_and_mrp/inventory/product_management/product_tracking/serial_numbers`
:doc:`serial_numbers`
Enable lots & serial numbers
============================
@@ -98,6 +98,8 @@ Lot numbers can be assigned for both **incoming** and **outgoing** goods. For in
numbers are assigned directly on the purchase order form. For outgoing goods, lot numbers are
assigned directly on the sales order form.
.. _inventory/product_management/receipt-lots:
Manage lots on receipts
-----------------------
@@ -281,4 +283,4 @@ of products with that assigned number.
:alt: Lots and serial numbers traceability report.
.. seealso::
:doc:`/applications/inventory_and_mrp/inventory/product_management/product_tracking/differences`
:doc:`differences`
@@ -82,6 +82,8 @@ Once the receipt is validated, the product leaves the :guilabel:`Supplier Locati
etc. Then, the status of the document will change to :guilabel:`Done`, thus completing the reception
process in one step.
.. _inventory/delivery/one-step:
Deliver goods directly (1 step)
===============================
@@ -14,6 +14,8 @@ Advanced operations
advanced_operations_warehouse/cross_dock
advanced_operations_warehouse/stock_warehouses
advanced_operations_warehouse/putaway
advanced_operations_warehouse/removal
advanced_operations_warehouse/usage
advanced_operations_warehouse/cluster_picking
advanced_operations_warehouse/removal
advanced_operations_warehouse/fifo
advanced_operations_warehouse/fefo
@@ -0,0 +1,126 @@
============
FEFO removal
============
The *First Expired, First Out* (FEFO) removal strategy targets products for removal based on their
assigned removal dates.
.. seealso::
:doc:`Other removal strategies <removal>`
.. _inventory/warehouses_storage/removal-date:
Removal date
============
Products **must** be removed from inventory before their *removal date*, which is set as a certain
number of days before the product's *expiration date*.
The user sets this number of days by navigating to the product form's :guilabel:`Inventory` tab.
Under the :guilabel:`Traceability` section, ensure the :guilabel:`Tracking` field is set to either
:guilabel:`By Lots` or :guilabel:`By Unique Serial Number`.
Next, select the :guilabel:`Expiration Date` option, which makes the :guilabel:`Removal Date` field
(and other date fields) appear.
.. important::
The :guilabel:`Lots and Serial Numbers` and :guilabel:`Expiration Dates` features **must** be
enabled in :menuselection:`Inventory app --> Configuration --> Settings` to track expiration
dates.
The expiration date of a product is determined by adding the date the product was received to the
number of days specified in the :guilabel:`Expiration Date` field of the product form.
The removal date takes this expiration date, and subtracts the number of days specified in the
:guilabel:`Removal Date` field of the product form.
.. seealso::
:doc:`Expiration dates <../../product_management/product_tracking/expiration_dates>`
.. example::
In the :guilabel:`Inventory` tab of the product, `Egg`, the following :guilabel:`Dates` are set
by the user:
- :guilabel:`Expiration Date`: `30` days after receipt
- :guilabel:`Removal Date`: `15` days before expiration date
.. image:: fefo/user-set-date.png
:align: center
:alt: Display expiration and removal dates set on the product form.
A shipment of Eggs arrive at the warehouse on January 1st. So, the expiration date of the Eggs is
**January 31st** (Jan 1st + 30). By extension, the removal date is **January 16th** (Jan 31 -
15).
.. _inventory/warehouses_storage/exp-date:
To view the expiration dates of items in stock, navigate to the product form, and click the
:guilabel:`On Hand` smart button.
Next, click the additional options icon, located on the far-right, and select the columns:
:guilabel:`Expiration Date` and :guilabel:`Removal Date`.
.. image:: fefo/removal-date.png
:align: center
:alt: Show expiration dates from the inventory adjustments model accessed from the *On Hand*
smart button from the product form.
Workflow
========
Using the :abbr:`FEFO (First Expired, First Out)` removal strategy ensures that products with the
nearest removal date are picked first.
To understand how this removal strategy works, consider the following example below about the
product, `Carton of eggs`, which is a box containing twelve eggs.
The product is tracked :guilabel:`By Lots`, and the product category's :guilabel:`Force Removal
Strategy` is set to :guilabel:`First Expired, First Out (FEFO)`.
.. seealso::
- :ref:`Set up force removal strategy <inventory/warehouses_storage/removal-config>`
- :ref:`Enable lots tracking <inventory/warehouses_storage/lots-setup>`
- `Odoo Tutorials: Perishable Products <https://www.odoo.com/slides/slide/5324/share>`_
.. list-table::
:header-rows: 1
:stub-columns: 1
* -
- LOT1
- LOT2
- LOT3
* - On-hand stock
- 5
- 2
- 1
* - Expiration date
- April 4
- April 10
- April 15
* - :ref:`Removal date <inventory/warehouses_storage/exp-date>`
- February 26
- March 4
- March 9
To see the removal strategy in action, go to the :menuselection:`Sales app` and create a new
quotation.
Clicking :guilabel:`Confirm` creates a delivery order for today, December 29th, and the lot numbers
with the soonest expiration dates are reserved, using the :abbr:`FEFO (First Expired, First Out)`
removal strategy.
To view the detailed pickings, click the :guilabel:`⦙≣ (bulleted list)` icon, located on the
far-right of the Carton of egg's product line, in the :guilabel:`Operations` tab of the delivery
order. Doing so opens the :guilabel:`Open: Stock move` pop-up window.
In the :guilabel:`Open: Stock move` pop-up window, the :guilabel:`Pick from` field displays where
the quantities to fulfill the :guilabel:`Demand` are picked from.
Since the order demanded six Cartons of eggs, using the :abbr:`FEFO (First Expired, First Out)`
removal strategy, all five Cartons from `LOT1`, with the removal date of February 26th, are picked.
The remaining Carton is selected from `LOT2`, which has a removal date of March 4th.
.. image:: fefo/eggs-picking.png
:align: center
:alt: The stock moves window that shows the lots to be removed using FEFO.
@@ -0,0 +1,97 @@
============
FIFO removal
============
The *First In, First Out* (FIFO) removal strategy selects products with the earliest arrival dates.
This method is useful for companies selling products that have short demand cycles, like clothes,
for example. By using :abbr:`FIFO (First In, First Out)`, companies can prevent prolonged stock
retention of specific styles.
.. seealso::
- :doc:`Other removal methods <removal>`
.. example::
Various quantities of the product, `T-shirt`, tracked by lot numbers, arrive on August 1st and
August 25th. For an order made on September 1st, the :abbr:`FIFO (First In, First Out)` removal
strategy prioritizes lots that have been in stock the longest. So, products received on August
1st are selected first for picking.
.. image:: fifo/fifo-example.png
:align: center
:alt: Illustration of FIFO selecting the oldest products in stock.
.. seealso::
:ref:`Lot/serial number setup details <inventory/warehouses_storage/lots-setup>`
.. _inventory/warehouses_storage/arrival_date:
Arrival date
============
To see the product lot or serial number that arrived in inventory first, navigate to
:menuselection:`Inventory app --> Products --> Lots/Serial Numbers`.
Then, select the :guilabel:`▶️ (right-pointing arrow)` icon on the left of a product line, in order
to reveal a list of the product's lots or serial numbers that are in stock. The :guilabel:`Created
On` field shows the lot/serial number creation date, which is, essentially, the arrival date.
.. example::
Serial number `00000000500` of the product, `Cabinet with Doors`, arrived on December 29th, as
displayed in the :guilabel:`Created On` field.
.. image:: fifo/created-on.png
:align: center
:alt: Display arrival date of a lot for an item.
Workflow
========
To understand how :abbr:`FIFO (First In, First Out)` rotates products out, consider the following
example, focusing on three lots of white shirts.
The shirts are from the *All/Clothes* category, where :abbr:`FIFO (First In, First Out)` is set as
the :guilabel:`Force Removal Strategy`.
The white shirts are tracked :guilabel:`By Lots` in the :guilabel:`Inventory` tab of the product
form.
.. seealso::
- :ref:`Set up force removal strategy <inventory/warehouses_storage/removal-config>`
- :ref:`Enable lots tracking <inventory/warehouses_storage/lots-setup>`
The following table represents the on-hand stock and lot number details of white shirts.
.. list-table::
:header-rows: 1
:stub-columns: 1
* -
- LOT1
- LOT2
- LOT3
* - On-hand stock
- 5
- 3
- 2
* - :ref:`Created on <inventory/warehouses_storage/arrival_date>`
- March 1
- April 1
- May 1
To see the removal strategy in action, create a :ref:`delivery order <inventory/delivery/one-step>`
for six white shirts by navigating to the :menuselection:`Sales app` and creating a new quotation.
After clicking :guilabel:`Confirm` on the sales order, a delivery order with the oldest lot numbers
for shirts are reserved, using the :abbr:`FIFO (First In, First Out)` removal strategy.
To view the detailed pickings, click the :guilabel:`⦙≣ (bulleted list)` icon, located on the
far-right of the white shirt's product line in the :guilabel:`Operations` tab of the delivery order.
Doing so opens the :guilabel:`Open: Stock move` pop-up window.
In the :guilabel:`Open: Stock move` pop-up window, the :guilabel:`Pick from` field displays where
the quantities to fulfill the :guilabel:`Demand` are picked from. Since the order demanded six
shirts, all five shirts from `LOT1`, and one shirt from `LOT2`, are selected.
.. image:: fifo/white-shirt-picking.png
:align: center
:alt: Two lots being reserved for a sales order with the FIFO strategy.
@@ -1,418 +1,171 @@
=====================================
Removal strategies (FIFO, LIFO, FEFO)
=====================================
==================
Removal strategies
==================
.. _inventory/routes/strategies/removal:
For companies with warehouses, *removal strategies* determine **which** products are taken from the
warehouse, and **when**. For example, for perishable products, prioritizing the picking of goods
with the nearest expiration date helps minimize food spoilage.
For companies with warehouses, **removal strategies** determine which products are taken from the
warehouse, and when. Removal strategies are typically defined for specific picking operations. This
helps companies to select the best products, optimize the distance workers need to travel when
picking items for orders, and account for quality control, such as moving products with expiration
dates.
The following columns in the table below list the removal strategies available in Odoo, and detail
how pickings are determined along with the picking order. Leverage these removal strategies to have
Odoo automatically select how products are selected for orders:
Usually, *Removal Strategies* are defined in picking operations to select the best products to
optimize the distance for the worker, for quality control purposes, or to first move the products
with the closest expiration date.
.. list-table::
:header-rows: 1
:stub-columns: 1
When a product needs to be moved, Odoo finds available products that can be assigned to the
transfer. The way Odoo assigns these products depends on the :guilabel:`Removal Strategy` defined in
either the :guilabel:`Product Category` or the :guilabel:`Location` dashboards.
* -
- :doc:`FIFO <fifo>`
- LIFO
- :doc:`FEFO <fefo>`
- Closest Location
- Least Packages
* - Based on
- :ref:`Incoming date <inventory/warehouses_storage/arrival_date>`
- :ref:`Incoming date <inventory/warehouses_storage/arrival_date>`
- :ref:`Removal date <inventory/warehouses_storage/removal-date>`
- Location sequence
- Package quantity
* - Selection order
- First in
- Last in
- :ref:`First to expire <inventory/warehouses_storage/exp-date>`
- Alphanumeric name of location
- Quantity closest to fulfilling demand
To change the :guilabel:`Removal Strategy`, go to :menuselection:`Inventory app --> Configuration
--> Locations` or :menuselection:`Product Categories`. Click on a :guilabel:`Location` or
:guilabel:`Product Category`, and then click :guilabel:`Edit`. Change the product category
:guilabel:`Force Removal Strategy` or the location :guilabel:`Removal Strategy` by clicking on the
drop-down menu and selecting the desired removal strategy. After selecting the new removal strategy,
click :guilabel:`Save`.
For comprehensive examples for how to use each removal strategy, refer to each individual
documentation page.
.. image:: removal/product-category-location.png
.. _inventory/warehouses_storage/removal-config:
Configuration
=============
Removal strategies are set on either the product category or storage location.
.. image:: removal/navigate-location-category.png
:align: center
:alt: Change the Force Removal Strategy for either the Product Categories or Locations.
What happens inside the warehouse?
==================================
Configure removal strategies on the location by going to :menuselection:`Inventory --> Configuration
--> Locations`, and selecting the desired location. On the location form, choose a removal strategy
from the :guilabel:`Removal Strategy` field's drop-down menu options.
Most warehouses share the same important areas: receiving docks and sorting areas, storage
locations, picking and packing areas, and shipping/loading docks. While all products entering or
leaving the warehouse might go through each of these locations at some point, removal strategies can
have an effect on which products are taken, from where, and when.
.. important::
To set a removal strategy on a location, the :guilabel:`Storage Locations` and
:guilabel:`Multi-Step Routes` settings **must** be enabled in :menuselection:`Inventory -->
Configuration --> Settings`.
In this example below, vendor trucks unload pallets of goods at the receiving docks. Then, operators
scan the products in the receiving area, with the reception date and expiration date. After that,
products are stored in their respective storage locations.
These features are **only** necessary when setting the removal strategy on a location.
.. note::
Not all products have expiration dates, but in this example, expiration dates apply.
Configure removal strategies on product categories by going to :menuselection:`Inventory -->
Configuration --> Product Categories` and selecting the intended product category. Next, choose a
removal strategy from the :guilabel:`Force Removal Strategy` drop-down menu options.
.. image:: removal/entering-stocks.png
.. important::
When there are different removal strategies applied on both the location and product category for
a product, the value set on the :guilabel:`Force Removal Strategy` field set on a
:guilabel:`Product Category` form is applied as top priority.
Required features
=================
While some removal strategies are available by default, some additional features **must** be enabled
in :menuselection:`Inventory --> Configuration --> Settings` for the removal strategy option to
appear in the drop-down menu of the :guilabel:`Force Removal Strategy` or :guilabel:`Removal
Strategy` field.
Refer to the table below for a summary of required features. Otherwise, refer to the dedicated
sections for the removal strategy for more details on requirements and usage.
.. list-table::
:header-rows: 1
:stub-columns: 1
* -
- FIFO
- LIFO
- FEFO
- Closest Location
- Least Packages
* - Required features
- Lots & Serial Numbers
- Lots & Serial Numbers
- Lots & Serial Numbers, Expiration Date
- Storage Locations, Multi-Step Routes
- Packages
.. _inventory/warehouses_storage/lots-setup:
Lots and serial numbers
-----------------------
Lots and serial numbers differentiate identical products and track information like arrival or
expiration dates. To enable this feature, navigate to :menuselection:`Inventory --> Configuration
--> Settings`. Under the :guilabel:`Traceability` heading, check the box beside :guilabel:`Lots &
Serial Numbers` to enable the feature.
.. image:: removal/enable-lots.png
:align: center
:alt: Products entering stock via the receiving area.
:alt: Enable lots and serial numbers.
In Odoo, receive products by navigating to the :menuselection:`Inventory` application, and in the
kanban view, click on either the :guilabel:`Receipts` heading or :guilabel:`# TO PROCESS` button.
On the :guilabel:`Receipts` dashboard, find and click on the individual receipt which will open the
warehouse intake form. Click :guilabel:`Edit`, and then enter the received quantity in the
:guilabel:`Done` column. To finish, :guilabel:`Validate` to receive the products and register them
in the Odoo database.
Next, ensure the intended product is tracked by lots or serial numbers by navigating to the product
form through :menuselection:`Inventory --> Products --> Products`, and selecting the desired
product. On the product form, switch to the :guilabel:`Inventory` tab, and under the
:guilabel:`Tracking` field, select either the :guilabel:`By Unique Serial Number` or :guilabel:`By
Lots` options.
.. tip::
Receiving products can also be done within the Odoo *Barcode* application. If using the
*Barcode* app, scan the product(s), update the quantity, and finally, click :guilabel:`Validate`.
After products are received in Odoo, the products can then be moved to their respective storage
locations.
After enabling the features, assign lot or serial numbers to products using an :doc:`inventory
adjustment <../inventory_management/count_products>` or during :ref:`product reception
<inventory/product_management/receipt-lots>`.
Continuing with the same example, below, imagine several sales orders are made for the products
received earlier, that use expiration dates. In this example, the products weren't received on the
same day, and they don't have the same expiration date. In this situation, logically, sending
products with the closest expiration date is preferred, instead of products received first or last.
Using the chosen removal strategy configured for those products (in this example, :ref:`FEFO
<routes/FEFO>`), Odoo generates a transfer for the products with the soonest expiration date to the
picking area, then the packing area, and finally, to the shipping docks for delivery to the
customer.
Locations and routes
--------------------
.. image:: removal/packing-products.png
**Storage locations** and **multi-step routes** are necessary features for setting **all** types of
removal strategies on a location. However, these features are specifically required for the closest
location removal strategy since it is only applied at the location level.
To activate these features, navigate to :menuselection:`Inventory --> Configuration --> Settings`.
Under the :guilabel:`Warehouse` heading, enable the :guilabel:`Storage Location` and
:guilabel:`Multi-Step Routes` features.
.. image:: removal/enable-location.png
:align: center
:alt: Products being packed at the packing area for delivery, taking the expiration dates into
account.
:alt: Enable the locations and route features.
.. note::
To pick for delivery, the product's lot/serial number can be found on the transfer form. To learn
more about picking and shipping, refer to either the :ref:`Two-step delivery
<inventory/receipts_delivery_two_steps>` or :ref:`Three-step delivery
<inventory/delivery_three_steps>` documentation.
.. _inventory/warehouses_storage/exp-setup:
How each removal strategy works
===============================
Expiration date
---------------
Removal strategies determine which products are taken from the warehouse when orders are confirmed.
Enable the **expiration date** feature to track expiration dates, best before dates, removal dates,
and alert dates on a lot or serial number by navigating to :menuselection:`Inventory -->
Configuration --> Settings`.
First In, First Out (FIFO)
--------------------------
Under the :guilabel:`Traceability` heading, ensure the :guilabel:`Lots & Serial Numbers` feature is
selected, and then select the checkbox for :guilabel:`Expiration Dates` to enable the feature.
When using a :guilabel:`First In, First Out (FIFO)` strategy, demand for a product triggers a
removal rule, which requests a transfer for the lot/serial number that entered the stock first (and
therefore, has been in stock for the longest time).
For example, imagine there are three lots of nails in the warehouse, and have the corresponding lot
numbers: `00001`, `00002`, `00003`. Each lot has five boxes of nails in it.
Lot `00001` entered the stock on May 23, lot `00002` on May 25, and lot `00003` on June 1. A
customer orders six boxes on June 11.
Using the :abbr:`FIFO (First In, First Out)` removal strategy, a transfer request will pick the five
boxes from lot `00001` first, and then from the boxes in lot `00002`, since lot `00001` entered the
stock first. The box from lot `00002` is taken next because it has the oldest receipt date after lot
`00001`.
.. image:: removal/fifo-nails-picking.png
.. image:: removal/enable-expiration.png
:align: center
:alt: The detailed operations for the transfer shows the nail lots to be removed.
:alt: Enable expiration dates feature for FEFO.
Last In, First Out (LIFO)
-------------------------
.. _inventory/warehouses_storage/pack-setup:
Similar to the :abbr:`FIFO (First In, First Out)` method, the :guilabel:`Last In, First Out (LIFO)`
removal strategy moves products based on the date they entered a warehouse's stock. Instead of
removing the oldest stock on-hand, however, it targets the **newest** stock on-hand for removal.
Packages
--------
Every time an order for products with the :abbr:`LIFO (Last In, First Out)` method is placed, a
transfer is created for the lot/serial number that has most recently entered the stock (the **last**
lot/serial number that entered the warehouse's inventory).
The *packages* feature is used to group products together and is required for the least packages
removal strategy.
.. warning::
In many countries, the :abbr:`LIFO (Last In, First Out)` removal strategy in banned, since it can
potentially result in old, expired, or obsolete products being delivered to customers.
Navigate to :menuselection:`Inventory --> Configuration --> Settings` and select the check box for
the :guilabel:`Packages` feature.
For example, imagine there are three lots of boxes of screws in the warehouse, and have the
corresponding lot numbers: `10001`, `10002`, and `10003`, each with 10 boxes of screws per lot.
Lot `10001` entered the stock on June 1, lot `10002` on June 3, and lot `10003` on June 6. A
customer orders seven boxes on June 8.
Using the :abbr:`LIFO (Last In, First Out)` removal strategy, a transfer is requested for seven
boxes of screws from lot `10003` because that lot is the last one to have entered the stock.
.. image:: removal/lifo-nails.png
.. image:: removal/enable-pack.png
:align: center
:alt: The detailed operations shows which lots are being selected for the picking.
:alt: Enable the packages feature.
First Expired, First Out (FEFO)
-------------------------------
While the :abbr:`FIFO (First In, First Out)` and :abbr:`LIFO (Last In, First Out)` methods target
products for removal based on date of entry into the warehouse, the :guilabel:`First Expired, First
Out (FEFO)` method targets products for removal based on their assigned expiration dates.
Using the :abbr:`FEFO (First Expired, First Out)` removal strategy, every sales order that includes
products with this removal strategy assigned ensures that transfers are requested for products with
the expiration date soonest to the order date.
As an example, imagine there are three lots of six-egg boxes. Those three lots have the following
lot numbers: `20001`, `20002`, and `20003`, each with five boxes in it.
Lot `20001` entered the stock on July 1 and expires on July 15, lot `20002` entered on July 2 and
expires on July 14, and lot `20003` entered on July 3 and expires on July 21. A customer orders six
boxes on July 5.
Using the :abbr:`FEFO (First Expired, First Out)` method, a transfer is requested for the five boxes
from lot `20002` and one from lot `20001`. All the boxes in lot `20002` are transferred because they
have the earliest expiration date. The transfer also requests one box from lot `20001` because it
has the next closest expiration date after lot `20002`.
.. image:: removal/egg-lots-removal.png
:align: center
:alt: The detailed operations for the transfer shows the lots to be removed.
Using removal strategies
========================
To differentiate some units of products from others, the units need to be tracked, either by
:guilabel:`Lot` or by :guilabel:`Serial Number`. To do so, go to :menuselection:`Inventory -->
Configuration --> Settings`. Then, activate the :guilabel:`Storage Locations`, :guilabel:`Multi-Step
Routes`, and :guilabel:`Lots & Serial Numbers` settings. Click :guilabel:`Save` to save changes.
.. image:: removal/traceability.png
:align: center
:alt: :alt: Traceability settings.
.. image:: removal/warehouse-settings.png
:align: center
:alt: :alt: Warehouse settings.
.. note::
To use the :abbr:`FEFO (First Expired, First Out)` removal strategy, the :guilabel:`Expiration
Dates` setting needs to be activated as well. To enable this, go to :menuselection:`Inventory app
--> Configuration --> Settings`, scroll down to the :guilabel:`Traceability` section, and click
the checkbox next to :guilabel:`Expiration Dates`. Remember to click :guilabel:`Save` to save all
changes.
Now, specific removal strategies can be defined on product categories. To do this, go to
:menuselection:`Inventory app --> Configuration --> Product Categories`, and choose a product
category to define the removal strategy on. In the :guilabel:`Force Removal Strategy` field, choose
a removal strategy.
The *First Expired, First Out* (FEFO) strategy is a bit different from the other two removal
strategies. For :abbr:`FEFO (First Expired, First Out)`, the expiration date is important, not the
date the product entered the stock.
For example, imagine there are three lots of six-egg boxes (in this specific case, don't forget to
use :doc:`units of measure
</applications/inventory_and_mrp/inventory/product_management/product_replenishment/uom>`). Those
three lots have the following numbers: :guilabel:`20001`, :guilabel:`20002`, and :guilabel:`20003`,
each with five boxes in it.
:guilabel:`20001` entered the stock on the 1st of July and expires on the 15th of July,
:guilabel:`20002` entered on the 2nd and expires on the 14th of July, and :guilabel:`20003` entered
on the 4th and expires on the 21st of July. A customer orders six boxes on the 5th of July. With
the :abbr:`FEFO (First Expired, First Out)` strategy selected, a transfer is requested for the five
boxes of :guilabel:`20002` and one from :guilabel:`20001`. The transfer for all the boxes in lot
:guilabel:`20002` is because they have the closest expiration date. The transfer also requests one
box from :guilabel:`20001` because has the next closest expiration date after lot
:guilabel:`20002`.
Basically, for every sales order of a product with the :abbr:`FEFO (First Expired, First Out)`
strategy, a transfer is requested for the product that has the nearest expiration date from the
order date.
Closest Location
----------------
The *Closest Location* strategy is completely different from the other removal strategies. It is
not related to the date of entry in the warehouse, but rather the location of the product. It is
commonly used for products that do not deteriorate with time.
The aim is to avoid making the warehouse worker take a long journey to the bottom of the stock when
the product is also located at a near location. This method is only available if the
:guilabel:`Storage Locations` setting is on. The closest location is actually the one that comes
first in the alphabetic order.
Use removal strategies
======================
To differentiate some units from others, the units need to be tracked, either by *lot* or by
*serial number*. To do so, go to :menuselection:`Inventory --> Configuration --> Settings`. Then,
activate the :guilabel:`Storage Location`, :guilabel:`Multi-Step Routes`, and :guilabel:`Lots &
Serial Numbers` settings.
.. image:: removal/enabled-features.png
:align: center
:alt: Removal strategy on a product category.
To view all products with lots/serial numbers assigned to them, navigate to
:menuselection:`Inventory app --> Products --> Lots/Serial Numbers`. This reveals a page with
drop-down menus of all products assigned lots or serial numbers, filtered by *product* by default.
To change the category these products are filtered by, click :guilabel:`Product` (in the search bar,
in the top right of the page) to remove the default filter, and select a new filter if desired.
.. image:: removal/lot-serial.png
:align: center
:alt: Click on Products, then Lots/Serial Numbers to display all the products with lots or serial
numbers.
To view the serial numbers being selected for a sales order, go to the :guilabel:`Sales app` and
select the sales order in question. In the sales order, click the :guilabel:`Delivery` smart button
in the top right. In the :guilabel:`Operations` tab, click the :guilabel:`⦙≣ (Detailed Operations)`
icon in the far right for the product in question. The :guilabel:`Detailed Operations` window
appears, and displays the lot or serial numbers selected for that specific product for the delivery
order.
FIFO (First In, First Out)
--------------------------
The :abbr:`FIFO (First In, First Out)` removal strategy implies that products which enter a
warehouse's stock first are removed first. Companies should use this method if they are selling
products with short demand cycles, such as clothes, to ensure they are not stuck with outdated
styles in stock.
In this example, there are three lots of white shirts. The shirts are from the *All/Clothes*
category, where *FIFO* is set as the removal strategy. In the :guilabel:`Inventory Valuation
Report`, the three different receipts are listed with the amounts.
.. image:: removal/inventory-valuation.png
:align: center
:alt: View of the lots of white shirts in the inventory valuation report.
Lot `000001` contains five shirts, lot `000002` contains three shirts, and lot `000003` contains two
shirts.
To see the removal strategy in action, go to the :menuselection:`Sales app` and click
:guilabel:`Create` to create a sales order. Next, select a :guilabel:`Customer` from the drop-down
menu. Then click :guilabel:`Add a product` in the :guilabel:`Order Lines` tab. Select a product (for
this example, the :guilabel:`White Shirt`) from the drop-down menu, or type in the name of the
product in the field. Enter a quantity (for this example, `6.00`) in the :guilabel:`Quantity` field,
then click :guilabel:`Save`, then click :guilabel:`Confirm`.
Once the sales order is confirmed, the delivery order will be created and linked to the picking, and
the oldest lot numbers will be reserved thanks to the :abbr:`FIFO (First In, First Out)` strategy.
All five shirts from lot `000001` and one shirt from lot `000002` will be selected to be sent to the
customer.
.. image:: removal/reserved-lots-fifo-strategy.png
:align: center
:alt: Two lots being reserved for a sales order with the FIFO strategy.
LIFO (Last In, First Out)
-------------------------
The :abbr:`LIFO (Last In, First Out)` removal strategy works in the **opposite** manner from the
:abbr:`FIFO (First In, First Out)` strategy. With this method, the products that are received
**last** are moved out first. This method is mostly used for products without a shelf life, and no
time-sensitive factors, such as expiration dates.
In this example, there are three lots of cinder blocks. The blocks are from the *All/Building
Materials* category, where *FIFO* is set as the removal strategy. In the :guilabel:`Inventory
Valuation Report`, the three different receipts are listed with the amounts.
.. image:: removal/inventory-valuation-bricks.png
:align: center
:alt: View of the lots of cinder blocks in the inventory valuation report.
Lot `000020` contains three cinder blocks, lot `000030` contains five cinder blocks, and lot
`0000400` contains four cinder blocks.
To see how the :abbr:`LIFO (Last In, First Out)` strategy works, first navigate to
:menuselection:`Inventory app --> Configuration --> Product Categories`, and select a product
category (for this example, the :guilabel:`All/Building Materials` category) to edit. This reveals a
product category form.
Once on the product category form, under the :guilabel:`Logistics` section, change the
:guilabel:`Force Removal Strategy` to :guilabel:`Last In First Out (LIFO)`.
.. image:: removal/last-in-first-out.png
:align: center
:alt: Last in first out (LIFO) strategy set up as forced removal strategy.
To see the removal strategy in action, go to the :menuselection:`Sales app` and click
:guilabel:`Create` to create a sales order. Next, select a :guilabel:`Customer` from the drop-down
menu. Then click :guilabel:`Add a product` in the :guilabel:`Order Lines` tab. Select a product (for
this example, the :guilabel:`Cinder Block`) from the drop-down menu, or type in the name of the
product in the field. Enter a quantity (for this example, `5.00`) in the :guilabel:`Quantity` field,
then click :guilabel:`Save`, then click :guilabel:`Confirm`.
Once the sales order is confirmed, the delivery order will be created and linked to the picking, and
the newest lot numbers will be reserved thanks to the :abbr:`LIFO (Last In, First Out)` strategy.
All four cinder blocks from lot `0000400` and one cinder block from lot `000030` will be selected to
be sent to the customer.
.. image:: removal/reserved-lots-lifo-strategy.png
:align: center
:alt: Two lots being reserved for sale with the LIFO strategy.
.. _routes/FEFO:
FEFO (First Expired, First Out)
-------------------------------
The :abbr:`FEFO (First Expired, First Out)` removal strategy differs from the :abbr:`FIFO (First In,
First Out)` and :abbr:`LIFO (Last In, First Out)` strategies, because it targets products for
removal based on **expiration dates** instead of their warehouse receipt dates. With this method,
the products that are going to expire first are moved out first. This method is used for perishable
products, such as medicine, food, and beauty products.
Lots are picked based on their **removal date** from earliest to latest. Removal dates indicate how
many days *before* the expiration date the product needs to be removed from stock. The removal date
is set on the product form. Lots without a removal date defined are picked after lots with removal
dates.
.. warning::
If products are not removed from stock when they should be, lots that are past the expiration
date may still be picked for delivery orders!
.. note::
For more information about expiration dates, reference the :doc:`Expiration dates
<../../product_management/product_tracking/expiration_dates>` document.
First, go to :menuselection:`Inventory app --> Configuration --> Settings` and ensure
:guilabel:`Expiration Dates` is enabled. Once the :guilabel:`Expiration Dates` setting is enabled,
it's possible to define different expiration dates for individual serialized products, as well as
for lot numbers containing many products.
In this example, there are three lots of hand cream. The creams are from the *All/Health & Beauty*
category, where *FEFO* is set as the removal strategy. In the :guilabel:`Inventory Valuation
Report`, the three different receipts are listed with the amounts.
Lot `0000001` contains twenty tubes of hand cream, expiring on Sept 30, lot `0000002` contains ten
tubes of hand cream, expiring on November 30, and lot `0000003` contains ten tubes of hand cream,
expiring on October 31.
.. image:: removal/hand-cream-lots.png
:align: center
:alt: View the hand cream lot numbers and expiration dates in the inventory report.
Expiration dates can be entered when validating the received products, or set on products by going
to :menuselection:`Inventory app --> Products --> Lots/Serial Numbers`. Click :guilabel:`Create`,
enter the serial number, and select the product from the drop-down menu. Next, select the expiration
date in the :guilabel:`Dates` tab. Finally, click :guilabel:`Save`.
.. image:: removal/removal-date.png
:align: center
:alt: View of the removal date for 0000001.
To see how the :abbr:`FEFO (First Expired, First Out)` strategy works, first navigate to
:menuselection:`Inventory app --> Configuration --> Product Categories`, and select a product
category (in this example, the :guilabel:`All/Health & Beauty` category) to edit. This reveals a
product category form.
Once on the product category form, under the :guilabel:`Logistics` section, change the
:guilabel:`Force Removal Strategy` to :abbr:`FEFO (First Expired, First Out)`.
.. image:: removal/fefo.png
:align: center
:alt: FEFO forced removal strategy set on the product category.
Next, go to the :menuselection:`Sales app` and click :guilabel:`Create` to create a sales order.
Next, select a :guilabel:`Customer` from the drop-down menu. Then click :guilabel:`Add a product` in
the :guilabel:`Order Lines` tab. Select a product (for this example, the :guilabel:`Hand Cream`)
from the drop-down menu, or type in the name of the product in the field. Enter a quantity (in this
example, `25.00`) in the :guilabel:`Quantity` field, then click :guilabel:`Save`, then click
:guilabel:`Confirm`.
Once the sales order is confirmed, the delivery order will be created and linked to the picking, and
the lot numbers expiring first will be reserved thanks to the :abbr:`FEFO (First Expired, First
Out)` strategy. All twenty tubes of hand cream from lot `0000001` and five from lot `0000003` will
be selected to be sent to the customer, detailed in the :guilabel:`Detailed Operations` tab in the
sales order.
.. image:: removal/pick-hand-cream.png
:align: center
:alt: Hand cream lot numbers selected for the sales order.
.. seealso::
- :ref:`Packages <inventory/management/packages>`
- :doc:`2-step delivery <../../shipping_receiving/daily_operations/receipts_delivery_two_steps>`
- :doc:`3-step delivery <../../shipping_receiving/daily_operations/delivery_three_steps>`
@@ -35,13 +35,15 @@ Starting from the :menuselection:`Inventory` app, select :menuselection:`Configu
- :guilabel:`Is a Return Location?`: check this box to allow products to be returned to this
location
- :guilabel:`Barcode`: the barcode number assigned to the location
- :guilabel:`Removal Strategy`: the :ref:`strategy <inventory/routes/strategies/removal>` for how
items should be taken from inventory
- :guilabel:`Removal Strategy`: the :doc:`strategy <../advanced_operations_warehouse/removal>` for
how items should be taken from inventory
.. image:: use_locations/new-location-form.png
:align: center
:alt: The form for creating a new location.
.. _inventory/location-hierarchy:
Create location hierarchies
===========================
+3 -2
View File
@@ -20,8 +20,9 @@ If you choose to :guilabel:`Edit` a to-do, you have the option to add :guilabel:
and widgets.
.. tip::
You can create a new to-do on the fly from anywhere in Odoo by clicking the clock button and then
:guilabel:`Add a To-Do`.
You can create a new to-do on the fly from anywhere in Odoo by opening the **command palette
tool** with the keyboard shortcut ´ctrl+k´ and clicking :guilabel:`Add a To-Do`, or by clicking
the clock button and then :guilabel:`Add a To-Do`.
.. image:: to_do/add-on-the-fly.png
:alt: Adding a to-do on the fly
@@ -1,66 +1,81 @@
=========================
Amazon Connector Features
Amazon Connector features
=========================
The **Amazon Connector** synchronizes the orders between Amazon and your Odoo database, which
reduces considerably the amount of time spent on your Amazon Seller Central dashboard, making your
daily routine a lot easier.
The *Amazon Connector* synchronizes orders between Amazon and Odoo, which considerably reduces the
amount of time spent manually entering Amazon orders (from the Amazon Seller account) into Odoo. It
also allows users to accurately keep track of Amazon sales in Odoo.
Supported Features
Supported features
==================
The connector is able to:
The Amazon Connector is able to:
- Synchronize (Amazon to Odoo) all confirmed orders (both FBA and FBM) and their order items which
- Synchronize (Amazon to Odoo) all confirmed orders (both FBA and FBM), and their order items, which
include:
- the products name, description and quantity
- the shipping costs for the product
- the gift wrapping charges
- product name, description, and quantity
- shipping costs for the product
- gift wrapping charges
- Create on Odoo any missing partner related to an order (contact types supported: contact and
delivery).
- Notify Amazon of a shipping confirmed on Odoo (FBM) in order to get paid.
- Create any missing partner related to an order in Odoo (contact types supported: contact and
delivery address).
- Notify Amazon of confirmed shipment in Odoo (FBM) to get paid.
- Synchronize (Odoo to Amazon) all available quantities of your products (FBM).
- Support multiple seller accounts.
- Support multiple marketplaces per seller account.
+----------------------+----------------------------+-------------------------------------+
| | Fulfilled By Amazon (FBA) | Fulfilled By Merchant (FBM) |
+======================+============================+=====================================+
| **Orders** | Synchronize shipped and | Synchronize unshipped and canceled |
| | canceled orders | orders |
+----------------------+----------------------------+-------------------------------------+
| **Shipping** | - Charges | - Charges |
| | | - Delivery created |
+----------------------+----------------------------+-------------------------------------+
| **Gift Wrapping** | Handled by Amazon | - Gift wrapping charges |
| | | - Gift message |
+----------------------+----------------------------+-------------------------------------+
| **Stock Management** | One stock move created | - Handled by the delivery |
| | per sales order item | - Products available quantity |
| | | updated from Odoo to Amazon |
+----------------------+----------------------------+-------------------------------------+
| **Confirmation** | Handled by Amazon | Notify Amazon when confirming |
| | | delivery |
+----------------------+----------------------------+-------------------------------------+
The following table lists capabilities provided by Odoo when using the Amazon Connector:
+---------------------------+----------------------------+-------------------------------------+
| | Fulfilled By Amazon (FBA) | Fulfilled By Merchant (FBM) |
+===========================+============================+=====================================+
| **Orders** | Synchronize shipped and | Synchronize unshipped and canceled |
| | canceled orders. | orders. |
+---------------------------+----------------------------+-------------------------------------+
| **Shipping** | Shipping cost is computed | Shipping cost is computed by Amazon |
| | by Amazon, and included in | and included in the synchronized |
| | the synchronized order. | orders. |
| +----------------------------+-------------------------------------+
| | Shipping done by Amazon. | A delivery order is automatically |
| | | created in Odoo for each new order. |
| | | Once it has been processed in Odoo, |
| | | the status is then synchronized in |
| | | Amazon. |
+---------------------------+----------------------------+-------------------------------------+
| **Gift Wrapping** | Handled by Amazon. | Cost is computed by Amazon, and |
| | | included in the synchronized order. |
| | | Gift message is added on a line of |
| | | the order and on the delivery order.|
| | | Then it is up to the user. |
+---------------------------+----------------------------+-------------------------------------+
| **Stock Management** | Managed by Amazon, and | Managed in Odoo Inventory app, and |
| | synchronized with a virtual| synchronized with Amazon. |
| | location to follow it in | |
| | Odoo. | |
+---------------------------+----------------------------+-------------------------------------+
| **Delivery Notifications**| Handled by Amazon. | Send by Amazon, based on delivery |
| | | status synchronized from Odoo. |
+---------------------------+----------------------------+-------------------------------------+
.. note::
The connector is designed to synchronize orders' data as detailed above. Other actions, such as
downloading monthly fees reports, handling disputes, or issuing refunds must be managed from
Amazon Seller Central, as usual.
The Amazon Connector is designed to synchronize the data of sales orders. Other actions, such as
downloading monthly fees reports, handling disputes, or issuing refunds, **must** be managed from
the *Amazon Seller Central*, as usual.
.. _amazon/supported-marketplaces:
Supported Marketplaces
Supported marketplaces
======================
The Amazon Connector supports all the current marketplaces.
If a marketplace is not listed in your Amazon marketplaces, you can :ref:`add a new marketplace
<amazon/add-new-marketplace>`.
If a marketplace is not listed in your Amazon marketplaces, it's possible to :ref:`add a new
marketplace <amazon/add-new-marketplace>`.
.. seealso::
- :doc:`setup`
@@ -1,57 +1,73 @@
============================
Manage Amazon orders in Odoo
============================
=======================
Amazon order management
=======================
Synchronization of orders
=========================
Order synchronization
=====================
Orders are automatically fetched from Amazon, and synchronized in Odoo, at regular intervals.
Orders are automatically fetched from Amazon and synchronized in Odoo at regular intervals.
The synchronization is based on the Amazon status: only orders whose status has changed since the
last synchronization are fetched from Amazon. For **FBA** (Fulfilled by Amazon), only **Shipped**
and **Canceled** orders are fetched. For **FBM** (Fulfilled by Merchant), the same is done for
**Unshipped** and **Canceled** orders. For each synchronized order, a sales order and a customer are
created in Odoo if they are not yet registered.
last synchronization are fetched from Amazon. This includes changes on either end (Amazon or Odoo).
When an order is canceled in Amazon and was already synchronized in Odoo, the corresponding sales
order is automatically canceled in Odoo.
For *FBA* (Fulfilled by Amazon), only *Shipped* and *Canceled* orders are fetched.
For *FBM* (Fulfilled by Merchant), the same is done for *Unshipped* and *Canceled* orders. For each
synchronized order, a sales order and customer are created in Odoo (if the customer is not already
registered in the database).
.. note::
To force the synchronization of an order whose status has not changed since the last
synchronization, activate the :ref:`developer mode <developer-mode>`, navigate to your Amazon
account and modify the date under :menuselection:`Orders Follow-up --> Last Order Sync`. Pick a
date anterior to the last status change of the order that you wish to synchronize and save.
When an order is canceled in Amazon, and was already synchronized in Odoo, the corresponding
sales order is automatically canceled in Odoo.
Force synchronization
=====================
In order to force the synchronization of an order, whose status has **not** changed since the
previous synchronization, start by activating the :ref:`developer mode <developer-mode>`. This
includes changes on either end (Amazon or Odoo).
Then, navigate to the Amazon account in Odoo (:menuselection:`Sales app --> Configuration -->
Settings --> Connectors --> Amazon Sync --> Amazon Accounts`), and modify the date under
:menuselection:`Orders Follow-up --> Last Order Sync`.
Be sure to pick a date that occurs prior to the last status change of the desired order to
synchronize and save. This will ensure synchronization occurs correctly.
.. tip::
To synchronize immediately the orders of your Amazon account switch to :ref:`developer mode
<developer-mode>`, head to your Amazon account and click on **SYNC ORDERS**. The same can be done
with pickings by clicking on **SYNC PICKINGS**.
To immediately synchronize the orders of an Amazon account, switch to :ref:`developer mode
<developer-mode>`, head to the Amazon account in Odoo, and click :guilabel:`Sync Orders`. The
same can be done with pickings by clicking :guilabel:`Sync Pickings`.
Manage deliveries in FBM
========================
When a **FBM** (Fulfilled by Merchant) order is synchronized in Odoo, a picking is created along
with the sales order and the customer. You can either ship all the ordered products to your customer
at once or ship products partially by using backorders.
Whenever an FBM (Fulfilled by Merchant) order is synchronized in Odoo, a picking is instantly
created in the *Inventory* app, along with a sales order and customer record. Then, decide to either
ship all the ordered products to the customer at once, or ship products partially using backorders.
When a picking related to the order is confirmed, a notification is sent to Amazon who will, in
turn, notify the customer that the order (or a part of it) is on its way.
When a picking related to the order is confirmed, a notification is then sent to Amazon, who, in
turn, notifies the customer that the order (or a part of it) is on its way.
.. important::
Amazon requires to provide a tracking reference with each delivery. You'll need to assign a
carrier. If the carrier doesn't automatically provide a tracking reference, you'll need to set
one manually. This concerns all marketplaces.
Amazon requires users to provide a tracking reference with each delivery. This is needed to
assign a carrier.
If the carrier doesn't automatically provide a tracking reference, one must be set manually. This
rule applies to all Amazon marketplaces.
.. tip::
- If your chosen carrier isn't one supported by Odoo, you can still create a carrier bearing its
name (e.g. create a carrier named `Colissimo`). This name is case insensitive, but be careful
about typos, as Amazon won't recognize them.
- Create a delivery carrier named `Self Delivery` to inform Amazon that you make your own
deliveries. You still have to enter a tracking reference.
- Keep in mind that the customer is notified by email about the delivery, and the carrier and
tracking reference are displayed in the email to the customer.
If the chosen carrier isn't supported by Odoo, a carrier with the same name can still be created
(e.g. create a carrier named `easyship`). The name used is **not** case sensitive, but be mindful
to avoid typos. If there are typos, Amazon will **not** recognize them. Next, create a delivery
carrier named `Self Delivery` to inform Amazon that the user will make the deliveries. Even with
this route, a tracking reference still **must** be entered. Remember, the customer is notified by
email about the delivery, and the carrier, along with the tracking reference, are displayed in
the email to the customer.
.. seealso::
- :doc:`/applications/inventory_and_mrp/inventory/shipping_receiving/setup_configuration/third_party_shipper`
:doc:`../../../inventory_and_mrp/inventory/shipping_receiving/setup_configuration/third_party_shipper`
.. _manage/manage_delivery_errors:
@@ -77,71 +93,103 @@ corrected in Odoo, synchronize the shipment again using the :guilabel:`Retry Ama
Follow deliveries in FBA
========================
When a **FBA** (Fulfilled by Amazon) order is synchronized in Odoo, a stock move is recorded for
each sales order item so that it is saved in your system. Inventory managers can find such moves
in :menuselection:`Inventory --> Reporting --> Product Moves`. They pick up products in a specific
inventory location called **Amazon**. This location represents your stock in Amazon's warehouses
and allows you to manage the stock of your products under the FBA program.
When an FBA (Fulfilled by Amazon) order is synchronized in Odoo, a stock move is recorded in the
*Inventory* app for each sales order item. That way, it's saved in the system.
Inventory managers can access these stock moves by navigating to :menuselection:`Inventory app -->
Reporting --> Moves History`.
For FBA orders, the stock move is automatically created in Odoo by the Amazon connector, thanks to
the shipping status of Amazon. When sending new products to Amazon, the user should manually create
a picking (delivery order) to transfer these products from their warehouse to the Amazon location.
.. tip::
To follow your Amazon (FBA) stock in Odoo, you can make an inventory adjustment after
replenishing it. You can also trigger an automated replenishment from reordering rules on the
Amazon location.
To follow *Amazon (FBA)* stock in Odoo, make an inventory adjustment after replenishing stock. An
automated replenishment from reordering rules can also be triggered on the Amazon location.
.. tip::
The Amazon location is configurable by Amazon account managed in Odoo. All accounts of the same
company use the same location by default. It is however possible to follow the stock by
marketplace. First, remove the marketplace for which you want to follow the stock separately from
the list of synchronized marketplaces. Then, create another registration for this account and
remove all marketplaces, except the one to isolate from the others. Finally, assign another stock
location to the second registration of your account.
The Amazon location is configurable by accessing the Amazon account managed in Odoo. To access
Amazon accounts in Odoo navigate to :menuselection:`Sales app --> Configuration --> Settings -->
Connectors --> Amazon Sync --> Amazon Accounts`.
Issue invoices and register payments
====================================
All accounts of the same company use the same Amazon location, by default. However, it is possible
to follow the stock filtered by marketplace.
To do that, first remove the marketplace, where the desired stock to follow separately can be found,
from the list of synchronized marketplaces, which can be found by navigating to
:menuselection:`Sales app --> Configuration --> Settings --> Connectors --> Amazon Sync --> Amazon
Accounts`.
Next, create another registration for this account, and remove all marketplaces--- **except** the
marketplace this is desired to be isolated from the others.
Lastly, assign another stock location to the second registration of the account.
Invoice and register payments
=============================
Issue invoices
--------------
Sending invoices to Amazon customers directly from Odoo is not feasible due to Amazon's policy of
not sharing customer email addresses. Instead, it is possible to manually upload the invoices
generated on Odoo to the Amazon backend.
Due to Amazon's policy of not sharing customer email addresses, it is **not** possible to send
invoices directly to Amazon customers from Odoo. However, it **is** possible to manually upload the
generated invoices from Odoo to the Amazon back-end.
In addition, for your B2B clients, it is currently required to manually retrieve VAT numbers from
the Amazon backend before creating the invoice in Odoo.
Additionally, for B2B clients, it is currently required to manually retrieve VAT numbers from the
Amazon back-end **before** creating an invoice in Odoo.
.. note::
For :doc:`TaxCloud <../../../finance/accounting/taxes/taxcloud>` users: invoices created from
Amazon sales orders are **not** synchronized with TaxCloud, since Amazon already includes them in
its own tax report to TaxCloud.
.. warning::
TaxCloud integration will be decommissioned in Odoo 17+.
Register payments
-----------------
As customers pay Amazon as an intermediary, creating a dedicated *Bank* journal (for example, named
`Amazon payments`) with a dedicated *Bank and Cash* intermediary account is recommended.
Since customers pay Amazon as an intermediary, creating a dedicated *Bank* journal (e.g. named
`Amazon Payments`), with a dedicated *Bank and Cash* intermediary account is recommended.
In addition, as Amazon makes a single monthly payment, selecting all the invoices linked to a single
payment is necessary when registering payments. Use the dedicated `Amazon payments`
:guilabel:`Journal` and select :guilabel:`Batch Deposit` as the :guilabel:`Payment Method`. Then,
select all the payments generated and click :menuselection:`Actions --> Create batch payment -->
Validate`.
Additionally, as Amazon makes a single monthly payment, selecting all the invoices linked to a
single payment is necessary when registering payments.
To do that, use the appropriate :guilabel:`Journal` dedicated to Amazon payments, and select
:guilabel:`Batch Deposit` as the :guilabel:`Payment Method`.
Then, select all the generated payments, and click :menuselection:`Actions --> Create batch payment
--> Validate`.
.. tip::
The same can be done with vendor bills from Amazon dedicated to commissions. When the balance is
received in the bank account at the end of the month and the banks statements are recorded,
credit the Amazon intermediary account by the amount received.
This same action can be performed with vendor bills from Amazon dedicated to commissions.
Follow your Amazon sales in sales reporting
===========================================
When the balance is received in the bank account at the end of the month, and the bank statements
are recorded, credit the Amazon intermediary account by the amount received.
As a sales team is set on your account under the tab **Order Follow-up**, this helps you give quick
glances at the figures in just a few clicks in Sales reporting. By default, your account's sales
team is shared between all of your company's accounts.
Follow Amazon sales in sales reporting
======================================
If you wish, you can change the sales team on your account for another to perform a separate
On the Amazon account profile in Odoo, a sales team is set under the :guilabel:`Order Follow-up`
tab.
This gives quick access to important metrics related to sales reporting. By default, the Amazon
account's sales team is shared between all of the company's accounts.
If desired, the sales team on the account can be changed for another, in order to perform a separate
reporting for the sales of this account.
.. tip::
It is also possible to perform reporting on a per-marketplace basis in a similar fashion. First,
remove the marketplace you wish to track separately from the list of synchronized marketplaces.
Then, create another registration for this account and remove all marketplaces, except the one to
isolate from the others. Finally, assign another sales team to one of the two registrations of
your account.
It is also possible to perform reporting on a per-marketplace basis.
First, remove the desired marketplace from the list of synchronized marketplaces.
To access the list of synchronized marketplaces in Odoo, navigate to :menuselection:`Sales app
--> Configuration --> Settings --> Connectors --> Amazon Sync --> Amazon Accounts`.
Then, create another registration for this account, and remove all other marketplaces **except**
the one to isolate.
Lastly, assign another sales team to one of the two registrations of the account.
.. seealso::
- :doc:`features`
@@ -55,8 +55,8 @@ Additionally, you can mark the project as :guilabel:`Favorite`, allowing you to
:alt: Project settings
.. seealso::
`Odoo Tutorials: Customize your project
<https://www.odoo.com/slides/slide/customize-your-project-1662?fullscreen=1>`_
`Odoo Tutorials: Customize projects
<https://www.odoo.com/slides/slide/customize-projects-3615?fullscreen=1>`_
Further settings are available under the :guilabel:`Settings` tab. Most of them are *only* available
depending on the activated apps.
+1
View File
@@ -11,4 +11,5 @@ Websites
websites/ecommerce
websites/elearning
websites/forum
websites/blog
websites/livechat
+129
View File
@@ -0,0 +1,129 @@
====
Blog
====
**Odoo Blog** allows you to create and manage blog posts on your website to engage your audience and
build a community.
.. tip::
If the Blog module is not yet installed, click :guilabel:`+New` on the website builder, select
:guilabel:`Blog Post`, and click :guilabel:`Install`.
Creating a blog
===============
To create or edit a blog, go to :menuselection:`Website --> Configuration --> Blogs: Blogs`. Click
:guilabel:`New`, and enter the :guilabel:`Blog Name` and the :guilabel:`Blog Subtitle`.
The :guilabel:`Blog` menu item is added to your website's menu the first time you create a blog and
gathers all your blogs.
Adding a blog post
==================
Go to your website, click :guilabel:`+New` in the top-right corner, and select
:guilabel:`Blog Post`. In the pop-up, **select the blog** where the post should appear, write the
post's :guilabel:`Title`, and :guilabel:`Save`. You can then write the post's content and customize
the page using the website builder.
.. tip::
- Illustrate your articles with copyright-free images from :doc:`Unsplash
<website/configuration/unsplash>`.
- Type `/` in the text editor to format and add elements to your text.
.. important::
Don't forget to toggle the :guilabel:`Unpublished` switch in the top-right corner to publish
your post.
Using tags
==========
Tags let visitors filter all posts sharing the same tag. By default, they are displayed at the
bottom of posts, but can also be displayed on the blog's main page. To do so, click
:menuselection:`Edit --> Customize` and enable the :guilabel:`Sidebar`. By default, the sidebar's
:guilabel:`Tags List` is enabled.
To create a tag, go to :menuselection:`Website --> Configuration --> Blogs: Tags` and click
:guilabel:`New`. Fill in the:
- :guilabel:`Name`
- :guilabel:`Category`: tag categories let you group tags displayed on the sidebar by theme.
- :guilabel:`Used in`: to apply the tag to existing blog posts, click :guilabel:`Add a line`,
select the posts, and click :guilabel:`Select`.
You can add and create tags directly from posts by clicking :menuselection:`Edit --> Customize` and
select the post's cover. Under :guilabel:`Tags`, click :guilabel:`Choose a record...`, and select
or create a tag.
.. image:: blog/create-tag.png
:alt: Adding a tag to a blog post
.. note::
To manage tag categories, go to :menuselection:`Website --> Configuration --> Blogs: Tag
Categories`.
Customizing blog homepages
==========================
Customize the content of blog homepages by opening a blog homepage and clicking :menuselection:`Edit
--> Customize`.
.. note::
Settings apply to **all** blogs homepages.
:guilabel:`Top Banner`: :guilabel:`Name/Latest Post` displays the title of the latest post on the
top banner, while :guilabel:`Drop Zone for Building Blocks` removes the top banner and lets you use
any building block instead.
:guilabel:`Layout`: organizes posts as a :guilabel:`Grid` or :guilabel:`List`.
- :guilabel:`Cards`: adds a *card* effect.
- :guilabel:`Increase Readability`: improves the text's readability.
:guilabel:`Sidebar`: displays a sidebar containing an :guilabel:`About us` section.
- :guilabel:`Archives`: allows visitors to select a month and filter all posts created during that
month.
- :guilabel:`Follow Us`: displays links to your social media networks. They can be configured using
the Social Media building block somewhere on your website.
- :guilabel:`Tags List`: displays all tags related to a blog. Visitors can select a tag to filter
all related posts.
:guilabel:`Posts List`: :guilabel:`Cover` displays the posts' images, and :guilabel:`No Cover` hides
them.
- :guilabel:`Author`: displays the posts' authors.
- :guilabel:`Comments/Views Stats`: displays the posts' number of comments and views.
- :guilabel:`Teaser & Tags`: displays the posts' first sentences and tags.
Customizing blog posts
======================
Customize posts by opening a blog post and clicking :menuselection:`Edit --> Customize`.
.. note::
Settings apply to **all** posts.
:guilabel:`Layout`: :guilabel:`Title Inside Cover` displays the title inside the cover image, and
:guilabel:`Title above Cover` displays it above.
- :guilabel:`Increase Readability`: increases the text's readability.
:guilabel:`Sidebar`: displays the :guilabel:`Sidebar` and additional options:
- :guilabel:`Archive`: allows visitors to select a month and filter all posts created during that
month.
- :guilabel:`Author`: displays the post's author and creation date.
- :guilabel:`Blog List`: displays links to all your blogs.
- :guilabel:`Share Links`: displays share buttons to several social networks.
- :guilabel:`Tags`: displays the post's tags.
:guilabel:`Breadcrumb`: displays the path to the post.
:guilabel:`Bottom`: :guilabel:`Next Article` displays the next post at the bottom, and
:guilabel:`Comments` enable visitors to comment on the post.
:guilabel:`Select To Tweet`: visitors are offered to tweet the text they select.
.. tip::
Use :ref:`Plausible <website/analytics/plausible>` to keep track of the traffic on your blog.
Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Some files were not shown because too many files have changed in this diff Show More