Compare commits
143 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7993f21829 | |||
| cf63a97952 | |||
| 1bf87a0db9 | |||
| 49b057b80d | |||
| c1ba4c61ae | |||
| 64afeaebb0 | |||
| 03e9a8fd2b | |||
| 4cbbd98dee | |||
| 16a209c750 | |||
| a838df1660 | |||
| 5ec37fbb7f | |||
| 95cbc584f4 | |||
| c9dc6dc195 | |||
| 9f09422920 | |||
| f3b40b5399 | |||
| c608df663b | |||
| f097e22df0 | |||
| 786df1f373 | |||
| a7af9a59ff | |||
| 38bd71fa13 | |||
| 9c16edbf7b | |||
| 73c08327d4 | |||
| 4b98180756 | |||
| 2e1d337ed0 | |||
| b01133bfef | |||
| a61189725a | |||
| cce392c303 | |||
| 955ec07a4d | |||
| 505547264e | |||
| 2ef7150ebf | |||
| 44f4683519 | |||
| 53656d7065 | |||
| 1596413d4b | |||
| ca160e4e1a | |||
| 3c3c559d3b | |||
| ff0f90f3b3 | |||
| e2029ce5f7 | |||
| 69a9a03e1a | |||
| 4bc2742413 | |||
| 4073e9dfb1 | |||
| 2a32362e28 | |||
| 0311faee2f | |||
| 7a5d891206 | |||
| 81d201efc4 | |||
| d311926f37 | |||
| faa88b6a3f | |||
| 3defec8a1d | |||
| 04401626e5 | |||
| 4f03fc59d4 | |||
| 30fd7112af | |||
| df58ae965c | |||
| 110146cb2d | |||
| 6d5f38fa88 | |||
| 2f2d3d2267 | |||
| 911cb2c26e | |||
| 5cfe3dbf3f | |||
| 55600e428d | |||
| ec18f20bf5 | |||
| 5413bd1c5d | |||
| 8167182ae9 | |||
| ca1554271b | |||
| 5e7b7e6098 | |||
| 648f20a832 | |||
| 70050340fe | |||
| 76fc90dde7 | |||
| 6968e362da | |||
| c2c835c2d6 | |||
| bddbe0fd45 | |||
| a728ac22dd | |||
| 1c00f06816 | |||
| fabe484b75 | |||
| 229e65a5aa | |||
| b9a9da8808 | |||
| 2edce38648 | |||
| d615bc0f6d | |||
| 18aad6d5f2 | |||
| f3f44fe5f2 | |||
| 09c42c5896 | |||
| 6cf4d56153 | |||
| a7c3f818da | |||
| cb87e208bf | |||
| 053fb768e6 | |||
| a28339b44b | |||
| ba95cb33d5 | |||
| 59791c252b | |||
| 4e85ef01e8 | |||
| bbbb00e752 | |||
| 9fc9c2f52d | |||
| e6a6b9b453 | |||
| e1bed7ee7c | |||
| 22d41dc2f3 | |||
| 1e2a29338e | |||
| 039dba0780 | |||
| a4a9335dd1 | |||
| ff2cabf621 | |||
| af7c7afa34 | |||
| e5d77ee285 | |||
| 27a307cb0c | |||
| f9013a6309 | |||
| ade6af5b30 | |||
| df8114e591 | |||
| 88f546f2a9 | |||
| a2f895f644 | |||
| 80f195831e | |||
| a4b3008101 | |||
| c1fe28dd50 | |||
| 33a9e1f017 | |||
| 4b7668d6a8 | |||
| 4118cb9bf9 | |||
| 2377fa1bb8 | |||
| 71446b0668 | |||
| 3ead6e0f99 | |||
| a149164866 | |||
| 620508fb29 | |||
| 8707609b38 | |||
| e413418e1e | |||
| 12670b1299 | |||
| 4e2b634a50 | |||
| 56cda37610 | |||
| 32900efbb9 | |||
| 5612ce8dd8 | |||
| 75c24e7e88 | |||
| 78713f1637 | |||
| b96de8b50e | |||
| 1a11e3c35c | |||
| f38bae5e8d | |||
| cd11937f43 | |||
| d287d0807a | |||
| a11fa7e5b2 | |||
| 815f4c89b7 | |||
| 9081e45aab | |||
| 1a32165180 | |||
| 17f958aa80 | |||
| 9761eb44dc | |||
| f1960a250c | |||
| a20952ccfa | |||
| f0b895fdb2 | |||
| e0b8f766a1 | |||
| bc98b8c491 | |||
| 3e3198af2c | |||
| b2dbd4b466 | |||
| a113d83fea | |||
| efde0488a6 |
@@ -86,12 +86,13 @@ static: $(HTML_BUILD_DIR)/_static/style.css
|
||||
|
||||
# Called by runbot for the ci/documentation_guideline check.
|
||||
test:
|
||||
@python tests/main.py $(SOURCE_DIR)/administration $(SOURCE_DIR)/applications $(SOURCE_DIR)/contributing $(SOURCE_DIR)/developer $(SOURCE_DIR)/services redirects
|
||||
@python tests/main.py $(SOURCE_DIR)/administration $(SOURCE_DIR)/applications $(SOURCE_DIR)/contributing $(SOURCE_DIR)/developer redirects
|
||||
|
||||
# Similar as `test`, but called only manually by content reviewers to trigger extra checks.
|
||||
review:
|
||||
@read -p "Enter content path: " path; read -p "Enter max line length (default: 100): " line_length; \
|
||||
@read -p "Enter relative content path: " path; read -p "Enter max line length (default: 100): " line_length; \
|
||||
if [ -z "$$path" ]; then echo "Error: Path cannot be empty"; exit 1; fi; \
|
||||
if echo $$path | grep -q 'content/'; then path=`echo $$path | sed 's|content/||'`; fi; \
|
||||
if [ -z "$$line_length" ]; then line_length=100; fi; \
|
||||
export REVIEW=1; \
|
||||
python tests/main.py --max-line-length=$$line_length $(SOURCE_DIR)/$$path
|
||||
|
||||
@@ -479,8 +479,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
|
||||
============
|
||||
@@ -40,7 +43,7 @@ Installation
|
||||
1. See `GeoLite Legacy databases are now discontinued
|
||||
<https://support.maxmind.com/geolite-legacy-discontinuation-notice/>`_
|
||||
|
||||
How To Test GeoIP Geolocation In Your Odoo Website
|
||||
How to test GeoIP geolocation in your Odoo website
|
||||
==================================================
|
||||
|
||||
1. Go to your website. Open the web page that you want to test ``GeoIP``.
|
||||
@@ -53,7 +56,7 @@ How To Test GeoIP Geolocation In Your Odoo Website
|
||||
|
||||
You should end up with a dictionary indicating the location of the IP address.
|
||||
|
||||
.. image:: on-premise_geo-ip-installation/on-premise_geo-ip-installation01.png
|
||||
.. image:: geo_ip/on-premise_geo-ip-installation01.png
|
||||
:align: center
|
||||
|
||||
.. note::
|
||||
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 73 KiB |
@@ -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
|
||||
----------
|
||||
|
||||
@@ -225,7 +225,7 @@ PostgreSQL user.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo -u postgres createuser -s $USER
|
||||
$ sudo -u postgres createuser -d -R -S $USER
|
||||
$ createdb $USER
|
||||
|
||||
.. note::
|
||||
@@ -250,7 +250,7 @@ PostgreSQL user.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo -u postgres createuser -s $USER
|
||||
$ sudo -u postgres createuser -d -R -S $USER
|
||||
$ createdb $USER
|
||||
|
||||
.. note::
|
||||
@@ -409,10 +409,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`
|
||||
|
||||
@@ -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
|
||||
@@ -210,6 +208,8 @@ upgrade goes live.
|
||||
#. Scheduled actions are disabled.
|
||||
#. Outgoing mail servers are disabled by archiving the existing ones and adding a fake one.
|
||||
#. Payment providers and delivery carriers are reset to the test environment.
|
||||
#. Bank synchronization is disabled. Should you want to test the synchronization, contact your
|
||||
bank synchronization provider to get sandbox credentials.
|
||||
|
||||
Testing as many of your business flows as possible is strongly recommended to ensure they are
|
||||
working correctly and to get more familiar with the new version.
|
||||
@@ -289,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:
|
||||
@@ -335,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
|
||||
|
||||
|
||||
@@ -203,8 +203,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
|
||||
=================
|
||||
|
||||
@@ -106,9 +106,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:`Fetch Account` 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:
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ Resulting entry
|
||||
The resulting entry section on the top right displays the selected bank transaction matched with
|
||||
the counterpart entries and includes any remaining debits or credits. In this section, you can
|
||||
validate the reconciliation or mark it as :guilabel:`To Check`. Any :ref:`reconciliation model
|
||||
buttons <reconciliation_models_button>` are also available in the resulting entry section.
|
||||
buttons <reconciliation/button>` are also available in the resulting entry section.
|
||||
|
||||
Reconcile transactions
|
||||
======================
|
||||
@@ -62,13 +62,13 @@ Transactions can be matched automatically with the use of :doc:`reconciliation m
|
||||
<reconciliation_models>`, or they can be matched with :ref:`existing entries
|
||||
<reconciliation/existing-entries>`, :ref:`batch payments <reconciliation/batch-payments>`,
|
||||
:ref:`manual operations <reconciliation/manual-operations>`, and :ref:`reconciliation model buttons
|
||||
<reconciliation_models_button>`.
|
||||
<reconciliation/button>`.
|
||||
|
||||
#. Select a transaction among unmatched bank transactions.
|
||||
#. Define the counterpart. There are several options for defining a counterpart, including
|
||||
:ref:`matching existing entries <reconciliation/existing-entries>`, :ref:`manual operations
|
||||
<reconciliation/manual-operations>`, :ref:`batch payments <reconciliation/batch-payments>`, and
|
||||
:ref:`reconciliation model buttons <reconciliation_models_button>`.
|
||||
:ref:`reconciliation model buttons <reconciliation/button>`.
|
||||
#. If the resulting entry isn't fully balanced, balance it by adding another existing counterpart
|
||||
entry or writing it off with a :ref:`manual operation <reconciliation/manual-operations>`.
|
||||
#. Click the :guilabel:`Validate` button to confirm the reconciliation and move to the next
|
||||
@@ -90,8 +90,8 @@ Match existing entries
|
||||
----------------------
|
||||
|
||||
This tab contains matching entries Odoo automatically pre-selects according to the reconciliation
|
||||
models. The entry order is based on :ref:`reconciliation models <reconciliation_models_suggestion>`,
|
||||
with suggested entries appearing first.
|
||||
models. The entry order is based on :doc:`reconciliation models <reconciliation_models>`, with
|
||||
suggested entries appearing first.
|
||||
|
||||
.. tip::
|
||||
The search bar within the :guilabel:`Match Existing Entries` tab allows you to search for
|
||||
@@ -126,10 +126,11 @@ of the relevant optional fields.
|
||||
.. image:: reconciliation/fully-paid.png
|
||||
:alt: Click on fully paid to manually set an invoice as entirely paid.
|
||||
|
||||
.. _reconciliation/button:
|
||||
|
||||
Reconciliation model buttons
|
||||
----------------------------
|
||||
|
||||
Use a :ref:`reconciliation model button <reconciliation_models_button>` for manual operations that
|
||||
are frequently used. These custom buttons allow you to quickly reconcile bank transactions manually
|
||||
and can also be used in combination with existing entries.
|
||||
Use a :doc:`reconciliation model <reconciliation_models>` button for manual operations that are
|
||||
frequently used. These custom buttons allow you to quickly reconcile bank transactions manually and
|
||||
can also be used in combination with existing entries.
|
||||
|
||||
@@ -1,129 +1,123 @@
|
||||
=====================
|
||||
Reconciliation Models
|
||||
Reconciliation models
|
||||
=====================
|
||||
|
||||
Once the bank statements are correctly imported, it is essential to *reconcile* the records properly
|
||||
and ensure all *Journal Entries* are balanced and in agreement. To ease and speed up the
|
||||
reconciliation process, you can configure **Reconciliation Models**, which are particularly useful
|
||||
with recurrent entries such as bank fees.
|
||||
Reconciliation models are used to automate the :doc:`bank reconciliation <reconciliation>` process,
|
||||
which is especially handy when dealing with recurring entries like bank fees. Reconciliation models
|
||||
can also be helpful in handling :doc:`cash discounts <../customer_invoices/cash_discounts>`.
|
||||
|
||||
.. todo:: Add a link to the Reconciliation process in the paragraph above, once the doc will have
|
||||
been updated.
|
||||
|
||||
.. note::
|
||||
Reconciliation Models are also useful to handle *Cash Discounts*. Please refer to
|
||||
:doc:`this documentation <../customer_invoices/cash_discounts>` for more
|
||||
information.
|
||||
|
||||
.. _reconciliation_models_types:
|
||||
|
||||
Types of Reconciliation Models
|
||||
==============================
|
||||
|
||||
There are three types of Reconciliation Models:
|
||||
|
||||
#. :ref:`Write-off Button <reconciliation_models_button>`
|
||||
#. :ref:`Suggestion of counterpart values <reconciliation_models_suggestion>`
|
||||
#. :ref:`Match existing invoices/bills <reconciliation_models_match>`
|
||||
|
||||
.. _reconciliation_models_button:
|
||||
|
||||
Manually create a write-off on clicked button
|
||||
---------------------------------------------
|
||||
|
||||
When you are reconciling an entry with an *Open Balance*, you can use the buttons available under
|
||||
the *Manual Operations* tab to pre-fill all the values automatically, before validating the
|
||||
reconciliation. Each button is a different Reconciliation Model.
|
||||
|
||||
.. image:: reconciliation_models/reconciliation_models_button.png
|
||||
:align: center
|
||||
:alt: Example of a Reconciliation Model with a write-off button in Odoo Accounting
|
||||
|
||||
.. _reconciliation_models_suggestion:
|
||||
|
||||
Suggest counterpart values
|
||||
--------------------------
|
||||
|
||||
This type of Reconciliation Model suggests immediately counterpart values that only need to be
|
||||
validated. This automation is based on a set of rules defined in the reconciliation model.
|
||||
|
||||
.. image:: reconciliation_models/reconciliation_models_suggestion.png
|
||||
:align: center
|
||||
:alt: Example of a Reconciliation Model that suggests counterpart values in Odoo Accounting
|
||||
|
||||
.. _reconciliation_models_match:
|
||||
|
||||
Match existing invoices/bills
|
||||
-----------------------------
|
||||
|
||||
This type of Reconciliation Model automatically selects the right Customer Invoice or Vendor Bill
|
||||
that matches the payment. All that is left to do is to validate the entry. This automation is based
|
||||
on a set of rules defined in the reconciliation model.
|
||||
|
||||
.. image:: reconciliation_models/reconciliation_models_match.png
|
||||
:align: center
|
||||
:alt: Example of a Reconciliation Model that matches existing invoices and bills automatically
|
||||
in Odoo Accounting
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
To manage or create new **Reconciliation Models**, go to :menuselection:`Accounting -->
|
||||
Reconciliation --> Reconciliation Models`. Alternatively, you can also open this menu from the
|
||||
Accounting Overview, by going to your Bank Journal card, clicking on the three little dots, and then
|
||||
on *Reconciliation Models*.
|
||||
|
||||
.. image:: reconciliation_models/reconciliation_models_overview.png
|
||||
:align: center
|
||||
:alt: Open the Reconciliation Model menu from the overview dashboard in Odoo Accounting
|
||||
|
||||
.. important::
|
||||
The first entry, named *Invoices Matching Rule*, is the one responsible for the current matching
|
||||
of invoices and bills. Therefore, it is advised to leave it at the top of the list and not to
|
||||
delete it.
|
||||
|
||||
Open the model you want to modify, or click on *Create* to create a new one, then fill out the form.
|
||||
|
||||
Type
|
||||
----
|
||||
|
||||
See :ref:`above <reconciliation_models_types>` for an explanation about the different types of
|
||||
Reconciliation Models.
|
||||
|
||||
.. note::
|
||||
If the *Documents* application is installed on your database, an additional **Activity type**
|
||||
field appears when *To check* is ticked. Selecting the value *Reconciliation request* implies
|
||||
that, whenever you use this model, a *Request Document* window pops up to request a document from
|
||||
a user.
|
||||
|
||||
Conditions on Bank Statement Line
|
||||
---------------------------------
|
||||
|
||||
Define here all the conditions that are required for a Reconciliation Model to be applied.
|
||||
|
||||
.. important::
|
||||
If a record matches with several Reconciliation Models, the first one in the *sequence* of models
|
||||
will be applied. The sequence is simply the order of the models in the *list view*. They can be
|
||||
rearranged by dragging-and-dropping the handle next to the name.
|
||||
|
||||
.. image:: reconciliation_models/reconciliation_models_conditions.png
|
||||
:align: center
|
||||
:alt: Conditions for the Reconciliation Model to be applied in Odoo Accounting
|
||||
|
||||
Counterpart Values
|
||||
------------------
|
||||
|
||||
This section comprises the values that are applied by the Reconciliation Model.
|
||||
|
||||
If the value to reconcile needs to be written-off in two separate accounts, click on *Add a second
|
||||
line*.
|
||||
|
||||
.. image:: reconciliation_models/reconciliation_models_counterparts.png
|
||||
:align: center
|
||||
:alt: Counterparts values of a Reconciliation Model in Odoo Accounting
|
||||
Each model is created based on a :ref:`model type <models/type>` and :guilabel:`bank transaction
|
||||
conditions`.
|
||||
|
||||
.. seealso::
|
||||
|
||||
- :doc:`reconciliation`
|
||||
- :doc:`bank_synchronization`
|
||||
- :doc:`../customer_invoices/cash_discounts`
|
||||
- `Odoo Tutorials: Reconciliation models <https://www.odoo.com/slides/slide/reconciliation-models-1841?fullscreen=1>`_
|
||||
|
||||
.. _models/type:
|
||||
|
||||
Reconciliation model types
|
||||
==========================
|
||||
|
||||
The reconciliation models are available by going to :menuselection:`Accounting --> Configuration
|
||||
--> Banks: Reconciliation Models`. For each reconciliation model, a :guilabel:`Type` must be set.
|
||||
Three types of models exist:
|
||||
|
||||
- :guilabel:`Button to generate counterpart entry`: a button is created in the resulting entry
|
||||
section of the bank reconciliation view. If clicked, this button generates a counterpart entry to
|
||||
reconcile with the active transaction based on the rules set in the model. The rules specified in
|
||||
the model determine the counterpart entry's account(s), amount(s), label(s), and analytic
|
||||
distribution;
|
||||
- :guilabel:`Rule to suggest counterpart entry`: used for recurring transactions to match the
|
||||
transaction to a new entry based on conditions that must match the information on the transaction;
|
||||
- :guilabel:`Rule to match invoices/bills`: used for recurring transactions to match the transaction
|
||||
to existing invoices, bills, or payments based on conditions that must match the information on
|
||||
the transaction.
|
||||
|
||||
Default reconciliation models
|
||||
=============================
|
||||
|
||||
In Odoo, different models are available by default depending on the company's fiscal localization.
|
||||
These can be updated if needed. Users can also create their own reconciliation models by clicking
|
||||
:guilabel:`New`.
|
||||
|
||||
.. important::
|
||||
If a record matches with several reconciliation models, the first one in the *sequence* of models
|
||||
is applied. You can rearrange the order by dragging and dropping the handle next to the name.
|
||||
|
||||
.. image:: reconciliation_models/list-view.png
|
||||
:alt: Rearrange the sequence of models in the list view.
|
||||
|
||||
Invoices/Bills perfect match
|
||||
----------------------------
|
||||
|
||||
This model should be at the top of the *sequence* of models, as it enables Odoo to suggest matching
|
||||
existing invoices or bills with a bank transaction based on set conditions.
|
||||
|
||||
.. image:: reconciliation_models/invoices-bills-perfect-match.png
|
||||
:alt: Set rules to trigger the reconciliation.
|
||||
|
||||
Odoo automatically reconciles the payment when the :guilabel:`Auto-validate` option is selected, and
|
||||
the model conditions are perfectly met. In this case, it expects to find on the bank statement's
|
||||
line the invoice/payment's reference (as :guilabel:`Label` is selected) and the partner's name
|
||||
(as :guilabel:`Partner is set` is selected) to suggest the correct counterpart entry and reconcile
|
||||
the payment automatically.
|
||||
|
||||
Invoices/Bills partial match if underpaid
|
||||
-----------------------------------------
|
||||
|
||||
This model suggests a customer invoice or vendor bill that partially matches the payment when the
|
||||
amount received is slightly lower than the invoice amount, for example in the case of
|
||||
**cash discounts**. The difference is reconciled with the account indicated in the
|
||||
:guilabel:`counterpart entries` tab.
|
||||
|
||||
The reconciliation model :guilabel:`Type` is :guilabel:`Rule to match invoices/bills`, and the
|
||||
:guilabel:`Payment tolerance` should be set.
|
||||
|
||||
.. image:: reconciliation_models/partial-match.png
|
||||
:alt: Set rules to trigger the reconciliation.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Payment tolerance` is only applicable to lower payments. It is disregarded when an
|
||||
overpayment is received.
|
||||
|
||||
.. seealso::
|
||||
:doc:`../customer_invoices/cash_discounts`
|
||||
|
||||
Line with bank fees
|
||||
-------------------
|
||||
|
||||
This model suggests a counterpart entry according to the rules set in the model. In this case, the
|
||||
reconciliation model :guilabel:`Type` is :guilabel:`Rule to suggest counterpart entry`, and the
|
||||
:guilabel:`Label` can be used for example, to identify the information referring to the
|
||||
:guilabel:`Bank fees` in the label of the transaction.
|
||||
|
||||
.. image:: reconciliation_models/bank-fees.png
|
||||
:alt: Set rules to trigger the reconciliation.
|
||||
|
||||
.. note::
|
||||
`Regular expressions <https://regexone.com/>`_, often abbreviated as **Regex**, can be used in
|
||||
Odoo in various ways to search, validate, and manipulate data within the system. Regex can be
|
||||
powerful but also complex, so it's essential to use it judiciously and with a good understanding
|
||||
of the patterns you're working with.
|
||||
|
||||
To use regular expressions in your reconciliation models, set the :guilabel:`Transaction Type`
|
||||
to :guilabel:`Match Regex` and add your expression. Odoo automatically retrieves the
|
||||
transactions that match your Regex expression and the conditions specified in your model.
|
||||
|
||||
.. image:: reconciliation_models/regex.png
|
||||
:alt: Using Regex in Odoo
|
||||
|
||||
Partner mapping
|
||||
===============
|
||||
|
||||
Partner mapping allows you to establish rules for automatically matching transactions to the correct
|
||||
partner account, saving time and reducing the risk of errors that can occur during manual
|
||||
reconciliation. For example, you can create a partner mapping rule for incoming payments with
|
||||
specific reference numbers or keywords in the transaction description. When an incoming payment
|
||||
meets these criteria, Odoo automatically maps it to the corresponding customer's account.
|
||||
|
||||
To create a partner mapping rule, go to the :guilabel:`Partner Mapping` tab and enter the
|
||||
:guilabel:`Find Text in Label`, :guilabel:`Find Text in Notes`, and :guilabel:`Partner`.
|
||||
|
||||
.. image:: reconciliation_models/partner-mapping.png
|
||||
:alt: defining partner mapping
|
||||
|
||||
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 9.8 KiB |
|
Before Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
@@ -187,7 +187,8 @@ Send yourself a sample invoice by email to make sure everything is correctly con
|
||||
* :doc:`get_started/chart_of_accounts`
|
||||
* :doc:`bank/bank_synchronization`
|
||||
* :doc:`../fiscal_localizations`
|
||||
* `Odoo Tutorials: Accounting Basics <https://www.odoo.com/r/lsZ>`_
|
||||
* `Odoo Tutorials: Accounting and Invoicing - Getting started [video]
|
||||
<https://www.odoo.com/slides/slide/getting-started-1692>`_
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
@@ -1,167 +1,439 @@
|
||||
=================================
|
||||
Inventory average price valuation
|
||||
=================================
|
||||
===============================
|
||||
Average price on returned goods
|
||||
===============================
|
||||
|
||||
As stated in the :doc:`inventory valuation page
|
||||
</applications/inventory_and_mrp/inventory/management/reporting/inventory_valuation_config>`,
|
||||
one of the possible costing method you can use in perpetual stock
|
||||
valuation, is the average cost.
|
||||
.. |AVCO| replace:: :abbr:`AVCO (Average Cost Valuation)`
|
||||
.. _inventory/avg_cost/definition:
|
||||
|
||||
This document answers to one recurrent question for companies using that
|
||||
method to make their stock valuation: how does a shipping returned to
|
||||
its supplier impact the average cost and the accounting entries? This
|
||||
document is **only** for the specific use case of a perpetual valuation (as
|
||||
opposed to the periodic one) and in average price costing method (as
|
||||
opposed to standard of FIFO).
|
||||
*Average cost valuation* (AVCO) is an inventory valuation method that evaluates cost based on the
|
||||
total cost of goods bought or produced during a period, divided by the total number of items
|
||||
on-hand. Inventory valuation is used to:
|
||||
|
||||
Definition of average cost
|
||||
==========================
|
||||
- reflect the value of a company's assets;
|
||||
- keep track of the amount of unsold goods;
|
||||
- account for monetary value in goods that have yet to generate profit;
|
||||
- report on flow of goods throughout the quarter.
|
||||
|
||||
The average cost method calculates the cost of ending inventory and cost
|
||||
of goods sold on the basis of weighted average cost per unit of
|
||||
inventory.
|
||||
Because |AVCO| uses the weighted average to evaluate the cost, it is a good fit for companies that
|
||||
sell only a few different products in large quantities. In Odoo, this costing analysis is
|
||||
*automatically updated* each time products are received.
|
||||
|
||||
The weighted average cost per unit is calculated using the following
|
||||
formula:
|
||||
Thus, when shipments are returned to their supplier, Odoo automatically generates accounting entries
|
||||
to reflect the change in inventory valuation. However, Odoo does **not** automatically update the
|
||||
|AVCO| calculation, because :ref:`this can potentially create inconsistencies with inventory
|
||||
valuation <inventory/avg_price/leaving_inventory>`.
|
||||
|
||||
- When new products arrive in a warehouse, the new average cost is
|
||||
recomputed as:
|
||||
.. note::
|
||||
This document addresses a specific use case for theoretical purposes. Navigate :ref:`here
|
||||
<inventory/management/inventory_valuation_config>` for instructions on how to set up and use
|
||||
|AVCO| in Odoo.
|
||||
|
||||
.. image:: avg_price_valuation/avg01.png
|
||||
.. seealso::
|
||||
- :ref:`Using inventory valuation <inventory/reporting/using_inventory_val>`
|
||||
- :ref:`Other inventory valuation methods <inventory/inventory_valuation_config/costing_methods>`
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
To use average cost inventory valuation on a product, navigate to :menuselection:`Inventory -->
|
||||
Configuration --> Product Categories` and select the category that will be using |AVCO|. On the
|
||||
product category page, set :guilabel:`Costing Method` to `Average Cost (AVCO)` and
|
||||
:guilabel:`Inventory Valuation` to `Automated`.
|
||||
|
||||
.. seealso::
|
||||
:ref:`Inventory valuation configuration <inventory/management/inventory_valuation_config>`
|
||||
|
||||
Using average cost valuation
|
||||
============================
|
||||
|
||||
The average cost method adjusts the inventory valuation when products are received in the warehouse.
|
||||
This section explains how it works, but if the explanation is unnecessary, skip to the :ref:`return
|
||||
to supplier use case <inventory/avg_cost/return>` section.
|
||||
|
||||
.. _inventory/avg_cost/formula:
|
||||
|
||||
Formula
|
||||
-------
|
||||
|
||||
When new products arrive, the new average cost for each product is recomputed using the formula:
|
||||
|
||||
.. math::
|
||||
Avg~Cost = \frac{(Old~Qty \times Old~Avg~Cost) + (Incoming~Qty \times Purchase~Price)}{Final~Qty}
|
||||
|
||||
- **Old Qty**: product count in stock before receiving the new shipment;
|
||||
- **Old Avg Cost**: calculated average cost for a single product from the previous inventory
|
||||
valuation;
|
||||
- **Incoming Qty**: count of products arriving in the new shipment;
|
||||
- **Purchase Price**: estimated price of products at the reception of products (since vendor bills
|
||||
may arrive later). The amount includes not only the price for the products, but also added costs,
|
||||
such as shipping, taxes, and :ref:`landed costs <inventory/reporting/landed_costs>`. At reception
|
||||
of the vendor bill, this price is adjusted;
|
||||
- **Final Qty**: quantity of on-hand stock after the stock move.
|
||||
|
||||
.. _inventory/avg_cost/definite_rule:
|
||||
|
||||
.. important::
|
||||
When products leave the warehouse, the average cost **does not** change. Read about why the
|
||||
average cost valuation is **not** adjusted :ref:`here <inventory/avg_price/leaving_inventory>`.
|
||||
|
||||
.. _inventory/avg_cost/math_table:
|
||||
|
||||
Compute average cost
|
||||
--------------------
|
||||
|
||||
To understand how the average cost of a product changes with each shipment, consider the following
|
||||
table of warehouse operations and stock moves. Each is a different example of how the average cost
|
||||
valuation is affected.
|
||||
|
||||
+--------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Operation | Incoming Value| Inventory Value | Qty On Hand | Avg Cost |
|
||||
+================================+===============+===================+===============+============+
|
||||
| | | $0 | 0 | $0 |
|
||||
+--------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Receive 8 tables at $10/unit | 8 * $10 | $80 | 8 | $10 |
|
||||
+--------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Receive 4 tables at $16/unit | 4 * $16 | $144 | 12 | $12 |
|
||||
+--------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Deliver 10 tables | -10 * $12 | $24 | 2 | $12 |
|
||||
+--------------------------------+---------------+-------------------+---------------+------------+
|
||||
|
||||
.. _inventory/avg_cost/ex-1:
|
||||
|
||||
.. exercise::
|
||||
Ensure comprehension of the above computations by reviewing the "Receive 8 tables at $10/unit"
|
||||
example.
|
||||
|
||||
Initially, the product stock is 0, so all values are $0.
|
||||
|
||||
In the first warehouse operation, `8` tables are received at `$10` each. The average cost is
|
||||
calculated using the :ref:`formula <inventory/avg_cost/formula>`:
|
||||
|
||||
.. math::
|
||||
Avg~Cost = \frac{0 + 8 \times $10}{8} = \frac{$80}{8} = $10
|
||||
|
||||
- Since the *incoming quantity* of tables is `8` and the *purchase price* for each is `$10`,
|
||||
- The inventory value in the numerator is evaluated to `$80`;
|
||||
- `$80` is divided by the total amount of tables to store, `8`;
|
||||
- `$10` is the average cost of a single table from the first shipment.
|
||||
|
||||
To verify this in Odoo, in the *Purchase* app, order `8` quantities of a new product, `Table`,
|
||||
with no previous stock moves, for `$10` each.
|
||||
|
||||
In the table's :guilabel:`Product Category` field in the :guilabel:`General Information` tab of
|
||||
the product form, click the :guilabel:`➡️ (arrow)` icon, to open an :guilabel:`External Link` to
|
||||
edit the product category. Set the :guilabel:`Costing Method` to `Average Cost (AVCO)` and
|
||||
:guilabel:`Inventory Valuation` to `Automated`.
|
||||
|
||||
Then, return to the purchase order. Click :guilabel:`Confirm Order`, and click :guilabel:`Receive
|
||||
Products` to confirm receipt.
|
||||
|
||||
Next, check the inventory valuation record generated by the product reception by navigating to
|
||||
:menuselection:`Inventory --> Reporting --> Inventory Valuation`. Select the drop-down for
|
||||
`Table`, and view the :guilabel:`Total Value` column for the *valuation layer* (:dfn:`inventory
|
||||
valuation at a specific point in time = on-hand quantity * unit price`). The 8 tables in-stock
|
||||
are worth $80.
|
||||
|
||||
.. image:: avg_price_valuation/inventory-val-8-tables.png
|
||||
:align: center
|
||||
:alt: Show inventory valuation of 8 tables in Odoo.
|
||||
|
||||
.. tip::
|
||||
When the product category's :guilabel:`Costing Method` is set to :guilabel:`AVCO`, then the
|
||||
average cost of a product is also displayed on the :guilabel:`Cost` field, under the
|
||||
:guilabel:`General Information` tab, on the product page itself.
|
||||
|
||||
Product delivery (use case)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
For outgoing shipments, :ref:`outbound products have no effect on the average cost valuation
|
||||
<inventory/avg_cost/definite_rule>`. Although the average cost valuation is not recalculated, the
|
||||
inventory value still decreases because the product is removed from stock and delivered to the
|
||||
customer location.
|
||||
|
||||
.. exercise::
|
||||
To demonstrate that the average cost valuation is not recalculated, examine the "Deliver 10
|
||||
tables" example.
|
||||
|
||||
.. math::
|
||||
Avg~Cost = \frac{12 \times $12 + (-10) \times $12}{12-10} = \frac{24}{2} = $12
|
||||
|
||||
#. Because 10 tables are being sent out to customers, the *incoming quantity* is `-10`. The
|
||||
previous average cost (`$12`) is used in lieu of a vendor's *purchase price*;
|
||||
#. The *incoming inventory value* is `-10 * $12 = -$120`;
|
||||
#. The old *inventory value* (`$144`) is added to the *incoming inventory value* (`-$120`), so
|
||||
`$144 + -$120 = $24`;
|
||||
#. Only `2` tables remain after shipping out `10` tables from `12`. So the current *inventory
|
||||
value* (`$24`) is divided by the on-hand quantity (`2`);
|
||||
#. `$24 / 2 = $12`, which is the same average cost as the previous operation.
|
||||
|
||||
To verify this in Odoo, sell `10` tables in the *Sales* app, validate the delivery, and then
|
||||
review the inventory valuation record by going to in :menuselection:`Inventory --> Reporting -->
|
||||
Inventory Valuation`. In the topmost valuation layer, delivering `10` tables reduces the
|
||||
product's value by `-$120`.
|
||||
|
||||
**Note**: What is not represented in this stock valuation record is the revenue made from this
|
||||
sale, so this decrease is not a loss to the company.
|
||||
|
||||
.. image:: avg_price_valuation/inventory-val-send-10-tables.png
|
||||
:align: center
|
||||
:alt: Show how deliveries decrease inventory valuation.
|
||||
|
||||
.. _inventory/avg_cost/return:
|
||||
|
||||
Return items to supplier (use case)
|
||||
===================================
|
||||
|
||||
Because the price paid to suppliers can differ from the price the product is valued at with the
|
||||
|AVCO| method, Odoo handles returned items in a specific way.
|
||||
|
||||
#. Products are returned to suppliers at the original purchase price, but;
|
||||
#. The internal cost valuation remains unchanged.
|
||||
|
||||
The above :ref:`example table <inventory/avg_cost/math_table>` is updated as follows:
|
||||
|
||||
+--------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Operation | Qty*Avg Cost | Inventory Value | Qty On Hand | Avg Cost |
|
||||
+================================+===============+===================+===============+============+
|
||||
| | | $24 | 2 | $12 |
|
||||
+--------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Return 1 table bought at $10 | -1 * $12 | $12 | 1 | $12 |
|
||||
+--------------------------------+---------------+-------------------+---------------+------------+
|
||||
|
||||
In other words, returns to vendors are perceived by Odoo as another form of a product exiting the
|
||||
warehouse. To Odoo, because the table is valued at $12 per unit, the inventory value is reduced by
|
||||
`$12` when the product is returned; the initial purchase price of `$10` is unrelated to the table's
|
||||
average cost.
|
||||
|
||||
.. example::
|
||||
To return a single table that was purchased for `$10`, navigate to the receipt in the *Inventory*
|
||||
app for the :ref:`8 tables purchased in Exercise 1 <inventory/avg_cost/ex-1>` by going to the
|
||||
:guilabel:`Inventory Overview`, clicking on :guilabel:`Receipts`, and selecting the desired
|
||||
receipt.
|
||||
|
||||
Then, click :guilabel:`Return` on the validated delivery order, and modify the quantity to `1` in
|
||||
the reverse transfer window. This creates an outgoing shipment for the table. Select
|
||||
:guilabel:`Validate` to confirm the outgoing shipment.
|
||||
|
||||
Return to :menuselection:`Inventory --> Reporting --> Inventory Valuation` to see how the
|
||||
outgoing shipment decreases the inventory value by $12.
|
||||
|
||||
.. image:: avg_price_valuation/inventory-valuation-return.png
|
||||
:align: center
|
||||
:alt: Inventory valuation for return.
|
||||
|
||||
.. _inventory/avg_price/leaving_inventory:
|
||||
|
||||
Eliminate stock valuation errors in outgoing products
|
||||
-----------------------------------------------------
|
||||
|
||||
Inconsistencies can occur in a company's inventory when the average cost valuation is recalculated
|
||||
on outgoing shipments.
|
||||
|
||||
To demonstrate this error, the table below displays a scenario in which 1 table is shipped to a
|
||||
customer and another is returned to a supplier at the purchased price.
|
||||
|
||||
+------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Operation | Qty*Price | Inventory Value | Qty On Hand | Avg Cost |
|
||||
+==========================================+===============+===================+===============+============+
|
||||
| | | $24 | 2 | $12 |
|
||||
+------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Ship 1 product to customer | -1 \* $12 | $12 | 1 | $12 |
|
||||
+------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Return 1 product initially bought at $10 | -1 \* $10 | **$2** | **0** | $12 |
|
||||
+------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
|
||||
In the final operation above, the final inventory valuation for the table is `$2` even though there
|
||||
are `0` tables left in stock.
|
||||
|
||||
.. admonition:: Correct method
|
||||
|
||||
Use the average cost to value the return. This does not mean the company gets $12 back for a $10
|
||||
purchase; the item returned for $10 is valued internally at $12. The inventory value change
|
||||
represents a product worth $12 no longer being accounted for in company assets.
|
||||
|
||||
Anglo-Saxon accounting
|
||||
======================
|
||||
|
||||
In addition to using |AVCO|, companies that use **Anglo-Saxon accounting** also keep a holding
|
||||
account that tracks the amount to be paid to vendors. Once a vendor delivers an order, **inventory
|
||||
value** increases based on the vendor price of the products that have entered the stock. The holding
|
||||
account (called **stock input**) is credited and only reconciled once the vendor bill is received.
|
||||
|
||||
.. seealso::
|
||||
- :ref:`Anglo-Saxon vs. Continental <inventory/inventory_valuation_config/accounting>`
|
||||
|
||||
The table below reflects journal entries and accounts. The *stock input* account stores the money
|
||||
intended to pay vendors when the vendor bill has not yet been received. To balance accounts when
|
||||
returning products that have a price difference between the price the product is **valued at** and
|
||||
the price it was bought for, a *price difference* account is created.
|
||||
|
||||
.. _inventory/avg_price/price-table:
|
||||
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Operation | Stock Input | Price Diff | Inventory Value | Qty On Hand | Avg Cost |
|
||||
+=========================================+===============+==============+===================+===============+============+
|
||||
| | | | $0 | 0 | $0 |
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive 8 tables at $10 | ($80) | | $80 | 8 | $10 |
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive vendor bill $80 | $0 | | $80 | 8 | $10 |
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive 4 tables at $16 | ($64) | | $144 | 12 | $12 |
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive vendor bill $64 | $0 | | $144 | 12 | $12 |
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Deliver 10 tables to customer | $0 | | $24 | 2 | $12 |
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Return 1 table initially bought at $10 | **$10** | **$2** | **$12** | 1 | $12 |
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive vendor refund $10 | $0 | $2 | $12 | 1 | $12 |
|
||||
+-----------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
|
||||
Product reception
|
||||
-----------------
|
||||
|
||||
Summary
|
||||
~~~~~~~
|
||||
|
||||
At product reception, Odoo ensures companies can pay for goods that were purchased by preemptively
|
||||
moving an amount matching the price of received goods into the :doc:`liability account
|
||||
</applications/finance/accounting/get_started/cheat_sheet>`, **Stock Input**. Then, once the bill
|
||||
has been received, the amount in the holding account is transferred to *Accounts Payable*. Transfers
|
||||
into this account means the bill has been paid. **Stock Input** is reconciled once the vendor bill
|
||||
is received.
|
||||
|
||||
Inventory valuation is a method of calculating how much each in-stock product is worth internally.
|
||||
Since there is a difference between the price the product is **valuated at** and the price the
|
||||
product was actually **purchased for**, the **Inventory Valuation** account is unrelated to the
|
||||
crediting and debiting operations of the **Stock Input** account.
|
||||
|
||||
To conceptualize all this, follow the breakdown below.
|
||||
|
||||
Accounts balanced at received products
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In this example, a company starts with zero units of a product, `table`, in stock. Then, 8 tables
|
||||
are received from the vendor:
|
||||
|
||||
#. The **Stock Input** account stores `$80` of credit owed to the vendor. The amount in this account
|
||||
is unrelated to the inventory value.
|
||||
#. `$80` worth of tables came **in** (**debit** the *Inventory Value* account `$80`), and
|
||||
#. `$80` must be paid **out** for received goods (**credit** the *Stock Input* account `$80`).
|
||||
|
||||
In Odoo
|
||||
*******
|
||||
|
||||
Odoo generates an accounting journal entry when shipments that use |AVCO| costing method are
|
||||
received. Configure a :guilabel:`Price Difference Account` by selecting the :guilabel:`➡️ (arrow)`
|
||||
icon next to the :guilabel:`Product Category` field on the product page.
|
||||
|
||||
Under :guilabel:`Account Properties`, create a new :guilabel:`Price Difference Account` by typing in
|
||||
the name of the account and clicking :guilabel:`Create and Edit`. Then set the account
|
||||
:guilabel:`Type` as `Expenses`, and click :guilabel:`Save`.
|
||||
|
||||
.. image:: avg_price_valuation/create-price-difference.png
|
||||
:align: center
|
||||
:alt: Create price difference account.
|
||||
|
||||
- When products leave the warehouse: the average cost **does not** change
|
||||
Then, receive the shipment in the *Purchase* app or *Inventory* app, and navigate to the
|
||||
:menuselection:`Accounting app --> Accounting --> Journal Entries`. In the list, find the
|
||||
:guilabel:`Reference` that matches the warehouse reception operation for the relevant product.
|
||||
|
||||
Defining the purchase price
|
||||
---------------------------
|
||||
.. image:: avg_price_valuation/search-for-entry-of-tables.png
|
||||
:align: center
|
||||
:alt: Show accounting entry of 8 tables from the list.
|
||||
|
||||
The purchase price is estimated at the reception of the products (you
|
||||
might not have received the vendor bill yet) and reevaluated at the
|
||||
reception of the vendor bill. The purchase price includes the cost you
|
||||
pay for the products, but it may also includes additional costs, like
|
||||
landed costs.
|
||||
Click on the line for 8 tables. This accounting journal entry shows that when the 8 tables were
|
||||
received, the `Stock Valuation` account increased by `$80`. Conversely, the **Stock Input** account
|
||||
(set as `Stock Interim (Received)` account by default) is credited `$80`.
|
||||
|
||||
Average cost example
|
||||
====================
|
||||
.. image:: avg_price_valuation/accounting-entry-8-tables.png
|
||||
:align: center
|
||||
:alt: Debit stock valuation and credit stock input 80 dollars.
|
||||
|
||||
+-----------------------------+---------------+-------------------+---------------+------------+
|
||||
| Operation | Delta Value | Inventory Value | Qty On Hand | Avg Cost |
|
||||
+=============================+===============+===================+===============+============+
|
||||
| | | $0 | 0 | $0 |
|
||||
+-----------------------------+---------------+-------------------+---------------+------------+
|
||||
| Receive 8 Products at $10 | +8\*$10 | $80 | 8 | $10 |
|
||||
+-----------------------------+---------------+-------------------+---------------+------------+
|
||||
| Receive 4 Products at $16 | +4\*$16 | $144 | 12 | $12 |
|
||||
+-----------------------------+---------------+-------------------+---------------+------------+
|
||||
| Deliver 10 Products | -10\*$12 | $24 | 2 | $12 |
|
||||
+-----------------------------+---------------+-------------------+---------------+------------+
|
||||
+-----------------------------+---------------+-------------------+---------------+------------+
|
||||
Accounts balanced at received vendor bill
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
At the beginning, the Avg Cost is set to 0 set as there is no product in
|
||||
the inventory. When the first reception is made, the average cost
|
||||
becomes logically the purchase price.
|
||||
In this example, a company starts with zero units of a product, table, in stock. Then, 8 tables are
|
||||
received from the vendor. When the bill is received from vendor for 8 tables:
|
||||
|
||||
At the second reception, the average cost is updated because the total
|
||||
inventory value is now ``$80 + 4*$16 = $144``. As we have 12 units on
|
||||
hand, the average price per unit is ``$144 / 12 = $12``.
|
||||
#. Use `$80` in the **Stock Input** account to pay the bill. This cancels out and the account now
|
||||
holds `$0`.
|
||||
#. Debit **Stock Input** `$80` (to reconcile this account).
|
||||
#. Credit **Accounts payable** `$80`. This account stores the amount the company owes others, so
|
||||
accountants use the amount to write checks to vendors.
|
||||
|
||||
By definition, the delivery of 10 products does not change the average
|
||||
cost. Indeed, the inventory value is now $24 as we have only 2 units
|
||||
remaining of each ``$24 / 2 = $12``.
|
||||
In Odoo
|
||||
*******
|
||||
|
||||
Purchase return use case
|
||||
========================
|
||||
Once the vendor requests payment, navigate to the :menuselection:`Purchase app --> Orders -->
|
||||
Purchase` and select the :abbr:`PO (Purchase Order)` for 8 tables. Inside the :abbr:`PO (Purchase
|
||||
Order)`, select :guilabel:`Create Bill`.
|
||||
|
||||
In case of a product returned to its supplier after reception, the
|
||||
inventory value is reduced using the average cost formulae (not at the
|
||||
initial price of these products!).
|
||||
Switch to the :guilabel:`Journal Items` tab to view how `$80` is transferred from the holding
|
||||
account, `Stock Interim (Received)` to `Accounts Payable`. :guilabel:`Confirm` the bill to record
|
||||
the payment to the vendor.
|
||||
|
||||
Which means that the above table will be updated as follow:
|
||||
.. image:: avg_price_valuation/receive-8-table-bill.png
|
||||
:align: center
|
||||
:alt: Show bill linked to the purchase order for 8 tables.
|
||||
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Operation | Delta Value | Inventory Value | Qty On Hand | Avg Cost |
|
||||
+===============================================+===============+===================+===============+============+
|
||||
| | | $24 | 2 | $12 |
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Return of 1 Product initially bought at $10 | -1\*$12 | $12 | 1 | $12 |
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
On product delivery
|
||||
-------------------
|
||||
|
||||
Explanation: counter example
|
||||
----------------------------
|
||||
In the :ref:`above example table <inventory/avg_price/price-table>`, when 10 products are delivered
|
||||
to a customer, the **Stock Input** account is untouched because there are no new products coming in.
|
||||
To put it simply:
|
||||
|
||||
Remember the definition of **Average Cost**, saying that we do not update
|
||||
the average cost of a product leaving the inventory. If you break this
|
||||
rule, you may lead to inconsistencies in your inventory.
|
||||
#. **Inventory valuation** is credited `$120`. Subtracting from inventory valuation represents
|
||||
`$120` worth of products exiting the company.
|
||||
#. Debit **Accounts Receivable** to record revenue from the sale.
|
||||
|
||||
As an example, here is the scenario when you deliver one piece to the
|
||||
customer and return the other one to your supplier (at the cost you
|
||||
purchased it). Here is the operation:
|
||||
.. image:: avg_price_valuation/sell-10-tables.png
|
||||
:align: center
|
||||
:alt: Show journal items linked to sale order.
|
||||
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Operation | Delta Value | Inventory Value | Qty On Hand | Avg Cost |
|
||||
+===============================================+===============+===================+===============+============+
|
||||
| | | $24 | 2 | $12 |
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Customer Shipping 1 product | -1\*$12 | $12 | 1 | $12 |
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Return of 1 Product initially bought at $10 | -1\*$10 | **$2** | **0** | $12 |
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
.. spoiler:: Understand Anglo-Saxon expensing
|
||||
|
||||
As you can see in this example, this is not correct: an inventory
|
||||
valuation of $2 for 0 pieces in the warehouse.
|
||||
In the accounting journal entry invoicing a customer for 10 tables, the accounts **Product
|
||||
Sales**, **Tax Received**, and **Accounts Receivable** all pertain to the sale of the product.
|
||||
**Accounts Receivable** is the account where the customer payment will be received.
|
||||
|
||||
The correct scenario should be to return the goods at the current
|
||||
average cost:
|
||||
Anglo-Saxon accounting recognizes the cost of goods sold (COGS) once the sale is made. So, up
|
||||
until the product is sold, scrapped, or returned, costs of keeping the product in stock are not
|
||||
accounted for. The **Expense** account is debited `$120` to log the costs of storing 10 tables
|
||||
during this period of time.
|
||||
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Operation | Delta Value | Inventory Value | Qty On Hand | Avg Cost |
|
||||
+===============================================+===============+===================+===============+============+
|
||||
| | | $24 | 2 | $12 |
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Customer Shipping 1 product | -1\*$12 | $12 | 1 | $12 |
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
| Return of 1 Product initially bought at $10 | -1\*$12 | **$0** | **0** | $12 |
|
||||
+-----------------------------------------------+---------------+-------------------+---------------+------------+
|
||||
On product return
|
||||
-----------------
|
||||
|
||||
On the other hand, using the average cost to value the return ensure a
|
||||
correct inventory value at all times.
|
||||
In the :ref:`above example table <inventory/avg_price/price-table>`, when returning 1 product to a
|
||||
vendor purchased at `$10`, a company expects `$10` in the **Accounts Payable** account from the
|
||||
vendor. However, **Stock Input** account must be debited `$12` because the average cost is `$12` at
|
||||
the time of the return. The missing `$2` is accounted for in the :guilabel:`Price Difference
|
||||
Account`, which is set up in the product's :guilabel:`Product Category`.
|
||||
|
||||
Further thoughts on anglo saxon mode
|
||||
------------------------------------
|
||||
.. note::
|
||||
Behavior of *price difference accounts* varies from localization. In this case, the account is
|
||||
intended to store differences between vendor price and *automated* inventory valuation methods.
|
||||
|
||||
For people in using the **anglo saxon accounting** principles, there is
|
||||
another concept to take into account: the stock input account of the
|
||||
product, which is intended to hold at any time the value of vendor bills
|
||||
to receive. So the stock input account will increase on reception of
|
||||
incoming shipments and will decrease when receiving the related vendor
|
||||
bills.
|
||||
Summary:
|
||||
|
||||
Back to our example, we see that when the return is valued at the
|
||||
average price, the amount booked in the stock input account is the
|
||||
original purchase price:
|
||||
#. Debit **Stock Input** account `$10` to move the table from stock to stock input. This move is to
|
||||
indicate that the table is to be processed for an outgoing shipment.
|
||||
#. Debit **Stock Input** an additional `$2` to account for the **Price Difference**.
|
||||
#. Credit **Stock Valuation** `$12` because the item is leaving the stock.
|
||||
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Operation | stock input | price diff | Inventory Value | Qty On Hand | Avg Cost |
|
||||
+===============================================+===============+==============+===================+===============+============+
|
||||
| | | | $0 | 0 | $0 |
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive 8 Products at $10 | ($80) | | $80 | 8 | $10 |
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive vendor bill $80 | $0 | | $80 | 8 | $10 |
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive 4 Products at $16 | ($64) | | $144 | 12 | $12 |
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive vendor bill $64 | $0 | | $144 | 12 | $12 |
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Deliver 10 Products | $0 | | $24 | 2 | $12 |
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Return of 1 Product initially bought at $10 | **$10** | **$2** | **$12** | 1 | $12 |
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
| Receive vendor refund $10 | $0 | $2 | $12 | 1 | $12 |
|
||||
+-----------------------------------------------+---------------+--------------+-------------------+---------------+------------+
|
||||
.. image:: avg_price_valuation/expensing-price-difference-account.png
|
||||
:align: center
|
||||
:alt: 2 dollar difference expensed in Price Difference account.
|
||||
|
||||
This is because the vendor refund will be made using the original
|
||||
purchase price, so to zero out the effect of the return in the stock
|
||||
input in last operation, we need to reuse the original price. The price
|
||||
difference account located on the product category is used to book the
|
||||
difference between the average cost and the original purchase price.
|
||||
Once the vendor's refund is received,
|
||||
|
||||
#. Credit **Stock Input** account `$10` to reconcile the price of the table.
|
||||
#. Debit **Accounts Payable** `$10` to have the accountants collect and register the payment in
|
||||
their journal.
|
||||
|
||||
.. image:: avg_price_valuation/return-credit-note.png
|
||||
:align: center
|
||||
:alt: Return to get 10 dollars back.
|
||||
|
||||
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 33 KiB |
@@ -3,48 +3,37 @@ 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
|
||||
:guilabel:`(⋮)`.
|
||||
|
||||
- Balance Sheet accounts:
|
||||
|
||||
- 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 +48,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 |
|
||||
@@ -104,29 +93,31 @@ right type among the following list:
|
||||
Assets, deferred expenses, and deferred revenues automation
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
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:`assets <assets-automation>` entries,
|
||||
:ref:`deferred expenses <deferred-expenses-automation>` entries, and
|
||||
:ref:`deferred revenues <deferred-revenues-automation>` entries. To **automate** entries, click
|
||||
:guilabel:`Setup` 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:`Setup` 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:`Setup`, click the :guilabel:`Tags` field and select an existing tag or :guilabel:`Create`
|
||||
a new one.
|
||||
|
||||
Account groups
|
||||
--------------
|
||||
@@ -134,31 +125,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:`Setup`.
|
||||
|
||||
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 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.
|
||||
|
||||
.. 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 +160,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 |
|
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 :menuselection:`Accounting --> Reporting -->
|
||||
Aged Receivable / Aged Payable`. You can see all transactions that have not been reconciled yet for
|
||||
that partner, and when you select a customer or vendor, the :guilabel:`Reconcile` option is
|
||||
displayed.
|
||||
|
||||
.. image:: payments/reconcile-option.png
|
||||
:alt: See the reconcile option
|
||||
:alt: See the 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,5 +150,4 @@ and the invoice or bill marked as :guilabel:`Paid`.
|
||||
payments/internal_transfers
|
||||
payments/pay_sepa
|
||||
payments/pay_checks
|
||||
payments/multiple
|
||||
payments/forecast
|
||||
|
||||
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 6.3 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 |
@@ -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: 6.7 KiB |
@@ -7,9 +7,8 @@ Reporting
|
||||
Main reports available
|
||||
======================
|
||||
|
||||
Besides the reports created specifically in each localisation module, a
|
||||
few very useful **generic** and **dynamic reports** are available for all
|
||||
countries :
|
||||
Odoo includes **generic** and **dynamic** reports available for all countries, regardless of the
|
||||
:doc:`localization package <../../finance/fiscal_localizations>` installed:
|
||||
|
||||
- **Balance Sheet**
|
||||
- **Profit and Loss**
|
||||
@@ -19,136 +18,136 @@ countries :
|
||||
- **Aged Receivable**
|
||||
- **Cash Flow Statement**
|
||||
- **Tax Report**
|
||||
- **Bank Reconciliation**
|
||||
|
||||
You can annotate every reports to print them and report to your adviser.
|
||||
Export to xls to manage extra analysis. Drill down in the reports to see
|
||||
more details (payments, invoices, journal items, etc.).
|
||||
Reports can be **annotated, printed, and drilled down** to see details (payments, invoices,
|
||||
journal items, etc.) by clicking the **down** arrow. Reports can also be exported to **PDF** or
|
||||
**XLSX** format by clicking :guilabel:`PDF` or :guilabel:`XLSX` at the top of the page.
|
||||
|
||||
You can also compare values with another period. Choose how many periods
|
||||
you want to compare the chosen time period with. You can choose up to 12
|
||||
periods back from the date of the report if you don't want to use the
|
||||
default **Previous 1 Period** option.
|
||||
.. image:: reporting/reporting-annotate.png
|
||||
:alt: Annotate reports.
|
||||
|
||||
You can compare values across periods by using the :guilabel:`Comparison` menu and selecting the
|
||||
periods you want to compare.
|
||||
|
||||
.. image:: reporting/reporting-comparison.png
|
||||
:alt: Comparison menu to compare time periods.
|
||||
|
||||
.. _reporting/balance-sheet:
|
||||
|
||||
Balance Sheet
|
||||
-------------
|
||||
|
||||
The **Balance Sheet** shows a snapshot of the assets, liabilities and equity
|
||||
of your organisation as at a particular date.
|
||||
The **Balance Sheet** shows a snapshot of your organization's assets, liabilities, and equity at a
|
||||
particular date.
|
||||
|
||||
.. image:: reporting/main_reports09.png
|
||||
.. image:: reporting/reporting-balance-sheet.png
|
||||
:alt: Balance sheet report of Odoo.
|
||||
|
||||
.. _reporting/profit-and-loss:
|
||||
|
||||
Profit and Loss
|
||||
---------------
|
||||
|
||||
The **Profit and Loss** report (or **Income Statement**) shows your
|
||||
organisation's net income, by deducting expenses from revenue for the
|
||||
report period.
|
||||
The **Profit and Loss** report (or **Income Statement**) shows your company's net income by
|
||||
deducting expenses from revenue for the reporting period.
|
||||
|
||||
.. image:: reporting/main_reports10.png
|
||||
.. image:: reporting/reporting-profit-and-loss.png
|
||||
:alt: Profit and Loss report of Odoo
|
||||
|
||||
.. _reporting/executive-summary:
|
||||
|
||||
Executive Summary
|
||||
-----------------
|
||||
|
||||
The **Executive Summary** allows for a quick look at all the important
|
||||
figures you need to run your company.
|
||||
The **Executive Summary** allows a quick look at all the important figures to run your company.
|
||||
|
||||
In very basic terms, this is what each of the items in this section is
|
||||
reporting :
|
||||
In basic terms, this is what each item in the following section reports:
|
||||
|
||||
- **Performance:**
|
||||
- **Gross profit margin:**
|
||||
The contribution each individual sale made
|
||||
by your business less any direct costs needed to make those sales
|
||||
(things like labour, materials, etc).
|
||||
The contribution of all sales made by your business **minus** any direct costs needed to
|
||||
make those sales (labor, materials, etc.).
|
||||
- **Net profit margin:**
|
||||
The contribution each individual sale made by
|
||||
your business less any direct costs needed to make those sales,
|
||||
as well as any fixed overheads your company has (things like
|
||||
rent, electricity, taxes you need to pay as a result of those
|
||||
sales).
|
||||
- **Return on investment (p.a.):**
|
||||
The ratio of net profit made, to the
|
||||
amount of assets the company used to make those profits.
|
||||
The contribution of all sales made by your business **minus** any direct costs needed to
|
||||
make those sales *and* fixed overheads your company has (electricity, rent, taxes
|
||||
to be paid as a result of those sales, etc.).
|
||||
- **Return on investment (per annum):**
|
||||
The ratio of net profit made to the amount of assets the company used to make those profits.
|
||||
- **Position:**
|
||||
- **Average debtor days:**
|
||||
The average number of days it takes your
|
||||
customers to pay you (fully), across all your customer invoices.
|
||||
- **Average creditor days:**
|
||||
The average number of days it takes you to
|
||||
pay your suppliers (fully) across all your bills.
|
||||
- **Short term cash forecast:**
|
||||
How much cash is expected in or out of
|
||||
your organisation in the next month i.e. balance of your **Sales
|
||||
account** for the month less the balance of your **Purchases account**
|
||||
for the month.
|
||||
- **Average debtors days:**
|
||||
The average number of days it takes your customers to (fully) pay you across all your
|
||||
customer invoices.
|
||||
- **Average creditors days:**
|
||||
The average number of days it takes you to (fully) pay your suppliers across all your bills.
|
||||
- **Short-term cash forecast:**
|
||||
How much cash is expected in or out of your business in the next month, i.e., the balance of
|
||||
your **Sales account** for the month **minus** the balance of your **Purchases account** for
|
||||
the month.
|
||||
- **Current assets to liabilities:**
|
||||
Also referred to as **current ratio**, this is the ratio
|
||||
of current assets (assets that could be
|
||||
turned into cash within a year) to the current liabilities
|
||||
(liabilities which will be due in the next year). This is
|
||||
typically used as as a measure of a company's ability to service
|
||||
its debt.
|
||||
Also referred to as **current ratio**, this is the ratio of current assets (:dfn:`assets
|
||||
that could be turned into cash within a year`) to the current liabilities (:dfn:`liabilities
|
||||
that will be due in the next year`). It is typically used to measure a company's ability to
|
||||
service its debt.
|
||||
|
||||
.. image:: reporting/main_reports01.png
|
||||
.. image:: reporting/reporting-executive-summary.png
|
||||
:alt: Executive summary report in Odoo.
|
||||
|
||||
.. _reporting/general-ledger:
|
||||
|
||||
General Ledger
|
||||
--------------
|
||||
|
||||
The **General Ledger Report** shows all transactions from all accounts for a
|
||||
chosen date range. The initial summary report shows the totals for each
|
||||
account and from there you can view a detailed transaction report or any
|
||||
exceptions. This report is useful for checking every transaction that
|
||||
occurred during a certain period of time.
|
||||
The **General Ledger Report** shows all transactions from all accounts for a chosen date range. The
|
||||
initial summary report shows each account's totals; from here, you can view a detailed transaction
|
||||
report or any exceptions. This report helps check every transaction that occurred during a specific
|
||||
period.
|
||||
|
||||
.. image:: reporting/main_reports05.png
|
||||
.. image:: reporting/reporting-general-ledger.png
|
||||
:alt: General Ledger report in Odoo.
|
||||
|
||||
.. _reporting/aged-payable:
|
||||
|
||||
Aged Payable
|
||||
------------
|
||||
|
||||
Run the **Aged Payable Details** report to display information on individual
|
||||
bills, credit notes and overpayments owed by you, and how long these
|
||||
have gone unpaid.
|
||||
Run the **Aged Payable Details** report to display information on individual bills, credit notes,
|
||||
and overpayments you owe and how long these have gone unpaid.
|
||||
|
||||
.. image:: reporting/main_reports02.png
|
||||
.. image:: reporting/reporting-aged-payable.png
|
||||
:alt: Aged Payable report in Odoo.
|
||||
|
||||
.. _reporting/aged-receivable:
|
||||
|
||||
Aged Receivable
|
||||
---------------
|
||||
|
||||
The **Aged Receivables** report shows the sales invoices that were awaiting
|
||||
payment during a selected month and several months prior.
|
||||
The **Aged Receivables** report shows the sales invoices awaiting payment during a selected month
|
||||
and several months prior.
|
||||
|
||||
.. image:: reporting/main_reports07.png
|
||||
.. image:: reporting/reporting-aged-receivable.png
|
||||
:alt: Aged Receivable report in Odoo.
|
||||
|
||||
.. _reporting/cash-flow-statement:
|
||||
|
||||
Cash Flow Statement
|
||||
-------------------
|
||||
|
||||
The **Cash Flow Statement** shows how changes in balance sheet accounts and
|
||||
income affect cash and cash equivalents, and breaks the analysis down to
|
||||
operating, investing and financing activities.
|
||||
The **Cash Flow Statement** shows how changes in balance sheet accounts and income affect cash and
|
||||
cash equivalents and breaks the analysis down to operating, investing, and financing activities.
|
||||
|
||||
.. image:: reporting/main_reports03.png
|
||||
.. image:: reporting/reporting-cash-flow-statement.png
|
||||
:alt: Cash Flow Statement report in Odoo.
|
||||
|
||||
.. _reporting/tax-report:
|
||||
|
||||
Tax Report
|
||||
----------
|
||||
|
||||
This report allows you to see the **net** and **tax amounts** for all the taxes
|
||||
grouped by type (sale/purchase).
|
||||
This report allows you to see the **net** and **tax amounts** for all the taxes grouped by type
|
||||
(sale/purchase).
|
||||
|
||||
.. image:: reporting/main_reports04.png
|
||||
|
||||
Bank Reconciliation
|
||||
-------------------
|
||||
|
||||
.. image:: reporting/main_reports06.png
|
||||
.. image:: reporting/reporting-tax-report.png
|
||||
:alt: Tax report in Odoo.
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
@@ -220,6 +220,42 @@ To match the letter `C` or `D` in a prefix and not use it as a suffix, use an em
|
||||
| `21D\\()`
|
||||
| This formula matches accounts whose code starts with `21D`, regardless of their balance sign.
|
||||
|
||||
In addition to using code prefixes to include accounts, you can also match them with **account
|
||||
tags**. This is especially useful, for example, if your country lacks a standardized chart of
|
||||
accounts, where the same prefix might be used for different purposes across companies.
|
||||
|
||||
.. example::
|
||||
| `tag(25)`
|
||||
| This formula matches accounts whose associated tags contain the one with id *25*.
|
||||
|
||||
If the tag you reference is defined in a data file, an xmlid can be used instead of the id.
|
||||
|
||||
.. example::
|
||||
| `tag(my_module.my_tag)`
|
||||
| This formula matches accounts whose associated tags include the tag denoted by
|
||||
*my_module.my_tag*.
|
||||
|
||||
You can also use arithmetic expressions with tags, possibly combining them with prefix selections.
|
||||
|
||||
.. example::
|
||||
| `tag(my_module.my_tag) + tag(42) + 10`
|
||||
| The balances of accounts tagged as *my_module.my_tag* will be summed with those of accounts
|
||||
linked to the tag with ID *42* and accounts with the code prefix `10`
|
||||
|
||||
`C` and `D` suffixes can be used in the same way with tags.
|
||||
|
||||
.. example::
|
||||
| `tag(my_module.my_tag)C`
|
||||
| This formula matches accounts with the tag *my_module.my_tag* and a credit balance.
|
||||
|
||||
Prefix exclusion also works with tags.
|
||||
|
||||
.. example::
|
||||
| `tag(my_module.my_tag)\\(10)`
|
||||
| This formula matches accounts with the tag *my_module.my_tag* and a code not starting with
|
||||
`10`.
|
||||
|
||||
|
||||
'External Value' engine
|
||||
-----------------------
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 19 KiB |
@@ -40,9 +40,8 @@ drop-down menu (most products will be set to :guilabel:`Units`).
|
||||
The *Sales* app is where specification on the units of measure are created and edited (e.g.
|
||||
units, miles, nights, etc.). Go to :menuselection:`Sales app --> Configuration --> Settings` and
|
||||
ensure `Units of Measure` is enabled in the `Product Catalog` section. Click on the
|
||||
:guilabel:`Units of Measure` internal link to view, create, and edit the units of measure. Refer
|
||||
to :doc:`this document </applications/inventory_and_mrp/inventory/management/products/uom>` to
|
||||
learn more about units of measure and how to configure them.
|
||||
:guilabel:`Units of Measure` internal link to :doc:`view, create, and edit the units of measure
|
||||
<../inventory_and_mrp/inventory/product_management/product_replenishment/uom>`.
|
||||
|
||||
.. image:: expenses/new-expense-product.png
|
||||
:align: center
|
||||
|
||||
@@ -37,7 +37,7 @@ localization.
|
||||
* - :guilabel:`Chile - Accounting Reports`
|
||||
- `l10n_cl_reports`
|
||||
- Adds the *Propuesta F29* and *Balance Tributario (8 columnas)* reports.
|
||||
* - :guilabel:`Chile - E-invoiving`
|
||||
* - :guilabel:`Chile - E-invoicing`
|
||||
- `l10n_cl_edi`
|
||||
- Includes all technical and functional requirements to generate and receive electronic
|
||||
invoices online based on the :abbr:`SII (Servicio de Impuestos Internos)` regulations.
|
||||
@@ -45,7 +45,7 @@ localization.
|
||||
- `l10n_cl_boletas`
|
||||
- Includes all technical and functional requirements to generate and receive electronic
|
||||
invoices digitally based on the :abbr:`SII (Servicio de Impuestos Internos)` regulations.
|
||||
* - :guilabel:`Electronic Esports of Goods for Chile`
|
||||
* - :guilabel:`Electronic Exports of Goods for Chile`
|
||||
- `l10n_cl_edi_exports`
|
||||
- Includes technical and functional requirements to generate electronic invoices for exporting
|
||||
goods based on the :abbr:`SII (Servicio de Impuestos Internos)` and customs regulations.
|
||||
@@ -53,10 +53,6 @@ localization.
|
||||
- `l10n_cl_edi_stock`
|
||||
- Includes all technical and functional requirements to generate delivery guides via web
|
||||
service based on the :abbr:`SII (Servicio de Impuestos Internos)` regulations.
|
||||
* - :guilabel:`Chile - E-Invoicing Delivery Guide`
|
||||
- `l10n_cl_edi_stock`
|
||||
- Includes all technical and functional requirements to generate delivery guides online based
|
||||
on the :abbr:`SII (Servicio de Impuestos Internos)` regulations.
|
||||
|
||||
.. note::
|
||||
- Odoo automatically installs the appropriate package for the company according to the country
|
||||
|
||||
@@ -4,15 +4,16 @@ Colombia
|
||||
|
||||
.. |DIAN| replace:: :abbr:`DIAN (Dirección de Impuestos y Aduanas Nacionales)`
|
||||
|
||||
Odoo's Colombian localization package provides accounting, fiscal and legal features in Colombia
|
||||
such as chart of accounts, taxes and electronic invoicing.
|
||||
Odoo's Colombian localization package provides accounting, fiscal, and legal features for databases
|
||||
in Colombia – such as chart of accounts, taxes, and electronic invoicing.
|
||||
|
||||
In addition, we have a series of videos covering how to start from scratch, configuration, main
|
||||
workflows, and specific use cases.
|
||||
In addition, a series of videos on the subject is also available. These videos cover how to start
|
||||
from scratch, set up configurations, complete common workflows, and provide in-depth looks at some
|
||||
specific use cases as well.
|
||||
|
||||
.. seealso::
|
||||
`Odoo Colombian localization videos
|
||||
<https://www.youtube.com/playlist?list=PL1-aSABtP6ABxZshems3snMjx7bj_7ZsZ>`_.
|
||||
`Smart Tutorial - Colombian Localization
|
||||
<https://www.odoo.com/slides/smart-tutorial-localizacion-de-colombia-132>`_.
|
||||
|
||||
.. _colombia/configuration:
|
||||
|
||||
@@ -36,74 +37,78 @@ localization:
|
||||
- `l10n_co`
|
||||
- Default :ref:`fiscal localization package <fiscal_localizations/packages>`. This module adds
|
||||
the base accounting features for the Colombian localization: chart of accounts, taxes,
|
||||
withholdings, identification document type.
|
||||
withholdings, and identification document type.
|
||||
* - :guilabel:`Colombian - Accounting Reports`
|
||||
- `l10n_co_reports`
|
||||
- Includes accounting reports for sending certifications to suppliers for withholdings applied.
|
||||
* - :guilabel:`Electronic invoicing for Colombia with Carvajal`
|
||||
- `l10n_co_edi`
|
||||
- This module includes the features that are required for the integration with Carvajal and
|
||||
generates the electronic invoices and support document related to the vendor bills based on
|
||||
- This module includes the features required for integration with Carvajal, and
|
||||
generates the electronic invoices and support documents related to the vendor bills, based on
|
||||
|DIAN| regulations.
|
||||
* - :guilabel:`Colombian - Point of Sale`
|
||||
- `l10n_co_pos`
|
||||
- Includes Point of Sale Receipt for Colombian Localization.
|
||||
- Includes Point of Sale receipts for Colombian localization.
|
||||
|
||||
.. note::
|
||||
When a database is created from scratch selecting :guilabel:`Colombia` as the country, Odoo
|
||||
automatically installs the base modules *Colombia - Accounting* and *Colombia - Accounting
|
||||
Reports*.
|
||||
When `Colombia` is selected for a company's :guilabel:`Fiscal Localization`, Odoo automatically
|
||||
installs certain modules.
|
||||
|
||||
Company configuration
|
||||
---------------------
|
||||
|
||||
To configure your company information, go to the :menuselection:`Contacts` app and search for your
|
||||
company. Alternatively, activate :ref:`developer mode <developer-mode>` and navigate to
|
||||
To configure your company information, go to the :menuselection:`Contacts` app, and search for your
|
||||
company.
|
||||
|
||||
Alternatively, activate :ref:`developer mode <developer-mode>` and navigate to
|
||||
:menuselection:`General Setting --> Company --> Update Info --> Contact`. Then, edit the contact
|
||||
form to configure the following information:
|
||||
form and configure the following information:
|
||||
|
||||
- :guilabel:`Company Name`.
|
||||
- :guilabel:`Address`: Including :guilabel:`City`, :guilabel:`Department` and :guilabel:`Zip Code`.
|
||||
- :guilabel:`Tax ID`: When it is a `NIT`, it must have the *verification digit* at the end of the ID
|
||||
followed by a hyphen (`-`).
|
||||
- :guilabel:`Address`: Including :guilabel:`City`, :guilabel:`Department` and :guilabel:`ZIP` code.
|
||||
- :guilabel:`Identification Number`: Select the :guilabel:`Identification Type` (`NIT`, `Cédula de
|
||||
Ciudadanía`, `Registro Civil`, etc.). When the :guilabel:`Identification Type` is `NIT`, the
|
||||
:guilabel:`Identification Number` **must** have the *verification digit* at the end of the ID
|
||||
prefixed by a hyphen (`-`).
|
||||
|
||||
Next, configure the :guilabel:`Fiscal Information` in the :guilabel:`Sales & Purchase` tab:
|
||||
|
||||
- :guilabel:`Obligaciones y Responsabilidades`: Select the fiscal responsibility for the company
|
||||
(:guilabel:`O-13` Gran Contribuyente, :guilabel:`O-15` Autorretenedor, :guilabel:`O-23` Agente de
|
||||
retención IVA, :guilabel:`O-47` Regimen de tributación simple, :guilabel:`R-99-PN` No Aplica).
|
||||
(`O-13` Gran Contribuyente, `O-15` Autorretenedor, `O-23` Agente de retención IVA, `O-47` Regimen
|
||||
de tributación simple, `R-99-PN` No Aplica).
|
||||
- :guilabel:`Gran Contribuyente`: If the company is *Gran Contribuyente* this option should be
|
||||
selected.
|
||||
- :guilabel:`Fiscal Regimen`: Select the Tribute Name for the company (:guilabel:`IVA`,
|
||||
:guilabel:`INC`, :guilabel:`IVA e INC`, :guilabel:`No Aplica`)
|
||||
- :guilabel:`Fiscal Regimen`: Select the Tribute Name for the company (`IVA`, `INC`, `IVA e INC`,
|
||||
or `No Aplica`)
|
||||
- :guilabel:`Commercial Name`: If the company uses a specific commercial name, and it needs to be
|
||||
displayed in the invoice.
|
||||
|
||||
Carjaval credentials configuration
|
||||
----------------------------------
|
||||
|
||||
Once the modules installed, the user credentials must be configured in order to connect with
|
||||
Carvajal Web Service. Navigate to :menuselection:`Accounting --> Configuration --> Settings` and
|
||||
scroll to the :guilabel:`Colombian Electronic Invoicing` section. Then, fill in the required
|
||||
configuration information provided by Carvajal:
|
||||
Once the modules are installed, the user credentials **must** be configured, in order to connect
|
||||
with Carvajal Web Service. To do so, navigate to :menuselection:`Accounting --> Configuration -->
|
||||
Settings` and scroll to the :guilabel:`Colombian Electronic Invoicing` section. Then, fill in the
|
||||
required configuration information provided by Carvajal:
|
||||
|
||||
- :guilabel:`Username` and :guilabel:`Password`: Correspond to the username and password provided
|
||||
by Carvajal to the company.
|
||||
- :guilabel:`Username` and :guilabel:`Password`: Username and password (provided by Carvajal) to the
|
||||
company.
|
||||
- :guilabel:`Company Registry`: Company's NIT number *without* the verification code.
|
||||
- :guilabel:`Account ID`: Company ID followed by `_01`.
|
||||
- :guilabel:`Colombia Template Code`: Select one of the two available templates (:guilabel:`CGEN03`
|
||||
or :guilabel:`CGNE04`) to be used in the PDF format of the electronic invoice.
|
||||
- :guilabel:`Account ID`: Company's NIT number followed by `_01`.
|
||||
- :guilabel:`Colombia Template Code`: Select one of the two available templates (`CGEN03` or
|
||||
`CGNE04`) to be used in the PDF format of the electronic invoice.
|
||||
|
||||
Enable the :guilabel:`Test mode` checkbox to connect with the Carvajal testing environment.
|
||||
|
||||
Once Odoo and Carvajal are fully configured and ready for production, deactivate the :guilabel:`Test
|
||||
mode` checkbox to use the production database.
|
||||
|
||||
.. image:: colombia/carvajal-configuration.png
|
||||
:align: center
|
||||
:alt: Configure credentials for Carvajal web service in Odoo.
|
||||
|
||||
.. note::
|
||||
Check the :guilabel:`Test mode` checkbox to connect with the Carvajal testing environment. Once
|
||||
Odoo and Carvajal are fully configured and ready for production, uncheck the :guilabel:`Test
|
||||
mode` checkbox to use the production database.
|
||||
|
||||
.. important::
|
||||
:guilabel:`Test mode` must be used **only** on replicated databases, **not** the production
|
||||
:guilabel:`Test mode` must **only** be used on duplicated databases, **not** the production
|
||||
environment.
|
||||
|
||||
Report data configuration
|
||||
@@ -112,8 +117,17 @@ Report data configuration
|
||||
Report data can be defined for the fiscal section and bank information of the PDF as part of the
|
||||
configurable information sent in the XML.
|
||||
|
||||
Navigate to :menuselection:`Accounting --> Configuration --> Settings` and scroll to the
|
||||
:guilabel:`Colombian Electronic Invoicing` section.
|
||||
Navigate to :menuselection:`Accounting --> Configuration --> Settings`, and scroll to the
|
||||
:guilabel:`Colombian Electronic Invoicing` section, in order to find the :guilabel:`Report
|
||||
Configuration` fields. Here the header information for each report type can be configured.
|
||||
|
||||
- :guilabel:`Gran Contribuyente`
|
||||
- :guilabel:`Tipo de Régimen`
|
||||
- :guilabel:`Retenedores de IVA`
|
||||
- :guilabel:`Autorretenedores`
|
||||
- :guilabel:`Resolución Aplicable`
|
||||
- :guilabel:`Actividad Económica`
|
||||
- :guilabel:`Bank Information`
|
||||
|
||||
.. _colombia/master-data:
|
||||
|
||||
@@ -123,67 +137,85 @@ Master data configuration
|
||||
Partner
|
||||
~~~~~~~
|
||||
|
||||
Partner contacts can be created in the *Contacts* app. To do so, navigate to
|
||||
:menuselection:`Contacts`, and click the :guilabel:`Create` button.
|
||||
|
||||
Then, name the contact, and using the radio buttons, select the contact type, either
|
||||
:guilabel:`Individual` or :guilabel:`Company`.
|
||||
|
||||
Complete the full :guilabel:`Address`, including the :guilabel:`City`, :guilabel:`State`, and
|
||||
:guilabel:`ZIP` code. Then, complete the identification and fiscal information.
|
||||
|
||||
Identification information
|
||||
**************************
|
||||
|
||||
Document types defined by the |DIAN| are available on the partner form as part of the Colombian
|
||||
localization. Colombian partners must have their :guilabel:`Identification Number` (VAT) and
|
||||
:guilabel:`Document Type` set.
|
||||
Identification types, defined by the |DIAN|, are available on the partner form, as part of the
|
||||
Colombian localization. Colombian partners **must** have their :guilabel:`Identification Number`
|
||||
(VAT) and :guilabel:`Document Type` set.
|
||||
|
||||
.. tip::
|
||||
When the :guilabel:`Document Type` is `NIT`, the :guilabel:`Identification Number` needs to be
|
||||
configured in Odoo, including the *verification digit*; Odoo splits this number when the data to
|
||||
is sent to the third party.
|
||||
configured in Odoo, including the *verification digit at the end of the ID, prefixed by a hyphen
|
||||
(`-`)*.
|
||||
|
||||
Fiscal information
|
||||
******************
|
||||
|
||||
The partner's responsibility codes (section 53 in the RUT document) are included as part of the
|
||||
electronic invoicing module, as it is required by the |DIAN|.
|
||||
The partner's responsibility codes (section 53 in the :abbr:`RUT (Registro único tributario)`
|
||||
document) are included as part of the electronic invoicing module, as it is required by the |DIAN|.
|
||||
|
||||
The required fields can be found under :menuselection:`Partner --> Sales & Purchase Tab --> Fiscal
|
||||
Information`:
|
||||
Information section`:
|
||||
|
||||
- :guilabel:`Obligaciones y Responsabilidades`: Select the fiscal responsibility for the company
|
||||
(:guilabel:`O-13` Gran Contribuyente, :guilabel:`O-15` Autorretenedor, :guilabel:`O-23` Agente de
|
||||
retención IVA, :guilabel:`O-47` Regimen de tributación simple, :guilabel:`R-99-PN` No Aplica).
|
||||
(`O-13` Gran Contribuyente, `O-15` Autorretenedor, `O-23` Agente de retención IVA, `O-47` Regimen
|
||||
de tributación simple, or `R-99-PN` No Aplica).
|
||||
- :guilabel:`Gran Contribuyente`: If the company is *Gran Contribuyente* this option should be
|
||||
selected.
|
||||
- :guilabel:`Fiscal Regimen`: Select the Tribute Name for the company (:guilabel:`IVA`,
|
||||
:guilabel:`INC`, :guilabel:`IVA e INC`, :guilabel:`No Aplica`)
|
||||
- :guilabel:`Fiscal Regimen`: Select the tribute name for the company (`IVA`, `INC`, `IVA e INC`, or
|
||||
`No Aplica`)
|
||||
- :guilabel:`Commercial Name`: If the company uses a specific commercial name, and it needs to be
|
||||
displayed in the invoice.
|
||||
|
||||
Products
|
||||
~~~~~~~~
|
||||
|
||||
In addition to adding general information (in the :guilabel:`General Information` tab) on the
|
||||
product form, either the :guilabel:`UNSPSC Category`, :guilabel:`Barcode`, or :guilabel:`Internal
|
||||
Reference` field must also be configured.
|
||||
To manage products, navigate to :menuselection:`Accounting --> Customers --> Products`, then click
|
||||
on a product.
|
||||
|
||||
When adding general information on the product form, it is required that either the
|
||||
:guilabel:`UNSPSC Category` (:guilabel:`Accounting` tab), or :guilabel:`Internal Reference`
|
||||
(:guilabel:`General Information` tab) field is configured. Be sure to :guilabel:`Save` the product
|
||||
once configured.
|
||||
|
||||
Taxes
|
||||
~~~~~
|
||||
|
||||
If sales transactions include products with taxes, the :guilabel:`Value Type` field in the
|
||||
:guilabel:`Advanced Options` tab needs to be configured per tax. To do so, go to
|
||||
:menuselection:`Accounting --> Configuration --> Taxes`, and select the related tax.
|
||||
To create or modify taxes, go to :menuselection:`Accounting --> Configuration --> Taxes`, and select
|
||||
the related tax.
|
||||
|
||||
Retention tax types (:guilabel:`ICA`, :guilabel:`IVA`, :guilabel:`Fuente`) are also included. This
|
||||
configuration is used to display taxes in the invoice PDF correctly.
|
||||
If sales transactions include products with taxes, the :guilabel:`Value Type` field in the
|
||||
:guilabel:`Advanced Options` tab needs to be configured per tax. Retention tax types
|
||||
(:guilabel:`ICA`, :guilabel:`IVA`, :guilabel:`Fuente`) are also included. This configuration is used
|
||||
to display taxes correctly in the invoice PDF.
|
||||
|
||||
.. image:: colombia/retention-tax-types.png
|
||||
:align: center
|
||||
:alt: The ICA, IVA and Fuente fields in the Advanced Options tab in Odoo.
|
||||
|
||||
.. _co-journals:
|
||||
|
||||
Sales journals
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
.. _co-journals:
|
||||
|
||||
Once the |DIAN| has assigned the official sequence and prefix for the electronic invoice resolution,
|
||||
the sales journals related to the invoice documents must be updated in Odoo. To do so, navigate to
|
||||
:menuselection:`Accounting --> Configuration --> Journals`.
|
||||
the sales journals related to the invoice documents **must** be updated in Odoo. To do so, navigate
|
||||
to :menuselection:`Accounting --> Configuration --> Journals`, and select an existing sales journal,
|
||||
or create a new one with the :guilabel:`Create` button.
|
||||
|
||||
Configure the following data in the :guilabel:`Advanced Settings` tab:
|
||||
On the sales journal form, input the :guilabel:`Journal Name`, :guilabel:`Type`, and set a unique
|
||||
:guilabel:`Short Code` in the :guilabel:`Journals Entries` tab. Then, configure the following data
|
||||
in the :guilabel:`Advanced Settings` tab:
|
||||
|
||||
- :guilabel:`Electronic invoicing`: Enable :guilabel:`UBL 2.1 (Colombia)`.
|
||||
- :guilabel:`Invoicing Resolution`: Resolution number issued by |DIAN| to the company.
|
||||
@@ -193,32 +225,31 @@ Configure the following data in the :guilabel:`Advanced Settings` tab:
|
||||
- :guilabel:`Range of Numbering (maximum)`: Last authorized invoice number.
|
||||
|
||||
.. note::
|
||||
The sequence and resolution of the journal must match the one configured in Carvajal and the
|
||||
The sequence and resolution of the journal **must** match the one configured in Carvajal and the
|
||||
|DIAN|.
|
||||
|
||||
Invoice sequence
|
||||
****************
|
||||
|
||||
The invoice sequence and prefix must be correctly configured when the first document is created.
|
||||
The invoice sequence and prefix **must** be correctly configured when the first document is created.
|
||||
|
||||
.. note::
|
||||
Odoo automatically assigns a prefix and sequence to the following documents.
|
||||
Odoo automatically assigns a prefix and sequence to the following invoices.
|
||||
|
||||
Purchase journals
|
||||
*****************
|
||||
|
||||
Once the |DIAN| has assigned the official sequence and prefix for the support document related to
|
||||
Once the |DIAN| has assigned the official sequence and prefix for the *support document* related to
|
||||
vendor bills, the purchase journals related to their supporting documents need to be updated in
|
||||
Odoo. The process is similar to the configuration of the :ref:`sales journals <co-journals>`.
|
||||
|
||||
Chart of accounts
|
||||
*****************
|
||||
|
||||
The :doc:`chart of accounts
|
||||
</applications/finance/accounting/get_started/chart_of_accounts>` is installed by default as part of
|
||||
the localization module, the accounts are mapped automatically in taxes, default account payable,
|
||||
and default account receivable. The chart of accounts for Colombia is based on the PUC (Plan Unico
|
||||
de Cuentas).
|
||||
The :doc:`chart of accounts </applications/finance/accounting/get_started/chart_of_accounts>` is
|
||||
installed by default as part of the localization module, the accounts are mapped automatically in
|
||||
taxes, default account payable, and default account receivable. The chart of accounts for Colombia
|
||||
is based on the PUC (Plan Unico de Cuentas).
|
||||
|
||||
.. _colombia/workflows:
|
||||
|
||||
@@ -228,18 +259,38 @@ Main workflows
|
||||
Electronic invoices
|
||||
-------------------
|
||||
|
||||
The following is a breakdown of the main workflow for electronic invoices with the Colombian
|
||||
localization:
|
||||
|
||||
#. Sender creates an invoice.
|
||||
#. Electronic invoice provider generates the legal XML file.
|
||||
#. Electronic invoice provider creates the CUFE (Invoice Electronic Code) with the electronic
|
||||
signature.
|
||||
#. Electronic invoice provider sends a notification to |DIAN|.
|
||||
#. |DIAN| validates the invoice.
|
||||
#. |DIAN| accepts or rejects the invoice.
|
||||
#. Electronic invoice provider generates the PDF invoice with a QR code.
|
||||
#. Electronic invoice provider sends invoice to the acquirer.
|
||||
#. Acquirer sends a receipt of acknowledgement, and accepts or rejects the invoice.
|
||||
#. Sender downloads a :file:`.zip` file with the PDF and XML.
|
||||
|
||||
.. image:: colombia/workflow-electronic-invoice.png
|
||||
:align: center
|
||||
:alt: Electronic invoice workflow for Colombian localization.
|
||||
|
||||
.. _colombia/invoice-creation:
|
||||
|
||||
Invoice creation
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
.. note::
|
||||
The functional workflow taking place before an invoice validation does not alter the main changes
|
||||
introduced with the electronic invoice.
|
||||
The functional workflow taking place before an invoice validation does **not** alter the main
|
||||
changes introduced with the electronic invoice.
|
||||
|
||||
Electronic invoices are generated and sent to both the |DIAN| and customer through Carvajal's web
|
||||
service integration. These documents can be created from your sales order or manually. Go to
|
||||
:menuselection:`Accounting --> Customers --> Invoices` and configure:
|
||||
service integration. These documents can be created from your sales order or manually generated. To
|
||||
create a new invoice, go to :menuselection:`Accounting --> Customers --> Invoices`, and select
|
||||
:guilabel:`Create`. On the invoice form configure the following fields:
|
||||
|
||||
- :guilabel:`Customer`: Customer's information.
|
||||
- :guilabel:`Journal`: Journal used for electronic invoices.
|
||||
@@ -259,9 +310,10 @@ invoice is then processed asynchronously by the E-invoicing service UBL 2.1 (Col
|
||||
also displayed in the chatter.
|
||||
|
||||
.. image:: colombia/invoice-sent.png
|
||||
:align: center
|
||||
:alt: Carvajal XML invoice file in Odoo chatter.
|
||||
|
||||
The :guilabel:`Electronic Invoice Name` field is now displayed in the :guilabel:`EDI Documents` tab
|
||||
The :guilabel:`Electronic Invoice Name` field is now displayed in the :guilabel:`EDI Documents` tab,
|
||||
with the name of the XML file. Additionally, the :guilabel:`Electronic Invoice Status` field is
|
||||
displayed with the initial value :guilabel:`To Send`. To process the invoice manually, click on the
|
||||
:guilabel:`Process Now` button.
|
||||
@@ -271,7 +323,7 @@ displayed with the initial value :guilabel:`To Send`. To process the invoice man
|
||||
Reception of legal XML and PDF
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The electronic invoice vendor (Carvajal) receives the XML file and proceeds to validate its
|
||||
The electronic invoice vendor (Carvajal) receives the XML file, and proceeds to validate its
|
||||
structure and information.
|
||||
|
||||
After validating the electronic invoice, proceed to generate a legal XML which includes a digital
|
||||
@@ -279,10 +331,11 @@ signature and a unique code (CUFE), a PDF invoice that includes a QR code and th
|
||||
generated. If everything is correct the :guilabel:`Electronic Invoicing` field value changes to
|
||||
:guilabel:`Sent`.
|
||||
|
||||
A ZIP containing the legal electronic invoice in XML format and the invoice in PDF format is
|
||||
downloaded and displayed in the invoice chatter:
|
||||
A :file:`.zip` containing the legal electronic invoice (in XML format) and the invoice in (PDF
|
||||
format) is downloaded and displayed in the invoice chatter:
|
||||
|
||||
.. image:: colombia/invoice-zip.png
|
||||
:align: center
|
||||
:alt: ZIP file displayed in the invoice chatter in Odoo.
|
||||
|
||||
The electronic invoice status changes to :guilabel:`Accepted`.
|
||||
@@ -292,7 +345,7 @@ Credit notes
|
||||
|
||||
The process for credit notes is the same as for invoices. To create a credit note with reference to
|
||||
an invoice, go to :menuselection:`Accounting --> Customers --> Invoices`. On the invoice, click
|
||||
:guilabel:`Add Credit Note` and complete the following information:
|
||||
:guilabel:`Add Credit Note`, and complete the following information:
|
||||
|
||||
- :guilabel:`Credit Method`: Select the type of credit method.
|
||||
|
||||
@@ -316,7 +369,7 @@ Debit notes
|
||||
|
||||
The process for debit notes is similar to credit notes. To create a debit note with reference to an
|
||||
invoice, go to :menuselection:`Accounting --> Customers --> Invoices`. On the invoice, click the
|
||||
:guilabel:`Add Debit Note` button and complete the following information:
|
||||
:guilabel:`Add Debit Note` button, and enter the following information:
|
||||
|
||||
- :guilabel:`Reason`: Type the reason for the debit note.
|
||||
- :guilabel:`Debit note date`: Select the specific options.
|
||||
@@ -331,7 +384,7 @@ Support document for vendor bills
|
||||
---------------------------------
|
||||
|
||||
With master data, credentials, and the purchase journal configured for support documents related to
|
||||
vendor bills, you can start using support documents.
|
||||
vendor bills, you can start using *support documents*.
|
||||
|
||||
Support documents for vendor bills can be created from your purchase order or manually. Go to
|
||||
:menuselection:`Accounting --> Vendors --> Bills` and fill in the following data:
|
||||
@@ -372,6 +425,7 @@ Commerce (ICA) tax. The report can be found under :menuselection:`Accounting -->
|
||||
Colombian Statements --> Certificado de Retención en ICA`.
|
||||
|
||||
.. image:: colombia/ica-report.png
|
||||
:align: center
|
||||
:alt: Certificado de Retención en ICA report in Odoo Accounting.
|
||||
|
||||
Certificado de Retención en IVA
|
||||
@@ -382,6 +436,7 @@ can be found under :menuselection:`Accounting --> Reporting --> Colombian Statem
|
||||
de Retención en IVA`.
|
||||
|
||||
.. image:: colombia/iva-report.png
|
||||
:align: center
|
||||
:alt: Certificado de Retención en IVA report in Odoo Accounting.
|
||||
|
||||
Certificado de Retención en la Fuente
|
||||
@@ -392,4 +447,5 @@ be found under :menuselection:`Accounting --> Reporting --> Colombian Statements
|
||||
Retención en Fuente`.
|
||||
|
||||
.. image:: colombia/fuente-report.png
|
||||
:align: center
|
||||
:alt: Certificado de Retención en Fuente report in Odoo Accounting.
|
||||
|
||||
|
After Width: | Height: | Size: 24 KiB |
@@ -175,7 +175,7 @@ Make sure your products are correctly configured so your e-invoices are valid:
|
||||
|
||||
- :guilabel:`Product Type`: storable products, consumables, or services.
|
||||
- :guilabel:`Unit of Measure`: if you also use Odoo Inventory and have enabled :doc:`Units of
|
||||
Measure </applications/inventory_and_mrp/inventory/management/products/uom>`.
|
||||
Measure <../../inventory_and_mrp/inventory/product_management/product_replenishment/uom>`.
|
||||
- :guilabel:`Barcode`: **GS1** or **EGS** barcode
|
||||
- :guilabel:`ETA Item code` (under the :menuselection:`Accounting` tab): if the barcode doesn't
|
||||
match your ETA item code.
|
||||
|
||||
|
After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 30 KiB |