Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fc2e3310be | |||
| d07052aa57 | |||
| b89d3e56c2 | |||
| 8d87bfe462 | |||
| b72d340b3c | |||
| a197b6c57d | |||
| f0cf3c68ac | |||
| 1f31ba3f06 | |||
| 2f0d98c9f7 | |||
| 4210a31408 | |||
| 080dc64e54 | |||
| 95f8067ed5 | |||
| f453b2266f | |||
| d88b185c27 | |||
| 62a4db0c7d | |||
| de2999c01d | |||
| 494ae5a555 | |||
| 283c843eeb | |||
| b0cc13d4fe | |||
| 6016ed4e93 | |||
| 6c561112a8 | |||
| 7a8f551d67 | |||
| 67adf2fc3b | |||
| 6f3ca9f4a3 | |||
| d1836f349f | |||
| e765370016 | |||
| 15beccfd50 |
@@ -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
|
||||
|
||||
|
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::
|
||||
|
||||
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 14 KiB |
|
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`
|
||||
|
Before Width: | Height: | Size: 12 KiB |
|
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
|
||||
===============================================
|
||||
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 32 KiB |
@@ -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::
|
||||
|
||||
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 7.1 KiB |
|
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`
|
||||
|
||||
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
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`
|
||||
|
||||
|
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 Odoo’s 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/`.
|
||||
|
||||
|
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.
|
||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 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>`_
|
||||
|
||||
|
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.
|
||||
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
@@ -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.
|
||||
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 30 KiB |
@@ -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>`
|
||||
|
||||
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 9.8 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 24 KiB |
@@ -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
|
||||
===========================
|
||||
|
||||
|
||||
@@ -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 product’s 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.
|
||||
|
||||
@@ -11,4 +11,5 @@ Websites
|
||||
websites/ecommerce
|
||||
websites/elearning
|
||||
websites/forum
|
||||
websites/blog
|
||||
websites/livechat
|
||||
|
||||
@@ -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.
|
||||
|
After Width: | Height: | Size: 10 KiB |