Compare commits
154 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 92ccfc5bef | |||
| ff0eee15c3 | |||
| 44ef78b391 | |||
| cae0edcc83 | |||
| c60ec48c9d | |||
| 4f677d9d3f | |||
| 5c4d88a1f0 | |||
| 5b51f9077a | |||
| 4a42a9c327 | |||
| ac6d78f4d4 | |||
| ea03bcd579 | |||
| 46e435dfd3 | |||
| b9cb5ffa1c | |||
| f74e9568c0 | |||
| 7287989ea4 | |||
| 7ea55ea650 | |||
| ac53c6f12e | |||
| b559f00948 | |||
| c926e34635 | |||
| 7eb22a3737 | |||
| 7c050622ed | |||
| 32b92f5959 | |||
| c0131223e9 | |||
| da2a48b9fd | |||
| e4ebe9f277 | |||
| bb04b18e7f | |||
| 2b6c17eebf | |||
| cf4a7a94a1 | |||
| 98d0d59188 | |||
| 8b8c11efa9 | |||
| e52d8f172f | |||
| 56eed9771e | |||
| 4081ec3f17 | |||
| 7babf06b44 | |||
| 8b1875d5e2 | |||
| 4b726b044d | |||
| ffa15c6b76 | |||
| efb7162ca0 | |||
| 943f6b1e7a | |||
| e54d5065c8 | |||
| 5cd8f80b53 | |||
| 90797b5740 | |||
| fdb16b8132 | |||
| 29d884c548 | |||
| b1cad7ec29 | |||
| ec33990d21 | |||
| df9adf6d59 | |||
| acc2c7994a | |||
| d80403e23f | |||
| 22c811b698 | |||
| 465e7e70c4 | |||
| e314289fc4 | |||
| e807298fbb | |||
| 51406e3d42 | |||
| 5211a71e44 | |||
| f93c0a6490 | |||
| 5a2e7b0512 | |||
| 91895e7f86 | |||
| 7c1bcbfc1b | |||
| e3c5cc2784 | |||
| 8d25366adb | |||
| 4cb7b3af3d | |||
| 8c03442791 | |||
| 223bfaee7c | |||
| 6ed928ac55 | |||
| a7743d513b | |||
| 471d68e186 | |||
| c2ff2671ff | |||
| 26c4c01889 | |||
| 5ee932e14b | |||
| 2e9c99c941 | |||
| bd434b0528 | |||
| 1227c9cf79 | |||
| 10e6f02841 | |||
| 0a65b0872d | |||
| 7ce5a5afe4 | |||
| c85031b3fc | |||
| a187b7cde4 | |||
| 29db8bf1e6 | |||
| 222fd67d7f | |||
| 7d8072ea29 | |||
| 481a867a05 | |||
| 22d45407c4 | |||
| b82d36c174 | |||
| bbe9d4ba93 | |||
| 9db7381ea4 | |||
| ca38752795 | |||
| dd268b543c | |||
| bc0da5c27d | |||
| 35989e4bec | |||
| dc9e98d48d | |||
| 5af98b20de | |||
| 1844ad5e47 | |||
| 11d8c153e2 | |||
| f3e3490ba4 | |||
| 9c9e78246e | |||
| 22f71172d5 | |||
| 18e5f34ed6 | |||
| da31abfba5 | |||
| 729881c7b1 | |||
| 710c373354 | |||
| 6c15190f38 | |||
| ba3a60adf7 | |||
| 88da0a9256 | |||
| 2e90b83b0e | |||
| e6372144cf | |||
| e8aaefd283 | |||
| 1c98265c95 | |||
| 77fe26c390 | |||
| 023e03549a | |||
| 7a53850477 | |||
| 1e201095b3 | |||
| c24f4b237e | |||
| b19ba95d0e | |||
| 0e128b803d | |||
| bafe824f38 | |||
| 1853f226e7 | |||
| 0433e84a0c | |||
| 4c750d1bb7 | |||
| 1a5952ee95 | |||
| 19b1a49436 | |||
| 242c13bfc0 | |||
| 3ba81b3394 | |||
| e074580ffb | |||
| eb6c567ee2 | |||
| 9f8bf0a307 | |||
| b745bd9fef | |||
| 35deec4c3d | |||
| d084c105d9 | |||
| cf5a3276c9 | |||
| 5c3e8d5919 | |||
| e57ca4dbf7 | |||
| a26d370017 | |||
| 1bc87e1486 | |||
| 394246d043 | |||
| eb68fc18d5 | |||
| 7ddbeb9223 | |||
| 1f2f11c42b | |||
| a7bd0be69c | |||
| 0494082a55 | |||
| 9e453285d0 | |||
| ee4b279e7c | |||
| 22fe8f41b3 | |||
| 256ddb30ab | |||
| d7bb5af3cd | |||
| 83806263df | |||
| 2520f589d5 | |||
| 8274035b88 | |||
| 35d355f624 | |||
| e3665393c3 | |||
| 0cfa38785d | |||
| 65929330ba | |||
| 5d7ccb0616 | |||
| daf5ef7a43 |
@@ -84,5 +84,14 @@ static: $(HTML_BUILD_DIR)/_static/style.css
|
||||
cp -r extensions/odoo_theme/static/* $(HTML_BUILD_DIR)/_static/
|
||||
cp -r static/* $(HTML_BUILD_DIR)/_static/
|
||||
|
||||
# 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
|
||||
|
||||
# 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; \
|
||||
if [ -z "$$path" ]; then echo "Error: Path cannot be empty"; exit 1; 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
|
||||
|
||||
@@ -195,7 +195,7 @@ todo_include_todos = False
|
||||
intersphinx_mapping = {
|
||||
'pillow': ('https://pillow.readthedocs.io/en/stable/', None),
|
||||
'python': ('https://docs.python.org/3/', None),
|
||||
'werkzeug': ('https://werkzeug.palletsprojects.com/en/1.0.x/', None),
|
||||
'werkzeug': ('https://werkzeug.palletsprojects.com/en/2.3.x/', None),
|
||||
}
|
||||
|
||||
github_user = 'odoo'
|
||||
@@ -213,6 +213,8 @@ sphinx.transforms.i18n.docname_to_domain = (
|
||||
# is populated. If a version is passed to `versions` but is not listed here, it will not be shown.
|
||||
versions_names = {
|
||||
'master': "Master",
|
||||
'saas-16.4': "Odoo Online",
|
||||
'saas-16.3': "Odoo Online",
|
||||
'saas-16.2': "Odoo Online",
|
||||
'saas-16.1': "Odoo Online",
|
||||
'16.0': "Odoo 16",
|
||||
|
||||
@@ -1,14 +1,49 @@
|
||||
:nosearch:
|
||||
:show-content:
|
||||
|
||||
=======
|
||||
Install
|
||||
=======
|
||||
|
||||
.. If you add content on this page, remove the redirect rule 'install -> install/install'
|
||||
Depending on the intended use case, there are multiple ways to install Odoo - or not install it at
|
||||
all.
|
||||
|
||||
- :doc:`Online <install/online>` is the easiest way to use Odoo in production or to try it.
|
||||
|
||||
- :doc:`Packaged installers <install/packages>` are suitable for testing Odoo and developing
|
||||
modules. They can be used for long-term production with additional deployment and maintenance
|
||||
work.
|
||||
|
||||
- :doc:`Source install <install/source>` provides greater flexibility, as it allows, for example,
|
||||
running multiple Odoo versions on the same system. It is adequate to develop modules and can be
|
||||
used as a base for production deployment.
|
||||
|
||||
- A `Docker <https://hub.docker.com/_/odoo/>`_ base image is available for development or
|
||||
deployment.
|
||||
|
||||
.. _install/editions:
|
||||
|
||||
Editions
|
||||
========
|
||||
|
||||
There are two different editions.
|
||||
|
||||
**Odoo Community** is the free and open-source version of the software, licensed under the `GNU
|
||||
LGPLv3 <https://github.com/odoo/odoo/blob/master/LICENSE>`_. It is the core upon which Odoo
|
||||
Enterprise is built.
|
||||
|
||||
**Odoo Enterprise** is the shared source version of the software, giving access to more
|
||||
functionalities, including functional support, upgrades, and hosting. `Pricing
|
||||
<https://www.odoo.com/pricing-plan>`_ starts from one app free.
|
||||
|
||||
.. tip::
|
||||
:doc:`Switch from Community to Enterprise <maintain/enterprise>` at any time (except for the
|
||||
source install).
|
||||
|
||||
.. toctree::
|
||||
|
||||
install/install
|
||||
install/deploy
|
||||
install/cdn
|
||||
install/email_gateway
|
||||
install/online
|
||||
install/packages
|
||||
install/source
|
||||
install/deploy
|
||||
install/cdn
|
||||
install/email_gateway
|
||||
|
||||
@@ -3,7 +3,7 @@ System configuration
|
||||
====================
|
||||
|
||||
This document describes basic steps to set up Odoo in production or on an
|
||||
internet-facing server. It follows :ref:`installation <setup/install>`, and is
|
||||
internet-facing server. It follows :doc:`installation <../install>`, and is
|
||||
not generally necessary for a development systems that is not exposed on the
|
||||
internet.
|
||||
|
||||
@@ -43,7 +43,7 @@ Configuration samples
|
||||
|
||||
* Show only databases with names beginning with 'mycompany'
|
||||
|
||||
in ``/etc/odoo.conf`` set:
|
||||
in :ref:`the configuration file <reference/cmdline/config_file>` set:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
@@ -55,7 +55,7 @@ in ``/etc/odoo.conf`` set:
|
||||
was sent to ``www.mycompany.com`` or ``mycompany.co.uk``, but not
|
||||
for ``www2.mycompany.com`` or ``helpdesk.mycompany.com``.
|
||||
|
||||
in ``/etc/odoo.conf`` set:
|
||||
in :ref:`the configuration file <reference/cmdline/config_file>` set:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
@@ -123,7 +123,7 @@ Out of the box, Odoo connects to a local postgres over UNIX socket via port
|
||||
<reference/cmdline/server/database>` when your Postgres deployment is not
|
||||
local and/or does not use the installation defaults.
|
||||
|
||||
The :ref:`packaged installers <setup/install/packaged>` will automatically
|
||||
The :doc:`packaged installers <packages>` will automatically
|
||||
create a new user (``odoo``) and set it as the database user.
|
||||
|
||||
* The database management screens are protected by the ``admin_passwd``
|
||||
@@ -150,7 +150,7 @@ Configuration sample
|
||||
* with 'pwd' as a password
|
||||
* filtering only db with a name beginning with 'mycompany'
|
||||
|
||||
in ``/etc/odoo.conf`` set:
|
||||
in :ref:`the configuration file <reference/cmdline/config_file>` set:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
@@ -238,7 +238,7 @@ Configuration sample
|
||||
* We'll use 8 workers + 1 for cron. We'll also use a monitoring system to measure cpu load, and check if it's between 7 and 7.5 .
|
||||
* RAM = 9 * ((0.8*150) + (0.2*1024)) ~= 3Go RAM for Odoo
|
||||
|
||||
in ``/etc/odoo.conf``:
|
||||
in :ref:`the configuration file <reference/cmdline/config_file>`:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
@@ -273,7 +273,7 @@ Configuration sample
|
||||
* Redirect http requests to https
|
||||
* Proxy requests to odoo
|
||||
|
||||
in ``/etc/odoo.conf`` set:
|
||||
in :ref:`the configuration file <reference/cmdline/config_file>` set:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
|
||||
@@ -1,752 +0,0 @@
|
||||
|
||||
.. _setup/install:
|
||||
|
||||
===============
|
||||
Installing Odoo
|
||||
===============
|
||||
|
||||
There are multiple ways to install Odoo, or not install it at all, depending
|
||||
on the intended use case.
|
||||
|
||||
This documents attempts to describe most of the installation options.
|
||||
|
||||
:ref:`setup/install/online`
|
||||
The easiest way to use Odoo in production or to try it.
|
||||
|
||||
:ref:`setup/install/packaged`
|
||||
Suitable for testing Odoo, developing modules and can be used for
|
||||
long-term production use with additional deployment and maintenance work.
|
||||
|
||||
:ref:`setup/install/source`
|
||||
Provides greater flexibility: e.g. allow multiple running Odoo versions on
|
||||
the same system. Good for developing modules, can be used as base for
|
||||
production deployment.
|
||||
|
||||
:ref:`setup/install/docker`
|
||||
If you usually use docker_ for development or deployment, an official
|
||||
docker_ base image is available.
|
||||
|
||||
|
||||
.. _setup/install/editions:
|
||||
|
||||
Editions
|
||||
========
|
||||
|
||||
There are two different Editions_ of Odoo: the Community and Enterprise versions.
|
||||
Using the Enterprise version is possible on `Odoo Online`_ and accessing the code is
|
||||
restricted to Enterprise customers and partners. The Community version is freely
|
||||
available to anyone.
|
||||
|
||||
If you already use the Community version and wish to upgrade to Enterprise, please
|
||||
refer to :ref:`setup/enterprise` (except for :ref:`setup/install/source`).
|
||||
|
||||
|
||||
.. _setup/install/online:
|
||||
|
||||
Online
|
||||
======
|
||||
|
||||
Demo
|
||||
----
|
||||
|
||||
To simply get a quick idea of Odoo, demo_ instances are available. They are
|
||||
shared instances which only live for a few hours, and can be used to browse
|
||||
around and try things out with no commitment.
|
||||
|
||||
Demo_ instances require no local installation, just a web browser.
|
||||
|
||||
Odoo Online
|
||||
-----------
|
||||
|
||||
Trivial to start with, fully managed and migrated by Odoo S.A., `Odoo Online`_
|
||||
provides private instances and starts out free. It can be used to discover and
|
||||
test Odoo and do non-code customizations (i.e. incompatible with custom modules
|
||||
or the Odoo Apps Store) without having to install it locally.
|
||||
|
||||
Can be used for both testing Odoo and long-term production use.
|
||||
|
||||
Like demo_ instances, `Odoo Online`_ instances require no local installation, a web
|
||||
browser is sufficient.
|
||||
|
||||
|
||||
.. _setup/install/packaged:
|
||||
|
||||
Packaged installers
|
||||
===================
|
||||
|
||||
Odoo provides packaged installers for Windows, deb-based distributions
|
||||
(Debian, Ubuntu, …) and RPM-based distributions (Fedora, CentOS, RHEL, …) for
|
||||
both the Community and Enterprise versions.
|
||||
|
||||
These packages automatically set up all dependencies (for the Community version),
|
||||
but may be difficult to keep up-to-date.
|
||||
|
||||
Official Community packages with all relevant dependency requirements are
|
||||
available on our nightly_ server. Both Community and Enterprise packages can
|
||||
be downloaded from our download_ page (you must to be logged in as a paying
|
||||
customer or partner to download the Enterprise packages).
|
||||
|
||||
Windows
|
||||
-------
|
||||
|
||||
#. Download the installer from our nightly_ server (Community only) or the Windows installer from
|
||||
the download_ page (any edition).
|
||||
#. Execute the downloaded file.
|
||||
|
||||
.. warning::
|
||||
| On Windows 8 and later you may see a warning titled "Windows protected your PC".
|
||||
| Click on **More Info** and then on **Run anyway**.
|
||||
|
||||
#. Accept the UAC_ prompt.
|
||||
#. Go through the various installation steps.
|
||||
|
||||
Odoo will automatically be started at the end of the installation.
|
||||
|
||||
Linux
|
||||
-----
|
||||
|
||||
Prepare
|
||||
~~~~~~~
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Debian/Ubuntu
|
||||
|
||||
Odoo needs a `PostgreSQL`_ server to run properly. The default configuration for
|
||||
the Odoo 'deb' package is to use the PostgreSQL server on the same host as your
|
||||
Odoo instance. Execute the following command in order to install the PostgreSQL server:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo apt install postgresql -y
|
||||
|
||||
.. group-tab:: Fedora
|
||||
|
||||
Odoo needs a `PostgreSQL`_ server to run properly. Make sure that the `sudo` command is
|
||||
available and well configured and, only then, execute the following command in order to
|
||||
install the PostgreSQL server:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo dnf install -y postgresql-server
|
||||
$ sudo postgresql-setup --initdb --unit postgresql
|
||||
$ sudo systemctl enable postgresql
|
||||
$ sudo systemctl start postgresql
|
||||
|
||||
.. warning::
|
||||
`wkhtmltopdf` is not installed through **pip** and must be installed manually in version `0.12.5
|
||||
<the wkhtmltopdf download page_>`_ for it to support headers and footers. See our `wiki
|
||||
<https://github.com/odoo/odoo/wiki/Wkhtmltopdf>`_ for more details on the various versions.
|
||||
|
||||
Repository
|
||||
~~~~~~~~~~
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Debian/Ubuntu
|
||||
|
||||
Odoo S.A. provides a repository that can be used with Debian and Ubuntu distributions. It can
|
||||
be used to install *Odoo Community Edition* by executing the following commands:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ wget -q -O - https://nightly.odoo.com/odoo.key | sudo gpg --dearmor -o /usr/share/keyrings/odoo-archive-keyring.gpg
|
||||
$ echo 'deb [signed-by=/usr/share/keyrings/odoo-archive-keyring.gpg] https://nightly.odoo.com/{CURRENT_MAJOR_BRANCH}/nightly/deb/ ./' | sudo tee /etc/apt/sources.list.d/odoo.list
|
||||
$ sudo apt-get update && sudo apt-get install odoo
|
||||
|
||||
You can then use the usual `apt-get upgrade` command to keep your installation up-to-date.
|
||||
|
||||
.. group-tab:: Fedora
|
||||
|
||||
Odoo S.A. provides a repository that can be used with the Fedora distributions. It can be used
|
||||
to install *Odoo Community Edition* by executing the following commands:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo dnf config-manager --add-repo=https://nightly.odoo.com/{CURRENT_MAJOR_BRANCH}/nightly/rpm/odoo.repo
|
||||
$ sudo dnf install -y odoo
|
||||
$ sudo systemctl enable odoo
|
||||
$ sudo systemctl start odoo
|
||||
|
||||
.. note::
|
||||
At this moment, there is no nightly repository for the Enterprise Edition.
|
||||
|
||||
Distribution package
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Debian/Ubuntu
|
||||
|
||||
Instead of using the repository as described above, the 'deb' packages for both the
|
||||
*Community* and *Enterprise* editions can be downloaded from the `official download page
|
||||
<download_>`_.
|
||||
|
||||
.. note::
|
||||
Odoo {CURRENT_MAJOR_VERSION} 'deb' package currently supports `Debian 11 (Bullseye)`_,
|
||||
`Ubuntu 22.04 (Jammy)`_ or above.
|
||||
|
||||
Next, execute the following commands **as root**:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# dpkg -i <path_to_installation_package> # this probably fails with missing dependencies
|
||||
# apt-get install -f # should install the missing dependencies
|
||||
# dpkg -i <path_to_installation_package>
|
||||
|
||||
This will install Odoo as a service, create the necessary PostgreSQL_ user
|
||||
and automatically start the server.
|
||||
|
||||
.. warning::
|
||||
- The `python3-xlwt` Debian package does not exists in Debian Buster nor Ubuntu 18.04. This
|
||||
python module is needed to export into xls format.
|
||||
|
||||
If you need the feature, you can install it manually with:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo pip3 install xlwt
|
||||
|
||||
- The `num2words` python package does not exists in Debian Buster nor Ubuntu 18.04. Textual
|
||||
amounts will not be rendered by Odoo and this could cause problems with the `l10n_mx_edi`
|
||||
module.
|
||||
|
||||
If you need this feature, you can install manually with:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo pip3 install num2words
|
||||
|
||||
.. group-tab:: Fedora
|
||||
|
||||
Instead of using the repository as described above, the 'rpm' packages for both the
|
||||
*Community* and *Enterprise* editions can be downloaded from the `official download page
|
||||
<download_>`_.
|
||||
|
||||
.. note::
|
||||
Odoo {CURRENT_MAJOR_VERSION} 'rpm' package supports Fedora 36.
|
||||
|
||||
Once downloaded, the package can be installed using the 'dnf' package manager:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo dnf localinstall odoo_{CURRENT_MAJOR_BRANCH}.latest.noarch.rpm
|
||||
$ sudo systemctl enable odoo
|
||||
$ sudo systemctl start odoo
|
||||
|
||||
.. _setup/install/source:
|
||||
|
||||
Source install
|
||||
==============
|
||||
|
||||
The source "installation" is really about not installing Odoo, and running it directly from source
|
||||
instead.
|
||||
|
||||
It can be more convenient for module developers as the Odoo source is more easily accessible than
|
||||
using packaged installation.
|
||||
|
||||
It also makes starting and stopping Odoo more flexible and explicit than the services set up by the
|
||||
packaged installations, and allows overriding settings using
|
||||
:ref:`command-line parameters <reference/cmdline>` without needing to edit a configuration file.
|
||||
|
||||
Finally it provides greater control over the system's set up, and allows to more easily keep
|
||||
(and run) multiple versions of Odoo side-by-side.
|
||||
|
||||
Fetch the sources
|
||||
-----------------
|
||||
|
||||
There are two ways to obtain the source code of Odoo: as a zip **archive** or through **git**.
|
||||
|
||||
Archive
|
||||
~~~~~~~
|
||||
|
||||
Community Edition:
|
||||
|
||||
* `Official download page <download_>`_
|
||||
* `GitHub repository <community-repository_>`_
|
||||
* `Nightly server <nightly_>`_
|
||||
|
||||
Enterprise Edition:
|
||||
|
||||
* `Official download page <download_>`_
|
||||
* `GitHub repository <enterprise-repository_>`_
|
||||
|
||||
.. _setup/install/source/git:
|
||||
|
||||
Git
|
||||
~~~
|
||||
|
||||
The following requires `Git <git_>`_ to be installed on your machine and that you have basic
|
||||
knowledge of Git commands. To clone a Git repository, you must choose between cloning with HTTPS or
|
||||
SSH. If you do not know the difference between the two, the best option is most likely HTTPS. If you
|
||||
are following the :doc:`Getting started </developer/tutorials/getting_started>` developer tutorial,
|
||||
or plan on contributing to Odoo source code, choose SSH.
|
||||
|
||||
.. note::
|
||||
**The Enterprise Git repository does not contain the full Odoo source code**. It is only a
|
||||
collection of extra add-ons. The main server code is in the Community version. Running the
|
||||
Enterprise version actually means running the server from the Community version with the
|
||||
addons-path option set to the folder with the Enterprise version. You need to clone both the
|
||||
Community and Enterprise repository to have a working Odoo Enterprise installation. See
|
||||
:ref:`setup/install/editions` to get access to the Enterprise repository.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Windows
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Clone with HTTPS
|
||||
|
||||
.. code-block:: doscon
|
||||
|
||||
C:\> git clone https://github.com/odoo/odoo.git
|
||||
C:\> git clone https://github.com/odoo/enterprise.git
|
||||
|
||||
.. tab:: Clone with SSH
|
||||
|
||||
.. code-block:: doscon
|
||||
|
||||
C:\> git clone git@github.com:odoo/odoo.git
|
||||
C:\> git clone git@github.com:odoo/enterprise.git
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Clone with HTTPS
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone https://github.com/odoo/odoo.git
|
||||
$ git clone https://github.com/odoo/enterprise.git
|
||||
|
||||
.. tab:: Clone with SSH
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone git@github.com:odoo/odoo.git
|
||||
$ git clone git@github.com:odoo/enterprise.git
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Clone with HTTPS
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone https://github.com/odoo/odoo.git
|
||||
$ git clone https://github.com/odoo/enterprise.git
|
||||
|
||||
.. tab:: Clone with SSH
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone git@github.com:odoo/odoo.git
|
||||
$ git clone git@github.com:odoo/enterprise.git
|
||||
|
||||
.. note::
|
||||
**The Enterprise git repository does not contain the full Odoo source code**. It is only a
|
||||
collection of extra add-ons. The main server code is in the Community version. Running the
|
||||
Enterprise version actually means running the server from the Community version with the
|
||||
addons-path option set to the folder with the Enterprise version. You need to clone both the
|
||||
Community and Enterprise repository to have a working Odoo Enterprise installation.
|
||||
|
||||
.. _setup/install/source/prepare:
|
||||
|
||||
Prepare
|
||||
-------
|
||||
|
||||
Python
|
||||
~~~~~~
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Windows
|
||||
|
||||
Odoo requires Python 3.7 or later to run. Visit `Python's download page <https://www.python.org/downloads/windows/>`_
|
||||
to download and install the latest version of Python 3 on your machine.
|
||||
|
||||
During installation, check **Add Python 3 to PATH**, then click **Customize Installation** and make
|
||||
sure that **pip** is checked.
|
||||
|
||||
.. note::
|
||||
If Python 3 is already installed, make sure that the version is 3.7 or above, as previous
|
||||
versions are not compatible with Odoo.
|
||||
|
||||
.. code-block:: doscon
|
||||
|
||||
C:\> python --version
|
||||
|
||||
Verify also that pip_ is installed for this version.
|
||||
|
||||
.. code-block:: doscon
|
||||
|
||||
C:\> pip --version
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
Odoo requires Python 3.7 or later to run. Use your package manager to download and install Python 3
|
||||
on your machine if it is not already done.
|
||||
|
||||
.. note::
|
||||
If Python 3 is already installed, make sure that the version is 3.7 or above, as previous
|
||||
versions are not compatible with Odoo.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python3 --version
|
||||
|
||||
Verify also that pip_ is installed for this version.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ pip3 --version
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
Odoo requires Python 3.7 or later to run. Use your preferred package manager (homebrew_, macports_)
|
||||
to download and install Python 3 on your machine if it is not already done.
|
||||
|
||||
.. note::
|
||||
If Python 3 is already installed, make sure that the version is 3.7 or above, as previous
|
||||
versions are not compatible with Odoo.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python3 --version
|
||||
|
||||
Verify also that pip_ is installed for this version.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ pip3 --version
|
||||
|
||||
PostgreSQL
|
||||
~~~~~~~~~~
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Windows
|
||||
|
||||
Odoo uses PostgreSQL as database management system. `Download and install PostgreSQL
|
||||
<https://www.postgresql.org/download/windows/>`_ (supported version: 12.0 and later).
|
||||
|
||||
By default, the only user is `postgres` but Odoo forbids connecting as `postgres`, so you need
|
||||
to create a new PostgreSQL user:
|
||||
|
||||
#. Add PostgreSQL's `bin` directory (by default:
|
||||
:file:`C:\\Program Files\\PostgreSQL\\<version>\\bin`) to your `PATH`.
|
||||
#. Create a postgres user with a password using the pg admin gui:
|
||||
|
||||
1. Open **pgAdmin**.
|
||||
2. Double-click the server to create a connection.
|
||||
3. Select :menuselection:`Object --> Create --> Login/Group Role`.
|
||||
4. Enter the username in the **Role Name** field (e.g. `odoo`).
|
||||
5. Open the **Definition** tab and enter the password (e.g. `odoo`), then click **Save**.
|
||||
6. Open the **Privileges** tab and switch **Can login?** to `Yes` and **Create database?**
|
||||
to `Yes`.
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
Odoo uses PostgreSQL as database management system. Use your package manager to download and
|
||||
install PostgreSQL (supported version: 12.0 and later).
|
||||
|
||||
It can be achieved by executing the following:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo apt install postgresql postgresql-client
|
||||
|
||||
By default, the only user is `postgres` but Odoo forbids connecting as `postgres`, so you need
|
||||
to create a new PostgreSQL user:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo -u postgres createuser -s $USER
|
||||
$ createdb $USER
|
||||
|
||||
.. note::
|
||||
Because your PostgreSQL user has the same name as your Unix login, you will be able to
|
||||
connect to the database without password.
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
Odoo uses PostgreSQL as database management system. Use `postgres.app
|
||||
<https://postgresapp.com>`_ to download and install PostgreSQL (supported version: 12.0 and
|
||||
later).
|
||||
|
||||
.. tip::
|
||||
To make the command line tools bundled with `postgres.app` available, make sure to setup your
|
||||
`$PATH` variable by following the `Postgres.app CLI Tools Instructions
|
||||
<https://postgresapp.com/documentation/cli-tools.html>`_.
|
||||
|
||||
By default, the only user is `postgres` but Odoo forbids connecting as `postgres`, so you need
|
||||
to create a new PostgreSQL user:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo -u postgres createuser -s $USER
|
||||
$ createdb $USER
|
||||
|
||||
.. note::
|
||||
Because your PostgreSQL user has the same name as your Unix login, you will be able to
|
||||
connect to the database without password.
|
||||
|
||||
.. _install/dependencies:
|
||||
|
||||
Dependencies
|
||||
~~~~~~~~~~~~
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Windows
|
||||
|
||||
Before installing the dependencies, you must download and install the `Build Tools for Visual
|
||||
Studio <https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019>`_.
|
||||
When prompted, select **C++ build tools** in the **Workloads** tab and install them.
|
||||
|
||||
Odoo dependencies are listed in the `requirements.txt` file located at the root of the Odoo
|
||||
community directory.
|
||||
|
||||
.. tip::
|
||||
It can be preferable to not mix python modules packages between different instances of Odoo
|
||||
or with your system. You can use virtualenv_ to create isolated Python environments.
|
||||
|
||||
Navigate to the path of your Odoo Community installation (`CommunityPath`) and run **pip** on
|
||||
the requirements file in a terminal **with Administrator privileges**:
|
||||
|
||||
.. code-block:: doscon
|
||||
|
||||
C:\> cd \CommunityPath
|
||||
C:\> pip install setuptools wheel
|
||||
C:\> pip install -r requirements.txt
|
||||
|
||||
For languages with right-to-left interface (such as Arabic or Hebrew), the package `rtlcss`
|
||||
is needed:
|
||||
|
||||
#. Download and install `nodejs <https://nodejs.org/en/download/>`_.
|
||||
#. Install `rtlcss`:
|
||||
|
||||
.. code-block:: doscon
|
||||
|
||||
C:\> npm install -g rtlcss
|
||||
|
||||
#. Edit the System Environment's variable `PATH` to add the folder where `rtlcss.cmd` is
|
||||
located (typically: :file:`C:\\Users\\<user>\\AppData\\Roaming\\npm\\`).
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
Using your **distribution packages** is the preferred way of installing dependencies.
|
||||
Alternatively, you can install the python dependencies with **pip**.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Debian/Ubuntu
|
||||
|
||||
For Debian-based systems, the packages are listed in the `debian/control
|
||||
<{GITHUB_PATH}/debian/control>`_ file of the Odoo sources.
|
||||
|
||||
On Debian/Ubuntu, the following commands should install the required packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd /CommunityPath
|
||||
$ sed -n -e '/^Depends:/,/^Pre/ s/ python3-\(.*\),/python3-\1/p' debian/control | sudo xargs apt-get install -y
|
||||
|
||||
.. tab:: Install with pip
|
||||
|
||||
As some of the python packages need a compilation step, they require system libraries to
|
||||
be installed.
|
||||
|
||||
On Debian/Ubuntu-based systems, the following command should install these required
|
||||
libraries:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo apt install python3-pip libldap2-dev libpq-dev libsasl2-dev
|
||||
|
||||
Odoo dependencies are listed in the :file:`requirements.txt` file located at the root of
|
||||
the Odoo community directory.
|
||||
|
||||
.. note::
|
||||
| The python packages in :file:`requirements.txt` are based on their stable/LTS
|
||||
Debian/Ubuntu corresponding version at the moment of the Odoo release.
|
||||
| E.g., for Odoo 15.0, the `python3-babel` package version is 2.8.0 in Debian
|
||||
Bullseye and 2.6.0 in Ubuntu Focal. The lowest version is then chosen in the
|
||||
:file:`requirements.txt`.
|
||||
|
||||
.. tip::
|
||||
It can be preferable to not mix python modules packages between different instances
|
||||
of Odoo or with your system. You can use virtualenv_ to create isolated Python
|
||||
environments.
|
||||
|
||||
Navigate to the path of your Odoo Community installation (:file:`CommunityPath`) and run
|
||||
**pip** on the requirements file to install the requirements for the current user.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd /CommunityPath
|
||||
$ pip install -r requirements.txt
|
||||
|
||||
For languages with right-to-left interface (such as Arabic or Hebrew), the package `rtlcss` is
|
||||
needed:
|
||||
|
||||
#. Download and install **nodejs** and **npm** with your package manager.
|
||||
#. Install `rtlcss`:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo npm install -g rtlcss
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
Odoo dependencies are listed in the `requirements.txt` file located at the root of the Odoo
|
||||
community directory.
|
||||
|
||||
.. tip::
|
||||
It can be preferable to not mix python modules packages between different instances of Odoo
|
||||
or with your system. You can use virtualenv_ to create isolated Python environments.
|
||||
|
||||
Navigate to the path of your Odoo Community installation (`CommunityPath`) and run **pip** on
|
||||
the requirements file:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd /CommunityPath
|
||||
$ pip3 install setuptools wheel
|
||||
$ pip3 install -r requirements.txt
|
||||
|
||||
.. warning::
|
||||
Non-Python dependencies need to be installed with a package manager:
|
||||
|
||||
#. Download and install the **Command Line Tools**:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ xcode-select --install
|
||||
|
||||
#. Download and install the package manager of your choice (homebrew_, macports_).
|
||||
#. Install non-python dependencies.
|
||||
|
||||
For languages with right-to-left interface (such as Arabic or Hebrew), the package `rtlcss` is
|
||||
needed:
|
||||
|
||||
#. Download and install **nodejs** with your preferred package manager (homebrew_, macports_).
|
||||
#. Install `rtlcss`:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo npm install -g rtlcss
|
||||
|
||||
.. important::
|
||||
`wkhtmltopdf` is not installed through **pip** and must be installed manually in version `0.12.5
|
||||
<the wkhtmltopdf download page_>`_ for it to support headers and footers. See our `wiki
|
||||
<https://github.com/odoo/odoo/wiki/Wkhtmltopdf>`_ for more details on the various versions.
|
||||
|
||||
.. _setup/install/source/running_odoo:
|
||||
|
||||
Running Odoo
|
||||
------------
|
||||
|
||||
Once all dependencies are set up, Odoo can be launched by running `odoo-bin`, the
|
||||
command-line interface of the server. It is located at the root of the Odoo Community directory.
|
||||
|
||||
To configure the server, you can either specify :ref:`command-line arguments
|
||||
<reference/cmdline/server>` or a :ref:`configuration file <reference/cmdline/config>`.
|
||||
|
||||
.. tip::
|
||||
For the Enterprise edition, you must add the path to the `enterprise` addons to the `addons-path`
|
||||
argument. Note that it must come before the other paths in `addons-path` for addons to be loaded
|
||||
correctly.
|
||||
|
||||
Common necessary configurations are:
|
||||
|
||||
- PostgreSQL user and password.
|
||||
- Custom addon paths beyond the defaults, to load your own modules.
|
||||
|
||||
A typical way to run the server would be:
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Windows
|
||||
|
||||
.. code-block:: doscon
|
||||
|
||||
C:\> cd CommunityPath/
|
||||
C:\> python odoo-bin -r dbuser -w dbpassword --addons-path=addons -d mydb
|
||||
|
||||
Where `CommunityPath` is the path of the Odoo Community installation, `dbuser` is the
|
||||
PostgreSQL login, `dbpassword` is the PostgreSQL password, and `mydb` is the name of the
|
||||
PostgreSQL database.
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd /CommunityPath
|
||||
$ python3 odoo-bin --addons-path=addons -d mydb
|
||||
|
||||
Where `CommunityPath` is the path of the Odoo Community installation, and `mydb` is the name
|
||||
of the PostgreSQL database.
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd /CommunityPath
|
||||
$ python3 odoo-bin --addons-path=addons -d mydb
|
||||
|
||||
Where `CommunityPath` is the path of the Odoo Community installation, and `mydb` is the name
|
||||
of the PostgreSQL database.
|
||||
|
||||
After the server has started (the INFO log `odoo.modules.loading: Modules loaded.` is printed), open
|
||||
http://localhost:8069 in your web browser and log in with the base administrator account: Use
|
||||
`admin` for the :guilabel:`Email` and, again, `admin` for the :guilabel:`Password`. That's it, you
|
||||
just logged into your own Odoo database!
|
||||
|
||||
.. tip::
|
||||
- From there, you can create and manage new :doc:`users
|
||||
</applications/general/users/manage_users>`.
|
||||
- The user account you use to log into Odoo's web interface differs from the :option:`--db_user
|
||||
<odoo-bin -r>` CLI argument.
|
||||
|
||||
.. seealso::
|
||||
:doc:`The exhaustive list of CLI arguments for odoo-bin </developer/reference/cli>`.
|
||||
|
||||
.. _setup/install/docker:
|
||||
|
||||
Docker
|
||||
======
|
||||
|
||||
The full documentation on how to use Odoo with Docker can be found on the
|
||||
official Odoo `docker image <https://hub.docker.com/_/odoo/>`_ page.
|
||||
|
||||
.. _Debian 11 (Bullseye): https://www.debian.org/releases/bullseye/
|
||||
.. _demo: https://demo.odoo.com
|
||||
.. _docker: https://www.docker.com
|
||||
.. _download: https://www.odoo.com/page/download
|
||||
.. _Ubuntu 22.04 (Jammy): https://releases.ubuntu.com/22.04/
|
||||
.. _EPEL: https://fedoraproject.org/wiki/EPEL
|
||||
.. _PostgreSQL: https://www.postgresql.org
|
||||
.. _the official installer:
|
||||
.. _install pip:
|
||||
https://pip.pypa.io/en/latest/installing.html#install-pip
|
||||
.. _Quilt: https://en.wikipedia.org/wiki/Quilt_(software)
|
||||
.. _Odoo Online: https://www.odoo.com/page/start
|
||||
.. _the wkhtmltopdf download page: https://github.com/wkhtmltopdf/wkhtmltopdf/releases/tag/0.12.5
|
||||
.. _UAC: https://en.wikipedia.org/wiki/User_Account_Control
|
||||
.. _wkhtmltopdf: https://wkhtmltopdf.org
|
||||
.. _pip: https://pip.pypa.io
|
||||
.. _macports: https://www.macports.org
|
||||
.. _homebrew: https://brew.sh
|
||||
.. _wheels: https://wheel.readthedocs.org/en/latest/
|
||||
.. _virtualenv: https://pypi.python.org/pypi/virtualenv
|
||||
.. _virtualenvwrapper: https://virtualenvwrapper.readthedocs.io/en/latest/
|
||||
.. _pywin32: https://sourceforge.net/projects/pywin32/files/pywin32/
|
||||
.. _community-repository: https://github.com/odoo/odoo
|
||||
.. _enterprise-repository: https://github.com/odoo/enterprise
|
||||
.. _Editions: https://www.odoo.com/pricing#pricing_table_features
|
||||
.. _nightly: https://nightly.odoo.com/
|
||||
.. _extra: https://nightly.odoo.com/extra/
|
||||
@@ -0,0 +1,21 @@
|
||||
======
|
||||
Online
|
||||
======
|
||||
|
||||
Online instances are accessed using any web browser and do not require a local installation.
|
||||
|
||||
Demo
|
||||
----
|
||||
|
||||
To quickly try out Odoo, shared `demo <https://demo.odoo.com>`_ instances are available. No
|
||||
registration is required, but each instance only lives for a few hours.
|
||||
|
||||
Odoo Online
|
||||
-----------
|
||||
|
||||
`Odoo Online <https://www.odoo.com/trial>`_ provides private instances which are fully managed and
|
||||
hosted by Odoo. It can be used for long-term production or to test Odoo thoroughly, including
|
||||
customizations that don't require code.
|
||||
|
||||
.. note::
|
||||
Odoo Online is incompatible with custom modules or the Odoo App Store.
|
||||
@@ -0,0 +1,162 @@
|
||||
===================
|
||||
Packaged installers
|
||||
===================
|
||||
|
||||
Odoo provides packaged installers for Debian-based Linux distributions (Debian, Ubuntu, etc.),
|
||||
RPM-based Linux distributions (Fedora, CentOS, RHEL, etc.), and Windows for the Community and
|
||||
Enterprise editions.
|
||||
|
||||
Official **Community** nightly packages with all relevant dependency requirements are available on
|
||||
the `nightly server <https://nightly.odoo.com>`_.
|
||||
|
||||
.. note::
|
||||
Nightly packages may be difficult to keep up to date.
|
||||
|
||||
Official **Community** and **Enterprise** packages can be downloaded from the `Odoo download page
|
||||
<https://www.odoo.com/page/download>`_.
|
||||
|
||||
.. note::
|
||||
It is required to be logged in as a paying customer or partner to download the Enterprise
|
||||
packages.
|
||||
|
||||
.. _install/packages/linux:
|
||||
|
||||
Linux
|
||||
=====
|
||||
|
||||
Prepare
|
||||
-------
|
||||
|
||||
Odoo needs a `PostgreSQL <https://www.postgresql.org/>`_ server to run properly.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Debian/Ubuntu
|
||||
|
||||
The default configuration for the Odoo 'deb' package is to use the PostgreSQL server on the
|
||||
same host as the Odoo instance. Execute the following command to install the PostgreSQL
|
||||
server:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo apt install postgresql -y
|
||||
|
||||
.. group-tab:: Fedora
|
||||
|
||||
Make sure that the `sudo` command is available and well configured and, only then, execute the
|
||||
following command to install the PostgreSQL server:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo dnf install -y postgresql-server
|
||||
$ sudo postgresql-setup --initdb --unit postgresql
|
||||
$ sudo systemctl enable postgresql
|
||||
$ 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.
|
||||
|
||||
Repository
|
||||
----------
|
||||
|
||||
Odoo S.A. provides a repository that can be used to install the **Community** edition by executing
|
||||
the following commands:
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Debian/Ubuntu
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ wget -q -O - https://nightly.odoo.com/odoo.key | sudo gpg --dearmor -o /usr/share/keyrings/odoo-archive-keyring.gpg
|
||||
$ echo 'deb [signed-by=/usr/share/keyrings/odoo-archive-keyring.gpg] https://nightly.odoo.com/{CURRENT_MAJOR_BRANCH}/nightly/deb/ ./' | sudo tee /etc/apt/sources.list.d/odoo.list
|
||||
$ sudo apt-get update && sudo apt-get install odoo
|
||||
|
||||
Use the usual `apt-get upgrade` command to keep the installation up-to-date.
|
||||
|
||||
.. group-tab:: Fedora
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo dnf config-manager --add-repo=https://nightly.odoo.com/{CURRENT_MAJOR_BRANCH}/nightly/rpm/odoo.repo
|
||||
$ sudo dnf install -y odoo
|
||||
$ sudo systemctl enable odoo
|
||||
$ sudo systemctl start odoo
|
||||
|
||||
.. note::
|
||||
Currently, there is no nightly repository for the Enterprise edition.
|
||||
|
||||
Distribution package
|
||||
--------------------
|
||||
|
||||
Instead of using the repository, packages for both the **Community** and **Enterprise** editions can
|
||||
be downloaded from the `Odoo download page <https://www.odoo.com/page/download>`_.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Debian/Ubuntu
|
||||
|
||||
.. note::
|
||||
Odoo {CURRENT_MAJOR_VERSION} 'deb' package currently supports `Debian Buster
|
||||
<https://www.debian.org/releases/buster/>`_ and `Ubuntu 18.04
|
||||
<https://releases.ubuntu.com/18.04>`_ or above.
|
||||
|
||||
Once downloaded, execute the following commands **as root** to install Odoo as a service,
|
||||
create the necessary PostgreSQL user, and automatically start the server:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# dpkg -i <path_to_installation_package> # this probably fails with missing dependencies
|
||||
# apt-get install -f # should install the missing dependencies
|
||||
# dpkg -i <path_to_installation_package>
|
||||
|
||||
.. warning::
|
||||
- The `python3-xlwt` Debian package, needed to export into the XLS format, does not exist
|
||||
in Debian Buster nor Ubuntu 18.04. If needed, install it manually with the following:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo pip3 install xlwt
|
||||
|
||||
- The `num2words` Python package - needed to render textual amounts - does not exist in
|
||||
Debian Buster nor Ubuntu 18.04, which could cause problems with the `l10n_mx_edi` module.
|
||||
If needed, install it manually with the following:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo pip3 install num2words
|
||||
|
||||
.. group-tab:: Fedora
|
||||
|
||||
.. note::
|
||||
Odoo {CURRENT_MAJOR_VERSION} 'rpm' package supports Fedora 36.
|
||||
|
||||
Once downloaded, the package can be installed using the 'dnf' package manager:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo dnf localinstall odoo_{CURRENT_MAJOR_BRANCH}.latest.noarch.rpm
|
||||
$ sudo systemctl enable odoo
|
||||
$ sudo systemctl start odoo
|
||||
|
||||
.. _install/packages/windows:
|
||||
|
||||
Windows
|
||||
=======
|
||||
|
||||
#. Download the installer from the `nightly server <https://nightly.odoo.com>`_ (Community only) or
|
||||
the Windows installer from the `Odoo download page <https://www.odoo.com/page/download>`_ (any
|
||||
edition.
|
||||
#. Execute the downloaded file.
|
||||
|
||||
.. warning::
|
||||
On Windows 8 and later, a warning titled *Windows protected your PC* may be displayed. Click
|
||||
**More Info** and then **Run anyway** to proceed.
|
||||
|
||||
#. Accept the `UAC <https://en.wikipedia.org/wiki/User_Account_Control>`_ prompt.
|
||||
#. Go through the installation steps.
|
||||
|
||||
Odoo launches automatically at the end of the installation.
|
||||
@@ -0,0 +1,483 @@
|
||||
======
|
||||
Source
|
||||
======
|
||||
|
||||
The source 'installation' is not about installing Odoo but running it directly from the source
|
||||
instead.
|
||||
|
||||
Using the Odoo source can be more convenient for module developers as it is more easily accessible
|
||||
than using packaged installers.
|
||||
|
||||
It makes starting and stopping Odoo more flexible and explicit than the services set up by the
|
||||
packaged installers. Also, it allows overriding settings using :ref:`command-line parameters
|
||||
<reference/cmdline>` without needing to edit a configuration file.
|
||||
|
||||
Finally, it provides greater control over the system's setup and allows to more easily keep (and
|
||||
run) multiple versions of Odoo side-by-side.
|
||||
|
||||
Fetch the sources
|
||||
-----------------
|
||||
|
||||
There are two ways to obtain the source code of Odoo: as a ZIP **archive** or through **Git**.
|
||||
|
||||
Archive
|
||||
~~~~~~~
|
||||
|
||||
Community edition:
|
||||
|
||||
- `Odoo download page <https://www.odoo.com/page/download>`_
|
||||
- `GitHub Community repository <https://github.com/odoo/odoo>`_
|
||||
- `Nightly server <https://nightly.odoo.com>`_
|
||||
|
||||
Enterprise edition:
|
||||
|
||||
- `Odoo download page <https://www.odoo.com/page/download>`_
|
||||
- `GitHub Enterprise repository <https://github.com/odoo/enterprise>`_
|
||||
|
||||
.. _install/source/git:
|
||||
|
||||
Git
|
||||
~~~
|
||||
|
||||
.. note::
|
||||
It is required to have `Git <https://git-scm.com/>`_ installed, and it is recommended to have a
|
||||
basic knowledge of Git commands to proceed.
|
||||
|
||||
To clone a Git repository, choose between cloning with HTTPS or SSH. In most cases, the best option
|
||||
is HTTPS. However, choose SSH to contribute to Odoo source code or when following the :doc:`Getting
|
||||
Started developer tutorial </developer/tutorials/getting_started>`.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Clone with HTTPS
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone https://github.com/odoo/odoo.git
|
||||
$ git clone https://github.com/odoo/enterprise.git
|
||||
|
||||
.. tab:: Clone with SSH
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone git@github.com:odoo/odoo.git
|
||||
$ git clone git@github.com:odoo/enterprise.git
|
||||
|
||||
.. group-tab:: Windows
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Clone with HTTPS
|
||||
|
||||
.. code-block:: doscon
|
||||
|
||||
C:\> git clone https://github.com/odoo/odoo.git
|
||||
C:\> git clone https://github.com/odoo/enterprise.git
|
||||
|
||||
.. tab:: Clone with SSH
|
||||
|
||||
.. code-block:: doscon
|
||||
|
||||
C:\> git clone git@github.com:odoo/odoo.git
|
||||
C:\> git clone git@github.com:odoo/enterprise.git
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Clone with HTTPS
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone https://github.com/odoo/odoo.git
|
||||
$ git clone https://github.com/odoo/enterprise.git
|
||||
|
||||
.. tab:: Clone with SSH
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone git@github.com:odoo/odoo.git
|
||||
$ git clone git@github.com:odoo/enterprise.git
|
||||
|
||||
.. note::
|
||||
**The Enterprise git repository does not contain the full Odoo source code**. It is only a
|
||||
collection of extra add-ons. The main server code is in the Community edition. Running the
|
||||
Enterprise version means running the server from the Community version with the `addons-path`
|
||||
option set to the folder with the Enterprise edition. It is required to clone both the Community
|
||||
and Enterprise repositories to have a working Odoo Enterprise installation.
|
||||
|
||||
.. _install/source/prepare:
|
||||
|
||||
Prepare
|
||||
-------
|
||||
|
||||
Python
|
||||
~~~~~~
|
||||
|
||||
Odoo requires **Python 3.7** or later to run.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
Use a package manager to download and install Python 3 if needed.
|
||||
|
||||
.. group-tab:: Windows
|
||||
|
||||
`Download the latest version of Python 3 <https://www.python.org/downloads/windows/>`_ and
|
||||
install it.
|
||||
|
||||
During installation, check **Add Python 3 to PATH**, then click **Customize Installation** and
|
||||
make sure that **pip** is checked.
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
Use a package manager (`Homebrew <https://brew.sh/>`_, `MacPorts <https://www.macports.org>`_)
|
||||
to download and install Python 3 if needed.
|
||||
|
||||
.. note::
|
||||
If Python 3 is already installed, make sure that the version is 3.7 or above, as previous
|
||||
versions are not compatible with Odoo.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python3 --version
|
||||
|
||||
.. group-tab:: Windows
|
||||
|
||||
.. code-block:: doscon
|
||||
|
||||
C:\> python --version
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ python3 --version
|
||||
|
||||
Verify that `pip <https://pip.pypa.io>`_ is also installed for this version.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ pip3 --version
|
||||
|
||||
.. group-tab:: Windows
|
||||
|
||||
.. code-block:: doscon
|
||||
|
||||
C:\> pip --version
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ pip3 --version
|
||||
|
||||
PostgreSQL
|
||||
~~~~~~~~~~
|
||||
|
||||
Odoo uses PostgreSQL as its database management system.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
Use a package manager to download and install PostgreSQL (supported versions: 12.0 or above).
|
||||
It can be achieved by executing the following:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo apt install postgresql postgresql-client
|
||||
|
||||
.. group-tab:: Windows
|
||||
|
||||
`Download PostgreSQL <https://www.postgresql.org/download/windows>`_ (supported versions: 12.0
|
||||
or above) and install it.
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
Use `Postgres.app <https://postgresapp.com>`_ to download and install PostgreSQL (supported
|
||||
version: 12.0 or above).
|
||||
|
||||
.. tip::
|
||||
To make the command line tools bundled with Postgres.app available, make sure to set up the
|
||||
`$PATH` variable by following the `Postgres.app CLI tools instructions
|
||||
<https://postgresapp.com/documentation/cli-tools.html>`_.
|
||||
|
||||
By default, the only user is `postgres`. As Odoo forbids connecting as `postgres`, create a new
|
||||
PostgreSQL user.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo -u postgres createuser -s $USER
|
||||
$ createdb $USER
|
||||
|
||||
.. note::
|
||||
Because the PostgreSQL user has the same name as the Unix login, it is possible to connect
|
||||
to the database without a password.
|
||||
|
||||
.. group-tab:: Windows
|
||||
|
||||
#. Add PostgreSQL's `bin` directory (by default:
|
||||
:file:`C:\\Program Files\\PostgreSQL\\<version>\\bin`) to the `PATH`.
|
||||
#. Create a postgres user with a password using the pg admin gui:
|
||||
|
||||
#. Open **pgAdmin**.
|
||||
#. Double-click the server to create a connection.
|
||||
#. Select :menuselection:`Object --> Create --> Login/Group Role`.
|
||||
#. Enter the username in the **Role Name** field (e.g., `odoo`).
|
||||
#. Open the **Definition** tab, enter a password (e.g., `odoo`), and click **Save**.
|
||||
#. Open the **Privileges** tab and switch **Can login?** to `Yes` and **Create database?**
|
||||
to `Yes`.
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo -u postgres createuser -s $USER
|
||||
$ createdb $USER
|
||||
|
||||
.. note::
|
||||
Because the PostgreSQL user has the same name as the Unix login, it is possible to connect
|
||||
to the database without a password.
|
||||
|
||||
.. _install/dependencies:
|
||||
|
||||
Dependencies
|
||||
~~~~~~~~~~~~
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
Using **distribution packages** is the preferred way of installing dependencies.
|
||||
Alternatively, install the Python dependencies with **pip**.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Debian/Ubuntu
|
||||
|
||||
For Debian-based systems, the packages are listed in the `debian/control
|
||||
<{GITHUB_PATH}/debian/control>`_ file of the Odoo sources.
|
||||
|
||||
On Debian/Ubuntu, the following commands should install the required packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd /CommunityPath
|
||||
$ sed -n -e '/^Depends:/,/^Pre/ s/ python3-\(.*\),/python3-\1/p' debian/control | sudo xargs apt-get install -y
|
||||
|
||||
.. tab:: Install with pip
|
||||
|
||||
As some of the Python packages need a compilation step, they require system libraries to
|
||||
be installed.
|
||||
|
||||
On Debian/Ubuntu, the following command should install these required libraries:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo apt install python3-pip libldap2-dev libpq-dev libsasl2-dev
|
||||
|
||||
Odoo dependencies are listed in the :file:`requirements.txt` file located at the root of
|
||||
the Odoo Community directory.
|
||||
|
||||
.. note::
|
||||
The Python packages in :file:`requirements.txt` are based on their stable/LTS
|
||||
Debian/Ubuntu corresponding version at the moment of the Odoo release. For example,
|
||||
for Odoo 15.0, the `python3-babel` package version is 2.8.0 in Debian Bullseye and
|
||||
2.6.0 in Ubuntu Focal. The lowest version is then chosen in the
|
||||
:file:`requirements.txt`.
|
||||
|
||||
.. tip::
|
||||
It can be preferable not to mix Python module packages between different instances of
|
||||
Odoo or with the system. However, it is possible to use `virtualenv
|
||||
<https://pypi.org/project/virtualenv/>`_ to create isolated Python environments.
|
||||
|
||||
Navigate to the path of the Odoo Community installation (:file:`CommunityPath`) and run
|
||||
**pip** on the requirements file to install the requirements for the current user.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd /CommunityPath
|
||||
$ pip install -r requirements.txt
|
||||
|
||||
.. group-tab:: Windows
|
||||
|
||||
Before installing the dependencies, download and install the `Build Tools for Visual
|
||||
Studio <https://visualstudio.microsoft.com/downloads/>`_. Select **C++ build tools** in the
|
||||
**Workloads** tab and install them when prompted.
|
||||
|
||||
Odoo dependencies are listed in the `requirements.txt` file located at the root of the Odoo
|
||||
Community directory.
|
||||
|
||||
.. tip::
|
||||
It can be preferable not to mix Python module packages between different instances of
|
||||
Odoo or with the system. However, it is possible to use `virtualenv
|
||||
<https://pypi.org/project/virtualenv/>`_ to create isolated Python environments.
|
||||
|
||||
Navigate to the path of the Odoo Community installation (`CommunityPath`) and run **pip** on
|
||||
the requirements file in a terminal **with Administrator privileges**:
|
||||
|
||||
.. code-block:: doscon
|
||||
|
||||
C:\> cd \CommunityPath
|
||||
C:\> pip install setuptools wheel
|
||||
C:\> pip install -r requirements.txt
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
Odoo dependencies are listed in the `requirements.txt` file located at the root of the Odoo
|
||||
Community directory.
|
||||
|
||||
.. tip::
|
||||
It can be preferable not to mix Python module packages between different instances of
|
||||
Odoo or with the system. However, it is possible to use `virtualenv
|
||||
<https://pypi.org/project/virtualenv/>`_ to create isolated Python environments.
|
||||
|
||||
Navigate to the path of the Odoo Community installation (`CommunityPath`) and run **pip** on
|
||||
the requirements file:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd /CommunityPath
|
||||
$ pip3 install setuptools wheel
|
||||
$ pip3 install -r requirements.txt
|
||||
|
||||
.. warning::
|
||||
Non-Python dependencies must be installed with a package manager (`Homebrew
|
||||
<https://brew.sh/>`_, `MacPorts <https://www.macports.org>`_).
|
||||
|
||||
#. Download and install the **Command Line Tools**:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ xcode-select --install
|
||||
|
||||
#. Use the package manager to install non-Python dependencies.
|
||||
|
||||
.. note::
|
||||
For languages using a **right-to-left interface** (such as Arabic or Hebrew), the `rtlcss`
|
||||
package is required.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
#. Download and install **nodejs** and **npm** with a package manager.
|
||||
#. Install `rtlcss`:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo npm install -g rtlcss
|
||||
|
||||
.. group-tab:: Windows
|
||||
|
||||
#. Download and install `nodejs <https://nodejs.org/en/download>`_.
|
||||
#. Install `rtlcss`:
|
||||
|
||||
.. code-block:: doscon
|
||||
|
||||
C:\> npm install -g rtlcss
|
||||
|
||||
#. Edit the system environment's variable `PATH` to add the folder where `rtlcss.cmd` is
|
||||
located (typically: :file:`C:\\Users\\<user>\\AppData\\Roaming\\npm\\`).
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
#. Download and install **nodejs** with a package manager (`Homebrew <https://brew.sh/>`_,
|
||||
`MacPorts <https://www.macports.org>`_).
|
||||
#. Install `rtlcss`:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ 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.
|
||||
|
||||
.. _install/source/running_odoo:
|
||||
|
||||
Running Odoo
|
||||
------------
|
||||
|
||||
Once all dependencies are set up, Odoo can be launched by running `odoo-bin`, the command-line
|
||||
interface of the server. It is located at the root of the Odoo Community directory.
|
||||
|
||||
To configure the server, either specify :ref:`command-line arguments <reference/cmdline/server>` or
|
||||
a :ref:`configuration file <reference/cmdline/config>`.
|
||||
|
||||
.. tip::
|
||||
For the Enterprise edition, add the path to the `enterprise` add-ons to the `addons-path`
|
||||
argument. Note that it must come before the other paths in `addons-path` for add-ons to be loaded
|
||||
correctly.
|
||||
|
||||
Common necessary configurations are:
|
||||
|
||||
- PostgreSQL user and password.
|
||||
- Custom addon paths beyond the defaults to load custom modules.
|
||||
|
||||
A typical way to run the server would be:
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd /CommunityPath
|
||||
$ python3 odoo-bin --addons-path=addons -d mydb
|
||||
|
||||
Where `CommunityPath` is the path of the Odoo Community installation, and `mydb` is the name
|
||||
of the PostgreSQL database.
|
||||
|
||||
.. group-tab:: Windows
|
||||
|
||||
.. code-block:: doscon
|
||||
|
||||
C:\> cd CommunityPath/
|
||||
C:\> python odoo-bin -r dbuser -w dbpassword --addons-path=addons -d mydb
|
||||
|
||||
Where `CommunityPath` is the path of the Odoo Community installation, `dbuser` is the
|
||||
PostgreSQL login, `dbpassword` is the PostgreSQL password, and `mydb` is the name of the
|
||||
PostgreSQL database.
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd /CommunityPath
|
||||
$ python3 odoo-bin --addons-path=addons -d mydb
|
||||
|
||||
Where `CommunityPath` is the path of the Odoo Community installation, and `mydb` is the name
|
||||
of the PostgreSQL database.
|
||||
|
||||
After the server has started (the INFO log `odoo.modules.loading: Modules loaded.` is printed), open
|
||||
http://localhost:8069 in a web browser and log into the Odoo database with the base administrator
|
||||
account: use `admin` as the email and, again, `admin` as the password.
|
||||
|
||||
.. tip::
|
||||
- From there, create and manage new :doc:`users <../../applications/general/users/manage_users>`.
|
||||
- The user account used to log into Odoo's web interface differs from the :option:`--db_user
|
||||
<odoo-bin -r>` CLI argument.
|
||||
|
||||
.. seealso::
|
||||
:doc:`The list of CLI arguments for odoo-bin </developer/reference/cli>`
|
||||
@@ -115,7 +115,7 @@ name with your website <domain-name/website-map>`.
|
||||
.. note::
|
||||
- Free domain names are also available for free Odoo Online databases (if you installed one app
|
||||
only, for example). In this case, Odoo reviews your request and your website to avoid abuse.
|
||||
This process may take up to three days.
|
||||
This process can take several days due to the success of the offer.
|
||||
- This is not available for Odoo.sh databases yet.
|
||||
|
||||
.. _domain-name/odoo-manage:
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
|
||||
.. _setup/enterprise:
|
||||
|
||||
===============================
|
||||
Upgrade Community to Enterprise
|
||||
===============================
|
||||
===================================
|
||||
Switch from Community to Enterprise
|
||||
===================================
|
||||
|
||||
Depending on your current installation, there are multiple ways to upgrade
|
||||
your community version.
|
||||
@@ -61,7 +61,7 @@ have your own favourite. You may need to adapt sections to your usual workflow.
|
||||
|
||||
* Shutdown your server
|
||||
* Backup your community database
|
||||
* Update the ``--addons-path`` parameter of your launch command (see :ref:`setup/install/source`)
|
||||
* Update the ``--addons-path`` parameter of your launch command (see :doc:`../install/source`)
|
||||
* Install the web_enterprise module by using
|
||||
|
||||
.. code-block:: console
|
||||
@@ -98,7 +98,7 @@ On Windows
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ odoo.exe -d <database_name> -i web_enterprise --stop-after-init
|
||||
$ ..\python\python.exe odoo-bin -d <database_name> -i web_enterprise --stop-after-init
|
||||
|
||||
* No need to manually launch the server, the service is running.
|
||||
You should be able to connect to your Odoo Enterprise instance using your usual
|
||||
|
||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 39 KiB |
@@ -2,25 +2,15 @@
|
||||
Odoo Online database management
|
||||
===============================
|
||||
|
||||
To manage a database, sign in to https://www.odoo.com and access the `database management page
|
||||
<https://www.odoo.com/my/databases>`_ by clicking on the user icon, then on
|
||||
:guilabel:`My Databases`.
|
||||
To manage a database, go to the `database manager <https://www.odoo.com/my/databases>`_ and sign in
|
||||
as the database administrator.
|
||||
|
||||
.. image:: odoo_online/my-databases.png
|
||||
:align: center
|
||||
:alt: Clicking on the user icon opens a drop-down menu. "My databases" button is highlighted.
|
||||
All the main database management options are available by clicking the database name, except the
|
||||
upgrade option, which can be accessed by clicking the **arrow in a circle** icon next to the
|
||||
database name. It is only displayed if an upgrade is available.
|
||||
|
||||
.. note::
|
||||
Make sure to connect as the administrator of the database that changes will be made on.
|
||||
|
||||
.. image:: odoo_online/dropdown-menu.png
|
||||
:align: right
|
||||
:alt: Clicking on the gear icon opens the drop-down menu.
|
||||
|
||||
Open the drop-down menu next to the database that changes will be made on by clicking on the gear
|
||||
icon.
|
||||
|
||||
Several actions are available:
|
||||
.. image:: odoo_online/database-manager.png
|
||||
:alt: Accessing the database management options
|
||||
|
||||
- :ref:`odoo_online/upgrade`
|
||||
- :ref:`odoo_online/duplicate`
|
||||
@@ -37,39 +27,24 @@ Several actions are available:
|
||||
Upgrade
|
||||
=======
|
||||
|
||||
If the database is *not* on the latest **Online version**, the administrator should receive an
|
||||
invitation to :doc:`upgrade <../upgrade>` the database. A :guilabel:`Rolling Release`` button on the
|
||||
database's main screen proposes an upgrade to the latest version (e.g., 14.0 to 16.1).
|
||||
|
||||
.. important::
|
||||
- | **If the Odoo database's version is lower than the latest major release:**
|
||||
| The database must be upgraded within two months. After these two months, an automatic
|
||||
upgrade is initiated.
|
||||
- | **If the Odoo database's version is equal to or higher than the latest major release:**
|
||||
| Disregard the invitation to upgrade as the database probably wouldn't benefit from new
|
||||
features every two months.
|
||||
|
||||
.. note::
|
||||
Versions that are not supported anymore become deprecated and need to be updated to avoid
|
||||
security issues. Odoo recommends that the company initiate the upgrade, as this method allows for
|
||||
the company to request a test upgrade of the database to check for any discrepancies.
|
||||
Trigger a database upgrade.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../upgrade`
|
||||
- :doc:`supported_versions`
|
||||
For more information about the upgrade process, check out the :doc:`Odoo Online upgrade
|
||||
documentation <../upgrade/odoo_online>`.
|
||||
|
||||
.. _odoo_online/duplicate:
|
||||
|
||||
Duplicate
|
||||
=========
|
||||
|
||||
This allows to make an exact copy of the database to be able to perform testing without compromising
|
||||
the daily operations.
|
||||
Create an exact copy of the database, which can be used to perform testing without compromising
|
||||
daily operations.
|
||||
|
||||
.. important::
|
||||
- By checking :guilabel:`For testing purposes`, all external communication (emails, payments,
|
||||
delivery orders, etc.) are disabled by default on the duplicated database.
|
||||
- Duplicate databases expire automatically after 15 days.
|
||||
- By checking :guilabel:`For testing purposes`, all external actions (emails, payments, delivery
|
||||
orders, etc.) are disabled by default on the duplicated database.
|
||||
- Duplicated databases expire automatically after 15 days.
|
||||
|
||||
.. _odoo_online/rename:
|
||||
|
||||
@@ -83,28 +58,31 @@ Rename the database and its URL.
|
||||
Download
|
||||
========
|
||||
|
||||
Instantly download a ZIP file with a backup of the database.
|
||||
Download a ZIP file containing a backup of the database.
|
||||
|
||||
.. note::
|
||||
Databases are backed up daily according to the `Odoo Cloud SLA
|
||||
Databases are backed up daily as per the `Odoo Cloud Hosting SLA
|
||||
<https://www.odoo.com/cloud-sla>`_.
|
||||
|
||||
.. _odoo_online/domains:
|
||||
|
||||
Domains
|
||||
=======
|
||||
Domain names
|
||||
============
|
||||
|
||||
Configure custom domains to access the database via another URL.
|
||||
Use a custom :doc:`domain name <domain_names>` to access the database via another URL.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`domain_names`
|
||||
.. tip::
|
||||
You can :ref:`register a domain name for free <domain-name/odoo-register>`.
|
||||
|
||||
.. _odoo_online/tags:
|
||||
|
||||
Tags
|
||||
====
|
||||
|
||||
Add tags to sort your databases out. You can search the tags in the search bar.
|
||||
Add tags to easily identify and sort your databases.
|
||||
|
||||
.. tip::
|
||||
You can search for tags in the search bar.
|
||||
|
||||
.. _odoo_online/delete:
|
||||
|
||||
@@ -114,44 +92,43 @@ Delete
|
||||
Delete a database instantly.
|
||||
|
||||
.. danger::
|
||||
Deleting a database means that all data is permanently lost. The deletion is instant and for all
|
||||
users. It is recommended to create a backup of the database before deleting it.
|
||||
Deleting a database means that all data is permanently lost. The deletion is instant and applies
|
||||
to all users. It is recommended to create a backup of the database before deleting it.
|
||||
|
||||
Carefully read the warning message that pops up and proceed only if the implications of deleting a
|
||||
database are fully understood:
|
||||
Carefully read the warning message and only proceed if the implications of deleting a database are
|
||||
fully understood.
|
||||
|
||||
.. image:: odoo_online/delete.png
|
||||
:align: center
|
||||
:alt: A warning message is prompted before deleting a database.
|
||||
:alt: The warning message displayed before deleting a database
|
||||
|
||||
.. note::
|
||||
- Only an administrator can delete a database.
|
||||
- The database name is immediately available for a new database.
|
||||
- It is not possible to delete a database if it is expired or linked to a subscription. If
|
||||
needed, please get in touch with `Odoo Support <https://www.odoo.com/help>`_.
|
||||
- The database name is immediately made available to anyone.
|
||||
- Deleting a database if it has expired or is linked to a subscription is impossible. In that
|
||||
case, contact `Odoo Support <https://www.odoo.com/help>`_.
|
||||
|
||||
.. _odoo_online/contact-support:
|
||||
|
||||
Contact Support
|
||||
===============
|
||||
Contact us
|
||||
==========
|
||||
|
||||
Access the Odoo `support page <https://www.odoo.com/help>`_ with your database's details already
|
||||
Access the `Odoo.com support page <https://www.odoo.com/help>`_ with the database's details already
|
||||
pre-filled.
|
||||
|
||||
.. _odoo_online/users:
|
||||
|
||||
Invite / Remove Users
|
||||
Invite / remove users
|
||||
=====================
|
||||
|
||||
To invite users, fill out the email address of the new user and click on :guilabel:`Invite`. To add
|
||||
multiple users, click on :guilabel:`Add more users`.
|
||||
To invite users, fill out the new user's email address and click :guilabel:`Invite`. To add multiple
|
||||
users, click :guilabel:`Add more users`.
|
||||
|
||||
.. image:: odoo_online/invite-users.png
|
||||
:align: center
|
||||
:alt: Clicking on "Add more users" adds additional email fields.
|
||||
:alt: Inviting a user on a database
|
||||
|
||||
To remove users, select the users to remove and click on :guilabel:`Remove`.
|
||||
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/delete_account`
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 9.6 KiB |
@@ -23,47 +23,76 @@ This matrix shows the support status of every version.
|
||||
|
||||
**Major releases are in bold type.**
|
||||
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| | Odoo Online | Odoo.sh | On-Premise | Release date | End of support |
|
||||
+=================+=============+==========+=============+================+========================+
|
||||
| Odoo saas~16.2 | |green| | N/A | N/A | March 2023 | June 2023 (planned) |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| Odoo saas~16.1 | |green| | N/A | N/A | February 2023 | April 2023 |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| **Odoo 16.0** | |green| | |green| | |green| | October 2022 | October 2025 (planned) |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| Odoo saas~15.2 | |red| | N/A | N/A | March 2022 | January 2023 |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| Odoo saas~15.1 | |red| | N/A | N/A | February 2022 | July 2022 |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| **Odoo 15.0** | |green| | |green| | |green| | October 2021 | October 2024 (planned) |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| **Odoo 14.0** | |green| | |green| | |green| | October 2020 | October 2023 (planned) |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| **Odoo 13.0** | |red| | |red| | |red| | October 2019 | October 2022 |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| Odoo saas~12.3 | |red| | N/A | N/A | August 2019 | |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| **Odoo 12.0** | |red| | |red| | |red| | October 2018 | October 2021 |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| Odoo saas~11.3 | |red| | N/A | N/A | April 2018 | |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| **Odoo 11.0** | |red| | |red| | |red| | October 2017 | October 2020 |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| Odoo 10.saas~15 | |red| | N/A | N/A | March 2017 | |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| Odoo 10.saas~14 | |red| | N/A | N/A | January 2017 | |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| **Odoo 10.0** | |red| | |red| | |red| | October 2016 | October 2019 |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| Odoo 9.saas~11 | |red| | N/A | N/A | May 2016 | |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| **Odoo 9.0** | |red| | N/A | |red| | October 2015 | October 2018 |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| Odoo 8.saas~6 | |red| | N/A | N/A | February 2015 | |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| **Odoo 8.0** | |red| | N/A | |red| | September 2014 | October 2017 |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: auto
|
||||
|
||||
* -
|
||||
- Odoo Online
|
||||
- Odoo.sh
|
||||
- On-Premise
|
||||
- Release date
|
||||
- End of support
|
||||
* - Odoo saas~16.4
|
||||
- |green|
|
||||
- N/A
|
||||
- N/A
|
||||
- August 2023
|
||||
-
|
||||
* - Odoo saas~16.3
|
||||
- |red|
|
||||
- N/A
|
||||
- N/A
|
||||
- June 2023
|
||||
-
|
||||
* - Odoo saas~16.2
|
||||
- |red|
|
||||
- N/A
|
||||
- N/A
|
||||
- March 2023
|
||||
-
|
||||
* - Odoo saas~16.1
|
||||
- |red|
|
||||
- N/A
|
||||
- N/A
|
||||
- February 2023
|
||||
-
|
||||
* - **Odoo 16.0**
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
- October 2022
|
||||
- October 2025 (planned)
|
||||
* - Odoo saas~15.2
|
||||
- |red|
|
||||
- N/A
|
||||
- N/A
|
||||
- March 2022
|
||||
- January 2023
|
||||
* - Odoo saas~15.1
|
||||
- |red|
|
||||
- N/A
|
||||
- N/A
|
||||
- February 2022
|
||||
- July 2022
|
||||
* - **Odoo 15.0**
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
- October 2021
|
||||
- October 2024 (planned)
|
||||
* - **Odoo 14.0**
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
- October 2020
|
||||
- November 2023 (planned)
|
||||
* - **Odoo 13.0**
|
||||
- |red|
|
||||
- |red|
|
||||
- |red|
|
||||
- October 2019
|
||||
- October 2022
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -86,8 +115,10 @@ This matrix shows the support status of every version.
|
||||
I run an older version of Odoo/OpenERP/TinyERP
|
||||
==============================================
|
||||
|
||||
OpenERP 7.0, 6.1, 6.0 and 5.0 is not supported anymore, on any platform.
|
||||
Odoo 12.0, 11.0, 10.0, 9.0, and 8.0 are not supported anymore, on any platform.
|
||||
|
||||
TinyERP 4.0, 3.0, 2.0 and 1.0 is not supported anymore, on any platform.
|
||||
OpenERP 7.0, 6.1, 6.0 and 5.0 are not supported anymore, on any platform.
|
||||
|
||||
TinyERP 4.0, 3.0, 2.0 and 1.0 are not supported anymore, on any platform.
|
||||
|
||||
Even though we don't support older versions, you can always `upgrade from any version <https://upgrade.odoo.com/>`_.
|
||||
|
||||
@@ -46,7 +46,7 @@ Updating Odoo is accomplished by simply reinstalling the latest version of your
|
||||
Edition on top of your current installation. This will preserve your data without any alteration,
|
||||
as long as you do not uninstall PostgreSQL (the database engine that comes with Odoo).
|
||||
|
||||
The main reference for updating is logically our :ref:`installation guide <setup/install>`,
|
||||
The main reference for updating is logically our :doc:`installation guide <../install>`,
|
||||
which explains the common installation methods.
|
||||
|
||||
Updating is also most appropriately accomplished by the person who deployed Odoo initially,
|
||||
|
||||
@@ -85,7 +85,7 @@ From the Odoo.sh editor, in a terminal:
|
||||
|
||||
$ odoo-bin scaffold my_module ~/src/user/
|
||||
|
||||
Or, from your computer, if you have an :ref:`installation of Odoo <setup/install/source>`:
|
||||
Or, from your computer, if you have an :doc:`installation of Odoo <../../install/source>`:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
|
||||
@@ -45,41 +45,101 @@ these databases if they have one, using their regular credentials.
|
||||
|
||||
In addition, they cannot use the webshell nor have access to the server logs.
|
||||
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
| | | User | Admin |
|
||||
+=====================+=================+===========+===========+
|
||||
|Development | History | X | X |
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
| | 1-click connect | X | X |
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
| | Logs | X | X |
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
| | Shell/SSH | X | X |
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
| | Mails | X | X |
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
| | Settings | X | X |
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
|Production & Staging | History | X | X |
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
| | 1-click connect | | X |
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
| | Logs | | X |
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
| | Shell/SSH | | X |
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
| | Mails | | X |
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
| | Monitoring | | X |
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
| | Backups | | X |
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
| | Settings | X | X |
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
|Status | | X | X |
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
|Settings | | | X |
|
||||
+---------------------+-----------------+-----------+-----------+
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: auto
|
||||
|
||||
* -
|
||||
-
|
||||
- User
|
||||
- Admin
|
||||
* - Development
|
||||
- History
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- 1-click connect
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Logs
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Shell/SSH
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Mails
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Upgrade
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- Settings
|
||||
- |green|
|
||||
- |green|
|
||||
* - Production & Staging
|
||||
- History
|
||||
- |green|
|
||||
- |green|
|
||||
* -
|
||||
- 1-click connect
|
||||
-
|
||||
- |green|
|
||||
* -
|
||||
- Logs
|
||||
-
|
||||
- |green|
|
||||
* -
|
||||
- Shell/SSH
|
||||
-
|
||||
- |green|
|
||||
* -
|
||||
- Mails
|
||||
-
|
||||
- |green|
|
||||
* -
|
||||
- Monitoring
|
||||
-
|
||||
- |green|
|
||||
* -
|
||||
- Backups
|
||||
-
|
||||
- |green|
|
||||
* -
|
||||
- Upgrade
|
||||
-
|
||||
- |green|
|
||||
* -
|
||||
- Settings
|
||||
- |green|\*
|
||||
- |green|
|
||||
* - Status
|
||||
-
|
||||
- |green|
|
||||
- |green|
|
||||
* - Settings
|
||||
-
|
||||
-
|
||||
- |green|
|
||||
|
||||
.. note::
|
||||
\* Only in staging branches
|
||||
|
||||
.. |green| raw:: html
|
||||
|
||||
<span class="text-success" style="font-size: 32px; line-height: 0.5">●</span>
|
||||
|
||||
.. |orange| raw:: html
|
||||
|
||||
<span class="text-warning" style="font-size: 32px; line-height: 0.5">●</span>
|
||||
|
||||
.. |red| raw:: html
|
||||
|
||||
<span class="text-danger" style="font-size: 32px; line-height: 0.5">●</span>
|
||||
|
||||
Public Access
|
||||
=============
|
||||
|
||||
@@ -2,29 +2,91 @@
|
||||
Odoo Online
|
||||
===========
|
||||
|
||||
Requesting a test upgrade
|
||||
=========================
|
||||
Odoo databases can be manually upgraded directly from the main Odoo website. To upgrade an Odoo
|
||||
database, navigate to the `database manager <https://www.odoo.com/my/databases>`_ page and sign in.
|
||||
|
||||
#. Go to your `database manager <https://www.odoo.com/my/databases/>`_
|
||||
#. Click on your profile icon and select *My Databases*.
|
||||
The database manager page displays all of the Odoo databases associated with the user's account. Any
|
||||
databases that are not already on the most recent version of Odoo display an **arrow in a circle**
|
||||
icon next to the database name, indicating that the database can be upgraded.
|
||||
|
||||
.. image:: odoo_online/accessing-my-databases.png
|
||||
:alt: Selecting My Databases under my profile
|
||||
.. image:: odoo_online/databases-page.png
|
||||
:align: center
|
||||
:alt: The database manager page with an upgrade button next to the name of a database.
|
||||
|
||||
#. Click on the up arrow button next to your main database name to proceed to the test upgrade.
|
||||
.. important::
|
||||
- If the database's version is **lower** than the latest major release: the database must be
|
||||
upgraded within two months. After these two months, an automatic upgrade is initiated.
|
||||
- If the database's version is **equal** to or **higher** than the latest major release:
|
||||
you can disregard the invitation to upgrade, as the database probably would not benefit from
|
||||
new features every two months.
|
||||
|
||||
.. image:: odoo_online/upgrade-option.png
|
||||
:alt: Selecting the action settings icon
|
||||
If a database is *not* on the latest online version, its administrator should receive an invitation
|
||||
to upgrade on the database's dashboard, displayed as an **arrow in a circle**.
|
||||
|
||||
#. In the pop-up message that appears, select the target version and then :guilabel:`Test` as
|
||||
purpose.
|
||||
.. image:: odoo_online/database-notification.png
|
||||
:alt: Invitation to upgrade on the database dashboard.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Production` purpose doesn't appear if you didn't test your upgraded database at
|
||||
least once.
|
||||
.. note::
|
||||
Versions that are not supported anymore become deprecated and must be updated to avoid
|
||||
security issues. It is recommended to initiate the upgrade yourself and not wait for the
|
||||
automatic upgrade, as the former method allows you to request a test upgrade of the database to
|
||||
check for any discrepancies.
|
||||
|
||||
#. This triggers the automated upgrade process. A confirmation email is then sent to you with the
|
||||
the link to the upgraded database or to provide information if the upgrade failed.
|
||||
Test database
|
||||
=============
|
||||
|
||||
.. note::
|
||||
You can also see and access your test database from your *My Databases* page.
|
||||
Click on the **arrow in a circle** icon to start the upgrade process. On the :guilabel:`Upgrade your
|
||||
database` pop-up, select the version of Odoo that the platform will be upgraded to. In the
|
||||
:guilabel:`Email to notify` field, enter an email address that will receive email notifications
|
||||
about the database upgrade.
|
||||
|
||||
There is also a :guilabel:`Purpose` section on the pop-up that is used to specify the reason for the
|
||||
upgrade. However, at this stage of the process, the only selectable option is :guilabel:`Test`, as
|
||||
Odoo requires users to create a test copy of the upgraded database before converting the actual
|
||||
database.
|
||||
|
||||
.. image:: odoo_online/upgrade-pop-up.png
|
||||
:align: center
|
||||
:alt: The "Upgrade your database" pop-up.
|
||||
|
||||
After filling out the form, click the :guilabel:`Upgrade` button. The pop-up disappears and the
|
||||
database being upgraded shows a red :guilabel:`Upgrade in progress` tag next to its name. An email
|
||||
confirming that the upgrade is in progress is also sent to the email address specified on the
|
||||
pop-up.
|
||||
|
||||
.. image:: odoo_online/upgrade-in-progress.png
|
||||
:align: center
|
||||
:alt: The "Upgrade in progress" tag next to the database name.
|
||||
|
||||
Once the upgrade is complete, a new test database appears on the `database manager
|
||||
<https://www.odoo.com/my/databases>`_ page. To access the test database, click the drop-down arrow
|
||||
(:guilabel:`⯆`) to the left of the main database's name. Doing so makes the test version appear
|
||||
below it. Finally, click the green :guilabel:`Connect` button on the right side of the test
|
||||
version's row to go to the database.
|
||||
|
||||
.. image:: odoo_online/test-database.png
|
||||
:align: center
|
||||
:alt: A test database on the database manager page.
|
||||
|
||||
Except for being on the newer version of Odoo, the test database is an exact copy of the one being
|
||||
upgraded. It is important to do extensive testing in this database to ensure that the upgrade has
|
||||
not altered or corrupted any data, and that all workflows still proceed as expected.
|
||||
|
||||
Production database
|
||||
===================
|
||||
|
||||
After confirming the integrity of the new version, return to the `database manager
|
||||
<https://www.odoo.com/my/databases>`_ page. Once again, click on the **arrow in a circle** icon next
|
||||
to the database being upgraded. The :guilabel:`Upgrade your database` pop-up appears as before,
|
||||
except that there is now a :guilabel:`Production` option under the :guilabel:`Purpose` section.
|
||||
|
||||
Select the :guilabel:`Production` option and then click :guilabel:`Upgrade` to begin the upgrade
|
||||
process. As before, a notification email is sent to the email address provided and a red
|
||||
:guilabel:`Upgrade in progress` tag appears next to the name of the database.
|
||||
|
||||
The production database is then taken offline and will be upgraded automatically. The time it takes
|
||||
to upgrade the production database should be similar to the time that was necessary to upgrade the
|
||||
test database. Make sure to inform database users of the scheduled downtime.
|
||||
|
||||
After the upgrade is finished, the :guilabel:`Upgrade in progress` tag disappears and the database
|
||||
is upgraded to the version specified.
|
||||
|
||||
|
Before Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 15 KiB |
@@ -85,6 +85,8 @@ You can edit the accounting information and bank account number according to you
|
||||
- :doc:`get_started/multi_currency`
|
||||
- :doc:`bank/transactions`
|
||||
|
||||
.. _bank_accounts/suspense:
|
||||
|
||||
Suspense account
|
||||
----------------
|
||||
|
||||
|
||||
@@ -188,6 +188,8 @@ you will see the follow-up message and all overdue invoices.
|
||||
|
||||
.. image:: customer_invoices/invoice12.png
|
||||
|
||||
.. _customer-invoices/aging-report:
|
||||
|
||||
Customer aging report:
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -228,7 +230,9 @@ the material has been shipped to the customer.
|
||||
:titlesonly:
|
||||
|
||||
customer_invoices/overview
|
||||
customer_invoices/customer_addresses
|
||||
customer_invoices/payment_terms
|
||||
customer_invoices/terms_conditions
|
||||
customer_invoices/cash_discounts
|
||||
customer_invoices/credit_notes
|
||||
customer_invoices/cash_rounding
|
||||
|
||||
@@ -2,102 +2,116 @@
|
||||
Credit notes and refunds
|
||||
========================
|
||||
|
||||
A **credit note**, or **credit memo**, is a document issued
|
||||
to a customer that notifies them that they have been credited
|
||||
a certain amount.
|
||||
A **credit/debit note**, or **credit/debit memo**, is a document issued to a customer that notifies
|
||||
them that they have been *credited/debited* a certain amount.
|
||||
|
||||
There are several reasons that can lead to a credit note, such as:
|
||||
* a mistake in the invoice
|
||||
* a return of the goods, or a rejection of the services
|
||||
* the goods delivered are damaged
|
||||
Several use cases can lead to a credit note, such as:
|
||||
|
||||
- a mistake in the invoice
|
||||
- a return of the goods, or a rejection of the services
|
||||
- the goods delivered are damaged
|
||||
|
||||
Debit notes are less common but are most frequently used to track debts owed by customers or to
|
||||
vendors because of modifications to confirmed customer invoices or vendor bills.
|
||||
|
||||
.. note::
|
||||
Issuing a credit note is the only legal way to cancel,
|
||||
refund or modify a validated invoice. Don’t forget to
|
||||
*register the payment* afterward if you need to send money
|
||||
back to your customer.
|
||||
Issuing a credit/debit note is the only legal way to cancel, refund, or modify a validated
|
||||
invoice. Do not forget to **register the payment** afterward if you need to send money back to
|
||||
your customer and/or validate the
|
||||
:doc:`return </applications/sales/sales/products_prices/returns>` if a storable product is
|
||||
returned.
|
||||
|
||||
Issue a Credit Note
|
||||
Issue a credit note
|
||||
===================
|
||||
|
||||
You can create a credit note from scratch by going to
|
||||
:menuselection:`Accounting --> Customers --> Credit Notes`,
|
||||
and by clicking on *Create*. Filling the Credit Note’s form
|
||||
works the same way as the Invoice’s form.
|
||||
You can create a credit note from scratch by going to :menuselection:`Accounting --> Customers -->
|
||||
Credit Notes`, and by clicking on :guilabel:`Create`. Filling out a credit note form works the same
|
||||
way as an invoice form.
|
||||
|
||||
However, most of the time, credit notes are generated directly
|
||||
from the invoices they are related to.
|
||||
|
||||
To do so, open the *Customer Invoice*, and click on *Add Credit Note*.
|
||||
|
||||
.. image:: credit_notes/credit_notes01.png
|
||||
:align: center
|
||||
However, most of the time, credit notes are generated directly from the related invoices. To do so,
|
||||
go to :menuselection:`Accounting --> Customers --> Invoices`, open the related **customer invoice**,
|
||||
and click on :guilabel:`Add Credit Note`.
|
||||
|
||||
You can choose between three options:
|
||||
- Partial Refund
|
||||
- Full Refund
|
||||
- Full refund and new draft invoice
|
||||
|
||||
- :guilabel:`Partial Refund`
|
||||
- :guilabel:`Full Refund`
|
||||
- :guilabel:`Full refund and new draft invoice`
|
||||
|
||||
.. note::
|
||||
Credit Notes’ numbers start with “R” and are followed by the
|
||||
number of the document they are related to (e.g., RINV/2019/0004).
|
||||
A credit note sequence starts with `R` and is followed by the number of the related document
|
||||
(e.g., RINV/2019/0004 is related to the invoice INV/2019/0004).
|
||||
|
||||
Partial Refund
|
||||
Partial refund
|
||||
--------------
|
||||
|
||||
Odoo creates a draft credit note already prefilled with all the
|
||||
necessary information from the original invoice.
|
||||
|
||||
This is the option to choose to do a partial refund, or if you
|
||||
want to modify any detail on the credit note.
|
||||
When selecting the :guilabel:`Partial Refund` option, Odoo creates a draft credit note already
|
||||
prefilled with all the necessary information from the original invoice. This is the option to choose
|
||||
if you wish to do a partial refund or if you want to modify any detail of the credit note.
|
||||
|
||||
.. note::
|
||||
This is the only option available for invoices that are already marked as *Paid*.
|
||||
This is the only option for invoices marked as *in payment* or *paid*.
|
||||
|
||||
Full Refund
|
||||
Full refund
|
||||
-----------
|
||||
|
||||
Odoo creates a credit note, automatically validates it, and
|
||||
reconciles the original invoice with it.
|
||||
When selecting the :guilabel:`Full Refund` option, Odoo creates a credit note, automatically
|
||||
validates it, and reconciles it with the related invoice.
|
||||
|
||||
.. image:: credit_notes/credit_notes02.png
|
||||
:align: center
|
||||
:alt: Full refund credit note.
|
||||
|
||||
This is the option to choose to do a full refund or cancel
|
||||
a validated invoice.
|
||||
This is the option to choose for a full refund or to **cancel** a *validated* invoice.
|
||||
|
||||
Full refund and new draft invoice
|
||||
---------------------------------
|
||||
|
||||
Odoo creates a credit note, automatically validates it, reconciles
|
||||
the original invoice with it, and open a new draft invoice
|
||||
When selecting the :guilabel:`Full refund and new draft invoice` option, Odoo creates a credit note,
|
||||
automatically validates it, reconciles it with the related invoice, and opens a new draft invoice
|
||||
prefilled with the same details from the original invoice.
|
||||
|
||||
This is the option to choose to modify the content of a validated invoice.
|
||||
This is the option to **modify** the content of a *validated* invoice.
|
||||
|
||||
Record a Vendor Refund
|
||||
Issue a debit note
|
||||
==================
|
||||
|
||||
You can create a debit note from scratch by going to :menuselection:`Accounting --> Customers -->
|
||||
Invoices` or by clicking on the related invoice you wish to issue a debit note for. On the invoice
|
||||
form view, click :guilabel:`Add debit note`, fill in the information, and click :guilabel:`Create`.
|
||||
|
||||
Record a vendor refund
|
||||
======================
|
||||
|
||||
**Vendor Refunds** are recorded the same way you would do with invoices’ credit notes:
|
||||
**Vendor refunds** are recorded the same way as credit notes:
|
||||
|
||||
You can either create a credit note from scratch by going
|
||||
to :menuselection:`Accounting --> Vendors --> Refund`, and
|
||||
by clicking on *Create*, or by opening the validated *Vendor Bill*,
|
||||
and clicking on *Add Credit Note*.
|
||||
You can either create a credit note from scratch by going to :menuselection:`Accounting --> Vendors
|
||||
--> Refund`, and by clicking on :guilabel:`Create`; or by opening the related **vendor bill**, and
|
||||
clicking on :guilabel:`Add Credit Note`.
|
||||
|
||||
Journal Entries
|
||||
Record a debit note
|
||||
===================
|
||||
|
||||
**Debit notes** from vendors are recorded in a similar way to how they are issued to customers:
|
||||
|
||||
Go to :menuselection:`Accounting --> Vendors --> Bills`, open the related bill you wish to record a
|
||||
debit note for, and click :guilabel:`Add debit note`. Fill in the information, and click
|
||||
:guilabel:`Create debit note`.
|
||||
|
||||
Journal entries
|
||||
===============
|
||||
|
||||
Issuing a credit note from an invoice creates a **reverse entry**
|
||||
that zeroes out the journal items generated by the original invoice.
|
||||
Issuing a credit/debit note from an invoice/bill creates a **reverse entry** that zeroes out the
|
||||
journal items generated by the original invoice.
|
||||
|
||||
Here is an example of an invoice’s journal entry:
|
||||
|
||||
.. image:: credit_notes/credit_notes03.png
|
||||
:align: center
|
||||
.. example::
|
||||
The journal invoice of an entry:
|
||||
|
||||
And here is the credit note’s journal entry generated to reverse
|
||||
the original invoice above:
|
||||
.. image:: credit_notes/credit_notes03.png
|
||||
:alt: Invoice journal entry.
|
||||
|
||||
.. image:: credit_notes/credit_notes04.png
|
||||
:align: center
|
||||
And here is the credit note’s journal entry generated to reverse
|
||||
the original invoice above:
|
||||
|
||||
.. image:: credit_notes/credit_notes04.png
|
||||
:alt: Credit note journal entry reverses the invoice journal entry.
|
||||
|
||||
|
Before Width: | Height: | Size: 3.8 KiB |
@@ -0,0 +1,39 @@
|
||||
==============================
|
||||
Delivery and invoice addresses
|
||||
==============================
|
||||
|
||||
Companies often have multiple locations, and it is common that a customer invoice should be sent to
|
||||
one address and the delivery should be sent to another. Odoo's **Customer Addresses** feature is
|
||||
designed to handle this scenario by making it easy to specify which address to use for each case.
|
||||
|
||||
.. seealso::
|
||||
:doc:`overview`
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
To specify a sales order's invoice and delivery addresses, first go to :menuselection:`Accounting
|
||||
--> Configuration --> Settings`. In the :guilabel:`Customer Invoices` section, enable
|
||||
:guilabel:`Customer Addresses` and click :guilabel:`Save`.
|
||||
|
||||
On quotations and sales orders, there are now fields for :guilabel:`Invoice Address` and
|
||||
:guilabel:`Delivery Address`. If the customer has an invoice or delivery address listed on their
|
||||
contact record, the corresponding field will use that address by default, but any contact's address
|
||||
can be used instead.
|
||||
|
||||
Invoice and deliver to different addresses
|
||||
==========================================
|
||||
|
||||
Delivery orders and their delivery slip reports use the address set as the :guilabel:`Delivery
|
||||
Address` on the sales order. By default, invoice reports show both the shipping address and the
|
||||
invoice address to assure the customer that the delivery is going to the correct location.
|
||||
|
||||
Emails also go to different addresses. The quotation and sales order are sent to the main contact's
|
||||
email, as usual, but the invoice is sent to the email of the address set as the
|
||||
:guilabel:`Invoice Address` on the sales order.
|
||||
|
||||
.. note::
|
||||
- Reports, such as the delivery slip and invoice report, can be :doc:`customized using Studio
|
||||
</applications/productivity/studio/pdf_reports>`.
|
||||
- If :doc:`Send by Post <snailmail>` is checked when you click :guilabel:`Send & Print`, the
|
||||
invoice will be mailed to the invoice address.
|
||||
@@ -21,7 +21,7 @@ transportation, insurance, customs clearance, and other relevant aspects of the
|
||||
- **CPT**: Carriage paid to
|
||||
- **CIP**: Carriage and insurance paid to
|
||||
- **DPU**: Delivered at place unloaded
|
||||
- **DPA**: Delivered at place
|
||||
- **DAP**: Delivered at place
|
||||
- **DDP**: Delivered duty paid
|
||||
|
||||
.. seealso::
|
||||
|
||||
@@ -2,120 +2,141 @@
|
||||
Payment terms and installment plans
|
||||
===================================
|
||||
|
||||
**Payment Terms** specify all the conditions under which a sale is paid, mostly to ensure customers
|
||||
pay their invoices correctly and on time.
|
||||
**Payment terms** specify all the conditions of a sale's payment to help ensure customers pay their
|
||||
invoices correctly and on time.
|
||||
|
||||
Payment Terms can be applied to sales orders, customer invoices, supplier bills, and contacts. These
|
||||
conditions cover:
|
||||
Payment terms are generally defined on documents such as sales orders, customer invoices, and
|
||||
vendor bills. Payment terms cover:
|
||||
|
||||
- The due date
|
||||
- Some discounts
|
||||
- Any other condition on the payment
|
||||
|
||||
Defining Payment Terms automatically calculates the payments' due dates. This is particularly
|
||||
helpful for managing installment plans.
|
||||
- The due date(s)
|
||||
- Early payment discounts
|
||||
- Any other conditions on the payment
|
||||
|
||||
An **installment plan** allows the customers to pay an invoice in parts, with the amounts and
|
||||
payment dates defined beforehand by the seller.
|
||||
|
||||
**Examples of Payment Terms:**
|
||||
|
||||
- | **Immediate Payment**
|
||||
| The full payment is due on the day of the invoice's issuance.
|
||||
- | **15 Days** (or **Net 15**)
|
||||
| The full payment is due 15 days after the invoice date.
|
||||
- | **21 MFI**
|
||||
| The full payment is due by the 21st of the month following the invoice date.
|
||||
- | **2% 10, Net 30 EOM**
|
||||
| 2% :doc:`cash discount <cash_discounts>` if the payment is received within ten days. Otherwise,
|
||||
the full payment is due at the end of the month following the invoice date.
|
||||
.. example::
|
||||
Immediate Payment
|
||||
The full payment is due on the day of the invoice's issuance.
|
||||
15 Days (or Net 15)
|
||||
The full payment is due 15 days after the invoice date.
|
||||
21 MFI
|
||||
The full payment is due by the 21st of the month following the invoice date.
|
||||
30% Advance End of Following Month
|
||||
30% is due on the day of the invoice's issuance. The remaining balance is due at the end of the
|
||||
following month.
|
||||
2% 10, Net 30 EOM
|
||||
A 2% :doc:`cash discount <cash_discounts>` if the payment is received within ten days.
|
||||
Otherwise, the full payment is due at the end of the month following the invoice date.
|
||||
|
||||
.. note::
|
||||
Payment terms are not to be confused with down payment invoices. If, for a specific order, you
|
||||
issue several invoices to your customer, that is neither a payment term nor an installment plan,
|
||||
but an invoicing policy.
|
||||
|
||||
.. note::
|
||||
This document is about the *Payment Terms* feature, not *Terms & Conditions*.
|
||||
- Payment terms are not to be confused with :doc:`down payment invoices
|
||||
</applications/sales/sales/invoicing/down_payment>`. If, for a specific order, you issue
|
||||
multiple invoices to your customer, that is neither a payment term nor an installment plan but
|
||||
an invoicing policy.
|
||||
- This page is about the *payment terms* feature, not :doc:`terms & conditions
|
||||
<terms_conditions>`, which can be used to declare contractual obligations regarding content
|
||||
use, return policies, and other policies surrounding the sale of goods and services.
|
||||
|
||||
.. seealso::
|
||||
- `Odoo Tutorials: payment terms <https://www.odoo.com/slides/slide/payment-terms-1679>`_
|
||||
- :doc:`cash_discounts`
|
||||
- `Odoo Tutorials: Payment Terms <https://www.odoo.com/slides/slide/payment-terms-1679>`_
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Go to :menuselection:`Accounting --> Configuration --> Payment Terms` and click on *Create*.
|
||||
To create new payment terms, follow these steps:
|
||||
|
||||
The **Description on the Invoice** is the text displayed on the document (sale order, invoice,
|
||||
etc.).
|
||||
#. Go to :menuselection:`Accounting --> Configuration --> Payment Terms` and click on
|
||||
:guilabel:`New`.
|
||||
#. Enter a name in the :guilabel:`Payment Terms` field. This field is the name displayed in the
|
||||
database and is not customer-facing.
|
||||
#. Enter the text to be displayed on the document (sales order, invoice, etc.) in the
|
||||
:guilabel:`Description on the Invoice` field.
|
||||
#. Tick the :guilabel:`Display terms on invoice` checkbox to display a breakdown of each payment and
|
||||
its due date on the invoice report, if desired.
|
||||
#. In the :guilabel:`Terms` section, add a set of rules (terms) to define what needs to be paid and
|
||||
by which due date(s). Defining terms automatically calculates the payments' due date(s). This is
|
||||
particularly helpful for managing **installment plans** (:dfn:`payment terms with multiple
|
||||
terms`).
|
||||
|
||||
In the **Terms** section, you can add a set of rules, called *terms*, to define what needs to be
|
||||
paid and by which due date.
|
||||
|
||||
To add a term, click on *Add a line*, and define its *Type*, *Value*, and *Due Date Computation*.
|
||||
|
||||
.. important::
|
||||
- Terms are computed in the order they are set up.
|
||||
- The **balance** should always be used for the last line.
|
||||
|
||||
In the following example, 30% is due on the day of issuance, and the balance is due at the end of
|
||||
the following month.
|
||||
|
||||
.. image:: payment_terms/configuration.png
|
||||
:align: center
|
||||
:alt: Example of Payment Terms. The last line is the balance due on the 31st of the following
|
||||
month.
|
||||
|
||||
Using Payment Terms
|
||||
===================
|
||||
|
||||
Payment Terms can be defined in the **Due Date** field, with the **Terms** drop-down list, on:
|
||||
|
||||
- | **Quotations**
|
||||
| To set specific payment terms automatically on all invoices generated from a quotation.
|
||||
- | **Customer Invoices**
|
||||
| To set specific payment terms on an invoice.
|
||||
- | **Vendor Bills**
|
||||
| To set specific payment terms on a bill. This is mostly useful when you need to manage vendor
|
||||
terms with several installments. Otherwise, setting the *Due Date* is enough.
|
||||
To add a term, click on :guilabel:`Add a line`, define its :guilabel:`Due Type` and
|
||||
:guilabel:`Value`, and fill out the appropriate fields to define when the term is due, including
|
||||
any :doc:`discounts <cash_discounts>`. Due dates are calculated by taking the invoice/bill date,
|
||||
first adding the :guilabel:`Months`, and then adding the :guilabel:`Days`. If the :guilabel:`End
|
||||
of month` toggle is enabled, the due date will then be the end of that month, plus any
|
||||
:guilabel:`Days after End of month`.
|
||||
|
||||
.. tip::
|
||||
You can also define a **Due Date** manually. If Payment Terms are already defined, empty the
|
||||
field so you can select a date.
|
||||
To instead specify a number of days *before the end of the month*, use a negative value in the
|
||||
:guilabel:`Days after End of month` field.
|
||||
|
||||
Payment Terms can be defined with the **Payment Terms** field on:
|
||||
To test that your payment terms are configured correctly, enter an invoice amount and invoice date
|
||||
in the :guilabel:`Example` section to generate the payments that would be due and their due dates
|
||||
using these payment terms.
|
||||
|
||||
- | **Contacts**
|
||||
| To set specific payment terms automatically on new sales orders, invoices, and bills of a
|
||||
contact. This can be modified in the contact’s *Form View*, under the *Sales & Purchase* tab.
|
||||
.. important::
|
||||
- Terms are computed in the order of their due dates.
|
||||
- The **balance** should always be used for the last line.
|
||||
|
||||
Journal Entries
|
||||
.. example::
|
||||
In the following example, 30% is due on the day of issuance, and the balance is due at the end of
|
||||
the following month.
|
||||
|
||||
.. image:: payment_terms/configuration.png
|
||||
:alt: Example of Payment Terms. The last line is the balance due on the 31st of the following
|
||||
month.
|
||||
|
||||
Using payment terms
|
||||
===================
|
||||
|
||||
Payment terms can be defined using the :guilabel:`Payment Terms` field on:
|
||||
|
||||
- **Contacts:** To automatically set default payment terms on a contact's new sales orders,
|
||||
invoices, and bills. This can be modified in the contact form, under the :guilabel:`Sales &
|
||||
Purchase` tab.
|
||||
- **Quotations/Sales Orders:** To set specific payment terms automatically on all invoices generated
|
||||
from a quotation or sales order.
|
||||
|
||||
Payment terms can be defined using the :guilabel:`Due Date` field, with the :guilabel:`Terms`
|
||||
drop-down list on:
|
||||
|
||||
- **Customer invoices:** To set specific payment terms on an invoice.
|
||||
- **Vendor bills:** To set specific payment terms on a bill.
|
||||
|
||||
.. tip::
|
||||
Setting payment terms on a vendor bill is mostly useful for managing vendor terms with multiple
|
||||
installments or cash discounts. Otherwise, manually setting the **due date** is enough. If
|
||||
payment terms are already defined, empty the field to select a date.
|
||||
|
||||
Journal entries
|
||||
===============
|
||||
|
||||
Invoices with specific Payment Terms generate different *Journal Entries*, with one *Journal Item*
|
||||
for every computed *Due Date*.
|
||||
Invoices with specific payment terms generate different *journal entries*, with one *journal item*
|
||||
for every computed *due date*.
|
||||
|
||||
This makes for easier *Follow-ups* and *Reconciliation* since Odoo takes each due date into account,
|
||||
rather than just the balance due date. It also helps to get an accurate *Aged Receivable report*.
|
||||
This makes for easier :doc:`follow-ups </applications/finance/accounting/payments/follow_up>` and
|
||||
:doc:`reconciliation </applications/finance/accounting/bank/reconciliation>` since Odoo takes each
|
||||
due date into account, rather than just the balance due date. It also helps to get an accurate
|
||||
:ref:`aged receivable report <customer-invoices/aging-report>`.
|
||||
|
||||
.. image:: payment_terms/journal-entry.png
|
||||
:align: center
|
||||
:alt: The amount debited on the Account Receivable is split into two Journal Items with distinct
|
||||
Due Dates
|
||||
.. example::
|
||||
.. image:: payment_terms/journal-entry.png
|
||||
:alt: The amount debited to the account receivable is split into two journal items with
|
||||
distinct due dates
|
||||
|
||||
In this example, an invoice of $1000 has been issued with the following payment terms: *30% is due
|
||||
on the day of issuance, and the balance is due at the end of the following month.*
|
||||
In this example, an invoice of $1000 has been issued with the following payment terms: *30% is
|
||||
due on the day of issuance, and the balance is due at the end of the following month.*
|
||||
|
||||
+----------------------+-------------+---------+---------+
|
||||
| Account | Due date | Debit | Credit |
|
||||
+======================+=============+=========+=========+
|
||||
| Account Receivable | February 21 | 300 | |
|
||||
+----------------------+-------------+---------+---------+
|
||||
| Account Receivable | March 31 | 700 | |
|
||||
+----------------------+-------------+---------+---------+
|
||||
| Product Sales | | | 1000 |
|
||||
+----------------------+-------------+---------+---------+
|
||||
+----------------------+-------------+---------+---------+
|
||||
| Account | Due date | Debit | Credit |
|
||||
+======================+=============+=========+=========+
|
||||
| Account Receivable | February 21 | 300 | |
|
||||
+----------------------+-------------+---------+---------+
|
||||
| Account Receivable | March 31 | 700 | |
|
||||
+----------------------+-------------+---------+---------+
|
||||
| Product Sales | | | 1000 |
|
||||
+----------------------+-------------+---------+---------+
|
||||
|
||||
The $1000 debited on the Account Receivable is split into two distinct *Journal Items*. Both of
|
||||
them have their own **Due Date**.
|
||||
The $1000 debited to the account receivable is split into two distinct journal items. Both of
|
||||
them have their own due date.
|
||||
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 22 KiB |
@@ -0,0 +1,39 @@
|
||||
==================================
|
||||
Default terms and conditions (T&C)
|
||||
==================================
|
||||
|
||||
Specifying terms and conditions is essential to establish important contractual points, such as
|
||||
return and refunds, warranty, and after-sale services.
|
||||
|
||||
You can add default terms and conditions at the bottom of all customer invoices, sales orders, and
|
||||
quotations, either as text or a link to a web page.
|
||||
|
||||
.. seealso::
|
||||
`Odoo Tutorial: Terms & Conditions <https://www.odoo.com/slides/slide/terms-conditions-1680>`_
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Go to :menuselection:`Accounting --> Configuration --> Settings`. Under the :guilabel:`Customer
|
||||
Invoices`, enable :guilabel:`Default Terms & Conditions`. By default, the :guilabel:`Add a Note`
|
||||
option is selected, and the terms and conditions are displayed at the bottom of the document. Enter
|
||||
the terms and conditions in the text box below.
|
||||
|
||||
.. image:: terms_conditions/terms-note.png
|
||||
:alt: Example of terms and conditions as a note
|
||||
|
||||
.. tip::
|
||||
You can also add a PDF version of your terms and conditions as an attachment when sending the
|
||||
document via email. Edit the email templates if you want to include them by default.
|
||||
|
||||
Alternatively, to display the terms and conditions on a web page, select the :guilabel:`Add a link
|
||||
to a Web Page` option and click :guilabel:`Save`. Click :guilabel:`Update Terms`, edit the
|
||||
content, and click :guilabel:`Save`. The link to that page is then added as a note in your document.
|
||||
|
||||
.. note::
|
||||
You can edit the layout and content of the page using the :doc:`Website
|
||||
</applications/websites/website>` app. If the Website app is activated, the :guilabel:`Edit in
|
||||
Website Builder` option then replaces :guilabel:`Update Terms`.
|
||||
|
||||
.. image:: terms_conditions/terms-webpage.png
|
||||
:alt: Example of terms and conditions as a web page
|
||||
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 12 KiB |
@@ -187,3 +187,6 @@ To do so, check the :guilabel:`Deprecated` box in the account's settings, and sa
|
||||
* :doc:`../vendor_bills/deferred_expenses`
|
||||
* :doc:`../customer_invoices/deferred_revenues`
|
||||
* :doc:`../../fiscal_localizations`
|
||||
* `Odoo Tutorials: Chart of accounts <https://www.odoo.com/slides/slide/chart-of-accounts-1630>`_
|
||||
* `Odoo Tutorials: Update your chart of accounts
|
||||
<https://www.odoo.com/slides/slide/update-your-chart-of-accounts-1658>`_
|
||||
|
||||
@@ -101,8 +101,7 @@ Journals
|
||||
If a currency is set on a **journal**, that journal only handles transactions in that currency.
|
||||
|
||||
To do so, go to :menuselection:`Accounting --> Configuration --> Journals`, open the journal you
|
||||
want to edit, and select a currency in the field :guilabel:`Currency`. If left empty, all active
|
||||
currencies are handled instead of just one.
|
||||
want to edit, and select a currency in the field :guilabel:`Currency`.
|
||||
|
||||
.. image:: multi_currency/journal-currency.png
|
||||
:align: center
|
||||
@@ -118,7 +117,8 @@ Multi-currency accounting
|
||||
Invoices, bills, and other documents
|
||||
------------------------------------
|
||||
|
||||
For all documents, you can select the currency and journal to use for the transaction.
|
||||
For all documents, you can select the currency and journal to use for the transaction on the
|
||||
document itself.
|
||||
|
||||
.. image:: multi_currency/currency-field.png
|
||||
:align: center
|
||||
@@ -139,13 +139,13 @@ To register a payment in a currency other than your company's main currency, cli
|
||||
|
||||
.. _multi-currency/mca-statements:
|
||||
|
||||
Bank statements
|
||||
---------------
|
||||
Bank transactions
|
||||
-----------------
|
||||
|
||||
When creating or importing bank statements, the amount is in the company's main currency. To see
|
||||
additional fields related to foreign currencies, click on the **columns dropdown button**
|
||||
(:guilabel:`⋮`) next to :guilabel:`Amount`, and check :guilabel:`Amount Currency` and
|
||||
:guilabel:`Foreign Currency`.
|
||||
When creating or importing bank transactions, the amount is in the company's main currency. To input
|
||||
a **foreign currency**, select a currency in the :guilabel:`Foreign Currency`. Once selected, enter
|
||||
the :guilabel:`Amount` in your main currency for it to automatically get converted in the foreign
|
||||
currency in the :guilabel:`Amount in Currency field`.
|
||||
|
||||
.. image:: multi_currency/foreign-fields.png
|
||||
:align: center
|
||||
|
||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
@@ -91,7 +91,7 @@ Batch Payment`.
|
||||
- :doc:`payments/batch`
|
||||
- :doc:`payments/batch_sdd`
|
||||
|
||||
.. _payments-matching:
|
||||
.. _payments/matching:
|
||||
|
||||
Payments matching
|
||||
-----------------
|
||||
|
||||
@@ -2,128 +2,122 @@
|
||||
Checks
|
||||
======
|
||||
|
||||
There are two ways to handle payments received by checks. Odoo support
|
||||
both approaches so that you can use the one that better fits your
|
||||
habits.
|
||||
There are two ways to handle payments received by checks in Odoo, either by using :ref:`outstanding
|
||||
accounts <checks/outstanding-account>` or by :ref:`bypassing the reconciliation process
|
||||
<checks/reconciliation-bypass>`.
|
||||
|
||||
1. **Undeposited Funds:**
|
||||
once you receive the check, you record a payment
|
||||
by check on the invoice. (using a Check journal and posted on the
|
||||
Undeposited Fund account) Then, once the check arrives in your
|
||||
bank account, move money from Undeposited Funds to your bank
|
||||
account.
|
||||
**Using outstanding accounts is recommended**, as your bank account balance stays accurate by taking
|
||||
into account checks yet to be cashed.
|
||||
|
||||
2. **One journal entry only:**
|
||||
once your receive the check, you record a
|
||||
payment on your bank, paid by check, without going through the
|
||||
**Undeposited Funds**. Once you process your bank statement, you do
|
||||
the matching with your bank feed and the check payment, without
|
||||
creating a dedicated journal entry.
|
||||
.. note::
|
||||
Both methods produce the same data in your accounting at the end of the process. But if you
|
||||
have checks that have not been cashed in, the **Outstanding Account** method reports these
|
||||
checks in the **Outstanding Receipts** account. However, funds appear in your bank account
|
||||
whether or not they are reconciled, as the bank value is reflected at the moment of the bank
|
||||
statement.
|
||||
|
||||
We recommend the first approach as it is more accurate (your bank
|
||||
account balance is accurate, taking into accounts checks that have not
|
||||
been cashed yet). Both approaches require the same effort.
|
||||
.. seealso::
|
||||
* :ref:`Outstanding accounts <bank/outstanding-accounts>`
|
||||
* :ref:`Bank reconciliation <accounting/reconciliation>`
|
||||
|
||||
Even if the first method is cleaner, Odoo support the second approach
|
||||
because some accountants are used to it (quickbooks and peachtree
|
||||
users).
|
||||
.. _checks/outstanding-account:
|
||||
|
||||
.. Note::
|
||||
You may have a look at the *Deposit Ticket feature* if you deposit
|
||||
several checks to your bank accounts in batch.
|
||||
Method 1: Outstanding account
|
||||
=============================
|
||||
|
||||
Option 1: Undeposited Funds
|
||||
===========================
|
||||
When you receive a check, you :doc:`record a payment <../bank/reconciliation>` by check on the
|
||||
invoice. Then, when your bank account is credited with the check's amount, you reconcile the payment
|
||||
and statement to move the amount from the **Outstanding Receipt** account to the **Bank** account.
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
.. tip::
|
||||
You can create a new payment method named *Checks* if you would like to identify such payments
|
||||
quickly. To do so, go to :menuselection:`Accounting --> Configuration --> Journals --> Bank`,
|
||||
click the :guilabel:`Incoming Payments` tab, and :guilabel:`Add a line`. As :guilabel:`Payment
|
||||
Method`, select :guilabel:`Manual`, enter `Checks` as name, and :guilabel:`Save`.
|
||||
|
||||
- Create a journal **Checks**
|
||||
.. _checks/reconciliation-bypass:
|
||||
|
||||
- Set **Undeposited Checks** as a default credit/debit account
|
||||
Method 2: Reconciliation bypass
|
||||
===============================
|
||||
|
||||
- Set the bank account related to this journal as **Allow Reconciliation**
|
||||
When you receive a check, you :doc:`record a payment <../bank/reconciliation>` on the related
|
||||
invoice. The amount is then moved from the **Account Receivable** to the **Bank** account, bypassing
|
||||
the reconciliation and creating only **one journal entry**.
|
||||
|
||||
From check payments to bank statements
|
||||
--------------------------------------
|
||||
To do so, you *must* follow the following setup. Go to :menuselection:`Accounting --> Configuration
|
||||
--> Journals --> Bank`. Click the :guilabel:`Incoming Payments` tab and then :guilabel:`Add a line`,
|
||||
select :guilabel:`Manual` as :guilabel:`Payment Method`, and enter `Checks` as :guilabel:`Name`.
|
||||
Click the toggle menu button, tick :guilabel:`Outstanding Receipts accounts`, and in the
|
||||
:guilabel:`Outstanding Receipts accounts` column, and set the :guilabel:`Bank` account for the
|
||||
**Checks** payment method.
|
||||
|
||||
The first way to handle checks is to create a check journal. Thus,
|
||||
checks become a payment method in itself and you will record two
|
||||
transactions.
|
||||
.. image:: checks/outstanding-payment-accounts.png
|
||||
:alt: Bypass the Outstanding Receipts account using the Bank account.
|
||||
|
||||
Once you receive a customer check, go to the related invoice and click
|
||||
on **Register Payment**. Fill in the information about the payment:
|
||||
Payment registration
|
||||
====================
|
||||
|
||||
- Payment method: Check Journal (that you configured with the debit and
|
||||
credit default accounts as **Undeposited Funds**)
|
||||
.. note::
|
||||
By default, there are two ways to register payments made by check:
|
||||
|
||||
- Memo: write the Check number
|
||||
- **Manual**: for single checks;
|
||||
- **Batch**: for multiple checks at once.
|
||||
|
||||
.. image:: checks/check02.png
|
||||
This documentation focuses on **single-check** payments. For **batch deposits**, see :doc:`the
|
||||
batch payments documentation <batch>`.
|
||||
|
||||
This operation will produce the following journal entry:
|
||||
Once you receive a customer check, go to the related invoice (:menuselection:`Accounting -->
|
||||
Customer --> Invoices)`, and click :guilabel:`Register Payment`. Fill in the payment information:
|
||||
|
||||
- :guilabel:`Journal: Bank`;
|
||||
- :guilabel:`Payment method`: :guilabel:`Manual` (or **Checks** if you have created a specific
|
||||
payment method);
|
||||
- :guilabel:`Memo`: enter the check number;
|
||||
- Click :guilabel:`Create Payment`.
|
||||
|
||||
.. image:: checks/payment-checks.png
|
||||
:alt: Check payment info
|
||||
|
||||
The generated journal entries are different depending on the payment registration method chosen.
|
||||
|
||||
Journal entries
|
||||
===============
|
||||
|
||||
Outstanding account
|
||||
-------------------
|
||||
|
||||
The invoice is marked as :guilabel:`In Payment` as soon as you record the payment. This operation
|
||||
produces the following **journal entry**:
|
||||
|
||||
+----------------------+-------------------+----------+----------+
|
||||
| Account | Statement Match | Debit | Credit |
|
||||
+======================+===================+==========+==========+
|
||||
| Account Receivable | | | 100.00 |
|
||||
+----------------------+-------------------+----------+----------+
|
||||
| Undeposited Funds | | 100.00 | |
|
||||
| Outstanding Receipts | | 100.00 | |
|
||||
+----------------------+-------------------+----------+----------+
|
||||
|
||||
The invoice is marked as paid as soon as you record the check.
|
||||
|
||||
Then, once you get the bank statements, you will match this statement
|
||||
with the check that is in Undeposited Funds.
|
||||
Then, once you receive the bank statements, match this statement with the check of the **Outstanding
|
||||
Receipts** account. This produces the following **journal entry**:
|
||||
|
||||
+---------------------+-------------------+----------+----------+
|
||||
| Account | Statement Match | Debit | Credit |
|
||||
+=====================+===================+==========+==========+
|
||||
| Undeposited Funds | X | | 100.00 |
|
||||
| Outstanding Receipts| X | | 100.00 |
|
||||
+---------------------+-------------------+----------+----------+
|
||||
| Bank | | 100.00 | |
|
||||
+---------------------+-------------------+----------+----------+
|
||||
|
||||
If you use this approach to manage received checks, you get the list of checks that have not been
|
||||
cashed in the **Outstanding Receipt** account (accessible, for example, from the general ledger).
|
||||
|
||||
If you use this approach to manage received checks, you get the list of
|
||||
checks that have not been cashed in the **Undeposit Funds** account
|
||||
(accessible, for example, from the general ledger).
|
||||
Reconciliation bypass
|
||||
---------------------
|
||||
|
||||
.. Note::
|
||||
Both methods will produce the same data in your accounting at the
|
||||
end of the process. But, if you have checks that have not been cashed,
|
||||
this one is cleaner because those checks have not been reported yet on
|
||||
your bank account.
|
||||
The invoice is marked as :guilabel:`Paid` as soon as you record the check.
|
||||
|
||||
Option 2: One journal entry only
|
||||
================================
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
These is nothing to configure if you plan to manage your checks using
|
||||
this method.
|
||||
|
||||
From check payments to bank statements
|
||||
--------------------------------------
|
||||
|
||||
Once you receive a customer check, go to the related invoice and click
|
||||
on **Register Payment**. Fill in the information about the payment:
|
||||
|
||||
- **Payment method:** the bank that will be used for the deposit
|
||||
|
||||
- Memo: write the check number
|
||||
|
||||
.. image:: checks/check03.png
|
||||
|
||||
The invoice is marked as paid as soon as you record the check.
|
||||
|
||||
Once you will receive the bank statements, you will do the matching with
|
||||
the statement and this actual payment. (technically: point this payment
|
||||
and relate it to the statement line)
|
||||
|
||||
With this approach, you will get the following journal entry in your
|
||||
books:
|
||||
With this approach, you bypass the use of **outstanding accounts**, effectively getting only one
|
||||
journal entry in your books and bypassing the reconciliation:
|
||||
|
||||
+----------------------+-------------------+----------+----------+
|
||||
| Account | Statement Match | Debit | Credit |
|
||||
@@ -132,17 +126,3 @@ books:
|
||||
+----------------------+-------------------+----------+----------+
|
||||
| Bank | | 100.00 | |
|
||||
+----------------------+-------------------+----------+----------+
|
||||
|
||||
.. tip::
|
||||
You may also record the payment directly without going on the
|
||||
customer invoice, using the menu :menuselection:`Sales --> Payments`. This method may
|
||||
be more convenient if you have a lot of checks to record in a batch but
|
||||
you will have to reconcile entries afterwards (matching payments with
|
||||
invoices)
|
||||
|
||||
If you use this approach to manage received checks, you can use the
|
||||
report **Bank Reconciliation Report** to verify which checks have been
|
||||
received or paid by the bank. (this report is available from the **More**
|
||||
option from the Accounting dashboard on the related bank account).
|
||||
|
||||
.. image:: checks/check01.png
|
||||
|
||||
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 13 KiB |
@@ -3,9 +3,9 @@ Follow-up on invoices
|
||||
=====================
|
||||
|
||||
A follow-up message can be sent to customers when a payment is overdue. Odoo helps you identify late
|
||||
payments and allows you to schedule and send the appropriate reminders, using **follow-up actions**
|
||||
that trigger automatically one or more actions according to the number of overdue days. You can send
|
||||
your follow-ups via different means such as email, post, or SMS.
|
||||
payments and allows you to schedule and send the appropriate reminders using **follow-up actions**
|
||||
that automatically trigger one or more actions according to the number of overdue days. You can send
|
||||
your follow-ups via different means, such as email, post, or SMS.
|
||||
|
||||
.. seealso::
|
||||
- `Odoo Tutorials: Payment Follow-up <https://www.odoo.com/slides/slide/payment-follow-up-1682>`_
|
||||
@@ -14,47 +14,63 @@ Configuration
|
||||
=============
|
||||
|
||||
To configure a :guilabel:`Follow-Up Action`, go to :menuselection:`Accounting --> Configuration -->
|
||||
Follow-up Levels`. Several follow-up actions are available by default, and you can customize them
|
||||
any way you want or create new ones to trigger the following actions:
|
||||
Follow-up Levels`, and select or create (a) new follow-up level(s). Several follow-up actions are
|
||||
available by default under the :guilabel:`Notification` tab, and the **name** as well as the
|
||||
**number of days** can be changed. The follow-up :guilabel:`Actions` available are:
|
||||
|
||||
- Send an email;
|
||||
- :ref:`Send an SMS message <pricing/pricing_and_faq>`;
|
||||
- Print a letter;
|
||||
- :ref:`Send a letter <customer_invoices/snailmail>`;
|
||||
- Manual action (creates a task).
|
||||
- :guilabel:`Send Email`;
|
||||
- :ref:`Send a Letter <customer_invoices/snailmail>`;
|
||||
- :ref:`Send an SMS message <pricing/pricing_and_faq>`.
|
||||
|
||||
It is also possible to automatically send a reminder by enabling the :guilabel:`Auto Execute`
|
||||
option, within a specific :guilabel:`Follow-Up Action`.
|
||||
You can use a pre-filled template for your messages by selecting a :guilabel:`Content Template`. To
|
||||
change the template used, hover over the field and click the :guilabel:`-->`. If enabled, SMS
|
||||
messages have a specific :guilabel:`Sms Template` field.
|
||||
|
||||
It is possible to automatically send a reminder by enabling the :guilabel:`Automatic` option, and
|
||||
attaching the *open* invoice(s) by enabling :guilabel:`Attach Invoices`, within a specific follow-up
|
||||
action.
|
||||
|
||||
By clicking on the :guilabel:`Activity` tab, scheduling activities (tasks) is possible. That way,
|
||||
an activity is automatically scheduled when the follow-up is triggered. To do so, enable
|
||||
:guilabel:`Schedule Activity`, and select a :guilabel:`Responsible` person for the task. Choose an
|
||||
:guilabel:`Activity Type`, and enter a :guilabel:`Summary` on how to handle the activity, if
|
||||
desired.
|
||||
|
||||
.. tip::
|
||||
To send a reminder before the actual due date is reached, set a negative number of due days.
|
||||
Set a negative number of days to send a reminder before the actual due date.
|
||||
|
||||
Follow-up reports
|
||||
=================
|
||||
|
||||
The overdue invoices you need to follow up on are available in :menuselection:`Accounting -->
|
||||
Customers --> Follow-up Reports`. From there, you can identify all the customers that have late
|
||||
unpaid invoices.
|
||||
Overdue invoices you need to follow up on are available in :menuselection:`Accounting --> Customers
|
||||
--> Follow-up Reports`. By default, Odoo filters by :guilabel:`Overdue Invoices`, but you can also
|
||||
filter by :guilabel:`In need of action` in the :guilabel:`Filters` menu.
|
||||
|
||||
When you open a customer, you see all their unpaid invoices (overdue or not). The due dates of the
|
||||
late invoices appear in red. Select the invoices that are not late yet in the :guilabel:`Excluded`
|
||||
column to exclude them from the reminder you send.
|
||||
When selecting an invoice, you can see all of the customer's unpaid invoices (overdue or not), with
|
||||
the due dates of late invoices appearing in red. You can exclude invoices from a reminder by
|
||||
clicking :guilabel:`Exclude from Follow-ups`. You can set either :guilabel:`Automatic` or
|
||||
:guilabel:`Manual` reminders as well as a :guilabel:`Responsible` person for that customer.
|
||||
|
||||
It is up to you to decide how to remind your customer. You can select :guilabel:`Print Letter`,
|
||||
:guilabel:`Send By Email`, :guilabel:`Send By Post`, :guilabel:`Send By SMS`. Then, click on
|
||||
:guilabel:`Done` to view the next follow-up that needs your attention.
|
||||
To send reminders, click on :guilabel:`Follow up`, and select the action(s) you want to perform
|
||||
from:
|
||||
|
||||
- :guilabel:`Print`;
|
||||
- :guilabel:`Email`;
|
||||
- :guilabel:`Sms`;
|
||||
- :guilabel:`By post`.
|
||||
|
||||
You can :guilabel:`Attach Invoices` and change the content templates from this view. When done,
|
||||
click :guilabel:`Send` or :guilabel:`Send & Print`.
|
||||
|
||||
.. note::
|
||||
- The contact information available on the invoice or on the contact form is used to send the
|
||||
reminder.
|
||||
- The contact information on the invoice or the contact form is used to send the reminder.
|
||||
- When the reminder is sent, it is documented in the chatter of the invoice.
|
||||
- If it is not the right time for a reminder, you can specify the :guilabel:`Next Reminder Date`
|
||||
and click on :guilabel:`Remind me later`. You will get the next report according to the next
|
||||
reminder date set on the statement.
|
||||
- If it is not the right time for a reminder, you can specify the :guilabel:`Next Reminder` date.
|
||||
You will get the next report according to the next reminder date set.
|
||||
|
||||
.. tip::
|
||||
Reconcile your bank statements right before launching your follow-up process to avoid sending a
|
||||
reminder to a customer that has already paid you.
|
||||
Reconcile all bank statements right before launching the follow-up process to avoid sending a
|
||||
reminder to a customer that has already paid.
|
||||
|
||||
Debtor's trust level
|
||||
--------------------
|
||||
|
||||
@@ -30,6 +30,8 @@ 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.
|
||||
|
||||
.. _reporting/balance-sheet:
|
||||
|
||||
Balance Sheet
|
||||
-------------
|
||||
|
||||
@@ -103,6 +105,8 @@ occurred during a certain period of time.
|
||||
|
||||
.. image:: reporting/main_reports05.png
|
||||
|
||||
.. _reporting/aged-payable:
|
||||
|
||||
Aged Payable
|
||||
------------
|
||||
|
||||
@@ -112,6 +116,8 @@ have gone unpaid.
|
||||
|
||||
.. image:: reporting/main_reports02.png
|
||||
|
||||
.. _reporting/aged-receivable:
|
||||
|
||||
Aged Receivable
|
||||
---------------
|
||||
|
||||
@@ -129,6 +135,8 @@ operating, investing and financing activities.
|
||||
|
||||
.. image:: reporting/main_reports03.png
|
||||
|
||||
.. _reporting/tax-report:
|
||||
|
||||
Tax Report
|
||||
----------
|
||||
|
||||
|
||||
@@ -2,115 +2,111 @@
|
||||
Year-end closing
|
||||
================
|
||||
|
||||
Before going ahead with closing a fiscal year, there are a few steps one
|
||||
should typically take to ensure that your accounting is correct, up to
|
||||
date, and accurate:
|
||||
|
||||
- Make sure you have fully reconciled your **bank account(s)** up to
|
||||
year end and confirm that your ending book balances agree with
|
||||
your bank statement balances.
|
||||
|
||||
- Verify that all **customer invoices** have been entered and approved.
|
||||
|
||||
- Confirm that you have entered and agreed all **vendor bills**.
|
||||
|
||||
- Validate all **expenses**, ensuring their accuracy.
|
||||
|
||||
- Corroborate that all **received payments** have been entered and
|
||||
recorded accurately.
|
||||
Year-end closing is vital for maintaining financial accuracy, complying with regulations, making
|
||||
informed decisions, and ensuring transparency in reporting.
|
||||
|
||||
.. _year-end/fiscal-years:
|
||||
|
||||
Manage fiscal years
|
||||
===================
|
||||
Fiscal years
|
||||
============
|
||||
|
||||
In most cases, the fiscal years last 12 months. If it is your case, you
|
||||
just have to define what is the last day of your fiscal year in the
|
||||
accounting settings. By default, it is set on the 31st December.
|
||||
By default, the fiscal year is set to last 12 months and end on December 31st. However, its duration
|
||||
and end date can vary due to cultural, administrative, and economic considerations.
|
||||
|
||||
However, there might be some exceptions. For example, if it is the first
|
||||
fiscal year of your business, it could last more or less than 12 months.
|
||||
In this case, some additional configuration is required.
|
||||
To modify these values, go to :menuselection:`Accounting --> Configuration --> Settings`. Under the
|
||||
:guilabel:`Fiscal Periods` section, change the :guilabel:`Last Day` field if necessary.
|
||||
|
||||
Go to :menuselection:`accounting --> configuration --> settings` and activate
|
||||
the fiscal years.
|
||||
|
||||
You can then configure your fiscal years in
|
||||
:menuselection:`accounting --> configuration --> fiscal years`.
|
||||
If the period lasts *more* than or *less* than 12 months, enable :guilabel:`Fiscal Years` and
|
||||
:guilabel:`Save`. Go back to the :guilabel:`Fiscal Periods` section and click :guilabel:`➜ Fiscal
|
||||
Years`. From there, click :guilabel:`Create`, give it a :guilabel:`Name`, and both a
|
||||
:guilabel:`Start Date` and :guilabel:`End Date`.
|
||||
|
||||
.. note::
|
||||
You only have to create fiscal years if they last more or less
|
||||
than 12 months.
|
||||
Once the set fiscal period is over, Odoo automatically reverts to the default periodicity, taking
|
||||
into account the value specified in the :guilabel:`Last Day` field.
|
||||
|
||||
.. _year-end/checklist:
|
||||
|
||||
Year-end checklist
|
||||
==================
|
||||
|
||||
- Run a **Tax report**, and verify that your tax information is correct.
|
||||
Before closure
|
||||
--------------
|
||||
|
||||
- Reconcile all accounts on your **Balance Sheet**:
|
||||
Before closing a fiscal year, ensure first everything is accurate and up-to-date:
|
||||
|
||||
- Agree your bank balances in Odoo against your actual bank balances
|
||||
on your statements. Utilize the **Bank Reconciliation** report to
|
||||
assist with this.
|
||||
- Make sure all bank accounts are fully :doc:`reconciled <../bank/reconciliation>` up to year-end,
|
||||
and confirm that the ending book balances match the bank statement balances.
|
||||
- Verify that all :doc:`customer invoices <../customer_invoices>` have been entered and
|
||||
approved and that there are no draft invoices.
|
||||
- Confirm that all :doc:`vendor bills <../vendor_bills>` have been entered and agreed upon.
|
||||
- Validate all :doc:`expenses <../../expenses>`, ensuring their accuracy.
|
||||
- Corroborate that all :doc:`received payments <../payments>` have been encoded and recorded
|
||||
accurately.
|
||||
- Close all :ref:`suspense accounts <bank_accounts/suspense>`.
|
||||
- Book all :doc:`depreciation <../vendor_bills/assets>` and :doc:`deferred revenue
|
||||
<../customer_invoices/deferred_revenues>` entries.
|
||||
|
||||
- Reconcile all transactions in your cash and bank accounts by
|
||||
running your **Aged Receivables** and **Aged Payables** reports.
|
||||
Closing a fiscal year
|
||||
---------------------
|
||||
|
||||
- Audit your accounts, being sure to fully understand the
|
||||
transactions affecting them and the nature of the
|
||||
transactions, making sure to include loans and fixed assets.
|
||||
Then, to close the fiscal year:
|
||||
|
||||
- Run the optional **Payments Matching** feature, under the **More**
|
||||
dropdown on the dashboard, validating any open **Vendor Bills** and
|
||||
**Customer Invoices** with their payments. This step is optional,
|
||||
however it may assist the year-end process if all outstanding
|
||||
payments and invoices are reconciled, and could lead finding
|
||||
errors or mistakes in the system.
|
||||
- Run a :ref:`tax report <reporting/tax-report>`, and verify that all tax information is correct.
|
||||
- Reconcile all accounts on the :ref:`balance sheet <reporting/balance-sheet>`:
|
||||
|
||||
- Your accountant/bookkeeper will likely verify your balance sheet
|
||||
items and book entries for:
|
||||
- Update the bank balances in Odoo according to the actual balances found on the bank statements.
|
||||
- Reconcile all transactions in the cash and bank accounts by running the :ref:`aged receivables
|
||||
<reporting/aged-receivable>` and :ref:`aged payables <reporting/aged-payable>` reports.
|
||||
- Audit all accounts, being sure to fully understand all transactions and their nature, making
|
||||
sure to include loans and fixed assets.
|
||||
- Optionally, run :ref:`payments matching <payments/matching>` to validate any open vendor bills
|
||||
and customer invoices with their payments. While this step is optional, it could assist the
|
||||
year-end closing process if all outstanding payments and invoices are reconciled, potentially
|
||||
finding errors or mistakes in the system.
|
||||
|
||||
- Year-end manual adjustments, using the **Adviser Journal Entries**
|
||||
menu (For example, the **Current Year Earnings** and **Retained
|
||||
Earnings** reports).
|
||||
Next, the accountant likely verifies balance sheet items and book entries for:
|
||||
|
||||
- **Work in Progress**.
|
||||
- year-end manual adjustments,
|
||||
- work in progress,
|
||||
- depreciation journal entries,
|
||||
- loans,
|
||||
- tax adjustments,
|
||||
- etc.
|
||||
|
||||
- **Depreciation Journal Entries**.
|
||||
If the accountant is going through the year-end audit, they may want to have paper copies of all
|
||||
balance sheet items (such as loans, bank accounts, prepayments, sales tax statements, etc.) to
|
||||
compare these with the balances in Odoo.
|
||||
|
||||
- **Loans**.
|
||||
.. tip::
|
||||
During this process, it is good practice to set a :guilabel:`Journal Entries Lock Date` to the
|
||||
last day (inclusive) of the preceding fiscal year by going to :menuselection:`Accounting -->
|
||||
Accounting --> Lock Dates`. This way, the accountant can be confident that nobody changes the
|
||||
transactions while auditing the books. Users from the *accountant* access group can still create
|
||||
and modify entries.
|
||||
|
||||
- **Tax adjustments**.
|
||||
Current year's earnings
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If your accountant/bookkeeper is going through end of the year auditing,
|
||||
they may want to have paper copies of all balance sheet items (such as
|
||||
loans, bank accounts, prepayments, sales tax statements, etc...) to
|
||||
agree these against your Odoo balances.
|
||||
Odoo uses a unique account type called **current year's earnings** to display the amount difference
|
||||
between the **income** and **expenses** accounts.
|
||||
|
||||
During this process, it is good practice to set the **Lock date for
|
||||
Non-Advisers** to the last day of the preceding financial year, which is
|
||||
set under the accounting configuration. This way, the accountant can be
|
||||
confident that nobody is changing the previous year transactions
|
||||
while auditing the books.
|
||||
.. note::
|
||||
The chart of accounts can only contain one account of this type. By default, it is a 999999
|
||||
account named :guilabel:`Undistributed Profits/Losses`.
|
||||
|
||||
.. image:: year_end/close_fiscal_year01.png
|
||||
To allocate the current year's earnings, create a miscellaneous entry to book them to any equity
|
||||
account. Once done, confirm whether or not the current year's earnings in the **balance sheet** is
|
||||
correctly reporting a balance of zero. If that is the case, set an :guilabel:`All Users Lock Date`
|
||||
to the last day of the fiscal year by going to :menuselection:`Accounting --> Accounting --> Lock
|
||||
Dates`.
|
||||
|
||||
.. _year-end/closing:
|
||||
.. warning::
|
||||
Setting an :guilabel:`All Users Lock Date` is **irreversible** and cannot be removed.
|
||||
|
||||
Closing the fiscal year
|
||||
=======================
|
||||
|
||||
In Odoo there is no need to do a specific year end closing entry in order to
|
||||
close out income statement accounts. The reports are created in
|
||||
real-time, meaning that the **Income statement** corresponds directly with
|
||||
the year-end date you specify in Odoo. Therefore, any time you generate
|
||||
the **Income Statement**, the beginning date will correspond with the
|
||||
beginning of the **Fiscal Year** and the account balances will all be 0.
|
||||
|
||||
Once the accountant/bookkeeper has created the journal entry to allocate
|
||||
the **Current Year Earnings**, you should set the **Lock Date** to the last day
|
||||
of the fiscal year. Making sure that before doing so, you confirm
|
||||
whether or not the current year earnings in the **Balance Sheet** is
|
||||
correctly reporting a 0 balance.
|
||||
.. note::
|
||||
A specific year-end closing entry is **optional** in order to close out the **profit and loss
|
||||
statement**. The reports are created in real-time, meaning that the profit and loss statement
|
||||
corresponds directly with the year-end date specified in Odoo. Therefore, any time the **income
|
||||
statement** is generated, the beginning date corresponds with the beginning of the **fiscal
|
||||
year** and all account balances should equal zero.
|
||||
|
||||
|
Before Width: | Height: | Size: 3.6 KiB |
@@ -304,7 +304,7 @@ directly to a product line.
|
||||
|
||||
taxes/cash_basis
|
||||
taxes/retention
|
||||
taxes/vat_validation
|
||||
taxes/vat_verification
|
||||
taxes/fiscal_positions
|
||||
taxes/avatax
|
||||
taxes/taxcloud
|
||||
|
||||
@@ -2,61 +2,64 @@
|
||||
EU intra-community distance selling
|
||||
===================================
|
||||
|
||||
**Distance sales within the European Union** include cross-border sales of goods and services to a
|
||||
private consumer (B2C) in another EU Member State when the seller doesn't meet face-to-face with the
|
||||
customer. Organizations must ensure that the VAT on distance sales is paid to the Member State in
|
||||
which the goods or services are delivered.
|
||||
EU intra-community distance selling involves the cross-border trade of goods and services from
|
||||
vendors registered for VAT purposes to individuals (B2C) located in a European Union member state.
|
||||
The transaction is conducted remotely, typically through online platforms, mail orders, telephone,
|
||||
or other means of communication.
|
||||
|
||||
EU intra-community distance selling is subject to specific VAT rules and regulations. The vendor
|
||||
must charge VAT per the VAT rate applicable in the buyer's country.
|
||||
|
||||
.. note::
|
||||
This remains true even if your organization is located outside of the European Union.
|
||||
|
||||
While this regulation mainly applies to :doc:`eCommerce <../../../websites/ecommerce>` sales to
|
||||
private EU consumers, it is also valid for mail order sales and telesales.
|
||||
|
||||
The Union **One-Stop Shop (OSS)** is an online portal where businesses can register for the OSS and
|
||||
declare their intra-community distance sales. Each EU member state integrates an online OSS portal.
|
||||
|
||||
The **EU intra-community Distance Selling** feature helps your organization comply with this
|
||||
regulation by creating and configuring new :doc:`fiscal positions <fiscal_positions>` and
|
||||
:doc:`taxes <../taxes>` based on your company's country.
|
||||
|
||||
.. seealso::
|
||||
- `European Commission: OSS | Taxation and Customs Union
|
||||
<https://ec.europa.eu/taxation_customs/business/vat/oss_en>`_
|
||||
|
||||
.. _eu_distance_selling/configuration:
|
||||
This remains applicable even if the vendor is located outside of the European Union.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Go to :menuselection:`Accounting/Invoicing --> Settings --> Taxes` and enable **EU intra-community
|
||||
Distance Selling**.
|
||||
The **EU Intra-community Distance Selling** feature helps you comply with this regulation by
|
||||
creating and configuring new **fiscal positions** and **taxes** based on your company's country. To
|
||||
enable it, go to :menuselection:`Accounting --> Configuration --> Settings --> Taxes`, tick
|
||||
:guilabel:`EU Intra-community Distance Selling`, and :guilabel:`Save`.
|
||||
|
||||
.. image:: eu_distance_selling/enable-feature.png
|
||||
:align: center
|
||||
:alt: EU intra-community Distance Selling feature in Odoo Accounting settings
|
||||
|
||||
.. _eu_distance_selling/taxes:
|
||||
.. tip::
|
||||
Whenever you add or modify taxes, you can automatically update your fiscal positions. To do so,
|
||||
go to :menuselection:`Accounting/Invoicing --> Settings --> Taxes --> EU Intra-community Distance
|
||||
Selling` and click on the :guilabel:`Refresh tax mapping`.
|
||||
|
||||
Fiscal Positions and Taxes
|
||||
==========================
|
||||
|
||||
Once enabled, the feature automatically creates all the necessary taxes and fiscal positions needed
|
||||
for each EU member state, based on your company's country.
|
||||
|
||||
We highly recommend checking that the proposed mapping is suitable for the products and services you
|
||||
sell before using it.
|
||||
|
||||
.. _eu_distance_selling/refresh-mapping:
|
||||
|
||||
Refresh tax mapping
|
||||
-------------------
|
||||
|
||||
Whenever you add or modify taxes, you can update automatically your fiscal positions.
|
||||
|
||||
To do so, go to :menuselection:`Accounting/Invoicing --> Settings --> Taxes --> EU intra-community
|
||||
Distance Selling` and click on the *Refresh tax mapping* button.
|
||||
.. note::
|
||||
We highly recommend checking that the proposed mapping is suitable for the products and services
|
||||
you sell before using it.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`fiscal_positions`
|
||||
- :doc:`../taxes`
|
||||
- :doc:`../../fiscal_localizations`
|
||||
- :doc:`fiscal_positions`
|
||||
|
||||
One-Stop Shop (OSS)
|
||||
===================
|
||||
|
||||
The :abbr:`OSS (One-Stop Shop)` system introduced by the European Union simplifies VAT collection
|
||||
for **cross-border** sales of goods and services. It primarily applies to business-to-consumer
|
||||
**(B2C)** cases. With the OSS, businesses can register for VAT in their home country and use a
|
||||
single online portal to handle VAT obligations for their sales within the EU. There are **two
|
||||
primary schemes**: the **Union OSS** scheme for cross-border services and the **Import OSS** scheme
|
||||
for goods valued at or below €150.
|
||||
|
||||
Reports
|
||||
-------
|
||||
|
||||
To generate **OSS sales** or **OSS imports** reports and submit them onto the OSS portal, go to
|
||||
:menuselection:`Accounting --> Reporting --> Tax Report`, click :guilabel:`Report: Generic Tax
|
||||
report`, and select either :guilabel:`OSS Sales` or :guilabel:`OSS Imports`. Once selected, click on
|
||||
:guilabel:`PDF`, :guilabel:`XLSX`, or :guilabel:`XML` in the top-left corner. This generates the
|
||||
currently-opened report in the selected format. Once generated, log into the platform of your
|
||||
competent federal authority to submit it onto the OSS portal.
|
||||
|
||||
.. image:: eu_distance_selling/oss-report.png
|
||||
:alt: OSS reports view
|
||||
|
||||
.. seealso::
|
||||
- `European Commission: OSS | Taxation and Customs Union <https://ec.europa.eu/taxation_customs/business/vat/oss_en>`_
|
||||
|
||||
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
@@ -1,6 +1,6 @@
|
||||
===========================
|
||||
VIES VAT numbers validation
|
||||
===========================
|
||||
===============================
|
||||
VAT numbers verification (VIES)
|
||||
===============================
|
||||
|
||||
**VAT Information Exchange System** - abbreviated **VIES** - is a tool provided by the European
|
||||
Commission that allows you to check the validity of VAT numbers of companies registered in the
|
||||
@@ -15,7 +15,7 @@ Configuration
|
||||
To enable this feature, go to :menuselection:`Accounting --> Configuration --> Settings --> Taxes`,
|
||||
enable the **Verify VAT Numbers** feature, and click on *Save*.
|
||||
|
||||
.. image:: vat_validation/vat-validation-configuration.png
|
||||
.. image:: vat_verification/vat-validation-configuration.png
|
||||
:align: center
|
||||
:alt: Enable "Verify VAT Numbers" in Odoo Accounting
|
||||
|
||||
@@ -24,14 +24,14 @@ VAT Number validation
|
||||
|
||||
Whenever you create or modify a contact, make sure to fill out the **Country** and **VAT** fields.
|
||||
|
||||
.. image:: vat_validation/vat-validation-contact-form.png
|
||||
.. image:: vat_verification/vat-validation-contact-form.png
|
||||
:align: center
|
||||
:alt: Fill out the contact form with the country and VAT number before clicking on *Save*
|
||||
|
||||
When you click on *Save*, Odoo runs a VIES VAT number check, and displays an error message if the
|
||||
VAT number is invalid.
|
||||
|
||||
.. image:: vat_validation/vat-validation-error.png
|
||||
.. image:: vat_verification/vat-validation-error.png
|
||||
:align: center
|
||||
:alt: Odoo displays an error message instead of saving when the VAT number is invalid
|
||||
|
||||
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
@@ -37,7 +37,7 @@ appropriately completed:
|
||||
- :guilabel:`Vendor`: Odoo automatically fills some information based on the vendor's registered
|
||||
information, previous purchase orders, or bills.
|
||||
- :guilabel:`Bill Reference`: add the sales order reference provided by the vendor and is used to do
|
||||
the :ref:`matching <payments-matching>` when you receive the products.
|
||||
the :ref:`matching <payments/matching>` when you receive the products.
|
||||
- :guilabel:`Auto-Complete`: select a past bill/purchase order to automatically complete the
|
||||
document. The :guilabel:`Vendor` field should be completed prior to completing this field.
|
||||
- :guilabel:`Bill Date`: is the issuance date of the document.
|
||||
|
||||
@@ -4,231 +4,651 @@
|
||||
Expenses
|
||||
========
|
||||
|
||||
**Odoo Expenses** streamlines the management of expenses. Employees can submit their expenses;
|
||||
managers can approve them; accountants can record them and process the payments.
|
||||
Odoo **Expenses** streamlines the management of expenses. After an employee submits their expenses
|
||||
in Odoo, the expenses are reviewed by management and accounting teams. Once approved, payments can
|
||||
then be processed and disbursed back to the employee for reimbursement(s).
|
||||
|
||||
.. seealso::
|
||||
- `Odoo Expenses: product page <https://www.odoo.com/app/expenses>`_
|
||||
`Odoo Expenses: product page <https://www.odoo.com/app/expenses>`_
|
||||
|
||||
How to set expense types
|
||||
========================
|
||||
|
||||
The first step to track expenses is to configure the expense types (managed as products in Odoo)
|
||||
that your company allows, from the *Configuration* menu.
|
||||
When a specific expense is reimbursed at a fixed price, set a cost on the product.
|
||||
Otherwise keep the cost at 0.0 and employees will report the real cost per expense.
|
||||
|
||||
.. image:: expenses/product.png
|
||||
:align: center
|
||||
|
||||
Here are some examples:
|
||||
|
||||
* Restaurant:
|
||||
|
||||
* Cost: 0.00 (the cost of the ticket will be recorded on every expense)
|
||||
* Travel with Personal Car:
|
||||
|
||||
* Cost: 0.30 (the price per mile reimbursed by the company is fixed)
|
||||
* Hotel:
|
||||
|
||||
* Cost: 0.00 (the cost of the ticket will be recorded on every expense)
|
||||
|
||||
* Others:
|
||||
|
||||
* Cost: 0.0
|
||||
|
||||
Don't forget to set an expense tax on each expense type
|
||||
(and an account if you use Odoo Accounting).
|
||||
It's usually a good practice to use a tax that is configured
|
||||
with :ref:`Tax Included in Price <taxes/included-in-price>`.
|
||||
That way, employees report expenses with
|
||||
prices including taxes, which is usually the expected behaviour.
|
||||
|
||||
.. tip::
|
||||
The *Sales* app allows you to specify units of measure for your
|
||||
expense types (units, miles, nights, etc.).
|
||||
Go to :menuselection:`Sales --> Configuration --> Settings` and check
|
||||
*Some products may be sold/purchased in different units of measure (advanced)*.
|
||||
|
||||
|
||||
How to record expenses
|
||||
Set expense categories
|
||||
======================
|
||||
|
||||
Manually
|
||||
--------
|
||||
The first step to track expenses is to configure the different types of expenses for the company
|
||||
(managed as *expense categories* in Odoo). Each category can be as specific or generalized as
|
||||
needed. Go to :menuselection:`Expenses app --> Configuration --> Expense Categories` to view the
|
||||
current expensable categories in a default list view.
|
||||
|
||||
As an employee (Employee in user access rights), you can record
|
||||
expenses from :menuselection:`My Expenses --> Expenses to Submit`.
|
||||
|
||||
.. image:: expenses/submit_01.png
|
||||
.. image:: expenses/categories.png
|
||||
:align: center
|
||||
:alt: Set expense costs on products.
|
||||
|
||||
1. Select the related product and enter either the total amount
|
||||
you paid (with Quantity = 1) or the unit price if Quantity is
|
||||
countable (e.g. number of hotel nights).
|
||||
2. Enter the expense date.
|
||||
3. Choose if you paid the bill on your own (and expect to be reimbursed)
|
||||
or if the company paid directly (e.g. if you used a company's credit card).
|
||||
4. Set the bill reference, add some notes if requested and attach a
|
||||
photo/scan of the receipt from the discussion thread.
|
||||
That will help the manager and the accountant validate it.
|
||||
|
||||
.. image:: expenses/submit_02.png
|
||||
:align: center
|
||||
|
||||
In one click from emails
|
||||
------------------------
|
||||
|
||||
Let your employees record their expenses from a simple email.
|
||||
Make a snapshot of the receipt and send it by email, or simply forward a bill!
|
||||
|
||||
The only thing to do is setting up an email alias in
|
||||
:menuselection:`Expenses --> Configuration --> Settings` (e.g. *expenses* @mycompany.odoo.com).
|
||||
For security purposes, only authenticated employee emails
|
||||
(cfr. *Work Email* in employee detail form) are accepted.
|
||||
|
||||
.. tip::
|
||||
The expense product is set automatically if the mail subject contains
|
||||
the product's internal reference in first position.
|
||||
Type the expense amount in the mail subject to set it on the expense too (e.g. Ref001 Food 100€).
|
||||
|
||||
How to submit expenses to managers
|
||||
==================================
|
||||
|
||||
When you are ready to submit your expenses to your manager
|
||||
(e.g. at the end of a business trip, or once a month),
|
||||
go to the menu :menuselection:`My Expenses --> Expenses to Submit`. Select all expenses
|
||||
from the list view and click on :menuselection:`Action --> Submit to Manager`.
|
||||
Save the newly created expense report (i.e. set of expenses),
|
||||
and wait for your manager to approve it.
|
||||
|
||||
.. image:: expenses/submit_03.png
|
||||
:align: center
|
||||
|
||||
You can also submit expenses one by one from the *Submit to Manager*
|
||||
button on the form view of an expense.
|
||||
|
||||
All your submitted expense reports can be found in
|
||||
:menuselection:`Expenses --> My Expenses --> Expense Reports`.
|
||||
|
||||
|
||||
How to approve expenses
|
||||
=======================
|
||||
|
||||
HR and team managers get an overview of all expense reports to
|
||||
validate from the top menu :menuselection:`To Approve --> Expense Reports to Approve`.
|
||||
Such users must have at least *Officers* access rights for *Expenses*.
|
||||
|
||||
.. image:: expenses/approval_01.png
|
||||
:align: center
|
||||
|
||||
They can review expense reports, approve or reject them, as well as providing
|
||||
feedback thanks to the integrated communication tool.
|
||||
|
||||
.. image:: expenses/approval_02.png
|
||||
:align: center
|
||||
|
||||
As a team manager you can easily find the expense reports of your team members.
|
||||
You need to be set as manager in the detail form of those employees.
|
||||
|
||||
.. image:: expenses/approval_03.png
|
||||
:align: center
|
||||
|
||||
|
||||
How to post expenses in accounting
|
||||
==================================
|
||||
|
||||
Once expense reports approved by managers, the accounting department
|
||||
goes to :menuselection:`Expenses --> Accountant --> Expense Reports To Post` to check
|
||||
accounts, products and taxes. They can click *Post Journal Entries*
|
||||
to post related journal entries into your books.
|
||||
To do so, the user must have following access rights:
|
||||
|
||||
* Accounting: Accountant or Adviser
|
||||
* Expenses: Manager
|
||||
To create a new expense category, click :guilabel:`New`. A product form will appear, with the
|
||||
description field labeled :guilabel:`Product Name`.
|
||||
|
||||
.. note::
|
||||
To post an expense, a *Home Address* must be set on the employee.
|
||||
If you get a related blocking message when posting, click the employee,
|
||||
go to *Personal Information* tab and select/create the contact of your employee
|
||||
in the address book.
|
||||
A contact has been automatically created if this person is using Odoo.
|
||||
Expense categories are managed like products in Odoo. The expense category form follows the
|
||||
standard product form in Odoo, and the information entered is similar. Expense products will be
|
||||
referred to as expense categories throughout this document since the main menu refers to these as
|
||||
:guilabel:`Expense Categories`.
|
||||
|
||||
How to reimburse employees
|
||||
==========================
|
||||
Only two fields are required, the :guilabel:`Product Name` and the :guilabel:`Unit of Measure`.
|
||||
Enter the :guilabel:`Product Name` in the field, and select the :guilabel:`Unit of Measure` from the
|
||||
drop-down menu (most products will be set to :guilabel:`Units`).
|
||||
|
||||
You can now see all the expense reports to reimburse in
|
||||
:menuselection:`Expenses --> Accountant --> Expense Reports To Pay`.
|
||||
To record the payment or pay by check, click *Register a Payment*.
|
||||
.. tip::
|
||||
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.
|
||||
|
||||
See how you can easily manage the payment process in Odoo:
|
||||
.. image:: expenses/new-expense-product.png
|
||||
:align: center
|
||||
:alt: Set expense costs on products.
|
||||
|
||||
* :doc:`accounting/payments/pay_checks`
|
||||
* :doc:`accounting/payments/pay_sepa`
|
||||
The :guilabel:`Cost` field on the product form is populated with a value of `0.00` by default. When
|
||||
a specific expense should always be reimbursed for a particular price, enter that amount in the
|
||||
:guilabel:`Cost` field. Otherwise, leave the :guilabel:`Cost` set to `0.00`, and employees will
|
||||
report the actual cost when submitting an expense report.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Cost` field is always visible on the expense category form, but the
|
||||
:guilabel:`Sales Price` field is *only* visible if the :guilabel:`Sales Price` is selected under
|
||||
the :guilabel:`Re-Invoice Expenses` section. Otherwise, the :guilabel:`Sales Price` field is
|
||||
hidden.
|
||||
|
||||
How to re-invoice expenses to your customers
|
||||
============================================
|
||||
.. example::
|
||||
Here are some examples for when to set a specific :guilabel:`Cost` on a product vs. leaving the
|
||||
:guilabel:`Cost` at `0.00`:
|
||||
|
||||
If you track expenses on customer projects, you can charge them back to
|
||||
your customers automatically.
|
||||
- **Meals**: Set the :guilabel:`Cost` to `0.00`. When an employee logs an expense for a meal,
|
||||
they enter the actual amount of the bill and will be reimbursed for that amount. An expense for
|
||||
a meal costing $95.23 would equal a reimbursement for $95.23.
|
||||
- **Mileage**: Set the :guilabel:`Cost` to `0.30`. When an employee logs an expense for
|
||||
"mileage", they enter the number of miles driven in the :guilabel:`Quantity` field, and are
|
||||
reimbursed 0.30 per mile they entered. An expense for 100 miles would equal a reimbursement for
|
||||
$30.00.
|
||||
- **Monthly Parking**: Set the :guilabel:`Cost` to `75.00`. When an employee logs an expense for
|
||||
"monthly parking", the reimbursement would be for $75.00.
|
||||
- **Expenses**: Set the :guilabel:`Cost` to `0.00`. When an employee logs an expense that is not
|
||||
a meal, mileage, or monthly parking, they use the generic :guilabel:`Expenses` product. An
|
||||
expense for a laptop costing $350.00 would be logged as an :guilabel:`Expenses` product, and
|
||||
the reimbursement would be for $350.00.
|
||||
|
||||
Select an :guilabel:`Expense Account` if using the Odoo *Accounting* app. It is recommended to check
|
||||
with the accounting department to determine the correct account to reference in this field as it
|
||||
will affect reports.
|
||||
|
||||
Set a tax on each product in the :guilabel:`Vendor Taxes` and :guilabel:`Customer Taxes` fields, if
|
||||
applicable. It is considered good practice to use a tax that is configured with :ref:`Tax Included
|
||||
in Price <taxes/included-in-price>`. Taxes will be automatically configured if this is set.
|
||||
|
||||
.. _expenses/new:
|
||||
|
||||
Record expenses
|
||||
===============
|
||||
|
||||
Manually create a new expense
|
||||
-----------------------------
|
||||
|
||||
To record a new expense, begin in the main :menuselection:`Expenses` app dashboard, which presents
|
||||
the default :guilabel:`My Expenses` view. This view can also be accessed from
|
||||
:menuselection:`Expenses app --> My Expenses --> My Expenses`.
|
||||
|
||||
First, click :guilabel:`New`, and then fill out the various fields on the form.
|
||||
|
||||
- :guilabel:`Description`: Enter a short description for the expense in the :guilabel:`Description`
|
||||
field. This should be short and informative, such as `lunch with client` or `hotel for
|
||||
conference`.
|
||||
- :guilabel:`Category`: Select the expense category from the drop-down menu that most closely
|
||||
corresponds to the expense. For example, an airplane ticket would be appropriate for an expense
|
||||
:guilabel:`Category` named :guilabel:`Air Travel`.
|
||||
- :guilabel:`Total`: Enter the total amount paid for the expense in one of two ways:
|
||||
|
||||
#. If the expense is for one single item/expense, and the category selected was for a single item,
|
||||
enter the cost in the :guilabel:`Total` field (the :guilabel:`Quantity` field is hidden).
|
||||
#. If the expense is for multiples of the same item/expense with a fixed price, the
|
||||
:guilabel:`Unit Price` is displayed. Enter the quantity in the :guilabel:`Quantity` field, and
|
||||
the total cost is automatically updated with the correct total (the :guilabel:`Unit Price` x
|
||||
the :guilabel:`Quantity` = the total). Be advised, the word "total" does not appear, the total
|
||||
cost simply appears below the :guilabel:`Quantity`.
|
||||
|
||||
.. example::
|
||||
For example, in the case of mileage driven, the :guilabel:`Unit Price` is populated as the
|
||||
cost *per mile*. Set the :guilabel:`Quantity` to the *number of miles* driven, and the total
|
||||
is calculated.
|
||||
|
||||
- :guilabel:`Included Taxes`: If taxes were configured on the expense category, the tax percentage
|
||||
and amount appear automatically after entering either the :guilabel:`Total` or the
|
||||
:guilabel:`Quantity`.
|
||||
|
||||
.. note::
|
||||
When a tax is configured on an expense category, the :guilabel:`Included Taxes` value will
|
||||
update in real time as the :guilabel:`Total` or :guilabel:`Quantity` is updated.
|
||||
|
||||
- :guilabel:`Employee`: Using the drop-down menu, select the employee this expense is for.
|
||||
- :guilabel:`Paid By`: Click the radio button to indicate who paid for the expense and should be
|
||||
reimbursed. If the employee paid for the expense (and should be reimbursed) select
|
||||
:guilabel:`Employee (to reimburse)`. If the company paid directly instead (e.g. if the company
|
||||
credit card was used to pay for the expense) select :guilabel:`Company`. Depending on the expense
|
||||
category selected, this field may not appear.
|
||||
- :guilabel:`Bill Reference`: If there is any reference text that should be included for the
|
||||
expense, enter it in this field.
|
||||
- :guilabel:`Expense Date`: Using the calendar module, enter the date the expense was incurred. Use
|
||||
the :guilabel:`< (left)` and :guilabel:`> (right)` arrows to navigate to the correct month, then
|
||||
click on the specific day to enter the selection.
|
||||
- :guilabel:`Account`: Select the expense account that this expense should be logged on from the
|
||||
drop-down menu.
|
||||
- :guilabel:`Customer to Reinvoice`: If the expense is something that should be paid for by a
|
||||
customer, select the :abbr:`SO (Sales Order)` and customer that will be invoiced for this expense
|
||||
from the drop-down menu. All sales orders in the drop-down menu list both the :abbr:`SO (Sales
|
||||
Order)` as well as the company the sales order is written for, but after the expense is saved, the
|
||||
customer name disappears and only the :abbr:`SO (Sales Order)` is visible on the expense.
|
||||
|
||||
.. example::
|
||||
A customer wishes to have an on-site meeting for a custom garden (design and installation) and
|
||||
agrees to pay for the expenses associated with it (such as travel, hotel, meals, etc.). All
|
||||
expenses tied to that meeting would indicate the sales order for the custom garden (which also
|
||||
references the customer) as the :guilabel:`Customer to Reinvoice`.
|
||||
|
||||
- :guilabel:`Analytic Distribution`: Select the account(s) the expense should be written against
|
||||
from the drop-down menu for either :guilabel:`Projects`, :guilabel:`Departments`, or both.
|
||||
Multiple accounts can be listed for each category if needed. Adjust the percentage for each
|
||||
analytic account by typing in the percentage value next to the account.
|
||||
- :guilabel:`Company`: If multiple companies are set up, select the company this expense should be
|
||||
filed for from the drop-down menu. The current company will automatically populate this field.
|
||||
- :guilabel:`Notes...`: If any notes are needed in order to clarify the expense, enter them in the
|
||||
notes field.
|
||||
|
||||
.. image:: expenses/expense-filled-in.png
|
||||
:align: center
|
||||
:alt: A filled in expense form for a client lunch.
|
||||
|
||||
Attach a receipt
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
After the expense is created, the next step is to attach a receipt. Click the :guilabel:`Attach
|
||||
Receipt` button, and a file explorer appears. Navigate to the receipt to be attached, and click
|
||||
:guilabel:`Open`. The new receipt is recorded in the chatter, and the number of receipts will appear
|
||||
next to the :guilabel:`📎 (paperclip)` icon beneath the expense form. More than one receipt can be
|
||||
attached to an individual expense, as needed. The number of receipts attached to the expense will be
|
||||
noted on the paperclip icon.
|
||||
|
||||
.. image:: expenses/receipt-icon.png
|
||||
:align: center
|
||||
:alt: Attach a receipt and it appears in the chatter.
|
||||
|
||||
Create new expenses from a scanned receipt
|
||||
------------------------------------------
|
||||
|
||||
Rather than manually inputting all of the information for an expense, expenses can be created by
|
||||
scanning a PDF receipt.
|
||||
|
||||
First, in the main :guilabel:`Expenses` app dashboard view (this view can also be accessed from
|
||||
:menuselection:`Expenses app --> My Expenses --> My Expenses`), click :guilabel:`Scan`, and a file
|
||||
explorer pops up. Navigate to the receipt to be uploaded, click on it to select it, and then click
|
||||
:guilabel:`Open`.
|
||||
|
||||
.. image:: expenses/scan.png
|
||||
:align: center
|
||||
:alt: Create an expense by scanning a receipt. Click Scan at the top of the Expenses dashboard
|
||||
view.
|
||||
|
||||
The receipt is scanned, and a new entry is created with today's date as the :guilabel:`Expense
|
||||
Date`, and any other fields it can populate based on the scanned data, such as the total. Click on
|
||||
the new entry to open the individual expense form, and make any changes needed. The scanned receipt
|
||||
appears in the chatter.
|
||||
|
||||
Automatically create new expenses from an email
|
||||
-----------------------------------------------
|
||||
|
||||
Instead of individually creating each expense in the *Expenses* app, expenses can be automatically
|
||||
created by sending an email to an email alias.
|
||||
|
||||
To do so, first, an email alias needs to be configured. Go to :menuselection:`Expenses app -->
|
||||
Configuration --> Settings`. Ensure :guilabel:`Incoming Emails` is enabled.
|
||||
|
||||
.. image:: expenses/email-alias.png
|
||||
:align: center
|
||||
:alt: Create the domain alias by clicking the link.
|
||||
|
||||
.. note::
|
||||
If the domain alias needs to be set up, :guilabel:`Setup your domain alias` will appear beneath
|
||||
the incoming emails check box instead of the email address field. Refer to this documentation for
|
||||
setup instructions and more information: :doc:`/administration/maintain/domain_names`. Once the
|
||||
domain alias is configured, the email address field will be visible beneath the incoming emails
|
||||
section.
|
||||
|
||||
Next, enter the email address to be used in the email field, and then click :guilabel:`Save`. Now
|
||||
that the email address has been entered, emails can be sent to that alias to create new expenses
|
||||
without having to be in the Odoo database.
|
||||
|
||||
To submit an expense via email, create a new email and enter the product's *internal reference* code
|
||||
(if available) and the amount of the expense in the email subject. Next, attach the receipt to the
|
||||
email. Odoo creates the expense by taking the information in the email subject and combining it with
|
||||
the receipt.
|
||||
|
||||
To check an expense categories internal reference, go to :menuselection:`Expenses app -->
|
||||
Configuration --> Expense Categories`. If an internal reference is listed on the expense category,
|
||||
it is listed in the :guilabel:`Internal Reference` column.
|
||||
|
||||
.. image:: expenses/ref.png
|
||||
:align: center
|
||||
:alt: Internal reference numbers are listed in the main Expense Categories view.
|
||||
|
||||
To add an internal reference on an expense category, click on the category to open the form. Enter
|
||||
the internal reference in the field. Beneath the :guilabel:`Internal Reference` field, this sentence
|
||||
appears: :guilabel:`Use this reference as a subject prefix when submitting by email.`
|
||||
|
||||
.. image:: expenses/mileage-internal-reference.png
|
||||
:align: center
|
||||
:alt: Internal reference numbers are listed in the main Expense Products view.
|
||||
|
||||
.. note::
|
||||
For security purposes, only authenticated employee emails are accepted by Odoo when creating an
|
||||
expense from an email. To confirm an authenticated employee email address, go to the employee
|
||||
card in the :menuselection:`Employees` app, and refer to the :guilabel:`Work Email`
|
||||
|
||||
.. image:: expenses/authenticated-email-address.png
|
||||
:align: center
|
||||
:alt: Create the domain alias by clicking the link.
|
||||
|
||||
.. example::
|
||||
If submitting an expense via email for a $25.00 meal during a work trip, the email subject would
|
||||
be `FOOD $25.00`.
|
||||
|
||||
Explanation:
|
||||
|
||||
- The :guilabel:`Internal Reference` for the expense category `Meals` is `FOOD`
|
||||
- The :guilabel:`Cost` for the expense is `$25.00`
|
||||
|
||||
.. _expenses/report:
|
||||
|
||||
Create an expense report
|
||||
========================
|
||||
|
||||
When expenses are ready to submit (such as at the end of a business trip, or once a month), an
|
||||
*expense report* needs to be created. Go to the main :menuselection:`Expenses` app dashboard, which
|
||||
displays a default :guilabel:`My Expenses` view, or go to :menuselection:`Expenses app --> My
|
||||
Expenses --> My Expenses`.
|
||||
|
||||
Expenses are color coded by status. Any expense with a status of :guilabel:`To Report` (expenses
|
||||
that still need to be added to an expense report) the text appears in blue. All other statuses
|
||||
(:guilabel:`To Submit`, :guilabel:`Submitted`, and :guilabel:`Approved`) the text appears in black.
|
||||
|
||||
First, select each individual expense for the report by clicking the check box next to each entry,
|
||||
or quickly select all the expenses in the list by clicking the check box next to :guilabel:`Expense
|
||||
Date`.
|
||||
|
||||
Another way to quickly add all expenses that are not on an expense report is to click
|
||||
:guilabel:`Create Report` without selecting any expenses, and Odoo will select all expenses with a
|
||||
status of :guilabel:`To Submit` that are not already on a report.
|
||||
|
||||
.. image:: expenses/create-report.png
|
||||
:align: center
|
||||
:alt: Select the expenses to submit, then create the report.
|
||||
|
||||
.. note::
|
||||
Any expense can be selected from the :guilabel:`My Expenses` list, regardless of status. The
|
||||
:guilabel:`Create Report` button is visible as long as there is a minimum of 1 expense with a
|
||||
status of :guilabel:`To Report` selected. When the :guilabel:`Create Report` button is clicked,
|
||||
only expenses with a status of :guilabel:`To Submit` that are *not* currently on another expense
|
||||
report will appear in the newly created expense report.
|
||||
|
||||
Once the expenses have been selected, click the :guilabel:`Create Report` button. The new report
|
||||
appears with all the expenses listed in the :guilabel:`Expense` tab. If there is a receipt attached
|
||||
to an individual expense, a :guilabel:`📎 (paperclip)` icon appears next to the :guilabel:`Customer
|
||||
to Reinvoice` and :guilabel:`Analytic Distribution` columns.
|
||||
|
||||
When the report is created, the date range for the expenses appears in the :guilabel:`Expense Report
|
||||
Summary` field by default. It is recommended to edit this field with a short summary for each report
|
||||
to help keep expenses organized. Enter a short description for the expense report (such as `Client
|
||||
Trip NYC`, or `Repairs for Company Car`) in the :guilabel:`Expense Report Summary` field. Next,
|
||||
select a :guilabel:`Manager` from the drop-down menu to assign a manager to review the report. If
|
||||
needed, the :guilabel:`Journal` can be changed. Use the drop-down menu to select a different
|
||||
:guilabel:`Journal`.
|
||||
|
||||
.. image:: expenses/expense-report-summary.png
|
||||
:align: center
|
||||
:alt: Enter a short description and select a manager for the report.
|
||||
|
||||
If some expenses are not on the report that should be, they can still be added. Click :guilabel:`Add
|
||||
a line` at the bottom of the :guilabel:`Expense` tab. A pop up appears with all the available
|
||||
expenses that can be added to the report (with a status of :guilabel:`To Submit`). Click the check
|
||||
box next to each expense to add, then click :guilabel:`Select`. The items now appear on the report
|
||||
that was just created. If a new expense needs to be added that does *not* appear on the list, click
|
||||
:guilabel:`New` to create a new expense and add it to the report.
|
||||
|
||||
.. image:: expenses/add-an-expense-line.png
|
||||
:align: center
|
||||
:alt: Add more expenses to the report before submitting.
|
||||
|
||||
.. note::
|
||||
Expense reports can be created in one of three places:
|
||||
|
||||
#. Go to the main :menuselection:`Expenses` app dashboard (also accessed by going to
|
||||
:menuselection:`Expenses app --> My Expenses --> My Expenses`)
|
||||
#. Go to :menuselection:`Expenses app --> My Expenses --> My Reports`
|
||||
#. Go to :menuselection:`Expenses app --> Expense Reports`
|
||||
|
||||
In any of these views, click :guilabel:`New` to create a new expense report.
|
||||
|
||||
.. _expenses/submit:
|
||||
|
||||
Submit an expense report
|
||||
------------------------
|
||||
|
||||
When an expense report is completed, the next step is to submit the report to a manager for
|
||||
approval. Reports must be individually submitted, and cannot be submitted in batches. Open the
|
||||
specific report from the list of expense reports (if the report is not already open). To view all
|
||||
expense reports, go to :menuselection:`Expenses app --> My Expenses --> My Reports`.
|
||||
|
||||
If the list is large, grouping the results by status may be helpful since only reports that have a
|
||||
:guilabel:`To Submit` status need to be submitted, reports with an :guilabel:`Approved` or
|
||||
:guilabel:`Submitted` status do not.
|
||||
|
||||
The :guilabel:`To Submit` expenses are easily identifiable not just from the :guilabel:`To Submit`
|
||||
status, but the text appears in blue, while the other expenses text appears in black.
|
||||
|
||||
.. image:: expenses/expense-status.png
|
||||
:align: center
|
||||
:alt: Submit the report to the manager.
|
||||
|
||||
.. note::
|
||||
The status of each report is shown in the :guilabel:`Status` column on the right. If the
|
||||
:guilabel:`Status` column is not visible, click the :guilabel:`Additional Options (two dots)`
|
||||
icon at the end of the row, and enable :guilabel:`Status`.
|
||||
|
||||
Click on a report to open it, then click :guilabel:`Submit To Manager`. After submitting a report,
|
||||
the next step is to wait for the manager to approve it.
|
||||
|
||||
.. important::
|
||||
The :ref:`expenses/approve`, :ref:`expenses/post`, and :ref:`expenses/reimburse` sections are
|
||||
**only** for users with the *necessary rights*.
|
||||
|
||||
.. _expenses/approve:
|
||||
|
||||
Approve expenses
|
||||
================
|
||||
|
||||
In Odoo, not just anyone can approve expense reports— only users with the necessary rights (or
|
||||
permissions) can. This means that a user must have at least *Team Approver* rights for the
|
||||
*Expenses* app. Employees with the necessary rights can review expense reports, approve or reject
|
||||
them, and provide feedback thanks to the integrated communication tool.
|
||||
|
||||
To see who has rights to approve, go to the main :menuselection:`Settings` app and click on
|
||||
:guilabel:`Manage Users`.
|
||||
|
||||
.. note::
|
||||
If the *Settings* app is not available, then certain rights are not set on the account. Check the
|
||||
:guilabel:`Access Rights` tab of a user's card in the :menuselection:`Settings` app. the
|
||||
:guilabel:`Administration` section (bottom right of the :guilabel:`Access Rights` tab) is set to
|
||||
one of three options:
|
||||
|
||||
- :guilabel:`None (blank)`: The user cannot access the *Settings* app at all.
|
||||
- :guilabel:`Access Rights`: The user can only view the :guilabel:`User's & Companies` section of
|
||||
the *Settings* app.
|
||||
- :guilabel:`Settings`: The user has access to the entire *Settings* app with no restrictions.
|
||||
|
||||
Please refer to :doc:`this document </applications/general/users/manage_users>` to learn more
|
||||
about managing users and their access rights.
|
||||
|
||||
Click on an individual to view their card, which displays the :guilabel:`Access Rights` tab in the
|
||||
default view. Scroll down to the :guilabel:`Human Resources` section. Under :guilabel:`Expenses`,
|
||||
there are four options:
|
||||
|
||||
- :guilabel:`None (blank)`: A blank field means the user has no rights to view or approve expense
|
||||
reports, and can only view their own.
|
||||
- :guilabel:`Team Approver`: The user can only view and approve expense reports for their own
|
||||
specific team.
|
||||
- :guilabel:`All Approver`: The user can view and approve any expense report.
|
||||
- :guilabel:`Administrator`: The user can view and approve any expense report, as well as access the
|
||||
reporting and configuration menus in the *Expenses* app.
|
||||
|
||||
Users who are able to approve expense reports (typically managers) can easily view all expense
|
||||
reports they have access rights to. Go to :menuselection:`Expenses app --> Expense Reports`, and a
|
||||
list appears with all expense reports that have a status of either :guilabel:`To Submit`,
|
||||
:guilabel:`Submitted`, :guilabel:`Approved`, :guilabel:`Posted`, or :guilabel:`Done`. Expense
|
||||
reports with a status of :guilabel:`Refused` are hidden in the default view.
|
||||
|
||||
.. image:: expenses/expense-reports-list.png
|
||||
:align: center
|
||||
:alt: Reports to validate are found on the Reports to Approve page.
|
||||
|
||||
When viewing expense reports, there is a panel of filters that can be enabled or disabled on the
|
||||
left side. The three categories that filters can be applied on are :guilabel:`Status`,
|
||||
:guilabel:`Employee`, and :guilabel:`Company`. To view only expense reports with a particular
|
||||
status, enable the specific status filter to display the expense reports with only that status.
|
||||
Disable the specific status filter to hide the reports with that status. To view expense reports for
|
||||
a particular employee and/or company, enable the specific employee name filter and/or company filter
|
||||
in the :guilabel:`Employee` and :guilabel:`Company` sections.
|
||||
|
||||
Reports can be approved in two ways (individually or several at once) and refused only one way. To
|
||||
approve multiple expense reports at once, remain in the list view. First, select the reports to
|
||||
approve by clicking the check box next to each report, or click the box next to :guilabel:`Employee`
|
||||
to select all the reports in the list.
|
||||
|
||||
.. important::
|
||||
Only reports with a status of :guilabel:`Submitted` can be approved. It is recommended to only
|
||||
display the submitted reports by adjusting the status filter on the left side by only having the
|
||||
:guilabel:`Submitted` filter enabled.
|
||||
|
||||
If a report is selected that is unable to be approved, the :guilabel:`Approve Report` button
|
||||
**will not appear**, indicating there is a problem with the selected report(s).
|
||||
|
||||
Next, click the :guilabel:`Approve Report` button.
|
||||
|
||||
.. image:: expenses/approve-report.png
|
||||
:align: center
|
||||
:alt: Approve multiple reports by clicking the checkboxes next to each report.
|
||||
|
||||
To approve an individual report, click on a report to go to a detailed view of that report. In this
|
||||
view, several options are presented: :guilabel:`Approve`, :guilabel:`Report in Next Payslip`,
|
||||
:guilabel:`Refuse`, or :guilabel:`Reset to draft`. Click :guilabel:`Approve` to approve the report.
|
||||
|
||||
If :guilabel:`Refuse` is clicked, a pop-up window appears. Enter a brief explanation for the refusal
|
||||
in the :guilabel:`Reason to Refuse Expense` field, and then click :guilabel:`Refuse`.
|
||||
|
||||
.. image:: expenses/refuse-expense.png
|
||||
:align: center
|
||||
:alt: Send messages in the chatter.
|
||||
|
||||
Team managers can easily view all the expense reports for their team members. While in the
|
||||
:guilabel:`Expense Reports` view, click the drop-down arrow in the right-side of the search box, and
|
||||
click on :guilabel:`My Team` in the :guilabel:`Filters` section. This presents all the reports for
|
||||
the manager's team.
|
||||
|
||||
.. image:: expenses/my-team-filter.png
|
||||
:align: center
|
||||
:alt: Select the My Team filter.
|
||||
|
||||
.. tip::
|
||||
If more information is needed, such as a missing receipt, communication is easy from the chatter.
|
||||
In an individual report, simply click :guilabel:`Send message` to open the message text box. Type
|
||||
in a message, tagging the proper person (if needed), and post it to the chatter by clicking
|
||||
:guilabel:`Send`. The message is posted in the chatter, and the person tagged will be notified
|
||||
via email of the message, as well as any followers.
|
||||
|
||||
The only people that can be tagged in a message are *followers*. To see who is a follower, click
|
||||
on the :guilabel:`👤 (person)` icon to display the followers of the expense.
|
||||
|
||||
.. image:: expenses/chatter.png
|
||||
:align: center
|
||||
:alt: Send messages in the chatter.
|
||||
|
||||
.. _expenses/post:
|
||||
|
||||
Post expenses in accounting
|
||||
===========================
|
||||
|
||||
Once an expense report is approved, the next step is to post the report to the accounting journal.
|
||||
To view all expense reports, go to :menuselection:`Expenses app --> Expense Reports`. To view only the
|
||||
expense reports that have been approved and need to be posted, adjust the filters on the left side
|
||||
so that only the :guilabel:`Approved` status is enabled.
|
||||
|
||||
.. image:: expenses/post-reports.png
|
||||
:align: center
|
||||
:alt: View reports to post by clicking on expense reports, then reports to post.
|
||||
|
||||
Just like approvals, expense reports can be posted in two ways (individually or several at once). To
|
||||
post multiple expense reports at once, remain in the list view. First, select the reports to post by
|
||||
clicking the check box next to each report, or click the box next to :guilabel:`Employee` to select
|
||||
all the reports in the list. Next, click :guilabel:`Post Entries`.
|
||||
|
||||
.. image:: expenses/post-entries.png
|
||||
:align: center
|
||||
:alt: Post multiple reports at a time from the Expense Reports view, with the Approved filter.
|
||||
|
||||
To post an individual report, click on a report to go to the detailed view of that report. In this
|
||||
view, several options are presented: :guilabel:`Post Journal Entries`, :guilabel:`Report In Next
|
||||
Payslip`, :guilabel:`Refuse`, or :guilabel:`Reset to Draft`. Click :guilabel:`Post Journal Entries`
|
||||
to post the report.
|
||||
|
||||
If :guilabel:`Refuse` is clicked, a pop-up window appears. Enter a brief explanation for the refusal
|
||||
in the :guilabel:`Reason to Refuse Expense` field, and then click :guilabel:`Refuse`. Refused
|
||||
reports can be viewed by going to :menuselection:`Expenses app --> Expense Reports`, then adjusting
|
||||
the filters on the left so that only :guilabel:`Refused` is selected. This will only show the
|
||||
refused expense reports.
|
||||
|
||||
.. important::
|
||||
To post expense reports to an accounting journal, the user must have following access rights:
|
||||
|
||||
- Accounting: Accountant or Adviser
|
||||
- Expenses: Manager
|
||||
|
||||
.. _expenses/reimburse:
|
||||
|
||||
Reimburse employees
|
||||
===================
|
||||
|
||||
After an expense report is posted to an accounting journal, the next step is to reimburse the
|
||||
employee. To view all the expense reports to pay, go to :menuselection:`Expenses app --> Expense
|
||||
Reports --> Reports To Pay`.
|
||||
|
||||
.. image:: expenses/reports-to-pay.png
|
||||
:align: center
|
||||
:alt: View reports to pay by clicking on expense reports, then reports to pay.
|
||||
|
||||
Just like approvals and posting, expense reports can be paid in two ways (individually or several at
|
||||
once). To pay multiple expense reports at once, remain in the list view. First, select the reports
|
||||
to pay by clicking the check box next to each report, or click the box next to :guilabel:`Employee`
|
||||
to select all the reports in the list. Next, click :guilabel:`Register Payment`.
|
||||
|
||||
.. image:: expenses/register-payment.png
|
||||
:align: center
|
||||
:alt: Post multiple reports by selecting them, clicking the gear, and then post the entries.
|
||||
|
||||
To pay an individual report, click on a report to go to a detailed view of that report. Click
|
||||
:guilabel:`Register Payment` to pay the employee.
|
||||
|
||||
A :guilabel:`Register Payment` pop-up appears, and the :guilabel:`Journal`, :guilabel:`Payment
|
||||
Method`, and :guilabel:`Payment Date` can be modified, if needed. When the selections are correct,
|
||||
click :guilabel:`Create Payment` to send the payment to the employee.
|
||||
|
||||
To pay an individual report, click on a report in the list view to go to a detailed view of that
|
||||
report. Click :guilabel:`Register Payment` to pay the employee. A :guilabel:`Register Payment`
|
||||
pop-up appears, but when paying an individual expense report instead of several at once, more
|
||||
options appear in the pop-up. In addition to the :guilabel:`Journal`, :guilabel:`Payment Method`,
|
||||
and :guilabel:`Payment Date` fields, a :guilabel:`Recipient Bank Account`, :guilabel:`Amount`, and
|
||||
:guilabel:`Memo` field appear. Select the employee's bank account from the drop-down menu to
|
||||
directly deposit the payment to their account. When all other selections are correct, click
|
||||
:guilabel:`Create Payment` to send the payment to the employee.
|
||||
|
||||
.. image:: expenses/two-payment-posting-options.png
|
||||
:align: center
|
||||
:alt: Different options appear when registering an individual expense report versus multiple
|
||||
expense reports at once.
|
||||
|
||||
Re-invoice expenses to customers
|
||||
================================
|
||||
|
||||
If expenses are tracked on customer projects, expenses can be automatically charged back to the
|
||||
customer. This is done by creating an expense, referencing the :abbr:`SO (Sales Order)` the expense
|
||||
should be added to, and then creating the expense report. Next, managers approve the expense report,
|
||||
and the accounting department posts the journal entries. Finally, once the expense report is posted
|
||||
to a journal, the expense(s) appears on the :abbr:`SO (Sales Order)` that was referenced. The sales
|
||||
order can then be invoiced, thus invoicing the customer for the expense.
|
||||
|
||||
Setup
|
||||
-----
|
||||
|
||||
- Enable **Customer Billing** in the Expenses settings
|
||||
First, specify the invoicing policy for each expense category. Go to :menuselection:`Expenses app
|
||||
--> Configuration --> Expense Categories`. Click on the expense category to open the expense
|
||||
category form. Under the :guilabel:`Invoicing` section, click the radio button next to the desired
|
||||
selection for :guilabel:`Re-Invoicing Expenses`. Options are :guilabel:`None`, :guilabel:`At cost`,
|
||||
and :guilabel:`Sales price`.
|
||||
|
||||
- Go to the product configuration menu and set the invoicing method on
|
||||
all your Expense types:
|
||||
:guilabel:`Re-Invoicing Expenses`:
|
||||
|
||||
- Ordered quantities: it will invoice expenses based on the ordered
|
||||
quantity
|
||||
- :guilabel:`None`: Expense category will not be re-invoiced.
|
||||
- :guilabel:`At cost`: Expense category will invoice expenses at their real cost.
|
||||
- :guilabel:`At sales price`: Expense category will invoice the price set on the sale order.
|
||||
|
||||
- Delivered quantities: it will invoice expenses based on the
|
||||
expenses quantity
|
||||
Create an expense
|
||||
-----------------
|
||||
|
||||
- At cost: will invoice expenses at their real cost.
|
||||
First, when :ref:`creating a new expense <expenses/new>`, the correct information needs to be
|
||||
entered in order to re-invoice a customer. Select the *sales order* the expense will appear on in
|
||||
the :guilabel:`Customer to Reinvoice` section, from the drop-down menu. Next, select the
|
||||
:guilabel:`Analytic Account` the expense will be posted to. After the expense(s) are created, the
|
||||
expense report needs to be :ref:`created <expenses/report>` and :ref:`submitted <expenses/submit>`
|
||||
as usual.
|
||||
|
||||
- At sales price: will invoice based on a fixed sales price set on
|
||||
the sale order.
|
||||
.. image:: expenses/reinvoice-expense.png
|
||||
:align: center
|
||||
:alt: Ensure the customer to be invoiced is called out on the expense.
|
||||
|
||||
.. image:: expenses/invoicing_01.png
|
||||
:align: center
|
||||
.. important::
|
||||
Selecting a :guilabel:`Customer to Reinvoice` when creating an expense is critical, since this is
|
||||
what causes the expenses to be automatically invoiced after an expense report is approved.
|
||||
|
||||
Create an order
|
||||
---------------
|
||||
The :guilabel:`Customer to Reinvoice` field can be modified *until an expense report is*
|
||||
**approved**, then the field is no longer able to be modified.
|
||||
|
||||
- As a salesman, create and confirm a Sales Order for the services
|
||||
delivered to your customer. If you don't put any expense in the
|
||||
order, it will be added automatically once posted by the
|
||||
accountant.
|
||||
Validate and post expenses
|
||||
--------------------------
|
||||
|
||||
- Link the expense to the Sale Order.
|
||||
Only employees with permissions (typically managers or supervisors) can :ref:`approve expenses
|
||||
<expenses/approve>`. Before approving an expense report, ensure the :guilabel:`Analytic
|
||||
Distribution` is set on every expense line of a report. If an :guilabel:`Analytic Distribution` is
|
||||
missing, assign the correct account(s) from the drop-down menu, and then click :guilabel:`Approve`
|
||||
or :guilabel:`Refuse`.
|
||||
|
||||
.. image:: expenses/invoicing_02.png
|
||||
:align: center
|
||||
|
||||
Submit, validate and post expenses
|
||||
----------------------------------
|
||||
|
||||
- As a manager, make sure the analytic account is set on every expense
|
||||
line on approving expenses reports. Click the line to add one if
|
||||
missing. Employees are already able to set one when submitting.
|
||||
|
||||
.. image:: expenses/invoicing_03.png
|
||||
:align: center
|
||||
|
||||
- As an accountant, post journal entries.
|
||||
The accounting department is typically responsible for :ref:`posting journal entries
|
||||
<expenses/post>`. Once an expense report is approved, it can then be posted. The :abbr:`SO (Sales
|
||||
Order)` is **only** updated *after the journal entries are posted*. One the journal entries are
|
||||
posted, the expenses now appear on the referenced :abbr:`SO (Sales Order)`.
|
||||
|
||||
Invoice expenses
|
||||
----------------
|
||||
|
||||
Now you can invoice the order. It shows up in
|
||||
:menuselection:`Sales --> Invoicing --> Sales`
|
||||
to Invoice. The expenses have been added automatically in the order
|
||||
lines. Such items show up in blue (i.e. to invoice).
|
||||
Once the :abbr:`SO (Sales Order)` has been updated, it is time to invoice the customer. After the
|
||||
expense report has been approved and the journal entries have been posted, click the
|
||||
:guilabel:`Sales Orders` smart button to open the :abbr:`SO (Sales Order)`. The expenses to be
|
||||
re-invoiced are now on the :abbr:`SO (Sales Order)`.
|
||||
|
||||
.. image:: expenses/invoicing_04.png
|
||||
:align: center
|
||||
.. image:: expenses/sales-order.png
|
||||
:align: center
|
||||
:alt: After the expense report is posted to the journal entry, the sales order can be called up
|
||||
by clicking on the sales order number.
|
||||
|
||||
e (i.e. to invoice).
|
||||
.. note::
|
||||
More than one :abbr:`SO (Sales Order)` can be referenced on an expense report. If more than one
|
||||
:abbr:`SO (Sales Order)` is referenced, the :guilabel:`Sales Orders` smart button will list the
|
||||
number of :abbr:`SO (Sales Order)`'s. If multiple :abbr:`SO (Sales Order)`'s are listed, the
|
||||
:guilabel:`Sales Orders` smart button opens a list view of all the :abbr:`SO (Sales Order)`'s on
|
||||
the expense report. Click on a :abbr:`SO (Sales Order)` to open the individual :abbr:`SO (Sales
|
||||
Order)`.
|
||||
|
||||
The expenses are listed in the :abbr:`SO (Sales Order)` :guilabel:`Order Lines` tab.
|
||||
|
||||
.. image:: expenses/so-details.png
|
||||
:align: center
|
||||
:alt: See the expenses listed on the sales order after clicking into it.
|
||||
|
||||
Next, click :guilabel:`Create Invoice`, and select if the invoice is for a :guilabel:`Regular
|
||||
invoice`, a :guilabel:`Down payment (percentage)`, or a :guilabel:`Down payment (fixed amount)` by
|
||||
clicking the radio button next to it. Then, click :guilabel:`Create Invoice`. The customer has now
|
||||
been invoiced for the expenses.
|
||||
|
||||
|
After Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 9.1 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 40 KiB |