Compare commits
133 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7d43958d7b | |||
| b84e81d3a1 | |||
| 4f098945d7 | |||
| 86fac322d3 | |||
| 958fa599e1 | |||
| 0604fb56f9 | |||
| 3fe09dd653 | |||
| 06eaf3a0c7 | |||
| 14c0438764 | |||
| db3db3c727 | |||
| 1be6f341dd | |||
| 39541bb745 | |||
| 157c1e18ea | |||
| ab5c9feb40 | |||
| 6c3385cf90 | |||
| b53427ddde | |||
| e6dbd3d9e4 | |||
| 646bfe2e2c | |||
| e620f27378 | |||
| f10c8d4ad2 | |||
| b4cab2a3db | |||
| 999c8db465 | |||
| 6ec9eb1fcc | |||
| baab56946f | |||
| 73499c595e | |||
| 2c1277d0f7 | |||
| fc98af5814 | |||
| d0b7363de5 | |||
| 65f1e3ce0a | |||
| a48ebe55bf | |||
| 3d28850a40 | |||
| 83a68e4b9b | |||
| be60243eff | |||
| d07052aa57 | |||
| b89d3e56c2 | |||
| 8d87bfe462 | |||
| b72d340b3c | |||
| a197b6c57d | |||
| f0cf3c68ac | |||
| 1f31ba3f06 | |||
| 2f0d98c9f7 | |||
| 4210a31408 | |||
| 080dc64e54 | |||
| 95f8067ed5 | |||
| f453b2266f | |||
| d88b185c27 | |||
| 62a4db0c7d | |||
| de2999c01d | |||
| 494ae5a555 | |||
| 283c843eeb | |||
| b0cc13d4fe | |||
| 6016ed4e93 | |||
| 6c561112a8 | |||
| 7a8f551d67 | |||
| 67adf2fc3b | |||
| 6f3ca9f4a3 | |||
| d1836f349f | |||
| e765370016 | |||
| 15beccfd50 | |||
| cec2e1f322 | |||
| 9cb186f87b | |||
| 075eea9326 | |||
| b5507c4940 | |||
| 64fabeb801 | |||
| 6667e3ec35 | |||
| 7b917cd1c3 | |||
| 884c1b3126 | |||
| b339573354 | |||
| 668420655f | |||
| abb3589471 | |||
| 588801185a | |||
| 78d1f23686 | |||
| e72b21d734 | |||
| 5ff951e927 | |||
| 78b3ca7521 | |||
| 9e3cb9eeaf | |||
| 9115d5d7a4 | |||
| c5b4336b52 | |||
| 78d289c677 | |||
| 14a9073ac9 | |||
| 4eb1baa5c5 | |||
| a2fbef0bc9 | |||
| 0f8e20e0aa | |||
| dfc42d4b62 | |||
| 5bd89e30b9 | |||
| 35602b9f50 | |||
| 79fa32eb3d | |||
| 3905b642fa | |||
| 5b581c31a5 | |||
| 90fffd3039 | |||
| 6fb216f70d | |||
| d4eece9b5f | |||
| 52e107681a | |||
| be6f7e1662 | |||
| 28f9d0c02c | |||
| 643ec40050 | |||
| 629a2852b6 | |||
| 77c1f6ff95 | |||
| 045fb847e8 | |||
| b963e4c7f9 | |||
| 3a3a224b17 | |||
| 86bd9fd91b | |||
| 6935a84404 | |||
| 31387885d6 | |||
| f8dce88995 | |||
| 78d998f5fc | |||
| 3ef14b8254 | |||
| 6d219133e0 | |||
| 2a52e0979b | |||
| f72e7a25e0 | |||
| c21233db05 | |||
| 5d7abe69ac | |||
| f18c11cb41 | |||
| 8c4cb060f0 | |||
| 07e7787668 | |||
| d4b8665fe2 | |||
| 3e7c00af02 | |||
| eff6545537 | |||
| 41cdeab0fa | |||
| 630d4385f4 | |||
| 30b173ff25 | |||
| 620b50f9e2 | |||
| 7612732f7f | |||
| f08db8544a | |||
| de4795724b | |||
| 556b5c4bc3 | |||
| 0c162ecf18 | |||
| 922f540fa6 | |||
| 1defbf7383 | |||
| fd3f3ca5cf | |||
| f10dcbdaf6 | |||
| 883442e483 | |||
| 41442270a3 |
@@ -478,8 +478,24 @@ def _generate_alternate_urls(app, pagename, templatename, context, doctree):
|
||||
_version = _version or app.config.version
|
||||
_lang = _lang or app.config.language or 'en'
|
||||
_canonical_page = f'{pagename}.html'
|
||||
|
||||
# legal translations have different URLs schemes as they are not managed on transifex
|
||||
# e.g. FR translation of /terms/enterprise => /fr/terms/enterprise_fr
|
||||
if pagename.startswith('legal/terms/'):
|
||||
if _lang in legal_translations and not pagename.endswith(f"_{_lang}"):
|
||||
# remove language code for current translation, set target one
|
||||
_page = re.sub("_[a-z]{2}$", "", pagename)
|
||||
if 'terms/i18n' not in _page:
|
||||
_page = _page.replace("/terms/", "/terms/i18n/")
|
||||
_canonical_page = f'{_page}_{_lang}.html'
|
||||
elif _lang == 'en' and pagename.endswith(tuple(f"_{l}" for l in legal_translations)):
|
||||
# remove language code for current translation, link to original EN one
|
||||
_page = re.sub("_[a-z]{2}$", "", pagename)
|
||||
_canonical_page = f'{_page.replace("/i18n/", "/")}.html'
|
||||
|
||||
if app.config.is_remote_build:
|
||||
_canonical_page = _canonical_page.replace('index.html', '')
|
||||
|
||||
return f'{_root}' \
|
||||
f'{f"/{_version}" if app.config.versions else ""}' \
|
||||
f'{f"/{_lang}" if _lang != "en" else ""}' \
|
||||
|
||||
@@ -47,3 +47,4 @@ functionalities, including functional support, upgrades, and hosting. `Pricing
|
||||
install/deploy
|
||||
install/cdn
|
||||
install/email_gateway
|
||||
install/geo_ip
|
||||
|
||||
@@ -330,7 +330,7 @@ in ``/etc/nginx/sites-enabled/odoo.conf`` set:
|
||||
proxy_pass http://odoochat;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection $connection_upgrade;
|
||||
proxy_set_header X-Forwarded-Host $host;
|
||||
proxy_set_header X-Forwarded-Host $http_host;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
@@ -339,7 +339,7 @@ in ``/etc/nginx/sites-enabled/odoo.conf`` set:
|
||||
# Redirect requests to odoo backend server
|
||||
location / {
|
||||
# Add Headers for odoo proxy mode
|
||||
proxy_set_header X-Forwarded-Host $host;
|
||||
proxy_set_header X-Forwarded-Host $http_host;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
@@ -439,51 +439,71 @@ Odoo static files are located in each module's :file:`static/` folder, so static
|
||||
by intercepting all requests to :samp:`/{MODULE}/static/{FILE}`, and looking up the right module
|
||||
(and file) in the various addons paths.
|
||||
|
||||
.. example::
|
||||
Say Odoo has been installed via the **debian packages** for Community and Enterprise and the
|
||||
:option:`--addons-path <odoo-bin --addons-path>` is ``'/usr/lib/python3/dist-packages/odoo/addons'``.
|
||||
It is recommended to set the ``Content-Security-Policy: default-src 'none'`` header on all images
|
||||
delivered by the web server. It is not strictly necessary as users cannot modify/inject content
|
||||
inside of modules' :file:`static/` folder and existing images are final (they do not fetch new
|
||||
resources by themselves). However, it is good practice.
|
||||
|
||||
Using the above NGINX (https) configuration, the following location block should be added to
|
||||
serve static files via NGINX.
|
||||
Using the above NGINX (https) configuration, the following ``map`` and ``location`` blocks should be
|
||||
added to serve static files via NGINX.
|
||||
|
||||
.. code-block:: nginx
|
||||
.. code-block:: nginx
|
||||
|
||||
location @odoo {
|
||||
# copy-paste the content of the / location block
|
||||
}
|
||||
map $sent_http_content_type $content_type_csp {
|
||||
default "";
|
||||
~image/ "default-src 'none'";
|
||||
}
|
||||
|
||||
# Serve static files right away
|
||||
location ~ ^/[^/]+/static/.+$ {
|
||||
root /usr/lib/python3/dist-packages/odoo/addons;
|
||||
try_files $uri @odoo;
|
||||
expires 24h;
|
||||
}
|
||||
server {
|
||||
# the rest of the configuration
|
||||
|
||||
location @odoo {
|
||||
# copy-paste the content of the / location block
|
||||
}
|
||||
|
||||
# Serve static files right away
|
||||
location ~ ^/[^/]+/static/.+$ {
|
||||
# root and try_files both depend on your addons paths
|
||||
root ...;
|
||||
try_files ... @odoo;
|
||||
expires 24h;
|
||||
add_header Content-Security-Policy $content_type_csp;
|
||||
}
|
||||
}
|
||||
|
||||
The actual ``root`` and ``try_files`` directives are dependant on your installation, specifically on
|
||||
your :option:`--addons-path <odoo-bin --addons-path>`.
|
||||
|
||||
.. example::
|
||||
Say Odoo has been installed via the **source**. The two git repositories for Community and
|
||||
Enterprise have been cloned in :file:`/opt/odoo/community` and :file:`/opt/odoo/enterprise`
|
||||
respectively and the :option:`--addons-path <odoo-bin --addons-path>` is
|
||||
``'/opt/odoo/community/odoo/addons,/opt/odoo/community/addons,/opt/odoo/enterprise'``.
|
||||
|
||||
Using the above NGINX (https) configuration, the following location block should be added to
|
||||
serve static files via NGINX.
|
||||
.. tabs::
|
||||
|
||||
.. code-block:: nginx
|
||||
.. group-tab:: Debian package
|
||||
|
||||
location @odoo {
|
||||
# copy-paste the content of the / location block
|
||||
}
|
||||
Say Odoo has been installed via the **debian packages** for Community and Enterprise, and
|
||||
that the :option:`--addons-path <odoo-bin --addons-path>` is
|
||||
``'/usr/lib/python3/dist-packages/odoo/addons'``.
|
||||
|
||||
# Serve static files right away
|
||||
location ~ ^/[^/]+/static/.+$ {
|
||||
root /opt/odoo;
|
||||
try_files /community/odoo/addons$uri /community/addons$uri /enterprise$uri @odoo;
|
||||
expires 24h;
|
||||
}
|
||||
The ``root`` and ``try_files`` should be:
|
||||
|
||||
.. warning::
|
||||
The actual NGINX configuration you need is highly dependent on your own installation. The two
|
||||
above snippets only highlight two possible configurations and may not be used as-is.
|
||||
.. code-block:: nginx
|
||||
|
||||
root /usr/lib/python3/dist-packages/odoo/addons;
|
||||
try_files $uri @odoo;
|
||||
|
||||
.. group-tab:: Git sources
|
||||
|
||||
Say Odoo has been installed via the **sources**, that both the Community and Enterprise git
|
||||
repositories were cloned in :file:`/opt/odoo/community` and :file:`/opt/odoo/enterprise`
|
||||
respectively, and that the :option:`--addons-path <odoo-bin --addons-path>` is
|
||||
``'/opt/odoo/community/odoo/addons,/opt/odoo/community/addons,/opt/odoo/enterprise'``.
|
||||
|
||||
The ``root`` and ``try_files`` should be:
|
||||
|
||||
.. code-block:: nginx
|
||||
|
||||
root /opt/odoo;
|
||||
try_files /community/odoo/addons$uri /community/addons$uri /enterprise$uri @odoo;
|
||||
|
||||
Serving attachments
|
||||
-------------------
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
==========================================
|
||||
Geo IP Installation (On-Premises Database)
|
||||
==========================================
|
||||
======
|
||||
Geo IP
|
||||
======
|
||||
|
||||
.. note::
|
||||
This documentation only applies to On-premise databases.
|
||||
|
||||
Installation
|
||||
============
|
||||
@@ -32,8 +35,8 @@ Installation
|
||||
.. seealso::
|
||||
- :doc:`CLI documentation </developer/reference/cli>`.
|
||||
|
||||
Test GeoIP Geolocation In Odoo Website
|
||||
======================================
|
||||
Test GeoIP geolocation in your Odoo website
|
||||
===========================================
|
||||
|
||||
Edit a web page to include some geo-ip information such as the country name of the current
|
||||
request IP address. To do so:
|
||||
@@ -54,10 +54,10 @@ Odoo needs a `PostgreSQL <https://www.postgresql.org/>`_ server to run properly.
|
||||
$ sudo systemctl start postgresql
|
||||
|
||||
.. warning::
|
||||
`wkhtmltopdf` is not installed through **pip** and must be installed manually in `version 0.12.5
|
||||
<https://github.com/wkhtmltopdf/wkhtmltopdf/releases/tag/0.12.5>`_ for it to support headers and
|
||||
footers. Check out the `wkhtmltopdf wiki <https://github.com/odoo/odoo/wiki/Wkhtmltopdf>`_ for
|
||||
more details on the various versions.
|
||||
`wkhtmltopdf` is not installed through **pip** and must be installed manually in `version 0.12.6
|
||||
<https://github.com/wkhtmltopdf/packaging/releases/tag/0.12.6.1-3>`_ for it to support headers
|
||||
and footers. Check out the `wkhtmltopdf wiki <https://github.com/odoo/odoo/wiki/Wkhtmltopdf>`_
|
||||
for more details on the various versions.
|
||||
|
||||
Repository
|
||||
----------
|
||||
|
||||
@@ -229,7 +229,7 @@ PostgreSQL user.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo -u postgres createuser -s $USER
|
||||
$ sudo -u postgres createuser -d -R -S $USER
|
||||
$ createdb $USER
|
||||
|
||||
.. note::
|
||||
@@ -254,7 +254,7 @@ PostgreSQL user.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo -u postgres createuser -s $USER
|
||||
$ sudo -u postgres createuser -d -R -S $USER
|
||||
$ createdb $USER
|
||||
|
||||
.. note::
|
||||
@@ -413,10 +413,10 @@ Dependencies
|
||||
$ sudo npm install -g rtlcss
|
||||
|
||||
.. warning::
|
||||
`wkhtmltopdf` is not installed through **pip** and must be installed manually in `version 0.12.5
|
||||
<https://github.com/wkhtmltopdf/wkhtmltopdf/releases/tag/0.12.5>`_ for it to support headers and
|
||||
footers. Check out the `wkhtmltopdf wiki <https://github.com/odoo/odoo/wiki/Wkhtmltopdf>`_ for
|
||||
more details on the various versions.
|
||||
`wkhtmltopdf` is not installed through **pip** and must be installed manually in `version 0.12.6
|
||||
<https://github.com/wkhtmltopdf/packaging/releases/tag/0.12.6.1-3>`_ for it to support headers
|
||||
and footers. Check out the `wkhtmltopdf wiki <https://github.com/odoo/odoo/wiki/Wkhtmltopdf>`_
|
||||
for more details on the various versions.
|
||||
|
||||
.. _install/source/running_odoo:
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ able to read (IMAP) and send (SMTP) emails in the Microsoft 365 setup. First, cl
|
||||
Add a Permission` button and select :guilabel:`Microsoft Graph` under :guilabel:`Commonly Used
|
||||
Microsoft APIs`. After, select the :guilabel:`Delegated Permissions` option.
|
||||
|
||||
In the search bar, search for the following :guilabel:`Deregulated permissions` and click
|
||||
In the search bar, search for the following :guilabel:`Delegated permissions` and click
|
||||
:guilabel:`Add permissions` for each one:
|
||||
|
||||
- :guilabel:`SMTP.Send`
|
||||
|
||||
@@ -129,6 +129,5 @@ users, click :guilabel:`Add more users`.
|
||||
To remove users, select them and click :guilabel:`Remove`.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../../applications/general/users/manage_users`
|
||||
- :doc:`../../applications/general/users/delete_account`
|
||||
|
||||
- :doc:`/applications/general/users/manage_users`
|
||||
- :doc:`/applications/general/users/odoo_account`
|
||||
|
||||
@@ -29,3 +29,24 @@ We advise that:
|
||||
- Your scheduled actions should be
|
||||
`idempotent <https://stackoverflow.com/a/1077421/3332416>`_: they must not
|
||||
cause side-effects if they are started more often than expected.
|
||||
|
||||
How do I know if I need more workers ?
|
||||
--------------------------------------
|
||||
|
||||
Workers are abstract units of resources allocated to your database. The more workers you have the more it can be accessed concurrently.
|
||||
|
||||
As a general rule of thumb, you should allocate about **1 worker per 25 users and 1 worker for every 5000 daily visitors**. However, this can vary considerably based on database usage, website characteristics, and code customizations.
|
||||
|
||||
Speed is only impacted if you have too much concurrency.
|
||||
|
||||
If things are getting slow, here are a couple of indications to tell if it's due to a high concurrency.
|
||||
|
||||
- When things gets slow, **everything is slowed down**, not just specific operations.
|
||||
- **The slowness comes and goes**, typically it's better outside of business hours. (There can be other reasons for this as well.)
|
||||
- :ref:`Open your monitoring <odoosh-gettingstarted-branches-tabs-monitoring>`, there is a graph indicating the number of **"concurrent requests (max)"**. This graphs is often high or shows a flat upper bound during a prolonged period of time.
|
||||
- Some requests get a **"429 Too Many Requests"** response code.
|
||||
|
||||
If you have these symptoms it's advisable to try increasing your workers.
|
||||
|
||||
.. warning::
|
||||
Sometimes this high concurrency is temporary or illegitimate, it's possible your website is being crawled or that you have misconfigured third party applications excessively sollicitating your database. To identify this, have a look at the IP adresses in your odoo logs to see if some are flooding.
|
||||
|
||||
@@ -208,6 +208,8 @@ You can also open terminals, Python consoles and even Odoo Shell consoles.
|
||||
You can open multiple tabs and drag-and-drop them to arrange the layout as you wish,
|
||||
for instance side by side.
|
||||
|
||||
.. _odoosh-gettingstarted-branches-tabs-monitoring:
|
||||
|
||||
Monitoring
|
||||
----------
|
||||
|
||||
|
||||
@@ -39,10 +39,11 @@ An upgrade does not cover:
|
||||
- Migrating from another ERP to Odoo
|
||||
|
||||
.. warning::
|
||||
If your database contains a **custom module**, you must first upgrade its source code to be
|
||||
compatible with the new version of Odoo **before upgrading**.
|
||||
.. TODOUPG : once the page for developers is published, uncomment and link
|
||||
.. :doc:`first upgrade its source code </developer/reference/upgrade>`
|
||||
If your database contains custom modules, it cannot be upgraded until a version of your custom
|
||||
modules is available for the target version of Odoo. For customers maintaining their own custom
|
||||
modules, we recommend to parallelize the process by :ref:`requesting an upgraded database
|
||||
<upgrade/request-test-database>` while also :doc:`upgrading the source code of your custom
|
||||
modules </developer/howtos/upgrade_custom_db>`.
|
||||
|
||||
|
||||
Upgrading in a nutshell
|
||||
@@ -51,15 +52,15 @@ Upgrading in a nutshell
|
||||
#. Request an upgraded test database (see :ref:`obtaining an upgraded test database
|
||||
<upgrade/request-test-database>`).
|
||||
|
||||
#. If applicable, upgrade the source code of your custom module to be compatible with the new
|
||||
version of Odoo (see :doc:`/developer/howtos/upgrade_custom_db`).
|
||||
|
||||
#. Thoroughly test the upgraded database (see :ref:`testing the new version of the database
|
||||
<upgrade/test_your_db>`).
|
||||
|
||||
#. Report any issue encountered during the testing to Odoo via the `support page
|
||||
<https://odoo.com/help?stage=migration>`__.
|
||||
|
||||
#. (If applicable) : upgrade the source code of your custom module to be compatible with the new
|
||||
version of Odoo.
|
||||
|
||||
#. Once all issues are resolved and you are confident that the upgraded database can be used as
|
||||
your main database without any issues, plan the upgrade of your production database.
|
||||
|
||||
@@ -69,9 +70,6 @@ Upgrading in a nutshell
|
||||
#. Report any issue encountered during the upgrade to Odoo via the `support page
|
||||
<https://odoo.com/help?stage=post_upgrade>`__.
|
||||
|
||||
.. TODOUPG: Once the page for developers is published, put this at 4)
|
||||
.. (see :ref:`upgrading customizations <upgrade/upgrading_customizations>`).
|
||||
|
||||
.. _upgrade/request-test-database:
|
||||
|
||||
Obtaining an upgraded test database
|
||||
@@ -136,18 +134,13 @@ project <https://odoo.sh/project>`_.
|
||||
file of the upgrade process can be found in your newly upgraded staging build by going to
|
||||
:file:`~/logs/upgrade.log`.
|
||||
|
||||
.. note::
|
||||
In databases where custom modules are installed, their source code
|
||||
must be up-to-date with the target version of Odoo before the upgrade
|
||||
can be performed. If there are none, the "update on commit" mode is
|
||||
skipped, the upgraded database is built as soon as it is transferred from the upgrade
|
||||
platform, and the upgrade mode is exited.
|
||||
.. important::
|
||||
In databases where custom modules are installed, their source code must be up-to-date with
|
||||
the target version of Odoo before the upgrade can be performed. If there are none, the
|
||||
"update on commit" mode is skipped, the upgraded database is built as soon as it is
|
||||
transferred from the upgrade platform, and the upgrade mode is exited.
|
||||
|
||||
.. TODOUPG : once the page for developers is published, uncomment
|
||||
.. Check out the :doc:`upgrade for developers'
|
||||
.. documentation </developer/reference/upgrade>` for more information. In
|
||||
.. addition, if a module is not needed after an upgrade, :ref:`you can
|
||||
.. remove customizations <upgrade/remove_customizations>`.
|
||||
Check out the :doc:`/developer/howtos/upgrade_custom_db` page for more information.
|
||||
|
||||
.. group-tab:: On-premise
|
||||
|
||||
@@ -167,6 +160,11 @@ project <https://odoo.sh/project>`_.
|
||||
An upgraded test database can also be requested via the `Upgrade page
|
||||
<https://upgrade.odoo.com/>`_.
|
||||
|
||||
.. important::
|
||||
In databases where custom modules are installed, their source code must be up-to-date with
|
||||
the target version of Odoo before the upgrade can be performed. Check out the
|
||||
:doc:`/developer/howtos/upgrade_custom_db` page for more information.
|
||||
|
||||
.. note::
|
||||
- For security reasons, only the person who submitted the upgrade request can download it.
|
||||
- For storage reasons, the database's copy is submitted without a filestore to the upgrade
|
||||
@@ -291,8 +289,8 @@ the upgrade at a time when the use of the database is minimal.
|
||||
|
||||
As the standard upgrade scripts and your database are constantly evolving, it is also recommended
|
||||
to frequently request another upgraded test database to ensure that the upgrade process is
|
||||
still successful, especially if it takes a long time to finish. Fully rehearsing the upgrade
|
||||
process the day before upgrading the production database is also recommended.
|
||||
still successful, especially if it takes a long time to finish. **Fully rehearsing the upgrade
|
||||
process the day before upgrading the production database is also recommended.**
|
||||
|
||||
.. important::
|
||||
- Going into production without first testing may lead to:
|
||||
@@ -337,9 +335,8 @@ exceptions.
|
||||
|
||||
The update of your custom modules must be successful to complete the entire upgrade process.
|
||||
Make sure the status of your staging upgrade is :guilabel:`successful` before trying it in
|
||||
production.
|
||||
.. TODOUPG : once the page for developers is published, uncomment
|
||||
.. More information on how to upgrade your custom modules can be found in the :ref:`upgrading customizations documentation <upgrade/upgrading_customizations>`.
|
||||
production. More information on how to upgrade your custom modules can be found on
|
||||
:doc:`/developer/howtos/upgrade_custom_db`.
|
||||
|
||||
.. group-tab:: On-premise
|
||||
|
||||
|
||||
@@ -209,8 +209,7 @@ available methods are standard price, average price, :abbr:`LIFO (Last-In, First
|
||||
: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>`
|
||||
:doc:`../inventory_and_mrp/inventory/warehouses_storage/inventory_valuation/inventory_valuation_config`
|
||||
|
||||
Retained earnings
|
||||
=================
|
||||
@@ -222,6 +221,8 @@ and loss balance is automatically reported on the balance sheet report.
|
||||
.. seealso::
|
||||
:doc:`Accounting Cheat Sheet <accounting/get_started/cheat_sheet>`
|
||||
|
||||
.. _fiduciaries:
|
||||
|
||||
Fiduciaries
|
||||
===========
|
||||
|
||||
|
||||
@@ -107,9 +107,9 @@ If your connection with the proxy is disconnected, you can reconnect with the pr
|
||||
:guilabel:`Fetch Account` button.
|
||||
|
||||
.. note::
|
||||
This disconnection can be caused by the Odoo support. In this case, please contact the `support
|
||||
<https://www.odoo.com/help>`_ directly with your client id or the reference of the error listed
|
||||
in the chatter.
|
||||
If you are unable to reconnect using the :guilabel:`Reconnect` button, please contact the
|
||||
`support <https://www.odoo.com/help>`_ directly with your client id or the reference of the error
|
||||
listed in the chatter.
|
||||
|
||||
.. _MigrationOnlineSync:
|
||||
|
||||
|
||||
@@ -21,6 +21,8 @@ vendors because of modifications to confirmed customer invoices or vendor bills.
|
||||
:doc:`return </applications/sales/sales/products_prices/returns>` if a storable product is
|
||||
returned.
|
||||
|
||||
.. _accounting/issue-credit-note:
|
||||
|
||||
Issue a credit note
|
||||
===================
|
||||
|
||||
@@ -72,6 +74,8 @@ prefilled with the same details from the original invoice.
|
||||
|
||||
This is the option to **modify** the content of a *validated* invoice.
|
||||
|
||||
.. _accounting/issue-debit-note:
|
||||
|
||||
Issue a debit note
|
||||
==================
|
||||
|
||||
|
||||
@@ -2,194 +2,175 @@
|
||||
Deferred revenues
|
||||
=================
|
||||
|
||||
**Deferred revenues**, or **unearned revenue**, are payments made in advance by customers for
|
||||
products yet to deliver or services yet to render.
|
||||
**Deferred revenues**, or **unearned revenues**, are invoices addressed to customers
|
||||
for goods yet to be delivered or services yet to be rendered.
|
||||
|
||||
Such payments are a **liability** for the company that receives them since it still owes its
|
||||
customers these products or services. The company cannot report them on the current **Profit and
|
||||
Loss statement**, or *Income Statement*, since the payments will be effectively earned in the future.
|
||||
The company cannot report them on the current **profit and loss statement**, or *income statement*,
|
||||
since the goods and services will be effectively delivered/rendered in the future.
|
||||
|
||||
These future revenues must be deferred on the company's balance sheet until the moment in time they
|
||||
can be **recognized**, at once or over a defined period, on the Profit and Loss statement.
|
||||
These future revenues must be deferred on the company's balance sheet among the current liabilities
|
||||
until they can be **recognized**, at once or over a defined period, on the profit and loss
|
||||
statement.
|
||||
|
||||
For example, let's say we sell a five-year extended warranty for $ 350. We already receive the money
|
||||
now but haven't earned it yet. Therefore, we post this new income in a deferred revenue account and
|
||||
decide to recognize it on a yearly basis. Each year, for the next 5 years, $ 70 will be recognized
|
||||
as revenue.
|
||||
For example, let's say a business sells a software license of $1200 for 1 year. They immediately
|
||||
invoice it to the customer but can't consider it earned yet, as the future months of licensing have
|
||||
not yet been delivered. Therefore, they post this new revenue in a deferred revenue account and
|
||||
recognize it on a monthly basis. Each month, for the next 12 months, $100 will be recognized as
|
||||
revenue.
|
||||
|
||||
Odoo Accounting handles deferred revenues by spreading them in multiple entries that are
|
||||
automatically created in *draft mode* and then posted periodically.
|
||||
Odoo Accounting handles deferred revenues by spreading them in multiple entries that are posted
|
||||
periodically.
|
||||
|
||||
.. note::
|
||||
The server checks once a day if an entry must be posted. It might then take up to 24 hours before
|
||||
you see a change from *draft* to *posted*.
|
||||
you see a change from :guilabel:`Draft` to :guilabel:`Posted`.
|
||||
|
||||
Prerequisites
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Such transactions must be posted on a **Deferred Revenue Account** rather than on the default income
|
||||
account.
|
||||
Make sure the default settings are correctly configured for your business. To do so, go to
|
||||
:menuselection:`Accounting --> Configuration --> Settings`. The following options are available:
|
||||
|
||||
Configure a Deferred Revenue Account
|
||||
------------------------------------
|
||||
Journal
|
||||
The deferral entries are posted in this journal.
|
||||
Deferred Expense Account
|
||||
Expenses are deferred on this Current Asset account until they are recognized.
|
||||
Deferred Revenue Account
|
||||
Revenues are deferred on this Current Liability account until they are recognized.
|
||||
Generate Entries
|
||||
By default, Odoo :ref:`automatically generates <customer_invoices/deferred/generate_on_validation>`
|
||||
the deferral entries when you post a customer invoice. However, you can also choose to
|
||||
:ref:`generate them manually <customer_invoices/deferred/generate_manually>` by selecting the
|
||||
:guilabel:`Manually & Grouped` option instead.
|
||||
Amount Computation
|
||||
Suppose an invoice of $1200 must be deferred over 12 months. The :guilabel:`Equal per month`
|
||||
computation accounts for $100 each month, while the :guilabel:`Based on days` computation
|
||||
accounts for different amounts depending on the number of days in each month.
|
||||
|
||||
To configure your account in the **Chart of Accounts**, go to :menuselection:`Accounting -->
|
||||
Configuration --> Chart of Accounts`, click on *Create*, and fill out the form.
|
||||
.. _customer_invoices/deferred/generate_on_validation:
|
||||
|
||||
.. image:: deferred_revenues/deferred_revenues01.png
|
||||
:align: center
|
||||
:alt: Configuration of a Deferred Revenue Account in Odoo Accounting
|
||||
Generate deferral entries on validation
|
||||
=======================================
|
||||
|
||||
.. tip::
|
||||
Make sure the :guilabel:`Start Date` and :guilabel:`End Date` fields are visible in the
|
||||
:guilabel:`Invoice Lines` tab. In most cases, the :guilabel:`Start Date` should be in the same
|
||||
month as the :guilabel:`Invoice Date`.
|
||||
|
||||
For each line of the invoice that should be deferred, specify the start and end dates of the
|
||||
deferral period.
|
||||
|
||||
If the :guilabel:`Generate Entries` field in the **Settings** is set to :guilabel:`On invoice/bill
|
||||
validation`, Odoo automatically generates the deferral entries when the invoice is validated. Click
|
||||
the :guilabel:`Deferred Entries` smart button to see them.
|
||||
|
||||
One entry, dated on the same day as the invoice, moves the invoice amounts from the income account
|
||||
to the deferred account. The other entries are deferral entries which, month after month, move
|
||||
the invoice amounts from the deferred account to the income account to recognize the revenue.
|
||||
|
||||
.. example::
|
||||
You can defer a January invoice of $1200 over 12 months by specifying a start date of 01/01/2023
|
||||
and an end date of 12/31/2023. At the end of August, $800 is recognized as an income,
|
||||
whereas $400 remains on the deferred account.
|
||||
|
||||
Reporting
|
||||
=========
|
||||
|
||||
The deferred revenue report computes an overview of the necessary deferral entries for each account.
|
||||
To access it, go to :menuselection:`Accounting --> Reporting --> Deferred Revenue`.
|
||||
|
||||
To view the journal items of each account, click on the account name and then :guilabel:`Journal
|
||||
Items`.
|
||||
|
||||
.. image:: deferred_revenues/deferred_revenue_report.png
|
||||
:alt: Deferred revenue report
|
||||
|
||||
.. note::
|
||||
This account's type must be either *Current Liabilities* or *Non-current Liabilities*
|
||||
Only invoices whose accounting date is before the end of the period of the report
|
||||
are taken into account.
|
||||
|
||||
Post an income to the right account
|
||||
-----------------------------------
|
||||
.. _customer_invoices/deferred/generate_manually:
|
||||
|
||||
Select the account on a draft invoice
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Generate grouped deferral entries manually
|
||||
==========================================
|
||||
|
||||
On a draft invoice, select the right account for all the products of which the incomes must be
|
||||
deferred.
|
||||
If you have a lot of deferred revenues and wish to reduce the number of journal entries created, you
|
||||
can generate deferral entries manually. To do so, set the :guilabel:`Generate Entries` field in the
|
||||
**Settings** to :guilabel:`Manually & Grouped`. Odoo then aggregates the deferred amounts in a
|
||||
single entry.
|
||||
|
||||
.. image:: deferred_revenues/deferred_revenues02.png
|
||||
:align: center
|
||||
:alt: Selection of a Deferred Revenue Account on a draft invoice in Odoo Accounting
|
||||
At the end of each month, go to :menuselection:`Accounting --> Reporting --> Deferred Revenue` and
|
||||
click the :guilabel:`Generate Entries` button. This generates two deferral entries:
|
||||
|
||||
Choose a different Income Account for specific products
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
- One dated at the end of the month which aggregates, for each account, all the deferred amounts
|
||||
of that month. This means that a part of the deferred revenue is recognized at the end of that
|
||||
period.
|
||||
- The reversal of this created entry, dated on the following day (i.e., the first day of the
|
||||
next month) to cancel the previous entry.
|
||||
|
||||
Start editing the product, go to the *Accounting* tab, select the right **Income Account**, and
|
||||
save.
|
||||
.. example::
|
||||
There are two invoices:
|
||||
|
||||
.. image:: deferred_revenues/deferred_revenues03.png
|
||||
:align: center
|
||||
:alt: Change of the Income Account for a product in Odoo
|
||||
- Invoice A: $1200 to be deferred from 01/01/2023 to 12/31/2023
|
||||
- Invoice B: $600 to be deferred from 01/01/2023 to 12/31/2023
|
||||
|
||||
.. tip::
|
||||
It is possible to automate the creation of revenue entries for these products (see:
|
||||
`Automate the Deferred Revenues`_).
|
||||
In January
|
||||
At the end of January, after clicking the :guilabel:`Generate Entries` button, there are the
|
||||
following entries:
|
||||
|
||||
Change the account of a posted journal item
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
- Entry 1 dated on the 31st January:
|
||||
|
||||
To do so, open your Sales Journal by going to
|
||||
:menuselection:`Accounting --> Accounting --> Sales`, select the journal item you
|
||||
want to modify, click on the account, and select the right one.
|
||||
- Line 1: Expense account -1200 -600 = **-1800** (cancelling the total of both invoices)
|
||||
- Line 2: Expense account 100 + 50 = **150** (recognizing 1/12 of invoice A and invoice B)
|
||||
- Line 3: Deferred account 1800 - 150 = **1650** (amount that has yet to be deferred later
|
||||
on)
|
||||
|
||||
.. image:: deferred_revenues/deferred_revenues04.png
|
||||
:align: center
|
||||
:alt: Modification of a posted journal item's account in Odoo Accounting
|
||||
- Entry 2 dated on the 1st February, the reversal of the previous entry:
|
||||
|
||||
Deferred Revenues entries
|
||||
=========================
|
||||
- Line 1: Expense account **1800**
|
||||
- Line 2: Deferred account **-150**
|
||||
- Line 3: Expense account **-1650**
|
||||
|
||||
Create a new entry
|
||||
------------------
|
||||
In February
|
||||
At the end of February, after clicking the :guilabel:`Generate Entries` button, there are the
|
||||
following entries:
|
||||
|
||||
A **Deferred Revenues entry** automatically generates all journal entries in *draft mode*. They are
|
||||
then posted one by one at the right time until the full amount of the income is recognized.
|
||||
- Entry 1 dated on the 28th February:
|
||||
|
||||
To create a new entry, go to :menuselection:`Accounting --> Accounting --> Deferred Revenues`, click
|
||||
on *Create*, and fill out the form.
|
||||
- Line 1: Expense account -1200 -600 = **-1800** (cancelling the total of both invoices)
|
||||
- Line 2: Expense account 200 + 100 = **300** (recognizing 2/12 of invoice A and invoice B)
|
||||
- Line 3: Deferred account 1800 - 300 = **1500** (amount that has yet to be deferred later
|
||||
on)
|
||||
|
||||
Click on **select related purchases** to link an existing journal item to this new entry. Some
|
||||
fields are then automatically filled out, and the journal item is now listed under the **Related
|
||||
Sales** tab.
|
||||
- Entry 2 dated on the 1st March, the reversal of the previous entry.
|
||||
|
||||
.. image:: deferred_revenues/deferred_revenues05.png
|
||||
:align: center
|
||||
:alt: Deferred Revenue entry in Odoo Accounting
|
||||
From March to October
|
||||
The same computation is done for each month until October.
|
||||
|
||||
Once done, you can click on *Compute Revenue* (next to the *Confirm* button) to generate all the
|
||||
values of the **Revenue Board**. This board shows you all the entries that Odoo will post to
|
||||
recognize your revenue, and at which date.
|
||||
In November
|
||||
At the end of November, after clicking the :guilabel:`Generate Entries` button, there are the
|
||||
following entries:
|
||||
|
||||
.. image:: deferred_revenues/deferred_revenues06.png
|
||||
:align: center
|
||||
:alt: Revenue Board in Odoo Accounting
|
||||
- Entry 1 dated on the 30th November:
|
||||
|
||||
What does "Prorata Temporis" mean?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
- Line 1: Expense account -1200 -600 = **-1800** (cancelling the total of both invoices)
|
||||
- Line 2: Expense account 1100 + 550 = **1650** (recognizing 11/12 of invoice A and invoice
|
||||
B)
|
||||
- Line 3: Deferred account 1800 - 1650 = **150** (amount that has yet to be deferred later
|
||||
on)
|
||||
|
||||
The **Prorata Temporis** feature is useful to recognize your revenue the most accurately possible.
|
||||
- Entry 2 dated on the 1st December, the reversal of the previous entry.
|
||||
|
||||
With this feature, the first entry on the Revenue Board is computed based on the time left between
|
||||
the *Prorata Date* and the *First Recognition Date* rather than the default amount of time between
|
||||
recognitions.
|
||||
In December
|
||||
There is no need to generate entries in December. Indeed, if we do the computation for
|
||||
December, we have an amount of 0 to be deferred.
|
||||
|
||||
For example, the Revenue Board above has its first revenue with an amount of $ 4.22 rather than
|
||||
$ 70.00. Consequently, the last entry is also lower and has an amount of $ 65.78.
|
||||
In total
|
||||
If we aggregate everything, we would have:
|
||||
|
||||
Deferred Entry from the Sales Journal
|
||||
-------------------------------------
|
||||
- invoice A and invoice B
|
||||
- two entries (one for the deferral and one for the reversal) for each month from January to
|
||||
November
|
||||
|
||||
You can create a deferred entry from a specific journal item in your **Sales Journal**.
|
||||
|
||||
To do so, open your Sales Journal by going to
|
||||
:menuselection:`Accounting --> Accounting --> Sales`, and select the journal item you want to defer.
|
||||
Make sure that it is posted in the right account (see:
|
||||
`Change the account of a posted journal item`_).
|
||||
|
||||
Then, click on *Action*, select **Create Deferred Entry**, and fill out the form the same way you
|
||||
would do to `create a new entry`_.
|
||||
|
||||
.. image:: deferred_revenues/deferred_revenues07.png
|
||||
:align: center
|
||||
:alt: Create Deferred Entry from a journal item in Odoo Accounting
|
||||
|
||||
Deferred Revenue Models
|
||||
=======================
|
||||
|
||||
You can create **Deferred Revenue Models** to create your Deferred Revenue entries faster.
|
||||
|
||||
To create a model, go to :menuselection:`Accounting --> Configuration --> Deferred Revenue Models`,
|
||||
click on *Create*, and fill out the form the same way you would do to create a new entry.
|
||||
|
||||
.. tip::
|
||||
You can also convert a *confirmed Deferred Revenue entry* into a model by
|
||||
opening it from :menuselection:`Accounting --> Accounting --> Deferred
|
||||
Revenues` and then, by clicking on the button *Save Model*.
|
||||
|
||||
Apply a Deferred Revenue Model to a new entry
|
||||
---------------------------------------------
|
||||
|
||||
When you create a new Deferred Revenue entry, fill out the **Deferred Revenue Account** with the
|
||||
right recognition account.
|
||||
|
||||
New buttons with all the models linked to that account appear at the top of the form. Clicking on a
|
||||
model button fills out the form according to that model.
|
||||
|
||||
.. image:: deferred_revenues/deferred_revenues08.png
|
||||
:align: center
|
||||
:alt: Deferred Revenue model button in Odoo Accounting
|
||||
|
||||
.. _deferred-revenues-automation:
|
||||
|
||||
Automate the Deferred Revenues
|
||||
==============================
|
||||
|
||||
When you create or edit an account of which the type is either *Current Liabilities* or *Non-current
|
||||
Liabilities*, you can configure it to defer the revenues that are credited on it automatically.
|
||||
|
||||
You have three choices for the **Automate Deferred Revenue** field:
|
||||
|
||||
#. **No:** this is the default value. Nothing happens.
|
||||
#. **Create in draft:** whenever a transaction is posted on the account, a draft *Deferred Revenues
|
||||
entry* is created, but not validated. You must first fill out the form in
|
||||
:menuselection:`Accounting --> Accounting --> Deferred Revenues`.
|
||||
#. **Create and validate:** you must also select a Deferred Revenue Model (see:
|
||||
`Deferred Revenue Models`_). Whenever a transaction is posted on the account, a *Deferred
|
||||
Revenues entry* is created and immediately validated.
|
||||
|
||||
.. image:: deferred_revenues/deferred_revenues09.png
|
||||
:align: center
|
||||
:alt: Automate Deferred Revenue on an account in Odoo Accounting
|
||||
|
||||
.. tip::
|
||||
You can, for example, select this account as the default **Income Account** of a product to fully
|
||||
automate its sale. (see: `Choose a different Income Account for specific products`_).
|
||||
|
||||
.. seealso::
|
||||
* :doc:`../get_started/chart_of_accounts`
|
||||
* `Odoo Academy: Deferred Revenues (Recognition) <https://www.odoo.com/r/EWO>`_
|
||||
Therefore, at the end of December, invoices A and B are fully recognized as income
|
||||
only once in spite of all the created entries thanks to the reversal mechanism.
|
||||
|
||||
|
After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 5.4 KiB |
@@ -102,37 +102,176 @@ The `Peppol <https://peppol.org/about/>`_ network ensures the exchange of docume
|
||||
between enterprises and governmental authorities. It is primarily used for electronic invoicing, and
|
||||
its access points (connectors to the Peppol network) allow enterprises to exchange electronic
|
||||
documents.
|
||||
Odoo is now an **access point** enabling electronic invoicing transactions without the need to send
|
||||
invoices and bills by email or post.
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
Odoo is an **access point** and an :abbr:`SMP (Service Metadata Publisher)`, enabling electronic
|
||||
invoicing transactions without the need to send invoices and bills by email or post.
|
||||
|
||||
First, :ref:`install <general/install>` the :guilabel:`Peppol` module (`account_peppol`).
|
||||
If not done yet, :ref:`install <general/install>` the :guilabel:`Peppol` module (`account_peppol`).
|
||||
|
||||
.. image:: electronic_invoicing/peppol-module.png
|
||||
:alt: Peppol module install
|
||||
.. important::
|
||||
- Peppol registration is **free** and available in Odoo Community
|
||||
- You can send **Customer Invoices** and **Credit Notes** and receive **Vendor Bills** and
|
||||
**Refunds** via Peppol.
|
||||
- You can send in one of the following supported document formats: **BIS Billing 3.0, XRechnung
|
||||
CIUS, NLCIUS**.
|
||||
- | The following **countries** are eligible for **Peppol registration in Odoo**:
|
||||
| Andorra, Albania, Austria, Bosnia and Herzegovina, Belgium, Bulgaria, Switzerland, Cyprus,
|
||||
Czech Republic, Germany, Denmark, Estonia, Spain, Finland, France, United Kingdom, Greece,
|
||||
Croatia, Hungary, Ireland, Iceland, Italy, Liechtenstein, Lithuania, Luxembourg, Latvia,
|
||||
Monaco, Montenegro, North Macedonia, Malta, Netherlands, Norway, Poland, Portugal, Romania,
|
||||
Serbia, Sweden, Slovenia, Slovakia, San Marino, Turkey, Holy See (Vatican City State)
|
||||
|
||||
Then, go to :menuselection:`Accounting --> Configuration --> Settings`, tick the
|
||||
:guilabel:`Use PEPPOL Invoicing`, and fill in the following information:
|
||||
Registration
|
||||
------------
|
||||
|
||||
- `PEPPOL EAS <https://ec.europa.eu/digital-building-blocks/wikis/display/DIGITAL/Code+lists/>`_
|
||||
- :guilabel:`Peppol Endpoint`
|
||||
Go to :menuselection:`Accounting --> Configuration --> Settings`. If you do not have the
|
||||
Peppol module installed, first tick the :guilabel:`Enable PEPPOL` checkbox and then **manually
|
||||
save**.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-install.png
|
||||
:alt: Peppol module installation
|
||||
|
||||
Fill in the following information:
|
||||
|
||||
- :guilabel:`Peppol EAS`. This is the Peppol Electronic Address Scheme and usually depends on your
|
||||
company's country. Odoo often prefills this with the most commonly used EAS code in your country.
|
||||
For example, the preferred EAS code for most companies in Belgium is 0208.
|
||||
- :guilabel:`Peppol Endpoint`. This is usually a Company Registry number or a VAT number.
|
||||
- :guilabel:`Phone Number`, including the country code (e.g., `+32` in Belgium)
|
||||
- :guilabel:`Primary contact email`
|
||||
|
||||
If you are migrating from another access point, insert the :guilabel:`Migration key` from
|
||||
the previous provider.
|
||||
.. seealso::
|
||||
- `Peppol EAS - European Commision <https://ec.europa.eu/digital-building-blocks/wikis/display/DIGITAL/Code+lists/>`_
|
||||
- `Peppol Endpoint - OpenPeppol eDEC Code Lists <https://docs.peppol.eu/edelivery/codelists/>`_
|
||||
(open the "Participant Identifier Schemes" as HTML page)
|
||||
|
||||
If you are migrating from another access point, insert the :guilabel:`Migration key` from the
|
||||
previous provider.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-settings.png
|
||||
:alt: Configuration for peppol
|
||||
|
||||
Finally, click on :guilabel:`Validate registration`.
|
||||
Finally, click :guilabel:`Validate registration`. If you want to explore or demo Peppol, you can
|
||||
choose to register in :guilabel:`Demo` mode. Otherwise, select :guilabel:`Live`.
|
||||
|
||||
A text message containing a code is sent to the phone number provided to finalize the registration
|
||||
.. image:: electronic_invoicing/peppol-demo-mode.png
|
||||
:alt: Peppol demo mode selection
|
||||
|
||||
.. note::
|
||||
When testing Peppol, the system parameter `account_peppol.edi.mode` can be changed to `test`.
|
||||
Then, a radio button appears with the option to register on the test server.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-system-parameter.png
|
||||
:alt: Peppol test mode parameter
|
||||
|
||||
.. image:: electronic_invoicing/peppol-test-mode-settings.png
|
||||
:alt: Peppol test mode selection
|
||||
|
||||
Now, you can request a verification code to be sent to you by clicking :guilabel:`Verify phone
|
||||
number`.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-registration-verify.png
|
||||
:alt: phone validation request verification
|
||||
|
||||
A text message containing a code is sent to the phone number provided to finalize the verification
|
||||
process.
|
||||
|
||||
.. image:: electronic_invoicing/phone-registration.png
|
||||
:alt: phone validation
|
||||
|
||||
All invoices and vendor bills are now sent directly using the Peppol network.
|
||||
Once you enter the code and click :guilabel:`Confirm`, you can see that your registration is pending
|
||||
activation. From this point onwards, the default journal for receiving Vendor Bills can be set.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-registration-pending.png
|
||||
:alt: pending application
|
||||
|
||||
It should be automatically activated within a day.
|
||||
|
||||
.. tip::
|
||||
It is also possible to manually trigger the cron that checks the registration status by going to
|
||||
:menuselection:`Settings --> Technical --> Scheduled Actions --> PEPPOL\: update participant
|
||||
status`.
|
||||
|
||||
Your application status should be updated soon after you are registered on the Peppol network.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-registration-active.png
|
||||
:alt: active application
|
||||
|
||||
All invoices and vendor bills can now be sent directly using the Peppol network.
|
||||
|
||||
Contact verification
|
||||
--------------------
|
||||
|
||||
Before sending an invoice to a contact using the Peppol network, it is necessary to verify that they
|
||||
are also registered as a Peppol participant.
|
||||
|
||||
To do so, go to :menuselection:`Accounting --> Customers --> Customers` and open the customer's
|
||||
form. Then go to :menuselection:`Accounting tab --> Electronic Invoicing`, select the correct
|
||||
format, and make sure their :guilabel:`Peppol EAS code` and the :guilabel:`Endpoint` are filled in.
|
||||
Then, click :guilabel:`Verify`. If the contact exists on the network, their Peppol endpoint validity
|
||||
is set to Valid.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-contact-verify.png
|
||||
:alt: verify contact registration
|
||||
|
||||
.. important::
|
||||
While Odoo prefills both the EAS code and the Endpoint number based on the information available
|
||||
for a contact, it is better to confirm these details directly with the contact.
|
||||
|
||||
It is possible to verify the Peppol participant status of several customers at once.
|
||||
To do so, go to :menuselection:`Accounting --> Customers --> Customers` and switch to the list view.
|
||||
Select the customers you want to verify and then click :menuselection:`Actions --> Verify Peppol`.
|
||||
|
||||
Send invoices
|
||||
-------------
|
||||
|
||||
Once ready to send an invoice via the Peppol network, simply click :guilabel:`Send & Print` on the
|
||||
invoice form. To queue multiple invoices, select them in the list view and click
|
||||
:menuselection:`Actions --> Send & Print`; they will be sent in a batch later on. Both
|
||||
:guilabel:`BIS Billing 3.0` and :guilabel:`Send via PEPPOL` checkboxes need to be ticked.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-send-print.png
|
||||
:alt: Send peppol invoice
|
||||
|
||||
Posted invoices that can be sent via Peppol are marked as :guilabel:`Peppol Ready`.
|
||||
To display them, use the :guilabel:`Peppol Ready` filter or access the Accounting dashboard and
|
||||
click :guilabel:`Peppol ready invoices` on the corresponding sales journal.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-ready-invoices.png
|
||||
:alt: Filter Peppol ready invoices
|
||||
|
||||
Once the invoices are sent via Peppol, the status is changed to :guilabel:`Processing`. The
|
||||
status is changed to `Done` after they have been successfully delivered to the contact's Access
|
||||
Point.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-message-processing.png
|
||||
:alt: Peppol message status
|
||||
|
||||
.. tip::
|
||||
By default, the Peppol status column is hidden on the Invoices list view. You can choose to have
|
||||
it displayed by selecting it from the optional columns, accessible from the top right corner of
|
||||
the Invoices list view.
|
||||
|
||||
A cron runs regularly to check the status of these invoices. It is possible to check the status
|
||||
before the cron runs by clicking :guilabel:`Fetch Peppol invoice status` in the corresponding
|
||||
sales journal on the Accounting dashboard.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-fetch-message-status.png
|
||||
:alt: Fetch invoice Peppol status
|
||||
|
||||
Receive vendor bills
|
||||
--------------------
|
||||
|
||||
Once a day, a cron checks whether any new documents have been sent to you via the Peppol network.
|
||||
These documents are imported, and the corresponding vendor bills are created automatically as
|
||||
drafts.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-receive-bills.png
|
||||
:alt: peppol receive bills
|
||||
|
||||
If you want to retrieve incoming Peppol documents before the cron runs, you can do so from the
|
||||
Accounting dashboard on the main Peppol purchase journal that you set up in the settings. Just click
|
||||
:guilabel:`Fetch from Peppol`.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-fetch-bills.png
|
||||
:alt: Fetch bills from Peppol
|
||||
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
@@ -25,7 +25,9 @@ transportation, insurance, customs clearance, and other relevant aspects of the
|
||||
- **DDP**: Delivered duty paid
|
||||
|
||||
.. seealso::
|
||||
:doc:`../reporting/intrastat`
|
||||
- :doc:`../reporting/intrastat`
|
||||
- :doc:`../customer_invoices`
|
||||
- :doc:`../vendor_bills`
|
||||
|
||||
.. _incoterms/invoices:
|
||||
|
||||
@@ -35,6 +37,16 @@ Define an Incoterm
|
||||
To define an Incoterm manually, create an invoice or bill, click the :guilabel:`Other Info` tab, and
|
||||
select the :guilabel:`Incoterm`.
|
||||
|
||||
Incoterm location
|
||||
-----------------
|
||||
|
||||
A location relevant to the chosen Incoterm can be added to the invoice or bill under
|
||||
:guilabel:`Other Info` in the :guilabel:`Incoterm Location` field.
|
||||
|
||||
.. example::
|
||||
If the chosen Incoterm code is `CIF` (Cost, Insurance, Freight), the associated location might be
|
||||
the destination port where the goods will be delivered.
|
||||
|
||||
.. _incoterms/default:
|
||||
|
||||
Default Incoterm configuration
|
||||
|
||||
@@ -3,7 +3,6 @@ Average price on returned goods
|
||||
===============================
|
||||
|
||||
.. |AVCO| replace:: :abbr:`AVCO (Average Cost Valuation)`
|
||||
|
||||
.. _inventory/avg_cost/definition:
|
||||
|
||||
*Average cost valuation* (AVCO) is an inventory valuation method that evaluates cost based on the
|
||||
|
||||
@@ -3,48 +3,39 @@ Chart of accounts
|
||||
=================
|
||||
|
||||
The **chart of accounts (COA)** is the list of all the accounts used to record financial
|
||||
transactions in the general ledger of an organization.
|
||||
transactions in the general ledger of an organization. The chart of accounts can be found under
|
||||
:menuselection:`Accounting --> Configuration --> Chart of Accounts`.
|
||||
|
||||
The accounts are usually listed in the order of appearance in the financial reports. Most of the
|
||||
time, they are listed as follows :
|
||||
When browsing your chart of accounts, you can sort the accounts by :guilabel:`Code`,
|
||||
:guilabel:`Account Name`, or :guilabel:`Type`, but other options are available in the drop-down menu
|
||||
|
||||
- Balance Sheet accounts:
|
||||
.. image:: chart_of_accounts/drop-down.png
|
||||
:alt: Drop-down toggle button
|
||||
|
||||
- Assets
|
||||
- Liabilities
|
||||
- Equity
|
||||
|
||||
- Profit & Loss:
|
||||
|
||||
- Income
|
||||
- Expense
|
||||
|
||||
When browsing your chart of accounts, you can filter the accounts by number, in the left column, and
|
||||
also group them by :guilabel:`Account Type`.
|
||||
|
||||
.. image:: chart_of_accounts/chart-of-accounts.png
|
||||
:align: center
|
||||
.. image:: chart_of_accounts/chart-of-accounts-sort.png
|
||||
:alt: Group the accounts by type in Odoo Accounting
|
||||
|
||||
Configuration of an account
|
||||
===========================
|
||||
|
||||
The country you select at the creation of your database (or additional company on your database)
|
||||
determines which **fiscal localization package** is installed by default. This package includes a
|
||||
standard chart of accounts already configured according to the country's regulations. You can use
|
||||
it directly or set it according to your company's needs.
|
||||
The country you select during the creation of your database (or additional company in your database)
|
||||
determines which :doc:`fiscal localization package <../../fiscal_localizations>` is installed by
|
||||
default. This package includes a standard chart of accounts already configured according to the
|
||||
country's regulations. You can use it directly or set it according to your company's needs.
|
||||
|
||||
To create a new account, go to :menuselection:`Accounting --> Configuration --> Chart of Accounts`,
|
||||
click :guilabel:`Create`, and fill in (at the minimum) the required fields
|
||||
(:guilabel:`Code, Account Name, Type`).
|
||||
|
||||
.. warning::
|
||||
It is not possible to modify the **fiscal localization** of a company once a journal entry has
|
||||
been posted.
|
||||
|
||||
To create a new account, go to :menuselection:`Accounting --> Configuration --> Chart of Accounts`,
|
||||
click on :guilabel:`Create`, and fill out the form.
|
||||
|
||||
Code and name
|
||||
-------------
|
||||
|
||||
Each account is identified by its **code** and **name**, which also indicates the account's purpose.
|
||||
Each account is identified by its :guilabel:`Code` and :guilabel:`Name`, which also indicate the
|
||||
account's purpose.
|
||||
|
||||
.. _chart-of-account/type:
|
||||
|
||||
@@ -59,7 +50,7 @@ Correctly configuring the **account type** is critical as it serves multiple pur
|
||||
- Generate opening entries
|
||||
|
||||
To configure an account type, open the :guilabel:`Type` field's drop-down selector and select the
|
||||
right type among the following list:
|
||||
corresponding type from the following list:
|
||||
|
||||
+---------------+--------------+-------------------------+
|
||||
| Report | Category | Account Types |
|
||||
@@ -101,32 +92,33 @@ right type among the following list:
|
||||
|Other | Other | Off-Balance Sheet |
|
||||
+---------------+--------------+-------------------------+
|
||||
|
||||
Assets, deferred expenses, and deferred revenues automation
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Assets
|
||||
~~~~~~
|
||||
|
||||
Some **account types** display a new field **to automate** the creation of :ref:`assets
|
||||
<assets-automation>` entries, :ref:`deferred expenses <deferred-expenses-automation>` entries,
|
||||
and :ref:`deferred revenues <deferred-revenues-automation>` entries.
|
||||
Some **account types** can **automate** the creation of :ref:`asset <assets-automation>` entries.
|
||||
To **automate** entries, click :guilabel:`View` on an account line and go to the
|
||||
:guilabel:`Automation` tab.
|
||||
|
||||
You have three choices for the :guilabel:`Automation` field:
|
||||
You have three choices for the :guilabel:`Automation` tab:
|
||||
|
||||
#. :guilabel:`No`: this is the default value. Nothing happens.
|
||||
#. :guilabel:`Create in draft`: whenever a transaction is posted on the account, a draft entry is
|
||||
created, but not validated. You must first fill out the corresponding form.
|
||||
#. :guilabel:`Create and validate`: you must also select a **model**. Whenever a transaction is
|
||||
posted on the account, an entry is created and immediately validated.
|
||||
created but not validated. You must first fill out the corresponding form.
|
||||
#. :guilabel:`Create and validate`: you must also select a :guilabel:`Deferred Expense Model`.
|
||||
Whenever a transaction is posted on the account, an entry is created and immediately validated.
|
||||
|
||||
Default taxes
|
||||
-------------
|
||||
|
||||
Select a **default tax** that will be applied when this account is chosen for a product sale or
|
||||
purchase.
|
||||
In the :guilabel:`View` menu of an account, select a **default tax** to be applied when this
|
||||
account is chosen for a product sale or purchase.
|
||||
|
||||
Tags
|
||||
----
|
||||
|
||||
Some accounting reports require **tags** to be set on the relevant accounts. By default, you can
|
||||
choose among the tags that are used by the *Cash Flow Statement*.
|
||||
Some accounting reports require **tags** to be set on the relevant accounts. To add a tag, under
|
||||
:guilabel:`View`, click the :guilabel:`Tags` field and select an existing tag or :guilabel:`Create`
|
||||
a new one.
|
||||
|
||||
Account groups
|
||||
--------------
|
||||
@@ -134,31 +126,29 @@ Account groups
|
||||
**Account groups** are useful to list multiple accounts as *sub-accounts* of a bigger account and
|
||||
thus consolidate reports such as the **Trial Balance**. By default, groups are handled automatically
|
||||
based on the code of the group. For example, a new account `131200` is going to be part of the group
|
||||
`131000`.
|
||||
`131000`. You can attribute a specific group to an account in the :guilabel:`Group` field under
|
||||
:guilabel:`View`.
|
||||
|
||||
Create account groups manually
|
||||
------------------------------
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. note::
|
||||
Regular users should not need to create account groups manually. The following section is only
|
||||
intended for rare and advanced use cases.
|
||||
|
||||
To create a new account group, :ref:`developer mode <developer-mode>` and head to
|
||||
:menuselection:`Accounting app --> Configuration --> Account Groups`. Here, create a new group and
|
||||
enter the :guilabel:`name, code prefix, and company` to which that group account should be
|
||||
available. Note that you must enter the same code prefix in both :guilabel:`From` and :guilabel:`to`
|
||||
fields.
|
||||
To create a new account group, activate :ref:`developer mode <developer-mode>` and head to
|
||||
:menuselection:`Accounting --> Configuration --> Account Groups`. Here, create a new group and enter
|
||||
the :guilabel:`name, code prefix, and company` to which that group account should be available. Note
|
||||
that you must enter the same code prefix in both :guilabel:`From` and :guilabel:`to` fields.
|
||||
|
||||
.. image:: chart_of_accounts/account-groups.png
|
||||
:align: center
|
||||
:alt: Account groups creation.
|
||||
|
||||
To display your **Trial Balance** report with your account groups, go to :menuselection:`Accounting
|
||||
app-->Reporting-->Trial Balance`, then open the :guilabel:`Options` menu and select
|
||||
:guilabel:`Hierarchy and Subtotals`.
|
||||
To display your **Trial Balance** report with your account groups, go to
|
||||
:menuselection:`Accounting --> Reporting --> Trial Balance`, then open the :guilabel:`Options` menu
|
||||
and select :guilabel:`Hierarchy and Subtotals`.
|
||||
|
||||
.. image:: chart_of_accounts/trial-balance.png
|
||||
:align: center
|
||||
.. image:: chart_of_accounts/chart-of-accounts-groups.png
|
||||
:alt: Account Groups in the Trial Balance in Odoo Accounting
|
||||
|
||||
Allow reconciliation
|
||||
@@ -171,15 +161,18 @@ For example, an invoice paid with a credit card can be marked as :guilabel:`paid
|
||||
its payment. Therefore, the account used to record credit card payments needs to be configured as
|
||||
**allowing reconciliation**.
|
||||
|
||||
To do so, check the :guilabel:`Allow Reconciliation` box in the account's settings, and save.
|
||||
To do so, check the :guilabel:`Allow Reconciliation` box in the account's settings, and
|
||||
:guilabel:`Save`; or enable the button from the chart of accounts view.
|
||||
|
||||
.. image:: chart_of_accounts/chart-of-accounts-reconciliation.png
|
||||
:alt: Allow reconciliation for accounts in Odoo Accounting
|
||||
|
||||
Deprecated
|
||||
----------
|
||||
|
||||
It is not possible to delete an account once a transaction has been recorded on it. You can make
|
||||
them unusable by using the **Deprecated** feature.
|
||||
|
||||
To do so, check the :guilabel:`Deprecated` box in the account's settings, and save.
|
||||
them unusable by using the **Deprecated** feature: check the :guilabel:`Deprecated` box in the
|
||||
account's settings, and :guilabel:`Save`.
|
||||
|
||||
.. seealso::
|
||||
* :doc:`cheat_sheet`
|
||||
|
||||
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 461 B |
|
Before Width: | Height: | Size: 22 KiB |
@@ -129,6 +129,8 @@ Example
|
||||
|
||||
.. placeholder
|
||||
|
||||
.. _cheat_sheet/journals:
|
||||
|
||||
Journal entries
|
||||
===============
|
||||
|
||||
|
||||
@@ -4,15 +4,15 @@
|
||||
Payments
|
||||
========
|
||||
|
||||
In Odoo, payments can either be linked automatically to an invoice or bill or be stand-alone records
|
||||
for use at a later date.
|
||||
In Odoo, payments can either be automatically linked to an invoice or bill or be stand-alone records
|
||||
for use at a later date:
|
||||
|
||||
If a payment is **linked to an invoice or bill**, it reduces the amount due of the invoice. You can
|
||||
have multiple payments related to the same invoice.
|
||||
- If a payment is **linked to an invoice or bill**, it reduces/settles the amount due of the
|
||||
invoice. You can have multiple payments related to the same invoice.
|
||||
|
||||
If a payment is **not linked to an invoice or bill**, the customer has an outstanding credit with
|
||||
your company, or your company has an outstanding debit with a vendor. You can use those outstanding
|
||||
amounts to reduce unpaid invoices/bills.
|
||||
- If a payment is **not linked to an invoice or bill**, the customer has an outstanding credit with
|
||||
your company, or your company has an outstanding debit with a vendor. You can use those
|
||||
outstanding amounts to reduce/settle unpaid invoices/bills.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`Internal transfers <payments/internal_transfers>`
|
||||
@@ -23,59 +23,54 @@ amounts to reduce unpaid invoices/bills.
|
||||
Registering payment from an invoice or bill
|
||||
===========================================
|
||||
|
||||
When clicking on :guilabel:`Register payment` in a customer invoice or vendor bill, it generates a
|
||||
new journal entry and changes the amount due according to the amount of the payment. The counterpart
|
||||
is reflected in an outstanding receipts or payments account. At this point, the customer invoice or
|
||||
vendor bill is marked as :guilabel:`In payment`. Then, when the outstanding account is reconciled
|
||||
with a bank statement line, the invoice or vendor bill changes to the :guilabel:`Paid` status.
|
||||
When clicking :guilabel:`Register payment` in a customer invoice or vendor bill, it generates a new
|
||||
journal entry and changes the amount due according to the payment amount. The counterpart is
|
||||
reflected in an :ref:`outstanding <bank/outstanding-accounts>` **receipts** or **payments** account.
|
||||
At this point, the customer invoice or vendor bill is marked as :guilabel:`In payment`. Then, when
|
||||
the outstanding account is reconciled with a bank statement line, the invoice or vendor bill changes
|
||||
to the :guilabel:`Paid` status.
|
||||
|
||||
The information icon near the payment line displays more information about the payment. You can
|
||||
access additional information, such as the related journal, by clicking on :guilabel:`View`.
|
||||
access additional information, such as the related journal, by clicking :guilabel:`View`.
|
||||
|
||||
.. image:: payments/information-icon.png
|
||||
:alt: See detailed information of a payment
|
||||
:alt: See detailed information of a payment.
|
||||
|
||||
.. note::
|
||||
- The customer invoice or vendor bill should be in the status :guilabel:`Posted` to register the
|
||||
- The customer invoice or vendor bill must be in the :guilabel:`Posted` status to register the
|
||||
payment.
|
||||
- When clicking on :guilabel:`Register payment`, you can select the amount to pay and make a
|
||||
partial or full payment.
|
||||
- If your main bank account is set as :ref:`outstanding account
|
||||
<bank/outstanding-accounts>`, and the payment is made in Odoo (not related to a
|
||||
bank statement), invoices and bills are directly registered in the status :guilabel:`Paid`.
|
||||
- If you unreconciled a payment, it still appears in your books but is no longer linked to the
|
||||
- If you unreconcile a payment, it still appears in your books but is no longer linked to the
|
||||
invoice.
|
||||
- If you (un)reconcile a payment in a different currency, a journal entry is automatically
|
||||
created to post the currency exchange gains/losses (reversal) amount.
|
||||
- If you (un)reconcile a payment and an invoice having cash basis taxes, a journal entry is
|
||||
automatically created to post the cash basis tax (reversal) amount.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`bank/reconciliation`
|
||||
.. tip::
|
||||
- If your main bank account is set as an :ref:`outstanding account
|
||||
<bank/outstanding-accounts>`, and the payment is registered in Odoo (not through a related
|
||||
bank statement), invoices and bills are directly registered as :guilabel:`Paid`.
|
||||
|
||||
Registering payments not tied to an invoice or bill
|
||||
===================================================
|
||||
|
||||
When a new payment is registered via the menu :menuselection:`Customers / Vendors --> Payments`, it
|
||||
is not directly linked to an invoice or bill. Instead, the account receivable or the account payable
|
||||
are matched with the outstanding account until they are manually matched with their related invoice
|
||||
or bill.
|
||||
When a new payment is registered via :menuselection:`Customers / Vendors --> Payments` menu, it is
|
||||
not directly linked to an invoice or bill. Instead, the account receivable or the account payable is
|
||||
matched with the **outstanding account** until it is manually matched with its related invoice or
|
||||
bill.
|
||||
|
||||
Matching invoices and bills with payments
|
||||
-----------------------------------------
|
||||
|
||||
A blue banner appears when you validate a new invoice or bill and there is an outstanding payment
|
||||
for this specific customer or vendor. It can easily be matched from the invoice or the bill by
|
||||
clicking on :guilabel:`ADD` under :guilabel:`Outstanding Credits` or :guilabel:`Outstanding Debits`.
|
||||
A blue banner appears when you validate a new invoice/bill and an **outstanding payment** exists for
|
||||
this specific customer or vendor. It can easily be matched from the invoice or bill by clicking
|
||||
:guilabel:`ADD` under :guilabel:`Outstanding Credits` or :guilabel:`Outstanding Debits`.
|
||||
|
||||
.. image:: payments/add-option.png
|
||||
:alt: Shows the ADD option to reconcile an invoice or a bill with a payment
|
||||
:alt: Shows the ADD option to reconcile an invoice or a bill with a payment.
|
||||
|
||||
The invoice or bill is now marked as :guilabel:`In payment` until it is reconciled with the bank
|
||||
statement.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`bank/reconciliation`
|
||||
The invoice or bill is now marked as :guilabel:`In payment` until it is reconciled with its
|
||||
corresponding bank statement.
|
||||
|
||||
.. _payments/batch-payments:
|
||||
|
||||
@@ -83,11 +78,11 @@ Batch payment
|
||||
-------------
|
||||
|
||||
Batch payments allow you to group different payments to ease :doc:`reconciliation
|
||||
<bank/reconciliation>`. They are also useful when you deposit checks to the bank or
|
||||
for SEPA Payments. To do so, go to :menuselection:`Accounting --> Customers --> Batch Payments` or
|
||||
:menuselection:`Accounting --> Vendors --> Batch Payments`. In the list view of payments, you can
|
||||
select several payments and group them in a batch by clicking on :menuselection:`Action --> Create
|
||||
Batch Payment`.
|
||||
<bank/reconciliation>`. They are also useful when you deposit :doc:`checks <payments/checks>` to the
|
||||
bank or for :doc:`SEPA payments <payments/pay_sepa>`. To do so, go to :menuselection:`Accounting -->
|
||||
Customers --> Batch Payments` or :menuselection:`Accounting --> Vendors --> Batch Payments`. In the
|
||||
list view of payments, you can select and group several payments in a batch by clicking
|
||||
:menuselection:`Action --> Create Batch Payment`.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`payments/batch`
|
||||
@@ -99,36 +94,50 @@ Payments matching
|
||||
-----------------
|
||||
|
||||
The :guilabel:`Payments matching` tool opens all unreconciled customer invoices or vendor bills and
|
||||
gives you the opportunity to process them all one by one, doing the matching of all their payments
|
||||
and invoices at once. You can reach this tool from the :menuselection:`Accounting Dashboard -->
|
||||
Customer Invoices / Vendor Bills`, and click on :guilabel:`⋮` and select :guilabel:`Payments
|
||||
Matching`, or by going to :menuselection:`Accounting --> Reconciliation`.
|
||||
allows you to process them individually, matching all payments and invoices in one place. You can
|
||||
reach this tool from the :menuselection:`Accounting Dashboard --> Customer Invoices / Vendor Bills`,
|
||||
click the drop-down menu button (:guilabel:`⋮`), and select :guilabel:`Payments Matching`, or go to
|
||||
:menuselection:`Accounting --> Accounting --> Reconciliation`.
|
||||
|
||||
.. image:: payments/payments-journal.png
|
||||
:alt: Payments matching menu in the drop-down menu.
|
||||
|
||||
.. note::
|
||||
During the :doc:`reconciliation <bank/reconciliation>`, if the sum of the debits
|
||||
and credits does not match, there is a remaining balance. This either needs to be reconciled at a
|
||||
later date or needs to be written off directly.
|
||||
During the :doc:`reconciliation <bank/reconciliation>`, if the sum of the debits and credits does
|
||||
not match, there is a remaining balance. This either needs to be reconciled at a later date or
|
||||
needs to be written off directly.
|
||||
|
||||
Batch payments matching
|
||||
-----------------------
|
||||
|
||||
To reconcile several outstanding payments or invoices at once, for a specific customer or vendor,
|
||||
the batch reconciliation feature can be used. Go to :menuselection:`Accounting --> Reporting -->
|
||||
Aged Receivable / Aged Payable`. You now see all transactions that have not been reconciled yet, and
|
||||
when you select a customer or vendor, the :guilabel:`Reconcile` option is displayed.
|
||||
You can use the **batch reconciliation feature** to reconcile several outstanding payments or
|
||||
invoices simultaneously for a specific customer or vendor. Go to your **Accounting Dashboard** and
|
||||
open your **bank journal**. In the **bank reconciliation** view, select a **transaction**, and click
|
||||
the :guilabel:`Batch Payments` tab. From here, you can reconcile your
|
||||
:doc:`batch payments <payments/batch>` with your outstanding payments or invoices.
|
||||
|
||||
.. image:: payments/reconcile-option.png
|
||||
:alt: See the reconcile option
|
||||
:alt: The batch payment reconcile option.
|
||||
|
||||
Registering a partial payment
|
||||
=============================
|
||||
|
||||
To register a **partial payment**, click :guilabel:`Register payment` from the related invoice or
|
||||
bill, and enter the amount received or paid. Upon entering the amount, a prompt appears to decide
|
||||
whether to :guilabel:`Keep open` the invoice or bill, or :guilabel:`Mark as fully paid`. Select
|
||||
:guilabel:`Keep open` and click :guilabel:`Create payment`. The invoice or bill is now marked as
|
||||
:guilabel:`Partial`. Select :guilabel:`Mark as fully paid` if you wish to settle the invoice or bill
|
||||
with a difference in the amount.
|
||||
|
||||
.. image:: payments/payment-difference.png
|
||||
:alt: Partial payment of an invoice or bill.
|
||||
|
||||
Reconciling payments with bank statements
|
||||
=========================================
|
||||
|
||||
Once a payment has been registered, the status of the invoice or bill is :guilabel:`In payment`. The
|
||||
next step is to reconcile it with the related bank statement line to have the transaction finalized
|
||||
and the invoice or bill marked as :guilabel:`Paid`.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`bank/reconciliation`
|
||||
next step is :doc:`reconciling <bank/reconciliation>` it with the related bank statement line to
|
||||
have the transaction finalized and the invoice or bill marked as :guilabel:`Paid`.
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
@@ -141,6 +150,5 @@ and the invoice or bill marked as :guilabel:`Paid`.
|
||||
payments/internal_transfers
|
||||
payments/pay_sepa
|
||||
payments/pay_checks
|
||||
payments/multiple
|
||||
payments/forecast
|
||||
payments/trusted_accounts
|
||||
|
||||
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 6.3 KiB |
@@ -25,7 +25,6 @@ window, select the :guilabel:`Journal` linked to your bank account and :guilabel
|
||||
the :guilabel:`Payment Method`, and click :guilabel:`Create Payment`.
|
||||
|
||||
.. image:: batch/batch-payments.png
|
||||
:align: center
|
||||
:alt: Registering a customer payment as part of a batch deposit
|
||||
|
||||
Add payments to a batch deposit
|
||||
@@ -36,14 +35,12 @@ Payments`, and click :guilabel:`New`. Next, select the :guilabel:`Bank` and choo
|
||||
Deposit` as the :guilabel:`Payment Method`.
|
||||
|
||||
.. image:: batch/batch-customer-payment.png
|
||||
:align: center
|
||||
:alt: Filling out a new inbound batch payment form
|
||||
|
||||
Click :guilabel:`Add a line`. In the pop-up window, tick all payments to include in the batch
|
||||
deposit, then click :guilabel:`Select`.
|
||||
|
||||
.. image:: batch/batch-lines-selection.png
|
||||
:align: center
|
||||
:alt: Selecting all payments to include in the batch deposit
|
||||
|
||||
Once done, click :guilabel:`Validate` to finalize the batch deposit.
|
||||
@@ -60,7 +57,6 @@ Items` on the related bank account. Go to the :guilabel:`Batch Payments` tab to
|
||||
batch and click :guilabel:`Validate` to finalize the process.
|
||||
|
||||
.. image:: batch/batch-reconciliation.png
|
||||
:align: center
|
||||
:alt: Reconciling the batch payment with all its transactions
|
||||
|
||||
.. note::
|
||||
|
||||
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 11 KiB |
@@ -79,7 +79,7 @@ To know whether a customer usually pays late or not, you can set a trust level b
|
||||
:guilabel:`Good Debtor`, :guilabel:`Normal Debtor`, or :guilabel:`Bad Debtor` on their follow-up
|
||||
report. To do so, click on the bullet next to the customer's name and select a trust level.
|
||||
|
||||
.. image:: follow_up/debtors-trust-level.png
|
||||
.. image:: follow_up/debtor-level.png
|
||||
:alt: Set debtor's trust level
|
||||
|
||||
Send reminders in batches
|
||||
|
||||
|
After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 7.0 KiB |
@@ -2,146 +2,72 @@
|
||||
Internal transfers
|
||||
==================
|
||||
|
||||
In Odoo, internal money transfers can be made in a few clicks. You need at least either two bank
|
||||
accounts, two cash journals, or one bank account and one cash journal.
|
||||
Internal money transfers can be handled in Odoo. At least two bank accounts are needed to make
|
||||
internal transfers.
|
||||
|
||||
.. seealso::
|
||||
:doc:`How to add an additional bank account <../bank>`
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
An internal transfer account is automatically created on your database based on your company's
|
||||
localization and depending on your country’s legislation. If needed, the default :guilabel:`Internal
|
||||
transfer account` can be modified by going to :menuselection:`Accounting app --> Configuration -->
|
||||
Settings` and then under the :guilabel:`Default Accounts` section.
|
||||
|
||||
.. note::
|
||||
At least two bank accounts are needed to make internal transfers. Refer to
|
||||
:doc:`Bank and cash accounts section <../bank>` to see how to add an additional bank
|
||||
account to your database.
|
||||
localization and depending on your country’s legislation. To modify the default :guilabel:`Internal
|
||||
transfer account`, go to :menuselection:`Accounting --> Configuration --> Settings` and scroll down
|
||||
to the :guilabel:`Default Accounts` section.
|
||||
|
||||
Register an internal transfer from one bank to another
|
||||
======================================================
|
||||
|
||||
Let's say you have two bank accounts registered on your database and you want to transfer 1,000 USD
|
||||
from Bank A to Bank B.
|
||||
If you want to transfer money from one bank to another, access the Accounting Dashboard, click the
|
||||
drop-down selection button (:guilabel:`⋮`) on the bank from which you want to make the transfer,
|
||||
then click :guilabel:`Payments`. Select or create a payment, tick the :guilabel:`Internal Transfer`
|
||||
checkbox, and select a :guilabel:`Destination Journal` before you :guilabel:`Confirm` the internal
|
||||
transfer.
|
||||
|
||||
Log an internal transfer
|
||||
------------------------
|
||||
The money is now booked in the transfer account and another payment is automatically created in the
|
||||
destination journal.
|
||||
|
||||
From the Accounting Dashboard, click on the drop-down selection button (:guilabel:`⋮`) on one of
|
||||
your banks. In the :guilabel:`New` column click on :guilabel:`Internal Transfer` and enter the
|
||||
information related to the transfer.
|
||||
.. example::
|
||||
|
||||
.. image:: internal_transfers/internal_transfer.png
|
||||
:align: center
|
||||
:alt: Fill in the information related to your internal transfer
|
||||
- Bank journal (Bank A)
|
||||
|
||||
.. note::
|
||||
Fill in the :guilabel:`Memo` field for automatic reconciliation.
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:stub-columns: 1
|
||||
|
||||
:guilabel:`Save` and :guilabel:`Confirm` to register your internal transfer. The money is now booked
|
||||
in the transfer account and another payment is **automatically** created in the destination journal
|
||||
(Bank B).
|
||||
* - **Account**
|
||||
- **Debit**
|
||||
- **Credit**
|
||||
* - Outstanding Payments account
|
||||
-
|
||||
- $1,000
|
||||
* - **Internal transfer account**
|
||||
- **$1,000**
|
||||
-
|
||||
|
||||
Bank journal (Bank A)
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
- Bank journal (Bank B)
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:stub-columns: 1
|
||||
|
||||
* - **Account**
|
||||
- **Debit**
|
||||
- **Credit**
|
||||
* - Outstanding Payments account
|
||||
-
|
||||
- $1,000
|
||||
* - **Internal transfer account**
|
||||
- **$1,000**
|
||||
-
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:stub-columns: 1
|
||||
|
||||
Automated booking - Bank journal (BANK B)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
* - **Account**
|
||||
- **Debit**
|
||||
- **Credit**
|
||||
* - Outstanding Receipts account
|
||||
- $1,000
|
||||
-
|
||||
* - **Internal transfer account**
|
||||
-
|
||||
- **$1,000**
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:stub-columns: 1
|
||||
There is **one outstanding payment** and **one outstanding receipt** pending in your two bank
|
||||
account journals because the bank statement confirming the sending and receiving of the money
|
||||
has not been booked yet.
|
||||
|
||||
* - **Account**
|
||||
- **Debit**
|
||||
- **Credit**
|
||||
* - Outstanding Receipts account
|
||||
- $1,000
|
||||
-
|
||||
* - **Internal transfer account**
|
||||
-
|
||||
- **$1,000**
|
||||
|
||||
.. note::
|
||||
There are one outstanding payment and one outstanding receipt pending in your two bank account
|
||||
journals, because the bank statement confirming the sending and receiving of the money has not
|
||||
been booked yet.
|
||||
|
||||
.. image:: internal_transfers/outstanding-payments-receipts.png
|
||||
:align: center
|
||||
:alt: Outstanding Payments/Receipts pending bank statement booking
|
||||
|
||||
.. _interbank/import-and-reconcile:
|
||||
|
||||
Manage and reconcile bank statements
|
||||
------------------------------------
|
||||
|
||||
The next step is to book the bank statements to finalize the transaction by creating,
|
||||
:doc:`importing <../bank/transactions>`, or :doc:`synchronizing <../bank/bank_synchronization>` your
|
||||
:guilabel:`Transactions lines`. Fill in the :guilabel:`Ending balance` and click on the
|
||||
:guilabel:`Reconcile` button.
|
||||
|
||||
.. image:: internal_transfers/transactions-line.png
|
||||
:align: center
|
||||
:alt: Transaction lines to be filled in prior to reconciliation
|
||||
Once this is done, you can book and reconcile your bank statement lines as usual.
|
||||
|
||||
.. seealso::
|
||||
:doc:`../bank/reconciliation`
|
||||
|
||||
In the next window, choose counterparts for the payment - in this example, the outstanding payment
|
||||
account - then click :guilabel:`Validate`.
|
||||
|
||||
.. image:: internal_transfers/bank-reconciliation.png
|
||||
:align: center
|
||||
:alt: Reconcile your payment
|
||||
|
||||
Bank journal entry
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:stub-columns: 1
|
||||
|
||||
* - **Account**
|
||||
- **Debit**
|
||||
- **Credit**
|
||||
* - Outstanding Payment
|
||||
- $1,000
|
||||
-
|
||||
* - Bank Account (BANK A)
|
||||
-
|
||||
- **$1,000**
|
||||
|
||||
The same steps must be repeated once you receive the bank statement related to Bank B. Book and
|
||||
reconcile your bank statement lines.
|
||||
|
||||
Bank journal entry
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:stub-columns: 1
|
||||
|
||||
* - **Account**
|
||||
- **Debit**
|
||||
- **Credit**
|
||||
* - Outstanding Receipt
|
||||
-
|
||||
- $1,000
|
||||
* - Bank Account (BANK B)
|
||||
- **$1,000**
|
||||
-
|
||||
|
||||
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 26 KiB |
@@ -1,53 +0,0 @@
|
||||
=========================
|
||||
Pay several bills at once
|
||||
=========================
|
||||
|
||||
Odoo offers the possibility of grouping multiple bills' payments into one, facilitating the
|
||||
reconciliation process.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`/applications/inventory_and_mrp/purchase/manage_deals/manage`
|
||||
- :doc:`/applications/finance/accounting/bank/reconciliation`
|
||||
|
||||
Group payments
|
||||
==============
|
||||
|
||||
To register the payment of multiple bills at once, go to :menuselection:`Accounting app -->
|
||||
Vendors --> Bills`. Then, select the bills you wish to register a payment for by **ticking** the
|
||||
boxes next to the bills. When done, either click :guilabel:`Register Payment` or
|
||||
:menuselection:`Action --> Register Payment`.
|
||||
|
||||
.. image:: multiple/register-payment-button.png
|
||||
:align: center
|
||||
:alt: Register payment button.
|
||||
|
||||
.. note::
|
||||
Payments can only be registered for :guilabel:`posted` bills.
|
||||
|
||||
When registering the payments, a **pop-up window** appears. From here, you can either create
|
||||
**separate payments** for each bill all at once by clicking :guilabel:`Create Payment`, *or* create
|
||||
one payment by combining **all** bills' payments. To **combine** all payments, tick the
|
||||
:guilabel:`Group Payments` box.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Group Payments` option only appears when selecting two or more bills.
|
||||
|
||||
.. image:: multiple/multiple-group-payments.png
|
||||
:align: center
|
||||
:alt: Group payments options when registering a payment.
|
||||
|
||||
When selecting :guilabel:`Group Payments`, the :guilabel:`amount, currency, date and memo` are all
|
||||
set automatically, but you can modify them according to your needs.
|
||||
|
||||
Partial group payments with cash discounts
|
||||
------------------------------------------
|
||||
|
||||
In case of **partial group payments with cash discounts**, you can follow the steps found on the
|
||||
:doc:`cash discount documentation page
|
||||
</applications/finance/accounting/customer_invoices/cash_discounts>`. Make sure to
|
||||
apply the :doc:`payment terms
|
||||
</applications/finance/accounting/customer_invoices/payment_terms>` to the **bills**
|
||||
*instead* of the invoices.
|
||||
|
||||
.. seealso::
|
||||
:doc:`/applications/finance/accounting/customer_invoices/payment_terms`
|
||||
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 36 KiB |
@@ -20,11 +20,11 @@ method, making the payment process much easier.
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Make sure your :ref:`Payment Providers are correctly configured <payment_providers/configuration>`.
|
||||
Make sure your :doc:`payment providers are correctly configured <../../payment_providers>`.
|
||||
|
||||
.. note::
|
||||
By default, ":doc:`Wire Transfer </applications/finance/payment_providers/wire_transfer>`" is the only
|
||||
Payment Provider activated, but you still have to fill out the payment details.
|
||||
By default, ":doc:`Wire Transfer </applications/finance/payment_providers/wire_transfer>`" is the
|
||||
only payment provider activated, but you still have to fill out the payment details.
|
||||
|
||||
To activate the Invoice Online Payment, go to :menuselection:`Accounting --> Configuration -->
|
||||
Settings --> Customer Payments`, enable **Invoice Online Payment**, and click on *Save*.
|
||||
|
||||
@@ -13,14 +13,15 @@ Activate checks payment methods
|
||||
-------------------------------
|
||||
|
||||
To activate the checks payment method, go to :menuselection:`Accounting --> Configuration -->
|
||||
Checks`, there you can activate the payment method as well as set up the :guilabel:`Check Layout`.
|
||||
Once activated the :guilabel:`Checks` setting, the feature is automatically setup for your
|
||||
:guilabel:`Outgoing Payments`.
|
||||
Settings`, and scroll down to the :guilabel:`Vendor Payments` section. There, you can activate the
|
||||
payment method as well as set up the :guilabel:`Check Layout`.
|
||||
|
||||
.. note::
|
||||
Some countries require specific modules to print checks; such modules may be installed by
|
||||
default. For instance, the :guilabel:`U.S. Checks Layout` module is required to print U.S.
|
||||
checks.
|
||||
- Once the :guilabel:`Checks` setting is activated, the **Checks** payment method is
|
||||
automatically set up in the :guilabel:`Outgoing Payments` tabs of **bank** journals.
|
||||
- Some countries require specific modules to print checks; such modules may be installed by
|
||||
default. For instance, the :guilabel:`U.S. Checks Layout` module is required to print U.S.
|
||||
checks.
|
||||
|
||||
Compatible check stationery for printing checks
|
||||
===============================================
|
||||
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 32 KiB |
@@ -13,36 +13,34 @@ supports all kinds of uses and computations.
|
||||
Default taxes
|
||||
=============
|
||||
|
||||
**Default Taxes** define which taxes are automatically selected when creating a new product. They
|
||||
**Default taxes** define which taxes are automatically selected when creating a new product. They
|
||||
are also used to prefill the :guilabel:`Taxes` field when adding a new line on an invoice in
|
||||
**Accounting Firms** mode.
|
||||
|
||||
.. image:: taxes/default-taxes-product.png
|
||||
:alt: Odoo fills out the Tax field automatically according to the Default Taxes
|
||||
|
||||
To change your **Default Taxes**, go to :menuselection:`Accounting --> Configuration --> Settings
|
||||
--> Taxes --> Default Taxes`, select the appropriate taxes for your default **Sales Tax** and
|
||||
**Purchase Tax**, and click on *Save*.
|
||||
:ref:`Accounting Firms <fiduciaries>` mode.
|
||||
|
||||
.. image:: taxes/default-configuration.png
|
||||
:alt: Odoo fills out the Tax field automatically according to the Default Taxes
|
||||
|
||||
To change your **default taxes**, go to :menuselection:`Accounting --> Configuration --> Settings
|
||||
--> Taxes --> Default Taxes`, select the appropriate taxes for your default sales tax and purchase
|
||||
tax, and click on :guilabel:`Save`.
|
||||
|
||||
.. image:: taxes/default-taxes.png
|
||||
:alt: Define which taxes to use by default on Odoo
|
||||
|
||||
.. note::
|
||||
**Default Taxes** are automatically set up according to the country selected at the creation of
|
||||
**Default taxes** are automatically set up according to the country selected at the creation of
|
||||
your database, or when you set up a :ref:`fiscal localization package
|
||||
<fiscal_localizations/packages>` for your company.
|
||||
|
||||
.. _taxes/list_activation:
|
||||
|
||||
Activate Sales Taxes from the List view
|
||||
Activate sales taxes from the list view
|
||||
=======================================
|
||||
|
||||
As part of your :ref:`fiscal localization package <fiscal_localizations/packages>`, most of your
|
||||
country's sales taxes are already preconfigured on your database. However, only a few of them are
|
||||
activated by default, so that you can activate only the ones relevant for your business.
|
||||
|
||||
To activate Sale Taxes, go to :menuselection:`Accounting --> Configuration --> Taxes` and use the
|
||||
*Activate* toggle button to activate or deactivate a tax.
|
||||
country's sales taxes are already preconfigured on your database. However, only a few taxes are
|
||||
activated by default. To activate taxes relevant to your business, go to :menuselection:`Accounting
|
||||
--> Configuration --> Taxes` and enable the toggle button under the :guilabel:`Active` column.
|
||||
|
||||
.. image:: taxes/list.png
|
||||
:alt: Activate pre-configured taxes in Odoo Accounting
|
||||
@@ -52,46 +50,32 @@ To activate Sale Taxes, go to :menuselection:`Accounting --> Configuration --> T
|
||||
Configuration
|
||||
=============
|
||||
|
||||
To edit or create a **Tax**, go to :menuselection:`Accounting --> Configuration --> Taxes` and open
|
||||
a tax or click on *Create*.
|
||||
To edit or create a **tax**, go to :menuselection:`Accounting --> Configuration --> Taxes` and open
|
||||
a tax or click on :guilabel:`New`.
|
||||
|
||||
.. image:: taxes/edit.png
|
||||
:alt: Edition of a tax in Odoo Accounting
|
||||
|
||||
.. _taxes/labels:
|
||||
|
||||
.. important::
|
||||
Taxes have three different labels, each one having a specific use. Refer to the following table to
|
||||
see where they are displayed.
|
||||
|
||||
+------------------+-------------------------+-------------------------+
|
||||
| :ref:`Tax Name | :ref:`Label on Invoice | :ref:`Tax Group |
|
||||
| <taxes/name>` | <taxes/label-invoices>` | <taxes/tax-group>` |
|
||||
+==================+=========================+=========================+
|
||||
| Back end | *Taxes* column on | Above the *Total* line |
|
||||
| | exported invoices | on exported invoices |
|
||||
+------------------+-------------------------+-------------------------+
|
||||
|
||||
Basic Options
|
||||
Basic options
|
||||
-------------
|
||||
|
||||
.. _taxes/name:
|
||||
|
||||
Tax Name
|
||||
Tax name
|
||||
~~~~~~~~
|
||||
|
||||
The **Tax Name** as you want to display it for backend users. This is the :ref:`label
|
||||
<taxes/labels>` you see while editing Sales Orders, Invoices, Products, etc.
|
||||
The **tax name** is displayed for backend users in the :guilabel:`Taxes` field in
|
||||
:doc:`sales orders <../../sales/sales>`, :doc:`invoices <customer_invoices>`, product forms, etc.
|
||||
|
||||
.. _taxes/computation:
|
||||
|
||||
Tax Computation
|
||||
Tax computation
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
- **Group of Taxes**
|
||||
|
||||
The tax is a combination of multiple sub-taxes. You can add as many taxes you want, in the order
|
||||
you want them to be applied.
|
||||
The tax is a combination of multiple sub-taxes. You can add as many taxes as you want, in the
|
||||
order you want them to be applied.
|
||||
|
||||
.. important::
|
||||
Make sure that the tax sequence is correct, as the order in which they are may impact the
|
||||
@@ -101,75 +85,93 @@ Tax Computation
|
||||
- **Fixed**
|
||||
|
||||
The tax has a fixed amount in the default currency. The amount remains the same, regardless of the
|
||||
Sales Price.
|
||||
sales price.
|
||||
|
||||
For example, a product has a Sales Price of $1000, and we apply a *$10 fixed* tax. We then have:
|
||||
.. example::
|
||||
A product has a sales price of $1000, and we apply a $10 *fixed* tax. We then have:
|
||||
|
||||
+-------------+-------------+----------+----------+
|
||||
| Product's | Price | Tax | Total |
|
||||
| Sales Price | without tax | | |
|
||||
+=============+=============+==========+==========+
|
||||
| 1,000 | 1,000 | 10 | 1,010.00 |
|
||||
+-------------+-------------+----------+----------+
|
||||
+-------------+-------------+----------+----------+
|
||||
| Product | Price | Tax | Total |
|
||||
| sales price | without tax | | |
|
||||
+=============+=============+==========+==========+
|
||||
| 1,000 | 1,000 | 10 | 1,010.00 |
|
||||
+-------------+-------------+----------+----------+
|
||||
|
||||
- **Percentage of Price**
|
||||
- **Percentage of price**
|
||||
|
||||
The *Sales Price* is the taxable basis: the tax's amount is computed by multiplying the Sales
|
||||
Price by the tax's percentage.
|
||||
The *sales price* is the taxable basis: the tax amount is computed by multiplying the sales price
|
||||
by the tax percentage.
|
||||
|
||||
For example, a product has a Sales Price of $1000, and we apply a *10% of Price* tax. We then
|
||||
have:
|
||||
.. example::
|
||||
A product has a sales price of $1000, and we apply a *10% of Price* tax. We then have:
|
||||
|
||||
+-------------+-------------+----------+----------+
|
||||
| Product's | Price | Tax | Total |
|
||||
| Sales Price | without tax | | |
|
||||
+=============+=============+==========+==========+
|
||||
| 1,000 | 1,000 | 100 | 1,100.00 |
|
||||
+-------------+-------------+----------+----------+
|
||||
+-------------+-------------+----------+----------+
|
||||
| Product | Price | Tax | Total |
|
||||
| sales price | without tax | | |
|
||||
+=============+=============+==========+==========+
|
||||
| 1,000 | 1,000 | 100 | 1,100.00 |
|
||||
+-------------+-------------+----------+----------+
|
||||
|
||||
- **Percentage of Price Tax Included**
|
||||
|
||||
The *Total* is the taxable basis: the tax's amount is a percentage of the Total.
|
||||
The **total** is the taxable basis: the tax amount is a percentage of the total.
|
||||
|
||||
For example, a product has a Sales Price of $1000, and we apply a *10% of Price Tax Included* tax.
|
||||
We then have:
|
||||
.. example::
|
||||
A product has a Sales Price of $1000, and we apply a *10% of Price Tax Included* tax. We then
|
||||
have:
|
||||
|
||||
+-------------+-------------+----------+----------+
|
||||
| Product's | Price | Tax | Total |
|
||||
| Sales Price | without tax | | |
|
||||
+=============+=============+==========+==========+
|
||||
| 1,000 | 1,000 | 111.11 | 1,111.11 |
|
||||
+-------------+-------------+----------+----------+
|
||||
+-------------+-------------+----------+----------+
|
||||
| Product | Price | Tax | Total |
|
||||
| sales price | without tax | | |
|
||||
+=============+=============+==========+==========+
|
||||
| 1,000 | 1,000 | 111.11 | 1,111.11 |
|
||||
+-------------+-------------+----------+----------+
|
||||
|
||||
- **Python code**
|
||||
|
||||
A tax defined as **Python code** consists of two snippets of Python code that are executed in a
|
||||
local environment containing data such as the unit price, product or partner.
|
||||
:guilabel:`Python Code` defines the amount of the tax, and :guilabel:`Applicable Code` defines if
|
||||
the tax is to be applied. The formula is found at the bottom of the :guilabel:`Definition` tab.
|
||||
|
||||
.. example::
|
||||
:guilabel:`Python Code`: `result = price_unit * 0.10`
|
||||
:guilabel:`Applicable Code`: `result = true`
|
||||
|
||||
.. _taxes/active:
|
||||
|
||||
Active
|
||||
~~~~~~
|
||||
|
||||
Only **Active** taxes can be added to new documents.
|
||||
Only **active** taxes can be added to new documents.
|
||||
|
||||
.. important::
|
||||
It is not possible to delete taxes that have already been used. Instead, you can deactivate them
|
||||
to prevent future use.
|
||||
|
||||
.. note::
|
||||
This field can be modified from the *List View*. See :ref:`above <taxes/list_activation>` for
|
||||
more information.
|
||||
This field can be modified from the :ref:`list view <taxes/list_activation>`.
|
||||
|
||||
.. _taxes/scope:
|
||||
|
||||
Tax Scope
|
||||
~~~~~~~~~
|
||||
Tax type
|
||||
~~~~~~~~
|
||||
|
||||
The **Tax Scope** determines the tax's application, which also restricts where it is displayed.
|
||||
The :guilabel:`Tax Type` determines the tax application, which also restricts where it is displayed.
|
||||
|
||||
- **Sales**: Customer Invoices, Product's Customer Taxes, etc.
|
||||
- **Purchase**: Vendor Bills, Product's Vendor Taxes, etc.
|
||||
- **Sales**: Customer invoices, product customer taxes, etc.
|
||||
- **Purchase**: Vendor bills, product vendor taxes, etc.
|
||||
- **None**
|
||||
|
||||
.. tip::
|
||||
You can use **None** for taxes that you want to include in a :ref:`Group of Taxes
|
||||
<taxes/computation>` but that you don't want to list along with other Sales or Purchase taxes.
|
||||
You can use :guilabel:`None` for taxes that you want to include in a :ref:`Group of Taxes
|
||||
<taxes/computation>` but that you do not want to list along with other sales or purchase taxes.
|
||||
|
||||
Tax scope
|
||||
~~~~~~~~~
|
||||
|
||||
The :guilabel:`Tax Scope` restricts the use of taxes to a type of product, either **goods** or
|
||||
**services**.
|
||||
|
||||
.. _taxes/definition-tab:
|
||||
|
||||
@@ -177,105 +179,118 @@ Definition tab
|
||||
--------------
|
||||
|
||||
Allocate with precision the amount of the taxable basis or percentages of the computed tax to
|
||||
multiple accounts and Tax Grids.
|
||||
multiple accounts and tax grids.
|
||||
|
||||
.. image:: taxes/definition.png
|
||||
:alt: Allocate tax amounts to the right accounts and tax grids
|
||||
|
||||
- **Based On**:
|
||||
|
||||
- Base: the price on the invoice line
|
||||
- % of tax: a percentage of the computed tax.
|
||||
- :guilabel:`Base`: the price on the invoice line
|
||||
- :guilabel:`% of tax`: a percentage of the computed tax.
|
||||
|
||||
- **Account**: if defined, an additional Journal Item is recorded.
|
||||
- **Tax Grids**: used to generate :doc:`Tax Reports <reporting/tax_returns>`
|
||||
- **Account**: if defined, an additional journal item is recorded.
|
||||
- **Tax Grids**: used to generate :doc:`tax reports <reporting/tax_returns>`
|
||||
automatically, according to your country's regulations.
|
||||
|
||||
.. _taxes/advanced-tab:
|
||||
|
||||
Advanced Options tab
|
||||
Advanced options tab
|
||||
--------------------
|
||||
|
||||
.. _taxes/label-invoices:
|
||||
|
||||
Label on Invoices
|
||||
Label on invoices
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
The label of the tax, as displayed on each invoice line in the **Taxes** column. This is the
|
||||
:ref:`label <taxes/labels>` visible to *front end* users, on exported invoices, on their Customer
|
||||
Portals, etc.
|
||||
The tax label is displayed on each invoice line in the :guilabel:`Taxes` column. This is visible to
|
||||
*front-end* users on exported invoices, in customer portals, etc.
|
||||
|
||||
.. image:: taxes/invoice-label.png
|
||||
:alt: The Label on Invoices is displayed on each invoice line
|
||||
:alt: The label on invoices is displayed on each invoice line
|
||||
|
||||
.. _taxes/tax-group:
|
||||
|
||||
Tax Group
|
||||
Tax group
|
||||
~~~~~~~~~
|
||||
|
||||
Select to which **Tax Group** the tax belongs. The Tax Group name is the :ref:`label
|
||||
<taxes/labels>` displayed above the *Total* line on exported invoices, and the Customer Portals.
|
||||
Select which **tax group** the tax belongs to. The tax group name is the displayed above the
|
||||
**total** line on exported invoices and in customer portals.
|
||||
|
||||
Tax groups include different iterations of the same tax. This can be useful when you must record
|
||||
differently the same tax according to :doc:`Fiscal Positions <taxes/fiscal_positions>`.
|
||||
the same tax differently according to :doc:`fiscal positions <taxes/fiscal_positions>`.
|
||||
|
||||
.. image:: taxes/invoice-tax-group.png
|
||||
:alt: The Tax Group name is different from the Label on Invoices
|
||||
.. example::
|
||||
|
||||
In the example above, we see a 0% tax for Intra-Community customers in Europe. It records amounts on
|
||||
specific accounts and with specific tax grids. Still, to the customer, it is a 0% tax. That's why
|
||||
the :ref:`Label on the Invoice <taxes/label-invoices>` indicates *0% EU*, and the Tax Group name,
|
||||
above the *Total* line, indicates *0%*.
|
||||
.. image:: taxes/invoice-tax-group.png
|
||||
:alt: The Tax Group name is different from the Label on Invoices
|
||||
|
||||
In the example above, the :guilabel:`0% EU S` tax for intra-community customers in Europe records
|
||||
the amount on specific accounts and tax grids. However, it remains a 0% tax to the customer. This
|
||||
is why the label indicates :guilabel:`0% EU S`, and the tax group name above the
|
||||
:guilabel:`Total` line indicates :guilabel:`VAT 0%`.
|
||||
|
||||
.. important::
|
||||
Taxes have three different labels, each one having a specific use. Refer to the following table
|
||||
to see where they are displayed.
|
||||
|
||||
+------------------+-------------------------+-------------------------+
|
||||
| :ref:`Tax Name | :ref:`Label on Invoice | :ref:`Tax Group |
|
||||
| <taxes/name>` | <taxes/label-invoices>` | <taxes/tax-group>` |
|
||||
+==================+=========================+=========================+
|
||||
| Backend | :guilabel:`Taxes` column| Above the |
|
||||
| | on exported invoices | :guilabel:`Total` line |
|
||||
| | | on exported invoices |
|
||||
+------------------+-------------------------+-------------------------+
|
||||
|
||||
.. _taxes/analytic-cost:
|
||||
|
||||
Include in Analytic Cost
|
||||
Include in analytic cost
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
With this option activated, the tax's amount is assigned to the same **Analytic Account** as the
|
||||
With this option activated, the tax amount is assigned to the same **analytic account** as the
|
||||
invoice line.
|
||||
|
||||
.. _taxes/included-in-price:
|
||||
|
||||
Included in Price
|
||||
Included in price
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
With this option activated, the total (including the tax) equals the **Sales Price**.
|
||||
With this option activated, the total (including the tax) equals the **sales price**.
|
||||
|
||||
:dfn:`Total = Sales Price = Computed Tax-Excluded price + Tax`
|
||||
`Total = Sales Price = Computed Tax-Excluded price + Tax`
|
||||
|
||||
For example, a product has a Sales Price of $1000, and we apply a *10% of Price* tax, which is
|
||||
*included in the price*. We then have:
|
||||
.. example::
|
||||
A product has a sales price of $1000, and we apply a *10% of Price* tax, which is *included in
|
||||
the price*. We then have:
|
||||
|
||||
+-------------+-------------+----------+----------+
|
||||
| Product's | Price | Tax | Total |
|
||||
| Sales Price | without tax | | |
|
||||
+=============+=============+==========+==========+
|
||||
| 1,000 | 900.10 | 90.9 | 1,000.00 |
|
||||
+-------------+-------------+----------+----------+
|
||||
+-------------+-------------+----------+----------+
|
||||
| Product | Price | Tax | Total |
|
||||
| sales price | without tax | | |
|
||||
+=============+=============+==========+==========+
|
||||
| 1,000 | 900.10 | 90.9 | 1,000.00 |
|
||||
+-------------+-------------+----------+----------+
|
||||
|
||||
.. note::
|
||||
If you need to define prices accurately, both tax-included and tax-excluded, please refer to the
|
||||
following documentation: :doc:`taxes/B2B_B2C`.
|
||||
|
||||
.. note::
|
||||
- **Invoices**: By default, the Line Subtotals displayed on your invoices are *Tax-Excluded*. To
|
||||
display *Tax-Included* Line Subtotals, go to :menuselection:`Accounting --> Configuration -->
|
||||
Settings --> Customer Invoices`, and select *Tax-Included* in the **Line Subtotals Tax
|
||||
Display** field, then click on *Save*.
|
||||
- **eCommerce**: By default, the prices displayed on your eCommerce website are *Tax-Excluded*.
|
||||
To display *Tax-Included* prices, go to :menuselection:`Website --> Configuration --> Settings
|
||||
--> Pricing`, and select *Tax-Included* in the **Product Prices** field, then click on *Save*.
|
||||
By default, only the :guilabel:`Tax excluded` column is displayed on invoices. To display the
|
||||
:guilabel:`Tax included` column, click the **dropdown toggle** button and check
|
||||
:guilabel:`Tax incl.`.
|
||||
|
||||
.. image:: taxes/toggle-button.png
|
||||
|
||||
.. _taxes/base-subsequent:
|
||||
|
||||
Affect Base of Subsequent Taxes
|
||||
Affect base of subsequent taxes
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
With this option, the total tax-included becomes the taxable basis for the other taxes applied to
|
||||
the same product.
|
||||
|
||||
You can configure a new :ref:`Group of Taxes <taxes/computation>` to include this tax, or add it
|
||||
You can configure a new :ref:`group of taxes <taxes/computation>` to include this tax or add it
|
||||
directly to a product line.
|
||||
|
||||
.. image:: taxes/subsequent-line.png
|
||||
@@ -293,9 +308,9 @@ directly to a product line.
|
||||
:alt: The taxes' sequence in Odoo determines which tax is applied first
|
||||
|
||||
.. seealso::
|
||||
|
||||
- :doc:`taxes/fiscal_positions`
|
||||
- :doc:`taxes/B2B_B2C`
|
||||
- :doc:`taxes/taxcloud`
|
||||
- :doc:`reporting/tax_returns`
|
||||
|
||||
.. toctree::
|
||||
|
||||
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 24 KiB |
@@ -2,69 +2,41 @@
|
||||
Withholding taxes
|
||||
=================
|
||||
|
||||
A withholding tax, also called a retention tax, is a government
|
||||
requirement for the payer of a customer invoice to withhold or deduct
|
||||
tax from the payment, and pay that tax to the government. In most
|
||||
jurisdictions, withholding tax applies to employment income.
|
||||
|
||||
With normal taxes, the tax is added to the subtotal to give you the
|
||||
total to pay. As opposed to normal taxes, withholding taxes are deducted
|
||||
from the amount to pay, as the tax will be paid by the customer.
|
||||
|
||||
As, an example, in Colombia you may have the following invoice:
|
||||
|
||||
.. image:: retention/retention03.png
|
||||
:align: center
|
||||
|
||||
In this example, the **company** who sent the invoice owes $20 of taxes to
|
||||
the **government** and the **customer** owes $10 of taxes to the **government**.
|
||||
A **withholding tax**, also known as retention tax, mandates the payer of a customer invoice to
|
||||
deduct a tax from the payment and remit it to the government. Typically, a tax is included in the
|
||||
subtotal to calculate the total amount paid, while withholding taxes are directly subtracted from
|
||||
the payment.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
In Odoo, a withholding tax is defined by creating a negative tax. For a
|
||||
retention of 10%, you would configure the following tax (accessible
|
||||
through :menuselection:`Configuration --> Taxes`):
|
||||
In Odoo, a withholding tax is defined by creating a negative tax. To create one, go
|
||||
to :menuselection:`Accounting --> Configuration --> Taxes` and, in the :guilabel:`Amount` field,
|
||||
enter a negative amount.
|
||||
|
||||
.. image:: retention/retention04.png
|
||||
:align: center
|
||||
.. image:: retention/negative-amount.png
|
||||
:alt: negative tax amount in field
|
||||
|
||||
In order to make it appear as a retention on the invoice, you should set
|
||||
a specific tax group **Retention** on your tax, in the **Advanced Options**
|
||||
tab.
|
||||
Then, go to the :menuselection:`Advanced Options` tab and create a retention :guilabel:`Tax Group`.
|
||||
|
||||
.. image:: retention/retention02.png
|
||||
:align: center
|
||||
|
||||
Once the tax is defined, you can use it in your products, sales order or
|
||||
invoices.
|
||||
.. image:: retention/tax-group.png
|
||||
:alt: tax group for retention tax.
|
||||
|
||||
.. tip::
|
||||
If the retention is a percentage of a regular tax, create a Tax with a
|
||||
**Tax Computation** as a **Tax Group** and set the two taxes in this group
|
||||
(normal tax and retention).
|
||||
If the retention is a percentage of a regular tax, create a :guilabel:`Tax` with a
|
||||
:guilabel:`Tax Computation` as a :guilabel:`Group of Taxes`. Then, set both the regular tax and
|
||||
the retention one in the :guilabel:`Definition` tab.
|
||||
|
||||
Applying retention taxes on invoices
|
||||
====================================
|
||||
Retention taxes on invoices
|
||||
===========================
|
||||
|
||||
Once your tax is created, you can use it on customer forms, sales order
|
||||
or customer invoices. You can apply several taxes on a single customer
|
||||
invoice line.
|
||||
Once the retention tax has been created, it can be used on customer forms, sales orders, and
|
||||
customer invoices.
|
||||
Several taxes can be applied on a single customer invoice line.
|
||||
|
||||
.. image:: retention/retention01.png
|
||||
:align: center
|
||||
|
||||
.. note::
|
||||
When you see the customer invoice on the screen, you get only a
|
||||
**Taxes line** summarizing all the taxes (normal taxes & retentions).
|
||||
But when you print or send the invoice, Odoo does the correct
|
||||
grouping amongst all the taxes.
|
||||
|
||||
The printed invoice will show the different amounts in each tax group.
|
||||
|
||||
.. image:: retention/retention03.png
|
||||
:align: center
|
||||
.. image:: retention/invoice-tax.png
|
||||
:alt: invoice lines with taxes
|
||||
|
||||
.. seealso::
|
||||
|
||||
* :doc:`../taxes`
|
||||
:doc:`../taxes`
|
||||
|
||||
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 8.3 KiB |
@@ -3,9 +3,12 @@ TaxCloud integration
|
||||
====================
|
||||
|
||||
.. warning::
|
||||
The Odoo TaxCloud integration has begun its decommissioning, starting in Odoo 17. New
|
||||
installations are prohibited in Odoo 17, and in Odoo 18, the TaxCloud module(s) won't exist at
|
||||
all. Odoo recommends the use of the Avatax platform.
|
||||
The out-of-the-box Odoo TaxCloud integration has begun its decommissioning. Starting in Odoo 17,
|
||||
new installations are prohibited, and in Odoo 18 the TaxCloud module(s) won't exist at all. Odoo
|
||||
recommends the use of the Avatax platform.
|
||||
|
||||
If you are hosted on-premise or on Odoo.SH and you wish to use Taxcloud, you can contact them
|
||||
directly `here <https://taxcloud.com/blog/odoo-integration/>`_.
|
||||
|
||||
.. seealso::
|
||||
:doc:`avatax`
|
||||
|
||||
|
After Width: | Height: | Size: 7.9 KiB |
@@ -1,195 +1,176 @@
|
||||
=================================
|
||||
Deferred expenses and prepayments
|
||||
=================================
|
||||
=================
|
||||
Deferred expenses
|
||||
=================
|
||||
|
||||
**Deferred expenses** and **prepayments** (also known as **prepaid expense**), are both costs that
|
||||
have already occurred for unconsumed products or services yet to receive.
|
||||
**Deferred expenses** and **prepayments** (also known as **prepaid expenses**) are both costs that
|
||||
have already occurred for products or services yet to be received.
|
||||
|
||||
Such costs are **assets** for the company that pays them since it already paid for products and
|
||||
services still to receive or that are yet to be used. The company cannot report them on the current
|
||||
**Profit and Loss statement**, or *Income Statement*, since the payments will be effectively
|
||||
expensed in the future.
|
||||
services but has either not yet received them or not yet used them. The company cannot report them
|
||||
on the current **profit and loss statement**, or *income statement*, since the payments will be
|
||||
effectively expensed in the future.
|
||||
|
||||
These future expenses must be deferred on the company's balance sheet until the moment in time they
|
||||
can be **recognized**, at once or over a defined period, on the Profit and Loss statement.
|
||||
can be **recognized**, at once or over a defined period, on the profit and loss statement.
|
||||
|
||||
For example, let's say we pay $ 1200 at once for one year of insurance. We already pay the cost now
|
||||
For example, let's say we pay $1200 at once for one year of insurance. We already pay the cost now
|
||||
but haven't used the service yet. Therefore, we post this new expense in a *prepayment account* and
|
||||
decide to recognize it on a monthly basis. Each month, for the next 12 months, $ 100 will be
|
||||
decide to recognize it on a monthly basis. Each month, for the next 12 months, $100 will be
|
||||
recognized as an expense.
|
||||
|
||||
Odoo Accounting handles deferred expenses and prepayments by spreading them in multiple entries that
|
||||
are automatically created in *draft mode* and then posted periodically.
|
||||
Odoo Accounting handles deferred expenses by spreading them across multiple entries that are
|
||||
posted periodically.
|
||||
|
||||
.. note::
|
||||
The server checks once a day if an entry must be posted. It might then take up to 24 hours before
|
||||
you see a change from *draft* to *posted*.
|
||||
you see a change from :guilabel:`Draft` to :guilabel:`Posted`.
|
||||
|
||||
Prerequisites
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Such transactions must be posted on a **Deferred Expense Account** rather than on the default
|
||||
expense account.
|
||||
Make sure the default settings are correctly configured for your business. To do so, go to
|
||||
:menuselection:`Accounting --> Configuration --> Settings`. The following options are available:
|
||||
|
||||
Configure a Deferred Expense Account
|
||||
------------------------------------
|
||||
Journal
|
||||
The deferral entries are posted in this journal.
|
||||
Deferred Expense Account
|
||||
Expenses are deferred on this Current Asset account until they are recognized.
|
||||
Deferred Revenue Account
|
||||
Revenues are deferred on this Current Liability account until they are recognized.
|
||||
Generate Entries
|
||||
By default, Odoo :ref:`automatically generates <vendor_bills/deferred/generate_on_validation>`
|
||||
the deferral entries when you post a vendor bill. However, you can also choose to
|
||||
:ref:`generate them manually <vendor_bills/deferred/generate_manually>` by selecting the
|
||||
:guilabel:`Manually & Grouped` option instead.
|
||||
Amount Computation
|
||||
Suppose a bill of $1200 must be deferred over 12 months. The :guilabel:`Equal per month`
|
||||
computation recognizes $100 each month, while the :guilabel:`Based on days` computation recognizes
|
||||
different amounts depending on the number of days in each month.
|
||||
|
||||
To configure your account in the **Chart of Accounts**, go to :menuselection:`Accounting -->
|
||||
Configuration --> Chart of Accounts`, click on *Create*, and fill out the form.
|
||||
.. _vendor_bills/deferred/generate_on_validation:
|
||||
|
||||
.. image:: deferred_expenses/deferred_expenses01.png
|
||||
:align: center
|
||||
:alt: Configuration of a Deferred Expense Account in Odoo Accounting
|
||||
Generate deferral entries on validation
|
||||
=======================================
|
||||
|
||||
.. tip::
|
||||
Make sure the :guilabel:`Start Date` and :guilabel:`End Date` fields are visible in the
|
||||
:guilabel:`Invoice Lines` tab. In most cases, the :guilabel:`Start Date` should be in the same
|
||||
month as the :guilabel:`Bill Date`.
|
||||
|
||||
For each line of the bill that should be deferred, specify the start and end dates of the deferral
|
||||
period.
|
||||
|
||||
If the :guilabel:`Generate Entries` field is set to :guilabel:`On invoice/bill validation`, Odoo
|
||||
automatically generates the deferral entries when the bill is validated. Click on the
|
||||
:guilabel:`Deferred Entries` smart button to see them.
|
||||
|
||||
One entry, dated on the same day as the bill, moves the bill amounts from the expense account to
|
||||
the deferred account. The other entries are deferral entries which will, month after month, move the
|
||||
bill amounts from the deferred account to the expense account to recognize the expense.
|
||||
|
||||
.. example::
|
||||
You can defer a January bill of $1200 over 12 months by specifying a start date of 01/01/2023
|
||||
and an end date of 12/31/2023. At the end of August, $800 is recognized as an expense,
|
||||
whereas $400 remains on the deferred account.
|
||||
|
||||
Reporting
|
||||
=========
|
||||
|
||||
The deferred expense report computes an overview of the necessary deferral entries for each account.
|
||||
To access it, go to :menuselection:`Accounting --> Reporting --> Deferred Expense`.
|
||||
|
||||
To view the journal items of each account, click on the account name and then :guilabel:`Journal
|
||||
Items`.
|
||||
|
||||
.. image:: deferred_expenses/deferred_expense_report.png
|
||||
:alt: Deferred expense report
|
||||
|
||||
.. note::
|
||||
This account's type must be either *Current Assets* or *Prepayments*
|
||||
Only bills whose accounting date is before the end of the period of the report
|
||||
are taken into account.
|
||||
|
||||
Post an expense to the right account
|
||||
------------------------------------
|
||||
.. _vendor_bills/deferred/generate_manually:
|
||||
|
||||
Select the account on a draft bill
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Generate grouped deferral entries manually
|
||||
==========================================
|
||||
|
||||
On a draft bill, select the right account for all the products of which the expenses must be
|
||||
deferred.
|
||||
If you have a lot of deferred revenues and wish to reduce the number of journal entries created, you
|
||||
can generate deferral entries manually. To do so, set the :guilabel:`Generate Entries` field in the
|
||||
**Settings** to :guilabel:`Manually & Grouped`. Odoo then aggregates the deferred amounts in a
|
||||
single entry.
|
||||
|
||||
.. image:: deferred_expenses/deferred_expenses02.png
|
||||
:align: center
|
||||
:alt: Selection of a Deferred Expense Account on a draft bill in Odoo Accounting
|
||||
At the end of each month, go to the Deferred Expenses report and click the
|
||||
:guilabel:`Generate Entries` button. This generates two deferral entries:
|
||||
|
||||
Choose a different Expense Account for specific products
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
- One dated at the end of the month which aggregates, for each account, all the deferred amounts
|
||||
of that month. This means that at the end of that period, a part of the deferred expense is
|
||||
recognized.
|
||||
- The reversal of this created entry, dated on the following day (i.e., the first day of the
|
||||
next month) to cancel the previous entry.
|
||||
|
||||
Start editing the product, go to the *Accounting* tab, select the right **Expense Account**, and
|
||||
save.
|
||||
.. example::
|
||||
|
||||
.. image:: deferred_expenses/deferred_expenses03.png
|
||||
:align: center
|
||||
:alt: Change of the Expense Account for a product in Odoo
|
||||
There are two bills:
|
||||
|
||||
.. tip::
|
||||
It is possible to automate the creation of expense entries for these products (see:
|
||||
`Automate the Deferred Expenses`_).
|
||||
- Bill A: $1200 to be deferred from 01/01/2023 to 12/31/2023
|
||||
- Bill B: $600 to be deferred from 01/01/2023 to 12/31/2023
|
||||
|
||||
Change the account of a posted journal item
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
In January
|
||||
At the end of January, after clicking the :guilabel:`Generate Entries` button,
|
||||
there are the following entries:
|
||||
|
||||
To do so, open your Purchases Journal by going to :menuselection:`Accounting --> Accounting -->
|
||||
Purchases`, select the journal item you want to modify, click on the account, and select the right
|
||||
one.
|
||||
- Entry 1 dated on the 31st January:
|
||||
|
||||
.. image:: deferred_expenses/deferred_expenses04.png
|
||||
:align: center
|
||||
:alt: Modification of a posted journal item's account in Odoo Accounting
|
||||
- Line 1: Expense account -1200 -600 = **-1800** (cancelling the total of both bills)
|
||||
- Line 2: Expense account 100 + 50 = **150** (recognizing 1/12 of bill A and bill B)
|
||||
- Line 3: Deferred account 1800 - 150 = **1650** (amount that has yet to be deferred later
|
||||
on)
|
||||
|
||||
Deferred Expenses entries
|
||||
=========================
|
||||
- Entry 2 dated on the 1st February, the reversal of the previous entry:
|
||||
|
||||
Create a new entry
|
||||
------------------
|
||||
- Line 1: Expense account **1800**
|
||||
- Line 2: Deferred account **-150**
|
||||
- Line 3: Expense account **-1650**
|
||||
|
||||
A **Deferred Expense entry** automatically generates all journal entries in *draft mode*. They are
|
||||
then posted one by one at the right time until the full amount of the expense is recognized.
|
||||
In February
|
||||
At the end of February, after clicking the :guilabel:`Generate Entries` button,
|
||||
there are the following entries:
|
||||
|
||||
To create a new entry, go to :menuselection:`Accounting --> Accounting --> Deferred Expense`, click
|
||||
on *Create*, and fill out the form.
|
||||
- Entry 1 dated on the 28th February:
|
||||
|
||||
Click on **select related purchases** to link an existing journal item to this new entry. Some
|
||||
fields are then automatically filled out, and the journal item is now listed under the **Related
|
||||
Expenses** tab.
|
||||
- Line 1: Expense account -1200 -600 = **-1800** (cancelling the total of both bills)
|
||||
- Line 2: Expense account 200 + 100 = **300** (recognizing 2/12 of bill A and bill B)
|
||||
- Line 3: Deferred account 1800 - 300 = **1500** (amount that has yet to be deferred later
|
||||
on)
|
||||
|
||||
.. image:: deferred_expenses/deferred_expenses05.png
|
||||
:align: center
|
||||
:alt: Deferred Expense entry in Odoo Accounting
|
||||
- Entry 2 dated on the 1st March, the reversal of the previous entry.
|
||||
|
||||
Once done, you can click on *Compute Deferral* (next to the *Confirm* button) to generate all the
|
||||
values of the **Expense Board**. This board shows you all the entries that Odoo will post to
|
||||
recognize your expense, and at which date.
|
||||
From March to October
|
||||
The same computation is done for each month until October.
|
||||
|
||||
.. image:: deferred_expenses/deferred_expenses06.png
|
||||
:align: center
|
||||
:alt: Expense Board in Odoo Accounting
|
||||
In November
|
||||
At the end of November, after clicking the :guilabel:`Generate Entries` button,
|
||||
there are the following entries:
|
||||
|
||||
What does "Prorata Temporis" mean?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
- Entry 1 dated on the 30th November:
|
||||
|
||||
The **Prorata Temporis** feature is useful to recognize your expense the most accurately possible.
|
||||
- Line 1: Expense account -1200 -600 = **-1800** (cancelling the total of both bills)
|
||||
- Line 2: Expense account 1100 + 550 = **1650** (recognizing 11/12 of bill A and bill B)
|
||||
- Line 3: Deferred account 1800 - 1650 = **150** (amount that has yet to be deferred later
|
||||
on)
|
||||
|
||||
With this feature, the first entry on the Expense Board is computed based on the time left between
|
||||
the *Prorata Date* and the *First Recognition Date* rather than the default amount of time between
|
||||
recognitions.
|
||||
- Entry 2 dated on the 1st December, the reversal of the previous entry.
|
||||
|
||||
For example, the Expense Board above has its first expense with an amount of $ 70.97 rather than
|
||||
$ 100.00. Consequently, the last entry is also lower and has an amount of $ 29.03.
|
||||
In December
|
||||
There is no need to generate entries in December. Indeed, if we do the computation for
|
||||
December, we will have an amount of 0 to be deferred.
|
||||
|
||||
Deferred Entry from the Purchases Journal
|
||||
-----------------------------------------
|
||||
In total
|
||||
If we aggregate everything, we would have:
|
||||
|
||||
You can create a deferred entry from a specific journal item in your **Purchases Journal**.
|
||||
- bill A and bill B
|
||||
- two entries (one for the deferral and one for the reversal) for each month from January to
|
||||
November
|
||||
|
||||
To do so, open your Purchases Journal by going to :menuselection:`Accounting --> Accounting -->
|
||||
Purchases`, and select the journal item you want to defer. Make sure that it is posted in the right
|
||||
account (see: `Change the account of a posted journal item`_).
|
||||
|
||||
Then, click on *Action*, select **Create Deferred Entry**, and fill out the form the same way you
|
||||
would do to `create a new entry`_.
|
||||
|
||||
.. image:: deferred_expenses/deferred_expenses07.png
|
||||
:align: center
|
||||
:alt: Create Deferred Entry from a journal item in Odoo Accounting
|
||||
|
||||
Deferred Expense Models
|
||||
=======================
|
||||
|
||||
You can create **Deferred Expense Models** to create your Deferred Expense entries faster.
|
||||
|
||||
To create a model, go to :menuselection:`Accounting --> Configuration --> Deferred Expense Models`,
|
||||
click on *Create*, and fill out the form the same way you would do to create a new entry.
|
||||
|
||||
.. tip::
|
||||
You can also convert a *confirmed Deferred Expense entry* into a model by opening it from
|
||||
:menuselection:`Accounting --> Accounting --> Deferred Expenses` and then, by clicking on the
|
||||
button *Save Model*.
|
||||
|
||||
Apply a Deferred Expense Model to a new entry
|
||||
---------------------------------------------
|
||||
|
||||
When you create a new Deferred Expense entry, fill out the **Deferred Expense Account** with the
|
||||
right recognition account.
|
||||
|
||||
New buttons with all the models linked to that account appear at the top of the form. Clicking on a
|
||||
model button fills out the form according to that model.
|
||||
|
||||
.. image:: deferred_expenses/deferred_expenses08.png
|
||||
:align: center
|
||||
:alt: Deferred Expense model button in Odoo Accounting
|
||||
|
||||
.. _deferred-expenses-automation:
|
||||
|
||||
Automate the Deferred Expenses
|
||||
==============================
|
||||
|
||||
When you create or edit an account of which the type is either *Current Assets* or *Prepayments*,
|
||||
you can configure it to defer the expenses that are credited on it automatically.
|
||||
|
||||
You have three choices for the **Automate Deferred Expense** field:
|
||||
|
||||
#. **No:** this is the default value. Nothing happens.
|
||||
#. **Create in draft:** whenever a transaction is posted on the account, a draft *Deferred Expenses
|
||||
entry* is created, but not validated. You must first fill out the form in
|
||||
:menuselection:`Accounting --> Accounting --> Deferred Expenses`.
|
||||
#. **Create and validate:** you must also select a Deferred Expense Model (see: `Deferred Expense
|
||||
Models`_). Whenever a transaction is posted on the account, a *Deferred Expenses entry* is
|
||||
created and immediately validated.
|
||||
|
||||
.. image:: deferred_expenses/deferred_expenses09.png
|
||||
:align: center
|
||||
:alt: Automate Deferred Expense on an account in Odoo Accounting
|
||||
|
||||
.. tip::
|
||||
You can, for example, select this account as the default **Expense Account** of a product to
|
||||
fully automate its purchase. (see: `Choose a different Expense Account for specific
|
||||
products`_).
|
||||
|
||||
.. seealso::
|
||||
* :doc:`../get_started/chart_of_accounts`
|
||||
Therefore, at the end of December, bills A and B are fully recognized as expense only once in
|
||||
spite of all the created entries thanks to the reversal mechanism.
|
||||
|
||||
|
After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 11 KiB |