Compare commits

...

37 Commits

Author SHA1 Message Date
Jonathan
59e821d455 [FIX] discuss: broken link in ice_servers.rst 2023-06-21 12:00:34 +02:00
Christophe Monniez
476e019bff [FIX] deploy: reference the config parameter
The deploy documentation is assuming that `/etc/odoo.conf` is the
default config file, which is not the case.

With this commit, the configuration file references the cli
documentation.

closes odoo/documentation#4802

X-original-commit: 8aed7988ba
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Christophe Monniez (moc) <moc@odoo.com>
2023-06-20 14:17:21 +02:00
Christophe Monniez
dbf60af282 [IMP] maintain: switch to enterprise windows
* Update the title as `Upgrade Community to Enterprise` is confusing.
* Update 9.0 screenshots to more recent ones
* As the windows installer uses a real python interpreter, the install
  command is updated accordingly.

X-original-commit: f03b4ca649
Part-of: odoo/documentation#4802
2023-06-20 14:17:21 +02:00
Loredana Perazzo
573d201361 [IMP] pos: write content on the Payment Terminals page
task-3358474

closes odoo/documentation#4774

Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
Signed-off-by: Perazzo Loredana (lrpz) <lrpz@odoo.com>
2023-06-19 17:43:07 +02:00
Antoine Vandevenne (anv)
8cffb57dae [FIX] legal: fix broken PDF link
Apply the fix of e6aa5dd0 to `terms_of_sale.rst` and
`terms_of_sale_fr.rst` that were forgotten.

closes odoo/documentation#4784

X-original-commit: c1ec0664bb
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-06-19 16:40:35 +02:00
Odoo Translation Bot
fae103d6b3 [I18N] Update translation terms from Transifex 2023-06-18 01:40:09 +02:00
KC (ksc)
d107b438cb [IMP] sales: updated pro-forma invoice doc
closes odoo/documentation#4756

X-original-commit: 3e4e8acfed
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-16 01:15:55 +02:00
Sam Lieber (sali)
7aa75380a8 [IMP] marketing: testing_running.rst format fixes
closes odoo/documentation#4743

X-original-commit: 4b327417b0
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-15 18:54:38 +02:00
Sam Lieber (sali)
a62e5958cb [IMP] marketing: workflow_activities.rst - Format fixes
closes odoo/documentation#4742

X-original-commit: a09ca7bd0f
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-15 18:54:36 +02:00
Sam Lieber (sali)
19f0d3d8a8 [IMP] Update rst for target_audiences.rst (v14)
closes odoo/documentation#4734

X-original-commit: 89c1c1b357
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-15 18:54:33 +02:00
“Audrey
52bf00663e [FIX] Adyen: Fix live/test URLs
closes odoo/documentation#4720

Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-06-13 17:08:20 +02:00
Tom Aarab (toaa)
bf327d9200 [IMP] payment providers: PayPal
taskid-3184602.

16.0 -> Change extra fees category to :ref: main page payment provider
16.2 -> Remove Odoo credentials section
        Remove PDT identity token
        Remove merchant ID note
        Remove test mode section on environment test

Took the opportunity to redo the whole page.

closes odoo/documentation#4396

Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2023-06-13 11:14:40 +02:00
Tom Aarab (toaa)
b675584730 [IMP] accounting: OSS report
Added a section on where to find OSS reports and how to export them

task-3305037

closes odoo/documentation#4615

Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-06-09 18:53:31 +02:00
Jonathan Castillo (jcs)
211268ee24 [IMP] accounting: follow-up reports
task-3316301

closes odoo/documentation#4691

Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-06-09 17:51:15 +02:00
Loredana Perazzo
70f58a610d [IMP] pos: update the register customers section
task-3357882

closes odoo/documentation#4676

Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
Signed-off-by: Perazzo Loredana (lrpz) <lrpz@odoo.com>
2023-06-09 16:27:00 +02:00
Morfosys
7c627f985d [IMP] l10n: update links in mexico.rst
Update the link for Smarter Web to the appropriate landing page for
Odoo.

closes odoo/documentation#4678

X-original-commit: 7510b4bb23
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-06-09 13:55:53 +02:00
Benjamin Hanquin
4218ba7964 [IMP] odoo.sh: settings collaborators access matrix
Add the Upgrade submenu, Fix the Settings submenu to User only in
staging branches and improve the style in order to be similar to
supported versions matrix
(https://www.odoo.com/documentation/16.0/administration/maintain/supported_versions.html)

closes odoo/documentation#4677

X-original-commit: 98207740d5
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-06-09 13:55:50 +02:00
Xavier-Do
a0b5762497 [FIX] werkzeug version
https://werkzeug.palletsprojects.com/en/1.0.x/objects.inv now returns a
404.
2023-06-09 01:24:28 +02:00
Lara Martini (larm)
01f40f24ba [IMP] Expenses: updaitng out of date information and images
closes odoo/documentation#4553

closes odoo/documentation#4653

Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2023-06-08 20:06:50 +02:00
Brandon Seltenrich (BRSE)
afc4da633f [FIX] inventory: fix two step doc
closes odoo/documentation#4646

X-original-commit: c9dcbf6d01
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Brandon Seltenrich (brse) <brse@odoo.com>
2023-06-07 21:35:47 +02:00
“Audrey
e3379e2856 [IMP] Adyen: Update directions for setting the URLs
task-3338125

closes odoo/documentation#4634

Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-06-07 16:41:42 +02:00
Jonathan Castillo (jcs)
5c578d627a [MOV] accounting: rename VAT verification filename and title
closes odoo/documentation#4633

Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-06-06 17:43:45 +02:00
Antoine Vandevenne (anv)
552ef54355 [IMP] supported_versions: release saas-16.3
"September" didn't fit in the current table, so this commit also
replaces the previous implementation of the table by a `list-table`
directive... The real reason is that it was long due to ease future
updates of the table.

closes odoo/documentation#4623

X-original-commit: 3d1293757a
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2023-06-06 10:50:53 +02:00
Odoo Translation Bot
efc8dd0f12 [I18N] Update translation terms from Transifex 2023-06-04 01:40:10 +02:00
Brandon Seltenrich (BRSE)
529bed0c0a [FIX] inventory: fix sn doc typos
closes odoo/documentation#4583

X-original-commit: 17b53be028
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Brandon Seltenrich (brse) <brse@odoo.com>
2023-06-01 22:21:25 +02:00
Brandon Seltenrich (BRSE)
bbf780db5d [FIX] inventory: fix note in inv val config
closes odoo/documentation#4582

X-original-commit: 5a55437adc
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Brandon Seltenrich (brse) <brse@odoo.com>
2023-06-01 22:21:22 +02:00
Odoo Translation Bot
bbf2617b99 [I18N] Update translation terms from Transifex 2023-05-28 01:40:08 +02:00
Olivier Dony
24fc86d229 [FIX] legal: fix link to pt_BR PDF version 2023-05-26 20:01:55 +02:00
“Audrey
61da7ce7aa [IMP] payment providers: Wire Transfer
taskid-3301001

closes odoo/documentation#4540

Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-05-26 18:14:06 +02:00
Olivier Dony
764093ac2e [FIX] legal: add pt_BR translation of OEEL
Courtesy of LANA :)

closes odoo/documentation#4546

X-original-commit: a718922b0c
Signed-off-by: Olivier Dony (odo) <odo@odoo.com>
2023-05-26 15:08:08 +02:00
Olivier Dony
9e956f0be6 [FIX] legal: rename pt_BR + build PDF version
X-original-commit: 0df79a70e0
Part-of: odoo/documentation#4546
2023-05-26 15:08:08 +02:00
jopa-odoo
5e33cd5864 [ADD] Legal: Portuguese (Brasil) translation of Odoo Enterprise Agreement
X-original-commit: 966bade927
Part-of: odoo/documentation#4546
2023-05-26 15:08:08 +02:00
“Dallas”
fd23308e93 [IMP] accounting: update epc qr code
task-3336175

closes odoo/documentation#4536

Signed-off-by: Dean Dallas (dade) <dade@odoo.com>
Signed-off-by: Castillo Jonathan (jcs) <jcs@odoo.com>
2023-05-25 16:30:24 +02:00
Brandon Seltenrich (BRSE)
db67fc2959 [IMP] inventory: fix and update lots
closes odoo/documentation#4522

X-original-commit: 5bc3b94b61
Signed-off-by: Brandon Seltenrich (brse) <brse@odoo.com>
2023-05-24 18:24:37 +02:00
“Dallas”
7c61c31038 [IMP] contributing: change gui abbreviation to lower case
closes odoo/documentation#4506

X-original-commit: 20972dc033
Signed-off-by: Dean Dallas (dade) <dade@odoo.com>
2023-05-24 17:24:22 +02:00
“Chiara
4fc24468e4 [IMP] accounting: improve accounting concept
task-2846856

closes odoo/documentation#4060

Signed-off-by: Platteau Xavier (xpl) <xpl@odoo.com>
2023-05-23 16:34:48 +02:00
Tom Aarab (toaa)
214ce3075c [ADD] accounting: VAT units
task-2557013

16.0: Line 36 = "Create" --> "New"

closes odoo/documentation#4375

Signed-off-by: Aarab Tom (toaa) <toaa@odoo.com>
2023-05-23 11:35:15 +02:00
140 changed files with 4804 additions and 1632 deletions

View File

@@ -193,7 +193,7 @@ todo_include_todos = False
intersphinx_mapping = {
'python': ('https://docs.python.org/3/', None),
'werkzeug': ('https://werkzeug.palletsprojects.com/en/1.0.x/', None),
'werkzeug': ('https://werkzeug.palletsprojects.com/en/2.3.x/', None),
}
github_user = 'odoo'
@@ -211,6 +211,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-16.3': "Odoo Online",
'saas-16.2': "Odoo Online",
'saas-16.1': "Odoo Online",
'16.0': "Odoo 16",
@@ -314,13 +315,16 @@ latex_documents = [
'Odoo Enterprise Subscription Agreement (ES)', '', 'howto'),
('legal/terms/i18n/partnership_tex_es',
'odoo_partnership_agreement_es.tex', 'Odoo Partnership Agreement (ES)', '', 'howto'),
('legal/terms/i18n/enterprise_tex_pt_BR', 'odoo_enterprise_agreement_pt_BR.tex',
'Odoo Enterprise Subscription Agreement (PT)', '', 'howto'),
]
# List of languages that have legal translations (excluding EN). The keys must be in
# `languages_names`. These translations will have a link to their versions of the legal
# contracts, instead of the default EN one. The main legal documents are not part of the
# translations since they have legal meaning.
legal_translations = ['de', 'es', 'fr', 'nl']
legal_translations = ['de', 'es', 'fr', 'nl', 'pt_BR']
# The name of an image file (relative to this directory) to place at the top of the title page.
latex_logo = 'static/img/odoo_logo.png'

View File

@@ -43,7 +43,7 @@ Configuration samples
* Show only databases with names beginning with 'mycompany'
in ``/etc/odoo.conf`` set:
in :ref:`the configuration file <reference/cmdline/config_file>` set:
.. code-block:: ini
@@ -55,7 +55,7 @@ in ``/etc/odoo.conf`` set:
was sent to ``www.mycompany.com`` or ``mycompany.co.uk``, but not
for ``www2.mycompany.com`` or ``helpdesk.mycompany.com``.
in ``/etc/odoo.conf`` set:
in :ref:`the configuration file <reference/cmdline/config_file>` set:
.. code-block:: ini
@@ -150,7 +150,7 @@ Configuration sample
* with 'pwd' as a password
* filtering only db with a name beginning with 'mycompany'
in ``/etc/odoo.conf`` set:
in :ref:`the configuration file <reference/cmdline/config_file>` set:
.. code-block:: ini
@@ -238,7 +238,7 @@ Configuration sample
* We'll use 8 workers + 1 for cron. We'll also use a monitoring system to measure cpu load, and check if it's between 7 and 7.5 .
* RAM = 9 * ((0.8*150) + (0.2*1024)) ~= 3Go RAM for Odoo
in ``/etc/odoo.conf``:
in :ref:`the configuration file <reference/cmdline/config_file>`:
.. code-block:: ini
@@ -273,7 +273,7 @@ Configuration sample
* Redirect http requests to https
* Proxy requests to odoo
in ``/etc/odoo.conf`` set:
in :ref:`the configuration file <reference/cmdline/config_file>` set:
.. code-block:: ini

View File

@@ -1,9 +1,9 @@
.. _setup/enterprise:
===============================
Upgrade Community to Enterprise
===============================
===================================
Switch from Community to Enterprise
===================================
Depending on your current installation, there are multiple ways to upgrade
your community version.
@@ -98,7 +98,7 @@ On Windows
.. code-block:: console
$ odoo.exe -d <database_name> -i web_enterprise --stop-after-init
$ ..\python\python.exe odoo-bin -d <database_name> -i web_enterprise --stop-after-init
* No need to manually launch the server, the service is running.
You should be able to connect to your Odoo Enterprise instance using your usual

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

@@ -23,47 +23,136 @@ This matrix shows the support status of every version.
**Major releases are in bold type.**
+-----------------+-------------+----------+-------------+----------------+------------------------+
| | Odoo Online | Odoo.sh | On-Premise | Release date | End of support |
+=================+=============+==========+=============+================+========================+
| Odoo saas~16.2 | |green| | N/A | N/A | March 2023 | June 2023 (planned) |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo saas~16.1 | |green| | N/A | N/A | February 2023 | April 2023 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 16.0** | |green| | |green| | |green| | October 2022 | October 2025 (planned) |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo saas~15.2 | |red| | N/A | N/A | March 2022 | January 2023 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo saas~15.1 | |red| | N/A | N/A | February 2022 | July 2022 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 15.0** | |green| | |green| | |green| | October 2021 | October 2024 (planned) |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 14.0** | |green| | |green| | |green| | October 2020 | October 2023 (planned) |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 13.0** | |red| | |red| | |red| | October 2019 | October 2022 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo saas~12.3 | |red| | N/A | N/A | August 2019 | |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 12.0** | |red| | |red| | |red| | October 2018 | October 2021 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo saas~11.3 | |red| | N/A | N/A | April 2018 | |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 11.0** | |red| | |red| | |red| | October 2017 | October 2020 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo 10.saas~15 | |red| | N/A | N/A | March 2017 | |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo 10.saas~14 | |red| | N/A | N/A | January 2017 | |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 10.0** | |red| | |red| | |red| | October 2016 | October 2019 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo 9.saas~11 | |red| | N/A | N/A | May 2016 | |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 9.0** | |red| | N/A | |red| | October 2015 | October 2018 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo 8.saas~6 | |red| | N/A | N/A | February 2015 | |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 8.0** | |red| | N/A | |red| | September 2014 | October 2017 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
.. list-table::
:header-rows: 1
:widths: auto
* -
- Odoo Online
- Odoo.sh
- On-Premise
- Release date
- End of support
* - Odoo saas~16.3
- |green|
- N/A
- N/A
- June 2023
- September 2023 (planned)
* - Odoo saas~16.2
- |green|
- N/A
- N/A
- March 2023
- July 2023 (planned)
* - Odoo saas~16.1
- |red|
- N/A
- N/A
- February 2023
- April 2023
* - **Odoo 16.0**
- |green|
- |green|
- |green|
- October 2022
- October 2025 (planned)
* - Odoo saas~15.2
- |red|
- N/A
- N/A
- March 2022
- January 2023
* - Odoo saas~15.1
- |red|
- N/A
- N/A
- February 2022
- July 2022
* - **Odoo 15.0**
- |green|
- |green|
- |green|
- October 2021
- October 2024 (planned)
* - **Odoo 14.0**
- |green|
- |green|
- |green|
- October 2020
- October 2023 (planned)
* - **Odoo 13.0**
- |red|
- |red|
- |red|
- October 2019
- October 2022
* - Odoo saas~12.3
- |red|
- N/A
- N/A
- August 2019
-
* - **Odoo 12.0**
- |red|
- |red|
- |red|
- October 2018
- October 2021
* - Odoo saas~11.3
- |red|
- N/A
- N/A
- April 2018
-
* - **Odoo 11.0**
- |red|
- |red|
- |red|
- October 2017
- October 2020
* - Odoo 10.saas~15
- |red|
- N/A
- N/A
- March 2017
-
* - Odoo 10.saas~14
- |red|
- N/A
- N/A
- January 2017
-
* - **Odoo 10.0**
- |red|
- |red|
- |red|
- October 2016
- October 2019
* - Odoo 9.saas~11
- |red|
- N/A
- N/A
- May 2016
-
* - **Odoo 9.0**
- |red|
- N/A
- |red|
- October 2015
- October 2018
* - Odoo 8.saas~6
- |red|
- N/A
- N/A
- February 2015
-
* - **Odoo 8.0**
- |red|
- N/A
- |red|
- September 2014
- October 2017
.. note::

View File

@@ -45,41 +45,101 @@ these databases if they have one, using their regular credentials.
In addition, they cannot use the webshell nor have access to the server logs.
+---------------------+-----------------+-----------+-----------+
| | | User | Admin |
+=====================+=================+===========+===========+
|Development | History | X | X |
+---------------------+-----------------+-----------+-----------+
| | 1-click connect | X | X |
+---------------------+-----------------+-----------+-----------+
| | Logs | X | X |
+---------------------+-----------------+-----------+-----------+
| | Shell/SSH | X | X |
+---------------------+-----------------+-----------+-----------+
| | Mails | X | X |
+---------------------+-----------------+-----------+-----------+
| | Settings | X | X |
+---------------------+-----------------+-----------+-----------+
|Production & Staging | History | X | X |
+---------------------+-----------------+-----------+-----------+
| | 1-click connect | | X |
+---------------------+-----------------+-----------+-----------+
| | Logs | | X |
+---------------------+-----------------+-----------+-----------+
| | Shell/SSH | | X |
+---------------------+-----------------+-----------+-----------+
| | Mails | | X |
+---------------------+-----------------+-----------+-----------+
| | Monitoring | | X |
+---------------------+-----------------+-----------+-----------+
| | Backups | | X |
+---------------------+-----------------+-----------+-----------+
| | Settings | X | X |
+---------------------+-----------------+-----------+-----------+
|Status | | X | X |
+---------------------+-----------------+-----------+-----------+
|Settings | | | X |
+---------------------+-----------------+-----------+-----------+
.. list-table::
:header-rows: 1
:widths: auto
* -
-
- User
- Admin
* - Development
- History
- |green|
- |green|
* -
- 1-click connect
- |green|
- |green|
* -
- Logs
- |green|
- |green|
* -
- Shell/SSH
- |green|
- |green|
* -
- Mails
- |green|
- |green|
* -
- Upgrade
- |green|
- |green|
* -
- Settings
- |green|
- |green|
* - Production & Staging
- History
- |green|
- |green|
* -
- 1-click connect
-
- |green|
* -
- Logs
-
- |green|
* -
- Shell/SSH
-
- |green|
* -
- Mails
-
- |green|
* -
- Monitoring
-
- |green|
* -
- Backups
-
- |green|
* -
- Upgrade
-
- |green|
* -
- Settings
- |green|\*
- |green|
* - Status
-
- |green|
- |green|
* - Settings
-
-
- |green|
.. note::
\* Only in staging branches
.. |green| raw:: html
<span class="text-success" style="font-size: 32px; line-height: 0.5">●</span>
.. |orange| raw:: html
<span class="text-warning" style="font-size: 32px; line-height: 0.5">●</span>
.. |red| raw:: html
<span class="text-danger" style="font-size: 32px; line-height: 0.5">●</span>
Public Access
=============

View File

@@ -55,137 +55,178 @@ accounts, smart matching suggestions, etc.
Double-entry bookkeeping
========================
Odoo automatically creates all the behind-the-scenes journal entries
for each of your accounting transactions: customer invoices, point of
sale order, expenses, inventory moves, etc.
Odoo automatically creates all the underlying journal entries for all accounting transactions (e.g.,
customer invoices, vendor bills, point-of-sales orders, expenses, inventory valuations, etc.).
Odoo uses the rules of double-entry bookkeeping system: all journal
entries are automatically balanced (sum of debits = sum of credits).
Odoo uses the double-entry bookkeeping system, whereby every entry needs a corresponding and
opposite counterpart in a different account, with one account debited and the other credited.
It ensures that all transactions are recorded accurately and consistently and that the accounts
always balance.
.. seealso::
- :doc:`Understand Odoo's accounting transactions per document
<accounting/get_started/cheat_sheet>`
:doc:`Accounting Cheat Sheet <accounting/get_started/cheat_sheet>`
Accrual and Cash Basis Methods
==============================
Odoo supports both accrual and cash basis reporting. This allows you to
report income / expense at the time transactions occur (i.e., accrual basis), or when
payment is made or received (i.e., cash basis).
Multi-companies
===============
Odoo allows one to manage several companies within the same database. Each
company has its own chart of accounts and rules. You can get
consolidation reports following your consolidation rules.
Users can access several companies but always work in one company at a
time.
Multi-currencies
================
Every transaction is recorded in the default currency of the
company. For transactions occurring in another currency, Odoo stores
both the value in the currency of the company and the value in the
currency of the transaction. Odoo can generate currencies gains and
losses after the reconciliation of the journal items.
Currency rates are updated once a day using a yahoo.com online
web-service.
International Standards
=======================
Odoo accounting supports more than 50 countries. The Odoo core
accounting implements accounting standards that are common to all
countries. Specific modules exist per country for the
specificities of the country like the chart of accounts, taxes, or
bank interfaces.
In particular, Odoo's core accounting engine supports:
* Anglo-Saxon Accounting (U.S., U.K.,, and other English-speaking
countries including Ireland, Canada, Australia, and New Zealand)
where costs of good sold are reported when products are
sold/delivered.
* European accounting where expenses are accounted at the supplier
bill.
Odoo has modules to comply with IFRS rules.
Accounts Receivable and Payable
===============================
By default, Odoo uses a single account for all account
receivable entries and one for all accounts payable entries. You can
create separate accounts per customers/suppliers, but you don't need
to.
As transactions are associated to customers or suppliers, you get
reports to perform analysis per customer/supplier such as the customer
statement, revenues per customers, aged receivable/payables, ...
Wide range of financial reports
===============================
In Odoo, you can generate financial reports in real time. Odoo's
reports range from basic accounting reports to advanced management
reports. Odoo's reports include:
* Performance reports (such as Profit and Loss, Budget Variance)
* Position reports (such as Balance Sheet, Aged Payables, Aged
Receivables)
* Cash reports (such as Bank Summary)
* Detail reports (such as Trial Balance and General Ledger)
* Management reports (such as Budgets, Executive Summary)
Odoo's report engine allows you to customize your own report based on
your own formulae.
Import bank feeds automatically
===============================
Bank reconciliation is a process that matches your bank statement
lines, as supplied by the bank, to your accounting transactions in the
general ledger. Odoo makes bank reconciliation easy by frequently
importing bank statement lines from your bank directly into your Odoo
account. This means you can have a daily view of your cashflow without
having to log into your online banking or wait for your paper bank
statements.
Odoo speeds up bank reconciliation by matching most of your imported
bank statement lines to your accounting transactions. Odoo also
remembers how you've treated other bank statement lines and provides
suggested general ledger transactions.
Calculate the tax you owe your tax authority
============================================
Odoo totals all your accounting transactions for your tax period and
uses these totals to calculate your tax obligation. You can then check
your sales tax by running Odoo's Tax Report.
Inventory Valuation
===================
Odoo support both periodic (manual) and perpetual (automated)
inventory valuations. The available methods are standard price,
average price, LIFO (for countries allowing it) and FIFO.
.. seealso::
- :doc:`View impact of the valuation method on your transactions
</applications/inventory_and_mrp/inventory/management/reporting/inventory_valuation_config>`
Easy retained earnings
Accrual and cash basis
======================
Retained earnings are the portion of income retained by your
business. Odoo automatically calculates your current year earnings in
real time so no year-end journal or rollover is required. This is
calculated by reporting the profit and loss balance to your balance
sheet report automatically.
Both accrual and cash basis accounting are supported in Odoo. This allows reporting income and
expense either when the transaction occurs (accrual basis) or when the payment is made or received
(cash basis).
.. seealso::
:doc:`Cash basis <accounting/taxes/cash_basis>`
Multi-company
=============
Several companies can be managed within the same database. Each company has its :doc:`chart of
accounts <accounting/get_started/chart_of_accounts>`, which is also useful to generate consolidation
reports. Users can access several companies but can only work on a single company's accounting at a
time.
Multi-currency environment
==========================
A :doc:`multi-currency <accounting/get_started/multi_currency>` environment with an automated
exchange rate to ease international transactions is available in Odoo. Every transaction is recorded
in the company's default currency; for transactions occurring in another currency, Odoo stores both
the value in the company's currency and the transactions' currency value. Odoo generates currency
gains and losses after reconciling the journal items.
.. seealso::
:doc:`Manage a bank in a foreign currency <accounting/bank/foreign_currency>`
International standards
=======================
Odoo Accounting supports more than 70 countries. It provides the central standards and mechanisms
common to all nations, and thanks to country-specific modules, local requirements are fulfilled.
Fiscal positions exist to address regional specificities like the chart of accounts, taxes, or any
other requirements.
.. seealso::
:doc:`Fiscal localization packages <fiscal_localizations>`
Accounts receivable and payable
===============================
By default, there is a single account for the account receivable entries and one for the account
payable entries. As transactions are linked to your **contacts**, you can run a report per customer,
vendor, or supplier.
The **Partner Ledger** report displays the balance of your customers and suppliers. It is available
by going to :menuselection:`Accounting --> Reporting --> Partner Ledger`.
Reporting
=========
The following financial :doc:`reports <accounting/reporting>` are available and updated in
real-time:
+-----------------------------------------------+
| Financial reports |
+============+==================================+
| Statement | Balance sheet |
| +----------------------------------+
| | Profit and loss |
| +----------------------------------+
| | Cash flow statement |
| +----------------------------------+
| | Tax report |
| +----------------------------------+
| | ES sales list |
+------------+----------------------------------+
| Audit | General ledger |
| +----------------------------------+
| | Trial balance |
| +----------------------------------+
| | Journal report |
| +----------------------------------+
| | Intrastat report |
| +----------------------------------+
| | Check register |
+------------+----------------------------------+
| Partner | Partner ledger |
| +----------------------------------+
| | Aged receivable |
| +----------------------------------+
| | Aged payable |
+------------+----------------------------------+
| Management | Invoice analysis |
| +----------------------------------+
| | Unrealized currency gains/losses |
| +----------------------------------+
| | Depreciation schedule |
| +----------------------------------+
| | Disallowed expenses |
| +----------------------------------+
| | Budget analysis |
| +----------------------------------+
| | Product margins |
| +----------------------------------+
| | 1099 report |
+------------+----------------------------------+
.. tip::
:doc:`Create and customize reports <accounting/reporting/customize>` with Odoo's report engine.
Tax report
----------
Odoo computes all accounting transactions for the specific tax period and uses these totals to
calculate the tax obligation.
.. important::
Once the tax report has been generated for a period, Odoo locks it and prevents the creation of
new journal entries involving VAT. Any correction to customer invoices or vendor bills has to
be recorded in the next period.
.. note::
Depending on the country's localization, an XML version of the tax report can be generated to be
uploaded to the VAT platform of the relevant taxation authority.
Bank synchronization
====================
The bank synchronization system directly connects with your bank institution to automatically
import all transactions into your database. It gives an overview of your cash flow without logging
into an online banking system or waiting for paper bank statements.
.. seealso::
:doc:`Bank synchronization <accounting/bank/bank_synchronization>`
Inventory valuation
===================
Both periodic (manual) and perpetual (automated) inventory valuations are supported in Odoo. The
available methods are standard price, average price, :abbr:`LIFO (Last-In, First-Out)` and
:abbr:`FIFO (First-In, First-Out).`
.. seealso::
:doc:`View the impact of the valuation methods on transactions
<../inventory_and_mrp/inventory/management/reporting/inventory_valuation_config>`
Retained earnings
=================
Retained earnings are the portion of income retained by a business. Odoo calculates current year
earnings in real-time, so no year-end journal or rollover is required. The profit
and loss balance is automatically reported on the balance sheet report.
.. seealso::
:doc:`Accounting Cheat Sheet <accounting/get_started/cheat_sheet>`
Fiduciaries
===========
The :guilabel:`Accounting Firms` mode can be activated by going to :menuselection:`Accounting -->
Configuration --> Settings --> Accounting Firms mode`. When enabled:
- The document's sequence becomes editable on all documents;
- The :guilabel:`Total (tax incl.)` field appears to speed up and control the encoding by automating
line creation with the right account and tax;
- :guilabel:`Invoice Date` and :guilabel:`Bill Date` are pre-filled when encoding a transaction.
- A :guilabel:`Quick encoding` option is available for customer invoices and vendor bills.
.. toctree::
:titlesonly:

View File

@@ -1,69 +1,61 @@
============
EPC QR Codes
EPC QR codes
============
European Payments Council Quick Response Code,
or **EPC QR Code**, are two-dimensional barcodes
that customers can scan with their **mobile banking
applications** to initiate a **SEPA Credit Transfer
(SCT)**, and pay their invoices instantly.
European Payments Council quick response codes, or **EPC QR codes**, are two-dimensional barcodes
that customers can scan with their **mobile banking applications** to initiate a **SEPA credit
transfer (SCT)** and pay their invoices instantly.
In addition to bringing ease of use and speed,
it greatly reduces typing errors that would potentially
make for payment issues.
In addition to bringing ease of use and speed, it greatly reduces typing errors that would
potentially make for payment issues.
.. note::
This feature is only available in several European
countries such as Austria, Belgium, Finland, Germany,
and The Netherlands.
This feature is only available for companies in several European countries such as Austria,
Belgium, Finland, Germany, and the Netherlands.
.. seealso::
- :doc:`../bank`
- `Odoo Academy: QR Code on Invoices for European Customers <https://www.odoo.com/r/VuU>`_
Configuration
=============
Go to :menuselection:`Accounting --> Configuration --> Settings`
and activate the **SEPA QR Code** feature.
Go to :menuselection:`Accounting --> Configuration --> Settings` and activate the :guilabel:`QR
Codes` feature in the :guilabel:`Customer Payments` section.
.. image:: epc_qr_code/epc_qr_code01.png
:align: center
Configure your Bank Accounts journal
Configure your bank account's journal
-------------------------------------
Make sure that your *Bank Account* is correctly configured
on Odoo with your IBAN and BIC.
Make sure that your :guilabel:`Bank Account` is correctly configured in Odoo with your IBAN and BIC.
To do so, go to :menuselection:`Accounting --> Configuration
--> Journals`, open your *bank journal*, then fill out the
*Bank Account* and *Bank* under the *Bank Account* tab.
To do so, go to :menuselection:`Accounting --> Configuration --> Journals`, open your bank journal,
then fill out the :guilabel:`Account Number` and :guilabel:`Bank` under the :guilabel:`Bank Account
Number` column.
.. image:: epc_qr_code/epc_qr_code02.png
:align: center
.. image:: epc_qr_code/bank-journal.png
:alt: Bank account number column in the bank journal
Issue Invoices with EPC QR Codes
Issue invoices with EPC QR codes
================================
EPC QR Codes are added automatically to your invoices, as
long as you issue them to customers that are located in a
country where this feature is available.
EPC QR codes are added automatically to your invoices. Customers whose bank supports making payments
via EPC QR codes will be able to scan the code and pay the invoice.
Go to :menuselection:`Accounting --> Customers --> Invoices`,
and create a new invoice.
Go to :menuselection:`Accounting --> Customers --> Invoices`, and create a new invoice.
Before posting it, open the *Other Info* tab. Odoo automatically
fills out the *Bank Account* field with your IBAN.
Before posting it, open the :guilabel:`Other Info` tab. Odoo automatically fills out the
:guilabel:`Recipient Bank` field with your IBAN.
Make sure that the account indicated is the one you want to use to
receive your customers payment as Odoo uses this field to generate
the EPC QR Code.
.. note::
In the :guilabel:`Other Info` tab, the account indicated in the :guilabel:`Recipient Bank` field
is used to receive your customer's payment. Odoo automatically populates this field with your
IBAN by default and uses it to generate the EPC QR code.
.. image:: epc_qr_code/epc_qr_code03.png
:align: center
When the invoice is printed or previewed, the QR code is included at the bottom.
.. image:: epc_qr_code/invoice-qr-code.png
:alt: QR code on a customer invoice
.. tip::
If you want to issue an invoice without an EPC QR Code,
remove the IBAN indicated in the *Bank Account* field,
under the *Other Info* tab of the invoice.
.. seealso::
* :doc:`../bank`
* `Odoo Academy: QR Code on Invoices for European Customers <https://www.odoo.com/r/VuU>`_
If you want to issue an invoice without an EPC QR code, remove the IBAN indicated in the
:guilabel:`Recipient Bank` field, under the :guilabel:`Other Info` tab of the invoice.

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -196,3 +196,4 @@ Send yourself a sample invoice by email to make sure everything is correctly con
get_started/chart_of_accounts
get_started/multi_currency
get_started/avg_price_valuation
get_started/vat_units

View File

@@ -0,0 +1,86 @@
=========
VAT units
=========
.. important::
This is only applicable to multi-company environments.
A **VAT unit** is a group of VAT-taxable enterprises that are legally independent of each other but
are closely linked financially, organizationally, and economically and therefore considered the same
VAT-taxable enterprise. **VAT units** are not mandatory, but if created, constituent companies of
the unit must belong to the same **country**, use the same **currency**, and one company must be
designated as the **representative** company of the **VAT unit**. **VAT units** receive a specific
**tax ID** intended only for **tax returns**. **Constituent** companies keep their **tax ID** used
for **commercial purposes**.
.. example::
Enterprise **A** owes €300.000,00 of VAT taxes and enterprise **B** can recover €280.000,00 of
VAT taxes. They form up as a **VAT unit** so that the two amounts balance out and must conjointly
only pay €20.000,00 of VAT taxes.
Configuration
=============
To configure a **VAT unit**, go to :menuselection:`Settings --> General Settings`, scroll down to
the :guilabel:`Companies` section, and click :guilabel:`Manage Companies`. Select the company to
serve the **representative** role, and in the :guilabel:`General Information` tab, fill in the
mandatory fields for the .XML export when exporting the **tax report**: :guilabel:`Company Name`,
:guilabel:`Address`, :guilabel:`VAT`, :guilabel:`Currency`, :guilabel:`Phone`, and
:guilabel:`Email`.
.. image:: vat_units/general.png
:align: center
:alt: General information tab
Then, click on the :guilabel:`VAT Units` tab, :guilabel:`Add a line`, and either select an existing
**VAT unit**, or create a new one. Enter a **name** for the unit, :guilabel:`Country` of the
constituent companies and tax report, the :guilabel:`Companies`, the :guilabel:`Main Company` that
serves the **representative** role, and the :guilabel:`Tax ID` of the **VAT unit**.
.. image:: vat_units/vat-unit.png
:align: center
:alt: VAT units tab
Fiscal position
---------------
As transactions between constituents of the same **VAT unit** are not subject to VAT, it is possible
to create a :doc:`tax mapping (fiscal position) <../taxes/fiscal_positions>` to avoid the
application of VAT on inter-constituent transactions.
Be sure a constituent company has been selected before, then go to :menuselection:`Accounting -->
Configuration --> Fiscal Positions`, and :guilabel:`Create` a new **fiscal position**. Click the
:guilabel:`Tax Mapping` tab, select the :guilabel:`Tax on Product` usually applied for
**non-constituent** transactions, and in :guilabel:`Tax to Apply`, select the 0% tax to apply for
**constituent** transactions.
Do the same for the :guilabel:`Account Mapping` tab if required, and repeat this process for
**each** constituent company on your database.
.. Example::
Depending on your :doc:`localization package </applications/finance/fiscal_localizations>`, taxes
may vary from the screenshot displayed.
.. image:: vat_units/fiscal-positions.png
:align: center
:alt: Tax mapping of fiscal position for VAT unit
Then, assign the fiscal position by opening the **Contacts** app. Search for a **constituent**
company, and open the contact's **card**. Click the :guilabel:`Sales & Purchase` tab, and in the
:guilabel:`Fiscal Position` field, input the **fiscal position** created for the **VAT unit**.
Repeat the process for each **constituent** company card form, on each company database.
.. seealso::
:doc:`../taxes/fiscal_positions`.
Tax report
==========
The **representative** company can access the aggregated tax report of the **VAT unit** by going to
:menuselection:`Accounting --> Reporting --> Tax Report`, and selecting the **VAT unit** in
:guilabel:`Tax Unit`. This report contains the aggregated transactions of all **constituents** and
the .XML export contains the name and VAT number of the **main** company.
.. image:: vat_units/report.png
:align: center
:alt: VAT unit tax report

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -4,8 +4,8 @@ Follow-up on invoices
A follow-up message can be sent to customers when a payment is overdue. Odoo helps you identify late
payments and allows you to schedule and send the appropriate reminders using **follow-up actions**
that trigger automatically one or more actions according to the number of overdue days. You can send
your follow-ups via different means such as email, post, or SMS.
that automatically trigger one or more actions according to the number of overdue days. You can send
your follow-ups via different means, such as email, post, or SMS.
.. seealso::
- `Odoo Tutorials: Payment Follow-up <https://www.odoo.com/slides/slide/payment-follow-up-1682>`_
@@ -48,7 +48,7 @@ options:
- **%(company_name)s**: User's company name.
.. tip::
To send a reminder before the actual due date is reached, set a negative number of due days.
Set a negative number of days to send a reminder before the actual due date.
Follow-up reports
=================
@@ -66,16 +66,15 @@ It is up to you to decide how to remind your customer. You can select :guilabel:
:guilabel:`Done` to view the next follow-up that needs your attention.
.. note::
- The contact information available on the invoice or on the contact form is used to send the
reminder.
- The contact information on the invoice or the contact form is used to send the reminder.
- When the reminder is sent, it is documented in the chatter of the invoice.
- If it is not the right time for a reminder, you can specify the :guilabel:`Next Reminder Date`
and click on :guilabel:`Remind me later`. You will get the next report according to the next
reminder date set on the statement.
.. tip::
Reconcile your bank statements right before launching your follow-up process to avoid sending a
reminder to a customer that has already paid you.
Reconcile all bank statements right before launching the follow-up process to avoid sending a
reminder to a customer that has already paid.
Debtor's trust level
--------------------

View File

@@ -304,7 +304,7 @@ directly to a product line.
taxes/cash_basis
taxes/retention
taxes/vat_validation
taxes/vat_verification
taxes/fiscal_positions
taxes/avatax
taxes/taxcloud

View File

@@ -2,68 +2,64 @@
EU intra-community distance selling
===================================
**Distance sales within the European Union** include cross-border sales of goods and services to a
private consumer (B2C) in another EU Member State when the seller doesn't meet face-to-face with the
customer. Organizations must ensure that the VAT on distance sales is paid to the Member State in
which the goods or services are delivered.
EU intra-community distance selling involves the cross-border trade of goods and services from
vendors registered for VAT purposes to individuals (B2C) located in a European Union member state.
The transaction is conducted remotely, typically through online platforms, mail orders, telephone,
or other means of communication.
EU intra-community distance selling is subject to specific VAT rules and regulations. The vendor
must charge VAT per the VAT rate applicable in the buyer's country.
.. note::
This remains true even if your organization is located outside of the European Union.
While this regulation mainly applies to :doc:`eCommerce <../../../websites/ecommerce>` sales to
private EU consumers, it is also valid for mail order sales and telesales.
The Union **One-Stop Shop (OSS)** is an online portal where businesses can register for the OSS and
declare their intra-community distance sales. Each EU member state integrates an online OSS portal.
The **EU intra-community Distance Selling** feature helps your organization comply with this
regulation by creating and configuring new :doc:`fiscal positions <fiscal_positions>` and
:doc:`taxes <../taxes>` based on your company's country.
.. seealso::
- `European Commission: OSS | Taxation and Customs Union
<https://ec.europa.eu/taxation_customs/business/vat/oss_en>`_
.. _eu_distance_selling/configuration:
This remains applicable even if the vendor is located outside of the European Union.
Configuration
=============
Go to :menuselection:`Accounting/Invoicing --> Settings --> Taxes`, then enable **EU intra-community
Distance Selling** (or **EU Digital Goods VAT** if you created your database before July 1, 2021),
and *Save*.
The **EU Intra-community Distance Selling** feature helps you comply with this regulation by
creating and configuring new **fiscal positions** and **taxes** based on your company's country. To
enable it, go to :menuselection:`Accounting --> Configuration --> Settings --> Taxes`, tick
:guilabel:`EU Intra-community Distance Selling`, and :guilabel:`Save`.
.. image:: eu_distance_selling/enable-feature.png
:align: center
:alt: EU intra-community Distance Selling feature in Odoo Accounting settings
.. important::
Please :ref:`upgrade the module <general/upgrade>` `l10n_eu_service` if you already installed it
before **July 1, 2021**, or if you activated the feature **EU Digital Goods VAT** in the
Accounting settings. Then, make sure to :ref:`refresh the tax mapping
<eu_distance_selling/refresh-mapping>`.
.. tip::
Whenever you add or modify taxes, you can automatically update your fiscal positions. To do so,
go to :menuselection:`Accounting/Invoicing --> Settings --> Taxes --> EU Intra-community Distance
Selling` and click on the :guilabel:`Refresh tax mapping`.
.. _eu_distance_selling/taxes:
Fiscal Positions and Taxes
==========================
Once enabled, the feature automatically creates all the necessary taxes and fiscal positions needed
for each EU member state, based on your company's country.
We highly recommend checking that the proposed mapping is suitable for the products and services you
sell before using it.
.. _eu_distance_selling/refresh-mapping:
Refresh tax mapping
-------------------
Whenever you add or modify taxes, you can update automatically your fiscal positions.
To do so, go to :menuselection:`Accounting/Invoicing --> Settings --> Taxes --> EU intra-community
Distance Selling` and click on the *Refresh tax mapping* button.
.. note::
We highly recommend checking that the proposed mapping is suitable for the products and services
you sell before using it.
.. seealso::
- :doc:`fiscal_positions`
- :doc:`../taxes`
- :doc:`../../fiscal_localizations`
- :doc:`fiscal_positions`
One-Stop Shop (OSS)
===================
The :abbr:`OSS (One-Stop Shop)` system introduced by the European Union simplifies VAT collection
for **cross-border** sales of goods and services. It primarily applies to business-to-consumer
**(B2C)** cases. With the OSS, businesses can register for VAT in their home country and use a
single online portal to handle VAT obligations for their sales within the EU. There are **two
primary schemes**: the **Union OSS** scheme for cross-border services and the **Import OSS** scheme
for goods valued at or below €150.
Reports
-------
To generate **OSS sales** or **OSS imports** reports and submit them onto the OSS portal, go to
:menuselection:`Accounting --> Reporting --> Tax Report`, click :guilabel:`Tax Report: Global
Summary`, and select either :guilabel:`OSS Sales` or :guilabel:`OSS Imports`. Once selected, click
on :guilabel:`PDF`, :guilabel:`XLSX`, or :guilabel:`XML` in the top-left corner. This generates the
currently-opened report in the selected format. Once generated, log into the platform of your
competent federal authority to submit it onto the OSS portal.
.. image:: eu_distance_selling/oss-report.png
:alt: OSS reports view
.. seealso::
- `European Commission: OSS | Taxation and Customs Union <https://ec.europa.eu/taxation_customs/business/vat/oss_en>`_

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@@ -1,6 +1,6 @@
===========================
VIES VAT numbers validation
===========================
===============================
VAT numbers verification (VIES)
===============================
**VAT Information Exchange System** - abbreviated **VIES** - is a tool provided by the European
Commission that allows you to check the validity of VAT numbers of companies registered in the
@@ -15,7 +15,7 @@ Configuration
To enable this feature, go to :menuselection:`Accounting --> Configuration --> Settings --> Taxes`,
enable the **Verify VAT Numbers** feature, and click on *Save*.
.. image:: vat_validation/vat-validation-configuration.png
.. image:: vat_verification/vat-validation-configuration.png
:align: center
:alt: Enable "Verify VAT Numbers" in Odoo Accounting
@@ -24,14 +24,14 @@ VAT Number validation
Whenever you create or modify a contact, make sure to fill out the **Country** and **VAT** fields.
.. image:: vat_validation/vat-validation-contact-form.png
.. image:: vat_verification/vat-validation-contact-form.png
:align: center
:alt: Fill out the contact form with the country and VAT number before clicking on *Save*
When you click on *Save*, Odoo runs a VIES VAT number check, and displays an error message if the
VAT number is invalid.
.. image:: vat_validation/vat-validation-error.png
.. image:: vat_verification/vat-validation-error.png
:align: center
:alt: Odoo displays an error message instead of saving when the VAT number is invalid

View File

@@ -4,231 +4,533 @@
Expenses
========
**Odoo Expenses** streamlines the management of expenses. Employees can submit their expenses;
managers can approve them; accountants can record them and process the payments.
Odoo **Expenses** streamlines the management of expenses. After an employee submits their expenses
in Odoo, the expenses are reviewed by management and accounting teams. Once approved, payments can
then be processed and disbursed back to the employee for reimbursement(s).
.. seealso::
- `Odoo Expenses: product page <https://www.odoo.com/app/expenses>`_
`Odoo Expenses: product page <https://www.odoo.com/app/expenses>`_
How to set expense types
========================
Set expense types
=================
The first step to track expenses is to configure the expense types (managed as products in Odoo)
that your company allows, from the *Configuration* menu.
When a specific expense is reimbursed at a fixed price, set a cost on the product.
Otherwise keep the cost at 0.0 and employees will report the real cost per expense.
The first step to track expenses is to configure the different *expense types* for the company
(managed as *products* in Odoo). Each "product" can be as specific or generalized as needed. Go to
:menuselection:`Expenses app --> Configuration --> Expense Products` to view the current expensable
products in a default kanban view.
.. image:: expenses/product.png
.. image:: expenses/products.png
:align: center
:alt: Set expense costs on products.
Here are some examples:
* Restaurant:
* Cost: 0.00 (the cost of the ticket will be recorded on every expense)
* Travel with Personal Car:
* Cost: 0.30 (the price per mile reimbursed by the company is fixed)
* Hotel:
* Cost: 0.00 (the cost of the ticket will be recorded on every expense)
* Others:
* Cost: 0.0
Don't forget to set an expense tax on each expense type
(and an account if you use Odoo Accounting).
It's usually a good practice to use a tax that is configured
with :ref:`Tax Included in Price <taxes/included-in-price>`.
That way, employees report expenses with
prices including taxes, which is usually the expected behaviour.
To create a new expense product, click :guilabel:`Create`. A product form will appear. Only two
fields are required, the :guilabel:`Product Name` and the :guilabel:`Unit of Measure`. Enter the
:guilabel:`Product Name` in the field, and select the :guilabel:`Unit of Measure` from the drop-down
menu (most products will be set to :guilabel:`Units`).
.. tip::
The *Sales* app allows you to specify units of measure for your
expense types (units, miles, nights, etc.).
Go to :menuselection:`Sales --> Configuration --> Settings` and check
*Some products may be sold/purchased in different units of measure (advanced)*.
The *Sales* app is where specification on the units of measure are created and edited (e.g.
units, miles, nights, etc.). Go to :menuselection:`Sales app --> Configuration --> Settings` and
ensure `Units of Measure` is checked off in the `Product Catalog` section. Click on the
:guilabel:`Units of Measure` internal link to view, create, and edit the units of measure. Refer
to :doc:`this document </applications/inventory_and_mrp/inventory/management/products/uom>` to
learn more about units of measure and how to configure them.
How to record expenses
======================
Manually
--------
As an employee (Employee in user access rights), you can record
expenses from :menuselection:`My Expenses --> Expenses to Submit`.
.. image:: expenses/submit_01.png
.. image:: expenses/new-expense-product.png
:align: center
:alt: Set expense costs on products.
1. Select the related product and enter either the total amount
you paid (with Quantity = 1) or the unit price if Quantity is
countable (e.g. number of hotel nights).
2. Enter the expense date.
3. Choose if you paid the bill on your own (and expect to be reimbursed)
or if the company paid directly (e.g. if you used a company's credit card).
4. Set the bill reference, add some notes if requested and attach a
photo/scan of the receipt from the discussion thread.
That will help the manager and the accountant validate it.
The :guilabel:`Cost` field on the product form is populated with a value of `0.00` by default. When
a specific expense should always be reimbursed for a particular price, enter that amount in the
:guilabel:`Cost` field. Otherwise, leave the :guilabel:`Cost` set to `0.00`, and employees will
report the actual cost when submitting an expense report.
.. image:: expenses/submit_02.png
.. example::
Here are some examples for when to set a specific :guilabel:`Cost` on a product vs. leaving the
:guilabel:`Cost` at `0.00`:
- **Meals**: Set the :guilabel:`Cost` to `0.00`. When an employee logs an expense for a meal, they
enter the actual amount of the bill and will be reimbursed for that amount. An expense for a
meal costing $95.23 would equal a reimbursement for $95.23.
- **Mileage**: Set the :guilabel:`Cost` to `0.30`. When an employee logs an expense for
"mileage", they enter the number of miles driven, and are reimbursed 0.30 per mile they
entered. An expense for 100 miles would equal a reimbursement for $30.00.
- **Monthly Parking**: Set the :guilabel:`Cost` to `75.00`. When an employee logs an expense for
"monthly parking", the reimbursement would be for $75.00.
- **Expenses**: Set the :guilabel:`Cost` to `0.00`. When an employee logs an expense that is not
a meal, mileage, or monthly parking, they use the generic :guilabel:`Expenses` product. An
expense for a laptop costing $350.00 would be logged as an :guilabel:`Expenses` product, and
the reimbursement would be for $350.00.
Select an :guilabel:`Expense Account` if using the Odoo *Accounting* app. It is recommended to check
with the accounting department to determine the correct account to reference in this field as it
will affect reports.
Set a tax on each product in the :guilabel:`Vendor Taxes` and :guilabel:`Customer Taxes` fields if
applicable. It is considered good practice to use a tax that is configured with :ref:`Tax Included
in Price <taxes/included-in-price>`. Taxes will be automatically configured if this is set.
.. _expenses/new:
Record expenses
===============
Manually create a new expense
-----------------------------
To record a new expense, begin in the main :menuselection:`Expenses` app dashboard, which presents
the default :guilabel:`My Expenses to Report` view. This view can also be accessed from
:menuselection:`Expenses app --> My Expenses --> My Expenses to Report`.
First, click :guilabel:`Create`, and then fill out the various fields on the form.
- :guilabel:`Description`: Enter a short description for the expense in the :guilabel:`Description`
field. This should be short and informative, such as `lunch with client` or `hotel for
conference`.
- :guilabel:`Product`: Select the product from the drop-down menu that most closely corresponds to
the expense. For example, an airplane ticket would be appropriate for an expense
:guilabel:`Product` named :guilabel:`Air Travel`.
- :guilabel:`Unit Price`: Enter the total amount paid for the expense in one of two ways:
#. If the expense is for one single item/expense, enter the cost in the :guilabel:`Unit Price`
field, and leave the :guilabel:`Quantity` `1.00`.
#. If the expense is for multiples of the same item/expense, enter the price *per unit* in the
:guilabel:`Unit Price` field, and enter the *quantity of units* in the :guilabel:`Quantity`
field.
.. example::
In the case of a hotel stay, for example, the :guilabel:`Unit Price` would be set as the
cost *per night*, and set the :guilabel:`Quantity` to the *number of nights* stayed.
- :guilabel:`Taxes`: If taxes were paid on the expense, select the tax percentage using the
drop-down menu. Tax options are pre-configured based on the localization setting selected when the
database was created. Adding any new taxes should only be done when necessary.
.. note::
When a tax is selected, the :guilabel:`Total` value will update in real time to show the added
taxes.
- :guilabel:`Paid By`: Click the radio button to indicate who paid for the expense and should be
reimbursed. If the employee paid for the expense (and should be reimbursed) select
:guilabel:`Employee (to reimburse)`. If the company paid directly instead (e.g. if the company
credit card was used to pay for the expense) select :guilabel:`Company`.
- :guilabel:`Expense Date`: Using the calendar module, enter the date the expense was incurred. Use
the :guilabel:`< (left)` and :guilabel:`> (right)` arrows to navigate to the correct month, then
click on the specific day to enter the selection.
- :guilabel:`Bill Reference`: If there is any reference text that should be included for the
expense, enter it in this field.
- :guilabel:`Account`: Select the expense account that this expense should be logged on from the
drop-down menu.
- :guilabel:`Employee`: Using the drop-down menu, select the employee this expense is for.
- :guilabel:`Customer to Reinvoice`: If the expense is something that should be paid for by a
customer, select the customer that will be invoiced for this expense from the drop-down menu. For
example, if a customer wishes to have an on-site meeting, and agrees to pay for the expenses
associated with it (such as travel, hotel, meals, etc.), then all expenses tied to that meeting
would indicate that customer as the :guilabel:`Customer to Reinvoice`.
- :guilabel:`Analytic Account`: Select the account the expense should be written against from the
drop-down menu.
- :guilabel:`Company`: If multiple companies are set-up, select the company this expense should be
filed for from the drop-down menu. If there is only one company, this field will be automatically
populated.
- :guilabel:`Notes...`: If any notes are needed in order to clarify the expense, enter them in the
notes field.
Once all the fields have been filled out, click :guilabel:`Save`.
.. image:: expenses/expense-filled-in.png
:align: center
:alt: A filled in expense form for a client lunch.
In one click from emails
------------------------
Attach a receipt
~~~~~~~~~~~~~~~~
Let your employees record their expenses from a simple email.
Make a snapshot of the receipt and send it by email, or simply forward a bill!
After the expense is saved, the next step is to attach a receipt. A new :guilabel:`Attach Receipt`
button appears after the entry is saved, beneath the former :guilabel:`Save` button (which turns
into an :guilabel:`Edit` button).
The only thing to do is setting up an email alias in
:menuselection:`Expenses --> Configuration --> Settings` (e.g. *expenses* @mycompany.odoo.com).
For security purposes, only authenticated employee emails
(cfr. *Work Email* in employee detail form) are accepted.
.. tip::
The expense product is set automatically if the mail subject contains
the product's internal reference in first position.
Type the expense amount in the mail subject to set it on the expense too (e.g. Ref001 Food 100€).
How to submit expenses to managers
==================================
When you are ready to submit your expenses to your manager
(e.g. at the end of a business trip, or once a month),
go to the menu :menuselection:`My Expenses --> Expenses to Submit`. Select all expenses
from the list view and click on :menuselection:`Action --> Submit to Manager`.
Save the newly created expense report (i.e. set of expenses),
and wait for your manager to approve it.
.. image:: expenses/submit_03.png
.. image:: expenses/save-receipt.png
:align: center
:alt: Attach a receipt after saving the record.
You can also submit expenses one by one from the *Submit to Manager*
button on the form view of an expense.
Click the new :guilabel:`Attach Receipt` button, and a file explorer appears. Navigate to the
receipt to be attached, and click :guilabel:`Open`. A new :guilabel:`Receipts` smart button appears
at the top, and the new receipt is recorded in the chatter. More than one receipt can be attached to
an individual expense, as needed. The number of receipts attached to the expense will be noted on
the smart button.
All your submitted expense reports can be found in
:menuselection:`Expenses --> My Expenses --> Expense Reports`.
How to approve expenses
=======================
HR and team managers get an overview of all expense reports to
validate from the top menu :menuselection:`To Approve --> Expense Reports to Approve`.
Such users must have at least *Officers* access rights for *Expenses*.
.. image:: expenses/approval_01.png
.. image:: expenses/receipt-smartbutton.png
:align: center
:alt: Attach a receipt after saving the record.
They can review expense reports, approve or reject them, as well as providing
feedback thanks to the integrated communication tool.
Automatically create new expenses from an email
-----------------------------------------------
.. image:: expenses/approval_02.png
Instead of individually creating each expense in the *Expenses* app, expenses can be automatically
created by sending an email to an email alias.
To do so, first, an email alias needs to be configured. Go to :menuselection:`Expenses app -->
Configuration --> Settings`. Ensure :guilabel:`Incoming Emails` is checked off.
.. image:: expenses/email-alias.png
:align: center
As a team manager you can easily find the expense reports of your team members.
You need to be set as manager in the detail form of those employees.
.. image:: expenses/approval_03.png
:align: center
How to post expenses in accounting
==================================
Once expense reports approved by managers, the accounting department
goes to :menuselection:`Expenses --> Accountant --> Expense Reports To Post` to check
accounts, products and taxes. They can click *Post Journal Entries*
to post related journal entries into your books.
To do so, the user must have following access rights:
* Accounting: Accountant or Adviser
* Expenses: Manager
:alt: Create the domain alias by clicking the link.
.. note::
To post an expense, a *Home Address* must be set on the employee.
If you get a related blocking message when posting, click the employee,
go to *Personal Information* tab and select/create the contact of your employee
in the address book.
A contact has been automatically created if this person is using Odoo.
If the domain alias needs to be set up, :guilabel:`Setup your domain alias` will appear beneath
the incoming emails check box instead of the email address field. Refer to this documentation for
setup instructions and more information: :doc:`/administration/maintain/domain_names`. Once the
domain alias is configured, the email address field will be visible beneath the incoming emails
section.
How to reimburse employees
==========================
Next, enter the email address to be used in the email field, then click :guilabel:`Save`. Now that
the email address has been entered, emails can be sent to that alias to create new expenses without
having to be in the Odoo database.
You can now see all the expense reports to reimburse in
:menuselection:`Expenses --> Accountant --> Expense Reports To Pay`.
To record the payment or pay by check, click *Register a Payment*.
To submit an expense via email, create a new email and enter the product's *internal reference* code
(if available) and the amount of the expense in the email subject. Next, attach the receipt to the
email. Odoo creates the expense by taking the information in the email subject and combining it with
the receipt.
See how you can easily manage the payment process in Odoo:
To check an expense product's internal reference, go to :menuselection:`Expenses app -->
Configuration --> Expense Products`. If an internal reference is listed on the product, it is
visible in this view as :guilabel:`(Ref###)`.
* :doc:`accounting/payments/pay_checks`
* :doc:`accounting/payments/pay_sepa`
.. image:: expenses/internal-ref-numbers.png
:align: center
:alt: Internal reference numbers are listed in the main Expense Products view.
To add an internal reference on an expense product, click on the product, then click
:guilabel:`Edit`. In edit mode, enter the :guilabel:`Internal Reference` in the field. Beneath the
:guilabel:`Internal Reference` field, this sentence appears: :guilabel:`Use this reference as a
subject prefix when submitting by email.`.
How to re-invoice expenses to your customers
============================================
.. image:: expenses/meals-internal-reference.png
:align: center
:alt: Internal reference numbers are listed in the main Expense Products view.
If you track expenses on customer projects, you can charge them back to
your customers automatically.
.. note::
For security purposes, only authenticated employee emails are accepted by Odoo when creating an
expense from an email. To confirm an authenticated employee email address, go to the employee
card in the :guilabel:`Employees` app, and refer to the :guilabel:`Work Email` in the main field.
.. image:: expenses/authenticated-email-address.png
:align: center
:alt: Create the domain alias by clicking the link.
.. example::
If submitting an expense via email for a $25.00 meal during a work trip, the email subject would
be `Ref005 Meal $25.00`.
Explanation:
- The :guilabel:`Internal Reference` for the expense product `Meals` is `Ref005`
- The :guilabel:`Cost` for the expense is `$25.00`
Create an expense report
========================
When expenses are ready to submit (such as at the end of a business trip, or once a month), an
*expense report* needs to be created. Go to the main :menuselection:`Expenses` app dashboard, which
displays a default :guilabel:`My Expenses` view, or go to :menuselection:`Expenses app --> My
Expenses --> My Expenses to Report`.
First, each individual expense for the report must be selected by clicking the check box next to
each entry, or quickly select all the expenses in the list by clicking the check box next to
:guilabel:`Expense Date`.
.. image:: expenses/create-report.png
:align: center
:alt: Select the expenses to submit, then create the report.
Once the expenses have been selected, click the :guilabel:`Create Report` button. The new report
appears with all the expenses listed, and the number of documents is visible in the
:guilabel:`Documents` smart button.
It is recommended to add a short summary for each report to help keep expenses organized. Click the
:guilabel:`Edit` button, and the :guilabel:`Expense Report Summary` field appears. Enter a short
description for the expense report (such as `Client Trip NYC`, or `Repairs for Company Car`). Next,
select a :guilabel:`Manager` from the drop-down menu to assign a manager to review the report.
.. image:: expenses/expense-report-summary.png
:align: center
:alt: Enter a short description and select a manager for the report.
If some expenses are not on the report that should be, they can still be added. Click :guilabel:`Add
a line` at the bottom of the :guilabel:`Expense` tab. Click the check box next to each expense to
add, then click :guilabel:`Select`. The items now appear on the report that was just created.
.. image:: expenses/add-an-expense-line.png
:align: center
:alt: Add more expenses to the report before submitting.
.. note::
:guilabel:`Add a line` only appears when the document is in edit mode. It does not appear
otherwise.
When all edits have been completed, click :guilabel:`Save`.
Submit an expense report
------------------------
When an expense report is completed, the next step is to submit the report to a manager for
approval. Reports must be individually submitted, and cannot be submitted in batches. Open the
specific report from the list of expense reports (if the report is not already open). To view all
expense reports, go to :menuselection:`Expenses app --> My Expenses --> My Reports`.
If the list is large, grouping the results by status may be helpful since only reports that are in a
:guilabel:`Draft` mode need to be submitted, reports with an :guilabel:`Approved` or
:guilabel:`Submitted` status do not.
.. image:: expenses/expense-status.png
:align: center
:alt: Submit the report to the manager.
.. note::
The status of each report is shown in the :guilabel:`Status` column on the far right. If the
:guilabel:`Status` column is not visible, click the :guilabel:`⋮ (additional options)` icon at
the end of the row, and check the box next to :guilabel:`Status`.
Click on a report to open it, then click :guilabel:`Submit To Manager`. After submitting a report,
the next step is to wait for the manager to approve it.
.. important::
The :ref:`expenses/approve`, :ref:`expenses/post`, and :ref:`expenses/reimburse` sections are
**only** for users with the *necessary rights*.
.. _expenses/approve:
Approve expenses
================
In Odoo, not just anyone can approve expense reports— only users with the necessary rights (or
permissions) can. This means that a user must have at least *Team Approver* rights for the
*Expenses* app. Employees with the necessary rights can review expense reports, and approve or
reject them, as well as provide feedback thanks to the integrated communication tool.
To see who has rights to approve, go to the main :menuselection:`Settings` app and click on
:guilabel:`Manage Users`.
.. note::
If the *Settings* app is not available, then certain rights are not set on the account. In the
:guilabel:`Access Rights` tab of a user's card in the :menuselection:`Settings` app, the
:guilabel:`Administration` section is set to one of three options:
- :guilabel:`None (blank)`: The user cannot access the *Settings* app at all.
- :guilabel:`Access Rights`: The user can only view the :guilabel:`User's & Companies` section of
the *Settings* app.
- :guilabel:`Settings`: The user has access to the entire *Settings* app with no restrictions.
Please refer to :doc:`this document </applications/general/users/manage_users>` to learn more
about managing users and their access rights.
Click on an individual to view their card, which displays the :guilabel:`Access Rights` tab in the
default view. Scroll down to the :guilabel:`Human Resources` section. Under :guilabel:`Expenses`,
there are four options:
- :guilabel:`None (blank)`: A blank field means the user has no rights to view or approve expense
reports, and can only view their own.
- :guilabel:`Team Approver`: The user can only view and approve expense reports for their own
specific team.
- :guilabel:`All Approver`: The user can view and approve any expense report.
- :guilabel:`Administrator`: The user can view and approve any expense report as well as access the
reporting and configuration menus in the *Expenses* app.
Users who are able to approve expense reports (typically managers) can easily view all expense
reports to validate. Go to :menuselection:`Expenses app --> Expense Reports --> Reports to
Approve`. This view lists all the expense reports that have been submitted but not approved, as
noted by the :guilabel:`Submitted` tag in the status column.
.. image:: expenses/reports-to-approve.png
:align: center
:alt: Reports to validate are found on the Reports to Approve page.
Reports can be approved in two ways (individually or several at once) and refused only one way. To
approve multiple expense reports at once, remain in the list view. First, select the reports to
approve by clicking the check box next to each report, or click the box next to :guilabel:`Employee`
to select all reports in the list. Next, click on the :guilabel:`⚙️ Action (gear)` icon, then click
:guilabel:`Approve Report`.
.. image:: expenses/approve-report.png
:align: center
:alt: Approve multiple reports by clicking the checkboxes next to each report.
To approve an individual report, click on a report to go to a detailed view of that report. In this
view, several options are presented: :guilabel:`Approve`, :guilabel:`Refuse`, or :guilabel:`Reset to
draft`. Click :guilabel:`Approve` to approve the report.
If :guilabel:`Refuse` is clicked, a pop-up window appears. Enter a brief explanation for the refusal
in the :guilabel:`Reason to refuse Expense` field, then click :guilabel:`Refuse`.
.. image:: expenses/refuse-expense.png
:align: center
:alt: Send messages in the chatter.
Team managers can easily view all the expense reports for their team members. While in the
:guilabel:`Reports to Approve` view, click on :guilabel:`Filters`, then click :guilabel:`My Team`.
This presents all the reports for the manager's team.
.. image:: expenses/my-team-filter.png
:align: center
:alt: Select the My Team filter.
.. note::
If more information is needed, such as a receipt is missing, communication is easy from the
chatter. In an individual report, simply type in a message, tagging the proper person (if
needed), and post it to the chatter by clicking :guilabel:`Send`. The message is posted in the
chatter, and the person tagged will be notified via email of the message, as well as anyone
following.
.. image:: expenses/chatter.png
:align: center
:alt: Send messages in the chatter.
.. _expenses/post:
Post expenses in accounting
===========================
Once an expense report is approved, the next step is to post the report to the accounting journal.
To view all expense reports to post, go to :menuselection:`Expenses --> Expense Reports --> Reports
To Post`.
.. image:: expenses/post-reports.png
:align: center
:alt: View reports to post by clicking on expense reports, then reports to post.
Just like approvals, expense reports can be posted in two ways (individually or several at once). To
post multiple expense reports at once, remain in the list view. First, select the reports to post by
clicking the check box next to each report, or click the box next to :guilabel:`Employee` to select
all reports in the list. Next, click on the :guilabel:`⚙️ Action (gear)` icon, then click
:guilabel:`Post Entries`.
.. image:: expenses/post-entries.png
:align: center
:alt: Post multiple reports from the Post Entries view.
To post an individual report, click on a report to go to the detailed view of that report. In this
view, several options are presented: :guilabel:`Post Journal Entries`, :guilabel:`Report In Next
Payslip`, or :guilabel:`Refuse`. Click :guilabel:`Post Journal Entries` to post the report.
If :guilabel:`Refuse` is clicked, a pop-up window appears. Enter a brief explanation for the refusal
in the :guilabel:`Reason to refuse Expense` field, then click :guilabel:`Refuse`. Refused reports
can be viewed by going to :menuselection:`Expenses app --> Expense Reports --> All Reports`. This
list shows all reports, including the refused ones.
.. note::
To post expense reports to an accounting journal, the user must have following access rights:
- Accounting: Accountant or Adviser
- Expenses: Manager
.. _expenses/reimburse:
Reimburse employees
===================
After an expense report is posted to an accounting journal, the next step is to reimburse the
employee. To view all expense reports to pay, go to :menuselection:`Expenses --> Expense Reports -->
Reports To Pay`.
.. image:: expenses/reports-to-pay.png
:align: center
:alt: View reports to pay by clicking on expense reports, then reports to pay.
Just like approvals and posting, expense reports can be paid in two ways (individually or several at
once). To pay multiple expense reports at once, remain in the list view. First, select the reports
to pay by clicking the check box next to each report, or click the box next to :guilabel:`Employee`
to select all reports in the list. Next, click on the :guilabel:`⚙️ Action (gear)` icon, then click
:guilabel:`Register Payment`.
.. image:: expenses/register-payment.png
:align: center
:alt: Post multiple reports by clicking the checkboxes, clicking the gear, then post the entries.
To pay an individual report, click on a report to go to a detailed view of that report. Click
:guilabel:`Register Payment` to pay the employee.
Re-invoice expenses to customers
================================
If expenses are tracked on customer projects, expenses can be automatically charged back to the
customer. This is done by creating an expense report, then creating a sales order with the expensed
items on it. Then, managers approve the expense report, and the accounting department posts the
journal entries. Finally, the customer is invoiced.
Setup
-----
- Enable **Customer Billing** in the Expenses settings
First, specify the invoicing policy for each expense product. Go to :menuselection:`Expenses app -->
Configuration --> Expense Products`. Click on the expense product to edit, then click
:guilabel:`Edit`. Under the :guilabel:`Invoicing` section, select the :guilabel:`Invoicing Policy`
and :guilabel:`Re-Invoicing Policy` by clicking the radio button next to the desired selection.
- Go to the product configuration menu and set the invoicing method on
all your Expense types:
:guilabel:`Invoicing Policy`:
- Ordered quantities: it will invoice expenses based on the ordered
quantity
- :guilabel:`Ordered quantities`: Expense product will only invoice expenses based on the ordered
quantity.
- :guilabel:`Delivered quantities`: Expense product will only invoice expenses based on the
delivered quantity.
- Delivered quantities: it will invoice expenses based on the
expenses quantity
:guilabel:`Re-Invoicing Policy`:
- At cost: will invoice expenses at their real cost.
- :guilabel:`No`: Expense product will not be re-invoiced.
- :guilabel:`At cost`: Expense product will invoice expenses at their real cost.
- :guilabel:`At sales price`: Expense product will invoice the price set on the sale order.
- At sales price: will invoice based on a fixed sales price set on
the sale order.
Create an expense
-----------------
.. image:: expenses/invoicing_01.png
:align: center
First, when :ref:`creating a new expense <expenses/new>`, the correct information needs to be
entered in order to re-invoice a customer. Select the :guilabel:`Customer to Reinvoice` from the
drop-down menu. Next, select the :guilabel:`Analytic Account` the expense will be posted to.
Create an order
---------------
.. image:: expenses/reinvoice-expense.png
:align: center
:alt: Ensure the customer to be invoiced is called out on the expense.
- As a salesman, create and confirm a Sales Order for the services
delivered to your customer. If you don't put any expense in the
order, it will be added automatically once posted by the
accountant.
Create a quote and sales order
------------------------------
- Link the expense to the Sale Order.
In the :menuselection:`Sales` app, create a quote for the customer being invoiced, listing the
expense products. First, click :guilabel:`Create` to create a new quotation. Next, select the
:guilabel:`Customer` being invoiced for the expenses from the drop-down menu.
.. image:: expenses/invoicing_02.png
:align: center
In the :guilabel:`Order Lines` tab, click :guilabel:`Add a product`. In the :guilabel:`Product`
field, select the first item being invoiced from the drop-down menu, or type in the product name.
Then, update the :guilabel:`Quantity`, the :guilabel:`Delivered` quantity, and the :guilabel:`Unit
Price` if needed. Repeat this for all products being invoiced. When all the products have been added
to the quote, click :guilabel:`Confirm` and the quotation becomes a sales order.
Submit, validate and post expenses
----------------------------------
.. image:: expenses/expenses-salesorder.png
:align: center
:alt: Create and confirm the sales order with the expenses listed as products.
- As a manager, make sure the analytic account is set on every expense
line on approving expenses reports. Click the line to add one if
missing. Employees are already able to set one when submitting.
Once the quote turns into a sales order, a :guilabel:`Delivered` column appears. The delivered
quantity must be updated for each item. Click on the `0.000` field for each product, and enter the
delivered quantity. When all delivered quantities have been entered, click :guilabel:`Save`.
.. image:: expenses/invoicing_03.png
:align: center
Validate and post expenses
--------------------------
- As an accountant, post journal entries.
Only employees with permissions (typically managers or supervisors) can :ref:`approve expenses
<expenses/approve>`. Before approving an expense report, ensure the :guilabel:`Analytic Account` is
set on every expense line of a report. If an :guilabel:`Analytic Account` is missing, click
:guilabel:`Edit` and select the correct account from the drop-down menu, then click
:guilabel:`Approve` or :guilabel:`Refuse`.
The accounting department is typically responsible for :ref:`posting journal entries
<expenses/post>`. Once an expense report is approved, it can then be posted.
Invoice expenses
----------------
Now you can invoice the order. It shows up in
:menuselection:`Sales --> Invoicing --> Sales`
to Invoice. The expenses have been added automatically in the order
lines. Such items show up in blue (i.e. to invoice).
Once the quote has turned into a sales order, and the expense report has been approved, it is time
to invoice the customer. Go to :menuselection:`Sales app --> To Invoice --> Orders to Invoice` to
view the sales orders ready to be invoiced.
.. image:: expenses/invoicing_04.png
:align: center
e (i.e. to invoice).
Next, find the sales order related to the expense report, click into it, and then click
:guilabel:`Create Invoice` and a :guilabel:`Create invoices` pop-up window appears. Select if the
invoice is a :guilabel:`Regular invoice`, :guilabel:`Down payment (percentage)`, or :guilabel:`Down
payment (fixed amount)` by clicking the radio button next to the selection. For either down payment
options, enter the amount (fixed or percentage) in the :guilabel:`Down Payment Amount` field.
Finally, click either :guilabel:`create and view invoice` or :guilabel:`create invoice`.

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

View File

@@ -33,7 +33,7 @@ localization in Odoo, it is necessary to meet the following requirements:
<https://www.gob.mx/sat/acciones-y-programas/certificado-de-sello-digital>`_ (CSD).
#. Choose a PAC and purchase stamps. Currently the Mexican location in Odoo works with the following
PACs: `Solución Factible <https://solucionfactible.com/>`_, `Quadrum (formerly Finkok)
<https://cfdiquadrum.com.mx/index.html>`_ and `SW Sapien - Smarter Web <https://sw.com.mx/>`_.
<https://cfdiquadrum.com.mx/index.html>`_ and `SW Sapien - Smarter Web <https://info.sw.com.mx/sw-smarter-odoo/>`_.
#. Have knowledge and experience with billing, sales and accounting in Odoo. This documentation
contains only the information necessary to enable the use of Odoo in a company based in Mexico.
@@ -211,7 +211,7 @@ working with and the credentials. That way, electronic invoicing will be enabled
Remember that you must register directly with the PAC of your choice before you start creating
invoices from Odoo. We have the following PACs available: `Quadrum
<https://cfdiquadrum.com.mx/index.html>`_, `Solución Factible <https://solucionfactible.com/>`_
and `SW Sapien - Smarter Web <https://sw.com.mx/>`_.
and `SW Sapien - Smarter Web <https://info.sw.com.mx/sw-smarter-odoo/>`_.
You must process your **Private Key (CSD)** with the SAT institution before following these
steps. If you do not have this information, try with the Test Credentials and return to this

View File

@@ -135,10 +135,9 @@ Bank payments
- | :doc:`Wire Transfer <payment_acquirers/wire_transfer>`
| When selected, Odoo displays your payment information with a payment reference. You have to
approve the payment manually once you have received it on your bank account.
- | SEPA Direct Debit
- | :doc:`SEPA Direct Debit <../finance/accounting/payments/batch_sdd>`
| Your customers can sign a SEPA Direct Debit mandate online and get their bank account charged
directly. :doc:`Click here <../finance/accounting/payments/batch_sdd>` for
more information about this payment method.
directly.
.. _payment_acquirers/features:

View File

@@ -47,8 +47,10 @@ API Key and Client Key
In order to retrieve the API Key and the Client Key, log into your Adyen account, go to
:menuselection:`Developers --> API Credentials`.
- If you already have an API user, open it.
- If you don't have an API user yet, click on **Create new credential**.
Go to :menuselection:`Server settings --> Authentification` and copy or generate your **API Key**.
Be careful to copy your API key as you'll not be allowed to get it later without generating a new
one.
@@ -88,17 +90,32 @@ You have to save the webhook to finalize its creation.
.. _adyen/urls:
URLs
~~~~
API URLs
~~~~~~~~
To retrieve the URLs, log into your Adyen account, go to :menuselection:`Developers --> API URLs`.
Select one of the URLs listed next to :guilabel:`Classic Recurring API` as your
:guilabel:`Recurring API URL` and one listed next to :guilabel:`Checkout API` as your
:guilabel:`Checkout API URL`.
All Adyen API URLs include a customer area-specific prefix generated by Adyen. To configure the
URLs, proceed as follows:
.. image:: adyen/adyen-api-urls.png
:align: center
:alt: Get the links for the different API.
#. Log into your Adyen account, then go to :menuselection:`Developers --> API URLs`.
#. Copy the :guilabel:`Prefix` for your live Customer area (i.e., **data center**) and save it for
later.
.. image:: adyen/adyen-api-urls.png
:alt: Copy the prefix for the Adyen APIs
#. In Odoo, :ref:`navigate to the payment acquirer Adyen <payment_acquirers/add_new>`.
#. In the :guilabel:`Checkout API URL` field, enter the following URL and replace `yourprefix` with
the prefix you previously saved:
`https://yourprefix-checkout-live.adyenpayments.com/checkout`.
#. In the :guilabel:`Recurring API URL` field, enter the following URL and replace `yourprefix` with
the prefix you previously saved:
`https://yourprefix-pal-live.adyenpayments.com/pal/servlet/Recurring`.
.. note::
If you are trying Adyen as a test, you can use the following URLs instead:
- :guilabel:`Checkout API URL`: `https://checkout-test.adyen.com`
- :guilabel:`Recurring API URL`: `https://pal-test.adyen.com/pal/servlet/Recurring`
Adyen Account
-------------

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -1,109 +1,82 @@
======
Paypal
PayPal
======
`Paypal <https://www.paypal.com/>`_ is available and popular worldwide. It doesn't charge any
subscription fee, and creating an account is very easy. That's why we recommend it for starters in
Odoo. It works as a seamless flow where the customer is routed to the Paypal website to register the
payment.
`Paypal <https://www.paypal.com/>`_ is an American online payment acquirer available worldwide, and
one of the few that does not charge a subscription fee.
Settings in Odoo
================
.. seealso::
- :ref:`payment_acquirers/add_new`
Credentials tab
---------------
Odoo needs your **API Credentials** to connect with your PayPal account, which comprise:
- **Email**: your login email address in Paypal.
- **PDT Identity Token**: the key used to verify the authenticity of transactions.
- **Use IPN**: whether you want to use Instant Payment Notification. Already checked, you don't have
to change it.
You can copy your credentials from your Paypal account and paste them into the related fields under
the **Credentials** tab.
To set the **PDT Identity Token**, switch to :ref:`developer mode <developer-mode>` and retrieve the
token by following the configuration step :ref:`paypal/enable-pdt`.
.. important::
If you are trying Paypal as a test, using a :ref:`Paypal Sandbox account <paypal/testing>`,
change the **State** to *Test Mode*. We recommend doing this on a test Odoo database rather than
on your main database.
Fees tab
--------
You can charge extra fees to your customers for paying with Paypal to cover the transaction fees
Paypal charges you. Once redirected to Paypal, your customer sees an extra amount applied to the
order amount.
To activate this, go to Paypal configuration's :guilabel:`Fees` tab in Odoo and activate
:guilabel:`Add Extra Fees`.
You can refer to `Paypal Fees <https://www.paypal.com/webapps/mpp/paypal-fees>`_ to set up fees.
.. note::
`Traders in the EU <https://europa.eu/youreurope/citizens/consumers/shopping/pricing-payments/
index_en.htm>`_ are not allowed to charge extra fees for paying with credit cards.
Settings in Paypal
Settings in PayPal
==================
First, set up your Paypal account to build a seamless customer experience with Odoo.
To access your PayPal account settings, log into PayPal, open the :guilabel:`Account Settings`, and
open the :guilabel:`Website payments` menu.
Log into your PayPal account and open the account settings. Then, go to :menuselection:`Account menu
--> Account settings --> Website payments`.
.. image:: paypal/paypal-account.png
:align: center
:alt: PayPal account menu
Enable Auto Return
------------------
.. important::
Note that for PayPal to work **in Odoo**, the options :ref:`Auto Return <paypal/auto-return>`,
:ref:`PDT <paypal/pdt>`, and :ref:`IPN <paypal/ipn>` **must** all be enabled.
The *Auto Return* feature automatically redirects your customers to Odoo once the payment is
processed.
.. _paypal/auto-return:
From the *Website payments* settings page, go to :menuselection:`Website preferences --> Update -->
Auto return for website payments` and select **On**. Enter the address of your Odoo database (e.g.,
`https://yourcompany.odoo.com`) in the **Return URL** field.
Auto Return
-----------
The **Auto Return** feature automatically redirects customers to Odoo once the payment is processed.
From :guilabel:`Website payments`, go to :menuselection:`Website preferences --> Update --> Auto
return for website payments --> Auto return` and select :guilabel:`On`. Enter the address of your
Odoo database (e.g., `https://yourcompany.odoo.com`) in the :guilabel:`Return URL` field, and
:guilabel:`Save`.
.. note::
Any URL will do the job. Odoo only needs the setting to be enabled since it uses another URL.
Any URL does the job. Odoo only needs the setting to be enabled since it uses another URL.
.. _paypal/enable-pdt:
.. _paypal/pdt:
Enable Payment Data Transfer (PDT)
Payment Data Transfer (PDT)
---------------------------
:abbr:`PDT (Payment Data Transfer)` allows to receive payment confirmations, displays the payment
status to the customers, and verifies the authenticity of the payments. From :menuselection:`Website
preferences --> Update`, scroll down to :guilabel:`Payment data transfer` and select :guilabel:`On`.
.. tip::
PayPal displays your **PDT Identity Token** as soon as :ref:`Auto return <paypal/auto-return>`
and :ref:`Payment Data Transfer (PDT) <paypal/pdt>` are enabled. If you need the **PDT Identity
Token**, disable and re-enable :guilabel:`Payment data transfer` to display the token again.
.. _paypal/ipn:
Instant Payment Notification (IPN)
----------------------------------
Enable the *Payment Data Transfer* feature to receive payment confirmations immediately. This
feature also displays the payment status to the customers and verifies the authenticity of the
payments.
:abbr:`IPN (Instant Payment Notifications)` is similar to **PDT**, but allows for more
notifications, such as chargeback notifications. To enable **IPN**, go to :menuselection:`Website
payments --> Instant payment notifications --> Update` and click :guilabel:`Choose IPN settings`.
Enter a :guilabel:`Notification URL`, select :guilabel:`Receive IPN messages (Enabled)`, and
:guilabel:`Save`.
From the *Website payments* settings page, go to :menuselection:`Website preferences --> Update -->
Payment data transfer` and select **On**. PayPal displays your **PDT Identity Token** as soon as
the change is saved.
Paypal Account Optional
PayPal Account Optional
-----------------------
We advise you to not prompt customers to log in with a Paypal account when they get to pay. Let them
pay with debit/credit cards as well, or you might lose some deals. Make sure this setting is turned
on.
We advise not to prompt customers to log in with a PayPal account upon payment. It is better and
more accessible for customers to pay with a debit/credit card. To disable that prompt, go to
:menuselection:`Account Settings --> Website payments --> Update` and select :guilabel:`On` for
:guilabel:`PayPal account optional`.
Payment Messages Format
-----------------------
Suppose you use accented characters (or anything else than primary Latin characters) for your
customer names or addresses. In that case, you **must** configure the encoding format of the payment
request sent by Odoo to Paypal. Otherwise, some transactions fail without notice.
If you use accented characters (or anything other than primary Latin characters) for customer names
or addresses, then you **must** configure the encoding format of the payment request sent by Odoo to
PayPal. If you do not, some transactions fail without notice.
To do so, go to `your production account <https://www.paypal.com/cgi-bin/customerprofileweb
?cmd=_profile-language-encoding>`_. Then, click *More Options* and set the two default encoding
formats as **UTF-8**.
Your Paypal account is ready!
?cmd=_profile-language-encoding>`_. Then, click :guilabel:`More Options` and set the two default
encoding formats as :guilabel:`UTF-8`.
.. tip::
- For Encrypted Website Payments & EWP_SETTINGS error, please check the `Paypal documentation
@@ -113,6 +86,52 @@ Your Paypal account is ready!
`link <https://sandbox.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-language-encoding>`_
to configure the encoding format in a test environment.
Settings in Odoo
================
.. seealso::
:ref:`payment_acquirers/add_new`
Credentials
-----------
Odoo needs your **API Credentials** to connect with your PayPal account. To do so, go to
:menuselection:`Accounting --> Configuration --> Payment Acquirers` and :guilabel:`Activate` PayPal.
Then, enter your PayPal account credentials in the :guilabel:`Credentials` tab:
- :guilabel:`Email`: the login email address in Paypal;
- :guilabel:`PDT Identity Token`: the key used to verify the authenticity of transactions;
- :guilabel:`Use IPN`: enable for PayPal to work properly in Odoo.
.. tip::
Save the :guilabel:`PDT Identity Token` for later use.
To set the :guilabel:`PDT Identity Token`, switch to :ref:`developer mode <developer-mode>` and
retrieve the token by following the configuration steps at :ref:`paypal/pdt`.
.. note::
The PayPal **Merchant ID** is not required in Odoo.
.. important::
If you are trying PayPal as a test, using a :ref:`PayPal Sandbox account <paypal/testing>`,
change the :guilabel:`State` to :guilabel:`Test Mode`. We recommend doing this on a test Odoo
database rather than on your main database.
Extra fees
----------
You can charge **extra fees** to customers choosing to pay with PayPal in order to cover the
transaction fees PayPal charges you. Once redirected to Paypal, your customer sees an extra amount
applied to the order amount.
To activate this option, go to :menuselection:`Accounting --> Configuration --> Payment Acquirers`
and select :guilabel:`PayPal`. Then, go to the :guilabel:`Fees` tab and tick the :guilabel:`Add
Extra Fees` box.
.. note::
- You can refer to `Paypal Fees <https://www.paypal.com/webapps/mpp/paypal-fees>`_ to set up
fees.
- `Traders in the EU <https://europa.eu/youreurope/citizens/consumers/shopping/pricing-payments/index_en.htm>`_ are not allowed to charge extra fees for paying with credit cards.
.. _paypal/testing:
Test environment
@@ -121,19 +140,21 @@ Test environment
Configuration
-------------
Thanks to Paypal Sandbox accounts, you can test the entire payment flow in Odoo.
Thanks to PayPal sandbox accounts, you can test the entire payment flow in Odoo.
Log into the `Paypal Developer Site <https://developer.paypal.com/>`_ using your Paypal
credentials, which creates two sandbox accounts:
Log into the `Paypal Developer Site <https://developer.paypal.com/>`_ using your PayPal credentials,
which creates two sandbox accounts:
- A business account (to use as merchants, e.g.,
`pp.merch01-facilitator@example.com <mailto:pp.merch01-facilitator@example.com>`_).
`pp.merch01-facilitator@example.com <mailto:pp.merch01-facilitator@example.com>`_);
- A default personal account (to use as shoppers, e.g.,
`pp.merch01-buyer@example.com <mailto:pp.merch01-buyer@example.com>`_).
Log into Paypal Sandbox using the merchant account and follow the same configuration instructions.
Enter your sandbox credentials in Odoo and ensure Paypal is set on *Test Mode*. We recommend doing
this on a test Odoo database rather than your main database.
Log into PayPal sandbox using the merchant account and follow the same configuration instructions.
Enter your sandbox credentials in Odoo (:menuselection:`Accounting --> Configuration --> Payment
Acquirer --> PayPal` in the :guilabel:`Credentials` tab, and make sure the status is set on
:guilabel:`Test Mode`. We recommend doing this on a test Odoo database rather than your main
database.
Run a test transaction from Odoo using the sandbox personal account.

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -1,39 +1,52 @@
===================================
How to get paid with wire transfers
===================================
==============
Wire transfers
==============
**Wire Transfer** is the default payment method available. The aim is providing your customers with
your bank details so they can pay on their own. This is very easy to start with but slow and
inefficient process-wise. Opt for payment acquirers as soon as you can!
The **Wire transfer** payment method allows you to provide payment instructions to your customers,
such as the bank details and communication. They are displayed:
How to provide customers with payment instructions
==================================================
- at the end of the checkout process, once the customer has selected :guilabel:`Wire transfer` as a
payment method and clicked the :guilabel:`Pay now` button:
Put your payment instructions in the **Thanks Message** of your payment method.
.. image:: wire_transfer/payment_instructions_checkout.png
:alt: Payment instructions at checkout
- on the customer portal:
.. image:: wire_transfer/payment_instructions_portal.png
:alt: Payment instructions on the customer portal
.. note::
- While this method is very accessible and requires minimal setup, it is very inefficient
process-wise. We recommend setting up a :doc:`payment acquirer <../payment_acquirers>` instead.
- Online orders remain in the :guilabel:`Quotation sent` (i.e., unpaid order) stage until you
receive the payment and :guilabel:`Confirm` the order.
.. tip::
**Wire transfer** can be used as a template for other payment methods that are processed
manually, such as checks, by renaming or duplicating it.
Configuration
=============
**Wire Transfer** is installed and enabled by default.
To configure it, go to :menuselection:`Accounting / Website --> Configuration -->
Payment Acquirers`, and open the :guilabel:`Wire Transfer` card. Then, in the
:guilabel:`Configuration` tab:
- Select the :guilabel:`Communication` to be used;
- :guilabel:`Based on Document Reference`: sales order or invoice number
- :guilabel:`Based on Customer ID`: customer identifier
- Tick the :guilabel:`Enable QR codes` check box to activate :doc:`QR code payments
<../accounting/customer_invoices/epc_qr_code>`.
Define the payment instructions in the :guilabel:`Messages` tab:
.. image:: wire_transfer/payment_instructions.png
:align: center
They will appear to the customers when they place an order.
.. image:: wire_transfer/payment_customer_instructions.png
:align: center
How to manage an order once you get paid
========================================
Whenever a customer pays by wire transfer, the order stays in an intermediary stage **Quotation
Sent** (i.e. unpaid order). When you get paid, you confirm the order manually to launch the
delivery.
How to create other manual payment methods
==========================================
If you manage a B2B business, you can create other manually-processed payment methods like paying by
check. To do so, just rename *Wire Transfer* or duplicate it.
.. image:: wire_transfer/payment_check.png
:align: center
:alt: Define payment instructions
.. seealso::
- :doc:`../payment_acquirers`
:ref:`payment_acquirers/journal`

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@@ -1,137 +1,282 @@
=================================
Manage lots of identical products
=================================
=====================================
Use lots to manage groups of products
=====================================
Lots are useful for products you receive in great quantity and for which
a lot number can help in reporting, quality controls, or any other info.
Lots will help identify a number of pieces having, for instance, a
production fault. It can be useful for a batch production of clothes or
food.
*Lots* are one of the two ways to identify and track products in Odoo. A lot usually indicates a
specific batch of an item that was received, is currently stored, or was shipped from a warehouse,
but can also pertain to a batch of products manufactured in-house, as well.
Odoo has the capacity to manage lots, ensuring compliance with the
traceability requirements imposed by the majority of industries.
Manufacturers assign lot numbers to groups of products that have common properties; this can lead to
multiple goods sharing the same lot number. This helps to identify a number of products in a single
group, and allows for end-to-end traceability of these products through each step in their
lifecycles.
The double-entry management in Odoo enables you to run very advanced
traceability.
Lots are useful for products that are manufactured or received in large quantities (such as clothes
or food), and can be used to trace a product back to a group. This is especially useful when
managing product recalls or expiration dates.
Setting Up
==========
.. seealso::
:doc:`/applications/inventory_and_mrp/inventory/management/lots_serial_numbers/serial_numbers`
Application Configuration
-------------------------
Enable lots & serial numbers
============================
First, you need to activate the tracking of lot numbers. To do so, go to
:menuselection:`Inventory --> Configuration --> Settings` and tick *Lots & Serial
Numbers*. Then, click on save.
To track products using lots, the *Lots & Serial Numbers* feature must be enabled. Go to
the :menuselection:`Inventory app --> Configuration --> Settings`, scroll down to the
:guilabel:`Traceability` section, and click the box next to :guilabel:`Lots & Serial Numbers`. Then,
click the :guilabel:`Save` button to save changes.
.. image:: lots/lots_01.png
:align: center
.. image:: lots/lots-enabled-lots-setting.png
:align: center
:alt: Enabled lots and serial numbers feature in inventory settings.
Product Configuration
---------------------
Track products by lots
======================
Now, you have to configure which products you want to track by serial
numbers.
Once the :guilabel:`Lots & Serial Numbers` setting has been activated, individual products can now
be configured to be tracked using lots. To do this, go to the :menuselection:`Inventory app -->
Products --> Products`, and choose a product.
Go to :menuselection:`Master Data --> Products` and open the product of your choice.
There, click on *Edit* and select *Tracking by Lots* in the
inventory tab.
Once on the product form, click :guilabel:`Edit` to make changes to the form. Then, click the
:guilabel:`Inventory` tab. In the :guilabel:`Traceability` section, click :guilabel:`By Lots`. Then,
click :guilabel:`Save` to save changes. Existing or new lot numbers can now be assigned to
newly-received or manufactured batches of this product.
.. image:: lots/lots_02.png
:align: center
.. important::
If a product has stock on-hand prior to activating tracking by lots or serial numbers, an
inventory adjustment might need to be performed to assign lot numbers to the existing stock.
.. image:: lots/lots_03.png
:align: center
.. image:: lots/lots-tracking-product-form.png
:align: center
:alt: Enabled tracking by lots feature on product form.
Manage Lots
===========
Create new lots for products already in stock
---------------------------------------------
Receipts
--------
New lots can be created for products already in stock with no assigned lot number. To do this, go to
the :menuselection:`Inventory app --> Products --> Lots/Serial Numbers`, and click
:guilabel:`Create`. Doing so reveals a separate page where a new :guilabel:`Lot/Serial Number` is
generated automatically.
In order to receive a product tracked by lots, you have to specify its
lot numbers. You have several ways of doing so:
.. tip::
While Odoo automatically generates a new :guilabel:`Lot/Serial Number` to follow the most recent
number, it can be edited and changed to any desired number, by clicking the line under the
:guilabel:`Lot/Serial Number` field, and changing the generated number.
1. Manually assign the different lot numbers
Once the new :guilabel:`Lot/Serial Number` is generated, click the blank field next to
:guilabel:`Product` to reveal a drop-down menu. From this menu, select the product to which this new
number will be assigned.
2. Copy/paste lot numbers from an Excel file
This form also provides the option to adjust the :guilabel:`Quantity`, assign a unique
:guilabel:`Internal Reference` number (for traceability purposes), and assign this specific lot or
serial number configuration to a specific website in the :guilabel:`Website` field (if working in a
multi-website environment).
First, you need to open the detailed operations of your picking.
A detailed description of this specific lot or serial number can also be added in the
:guilabel:`Description` tab below.
.. image:: lots/lots_04.png
:align: center
When all desired configurations are complete, click the :guilabel:`Save` button to save all changes.
Manually assign the different lot numbers
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. image:: lots/lots-new-lot-number.png
:align: center
:alt: New lot number creation form with assigned product.
When opening the detailed operations, you can click on *Add a line*.
Then, you will be able to fill the lot number in. Once done, you can
click on *Add a line* again to register a new lot number.
After a new lot number has been created, saved, and assigned to the desired product, navigate back
to the product form in the :menuselection:`Inventory` app, by going to :menuselection:`Products -->
Products`, and selecting the product to which this newly-created lot number was just assigned.
.. image:: lots/lots_05.png
:align: center
On that product's detail form, click the :guilabel:`Lot/Serial Numbers` smart button to view the new
lot number. When additional quantity of this product is received or manufactured, this new lot
number can be selected and assigned to it.
Copy/paste lot number from an Excel file
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Manage lots for shipping and receiving
======================================
Once the spreadsheet containing the lot numbers you received from your
supplier and copy the list. Then, you can paste them in the *Lot/Serial
Number Name* column for Odoo to automatically create the necessary
lines. After that, you will have to manually enter the number of
products that are contained in each one of the lots.
Lot numbers can be assigned for both **incoming** and **outgoing** goods. For incoming goods, lot
numbers are assigned directly on the purchase order form. For outgoing goods, lot numbers are
assigned directly on the sales order form.
.. image:: lots/lots_06.png
:align: center
Manage lots on receipts
-----------------------
.. image:: lots/lots_05.png
:align: center
Assigning lot numbers to **incoming** goods can be done directly from the purchase order (PO).
.. image:: lots/lots_07.png
:align: center
To create a :abbr:`PO (purchase order)`, go to :menuselection:`Purchase app --> Create`. Doing so
reveals a new, blank request for quotation (RFQ) form.
Operation Types
---------------
On this :abbr:`RFQ (request for quotation)`, fill out the necessary information by adding a
:guilabel:`Vendor`, and adding the desired products to the :guilabel:`Product` lines, by clicking
:guilabel:`Add a product` (under the :guilabel:`Products` tab).
Of course, you also have the possibility to define how you will manage
lots for each operation type. To do so, open the *Inventory* app and
go to :menuselection:`Configuration --> Operation Types`.
Choose the desired quantity of the product to order by changing the number in the
:guilabel:`Quantity` column.
For each type (receipts, internal transfers, deliveries, …), you can
decide if you allow to create new lot numbers or only use existing ones.
By default, the creation of new lots is only allowed at product
reception, and using existing lot numbers isnt allowed in this
operation. If you have inter-warehouse transfers and track products by
lots, it can be useful to allow using existing lot numbers in receipts
too.
Once the :abbr:`RFQ (request for quotation)` has been filled out, click :guilabel:`Confirm Order`.
When the :abbr:`RFQ (request for quotation)` is confirmed, it becomes a :guilabel:`Purchase Order`,
and a :guilabel:`Receipt` smart button appears. Click the :guilabel:`Receipt` smart button to be
taken to the warehouse receipt form.
.. image:: lots/lots_08.png
:align: center
.. note::
Clicking :guilabel:`Validate` before assigning a lot number to the ordered product quantities
will result in a :guilabel:`User Error` pop-up. The pop-up requires entry of a lot or serial
number for the ordered products. The :abbr:`RFQ (request for quotation)` **cannot** be validated
without a lot number being assigned.
.. image:: lots/lots-user-error-popup.png
:align: center
:alt: Add lot/serial number user error popup.
From here, click the :guilabel:`Additional Options` menu, represented by a :guilabel:`hamburger
(four horizontal lines)` icon, located to the right of the :guilabel:`Unit of Measure` column in the
:guilabel:`Operations` tab). Clicking that icon reveals a :guilabel:`Detailed Operations` pop-up.
In this pop-up, configure a number of different fields, including the assignation of a lot number,
under the :guilabel:`Lot/Serial Number Name` column, located at the bottom of the pop-up.
There are two ways to assign lot numbers: **manually** and **copy/paste**.
- **Manually assign lot numbers**: Click :guilabel:`Add a line` and choose the location the products
will be stored in under the :guilabel:`To` column. Then, type a new :guilabel:`Lot Number Name`
and set the :guilabel:`Done` quantity.
.. image:: lots/lots-assign-lot-number-popup.png
:align: center
:alt: Assign lot number detailed operations popup.
.. note::
If quantities should be processed in multiple locations and lots, click :guilabel:`Add a line`
and type a new :guilabel:`Lot Number Name` for additional quantities. Repeat until the
:guilabel:`Quantity Done` matches the :guilabel:`Demand`.
- **Copy/paste lot numbers from a spreadsheet**: Populate a spreadsheet with all of the lot numbers
received from the supplier (or manually chosen to assign upon receipt). Then, copy and paste them
in the :guilabel:`Lot/Serial Number Name` column. Odoo will automatically create the necessary
number of lines based on the amount of numbers pasted in the column. From here, the :guilabel:`To`
locations and :guilabel:`Done` quantities can be manually entered in each of the lot number lines.
.. image:: lots/lots-excel-spreadsheet.png
:align: center
:alt: List of lot numbers copied on excel spreadsheet.
Once all product quantities have been assigned a lot number, click :guilabel:`Confirm` to close the
pop-up. Then, click :guilabel:`Validate`.
A :guilabel:`Traceability` smart button appears upon validating the receipt. Click the
:guilabel:`Traceability` smart button to see the updated :guilabel:`Traceability Report`, which
includes: a :guilabel:`Reference` document, the :guilabel:`Product` being traced, the
:guilabel:`Lot/Serial #` assigned, and more.
Manage lots on delivery orders
------------------------------
Assigning lot numbers to **outgoing** goods can be done directly from the sales order (SO).
To create an :abbr:`SO (sales order)`, go to the :menuselection:`Sales app --> Create`. Doing so
reveals a new, blank quotation form.
On this blank quotation form, fill out the necessary information by adding a :guilabel:`Customer`,
and adding products to the :guilabel:`Product` lines (in the :guilabel:`Order Lines` tab) by
clicking :guilabel:`Add a product`.
Then, choose the desired quantity to sell by changing the number in the :guilabel:`Quantity` column.
Once the quotation has been filled out, click the :guilabel:`Confirm` button to confirm the
quotation. When the quotation is confirmed, it becomes an :abbr:`SO (sales order)`, and a
:guilabel:`Delivery` smart button appears.
Click the :guilabel:`Delivery` smart button to view the warehouse receipt form for that specific
:abbr:`SO (sales order)`.
From here, click the :guilabel:`Additional Options` menu, represented by a `hamburger` icon (four
horizontal lines, located to the right of the :guilabel:`Unit of Measure` column in the
:guilabel:`Operations` tab). Clicking that icon reveals a :guilabel:`Detailed Operations` pop-up.
In the pop-up, a :guilabel:`Lot/Serial Number` will be chosen by default, with the full
:guilabel:`Reserved` quantity taken from that specific lot (if there is enough stock in that
particular lot).
If there is insufficient stock in that lot, or if partial quantities of the :guilabel:`Demand`
should be taken from multiple lots, change the quantity in the :guilabel:`Done` column to only
include that specific part of the total quantity.
.. note::
The lot automatically chosen for delivery orders varies, depending on the selected removal
strategy (:abbr:`FIFO (First In, First Out)`, :abbr:`LIFO (Last In, First Out)`, or :abbr:`FEFO
(First Expiry, First Out)`). It will also depend on the quantity ordered, and if there is enough
quantity in one lot to fulfill the order.
.. seealso::
:doc:`/applications/inventory_and_mrp/inventory/routes/strategies/removal`
Then, click :guilabel:`Add a line`, select an additional (different) :guilabel:`Lot/Serial Number`,
apply the rest of the :guilabel:`Done` quantities, and click :guilabel:`Confirm` to close the
pop-up. Lastly, click the :guilabel:`Validate` button to deliver the products.
.. image:: lots/lots-detailed-operations-popup.png
:align: center
:alt: Detailed operations popup for source lot number on sales order.
Upon validating the delivery order, a :guilabel:`Traceability` smart button appears. Click the
:guilabel:`Traceability` smart button to see the updated :guilabel:`Traceability Report`, which
includes a :guilabel:`Reference` document, the :guilabel:`Product` being traced, the
:guilabel:`Date`, and the :guilabel:`Lot/Serial #` assigned.
The :guilabel:`Traceability Report` can also include a :guilabel:`Reference` receipt from the
previous purchase order, if the product quantities shared the same lot number.
Manage lots for different operations types
==========================================
In Odoo, the creation of new lots is only allowed upon **receiving** products from a purchase order,
by default. **Existing** lot numbers cannot be used.
For sales orders, the opposite is true: new lot numbers cannot be created on the delivery order,
only existing lot numbers can be used.
To change the ability to use new (or existing) lot numbers on any operation type, go to the
:menuselection:`Inventory app --> Configuration --> Operations Types`, and select the desired
:guilabel:`Operation Type`.
For :guilabel:`Receipts`, found on the :menuselection:`Operations Types` page, the :guilabel:`Use
Existing Lots/Serial Numbers` option can be enabled, by clicking :guilabel:`Edit`, and then clicking
the checkbox beside the :guilabel:`Use Existing Lots/Serial Numbers` option (in the
:guilabel:`Traceability` section). Lastly, click the :guilabel:`Save` button to save the changes.
For :guilabel:`Delivery Orders`, the :guilabel:`Create New Lots/Serial Numbers` option can be
enabled, by clicking :guilabel:`Edit`, and clicking the checkbox beside the :guilabel:`Create New
Lots/Serial Numbers` option. Be sure to click the :guilabel:`Save` button to save all changes.
.. image:: lots/lots-operations-type-form.png
:align: center
:alt: Enabled traceability setting on operations type form.
.. tip::
For inter-warehouse transfers involving products tracked by lots, it can be useful to enable the
:guilabel:`Use Existing Lots/Serial Numbers` option for warehouse receipts.
Lots traceability
=================
The lot number given to the products allows you to keep track of where
they were received, put in stock, to whom they were sold and where they
were shipped to.
Manufacturers and companies can refer to traceability reports to see the entire lifecycle of a
product: where (and when) it came from, where it was stored, and who (and when) it went to.
To track an item, open the *Inventory* module and, in :menuselection:`Master Data -->
Lots/Serial Numbers`, click on the lot number corresponding to your
search.
To see the full traceability of a product, or group by lots, go to the :menuselection:`Inventory app
--> Products --> Lots/Serial Numbers`. Doing so reveals the :menuselection:`Lots/Serial Numbers`
dashboard.
.. image:: lots/lots_09.png
:align: center
From here, products with lot numbers assigned to them will be listed by default, and can be expanded
to show the lot numbers those products have assigned to them.
When you open the *Traceability* information, you see in which
documents the lot number has been used.
To group by lots (or serial numbers), begin by removing any filters in the search bar. Then, click
the :guilabel:`Group By` drop-down, select :guilabel:`Add Custom Group`, and select
:guilabel:`Lot/Serial Number` from the drop-down menu. Then, click :guilabel:`Apply`.
.. image:: lots/lots_10.png
:align: center
Doing so displays all existing lots and serial numbers, and can be expanded to show all quantities
of products with that assigned number.
Now, if you want to locate the lot number, you can do so by clicking on
the *Location* stat button.
.. image:: lots/lots-traceability-report.png
:align: center
:alt: Lots and serial numbers traceability report.
.. image:: lots/lots_11.png
:align: center
.. image:: lots/lots_12.png
:align: center
.. seealso::
:doc:`/applications/inventory_and_mrp/inventory/management/lots_serial_numbers/differences`

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

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