Compare commits

...

42 Commits

Author SHA1 Message Date
John Holton (hojo) 6594917564 [ADD] Manufacturing: Lots and serial numbers 2025-01-28 15:12:54 -08:00
Loredana Perazzo c792d379de [IMP] POS: move configuration in toctree
task-4512527

closes odoo/documentation#11877

X-original-commit: 92b968d337
Signed-off-by: Loredana Perazzo (lrpz) <lrpz@odoo.com>
2025-01-28 15:43:09 +00:00
LoredanaLrpz 989f2faf9a [IMP] pos: resize & scale content (table and screenshots)
task-4521596

closes odoo/documentation#11897

Signed-off-by: Loredana Perazzo (lrpz) <lrpz@odoo.com>
2025-01-28 08:45:13 +00:00
Erwin Zoer a9ff26efdd [FW][FIX] developer/howtos/upgrade_custom_db: fix typo
Changed the word devolopments to developments

closes odoo/documentation#11876

Forward-port-of: odoo/documentation#11864
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2025-01-27 21:04:54 +00:00
mcsi-odoo 6051f2f638 [IMP] accounting: ocr free iap test credits for enterprise users
task-4328876

closes odoo/documentation#11875

X-original-commit: 058e379a40
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Siobhan McGonigle (mcsi) <mcsi@odoo.com>
2025-01-27 14:39:13 +00:00
Loredana Perazzo 565022703a [ADD] POS: how to configure and use the preparation display
task-3604858

closes odoo/documentation#11853

X-original-commit: 2eb1deaf11
Signed-off-by: Loredana Perazzo (lrpz) <lrpz@odoo.com>
2025-01-27 09:28:05 +00:00
“Chiara 8b1f8e1fc6 [IMP] accounting: italian localization typo
closes odoo/documentation#11844

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-01-27 09:28:02 +00:00
mcsi-odoo f3d8007c29 [IMP] accounting: order of fiscal localizations updated in toc
task-4285498

closes odoo/documentation#11858

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-01-27 09:27:59 +00:00
sk-nada e241c7a088 [FIX] tutorials/server_framework_101: update link for example of list
previous link was for code that used tree in xml. The tree tag throws Traceback error in 18.0. This commit will provide the correct example with list tag instead of tree tag.

closes odoo/documentation#11865

Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2025-01-27 07:58:48 +00:00
Odoo Translation Bot 8750d5f859 [I18N] Update translation terms from Transifex 2025-01-26 02:43:37 +01:00
Parish Bracha a541383a1d [IMP] Sales: Quotation Templates update
closes odoo/documentation#11787

Signed-off-by: Parish Bracha (pabr) <pabr@odoo.com>
2025-01-24 22:10:11 +00:00
jero-odoo 60a0d4cdb5 [IMP] Inventory: wave transfers 18
closes odoo/documentation#11761

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: hojo-odoo <123424465+hojo-odoo@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2025-01-24 15:41:07 +00:00
“Dallas” 88e1bee845 [IMP] accounting/bank: outstanding accounts
Update bank doc to better explain suspense and outstanding accounts and to explain that payments don't create journal entries without outstanding accounts.

task-3474209

closes odoo/documentation#11791

Signed-off-by: Dallas Dean (dade) <dade@odoo.com>
2025-01-24 11:04:32 +00:00
Doh (KIDO) 654970a436 [FIX] l10n_my: MyInvois credential update for preproduction
Despite registering ODOO S.A. as the name for both production and preproduction environment, MyInvois force changed pre-production to OXXX_XXXXO S.A. requiring an update on the credential for usage.

closes odoo/documentation#11818

X-original-commit: eba8e6028e
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Kim Dohyun (kido) <kido@odoo.com>
2025-01-24 05:39:17 +00:00
William Braeckman 0a329f11dc [IMP] developer/reference/cli: --limit-time-cron-conn
Document the newly created config option.

closes odoo/documentation#11835

See: https://github.com/odoo/odoo/pull/194141
X-original-commit: ea9c8bd807
Related: odoo/odoo#194937
Signed-off-by: William Braeckman (wbr) <wbr@odoo.com>
2025-01-23 21:37:28 +00:00
jero-odoo 9917949408 [IMP] Inventory: Batch Picking 18
closes odoo/documentation#11748

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: Liz Bender <92882399+benderliz@users.noreply.github.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2025-01-23 20:06:39 +00:00
jero-odoo c4e0f35aa9 [IMP] Inventory: cluster picking
closes odoo/documentation#11753

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Co-authored-by: dikd-odoo <dikd@odoo.com>
2025-01-23 20:06:37 +00:00
benderliz 90048d2484 [IMP] Inventory: Rewrite aging report as stock valuation report
closes odoo/documentation#11720

Signed-off-by: Liz Bender (beli) <beli@odoo.com>
2025-01-23 18:42:31 +00:00
“Dallas” cc226a7e1d [IMP] l10n_spain: update FACe configuration
Update configration as the location of the config changed in 18.0.

task-4327068

closes odoo/documentation#11775

Signed-off-by: Dallas Dean (dade) <dade@odoo.com>
2025-01-23 08:44:10 +00:00
lase@odoo.com 9c5f9f7aa6 [IMP] marketing: match the Display Timezone description with tooltips
Issue:

The current descriptions and naming of the `Date` fields (`date_begin`,
`date_end`) and the `Timezone` field (`date_tz`) can be confusing in the
form view of the event model. Specifically:

The timezone used for converting the form dates to the database is
determined by the context and not by the `Timezone` field present on the
form. However, this `Timezone` field determines the timezone used
for displaying the event's date/time on the website. This change
clarifies the situation according to the update done in the community PR

opw-4323142

closes odoo/documentation#11790

X-original-commit: fe9d186b54
Related: odoo/odoo#194354
Signed-off-by: Lancelot Semal (lase) <lase@odoo.com>
2025-01-23 07:31:24 +00:00
Meet Jivani [MEJI] 8f77236070 [ADD] point_of_sale: documentation for urbanPiper Integration
In this commit:
- Added detailed documentation on configuring online food delivery using
UrbanPiper integration.
- Provides step-by-step guidance for setting up the system.

Task-4263288

closes odoo/documentation#11496

Signed-off-by: Loredana Perazzo (lrpz) <lrpz@odoo.com>
Co-authored-by: Loredana Perazzo <lrpz@odoo.com>
Co-authored-by: Meet Jivani <meji@odoo.com>
2025-01-23 01:29:09 +00:00
Antoine Vandevenne (anv) 39f6f220e1 [IMP] supported_versions: release saas-18.1
closes odoo/documentation#11803

X-original-commit: 9b7d3d559b
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2025-01-21 18:05:19 +00:00
dikd-odoo e6bc52d641 [IMP] sales: removing the warning message for Amazon connector
closes odoo/documentation#11773

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2025-01-21 15:36:39 +00:00
“Chiara 3ab129a370 [IMP] accounting: einvoicing by country mention
closes odoo/documentation#11752

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-01-20 16:40:29 +00:00
xpl-odoo d690755327 [IMP] database: update status of supported versions
task-4485068

closes odoo/documentation#11784

X-original-commit: 36d407830e
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2025-01-20 15:00:27 +00:00
Odoo Translation Bot bf6fe2f147 [I18N] Update translation terms from Transifex 2025-01-19 02:41:33 +01:00
“Dallas” cc6306277b [FIX] accounting:update internal transfers doc to 18.0
Internal transfers are now handled via reconciliation model button instead of through payments. This PR moves the internal transfers documentation from the Payments section to the Bank section and updates it to reflect the process in 18.0.

task-4331744

closes odoo/documentation#11768

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-01-17 11:27:16 +00:00
xpl-odoo abdcb372ba [IMP] l10n: odoo 18 update of the german l10n
Based on information from CBE and PR #11417

closes odoo/documentation#11719

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2025-01-16 18:03:18 +00:00
jero-odoo dfe54bdce3 [IMP] General: Outbound email servers correction
closes odoo/documentation#11760

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2025-01-16 03:25:43 +00:00
fvz-odoo 2d721c04eb [IMP] accounting/l10n_uy: clarify onboarding
Currently, users are having a hard time setting up their Uruware account. With the improvement to the documentation we are adding clarifications to simplify the onboarding process as well as adding a see also section so users have more documentation and smart classes/eLearning available.

closes odoo/documentation#11756

X-original-commit: 2628303bc4
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Co-authored-by: dade-odoo <87431108+dade-odoo@users.noreply.github.com>
2025-01-16 01:53:20 +00:00
Florian Gilbert 40c830298c [IMP] account/bank: Consistent number for available banks
The aim of this commit is making sure that we have the same number of available banks.
 
no task id

closes odoo/documentation#11746

Signed-off-by: Florian Gilbert (flg) <flg@odoo.com>
2025-01-14 13:46:27 +00:00
Zuzanna Luczynska b22893c1bd [ADD] project/dashboard: project dashboard
task-id 4384333

closes odoo/documentation#11743

X-original-commit: 37d9b31da5
Signed-off-by: Zuzanna Luczynska (zulu) <zulu@odoo.com>
2025-01-13 14:36:18 +00:00
Odoo Translation Bot 3bb0b21494 [I18N] Update translation terms from Transifex 2025-01-12 02:42:32 +01:00
John Holton (hojo) 02bcc265fb [IMP] Inventory: add delivery slip setting to lots
closes odoo/documentation#11698

Signed-off-by: John Holton (hojo) <hojo@odoo.com>
2025-01-11 11:07:02 +00:00
John Holton (hojo) 78b9c43030 [IMP] Inventory: add delivery slip setting to serial numbers
closes odoo/documentation#11697

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2025-01-11 09:45:40 +00:00
Aaron Bohy 04ac6de366 [IMP] javascript reference: document domain field options
Before this commit, options of the domain field weren't documented.
Now, they are.

closes odoo/documentation#11721

Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
2025-01-11 02:15:28 +00:00
jero-odoo 7c6aa7f2c4 [IMP] Helpdesk: Update SLAs
closes odoo/documentation#11691

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: dikd-odoo <dikd@odoo.com>
2025-01-10 12:08:26 +00:00
jero-odoo b78d7b86e6 [IMP] Helpdesk: Helpcenter updates
closes odoo/documentation#11713

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2025-01-10 12:08:25 +00:00
emmi-odoo 983346ae6b [IMP] essentials/import data: add Import files section
task-4043639

closes odoo/documentation#11675

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-01-10 12:08:17 +00:00
Donatienne (dopi) 84abf415bc [IMP] ecommerce: delivery methods
taskid-4016678

closes odoo/documentation#11619

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-01-09 11:24:47 +00:00
Zuzanna Luczynska a37453b18f [IMP] project/tasks: correction in what triggers reccurence + icon
closes odoo/documentation#11704

Task-id: 3601222
X-original-commit: cb0cce2498
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Zuzanna Luczynska (zulu) <zulu@odoo.com>
2025-01-08 15:33:56 +00:00
Christoforus Surjoputro fc83a645cf [FIX] payment_providers/xendit: remove step to enable optional 3ds
Enabling optional 3DS should not part of the official step. This configuration
is specific to cards payment, by default should perform 3DS, and only eligible
merchant able to perform cards payment with optional 3DS enabled.

closes odoo/documentation#11712

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-01-08 11:54:12 +00:00
235 changed files with 23863 additions and 7711 deletions
+1
View File
@@ -231,6 +231,7 @@ sphinx.transforms.i18n.docname_to_domain = (
# is populated. If a version is passed to `versions` but is not listed here, it will not be shown.
versions_names = {
'master': "Master",
'saas-18.1': "Odoo Online",
'18.0': "Odoo 18",
'saas-17.4': "Odoo Online",
'saas-17.2': "Odoo Online",
+10 -4
View File
@@ -31,6 +31,12 @@ This matrix shows the support status of every version.
- On-Premise
- Release date
- End of support
* - Odoo SaaS 18.1
- |green|
- N/A
- N/A
- January 2025
-
* - **Odoo 18.0**
- |green|
- |green|
@@ -38,17 +44,17 @@ This matrix shows the support status of every version.
- October 2024
- October 2027 (planned)
* - Odoo SaaS 17.4
- |green|
- |red|
- N/A
- N/A
- July 2024
-
- October 2024
* - Odoo SaaS 17.2
- |green|
- |red|
- N/A
- N/A
- April 2024
-
- October 2024
* - **Odoo 17.0**
- |green|
- |green|
@@ -28,15 +28,13 @@ select a record, tick the checkbox next to the corresponding record. Finally, cl
then :guilabel:`Export`.
.. image:: export_import_data/list-view-export.png
:align: center
:alt: View of the different things to enable/click to export data.
When clicking on :guilabel:`Export`, an :guilabel:`Export Data` pop-over window appears, with
several options for the data to export:
.. image:: export_import_data/export-data-overview.png
:align: center
:alt: Overview of options to consider when exporting data in Odoo..
:alt: Overview of options to consider when exporting data in Odoo.
#. With the :guilabel:`I want to update data (import-compatable export)` option ticked, the system
only shows the fields that can be imported. This is helpful in the case where the :ref:`existing
@@ -87,7 +85,6 @@ data into an Odoo database.
options: :guilabel:`Track history during import` and :guilabel:`Allow matching with subfields`.
.. image:: export_import_data/advanced-import.png
:align: center
:alt: Advanced import options when developer mode is activated.
If the model uses openchatter, the :guilabel:`Track history during import` option sets up
@@ -96,6 +93,8 @@ data into an Odoo database.
Should the :guilabel:`Allow matching with subfields` option be selected, then all subfields
within a field are used to match under the :guilabel:`Odoo Field` while importing.
.. _essentials/export_import_data/get-started:
Get started
-----------
@@ -103,30 +102,32 @@ Data can be imported on any Odoo business object using either Excel (`.xlsx`) or
(Comma-separated Values)` (`.csv`) formats. This includes: contacts, products, bank statements,
journal entries, and orders.
Open the view of the object to which the data should be imported/populated, and click on
:menuselection:`⚙️ (Action) --> Import records`.
Open the view of the object to which the data should be imported/populated, click the :icon:`fa-cog`
(:guilabel:`gear`) icon and select :guilabel:`Import records`.
.. image:: export_import_data/import-button.png
:align: center
:alt: Action menu revealed with the import records option highlighted.
After clicking :guilabel:`Import records`, Odoo reveals a separate page with templates that can be
downloaded and populated with the company's own data. Such templates can be imported in one click,
since the data mapping is already done. To download a template click :guilabel:`Import Template for
Customers` at the center of the page.
Click :icon:`fa-download`:guilabel:`Import Template for Customers` at the center of the page to
download a :ref:`template <essentials/export_import_data/adapt-a-template>` and populate it with
the company's own data. Such templates can be imported in one click since the data mapping is
already preconfigured.
.. important::
When importing a :abbr:`CSV (Comma-separated Values)` file, Odoo provides :guilabel:`Formatting`
options. These options do **not** appear when importing the proprietary Excel file type (`.xls`,
`.xlsx`).
To upload the downloaded template or your own file, follow the next steps:
.. image:: export_import_data/formatting.png
:align: center
:alt: Formatting options presented when a CVS file is imported in Odoo.
#. Click :guilabel:`Upload Data File` and select the desired file.
#. Adjust the :guilabel:`Formatting` options as needed (for CSV files only).
#. Ensure all data in the :guilabel:`File Column` is correctly mapped to the appropriate
:guilabel:`Odoo Field` and free of errors.
#. (Optional) Click :guilabel:`Load Data File` to reload the same file or upload a different one.
#. Click :guilabel:`Test` to verify that the data is valid.
#. Click :guilabel:`Import`.
Make necessary adjustments to the *Formatting* options, and ensure all columns in the
:guilabel:`Odoo field` and :guilabel:`File Column` are free of errors. Finally, click
:guilabel:`Import` to import the data.
.. note::
The :guilabel:`Formatting` options do **not** appear when importing the proprietary Excel file
type (i.e., `.xls` or `.xlsx`).
.. _essentials/export_import_data/adapt-a-template:
Adapt a template
----------------
@@ -144,7 +145,6 @@ Once the template is downloaded, proceed to follow these steps:
(ID) column.
.. image:: export_import_data/dragdown.gif
:align: center
:alt: An animation of the mouse dragging down the ID column, so each record has a unique ID.
.. note::
@@ -153,7 +153,6 @@ Once the template is downloaded, proceed to follow these steps:
Search the drop-down menu for the corresponding field.
.. image:: export_import_data/field_list.png
:align: center
:alt: Drop-down menu expanded in the initial import screen on Odoo.
Then, use this field's label in the import file to ensure future imports are successful.
@@ -203,7 +202,6 @@ If this happens, check the :guilabel:`Show fields of relation fields (advanced)
complete list of fields becomes available for each column.
.. image:: export_import_data/field_list.png
:align: center
:alt: Searching for the field to match the tax column.
Change data import format
@@ -401,6 +399,33 @@ respective contacts:
- :download:`Customers and their respective contacts
<export_import_data/o2m_customers_contacts.csv>`
Import image files
------------------
To import image files along with the :ref:`uploaded <essentials/export_import_data/get-started>`
CSV or Excel file, follow the next steps:
#. Add the image file names to the relevant :guilabel:`Image` column in the data file.
#. :ref:`Upload the data file <essentials/export_import_data/get-started>` or reload it by
clicking :guilabel:`Load Data File`.
#. Click :guilabel:`Upload your files` under the :guilabel:`Files to import` section.
#. Select the relevant image files. The number of files selected appears next to the button.
#. Click :guilabel:`Test` to verify that all data is valid.
#. Click :guilabel:`Import`. During the import process, Odoo performs a file check to automatically
link the uploaded images to the imported data file. If there is no match, the data file is
imported without any image.
.. note::
- The :guilabel:`Files to import` section is enabled if your product template has an
:guilabel:`Image` column with all fields populated.
- The image file names in the data file must correspond to the uploaded image files.
- When importing a large number of images, you can specify the maximum batch size in megabytes
and set a delay to prevent the system from becoming overloaded. To do so, :doc:`enable the
developer mode <../general/developer_mode>` and fill in the :guilabel:`Max size per
batch` and the :guilabel:`Delay after each batch` fields in the :guilabel:`Files to import`
section. By default, the delay meets the RPC/API call limit defined in the `Odoo Cloud -
Acceptable Use Policy <https://www.odoo.com/acceptable-use>`_.
Import records several times
----------------------------
@@ -4,7 +4,7 @@
Bank and cash accounts
======================
You can manage as many bank or cash accounts as needed on your database. Configuring them well
You can manage as many bank or cash accounts as needed on your database. Configuring them correctly
allows you to have all your banking data up-to-date and ready for :doc:`reconciliation
<bank/reconciliation>` with your journal entries.
@@ -21,22 +21,22 @@ which include action buttons.
.. image:: bank/card.png
:alt: Bank journals are displayed on the Accounting Dashboard and contain action buttons
.. _bank_accounts/manage:
.. _accounting/bank/manage:
Manage your bank and cash accounts
==================================
Manage bank and cash accounts
=============================
Connect your bank for automatic synchronization
-----------------------------------------------
Connect a bank for automatic synchronization
--------------------------------------------
To connect your bank account to your database, go to :menuselection:`Accounting --> Configuration
--> Banks: Add a Bank Account`, select your bank in the list, click on :guilabel:`Connect`, and
follow the instructions.
--> Add a Bank Account`, select your bank in the list, click on :guilabel:`Connect`, and follow the
instructions.
.. seealso::
:doc:`bank/bank_synchronization`
.. _bank_accounts/create:
.. _accounting/bank/create:
Create a bank account
---------------------
@@ -44,8 +44,9 @@ Create a bank account
If your banking institution is not available in Odoo, or if you don't want to connect your bank
account to your database, you can configure your bank account manually.
To manually add a bank account, go to :menuselection:`Accounting --> Configuration --> Banks:
Add a Bank Account`, click on :guilabel:`Create it` (at the bottom right), and fill out the form.
To manually add a bank account, go to :menuselection:`Accounting --> Configuration --> Add a Bank
Account`, click on :guilabel:`Record transactions manually` (at the bottom right), fill out the bank
information, and click :guilabel:`Create`.
.. note::
- Odoo automatically detects the bank account type (e.g., IBAN) and enables some features
@@ -61,7 +62,7 @@ To create a new cash journal, go to :menuselection:`Accounting --> Configuration
Journals`, click on :guilabel:`Create` and select :guilabel:`Cash` in the :guilabel:`Type` field.
For more information on the accounting information fields, read the
:ref:`bank_accounts/configuration` section of this page.
:ref:`accounting/bank/configuration` section of this page.
.. note::
A default cash journal is available and can be used straight away. You can review it by going to
@@ -73,7 +74,7 @@ Edit an existing bank or cash journal
To edit an existing bank journal, go to :menuselection:`Accounting --> Configuration --> Accounting:
Journals` and select the journal you want to modify.
.. _bank_accounts/configuration:
.. _accounting/bank/configuration:
Configuration
=============
@@ -86,14 +87,23 @@ You can edit the accounting information and bank account number according to you
.. seealso::
- :doc:`get_started/multi_currency`
- :doc:`bank/transactions`
- `Bank configuration <https://www.youtube.com/watch?v=tVhhXw-VnGE>`_
.. _bank_accounts/suspense:
.. _accounting/bank/suspense:
Suspense account
----------------
Bank statement transactions are posted on the :guilabel:`Suspense Account` until the final
reconciliation allows finding the right account.
Bank statement transactions are posted on the suspense account until they are reconciled. At any
moment, the suspense account's balance in the general ledger shows the balance of transactions that
have not yet been reconciled.
.. note::
When a bank transaction is reconciled, the journal entry is modified to replace the bank suspense
account with the account of the journal item it is reconciled with. This account is usually the
:ref:`outstanding receipts or payments account <accounting/bank/outstanding-accounts>` if
reconciling with a registered payment or the account receivable or payable if reconciling with
an invoice or bill directly.
Profit and loss accounts
------------------------
@@ -105,7 +115,7 @@ register a loss when the ending balance of a cash register differs from what the
Currency
--------
You can edit the currency used to enter the statements.
You can edit the currency used to enter the transactions.
.. seealso::
:doc:`get_started/multi_currency`
@@ -114,7 +124,7 @@ Account number
--------------
If you need to **edit your bank account details**, click on the external link arrow next to your
:guilabel:`Account Number`. On the new page, click on the external link arrow next to your
:guilabel:`Account Number`. On the account page, click on the external link arrow next to your
:guilabel:`Bank` and update your bank information accordingly. These details are used when
registering payments.
@@ -124,12 +134,13 @@ registering payments.
Bank feeds
----------
:guilabel:`Bank Feeds` defines how the bank statements are registered. Three options are available:
:guilabel:`Bank Feeds` defines how the bank transactions are registered. Three options are
available:
- :guilabel:`Undefined yet`, which should be selected when you dont know yet if you will
synchronize your bank account with your database or not.
- :guilabel:`Import (CAMT, CODA, CSV, OFX, QIF)`, which should be selected if you want to import
your bank statement using a different format.
your bank statements and transactions using a different format.
- :guilabel:`Automated Bank Synchronization`, which should be selected if your bank is synchronized
with your database.
@@ -137,53 +148,47 @@ Bank feeds
- :doc:`bank/bank_synchronization`
- :doc:`bank/transactions`
.. _bank/outstanding-accounts:
.. _accounting/bank/outstanding-accounts:
Outstanding accounts
====================
By default, payments are registered through transitory accounts named **outstanding accounts**,
before being recorded in your bank account.
By default, payments in Odoo do not create journal entries, but they can easily be configured to
create journal entries using **outstanding accounts**.
- An **outstanding payments account** is where outgoing payments are posted until they are linked
with a withdrawal from your bank statement.
- An **outstanding receipts account** is where incoming payments are posted until they are linked
with a deposit from your bank statement.
with incoming bank transactions.
- An **outstanding payments account** is where outgoing payments are posted until they are linked
with outgoing bank transactions.
These accounts should be of :ref:`type <chart-of-account/type>` :guilabel:`Current Assets`.
These accounts are usually of :ref:`type <chart-of-account/type>` :guilabel:`Current Assets` and
:guilabel:`Current Liabilities`.
Payments that are registered in Odoo are posted to the outstanding receipts and outstanding accounts
until they are reconciled. At any moment, the outstanding receipts account's balance in the general
ledger shows the balance of registered incoming payments that have not yet been reconciled, and the
outstanding payments account's balance in the general ledger shows the balance of registered
outgoing payments that have not yet been reconciled.
Bank and cash journal configuration
-----------------------------------
To configure payments to create journal entries, set outstanding accounts for the journal's payment
methods. This can be done for any journal with the :ref:`type <chart-of-account/type>`
:guilabel:`Bank` or :guilabel:`Cash`.
To configure the outstanding accounts for a journal's payment methods, first go to
:menuselection:`Accounting --> Configuration --> Journals` and select a bank or cash journal. In the
:guilabel:`Incoming Payments` and :guilabel:`Outgoing Payments` tabs, set :guilabel:`Outstanding
Receipts accounts` and :guilabel:`Outstanding Payments accounts` for each payment method that you
want to create journal entries.
.. note::
The movement from an outstanding account to a bank account is done automatically when you
reconcile the bank account with a bank statement.
Default accounts configuration
------------------------------
The outstanding accounts are defined by default. If necessary, you can update them by going to
:menuselection:`Accounting --> Configuration --> Settings --> Default Accounts` and update your
:guilabel:`Outstanding Receipts Account` and :guilabel:`Outstanding Payments Account`.
Bank and cash journals configuration
------------------------------------
You can also set specific outstanding accounts for any journal with the :ref:`type
<chart-of-account/type>` :guilabel:`Bank` or :guilabel:`Cash`.
From your :guilabel:`Accounting Dashboard`, click on the menu selection ⋮ of the journal you want to
configure, and click on :guilabel:`Configuration`, then open the :guilabel:`Incoming/Outgoing
Payments` tab. To display the outstanding accounts column, click on the toggle button and check the
:guilabel:`Outstanding Receipts/Payments accounts`, then update the account.
.. image:: bank/toggle-button.png
:align: center
:alt: Select the toggle button and click on outstanding Accounts
.. note::
- If you do not specify an outstanding payments account or an outstanding receipts account for a
specific journal, Odoo uses the default outstanding accounts.
- If your main bank account is added as an outstanding receipts account or outstanding payments
account, when a payment is registered, the invoice or bill's status is directly set to
:guilabel:`Paid`.
- If the main bank account of the journal is added as an outstanding receipts account or
outstanding payments account, when a payment is registered, the invoice or bill's status is
directly set to :guilabel:`Paid`.
- If the outstanding receipts or outstanding payments account for a payment method is left blank,
registering a payment with that payment method will not create any journal entry.
.. toctree::
:titlesonly:
@@ -192,5 +197,6 @@ Payments` tab. To display the outstanding accounts column, click on the toggle b
bank/transactions
bank/reconciliation
bank/reconciliation_models
bank/internal_transfers
bank/foreign_currency
bank/loans
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 25 KiB

@@ -11,7 +11,7 @@ To check if your bank is compatible with Odoo, go to `Odoo Accounting Features
<https://www.odoo.com/page/accounting-features>`_, and click on
:guilabel:`See list of supported institutions`.
Odoo supports more than 25,000 institutions around the world.
Odoo supports more than 26,000 institutions around the world.
To connect to the banks, Odoo uses multiple web-services:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

@@ -0,0 +1,71 @@
==================
Internal transfers
==================
Internal money transfers can be handled in Odoo. At least two bank or cash accounts are needed to
make internal transfers.
.. seealso::
:ref:`How to add an additional bank account <accounting/bank/create>`
Configuration
=============
An internal transfer account is automatically created on your database based on your company's
:doc:`localization <../../fiscal_localizations>` and depending on your countrys legislation. To
modify the default :guilabel:`Internal Transfer` account, go to :menuselection:`Accounting -->
Configuration --> Settings` and scroll down to the :guilabel:`Default Accounts` section.
Register an internal transfer from one bank to another
======================================================
When money is transferred from one bank or cash account to another, that amount appears as two
transactions on the corresponding journals, whether the transactions are created manually, via
import, or via :doc:`bank synchronization <bank_synchronization>`. When reconciling the transaction,
select the :guilabel:`Internal Transfers` :doc:`reconciliation model <reconciliation_models>`
button. This reconciliation model button writes the transaction off to the :guilabel:`Internal
Transfer` account.
.. tip::
Remember to reconcile the transaction for both the outgoing transaction on the journal that sends
the payment and the incoming transaction on the journal that receives the payment.
.. example::
Take, for example, a transfer of $1000 from Bank A to Bank B:
- Bank journal (Bank A)
.. list-table::
:header-rows: 1
:stub-columns: 1
* - **Account**
- **Debit**
- **Credit**
* - Bank A account
-
- $1,000
* - **Internal transfer account**
- **$1,000**
-
- Bank journal (Bank B)
.. list-table::
:header-rows: 1
:stub-columns: 1
* - **Account**
- **Debit**
- **Credit**
* - Bank B account
- $1,000
-
* - **Internal transfer account**
-
- **$1,000**
.. seealso::
:doc:`reconciliation`
:doc:`reconciliation_models`
@@ -15,7 +15,7 @@ for use at a later date:
reduce/settle unpaid invoices/bills.
.. seealso::
- :doc:`Internal transfers <payments/internal_transfers>`
- :doc:`Internal transfers <bank/internal_transfers>`
- :doc:`bank/reconciliation`
- `Odoo Tutorials: Bank Configuration
<https://www.odoo.com/slides/slide/bank-configuration-6832>`_
@@ -27,10 +27,10 @@ Registering payment from an invoice or bill
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 transaction line, the invoice or vendor bill
changes to the :guilabel:`Paid` status.
reflected in an :ref:`outstanding <accounting/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 transaction line, the invoice
or vendor bill changes to the :guilabel:`Paid` status.
The :icon:`fa-info-circle` information icon next to the payment line displays more
information about the payment. To access additional information, such as the related journal, click
@@ -51,8 +51,8 @@ information about the payment. To access additional information, such as the rel
.. tip::
If the 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 transaction), invoices and bills are directly registered as :guilabel:`Paid`.
<accounting/bank/outstanding-accounts>`, and the payment is registered in Odoo (not through a
related bank transaction), invoices and bills are directly registered as :guilabel:`Paid`.
.. _accounting/payments/not-tied:
@@ -184,7 +184,6 @@ finalize the payment workflow and mark the invoice or bill as :guilabel:`Paid`.
payments/batch
payments/batch_sdd
payments/follow_up
payments/internal_transfers
payments/pay_sepa
payments/pay_checks
payments/forecast
@@ -17,7 +17,7 @@ into account checks yet to be cashed.
statement.
.. seealso::
* :ref:`Outstanding accounts <bank/outstanding-accounts>`
* :ref:`Outstanding accounts <accounting/bank/outstanding-accounts>`
* :ref:`Bank reconciliation <accounting/reconciliation>`
.. _checks/outstanding-account:
@@ -1,73 +0,0 @@
==================
Internal transfers
==================
Internal money transfers can be handled in Odoo. At least two bank accounts are needed to make
internal transfers.
.. seealso::
:doc:`How to add an additional bank account <../bank>`
Configuration
=============
An internal transfer account is automatically created on your database based on your company's
localization and depending on your countrys legislation. To modify the default :guilabel:`Internal
transfer account`, go to :menuselection:`Accounting --> Configuration --> Settings` and scroll down
to the :guilabel:`Default Accounts` section.
Register an internal transfer from one bank to another
======================================================
If you want to transfer money from one bank to another, access the Accounting Dashboard, click the
drop-down selection button (:guilabel:`⋮`) on the bank from which you want to make the transfer,
then click :guilabel:`Payments`. Select or create a payment, tick the :guilabel:`Internal Transfer`
checkbox, and select a :guilabel:`Destination Journal` before you :guilabel:`Confirm` the internal
transfer.
The money is now booked in the transfer account and another payment is automatically created in the
destination journal.
.. example::
- Bank journal (Bank A)
.. list-table::
:header-rows: 1
:stub-columns: 1
* - **Account**
- **Debit**
- **Credit**
* - Outstanding Payments account
-
- $1,000
* - **Internal transfer account**
- **$1,000**
-
- Bank journal (Bank B)
.. list-table::
:header-rows: 1
:stub-columns: 1
* - **Account**
- **Debit**
- **Credit**
* - Outstanding Receipts account
- $1,000
-
* - **Internal transfer account**
-
- **$1,000**
There is **one outstanding payment** and **one outstanding receipt** pending in your two bank
account journals because the bank statement confirming the sending and receiving of the money
has not been booked yet.
Once this is done, you can book and reconcile your bank statement lines as usual.
.. seealso::
:doc:`../bank/reconciliation`
@@ -43,7 +43,7 @@ Before closing a fiscal year, ensure first everything is accurate and up-to-date
- Validate all :doc:`expenses <../../expenses>`, ensuring their accuracy.
- Corroborate that all :doc:`received payments <../payments>` have been encoded and recorded
accurately.
- Close all :ref:`suspense accounts <bank_accounts/suspense>`.
- Close all :ref:`suspense accounts <accounting/bank/suspense>`.
- Book all :doc:`depreciation <../vendor_bills/assets>` and :doc:`deferred revenue
<../customer_invoices/deferred_revenues>` entries.
@@ -91,9 +91,10 @@ To buy credits, go to :menuselection:`Accounting --> Configuration --> Settings
and click on :guilabel:`Buy credits`, or go to :menuselection:`Settings --> Odoo IAP` and click on
:guilabel:`View My Services`.
.. important::
If you are on Odoo Online and have the Enterprise version, you benefit from free trial credits to
test the feature.
.. note::
Enterprise Odoo users with a valid subscription get free credits to test IAP features before
deciding to purchase more credits for the database. This includes demo/training databases,
educational databases, and one-app-free databases.
.. seealso::
- `Our Privacy Policy <https://iap.odoo.com/privacy#header_6>`_
@@ -187,17 +187,17 @@ Fiscal localization modules are available for the countries listed below.
fiscal_localizations/mexico
fiscal_localizations/netherlands
fiscal_localizations/new_zealand
fiscal_localizations/romania
fiscal_localizations/peru
fiscal_localizations/philippines
fiscal_localizations/romania
fiscal_localizations/saudi_arabia
fiscal_localizations/singapore
fiscal_localizations/spain
fiscal_localizations/switzerland
fiscal_localizations/thailand
fiscal_localizations/vietnam
fiscal_localizations/united_arab_emirates
fiscal_localizations/united_kingdom
fiscal_localizations/united_states
fiscal_localizations/uruguay
fiscal_localizations/vietnam
fiscal_localizations/employment_hero
@@ -24,6 +24,10 @@ localization.
- `l10n_at_saft`
- Adds the SAF-T export.
.. seealso::
:doc:`Documentation on e-invoicings legality and compliance in Austria
<../accounting/customer_invoices/electronic_invoicing/austria>`
Financial reports
=================
@@ -11,6 +11,10 @@ Install the :guilabel:`🇧🇪 Belgium` :ref:`fiscal localization package
<fiscal_localizations/packages>` to get all the default accounting features of the Belgian
localization, following the :abbr:`IFRS(International Financial Reporting Standards)` rules.
.. seealso::
:doc:`Documentation on e-invoicings legality and compliance in Belgium
<../accounting/customer_invoices/electronic_invoicing/belgium>`
.. _belgium/coa:
Chart of accounts
@@ -2,6 +2,10 @@
France
======
.. seealso::
:doc:`Documentation on e-invoicings legality and compliance in France
<../accounting/customer_invoices/electronic_invoicing/france>`
.. _localization/france/fec:
FEC - Fichier des Écritures Comptables
@@ -2,222 +2,154 @@
Germany
=======
German Chart of Accounts
========================
Accounting
==========
The chart of accounts SKR03 and SKR04 are both supported in Odoo. You can choose the
one you want by going in :menuselection:`Accounting --> Configuration` then choose the
package you want in the Fiscal Localization section.
.. seealso::
:doc:`Documentation on e-invoicing's legality and compliance in Germany
<../accounting/customer_invoices/electronic_invoicing/germany>`
Be careful, you can only change the accounting package as long as you have not created any accounting entry.
Chart of accounts
-----------------
.. tip::
Both SKR03 and SKR04 charts of accounts are supported in Odoo. When you create a new Odoo Online
database, SKR03 is installed by default.
When you create a new Odoo Online database, the SKR03 is installed by default.
Verify which is installed by going to :menuselection:`Accounting --> Configuration --> Settings`
and checking the :guilabel:`Package` field under the :guilabel:`Fiscal Localization` section.
German Accounting Reports
=========================
.. warning::
Selecting another package is only possible if you have not created an accounting entry. If one
was posted, a new company or database must be set up to select another package. In
addition, all journal entries will need to be created again.
Here is the list of German-specific reports available on Odoo Enterprise:
Reports
-------
The following German-specific reports available on Odoo Enterprise:
- Balance Sheet
- Profit & Loss
- Tax Report (Umsatzsteuervoranmeldung)
- Partner VAT Intra
- EC Sales List
- Intrastat
Export from Odoo to Datev
=========================
Exporting entries from Odoo to DATEV
------------------------------------
It is possible to export your accounting entries from Odoo to Datev. To be able to use this
feature, the german accounting localization needs to be installed on your Odoo Enterprise database.
Then you can go in :menuselection:`Accounting --> Reporting --> General Ledger` then click on the
**Export Datev (csv)** button.
Provided that one of the German :ref:`fiscal localization packages
<fiscal_localizations/accounting>` is installed, you can export your accounting entries from Odoo to
DATEV from the general ledger.
.. _germany/pos:
Point of Sale in Germany: Technical Security System
===================================================
The **Kassensicherungsverordnung** (The Act on Protection against Manipulation of Digital Records)
requires that electronic record-keeping systems - including the :doc:`point of sale
</applications/sales/point_of_sale>` systems - must be equipped with a **Technical Security System**
(also called **TSS** or **TSE**).
Odoo offers a service that is compliant with the help of `fiskaly <https://fiskaly.com>`_, a
*cloud-based solution*.
.. important::
Since this solution is cloud-based, a working internet connection is required.
Two types of exports are needed: first the DATEV ATCH export, then the DATEV DATA export.
.. note::
The only VAT rates allowed are given by fiskaly. You can check these rates by consulting:
`fiskaly DSFinV-K API: VAT Definition
<https://developer.fiskaly.com/api/dsfinvk/v0/#tag/VAT-Definition>`_.
Both are needed at different stages to transfer the data correctly to DATEV, as DATEV works with
two interfaces, one for clients (DUO - DATEV Unternehmen Online) and one for tax advisors (DATEV
Rechnungswesen).
Configuration
-------------
1. DATEV ATCH
~~~~~~~~~~~~~
Modules installation
~~~~~~~~~~~~~~~~~~~~
Go to :menuselection:`Accounting --> Reporting --> General Ledger`, click the :icon:`fa-cog`
(:guilabel:`Actions`) button, and select :guilabel:`Datev ATCH (zip)`.
#. If your database was created before June 2021, :ref:`upgrade <general/upgrade>` your **Point of
Sale** app (`point_of_sale`) and the **Restaurant** module (`pos_restaurant`).
#. :ref:`Install <general/install>` the **Germany - Certification for Point of Sale**
(`l10n_de_pos_cert`) and **Germany - Certification for Point of Sale of type restaurant**
(`l10n_de_pos_res_cert`) modules.
.. image:: germany/datev-export.png
:alt: General ledger's actions menu with DATEV exports
.. tip::
If these modules are not listed, :ref:`update the app list <general/install>`.
Upload the downloaded ZIP file via the `DATEV Belegtransfer software <https://www.datev.de/web/de/service-und-support/software-bereitstellung/download-bereich/betriebliches-rechnungswesen/belegtransfer>`_.
.. image:: germany/pos-upgrade.png
:align: center
:alt: Upgrading Odoo Point of Sale from the Apps dashboard
If you do not have the DATEV Belegtransfer software installed on your computer, ask your tax advisor
to help you with this.
Register your company at the financial authority
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. warning::
The DATEV ATCH ZIP file includes the files (reports) linked to an Odoo invoice or bill. For
customer invoices, the file must have been generated by using the :guilabel:`Print & Send`
button. For vendor bills, the file must have been received via an email alias or uploaded by
using the :guilabel:`Upload` button.
To register your company, go to :menuselection:`Settings --> General Settings --> Companies -->
Update Info`, fill out the following fields and *Save*.
.. admonition:: DATEV ATCH ZIP file
- **Company name**
- Valid **address**
- **VAT** number
- **St.-Nr** (Steuernummer): this number is assigned by the tax office to every taxable natural or
legal person. (e.g., `2893081508152`)
- **W-IdNr** (Wirtschafts-Identifikationsnummer): this number is used as a permanent
identification number for economically active persons.
The ZIP file contains two types of files:
You can then **register your company through fiskaly** by opening the *fiskaly* tab and clicking on
the *fiskaly Registration* button.
- the individual invoice/bill files (PDF, JPEG, etc.) for the selected period on the general
ledger, and
- a :file:`document.xml` file used to generate a unique ID (GUID) for each file.
.. image:: germany/fiskaly-registration.png
:align: center
:alt: Button to register a company through fiskaly in Odoo
These unique IDs are essential as they allow DATEV to automatically link the files to the
individual journal items, which will be imported with the DATEV DATA file in the next step.
.. tip::
If you do not see the *fiskaly Registration* button, make sure that you *saved* your company
details and are not in *editing mode* anymore.
2. DATEV DATA
~~~~~~~~~~~~~
Once the registration has been finalized, new fields appear:
Go to :menuselection:`Accounting --> Reporting --> General Ledger`, click the :icon:`fa-cog`
(:guilabel:`Actions`) button, and select :guilabel:`Datev DATA (zip)`.
- **fiskaly organization ID** refers to the ID of your company at the fiskaly side.
- **fiskaly API key** and **secret** are the credentials the system uses to access the services
offered by fiskaly.
Transfer the downloaded ZIP file to your tax advisor. They should import the ZIP file into DATEV
Rechnungswesen.
.. image:: germany/fiskaly-keys.png
:align: center
:alt: fiskaly keys as displayed on Odoo
Check with your tax advisor how often they need these files.
.. note::
It is possible to request new credentials if there is any issue with the current ones.
.. admonition:: DATEV ATCH ZIP file
Create and link a Technical Security System to your PoS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The ZIP file contains three CSV files:
.. image:: germany/create-tss.png
:align: right
:alt: Create TSS option from a point of sale
To use your point of sale in Germany, you first have to create a :abbr:`TSS (Technical Security
System)` for it.
To do so, go to :menuselection:`Point of Sale --> Configuration --> Point of Sale`, open the point
of sale you want to edit, then check the box next to **Create TSS** and *Save*.
.. image:: germany/tss-ids.png
:align: right
:alt: Example of TSS ID and Client ID from fiskaly in Odoo Point of Sale
Once the creation of the TSS is successful, you can find your **TSS ID** and **Client ID** under the
*fiskaly API* section.
- **TSS ID** refers to the ID of your TSS at fiskaly's side.
- **Client ID** refers to your PoS but at fiskaly's side.
DSFinV-K
--------
.. image:: germany/dsfinv-k-export.png
:align: right
:alt: Menu to export DSFinV-K
Whenever you close a PoS session, the orders' details are sent to the :abbr:`DSFinV-K (Digitale
Schnittstelle der Finanzverwaltung für Kassensysteme)` service of fiskaly.
In case of an audit, you can export the data sent to DSFinV-K by going to :menuselection:`Point of
Sale --> Orders --> DSFinV-k exports`.
These fields are mandatory:
- **Name**
- **Start Datetime** (export data with dates larger than or equal to the given start date)
- **End Datetime** (export data with dates smaller than or equal to the given end date)
Leave the **Point of Sale** field blank if you want to export the data of all your points of sale.
Specify a Point of Sale if you want to export this specific PoS' data only.
The creation of a DSFinV-K export triggers on export at fiskaly's side.
.. image:: germany/dsfinv-k-export-fields.png
:align: center
:alt: Pending DSFinV-K export on Odoo
As you can see, the **State** is *Pending*. This means that the export has been successfully
triggered and is being processed. You have to click on *Refresh State* to check if it is ready.
- the :file:`EXTF_customer_accounts.csv` file containing all information related to your
customers,
- the :file:`EXTF_vendor_accounts.csv` file containing all information related to your vendors,
and
- the :file:`EXTF_accounting_entries.csv` containing all journal items for the period defined on
the general ledger, as well as the unique IDs (GUID) so that the journal items can be linked to
the files inside the DATEV ATCH ZIP file.
.. _germany/gobd:
German Tax Accounting Standards: Odoo's guide to GoBD Compliance
================================================================
GoBD compliance
---------------
**GoBD** stands for *Grundsätze zur ordnungsmäßigen Führung und Aufbewahrung von Büchern,
Aufzeichnungen und Unterlagen in elektronischer Form sowie zum Datenzugriff*.
In short, it is a **guideline for the proper management and storage of books, records, and documents
in electronic form, as well as for data access**, that is relevant for the German tax authority, tax
declaration, and balance sheet.
Aufzeichnungen und Unterlagen in elektronischer Form sowie zum Datenzugriff*. In short, it is a
guideline for the proper management and storage of books, records, and documents in electronic form,
as well as for data access, that is relevant for the German tax authority, tax declaration, and
balance sheet.
These principles have been written and published by the Federal Ministry of Finance (BMF) in
November 2014. Since January 2015, **they have become the norm** and replace previously accepted
practices linked to computer-based accounting. Several changes have been made by the BMF in 2019 and
January 2020 to specify some of the content and due to the development of digital solutions (cloud
hosting, paperless companies, etc.).
November 2014. Since January 2015, **they have become the norm** and have replaced previously
accepted practices linked to computer-based accounting. Several changes have been made by the BMF in
2019 and January 2020 to specify some of the content due to the development of digital solutions
(cloud hosting, paperless companies, etc.).
.. important::
Odoo gives you **the means to be compliant with GoBD**.
Odoo is certified **GoBD-compliant**.
What do you need to know about GoBD when relying on accounting software?
------------------------------------------------------------------------
Understanding GoBD in relation to accounting software
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. note::
If you can, the best way to understand GoBD is to Read the `Official GoBD text
<https://ao.bundesfinanzministerium.de/ao/2021/Anhaenge/BMF-Schreiben-und-gleichlautende-Laendererlasse/Anhang-64/anhang-64.html>`_.
It is a bit long but quite readable for non-experts. But in short, here is what to expect:
The **GoBD is binding for companies that have to present accounts, which includes SMEs, freelancers,
and entrepreneurs, to the financial authorities**. As such, **the taxpayer himself is the sole
responsible** for the complete and exhaustive keeping of fiscal-relevant data (above-mentioned
The **GoBD is binding for companies that have to present accounts**, which includes SMEs,
freelancers, and entrepreneurs, to the financial authorities. As such, **the taxpayer himself is the
sole responsible** for the complete and exhaustive keeping of fiscal-relevant data (above-mentioned
financial and related data).
Apart from software requirements, the user is required to ensure Internal control systems (*in
Apart from software requirements, the user is required to ensure internal control systems (*in
accordance with sec. 146 of the Fiscal Code*):
- Access rights control;
- Segregation of Duties, Functional separating;
- Entry controls (error notifications, plausibility checks);
- Reconciliation checks at data entry;
- Processing controls;
- Measures to prevent intentional or unintentional manipulation of software, data, or documents.
- access rights control;
- segregation of duties, functional separating;
- entry controls (error notifications, plausibility checks);
- reconciliation checks at data entry;
- processing controls; and
- measures to prevent intentional or unintentional manipulation of software, data, or documents.
The user must distribute tasks within its organization to the relevant positions (*control*) and
The user must distribute tasks within their organization to the relevant positions (*control*) and
verify that the tasks are properly and completely performed (*supervision*). The result of these
controls must be recorded (*documentation*), and should errors be found during these controls,
appropriate measures to correct the situation should be put into place (*prevention*).
What about data security?
-------------------------
Data security
~~~~~~~~~~~~~
**The taxpayer must secure the system against any data loss due to deletion, removal, or theft of
any data**. If the entries are not sufficiently secured, the bookkeeping will be regarded as not in
The taxpayer must **secure the system against any data loss** due to deletion, removal, or theft of
any data. If the entries are not sufficiently secured, the bookkeeping will be regarded as not in
accordance with the GoBD guidelines.
Once bookings have been finally posted, they can no longer be changed or deleted via the
@@ -229,104 +161,183 @@ application.
.. seealso::
`Odoo Cloud Hosting - Service Level Agreement <https://www.odooo.com/cloud-sla>`_
- If the server is operated locally, it is the responsibility of the user to create the necessary
backup infrastructure.
- If the server is operated locally, the user is responsible for creating the necessary backup
infrastructure.
.. important::
In some cases, data has to be kept for ten years or more, so always have backups saved. It is
even more important if you decide to change software provider.
Responsibility of the software editor
-------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Considering GoBD only applies between the taxpayer and the financial authority, **the software
editor can by no means be held responsible for the accurate and compliant documentation of financial
transactional data of their users**. It can merely provide the necessary tools for the user to
respect the software related guidelines described in the GoBD.
Considering GoBD applies only to the taxpayer, **the software editor can by no means be held
responsible for the accurate and compliant documentation of their users' financial transactional
data**. It can merely provide the necessary tools for the user to respect the software-related
guidelines described in the GoBD.
How can Odoo help you achieve Compliance?
-----------------------------------------
Ensuring compliance through Odoo
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The key words, when it comes to GoBD, are: **traceable, verifiable, true, clear, and continuous**.
In short, you need to have audit-proof archiving in place and Odoo provides you with the means to
The keywords, when it comes to GoBD are: **traceable, verifiable, true, clear, and continuous**.
In short, you need to have audit-proof archiving in place, and Odoo provides you with the means to
achieve all of these objectives:
#. | **Traceability and verifiability**
| Each record in Odoo is stamped with the creator of the document, the creation date, the
modification date, and who modified it. In addition, relevant fields are tracked thus it can be
seen which value was changed by whom in the chatter of the relevant object.
modification date, and who modified it. In addition, relevant fields are tracked. Thus, it can
be seen which value was changed by whom in the chatter of the relevant object.
#. | **Completeness**
| All financial data must be recorded in the system, and there can be no gaps. Odoo ensures that
there is no gap in the numbering of the financial transactions. It is the responsibility of the
user to encode all financial data in the system. As most financial data in Odoo is generated
user to encode all financial data in the system. As most financial data in Odoo is generated
automatically, it remains the responsibility of the user to encode all vendor bills and
miscellaneous operations completely.
#. | **Accuracy**
| Odoo ensures with the correct configuration that the correct accounts are used. In addition,
| Odoo ensures that, with the correct configuration, the correct accounts are used. In addition,
the control mechanisms between purchase orders and sales orders and their respective invoices
reflect the business reality. It is the responsibility of the user to scan and attach the
paper-based vendor bill to the respective record in Odoo. *Odoo Document helps you automate
this task*.
reflect the reality of the business. It is the responsibility of the user to scan and attach
the paper-based vendor bill to the respective record in Odoo. *Odoo Documents helps you
automate this task*.
#. | **Timely booking and record-keeping**
| As most financial data in Odoo is generated by the transactional objects (for example, the
invoice is booked at confirmation), Odoo ensures out-of-the-box timely record-keeping. It is
the responsibility of the user to encode all incoming vendor bills in a timely manner, as well
as the miscellaneous operations.
#. | **Order**
| Financial data stored in Odoo is per definition ordered and can be reordered according to most
fields present in the model. A specific ordering is not enforced by the GoBD, but the system
must ensure that a given financial transaction can be quickly found by a third-party expert.
Odoo ensures this out-of-the-box.
| Financial data stored in Odoo is, per definition, ordered and can be reordered according to
most fields present in the model. A specific ordering is not enforced by the GoBD, but the
system must ensure that a given financial transaction can be quickly found by a third-party
expert. Odoo ensures this out-of-the-box.
#. | **Inalterability**
| With the German Odoo localization, Odoo is in standard configured in such a way that the
inalterability clause can be adhered to without any further customization.
Do you need a GoBD-Export?
--------------------------
GoBD export
~~~~~~~~~~~
In the case of fiscal control, the fiscal authority can request three levels of access to the
accounting system (Z1, Z2, Z3). These levels vary from direct access to the interface to the
handover of the financial data on a storage device.
In case of a handover of the financial data on a storage device, the format is **not** enforced by
the GoBD. It can be, for example, in XLS, CSV, XML, Lotus 123, SAP-format, AS/400-format, or else.
Odoo supports the CSV and XLS-export of financial data out-of-the-box. The GoBD **recommends** the
export in a specific XML-based GoBD-format (see "Ergänzende Informationen zur
Datenntträgerüberlassung" §3) but it is not binding.
In the case of a handover of financial data to a storage device, the GoBD does **not** enforce the
format. It can be, for example, in XLS, CSV, XML, Lotus 123, SAP-format, AS/400-format, or else.
Odoo supports the CSV and XLS export of financial data out of the box. The GoBD **recommends** the
export in a specific XML-based GoBD format (see "Ergänzende Informationen zur
Datenträgerüberlassung" §3), but it is not binding.
What is the role and meaning of the compliance certification?
-------------------------------------------------------------
Non-compliance
~~~~~~~~~~~~~~
The GoBD clearly states that due to the nature of a state of the art accounting software, their
configuration possibilities, changing nature, and various forms of use, **no legally binding
certification can be given**, nor can the software be made liable towards a public authority.
Third-party certificates can indeed have **an informative value** for customers to make software
buying decisions but are by no means legally binding or of any other legal value (A. 12, § 181).
In the event of an infringement, you can expect a fine and a court order demanding the
implementation of specific measures.
A GoBD certificate states nothing more than that if you use the software according to its
guidelines, the software will not refrain you from respecting the GoBD. These certifications are
very expensive in terms of time and cost, and their value is very relative. Thus we focus our
efforts on ensuring GoBD compliance rather than pay for a marketing tool which does not, however,
offer our customer any legal certainty.
.. _germany/pos:
Point of Sale
=============
Technical security system
-------------------------
The **Kassensicherungsverordnung** (The Act on Protection against Manipulation of Digital Records)
requires that electronic record-keeping systems - including the :doc:`point of sale
</applications/sales/point_of_sale>` systems - must be equipped with a **technical security system**
(also called **TSS** or **TSE**).
Odoo offers a service that is compliant with the help of `fiskaly <https://fiskaly.com>`_, a
*cloud-based solution*.
.. important::
The BMF actually states the following in the `Official GoBD text
<https://ao.bundesfinanzministerium.de/ao/2021/Anhaenge/BMF-Schreiben-und-gleichlautende-Laendererlasse/Anhang-64/anhang-64.html>`_:
Since this solution is cloud-based, a working internet connection is required.
- 180. Positive attestations on the correctness of the bookkeeping - and thus on the correctness
of IT-based bookkeeping systems - are not issued either in the context of a tax field audit or
in the context of binding information.
- 181. "Certificates" or "attestations" from third parties can serve as a decision criterion for
the company when selecting a software product, but develop from the in margin no. 179 is not
binding on the tax authorities.
.. note::
The only VAT rates allowed are given by fiskaly. You can check these rates by consulting
`fiskaly DSFinV-K API: VAT Definition
<https://developer.fiskaly.com/api/dsfinvk/v0/#tag/VAT-Definition>`_.
.. note::
The previous content was `automatically translated from German with Google Translate
<https://translate.google.com/?sl=de&tl=en&text=180.%0APositivtestate%20zur%20Ordnungsm%C3%A4%C3%9Figkeit%20der%20Buchf%C3%BChrung%20-%20und%20damit%20zur%20Ordnungsm%C3%A4%C3%9Figkeit%20DV-gest%C3%BCtzter%20Buchf%C3%BChrungssysteme%20-%20werden%20weder%20im%20Rahmen%20einer%20steuerlichen%20Au%C3%9Fenpr%C3%BCfung%20noch%20im%20Rahmen%20einer%20verbindlichen%20Auskunft%20erteilt.%0A%0A181.%0A%E2%80%9EZertifikate%E2%80%9C%20oder%20%E2%80%9ETestate%E2%80%9C%20Dritter%20k%C3%B6nnen%20bei%20der%20Auswahl%20eines%20Softwareproduktes%20dem%20Unternehmen%20als%20Entscheidungskriterium%20dienen%2C%20entfalten%20jedoch%20aus%20den%20in%20Rz.%20179%20genannten%20Gr%C3%BCnden%20gegen%C3%BCber%20der%20Finanzbeh%C3%B6rde%20keine%20Bindungswirkung.%20&op=translate>`_.
Configuration
~~~~~~~~~~~~~
:ref:`Install <general/install>` the **Germany - Certification for Point of Sale**
(`l10n_de_pos_cert`) and **Germany - Certification for Point of Sale of type restaurant**
(`l10n_de_pos_res_cert`) modules.
What happens if you are not compliant?
--------------------------------------
.. tip::
If these modules are not listed, :ref:`update the app list <general/install>`.
In the event of an infringement, you can expect a fine but also a court order demanding the
implementation of specific measures.
Company registration at the financial authority
***********************************************
To register your company, open the :guilabel:`Settings` app, click :guilabel:`Update Info` under the
:guilabel:`Companies` section, and fill in the following fields:
- :guilabel:`Company Name`
- :guilabel:`Address`
- :guilabel:`VAT`
- :guilabel:`St.-Nr.` (Steuernummer) this number is assigned by the tax office to every taxable
natural or legal person (e.g., `2893081508152`).
- :guilabel:`W-IdNr.` (Wirtschafts-Identifikationsnummer) this number is used as a permanent
identification number for economically active persons.
You can then **register your company through fiskaly** by opening the :guilabel:`Fiskaly` tab and
clicking the :guilabel:`Fiskaly Registration` button.
.. tip::
If you do not see the :guilabel:`Fiskaly Registration` button, make sure that you *saved* your
company details and are not in *editing mode* anymore.
Once the registration has been finalized, new fields appear:
- :guilabel:`Fiskaly Organization ID` refers to the ID of your company on fiskaly's side.
- :guilabel:`Fiskaly API Key` and :guilabel:`Fiskaly API Secret` are the credentials the system
uses to access the services offered by fiskaly.
.. image:: germany/fiskaly-registration.png
:alt: Fiskaly registration tab
.. note::
It is possible to request new credentials if there is any issue with the current ones by clicking
the :guilabel:`New keys` button.
Create a technical security system and link it to a POS
*******************************************************
To use a point of sale in Germany, first create a :abbr:`TSS (Technical Security System)` by going
to :menuselection:`Point of Sale --> Configuration --> Point of Sale`, selecting the
:guilabel:`Point of Sale` to edit, then checking the :guilabel:`Create TSS` box under the
:guilabel:`Fiskaly API` section.
Once the creation of the TSS is successful, you can find the:
- :guilabel:`TSS ID`, which refers to the ID of your TSS on fiskaly's side, and
- :guilabel:`Fiskaly Client ID`, which refers to your POS on fiskaly's side.
.. image:: germany/fiskaly-tss.png
:alt: Fiskaly API section
DSFinV-K export
~~~~~~~~~~~~~~~
Whenever you close a PoS session, the details of the orders are sent to the :abbr:`DSFinV-K
(Digitale Schnittstelle der Finanzverwaltung für Kassensysteme)` service of fiskaly.
In case of an audit, you can export the data sent to DSFinV-K by going to :menuselection:`Point of
Sale --> Orders --> DSFinV-K Exports --> New`.
.. image:: germany/pos-orders-menu.png
:alt: Menu to export DSFinV-K
These fields are mandatory:
- :guilabel:`Start Datetime`: export data with dates larger than or equal to the given start date
- :guilabel:`End Datetime`: export data with dates smaller than or equal to the given end date
Leave the :guilabel:`Point of Sale` field blank to export the data of all your points of sale;
specify one if you want to export data for this specific POS only.
.. image:: germany/dsfinv-k-export.png
:alt: Exporting DSFinV-K
When an export is successfully triggered and is being processed, the :guilabel:`State` field should
mention :guilabel:`Pending`. Click :guilabel:`Refresh State` to check if it is ready.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

@@ -33,6 +33,10 @@ localization:
- `l10n_it_stock_ddt`
- Transport documents - Documento di Trasporto (DDT)
.. seealso::
:doc:`Documentation on e-invoicings legality and compliance in Italy
<../accounting/customer_invoices/electronic_invoicing/italy>`
Company information
-------------------
@@ -651,7 +655,7 @@ as follows:
#. Make sure the fiscal printer is set to its default state: printer on, start-up cycle complete,
and no transaction in progress.
#. Type `3333`.
#. Press :guilabel:`Chiave`. The screen displays :guilabel:`Scleta Funzione`.
#. Press :guilabel:`Chiave`. The screen displays :guilabel:`Scelta Funzione`.
#. Type `14`. The screen displays :guilabel:`Apprendimento`.
#. Type `62`. The screen displays :guilabel:`Simulazione`.
#. To turn the :guilabel:`no` into a :guilabel:`si`, press :guilabel:`X`.
@@ -32,6 +32,10 @@ localization:
Installing the module :guilabel:`Luxembourg - Accounting Reports` installs all three modules at
once.
.. seealso::
:doc:`Documentation on e-invoicings legality and compliance in Luxembourg
<../accounting/customer_invoices/electronic_invoicing/luxembourg>`
Standard Chart of Accounts - PCN 2020
=====================================
@@ -104,7 +104,10 @@ portal to grant Odoo the **right to invoice** as an intermediary for your compan
- :guilabel:`TIN`: `C57800417080`
- :guilabel:`BRN`: `BE0477472701`
- :guilabel:`Name`: `ODOO S.A.`
- :guilabel:`Name`:
- :guilabel:`Production`: `ODOO S.A.`
- :guilabel:`Pre-production`: `OXXX_XXXXO S.A.`
#. Grant the following permissions by clicking the :icon:`fa-toggle-on` :guilabel:`(toggle-on)`
icon:
@@ -2,6 +2,10 @@
Netherlands
===========
.. seealso::
:doc:`Documentation on e-invoicings legality and compliance in the Netherlands
<../accounting/customer_invoices/electronic_invoicing/netherlands>`
XAF Export
==========
@@ -24,6 +24,10 @@ localization.
.. image:: romania/romania-modules.png
:alt: Modules for the Romanian localization
.. seealso::
:doc:`Documentation on e-invoicings legality and compliance in Romania
<../accounting/customer_invoices/electronic_invoicing/romania>`
D.406 declaration
=================
@@ -20,6 +20,12 @@ select a package in the :guilabel:`Fiscal Localization` section.
.. warning::
You can only change the accounting package as long as you have not created any accounting entry.
.. seealso::
- :doc:`Documentation on e-invoicings legality and compliance in Spain
<../accounting/customer_invoices/electronic_invoicing/spain>`
- :doc:`Documentation on e-invoicings legality and compliance in the Basque Country
<../accounting/customer_invoices/electronic_invoicing/basque_country>`
Chart of accounts
=================
@@ -149,11 +155,16 @@ Before configuring the :abbr:`FACe (General Entrance for Electronic Invoices)` s
:ref:`install <general/install>` the :guilabel:`Spain - Facturae EDI (l10n_es_edi_facturae)` module
and other **Facturae EDI**-related modules.
To enable FACe, go to :menuselection:`Settings --> General Settings`, click
:guilabel:`Update Info` in the :guilabel:`Companies` section, then click :guilabel:`Update Info` and
set the :guilabel:`Country` and :guilabel:`Tax ID` of your company. Next, add the
:guilabel:`Facturae signature certificate` by clicking :guilabel:`Add a line`, uploading the
certificate provided by the tax agency, and entering the provided password.
To configure FACe, follow these steps:
#. Go to :menuselection:`Accounting --> Configuration --> Certificates`.
#. Click :guilabel:`New` to create a new certificate.
#. Complete the fields, including uploading the file of the :guilabel:`Certificate` provided by the
tax agency and the provided :guilabel:`Certificate Password`.
.. note::
If using the Invoicing app instead of Accounting, go to :menuselection:`Invoicing -->
Configuration --> Certificates`.
Use case
--------
@@ -105,39 +105,61 @@ search for your company to verify the following:
Set up a Uruware account
------------------------
To set up a Uruware account, first be sure to have a valid Odoo subscription. Then follow the
proceeding steps.
To set up a Uruware account, follow these steps:
Locate the Uruware credentials settings by navigating to the :menuselection:`Accounting -->
Configuration --> Settings`. Scroll down to the :guilabel:`Uruguayan Localization` section and click
on :guilabel:`Create Uruware Account`.
#. Verify that you have a valid Odoo subscription.
#. Locate the Uruware credentials settings by navigating to the :menuselection:`Accounting -->
Configuration --> Settings`.
#. Scroll down to the :guilabel:`Uruguayan Localization` section and select the environment
(:guilabel:`Production` or :guilabel:`Testing`).
#. Click on :guilabel:`Create Uruware Account`.
Upon doing so, an email is sent to the address associated with your Odoo subscription with the
username and password to enter Uruware's portal and set up your account.
password to enter Uruware's portal and set up your account.
.. tip::
Your :guilabel:`Tax ID` needs to be setup to be able to create your account.
- The email with the credentials is not immediate; it might take up to 48 hours for the account to
be created.
- The company's :guilabel:`Tax ID` needs to be set up to be able to create an Uruware account.
- The password sent expires after 24 hours. In this case, reset it by using the *Forgot Password*
link in Uruware's portal.
.. note::
This action will create an account with Uruware with the following information:
- Legal name (razón social)
- RUT from the company
- User name (RUT.odoo)
- Username (the Odoo subscription email or `RUT`.odoo. For example: `213344556677.odoo`)
- Odoo database link
To ensure your account is created correctly, please add any missing information from above.
Once the account is created, a confirmation email is sent to the email linked to your subscription
in Odoo, containing the credentials to configure the account directly in the Uruware
`testing portal <https://odootest.ucfe.com.uy/Gestion/>`_ or
Once the account is created and you have received the email containing the credentials, configure
your accounts directly in the Uruware `testing portal <https://odootest.ucfe.com.uy/Gestion/>`_ or
`production portal <https://prod6109.ucfe.com.uy/Gestion/>`_:
Use the account credentials in the email to log in to the portal.
Use the account credentials in the email to log in to the to the corresponding (`test
<https://odootest.ucfe.com.uy/Gestion/>`_ or `production <https://prod6109.ucfe.com.uy/Gestion/>`_)
portal.
In Uruware's portal, the following steps are needed to be able to issue invoices from Odoo:
#. Complete and correct the company's information.
#. Add your digital certificate.
#. Add your :abbr:`CAEs (Constancia de Autorización para Emisión)` for each document-type you plan
to issue.
#. Configure the format of the PDF to be printed and sent to your customers.
.. important::
Be sure to configure two accounts, one for testing and one for production. The email address can
be changed in Uruware and the same can be used in both environments.
Be sure to configure two accounts, one for testing and one for production. The certificate is
needed in both environments, but :abbr:`CAEs (Constancia de Autorización para Emisión)` are only
needed in production.
.. seealso::
- `Odoo Tutorials: Uruguay Localization
<https://www.odoo.com/slides/smart-tutorial-localizacion-de-uruguay-432>`_
- `Odoo Help Forum: Uruguay
<https://www.odoo.com/forum/help-1?search=l10n_uy>`_
Electronic invoice data
-----------------------
@@ -156,6 +178,9 @@ First, select the :guilabel:`UCFE Web Services` environment:
to the |DGI|. For this reason, rejection errors will not appear in this mode. Every internal
validation can be tested in demo mode. Avoid selecting this option in a production database.
.. note::
Using :guilabel:`Demo` mode does not require a Uruware account.
Then, enter the :guilabel:`Uruware Data`:
- :guilabel:`Uruware WS Password`
@@ -166,9 +191,16 @@ Then, enter the :guilabel:`Uruware Data`:
:alt: Required information for electronic invoice.
.. note::
This data can be obtained from the Uruware portal, after configuring the :ref:`Uruware account
<l10n_uy/uruware-account>`. The :guilabel:`Uruware WS Password` differs from the password you use
to enter your Uruware account.
This data can be obtained from the Uruware portal after configuring the :ref:`Uruware account
<l10n_uy/uruware-account>`.
To get the :guilabel:`Uruware WS Password`, go to :menuselection:`Configuration --> Company -->
Edit` and look for the :guilabel:`Validators and Additional Information` tab to find
:guilabel:`WS Password`.
To get the :guilabel:`Commerce Code`, go to :menuselection:`Configuration --> Branches`.
To get the :guilabel:`Terminal Code`, go to :menuselection:`Configuration --> Issuing Points`.
Master data
-----------
@@ -441,8 +441,8 @@ entries. We recommend you ask your accountant for advice.
By default, the :guilabel:`Bank Account` defined for the :ref:`payment journal
<payment_providers/journal>` is used, but you can also specify an :ref:`outstanding account
<bank/outstanding-accounts>` for each payment provider to separate the provider's payments from
other payments.
<accounting/bank/outstanding-accounts>` for each payment provider to separate the provider's
payments from other payments.
.. image:: payment_providers/bank_journal.png
:alt: Define an outstanding account for a payment provider.
@@ -33,8 +33,6 @@ Configuration on the Xendit Dashboard
#. In the :guilabel:`Webhook URL` section, enter your Odoo database's URL, followed by
`/payment/xendit/webhook` (e.g., `https://example.odoo.com/payment/xendit/webhook`) in the field
:guilabel:`Invoices paid` and click the :guilabel:`Test and save` button next to it.
#. Navigate to the `Card Settings page <https://dashboard.xendit.co/settings/payment-methods/cards-configuration>`_
and ensure that :guilabel:`Optional 3DS` is enabled while :guilabel:`Dynamic 3DS` is disabled.
Configuration on Odoo
=====================
@@ -100,9 +100,10 @@ Sending emails with an external SMTP server
the DNS of an Odoo subdomain is not feasible.
To add an external SMTP server in Odoo, open :guilabel:`Settings`, and enable the :guilabel:`Use
Custom Email Servers` option found under the :guilabel:`Discuss` section.
Custom Email Servers` option found under the :guilabel:`Emails` section. Then, click
:guilabel:`Save` at the top of the page to save the changes.
Still under the :guilabel:`Discuss` section, click :guilabel:`Outgoing Email Servers`, then `New` to
Returning to the :guilabel:`Emails` section, click :guilabel:`Outgoing Email Servers`, then `New` to
create an outgoing mail server record. Most fields are the common parameters used to set up a
connection to an SMTP server; use the values provided by your email provider.
@@ -158,9 +159,8 @@ transactional emails are given priority.
:alt: Example of split between transaction and mass mailing mail servers.
Now, go to :menuselection:`Email Marketing --> Configuration --> Settings`, enable
:guilabel:`Dedicated Server`, and select the appropriate email server. Odoo uses the server
with the lowest priority value for transactional emails, and the server selected here for mass
mailings.
:guilabel:`Dedicated Server`, and select the appropriate email server. Odoo uses the server with the
lowest priority value for transactional emails, and the server selected here for mass mailings.
.. image:: email_servers_outbound/dedicated-mass-mail-server.png
:alt: Dedicated mail server on Email Marketing app settings.
@@ -194,8 +194,8 @@ When an email is sent from Odoo, the following sequence is used to choose the ou
If the sender's email address is `test@example.com`, only an email server having a FROM filtering
value equal to `test@example.com` or `example.com` can be used.
- If no server is found based on the first criteria, Odoo looks for the first server
without a FROM filtering value set. The email will be overridden with the notification address.
- If no server is found based on the first criteria, Odoo looks for the first server without a FROM
filtering value set. The email will be overridden with the notification address.
- If no server is found based on the second criteria, Odoo uses the first server, and the email will
be overridden with the notification address.
@@ -228,8 +228,8 @@ server is set, the default Odoo's SMTP server will be used.
:alt: Splitting of Odoo mail server for transactional emails and Mail server for Mass mailing.
.. note::
On Odoo Online, the command line interface is equivalent to the default Odoo mail
server, using the same limit as if there was no outgoing mail server in place.
On Odoo Online, the command line interface is equivalent to the default Odoo mail server, using
the same limit as if there was no outgoing mail server in place.
.. tip::
On Odoo Online, the page also shows your daily email usage and your daily limit. On Odoo.sh, you
@@ -284,10 +284,10 @@ Transfer goods
~~~~~~~~~~~~~~
*Transfers* are warehouse operations that involve the movement of goods. Examples of transfers
include
:doc:`deliveries and receipts <../../shipping_receiving/daily_operations/receipts_delivery_one_step>`,
as well as :doc:`internal transfers <../../warehouses_storage/replenishment/resupply_warehouses>`
between warehouses.
include :doc:`deliveries and receipts
<../../shipping_receiving/daily_operations/receipts_delivery_one_step>`, as well as
:doc:`internal transfers <../../warehouses_storage/replenishment/resupply_warehouses>` between
warehouses.
When creating a transfer for tracked products in the **Inventory** app, transfers modify the on-hand
quantity at each location. For example, transferring five units from the internal location
@@ -339,6 +339,42 @@ Choose :guilabel:`Use Existing ones` if only existing lot numbers can be selecte
.. _inventory/product_management/lot-traceability:
Display lots on delivery slips
==============================
When selling products tracked with lots, it is possible to include the lot numbers on the delivery
slips sent to customers. This can be helpful to customers in cases where lot numbers are needed,
such as filing an RMA or repair request, or registering the product.
To include lot numbers on delivery slips, open the :menuselection:`Inventory` app, and navigate to
:menuselection:`Configuration --> Settings`. Scroll down to the :guilabel:`Traceability` section,
tick the :guilabel:`Display Lots & Serial Numbers on Delivery Slips` checkbox, and click
:guilabel:`Save`.
After enabling the :guilabel:`Display Lots & Serial Numbers on Delivery Slips` setting, lot numbers
are listed on delivery slips for products tracked by lots, once the delivery order is validated.
To view lot numbers on delivery orders and delivery slips, navigate to the
:menuselection:`Inventory` app, click on :guilabel:`Delivery Orders`, and select an order containing
a product tracked using lots.
To view the lot numbers of products included in the order, make sure the :guilabel:`Operations` tab
is selected, then click the :icon:`oi-settings-adjust` :guilabel:`(adjust)` button to the right of
the tab. Ensure that the :guilabel:`Serial Numbers` checkbox is ticked, which causes a
:guilabel:`Serial Numbers` column to appear. The lot number(s) for each product included in the
order are displayed in this column.
When the order is ready to be processed, click :guilabel:`Validate` to confirm the delivery and add
product information to the delivery slip.
At the top of the order's form, click the :icon:`fa-cog` :guilabel:`(Actions)` button, and select
:guilabel:`Print --> Delivery Slip`. The delivery slip is then downloaded. Open the delivery slip
using the device's browser or file manager. Lot numbers are listed next to their respective products
in the :guilabel:`Lot/Serial Number` column.
.. image:: lots/delivery-slip.png
:alt: The order lines section of a delivery slip, showing a product and its serial number.
Traceability
============
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

@@ -140,8 +140,8 @@ serial number.
.. _inventory/product_management/incoming-outgoing-products:
Create serial numbers to incoming or outgoing products
------------------------------------------------------
Create serial numbers for incoming or outgoing products
-------------------------------------------------------
Serial numbers can be assigned to both incoming and outgoing goods. The receipt and delivery order
forms mirror one another; the instructions below can be followed to assign serial numbers in either
@@ -297,6 +297,43 @@ the desired serial numbers for each individual product.
When finished, click the receipt/delivery order's breadcrumbs, and the assigned serial numbers are
automatically saved.
Display serial numbers on delivery slips
========================================
When selling products tracked using serial numbers, it is possible to include the serial numbers on
the delivery slips sent to customers. This can be helpful to customers in cases where serial numbers
are needed, such as filing an RMA or repair request, or registering the product.
To include serial numbers on delivery slips, open the :menuselection:`Inventory` app, and navigate
to :menuselection:`Configuration --> Settings`. Scroll down to the :guilabel:`Traceability` section,
tick the :guilabel:`Display Lots & Serial Numbers on Delivery Slips` checkbox, and click
:guilabel:`Save`.
After enabling the :guilabel:`Display Lots & Serial Numbers on Delivery Slips` setting, serial
numbers are listed on delivery slips for products tracked by serial numbers, once the delivery order
is validated.
To view serial numbers on delivery orders and delivery slips, navigate to the
:menuselection:`Inventory` app, click on :guilabel:`Delivery Orders`, and select an order containing
a product tracked using serial numbers.
To view the serial numbers of products included in the order, make sure the :guilabel:`Operations`
tab is selected, then click the :icon:`oi-settings-adjust` :guilabel:`(adjust)` icon to the right of
the tab. Ensure that the :guilabel:`Serial Numbers` checkbox is ticked, which causes a
:guilabel:`Serial Numbers` column to appear. The serial number(s) for each product included in the
order are displayed in this column.
When the order is ready to be processed, click :guilabel:`Validate` to confirm the delivery and add
product information to the delivery slip.
At the top of the order's form, click the :icon:`fa-cog` :guilabel:`(Actions)` button, and select
:menuselection:`Print --> Delivery Slip`. The delivery slip is then downloaded. Open the delivery
slip using the device's browser or file manager. Serial numbers are listed next to their respective
products in the :guilabel:`Lot/Serial Number` column.
.. image:: serial_numbers/delivery-slip.png
:alt: The order lines section of a delivery slip, showing a product and its serial number.
Traceability & reporting
========================
@@ -4,29 +4,27 @@ Batch picking
.. _inventory/misc/batch_picking:
*Batch picking* enables a single picker to handle multiple orders at once, reducing the time needed
to navigate to the same location in a warehouse.
When picking in batches, orders are grouped and consolidated into a picking list. After the picking,
the batch is taken to an output location, where the products are sorted into their respective
delivery packages.
.. seealso::
:ref:`Use Barcode app for pickings <inventory/warehouses_storage/barcode_picking>`
*Batch picking* enables a single picker to handle multiple orders at once, reducing the number of
times needed to navigate to a warehouse location. When picking in batches, orders are grouped and
consolidated into a picking list. After the picking, the batch is taken to an output location, where
the products are sorted into their respective delivery packages.
Since orders *must* be sorted at the output location after being picked, this picking method suits
businesses with a few products that are ordered often. Storing high-demand items in easily
accessible locations can increase the number of orders that are fulfilled efficiently.
Batch picking is ideal for industries or warehouses that handle high order volumes with a stable
demand. This method increases efficiency by allowing workers to pick items for multiple orders in
one trip through the warehouse, reducing travel time and boosting productivity.
Configuration
=============
To activate the batch picking option, begin by going to :menuselection:`Inventory app -->
Configuration --> Settings`. Under the :guilabel:`Operations` section, check the :guilabel:`Batch
Transfers` box.
Configuration --> Settings`. Under the :guilabel:`Operations` section, check the :guilabel:`Batch,
Wave & Cluster Transfers` box.
.. image:: batch/batch-transfer-checkbox.png
:align: center
:alt: Enable the *Batch Transfers* in Inventory > Configuration > Settings.
Since batch picking is a method to optimize the *pick* operation in Odoo, the :guilabel:`Storage
@@ -34,29 +32,22 @@ Locations` and :guilabel:`Multi-Step Routes` options under the :guilabel:`Wareho
also be checked on this settings page. When finished, click :guilabel:`Save`.
.. image:: batch/locations-routes-checkbox.png
:align: center
:alt: Enable *Storage Locations* and *Multi-Step Routes* Inventory > Configuration > Settings.
Lastly, enable the warehouse picking feature, by navigating to the warehouse settings page, which is
accessible from :menuselection:`Inventory app --> Configuration --> Warehouses`.
From here, select the desired warehouse from the list. Then, from the radio options available for
:guilabel:`Outgoing Shipments`, select either the :guilabel:`Send goods in output and then deliver
(2 steps)` or :guilabel:`Pack goods, send goods in output and then deliver (3 steps)`.
.. seealso::
- :doc:`Delivery in two steps <../daily_operations/receipts_delivery_two_steps>`
- :doc:`../daily_operations/delivery_three_steps`
.. image:: batch/set-2-or-3-step-shipment.png
:align: center
:alt: Set up 2-step or 3-step outgoing shipments.
Create batch transfers
======================
Manually create batch transfers directly from the :menuselection:`Inventory app --> Operations -->
Batch Transfers` page. Click the :guilabel:`New` button to begin creating a batch transfer.
To manually group transfers directly from the :menuselection:`Inventory app`, hover over the
desired operation type from the :guilabel:`Inventory Overview` menu (e.g. the :guilabel:`Receipts`
Kanban card), click the :icon:`fa-ellipsis-v` :guilabel:`(vertical ellipsis)` icon, then select
:guilabel:`Prepare Batch`.
.. image:: batch/prepare-batch.png
:alt: The Inventory dashboard with the Prepare Batch option highlighted.
On the batch transfer form, fill the following fields out accordingly:
@@ -67,6 +58,11 @@ On the batch transfer form, fill the following fields out accordingly:
- :guilabel:`Scheduled Date`: specifies the date by which the :guilabel:`Responsible` person should
complete the transfer to the output location.
.. seealso::
To learn more about the :guilabel:`Dock Location`, :guilabel:`Vehicle`, and :guilabel:`Vehicle
Category` fields, see :doc:`dispatch management system
<../../shipping_receiving/setup_configuration/dispatch>`.
Next, in the :guilabel:`Transfers` list, click :guilabel:`Add a line` to open the :guilabel:`Add:
Transfers` window.
@@ -78,11 +74,10 @@ Click the :guilabel:`New` button to create a new transfer.
Once the transfer records are selected, click :guilabel:`Confirm` to confirm the batch picking.
.. example::
A new batch transfer assigned to the :guilabel:`Responsible`, `Joel Willis`, for the `Pick`
A new batch transfer is assigned to the :guilabel:`Responsible`, `Joel Willis`, for the `Pick`
:guilabel:`Operation Type`. The :guilabel:`Scheduled Date` is set to `August 11`.
.. image:: batch/batch-transfer-form.png
:align: center
:alt: View of *Batch Transfers* form.
Clicking the :guilabel:`Add a line` button opens the :guilabel:`Add:Transfers` window,
@@ -94,7 +89,6 @@ Once the transfer records are selected, click :guilabel:`Confirm` to confirm the
:guilabel:`Add:Transfers` window.
.. image:: batch/add-transfers-window.png
:align: center
:alt: Select multiple transfers from the *Add:Transfers* window.
.. _inventory/warehouses_storage/add-batch-transfers:
@@ -107,16 +101,14 @@ a list. Navigate to the :menuselection:`Inventory app --> Operations` drop-down
of the :guilabel:`Transfers` to open a filtered list of transfers.
.. image:: batch/transfers-drop-down.png
:align: center
:alt: Show all transfer types in a drop-down menu: Receipts, Deliveries, Internal Transfers,
Manufacturings, Batch Transfers, Dropships.
On the transfers list, select the checkbox to the left of the selected transfers to add in a batch.
Next, navigate to the :guilabel:`Actions ⚙️ (gear)` button, and click :guilabel:`Add to batch` from
the resulting drop-down menu.
Next, navigate to the :icon:`fa-cog` :guilabel:`Actions` button, and click :guilabel:`Add to batch`
from the resulting drop-down menu.
.. image:: batch/add-to-batch.png
:align: center
:alt: Use *Add to batch* button, from the *Action* button's list.
Doing so opens an :guilabel:`Add to batch` pop-up window, wherein the employee
@@ -125,14 +117,45 @@ Doing so opens an :guilabel:`Add to batch` pop-up window, wherein the employee
Choose from the two radio options to add to :guilabel:`an existing batch transfer` or create
:guilabel:`a new batch transfer`.
To begin with a draft, select the :guilabel:`Draft` checkbox.
Add a :guilabel:`Description` for this batch.
.. tip::
The :guilabel:`Description` field can be used to add additional information to help workers
identify the source of the batch, where to place the batch, what shipping containers to use, etc.
To create a batch to be processed at a later time, select the :guilabel:`Draft` checkbox.
Conclude the process by clicking :guilabel:`Confirm`.
.. image:: batch/add-to-batch-window.png
:align: center
:alt: Show *Add to batch* window to create a batch transfer.
Automatic batches
-----------------
Batches can be automatically created and assigned based on several criteria. The *Automatic Batches*
option is defined on the *operation type* level.
.. example::
In a multi-steps delivery process, the picking operation can be grouped by customer, while the
shipping operation can be organized by carrier and destination country.
To enable *Automatic Batches*, navigate to :menuselection:`Inventory app --> Configuration -->
Operation Types`, and select the desired operation type (e.g. :guilabel:`Delivery`,
:guilabel:`Pick`, etc). Then, select one or more :guilabel:`Batch Grouping` criteria by ticking the
appropriate checkbox. Even if more than one grouping option is selected, only one batch is created.
Batches can be automatically generated based on the following criteria:
- :guilabel:`Contact`
- :guilabel:`Carrier`
- :guilabel:`Destination Country`
- :guilabel:`Source Location`
- :guilabel:`Destination Location`
.. image:: batch/auto-batch-grouping.png
:alt: The Batch and Wave Transfers settings page with the Auto batch grouping criteria visible.
Process batch transfer
======================
@@ -157,7 +180,6 @@ Finally, select :guilabel:`Validate` to complete the picking.
However, `0.00` quantities have been picked for the other product, `Cable Management Box`.
.. image:: batch/process-batch-transfer.png
:align: center
:alt: Show batch transfer of products from two pickings in the *Detailed Operations* tab.
Only in-stock products are visible in the :guilabel:`Detailed Operations` tab.
@@ -170,12 +192,11 @@ the products that have been picked, and are ready for the next step.
.. example::
The product, `Desk Pad`, from the same batch as the :ref:`example above
<inventory/management/batch-transfers-example>`, is only visible in the :guilabel:`Operations`
tab because there are no :guilabel:`Reserved` quantities in-stock to fulfill the batch picking.
tab because there are no :guilabel:`Reserved` quantities in stock to fulfill the batch transfer.
Click the :guilabel:`Check Availability` button to search the stock again for available products.
.. image:: batch/operations-tab.png
:align: center
:alt: Show unavailable reserved quantities in the *Operations* tab.
Create backorder
@@ -186,53 +207,15 @@ On the batch transfer form, if the :guilabel:`Done` quantity of the product is *
This pop-up window provides the option: :guilabel:`Create Backorder?`.
Clicking the :guilabel:`Create Backorder` button automatically creates a new batch transfer,
containing the remaining products.
Clicking the :guilabel:`Create Backorder` button automatically creates a new batch transfer.
.. note::
When creating a new backorder, the transfers that have **not** been validated in the batch will
be removed from it.
Click :guilabel:`No Backorder` to finish the picking *without* creating another batch picking.
Click :guilabel:`Discard` to cancel the validation, and return to the batch transfer form.
.. image:: batch/create-backorder.png
:align: center
:alt: Show the *Create Backorder* pop-up.
.. _inventory/warehouses_storage/barcode_picking:
Process batch transfer: Barcode app
===================================
Created batch transfers are also listed in the :menuselection:`Barcode` app, accessible by selecting
the :guilabel:`Batch Transfers` button.
By default, confirmed batch pickings appear on the :guilabel:`Batch Transfers` page. On that page,
click on the desired batch transfer to open the detailed list of products for the picking.
.. image:: batch/barcode-batch-transfers.png
:align: center
:alt: Show list of to-do batch transfers in *Barcode* app.
For the chosen batch transfer, follow the instructions at the top of the page in the black
background. Begin by scanning the product's barcode to record a single product for picking. To
record multiple quantities, click the :guilabel:`✏️ (pencil)` icon, and enter the required
quantities for the picking.
.. note::
Products from the same order are labeled with the same color on the left. Completed pickings are
highlighted in green.
.. example::
In a batch transfer for 2 `Cabinet with Doors`, 3 `Acoustic Bloc Screens`, and 4 `Four Person
Desks`, the `3/3` and `4/4` :guilabel:`Units` indicate that the last two product pickings are
complete.
`1/2` units of the `Cabinet with Doors` has already been picked, and after scanning the product
barcode for the second cabinet, Odoo prompts the user to `Scan a serial number` to record the
unique serial number for :ref:`product tracking <inventory/product_management/enable-lots>`.
.. image:: batch/barcode-products.png
:align: center
:alt: Display products to be picked in barcode view.
Once all the products have been picked, click on :guilabel:`Validate` to mark the batch transfer as
:guilabel:`Done`.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 11 KiB

@@ -7,16 +7,17 @@ Cluster picking
.. |SO| replace:: :abbr:`SO (Sales Order)`
.. |SOS| replace:: :abbr:`SOs (Sales Orders)`
Cluster picking is an advanced order fulfillment approach derived from :ref:`batch picking
<inventory/misc/batch_picking>`.
Cluster picking is an advanced picking method that combines the efficiency of :ref:`batch picking
<inventory/misc/batch_picking>` with immediate sorting during the picking process. It is best suited
for warehouses with high order volumes where organization and speed are critical.
In this strategy, pickers load a cart with multiple packages, each designated for a specific *sales
order* (SO). Then, the picker travels to each storage location, and places the products directly in
the package of the associated order.
Unlike batch picking, which requires a separate sorting step after picking, cluster picking sorts
items directly into designated bins or containers for each *sales order* (SO). This eliminates the
need for post-picking consolidation, making it ideal for operations prioritizing speed and accuracy.
This method is most efficient for medium-sized companies, with high order volumes, and relatively
few unique products, since the method eliminates the need for sorting products into packages for
customers after picking.
Cluster picking is particularly effective in environments where immediate organization is crucial,
and orders contain a mix of items that need precise sorting during, rather than after, the picking
process.
However, cluster picking does have some disadvantages. For instance, urgent orders cannot be
prioritized, and optimized batches must be manually created beforehand. As a result, the picking
@@ -41,7 +42,6 @@ process can lead to bottlenecks.
where the packages are sealed and prepared for shipment.
.. image:: cluster/cluster-example.png
:align: center
:alt: Show example of fulfilling sales orders 2 and 3 at once.
Configuration
@@ -49,10 +49,9 @@ Configuration
To enable cluster picking, begin by navigating to :menuselection:`Inventory app --> Configuration
--> Settings`. Under the :guilabel:`Operations` heading, activate the :guilabel:`Packages` and
:guilabel:`Batch Transfers` options.
:guilabel:`Batch, Wave & Cluster Transfers` options.
.. image:: cluster/configs.png
:align: center
:alt: Activate *Packages* and *Batch Transfers* features in the settings.
Since batch picking is used to optimize the *pick* operation in Odoo, the :guilabel:`Storage
@@ -65,7 +64,6 @@ also be checked on this settings page.
When finished, click :guilabel:`Save`.
.. image:: cluster/locations-routes-checkbox.png
:align: center
:alt: Enable *Storage Locations* and *Multi-Step Routes* Inventory > Configuration > Settings.
.. _inventory/misc/create-package:
@@ -73,8 +71,9 @@ When finished, click :guilabel:`Save`.
Packages setup
--------------
After the :guilabel:`Packages` feature is enabled, navigate to :menuselection:`Inventory app -->
Products --> Packages`, and click the :guilabel:`New` button to create a new package.
To configure the containers to be used during the picking process, navigate to
:menuselection:`Inventory app --> Products --> Packages`. Click the :guilabel:`New` button to create
a new package.
On the new package form, the :guilabel:`Package Reference` is pre-filled with the next available
`PACK` number in the system. :guilabel:`Pack Date` is automatically set to the creation date of the
@@ -88,37 +87,17 @@ Set the :guilabel:`Package Use` field to :guilabel:`Reusable Box`.
.. example::
A package intended for cluster picking is named `CLUSTER-PACK-3` for easy identification. For
this workflow, the products are directly packed using their intended shipping boxes, so
:guilabel:`Package Use` is set to :guilabel:`Disposable Box`.
:guilabel:`Package Use` is set to :guilabel:`Reusable Box`.
.. image:: cluster/cluster-package.png
:align: center
:alt: Create new package form.
Create cluster batch
====================
To see how cluster picking works in Odoo, navigate to the :menuselection:`Sales` app, and create
|SOS| that will be fulfilled together in the same batch. After confirming an |SO|, the
:guilabel:`Delivery` smart button becomes visible. Displayed inside the icon is a number
representing the amount of steps in the outgoing shipment process.
.. example::
Begin by creating three |SOS| for the apples, oranges, and bananas, as shown in the :ref:`example
above <inventory/misc/cluster_picking/example>`.
After confirming the |SO|, the :guilabel:`Delivery` smart button displays the number `2`,
indicating there are two operations to complete: `Pick` and `Delivery`.
.. image:: cluster/create-sales-order.png
:align: center
:alt: Example sales order for an apple, orange, and banana.
With the |SOS| created, orders now must be grouped into batches. To do so, navigate to the
*Inventory* dashboard and select the operation type card, :guilabel:`Delivery Orders` or
:guilabel:`Pick` (whichever is the first operation in the delivery flow).
Doing so displays a filtered list of outgoing operations with the :guilabel:`Ready` status,
indicating that all the products in the |SO| are in stock.
To create a cluster, navigate to :menuselection:`Inventory app` and select the operation type card,
:guilabel:`Delivery Orders` or :guilabel:`Pick` (whichever is the first operation in the delivery
flow).
.. note::
Cluster pick batches can be created for outgoing shipments in one, two, or three steps.
@@ -129,8 +108,8 @@ indicating that all the products in the |SO| are in stock.
- :doc:`Delivery in three steps <../daily_operations/delivery_three_steps>`
Click the checkbox to the left of the corresponding outgoing operation to add them to the batch.
With the desired pickings selected, click the :guilabel:`⚙️ Actions (gear)` button, and select the
:guilabel:`Add to batch` option from the resulting drop-down menu.
With the desired pickings selected, click the :icon:`fa-cog` :guilabel:`Actions` button, and select
the :guilabel:`Add to batch` option from the resulting drop-down menu.
.. example::
To create a cluster batch, as shown in the :ref:`example above
@@ -142,7 +121,6 @@ With the desired pickings selected, click the :guilabel:`⚙️ Actions (gear)`
- `WH/PICK/00009`: linked to |SO| 90 for one apple, orange, and banana.
.. image:: cluster/select-picks.png
:align: center
:alt: Use *Add to batch* button, from the *Action* button's list.
Doing so opens an :guilabel:`Add to batch` pop-up window, wherein the employee
@@ -151,13 +129,18 @@ Doing so opens an :guilabel:`Add to batch` pop-up window, wherein the employee
Choose from the two options in the :guilabel:`Add to` field to either: add to :guilabel:`an existing
batch transfer`, or create :guilabel:`a new batch transfer`.
Then, add a :guilabel:`Description` for this batch.
.. tip::
The :guilabel:`Description` field can be used to add additional information to help workers
identify the source of the batch, where to place the batch, what shipping containers to use, etc.
To create draft batch pickings to be confirmed at a later date, select the :guilabel:`Draft`
checkbox.
Conclude the process by clicking :guilabel:`Confirm`.
.. image:: cluster/add-to-batch-window.png
:align: center
:alt: Show *Add to batch* window to create a batch transfer.
Process batches
@@ -168,73 +151,17 @@ Click on a batch to select it.
In the :guilabel:`Detailed Operations` tab, products that are to be picked are grouped by location.
Under the :guilabel:`Source Package` or :guilabel:`Destination Package` field, enter the package
used for the picking.
.. note::
Use the :guilabel:`Source Package` field when the picking package is configured as *reusable* on
the :ref:`package form <inventory/misc/create-package>`. This means the products are temporarily
placed in a container during picking, before getting transferred to their final shipping box.
Alternatively, use the :guilabel:`Destination Package` field when the product is directly placed
in its *disposable* shipping box during picking.
Set the :guilabel:`Destination Package` to the package dedicated to that particular order.
.. example::
Process the cluster batch for the three orders of apples, oranges, and bananas :ref:`example
<inventory/misc/cluster_picking/example>` by assigning each picking to a dedicated package.
At the storage location for apples, `WH/Stock/Shelf A`, assign the apples in all three pickings
to one of the three disposable packages, `CLUSTER-PACK-1`, `CLUSTER-PACK-2`, or `CLUSTER-PACK-3`.
to one of the three reusable packages, `CLUSTER-PACK-1`, `CLUSTER-PACK-2`, or `CLUSTER-PACK-3`.
Record this in Odoo using the :guilabel:`Destination Package` field in the :guilabel:`Detailed
Operations` tab.
.. image:: cluster/cluster-batch-example.png
:align: center
:alt: Example of processing cluster pickings in *Inventory*.
In Barcode
----------
To process cluster pickings directly from the *Barcode* app, select the :guilabel:`Batch Transfers`
button from the *Barcode* dashboard. Then, select the desired batch.
On the batch transfer screen, the products in the picking are grouped by location, and each line is
color-coded to associate products in the same picking together.
Then, follow the prompt to :guilabel:`Scan the source location` barcode for the storage location of
the first product. Then, scan the barcode for the product and package to process the transfer.
Repeat this for all products, and click the :guilabel:`Validate` button.
.. note::
To find the package barcode, navigate to :menuselection:`Inventory app --> Products -->
Packages`, select the desired package, click the :guilabel:`⚙️ (gear)` icon at the top of the
package form, and select the :guilabel:`Print` option.
Next, select one of the three print options to generate the package barcode from the
:guilabel:`Package Reference` field.
.. image:: cluster/find-package-barcode.png
:align: center
:alt: Display where the package barcode can be generated.
.. example::
Begin processing the cluster picking by going to the first storage location, `Shelf A`, and
scanning the :ref:`location barcode <barcode/setup/location>`. Doing so highlights all the
pickings that need products from this particular location.
Scan the barcode for the apple, which highlights the picking (labeled in red) for the product
`Apple`, for the picking, `WH/PICK/00007`.
Then, scan the `CLUSTER-PACK-1` package barcode, and place the product in the designated package.
.. image:: cluster/batch-barcode.png
:align: center
:alt: Example of cluster batch from the *Barcode* app.
.. tip::
After creating a batch transfer and assigning a package to a picking, Odoo suggests the specified
package by displaying the name *in italics* under the product name, ensuring pickers place
products into the correct boxes.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 12 KiB

@@ -1,68 +1,137 @@
======================
Process wave transfers
======================
==============
Wave transfers
==============
While a batch transfer is a group of several pickings, a **wave transfer** only contains some parts
of different pickings. Both methods are used to pick orders in a warehouse, and depending on the
situation, one method may be a better fit than the other.
.. |SO| replace:: :abbr:`SO (sales order)`
To handle orders of a specific product category, or fetch products that are at the same location,
wave transfers are the ideal method.
While a batch transfer is a group of several pickings, a **wave transfer** contains certain parts
of different pickings. In Odoo, wave transfers are batch transfers with an extra step: transfers are
split before being grouped in a batch.
In Odoo, wave transfers are actually batch transfers with an extra step: transfers are split before
being grouped in a batch.
Wave picking is ideal for warehouses that need to optimize the handling of high order volumes while
managing complex picking criteria. With wave transfers, orders are grouped into waves based on
factors like product location, category, or scheduled shipping times. Each wave is assigned to a
different employee for the most efficient execution.
Wave picking is particularly useful for operations where multiple sales orders (SOs), or a single
order, must be picked across different waves. This approach enables flexible scheduling, allowing
warehouses to align picking activities with shipping deadlines, or resource availability.
.. example::
#. |SO| 1 calls for one apple and one orange
#. |SO| 2 calls for one apple and one banana
#. |SO| 3 calls for one apple, one orange, and two bananas
Apples are stored in Shelf A, oranges in Shelf B, and bananas in Shelf C. A warehouse employee is
assigned to the wave, and is provided with the following instructions:
- Shelf A: Pick three apples. Place them into a central cart designated for the wave.
- Shelf B: Pick two oranges. Add them to the same cart.
- Shelf C: Pick three bananas. Add them to the cart.
The employee then takes the cart to the sorting/packing station. Items are then sorted and packed
into individual orders.
Configuration
=============
Before a wave transfer can be created, the :guilabel:`Batch Transfers` and :guilabel:`Wave
Transfers` options must be activated.
First, go to :menuselection:`Inventory --> Configuration --> Settings`. In the
:guilabel:`Operations` section, enable :guilabel:`Batch Transfers` and :guilabel:`Wave Transfers`.
Then, click :guilabel:`Save` to apply the settings.
To enable wave picking, begin by navigating to :menuselection:`Inventory --> Configuration -->
Settings`. In the :guilabel:`Operations` section, tick the :guilabel:`Batch, Wave & Cluster
Transfers` checkbox to enable the setting.
.. image:: wave/wave-transfers-setting.png
:align: center
:alt: View of Odoo Inventory app settings to enable the wave transfers option.
Add products to a wave
======================
Next, the :guilabel:`Storage Locations` and :guilabel:`Multi-Step Routes` options, under the
:guilabel:`Warehouse` heading, must also be checked on this settings page.
Now that the settings are activated, start a wave transfer by adding products to a wave.
*Storage locations* allow products to be stored in specific locations they can be picked from, while
*multi-step routes* enable the picking operation itself.
Then, click :guilabel:`Save` to save the changes.
Create a wave
=============
Wave transfers can only contain product lines from transfers of the same operation type. To view
all the transfers and product lines in a specific operation, first go to the :guilabel:`Inventory`
dashboard and locate the desired operation type's card. Then, open the options menu (the three dots
icon in the corner of the operation type's card) and click :guilabel:`Operations`.
all the transfers and product lines in a specific operation, navigate to the
:menuselection:`Inventory app`. Find the desired Kanban card, then click the :icon:`fa-ellipsis-v`
:guilabel:`(vertical ellipsis)` icon to open the options menu. Under :guilabel:`New`, click
:guilabel:`Prepare Wave`.
.. image:: wave/list-of-operations.png
:align: center
:alt: How to get an operation type's list of operations.
On the operations page, select the product lines you want to add in a new or existing wave. Then,
click :guilabel:`Add to Wave`.
Create a new wave
-----------------
On the :guilabel:`Prepare Wave` pop-up, stock moves lines are grouped by source location. Select the
checkboxes for the product lines that should be added. Then, click :guilabel:`Add to Wave`.
.. image:: wave/select-lines.png
:align: center
:alt: Select lines to add to the wave.
.. tip::
Use the :guilabel:`Filters` in the search bar to group lines with the same product, location,
carrier, etc...
carrier, etc.
After that, a pop-up box appears.
Add products to an existing wave
--------------------------------
To add the selected lines to an existing wave transfer, select the :guilabel:`an existing wave
transfer` option and select the existing wave transfer from the drop-down menu.
To add products to an existing wave, navigate to :menuselection:`Inventory --> Operations --> Wave
Transfers`. Click on the appropriate wave from the list to open it.
To create a new wave transfer, select the :guilabel:`a new wave transfer` option. If creating a new
wave transfer, an employee can also be set in the optional :guilabel:`Responsible` field. Once the
desired options are selected, click :guilabel:`Confirm` to add the product lines to a wave.
Under the :guilabel:`Detailed Operations` tab, click :guilabel:`Add a line`. Then, in the
:guilabel:`Product` field, search for the desired product.
View wave transfers
===================
Process a wave
==============
To view all wave transfers and their statuses, go to :menuselection:`Inventory --> Operations -->
Wave Transfers`. Wave transfers can also be viewed in the :guilabel:`Barcode` app by going to
:menuselection:`Barcode --> Batch Transfers`.
Wave Transfers`. Click on the appropriate wave from the list to open it.
To assign the wave to a specific employee, click the :guilabel:`Responsible` field and select the
appropriate name from the drop-down list.
To designate a :ref:`Dock location <inventory/shipping_receiving/docks>`, select an option from the
drop-down menu in the :guilabel:`Docks Location` field.
.. note::
The :doc:`dispatch management system <../../shipping_receiving/setup_configuration/dispatch>`
feature in Odoo is used to plan and build shipments. Assigning batches to loading docks ensures
the right products are pack into the appropriate trucks for delivery.
Select a :guilabel:`Vehicle` from the drop-down. Making a selection in this field automatically
updates the :guilabel:`Vehicle Category` field.
Enter a :guilabel:`Description` for this wave, if desired.
.. note::
The :guilabel:`Description` field is automatically generated for :ref:`automatic waves
<inventory/shipping_receiving/auto-waves>`.
.. _inventory/shipping_receiving/auto-waves:
Automatic waves
===============
Waves can be automatically created and assigned based on different criteria. The *Automatic Batches*
option is defined on the *operation type* level, which enables the creation of waves with distinct
grouping criteria for each operation type.
To enable *Automatic Batches*, navigate to :menuselection:`Inventory app --> Configuration -->
Operation Types`, and select the desired operation type (e.g. :guilabel:`Delivery`,
:guilabel:`Pick`, etc). Under the :guilabel:`Batch & Wave Transfers` heading, tick the
:guilabel:`Automatic Batches` checkbox.
Then, select one or more :guilabel:`Wave Grouping` criteria by ticking the appropriate checkbox.
Even if more than one grouping option is selected, only one wave is created.
Automatic waves can be created based on the following criteria:
- :guilabel:`Product`: Split transfers by product, then group transfers that have the same product.
- :guilabel:`Product Category`: Split transfers by product category, then group transfers that have
the same product category.
.. image:: wave/auto-wave-grouping.png
:alt: The Automatic batches feature with the wave grouping option for product category selected.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 13 KiB

@@ -74,6 +74,21 @@ a form to provide details about the shipping provider, including:
- :guilabel:`Free if order amount is above`: checking this box enables free shipping if the customer
spends above the specified amount.
.. _inventory/shipping_receiving/availability:
Use the :guilabel:`Availability` tab to define conditions for the delivery method based on the
orders content or destination:
- :guilabel:`Countries`: Specify one or more countries where the method is available.
- :guilabel:`Max Weight`: Set a maximum weight; the method is only available for orders below
this limit.
- :guilabel:`Max Volume`: Set a maximum volume; the method is only available for orders below
this limit.
- :guilabel:`Must Have Tags`: The method is available only if at least one product in the order
has one of these tags.
- :guilabel:`Excluded Tags`: The method is unavailable if at least one product in the order has
one of these tags.
For examples on how to configure specific shipping methods, refer to the sections below.
.. _inventory/shipping/fixed:
@@ -40,7 +40,6 @@ A *delivery slip* contains recipient and package details, usually placed inside
package.
.. seealso::
- :ref:`Picking list <inventory/warehouses_storage/barcode_picking>`
- :doc:`Tracking label <../setup_configuration/labels>`
After :ref:`enabling the Delivery Slip setting <inventory/shipping_receiving/print_setup>` in the
@@ -1,98 +1,227 @@
======================
Inventory aging report
======================
=========================
Stock valuation dashboard
=========================
.. |SVLs| replace:: :abbr:`SVLs (stock valuation layers)`
The inventory aging report evaluates all items in stock, providing insights into potentially sunken
purchase costs and delays in profitability.
When a company has physical assets, such as inventory, they often want to know approximately how
much has been spent on these goods, or how much they are worth at the moment. This process of
assigning a monetary value to account for inventory is known as *stock valuation*.
Create customized pivot tables to analyze product, operation types, month, or company breakdowns.
This helps identify products in stock that are at risk of passing their expiration or viability
dates, or instances of rot/decay for fast-expiring items.
This value is often reported for accounting purposes. For instance, an insurance company may want to
know the value of goods stored in a warehouse, in the event of a flood or fire.
:doc:`Stock valuation <../../product_management/inventory_valuation/using_inventory_valuation>`
typically utilizes one of two accounting systems:
- **Perpetual**: The inventory is constantly (perpetually) being updated, and the value is
constantly changing.
- **Periodic**: The inventory value is checked on an occasional (periodic) basis, and the value is
set at this occasional time.
Using :ref:`tracked inventory <inventory/product_management/tracking-inventory>` in Odoo
necessitates a *perpetual* inventory accounting system because of the need to know when and where
inventory exists, and how much of it is available or forecasted. There are a few common :ref:`stock
valuation methods <inventory/warehouses_storage/costing_methods>` used in Odoo: *standard price*,
*average cost* (AVCO), and *first in, first out* (FIFO) accounting. It is important to know that the
valuation method chosen for a product impacts the calculation of several fields in the stock
valuation reports.
Open the dashboard
==================
Odoo's *Stock Valuation* dashboard displays the financial value of all tracked inventory, according
to each product's stock valuation method. This report can provide insights into potential issues in
the supply chain, such as sunken purchase costs or delays in profitability. To access the dashboard,
go to :menuselection:`Inventory app --> Reporting --> Valuation`.
.. important::
The :menuselection:`Reporting`` menu in **Inventory** is only accessible to users with
:doc:`admin access <../../../../general/users/access_rights>`.
This dashboard has three different views, or inventory reports — :ref:`list view
<inventory/warehouses_storage/valuation-report>` (i.e. the default stock valuation report),
:ref:`pivot view <inventory/warehouses_storage/aging-report>` (i.e. the stock aging report), and
:ref:`graph view <inventory/warehouses_storage/graph-view>`. Each view can be customized with
different fields to break down inventory valuation by product, operation type, date, or company.
All three views can be filtered by various fields. To apply filters, click into the search bar at
the top of the report, or click the drop-down arrow next to it. For example, selecting the filter
:guilabel:`Has Remaining Qty` will show only products that are currently in stock.
.. _inventory/warehouses_storage/valuation-report:
List view: stock valuation
==========================
By default, the :guilabel:`Stock Valuation` dashboard displays in *list view*, represented by the
:icon:`oi-view-list` :guilabel:`(list)` icon. This report shows a detailed record of stock movements
and their valuations.
Configure
---------
The following columns are displayed by default:
- :guilabel:`Date`: the date and time when the :ref:`stock move <inventory/warehouses_storage/svl>`
was created. The valuation report is sorted by this field by default, emphasizing the importance
of time when valuing inventory. To sort the report by a different column, simply click on the
column title.
- :guilabel:`Reference`: the reference document associated with this stock move (e.g., a warehouse
receipt, a delivery order, or a manual inventory adjustment).
- :guilabel:`Product`: the product that is being moved and valued.
- :guilabel:`Quantity`: the number of units by which this product's stock has increased or
decreased in this particular stock move.
- :guilabel:`Total Value`: the value of the product's stock in this particular stock move,
calculated by multiplying the :guilabel:`Quantity` and :guilabel:`Unit Value`.
.. note::
The *Reporting* menu in *Inventory* is only accessible to users with :doc:`admin access
<../../../../general/users/access_rights>`.
If a :guilabel:`Reference` document includes several goods, there will be a separate line item
generated on the report for each good.
To access the inventory aging report, go to :menuselection:`Inventory app --> Reporting -->
Inventory Aging`.
There are additional fields that can be added to this view to provide more insight into the stock's
valuation. To add fields, click the :icon:`oi-settings-adjust` :guilabel:`(adjust)` icon, and select
the desired fields:
- :guilabel:`Lot/Serial Number`: the uniquely identifying lot or serial number for this product.
- :guilabel:`Company`: for businesses that operate with multiple companies, this field displays the
company by which this stock move took place.
- :guilabel:`Remaining Quantity`: the number of units remaining for this valuation of the product,
after demand has been accounted for (even from other stock moves). This field can be especially
helpful for :abbr:`FIFO (First In, First Out)` and :abbr:`AVCO (Average Cost)` accounting, as it
conveys which units of stock came into a warehouse first and the value of said stock.
- :guilabel:`Unit Value`: the cost of one unit of the product for the company (**not** the price to
consumers).
- :guilabel:`Description`: a description of the reason for this stock valuation (typically, a stock
move has occurred). By default, this field is set as the concatenation of the
:guilabel:`Reference` and :guilabel:`Product` fields. However, the field may also display other
important messages for this line item, such as a note stating that the line item is an adjustment
due to a change in the product's inventory valuation method.
- :guilabel:`Remaining Value`: the value of this product's current stock levels for this particular
stock move, after demand has been accounted for. Along with :guilabel:`Remaining Quantity`, this
field can be especially helpful for :abbr:`FIFO (First In, First Out)` and
:abbr:`AVCO (Average Cost)` accounting, as they convey which stock came into a warehouse first and
the value of said stock.
.. tip::
Some of these settings may not appear unless first enabled in Odoo's **:doc:`Settings
<../../../general>`** application.
.. image:: aging/stock-valuation-report.png
:alt: Stock valuation report.
.. _inventory/warehouses_storage/svl:
Stock valuation layers (SVLs)
-----------------------------
Each line item in the :guilabel:`Stock Valuation` report represents a record in Odoo's system known
as a *stock valuation layer (SVL)*. :abbr:`SVLs (stock move layers)` are generated when products
move in a way that impacts their stock valuation. Specifically, the stock moves that generate
:abbr:`SVLs (stock move layers)` are warehouse receipts, deliveries, dropshipping orders, and
dropshipping returns. These stock moves must first be validated (by clicking the
:guilabel:`Validate` button) for the :abbr:`SVL (stock move layer)` to be created.
If a product's inventory valuation method changes on the product form, new line items are generated
on the :guilabel:`Stock Valuation` report to reflect the resulting :abbr:`SVLs (stock move layers)`.
For example, if the valuation method changes from *standard price* to either :abbr:`AVCO (Average
Cost)` or :abbr:`FIFO (First In, First Out)` accounting, *revaluation entries* will be
automatically posted to reflect the change in pricing for goods that remain in stock. One entry will
be negative to "remove" the old pricing, and the second entry will be positive to record the new
pricing. These entries are connected to journal entries in Odoo's **Accounting** app.
Below is an example of what the :guilabel:`Stock Valuation` table shows when a few stock moves have
occurred for a product using standard price accounting.
.. image:: aging/before-val-method-change.png
:alt: Stock valuation table in standard price accounting.
Conversely, the following image depicts what the *Stock Valuation* Report table might look like
after a product has switched from standard price to :abbr:`FIFO (First In, First Out)` accounting.
.. image:: aging/after-val-method-change.png
:alt: Stock valuation table after switching from standard price to FIFO accounting.
.. example::
The :guilabel:`Remaining Value` and :guilabel:`Remaining Quantity` fields are derived from what
occurs at the :abbr:`SVL (stock move layer)` level in Odoo and, as such, are better understood
with an example.
Frankie's Consignment Shop buys sweaters at the cost, or :guilabel:`Unit Value`, of `5.00`
dollars. For the first time, Frankie's purchases and receives a :guilabel:`Quantity` of `100.00`
sweaters in one stock move, then re-sells and delivers `-10.00` sweaters in a second stock move.
In the first stock move line item, the :guilabel:`Remaining Quantity` will change from `100.00`
to `90.00`, once the second stock move is recorded. This change reflects that, although 100
sweaters were originally purchased, only 90 of those sweaters remain in stock and should be
counted in the valuation. Similarly, the :guilabel:`Remaining Value` will drop from `$500.00` to
`$450.00`. The :guilabel:`Total Value` will remain at `$500.00`, regardless of subsequent
transactions.
On the other hand, the :guilabel:`Remaining Quantity` of the second stock move line item will be
recorded and remain at `0.00` because the quantity of `-10.00` was sold. In the system, because
the :abbr:`SVL (stock move layer)` was a sale, there is no stock left that needs to be valued
from that transaction.
.. image:: aging/remaining-val-quant.png
:alt: Remaining value and quantity are calculated based on :abbr:`SVLs (stock move layers)`.
Change the valuation date
-------------------------
To see the valuation of stock moves at a specific date and time, click the :guilabel:`Valuation At
Date` button, located in the top-left corner of the :guilabel:`Stock Valuation` page. The report
will show the :guilabel:`Quantity` and :guilabel:`Total Value` of each stock move.
.. note::
The :guilabel:`Remaining Quantity` and :guilabel:`Remaining Value` of the stock moves will *not*
be point-in-time for any dates chosen in the past. The stock moves shown when selecting a past
date will still display the *current on-hand quantity and value* of the products.
.. example::
A business has 100 sofas in stock on January 1st and sells 20 of those sofas on February 1st. The
:guilabel:`Remaining Quantity` of the :abbr:`SVL (stock move layer)` will drop from `100.00` to
`70.00` on February 1st. If no other stock moves take place, and on February 1st, the
:guilabel:`Valuation at Date` is selected as January 1st, the :guilabel:`Remaining Quantity`
will still show as `70.00`.
.. _inventory/warehouses_storage/aging-report:
Navigate the inventory aging report
===================================
Pivot view: stock aging
=======================
By default, the :guilabel:`Inventory Aging` report displays a pivot table, with the month in
columns, and product category in rows. The default filters, :guilabel:`Incoming` and :guilabel:`Has
Remaining Qty`, show only products from receipts, and are currently in stock.
From the :guilabel:`Stock Valuation` dashboard, access pivot view by clicking the
:icon:`oi-view-pivot` :guilabel:`(pivot)` icon. This view is essentially a *stock aging report*, and
it shows the on-hand quantity and value of inventory by purchase date, which can help monitor
products with expiration dates.
:guilabel:`Remaining Qty` displays the number of on-hand items, and :guilabel:`Remaining Value`
displays the total cost of purchasing these items.
Configure
---------
Clicking the :icon:`fa-plus-square` :guilabel:`(plus)` icon in each column or row reveals options to
expand the pivot table and show a detailed breakdown of the :guilabel:`Remaining Qty` and
:guilabel:`Remaining Value` by :guilabel:`Product`, :guilabel:`Product Category`, :guilabel:`Date`,
or :guilabel:`Company`. Clicking the :icon:`fa-minus-square-o` :guilabel:`(minus)` icon collapses it
back to its previous state.
By default, the pivot view shows the value of all *product categories* by *day and month*. Clicking
the :icon:`fa-plus-square` :guilabel:`(plus)` icon in each column or row will reveal a drop-down
list of options to create a more granular breakdown of the inventory valuation. The drop-down
options include: :guilabel:`Product`, :guilabel:`Lot/Serial Number`, :guilabel:`Product Category`,
:guilabel:`Date`, :guilabel:`Company`, or :guilabel:`Add Custom Group` Clicking the
:icon:`fa-minus-square-o` :guilabel:`(minus)` icon collapses the field back to an empty state.
.. figure:: aging/inventory-aging.png
:align: center
:alt: Inventory aging report.
In the table, the :guilabel:`Remaining Qty` column displays the number of on-hand items, and
:guilabel:`Remaining Value` displays the total cost of purchasing these items.
Inventory aging report, showing each **Product** in rows and each reception **Date** in columns,
to better monitor products with fast expiration dates. Each row shows the the total on-hand
quantity and inventory valuation of items purchased on each day.
.. image:: aging/stock-aging-report.png
:alt: Stock aging report, showing product row items and day columns.
.. note::
Records in the :guilabel:`Inventory Aging` report are *stock valuation layers* (SVLs),
representing product moves that impact stock valuation.
.. _inventory/warehouses_storage/graph-view:
Inventory adjustments do **not** create |SVLs|; only items purchased from vendors do.
Graph view
==========
Generate reports
================
The stock value can be depicted graphically by clicking the :icon:`fa-area-chart`
:guilabel:`(graph)` icon. By default, the graph is displayed in :icon:`fa-line-chart` line chart
view and filtered to show the cumulative total of all inventory value over time in Odoo.
After learning how to :ref:`navigate the inventory aging report
<inventory/warehouses_storage/aging-report>`, it can be used to create and share different reports.
A few common reports that can be created using the :guilabel:`Inventory Aging` report are detailed
below.
Rotating stock report
---------------------
To create a report to identify items that have been in stock for a while, follow these steps:
#. Navigate to :menuselection:`Inventory app --> Reporting --> Inventory Aging`.
#. On the :guilabel:`Inventory Aging` report, click the :icon:`fa-caret-down` :guilabel:`(caret
down)` icon in the :guilabel:`Search...` bar to see a drop-down list of :guilabel:`Filters`,
:guilabel:`Group By`, and :guilabel:`Favorite` options.
#. Choose :guilabel:`Product` under the :guilabel:`Group By` section. Doing so expands the pivot
table to show a product in each row.
#. Click the :icon:`fa-plus-square` :guilabel:`(plus)` icon to the left of the date column. Hover
over :guilabel:`Date` from the drop-down menu and choose :guilabel:`Year`, :guilabel:`Quarter`,
:guilabel:`Month`, :guilabel:`Week`, or :guilabel:`Day`. Doing so expands the columns to show the
:guilabel:`Remaining Qty` and :guilabel:`Remaining Value` by the selected time period.
.. tip::
For products that have a longer shelf life, choose longer time periods such as
:guilabel:`Month` or :guilabel:`Quarter` when expanding columns by :guilabel:`Date`.
.. image:: aging/column-expand-icon.png
:align: center
:alt: Pivot table, highlighting the plus icon to expand columns.
#. The report now displays the on-hand stock of items, and their total purchasing cost, for each
time period.
.. example::
Inventory aging report, with the :guilabel:`Group By`: :guilabel:`Product` option selected,
and with the :guilabel:`Date` column set to :guilabel:`Day`. It gives insight into how much
raw fish sashimi products were purchased on each day, and how much it cost. This informs the
business owners how much stock is at risk of rotting in stock, per day.
.. image:: aging/inventory-aging.png
:align: center
:alt: Inventory aging report, showing product row items and day columns.
At the top of the report, a :icon:`fa-bar-chart` bar chart or :icon:`fa-pie-chart` pie chart view
can be selected instead.
.. seealso::
:doc:`Odoo reporting essentials <../../../../essentials/reporting>`
Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

@@ -15,3 +15,4 @@ Workflows
workflows/unbuild_orders
workflows/byproducts
workflows/continuous_improvement
workflows/manufacture_lots_serials
@@ -0,0 +1,137 @@
========================================
Manufacture with lots and serial numbers
========================================
.. |MO| replace:: :abbr:`MO (Manufacturing Order)`
.. |MOs| replace:: :abbr:`MOs (Manufacturing Orders)`
In Odoo, *lot numbers* and *serial numbers* are used to identify and track products in Odoo. Serial
numbers are used to assign unique numbers to individual products, while lot numbers are used to
assign a single number to multiple units of a specific product.
When manufacturing products tracked using lots or serial numbers, Odoo requires the lot or serial
number to be assigned to each product before manufacturing can be completed. This ensures that each
product is properly tracked from the moment it enters inventory.
Configure products for tracking
===============================
By default, Odoo tracks the quantity of each product on hand, but does not track individual units of
a product. Lot or serial number tracking must be enabled for each product individually.
To track a product using lots or serial numbers, begin by navigating to :menuselection:`Inventory
--> Configuration --> Settings`, then scroll down to the :guilabel:`Traceability` section, and tick
the :guilabel:`Lots & Serial Numbers` checkbox. Finally, click :guilabel:`Save` to save the change.
Next, click on :menuselection:`Products --> Products`, and select a product to track. Make sure the
:guilabel:`Track Inventory` checkbox is ticked in the :guilabel:`General Information` tab. Since lot
and serial number functionality is enabled, a drop-down menu appears next to the ticked checkbox.
Click on the :guilabel:`Track Inventory` drop-down menu. By default, :guilabel:`By Quantity` is
selected, which only tracks the quantity on hand. Select :guilabel:`By Lots` to track the product
using lot numbers, or :guilabel:`By Unique Serial Number` to track the product using serial numbers.
.. seealso::
:doc:`Lots <../../inventory/product_management/product_tracking/lots>`
:doc:`Serial numbers <../../inventory/product_management/product_tracking/serial_numbers>`
Lot number manufacturing
========================
To manufacture a product tracked with lots, begin by navigating to :menuselection:`Manufacturing -->
Operations --> Manufacturing Orders`. Click :guilabel:`New` to create a new manufacturing order
(MO).
In the :guilabel:`Product` field, select a product tracked using lots, and enter the desired
:guilabel:`Quantity`. Click :guilabel:`Confirm` to confirm the |MO|.
Once the |MO| is confirmed, a :guilabel:`Lot/Serial Number` field appears in the top section of the
|MO| form. By default, this field is empty.
To populate the :guilabel:`Lot/Serial Number` field with a lot number, click the
:icon:`fa-plus-square-o` :guilabel:`(plus)` icon to the right of the field. Doing so automatically
generates a lot, using the next available number, and enters it in the field.
Alternatively, click on the :guilabel:`Lot/Serial Number` field and select an existing lot number,
or manually enter a new lot number and click :guilabel:`Create "#"` in the drop-down menu.
.. image:: manufacture_lots_serials/lot-sn-field.png
:alt: The "Lot/Serial Number" field on an MO.
Either of these methods assign the product(s) in the |MO| a lot number before production is
finished. It is also possible to complete production and close the |MO| by clicking
:guilabel:`Produce All`, without assigning a lot number. Doing so automatically generates and
assigns a lot, using the next available number.
Serial number manufacturing
===========================
To manufacture a product tracked with serial numbers, begin by navigating to
:menuselection:`Manufacturing --> Operations --> Manufacturing Orders`. Click :guilabel:`New` to
create a new |MO|.
In the :guilabel:`Product` field, select a product tracked using serial numbers, and enter the
desired :guilabel:`Quantity`. Click :guilabel:`Confirm` to confirm the |MO|.
Once the |MO| is confirmed, a :guilabel:`Lot/Serial Number` field appears in the top section of the
|MO| form. By default, this field is empty.
The rest of the manufacturing process depends on how many units the |MO| contains.
Manufacture single unit
-----------------------
If a single unit of the product is being manufactured, clicking :guilabel:`Produce All` closes the
|MO|, and automatically generates and assigns the next available serial number, which appears in the
:guilabel:`Lot/Serial Number` field.
To assign a serial number without closing the |MO|, enter a number manually in the
:guilabel:`Lot/Serial Number` field, and click :guilabel:`Create "#"`, or click the
:icon:`fa-plus-square-o` :guilabel:`(plus)` icon to the right of the field to auto-fill it with the
next available number.
.. image:: manufacture_lots_serials/lot-sn-field.png
:alt: The "Lot/Serial Number" field on an MO.
Manufacture multiple units
--------------------------
.. important::
When manufacturing a product tracked using serial numbers, an |MO| can be created for multiple
units. However, when serial numbers are assigned to each unit, either at the end of production or
before, the |MO| is split into multiple |MOs|, each containing one unit of the product.
Each of the split |MOs| is identified by a numerical tag added to the end of the original |MO|
number.
.. example::
|MO| `WH/MO/00109` contains two units of a `Chair`, a product tracked using serial numbers. A
serial number is assigned to each unit of the chair. This causes the |MO| to be split into two
|MOs|, each containing one unit of the chair. The |MOs| are titled `WH/MO/00109-001` and
`WH/MO/00109-002`.
To assign serial numbers to each unit of an |MO|, click :guilabel:`Produce All` to open the
:guilabel:`Batch Production` pop-up window.
The :guilabel:`First Lot/SN` field of the pop-up window is auto-filled with the next available
serial number. The :guilabel:`Number of SN` field defaults to the number of units being
manufactured. The values of either field can be changed manually.
Click :guilabel:`Generate` to generate the specified number of serial numbers, beginning with the
number entered in the :guilabel:`First Lot/SN` field. The serial numbers are displayed in the text
box at the bottom of the pop-up window, and can be manually changed after generation.
To assign serial numbers without completing production, click the :guilabel:`Prepare MO` button.
Doing so splits the |MO| into individual |MOs|, one for each unit in the original |MO|. Each |MO| is
left open, and can be closed individually.
To assign serial numbers and complete production, click the :guilabel:`Produce` button. Doing so
splits the |MO| into individual |MOs|, one for each unit in the original |MO|. All of the |MOs| are
closed, since production is complete.
.. image:: manufacture_lots_serials/batch-production.png
:alt: The "Batch Production" pop-up window, from which serial numbers can be assigned.
After clicking :guilabel:`Prepare MO` or :guilabel:`Produce`, the :menuselection:`Manufacturing` app
automatically shows the first of the split |MOs| (ex. `WH/MO/00109-001`). To view and access the
rest the split |MOs|, click the :guilabel:`Backorders` smart button at the top of the screen.
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

@@ -62,10 +62,10 @@ The following are fields found on an event form:
pop-up window appears, displaying various pre-configured language translation options available
in the database.
- :guilabel:`Date`: when the event is scheduled to take place. This field is auto-populated, but
modifiable, and is **required**.
- :guilabel:`Timezone`: the corresponding timezone related to the event. This field is
auto-populated, but modifiable, and is **required**.
- :guilabel:`Date`: when the event is scheduled to take place (expressed in your local timezone).
This field is auto-populated, but modifiable, and is **required**.
- :guilabel:`Display Timezone`: the timezone in which the event dates/times will be displayed on the
website. This field is auto-populated, but modifiable, and is **required**.
- :guilabel:`Language`: designate a specific language for all event communications to be translated
into, if necessary. This field is blank, by default, so if event-related communications are being
sent to recipients who speak a different language, be sure to configure this field properly.
+3 -1
View File
@@ -178,13 +178,15 @@ the **POS dashboard**.
.. toctree::
:titlesonly:
point_of_sale/configuration
point_of_sale/employee_login
point_of_sale/receipts_invoices
point_of_sale/preparation
point_of_sale/combos
point_of_sale/configuration
point_of_sale/shop
point_of_sale/restaurant
point_of_sale/pricing
point_of_sale/payment_methods
point_of_sale/pos_based_marketing
point_of_sale/online_food_delivery
point_of_sale/reporting
@@ -0,0 +1,207 @@
====================
Online food delivery
====================
**UrbanPiper** is an order management system that integrates with multiple food delivery platforms.
It consolidates orders from all connected platforms into a single interface, simplifying the
delivery process.
Supported providers:
- `Careem <https://www.careem.com>`_
- `Cari <https://getcari.com/>`_
- `ChowNow <https://www.chownow.com>`_
- `Deliveroo <https://deliveroo.co.uk/>`_
- `DoorDash <https://www.doordash.com>`_
- `EatEasy <https://www.eateasy.ae/dubai>`_
- `Glovo <https://glovoapp.com>`_
- `Grubhub <https://www.grubhub.com>`_
- `HungryPanda <https://www.hungrypanda.co>`_
- `HungerStation <https://hungerstation.com>`_
- `Jahez <https://www.jahez.net/>`_
- `Just Eat <https://www.just-eat.ie/>`_
- `Mrsool <https://mrsool.co>`_
- `Ninja <https://ananinja.com/>`_
- `NoonFood <https://www.noon.com>`_
- `Postmates <https://www.postmates.com>`_
- `Rafeeq <https://www.gorafeeq.com/en>`_
- `SkipTheDishes <https://www.skipthedishes.com/>`_
- `Swiggy <https://www.swiggy.com>`_
- `Talabat <https://www.talabat.com>`_
- `UberEats <https://www.ubereats.com>`_
- `Zomato <https://www.zomato.com>`_
Configuration
=============
.. _online_food_delivery/credentials:
UrbanPiper credentials
----------------------
#. Get your Atlas credentials:
#. Go to the :ref:`POS settings <configuration/settings>`.
#. Scroll down to the :guilabel:`Food Delivery Connector` section.
#. Click :guilabel:`Fill this form to get Username & Api key` and fill out the survey.
#. `Go to your Atlas account <https://atlas.urbanpiper.com>`_ and retrieve your API key and username
by navigating to :menuselection:`Settings --> API Access`.
.. image:: online_food_delivery/urban-piper-api.png
:alt: Atlas API access
Point of Sale
-------------
#. Enable the :guilabel:`Urban Piper` setting:
#. Go to the :ref:`POS settings <configuration/settings>`.
#. Scroll down to the :guilabel:`Food Delivery Connector` section.
#. Check the :guilabel:`Urban Piper` setting.
#. Set up UrbanPiper:
#. Fill in the :guilabel:`Username` and :guilabel:`Api Key` fields with your :ref:`UrbanPiper
credentials <online_food_delivery/credentials>`.
#. Select the desired delivery providers in the :guilabel:`Food Delivery Platforms` field under
the :guilabel:`Urban Piper Location` section (i.e., Zomato, Uber Eats).
#. Save the settings.
#. Click the :guilabel:`+ Create Store` button. Doing so creates a new location on the UrbanPiper
Atlas platform.
.. note::
- The :guilabel:`Pricelist` and :guilabel:`Fiscal Position` fields are automatically selected
after saving.
- A successful store creation triggers a notification.
- The store creation process may take 23 minutes to reflect changes on the UrbanPiper Atlas
platform.
- The store is automatically named after your point of sale name.
.. image:: online_food_delivery/create-store.png
:alt: Food delivery connector settings
Products
--------
To make products available individually,
#. Go to :menuselection:`Point of Sale --> Products --> Products`.
#. Select any product to open its product form.
#. Go to the :guilabel:`Point of Sale` tab.
#. Complete the :guilabel:`Urban Piper` section:
- Fill in the :guilabel:`Available on Food Delivery` with the desired POS.
- Optionally, set up the :guilabel:`Meal Type` field and enable the :guilabel:`Is Recommended`
and :guilabel:`Is Alcoholic` buttons.
.. image:: online_food_delivery/product-form.png
:alt: where to make a single product available for delivery
To make multiple products available for food delivery at once,
#. Go to :menuselection:`Point of Sale --> Products --> Products`.
#. Click the list icon (:icon:`oi-view-list`) to switch to the list view.
#. Select the products.
#. Enter the desired POS in the :guilabel:`Available on Food Delivery` column.
.. image:: online_food_delivery/product-list.png
:alt: Product list
Synchronization
---------------
To make products available on food delivery platforms, synchronize with your UrbanPiper account:
#. Go to the :ref:`POS settings <configuration/settings>`.
#. Scroll down the :guilabel:`Food Delivery Connector` section.
#. Click the :guilabel:`Sync Menu` button.
- The :guilabel:`Last Sync on` timestamp below the :guilabel:`Create Store` and :guilabel:`Sync
Menu` buttons updates.
.. note::
- A successful synchronization triggers a notification.
- The synchronization process may take 23 minutes to reflect changes on the UrbanPiper Atlas
platform.
Go live
-------
#. `Go to the Locations tab <https://atlas.urbanpiper.com/locations>`_ of your Atlas account.
#. Select the location to activate, then click :guilabel:`Request to go Live`.
.. image:: online_food_delivery/go-live.png
:alt: Request to go live button in the locations tab of the Atlas account
#. In the popup window:
#. Select the platform(s) to activate and click :guilabel:`Next`.
#. Enter the :guilabel:`Platform ID` and :guilabel:`Platform URL` in the corresponding fields to
establish the connection between the platform and UrbanPiper.
#. Click the :guilabel:`Request to Go Live` button.
.. image:: online_food_delivery/go-live-parameters.png
:alt: Go live parameters
.. note::
To find the location's :guilabel:`Platform ID` and :guilabel:`Platform URL`,
#. Click the location to open its setup form.
#. The location's parameters are available in the :guilabel:`HUB` tab.
#. Verify that your location is live:
#. `Go to the Locations tab <https://atlas.urbanpiper.com/locations>`_ of your Atlas account.
#. Select any provider in the :guilabel:`Assoc. platform(s)` column to review the status of that
platform for this location.
Order flow
==========
An order placed via the configured delivery platform triggers a notification. To manage these
orders, open the orders' list view by:
#. Clicking :guilabel:`Review Orders` on the notification popup.
#. Clicking the bag-shaped icon for online orders and :guilabel:`New`.
.. image:: online_food_delivery/cart-button.png
:alt: Cart button
.. note::
- Clicking this icon displays the number of orders at each stage: :guilabel:`New`,
:guilabel:`Ongoing`, and :guilabel:`Done`.
- The :guilabel:`New` button indicates newly placed orders, :guilabel:`Ongoing` is for
accepted orders, and :guilabel:`Done` is for orders ready to be delivered.
Then,
#. Select the desired order.
#. Click the :guilabel:`Accept` button.
#. When an order is accepted, its :guilabel:`Order Status` switches from :guilabel:`Placed` to
:guilabel:`Acknowledged` and is automatically displayed on the preparation display.
When the order is ready,
#. Open the orders' list view.
#. Select the order.
#. Click the :guilabel:`Mark as ready` button. Its :guilabel:`Order Status` switches from
:guilabel:`Acknowledged` to :guilabel:`Food Ready`, and its :guilabel:`Status` switches from
:guilabel:`Ongoing` to :guilabel:`Paid`.
Order rejection
---------------
Sometimes, the shop or restaurant may want to **reject** an order. In this case, open the orders'
list view,
#. Select the desired order.
#. Click the :guilabel:`Reject` button.
#. Select one of the reasons from the popup window.
.. image:: online_food_delivery/reject-order.png
:alt: Reject order pop-up
.. important::
**Swiggy** orders cannot be directly rejected. Attempting to reject one prompts Swiggy customer
support to contact the restaurant. Similarly, **Deliveroo**, **JustEat**, and **HungerStation**
do not allow order rejection. Always follow the respective provider's guidelines for handling
such cases.
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

@@ -21,6 +21,7 @@ Then, as the QR code type differs depending on your country, follow the correspo
page from the following table to set them up.
.. list-table::
:widths: 20 20 20 40
:header-rows: 1
* - QR code types
@@ -75,6 +76,7 @@ Create the payment method
.. image:: qr_code_payment/qr-payment-methods-setting.png
:alt: QR code payment method configuration
:scale: 85 %
.. important::
At least one bank account must be defined in the journal to allow QR code payments to be
@@ -85,6 +87,7 @@ the payment method to your POS under the :guilabel:`Payment` section.
.. image:: qr_code_payment/qr-configuration-setting.png
:alt: Enable QR code payment method
:scale: 85 %
Register payments using QR codes
================================
@@ -94,6 +97,7 @@ and displayed on the screen for the customer to scan and pay with their mobile b
.. image:: qr_code_payment/qr-payment-example.png
:alt: QR code payment example
:scale: 75 %
Hit :guilabel:`Confirm Payment` to validate the transaction.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 18 KiB

@@ -0,0 +1,109 @@
===================
Preparation display
===================
The preparation display feature allows you to handle POS orders requiring preparation. Concretely,
- **For retail**: The preparation team is notified after a payment is completed at the POS to
gather the purchased items for customer pickup.
- **For restaurants**: POS orders inform the kitchen of the meals to be prepared.
Configuration
=============
To enable the preparation display feature,
#. Go to the :ref:`POS settings <configuration/settings>`.
#. Scroll down to the :guilabel:`Preparation` section.
#. Check the :guilabel:`Preparation Display` option.
.. image:: preparation/preparation-setting.png
:alt: Setting to enable the preparation display feature
:scale: 90 %
To create and set up a preparation display,
#. Go to :menuselection:`Point of Sale --> Orders --> Preparation Display`
#. Click :guilabel:`New`.
#. Give the display a descriptive :guilabel:`Name` (e.g., `Main Kitchen`, `Bar`)
#. Set it up:
#. :guilabel:`Point of Sale`: Select the POS that sends orders to this display.
#. :guilabel:`Product categories`: Specify the POS :guilabel:`Product categories` sent to this
display.
#. :guilabel:`Stages`: Define the steps required for the orders to be ready.
- Click :guilabel:`Add a line` to add a stage.
- Assign specific colors to each stage for clarity (optional).
- Define an :guilabel:`Alert timer (min)` for each stage to indicate the expected processing
time.
.. image:: preparation/display-form.png
:alt: preparation display set-up form
:scale: 85 %
.. note::
To edit a pre-existing preparation display, click the vertical ellipsis button
(:icon:`fa-ellipsis-v`) on the display's card and select :guilabel:`Configure`.
Practical application
=====================
Go to :menuselection:`Point of Sale --> Orders --> Preparation Display` to get an overview of all
your displays.
.. image:: preparation/display-card.png
:alt: Kanban view of the preparation display
:scale: 85 %
The display card shows:
- The configured stages.
- The number of orders currently :guilabel:`In progress`.
- The :guilabel:`Average time` employees usually take to complete an order.
.. tip::
Click the :guilabel:`Kitchen Display` app icon on your Odoo Dashboard for quicker access.
Using the preparation display
-----------------------------
To access the preparation display, click :guilabel:`Preparation Screen`. This interface, designed
for employees, shows:
- **Stages and order count**: Displays the progress of orders across stages such as `To prepare`,
`Ready`, and `Completed`, along with the number of orders in each stage.
- **Ordered products by category**: Lists all items in progress, grouped by POS categories (e.g.,
`Drinks`, `Food`).
- **Order cards**: Summarizes individual orders, including:
- Associated tables and order numbers.
- Status, such as `Ready`, highlighted with the defined colors.
- Waiting time, with visual indicators.
.. note::
The duration indicator turns red if the elapsed time exceeds the predefined alert time.
.. image:: preparation/preparation-display.png
:alt: the preparation display interface with orders to process.
:scale: 80 %
To update order progress:
- Click items on the order card to cross them off individually.
- Click the order card itself to mark all items at once.
- The card automatically moves to the next stage once every item is crossed off.
- Click :icon:`fa-undo` :guilabel:`Recall` to move an order back to the previous stage if you
mistakenly sent it to the next stage.
Customer display
----------------
In parallel, click :guilabel:`Order Status Screen` to open the customer interface. This interface,
designed for customers, provides an overview of orders that are:
- :guilabel:`Ready` for pickup.
- :guilabel:`Almost there`, indicating they are taken care of.
.. note::
The order number can be found at the top of the customer's receipt.
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -62,18 +62,6 @@ The following table lists capabilities provided by Odoo when using the Amazon Co
| | | status synchronized from Odoo. |
+---------------------------+----------------------------+-------------------------------------+
.. important::
The stock synchronization does **not** currently support selling the same product as :abbr:`FBM
(Fulfilled By Merchant)` *and* :abbr:`FBA (Fulfilled By Amazon)`.
At times, when stock is sent for all products, it triggers a stock problem with Amazon, where
Amazon incorrectly thinks the :abbr:`FBM (Fulfilled By Merchant)` product has some quantity in
:abbr:`FBM (Fulfilled By Merchant)`.
As a result, Amazon then sells it as :abbr:`FBM (Fulfilled By Merchant)`, instead of taking from
their own warehouse. Odoo developers are currently working on resolving this issue to avoid
future discrepancies.
.. note::
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
@@ -2,10 +2,9 @@
Quotation templates
===================
In Odoo *Sales*, salespeople have the ability to create reusable quotation templates for common
products or services that the business offers.
Reusable quotation templates can be made in Odoo's **Sales** app for common products or services.
By using these templates, quotations can be tailored and sent to customers at a much faster pace,
By using these templates, quotations can be tailored and sent to customers at a quicker pace,
without having to create new quotations from scratch every time a sales negotiation occurs.
.. _sales/send_quotations/templates:
@@ -13,42 +12,42 @@ without having to create new quotations from scratch every time a sales negotiat
Configuration
=============
Begin by activating the setting in :menuselection:`Sales app --> Configuration --> Settings`, and
scroll to the :guilabel:`Quotations \& Orders` heading.
To use quotation templates, begin by activating the setting in :menuselection:`Sales app -->
Configuration --> Settings`, and scroll to the :guilabel:`Quotations &_Orders` heading.
In that section, check the box beside the :guilabel:`Quotation Templates` option. Doing so reveals a
new :guilabel:`Default Template` field, in which a default quotation template can be chosen from a
Under the heading, tick the :guilabel:`Quotation Templates` checkbox. Doing so reveals a new
:guilabel:`Default Template` field, in which a default quotation template can be chosen from the
drop-down menu.
.. image:: quote_template/quotations-templates-setting.png
:align: center
:alt: How to enable quotation templates on Odoo Sales.
Also, upon activating the :guilabel:`Quotation Template` feature, an internal :guilabel:`➡️
Quotation Templates` link appears beneath the :guilabel:`Default Template` field.
Upon activating the :guilabel:`Quotation Template` feature, an internal :icon:`fa-arrow-right`
:guilabel:`Quotation Templates` link appears beneath the :guilabel:`Default Template` field.
Clicking that link reveals the :guilabel:`Quotation Templates` page, from which templates can be
Clicking this link reveals the :guilabel:`Quotation Templates` page, from which templates can be
created, viewed, and edited.
Before leaving the :guilabel:`Settings` page, don't forget to click the :guilabel:`Save` button to
Before leaving the :guilabel:`Settings` page, do not forget to click the :guilabel:`Save` button to
save all changes made during the session.
.. _sales/send_quotations/create_templates:
Create quotation templates
==========================
Click the :guilabel:`Quotation Templates` link on the :guilabel:`Settings` page, or navigate to
To create a quotation template, click the :guilabel:`Quotation Templates` link on the
:guilabel:`Settings` page once :guilabel:`Quotation templates` are enabled, or navigate to
:menuselection:`Sales app --> Configuration --> Quotation Templates`. Both options reveal the
:guilabel:`Quotation Templates` page, where quotation templates can be created, viewed, and edited.
.. image:: quote_template/quotation-templates-page.png
:align: center
:alt: Quotation templates page in the Odoo Sales application.
To create a new quotation template, click the :guilabel:`New` button, located in the upper-left
corner. Doing so reveals a blank quotation template form that can be customized in a number of ways.
corner. Doing so reveals a blank quotation template form that can be customized.
.. image:: quote_template/blank-quotation-form.png
:align: center
:alt: Create a new quotation template on Odoo Sales.
Start by entering a name for the template in the :guilabel:`Quotation Template` field.
@@ -57,9 +56,8 @@ Then, in the :guilabel:`Quotation Validity` field, designate how many days the q
will remain valid for, or leave the field on the default `0` to keep the template valid
indefinitely.
Next, in the :guilabel:`Confirmation Mail` field, click the blank field to reveal a drop-down menu.
From the drop-down menu, select a pre-configured email template to be sent to customers upon
confirmation of an order.
Next, in the :guilabel:`Confirmation Mail` field, click the blank drop-down menu to select a
preconfigured email template to be sent to customers upon confirmation of an order.
.. tip::
To create a new email template directly from the :guilabel:`Confirmation Mail` field, start
@@ -70,13 +68,12 @@ confirmation of an order.
Selecting :guilabel:`Create and edit...` creates the email template, and a :guilabel:`Create
Confirmation Mail` pop-up window appears, in which the email template can be customized and
configured right away.
configured immediately.
.. image:: quote_template/create-confirmation-mail-popup.png
:align: center
:alt: Create confirmation mail pop-up window from the quotation template form in Odoo Sales.
When all modifications are complete, click :guilabel:`Save \& Close` to save the email template
When all modifications are complete, click :guilabel:`Save & Close` to save the email template
and return to the quotation form.
If working in a multi-company environment, use the :guilabel:`Company` field to designate to which
@@ -120,23 +117,23 @@ terms, etc.) by clicking :guilabel:`Add a note`.
To add a product to a quotation template, click :guilabel:`Add a product` in the :guilabel:`Lines`
tab of a quotation template form. Doing so reveals a blank field in the :guilabel:`Product` column.
When clicked, a drop-down menu with existing products in the database appear. Select the desired
When clicked, a drop-down menu with existing products in the database appears. Select the desired
product from the drop-down menu to add it to the quotation template.
If the desired product isn't readily visible, type the name of the desired product in the
If the desired product is not readily visible, type the name of the desired product in the
:guilabel:`Product` field, and the option appears in the drop-down menu. Products can also be found
by clicking :guilabel:`Search More...` from the drop-down menu.
.. tip::
In Odoo 17, it is now possible to add event-related products (booths and registrations) to
quotation templates. To do so, click the :guilabel:`Product` field, type in `Event`, and select
the desired event-related product from the resulting drop-down menu.
It is possible to add event-related products (booths and registrations) to quotation templates.
To do so, click the :guilabel:`Product` field, type in `Event`, and select the desired
event-related product from the resulting drop-down menu.
.. note::
When a product is added to a quotation template, the default :guilabel:`Quantity` is `1`, but
that can be edited at any time.
Then, drag-and-drop the product to the desired position, via the :guilabel:`six squares` icon,
Then, drag and drop the product to the desired position, via the :guilabel:`six squares` icon,
located to the left of each line item.
To add a *section*, which serves as a header to organize the lines of a sales order, click
@@ -144,57 +141,55 @@ To add a *section*, which serves as a header to organize the lines of a sales or
which the desired name of the section can be typed. When the name has been entered, click away to
secure the section name.
Then, drag-and-drop the section name to the desired position, via the :guilabel:`six squares` icon,
located to the left of each line item.
Then, drag and drop the section name to the desired position, via the :icon:`oi-apps`
:guilabel:`(six squares)` icon, located to the left of each line item.
To add a note, which would appear as a piece of text for the customer on the quotation, click
To add a note, which appears as a piece of text for the customer on the quotation, click
:guilabel:`Add a note` in the :guilabel:`Lines` tab. When clicked, a blank field appears, in which
the desired note can be typed. When the note has been entered, click away to secure the note.
Then, drag-and-drop the note to the desired position, via the :guilabel:`six squares` icon.
Then, drag and drop the note to the desired position, via the :icon:`oi-apps`
:guilabel:`(six squares)` icon.
To delete any line item from the :guilabel:`Lines` tab (product, section, and/or note), click the
:guilabel:`🗑️ (trash can)` icon on the far-right side of the line.
:icon:`fa-trash` :guilabel:`(remove record)` icon on the far-right side of the line.
Optional Products tab
---------------------
The use of *optional products* is a marketing strategy that involves the cross-selling of products
along with a core product. The aim is to offer useful and related products to customers, which may
result in an increased sale.
Using *optional products* is a marketing strategy that involves the cross-selling of products along
with a core product. The aim is to offer useful and related products to customers, which may result
in an increased sale.
For instance, if a customer wants to buy a car, they have the choice to order massaging seats, as
well, or ignore the offer and simply buy the car. Presenting the choice to purchase optional
products enhances the customer experience.
.. example::
If a customer wants to buy a car, they have the choice to order massaging seats as
an additional product that compliments the car, or ignore the offer and buy the car alone.
Optional products appear as a section on the bottom of sales orders and eCommerce pages. Customers
can immediately add them to their online sales orders themselves, if desired.
.. image:: quote_template/optional-products-on-sales-order.png
:align: center
:alt: Optional products appearing on a typical sales order with Odoo Sales.
In the :guilabel:`Optional Products` tab, :guilabel:`Add a line` for each cross-selling product
related to the original items in the :guilabel:`Lines` tab, if applicable. The products added here
ideally complement the original offering as added value for the prospective buyer.
related to the original items in the :guilabel:`Lines` tab, if applicable.
Clicking :guilabel:`Add a line` reveals a blank field in the :guilabel:`Product` column.
When clicked, a drop-down menu with products from the database appear. Select the desired product
from the drop-down menu to add it as an optional product to the quotation template.
To delete any line item from the :guilabel:`Optional Products` tab, click the :guilabel:`🗑️ (trash
can)` icon.
To delete any line item from the :guilabel:`Optional Products` tab, click the :icon:`fa-trash`
:guilabel:`(remove record)` icon.
.. note::
Optional products are **not** required to create a quotation template.
Terms \& Conditions tab
-----------------------
Terms & Conditions tab
----------------------
The :guilabel:`Terms \& Conditions` tab provides the opportunity to add terms and conditions to the
quotation template. To add terms and conditions, simply type (or copy/paste) the desired terms and
conditions in this tab.
The :guilabel:`Terms & Conditions` tab provides the opportunity to add terms and conditions to the
quotation template. To add terms and conditions, type the desired terms and conditions in this tab.
.. seealso::
:doc:`../../../finance/accounting/customer_invoices/terms_conditions`
@@ -202,55 +197,37 @@ conditions in this tab.
.. note::
Terms and conditions are **not** required to create a quotation template.
PDF Quote Builder tab
---------------------
The :guilabel:`PDF Quote Builder` tab provides options to compose an attractive quotation, with more
information and visually-pleasing elements, to highlight products and/or services.
To upload customer :guilabel:`Header pages` and :guilabel:`Footer pages`, click the :guilabel:`✏️
(pencil)` icon to the right of the respective pages. Click the :guilabel:`🗑️ (trash)` icon to delete
an uploaded PDF.
.. seealso::
:doc:`/applications/sales/sales/send_quotations/pdf_quote_builder`
Use quotation templates
=======================
When creating a quotation (:menuselection:`Sales app --> New`), choose a pre-configured template in
When creating a quotation (:menuselection:`Sales app --> New`), choose a preconfigured template in
the :guilabel:`Quotation Template` field.
.. image:: quote_template/quotation-templates-field.png
:align: center
:alt: Quotation templates field on a standard quotation form in Odoo Sales.
.. note::
The order of the templates in the :guilabel:`Quotation Template` field is determined by the order
of the templates in the Quotation Templates form. The order of the quotations in the Quotation
Templates form does **not** affect anything else.
To view what the customer will see, click the :guilabel:`Preview` button at the top of the page to
see how the quotation template appears on the front-end of the website through Odoo's customer
portal.
.. image:: quote_template/quotations-templates-preview.png
:align: center
:alt: Customer preview of a quotation template in Odoo Sales.
.. tip::
Quotation template design uses the same methodology and functionality with design building blocks
as a typical web page design with Odoo *Website*. Be sure to check out the
:doc:`../../../websites/website` documentation to learn more.
When all blocks and customizations are complete, click the :guilabel:`Save` button to save the
configuration.
When all blocks and customizations are complete, click the :guilabel:`Save` button to put those
configurations into place.
There is also a blue banner at the top of the quotation template design with a link to quickly
return :guilabel:`Back to edit mode`. When clicked, Odoo returns to the quotation form in the
back-end of the *Sales* application.
The blue banner located at the top of the quotation template preview can be used to quickly return
:icon:`fa-arrow-right` :guilabel:`Back to edit mode`. When clicked, Odoo returns to the quotation
form in the back-end of the *Sales* application.
Mass cancel quotations/sales orders
===================================
Cancel multiple quotations (or sales orders) by navigating to the :menuselection:`Sales app -->
Orders --> Quotations` dashboard, landing, by default, in the list view. Then, on the left side of
the table, tick the preferred checkboxes for removal.
the table, tick the checkboxes for the quotations to be canceled.
.. tip::
Select all records in the table by selecting the checkbox column header at the top-left of the
@@ -263,7 +240,6 @@ drop-down menu.
From this drop-down menu, select :guilabel:`Cancel quotations`.
.. image:: quote_template/cancel-quotations.png
:align: center
:alt: The Cancel quotations option on the Actions drop-down menu in the Odoo Sales application.
.. note::
Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 14 KiB

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