Compare commits
87 Commits
16.0-updat
...
saas-15.4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d782210ec2 | ||
|
|
c36c26c28c | ||
|
|
b9ed4bc522 | ||
|
|
2a7646b634 | ||
|
|
d15e642f7b | ||
|
|
cbb9085d7c | ||
|
|
062f7c360e | ||
|
|
bfd21870d0 | ||
|
|
7912fa9e50 | ||
|
|
f3afc49f80 | ||
|
|
eb91cc5234 | ||
|
|
90dd3835b0 | ||
|
|
911daf825a | ||
|
|
5926cd2fb5 | ||
|
|
e1cb07eeb7 | ||
|
|
e2e30ce0df | ||
|
|
9e44f59b99 | ||
|
|
89c71fac93 | ||
|
|
a9c8dbd36f | ||
|
|
bdf1717485 | ||
|
|
87d7e6ef3b | ||
|
|
ae32209d2e | ||
|
|
524794c59c | ||
|
|
d58060d7f5 | ||
|
|
bcf3371bda | ||
|
|
419d3fa8b9 | ||
|
|
e30f49f021 | ||
|
|
ff54520086 | ||
|
|
aa2bb20b99 | ||
|
|
c2f4f6d565 | ||
|
|
3c9f6d03ff | ||
|
|
6a5828290d | ||
|
|
f33e300485 | ||
|
|
797e793840 | ||
|
|
65df2205b2 | ||
|
|
e3f6e74a44 | ||
|
|
71746079eb | ||
|
|
507e0d69b1 | ||
|
|
e2ecd7374d | ||
|
|
b3a9ba9637 | ||
|
|
8e54552d0b | ||
|
|
7a51ad79dd | ||
|
|
4ea50a7698 | ||
|
|
4d95d71378 | ||
|
|
96da70e693 | ||
|
|
1049a2c7f8 | ||
|
|
67400a763d | ||
|
|
8c67532587 | ||
|
|
6ff31ab382 | ||
|
|
7648b23e76 | ||
|
|
fb119171da | ||
|
|
c412efff2c | ||
|
|
5413e8d45f | ||
|
|
163a3d17ff | ||
|
|
f55b70c73b | ||
|
|
be47502bb5 | ||
|
|
10758fc7d6 | ||
|
|
68cb30a3a7 | ||
|
|
8952db8e01 | ||
|
|
297b9b2d5e | ||
|
|
87408fd81e | ||
|
|
8d22189b19 | ||
|
|
015d1470c2 | ||
|
|
c3336891a1 | ||
|
|
d3d882757d | ||
|
|
4ff6271ad8 | ||
|
|
6655c0800e | ||
|
|
d37c6c67bd | ||
|
|
187813cdbc | ||
|
|
ceed36b6f2 | ||
|
|
0d12103866 | ||
|
|
359a71e83f | ||
|
|
9f69d7d402 | ||
|
|
3780b0e135 | ||
|
|
886ba6150e | ||
|
|
4d34066326 | ||
|
|
2836734afc | ||
|
|
b03ce9947f | ||
|
|
bf1e7ee63e | ||
|
|
ddf9fe780e | ||
|
|
8a6e2e5d9f | ||
|
|
33c2ee98c8 | ||
|
|
1d01977ba5 | ||
|
|
7fdf0ffeb4 | ||
|
|
1a57545ff3 | ||
|
|
2a4e3cb788 | ||
|
|
9b3a941753 |
2
Makefile
@@ -26,7 +26,7 @@ SOURCE_DIR = content
|
||||
|
||||
HTML_BUILD_DIR = $(BUILD_DIR)/html
|
||||
ifdef VERSIONS
|
||||
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/master
|
||||
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/saas-15.4
|
||||
endif
|
||||
ifneq ($(CURRENT_LANG),en)
|
||||
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/$(CURRENT_LANG)
|
||||
|
||||
14
README.md
@@ -4,11 +4,11 @@
|
||||
|
||||
### Requirements
|
||||
|
||||
- [Git](https://www.odoo.com/documentation/master/contributing/documentation.html#install-git)
|
||||
- [Python 3.7 or 3.8](https://www.odoo.com/documentation/master/contributing/documentation.html#python)
|
||||
- Python dependencies listed in the file [`requirements.txt`](https://github.com/odoo/documentation/tree/master/requirements.txt).
|
||||
- [Make](https://www.odoo.com/documentation/master/contributing/documentation.html#make)
|
||||
- A local copy of the [odoo/odoo repository in master](https://github.com/odoo/odoo/tree/master) (Optional)
|
||||
- [Git](https://www.odoo.com/documentation/saas-15.4/contributing/documentation.html#install-git)
|
||||
- [Python 3.7 or 3.8](https://www.odoo.com/documentation/saas-15.4/contributing/documentation.html#python)
|
||||
- Python dependencies listed in the file [`requirements.txt`](https://github.com/odoo/documentation/tree/saas-15.4/requirements.txt).
|
||||
- [Make](https://www.odoo.com/documentation/saas-15.4/contributing/documentation.html#make)
|
||||
- A local copy of the [odoo/odoo repository in saas-15.4](https://github.com/odoo/odoo/tree/saas-15.4) (Optional)
|
||||
|
||||
### Instructions
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
2. Open the file `documentation/_build/html/index.html` in your web browser to display the render.
|
||||
|
||||
3. See [this guide](https://www.odoo.com/documentation/master/contributing/documentation.html#preview-your-changes)
|
||||
3. See [this guide](https://www.odoo.com/documentation/saas-15.4/contributing/documentation.html#preview-your-changes)
|
||||
for more detailed instructions.
|
||||
|
||||
Optional: to fully build the developer documentation with inline docstrings for documented Python
|
||||
@@ -34,7 +34,7 @@ be shown.
|
||||
## Contribute to the documentation
|
||||
|
||||
For contributions to the content of the documentation, please refer to the
|
||||
[Introduction Guide](https://www.odoo.com/documentation/master/contributing/documentation.html).
|
||||
[Introduction Guide](https://www.odoo.com/documentation/saas-15.4/contributing/documentation.html).
|
||||
|
||||
To **report a content issue**, **request new content** or **ask a question**, use the
|
||||
[repository's issue tracker](https://github.com/odoo/documentation-user/issues) as usual.
|
||||
|
||||
36
conf.py
@@ -22,7 +22,7 @@ copyright = 'Odoo S.A.'
|
||||
# `version` if the version info for the project being documented, acts as replacement for |version|,
|
||||
# also used in various other places throughout the built documents.
|
||||
# `release` is the full version, including alpha/beta/rc tags. Acts as replacement for |release|.
|
||||
version = release = 'master'
|
||||
version = release = 'saas-15.4'
|
||||
|
||||
# The minimal Sphinx version required to build the documentation.
|
||||
needs_sphinx = '3.0.0'
|
||||
@@ -51,6 +51,10 @@ exclude_patterns = [
|
||||
# See https://docutils.sourceforge.io/docs/ref/rst/roles.html#standard-roles for other roles.
|
||||
default_role = 'literal'
|
||||
|
||||
|
||||
# Whether scaled down images should be be wrapped in a `<a/>` tag linking to the image file or not.
|
||||
html_scaled_image_link = False
|
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text
|
||||
add_function_parentheses = True
|
||||
|
||||
@@ -87,7 +91,6 @@ else:
|
||||
sys.version_info = (3, 7, 0)
|
||||
odoo_dir = odoo_sources_dirs[0].resolve()
|
||||
source_read_replace_vals['ODOO_RELPATH'] = '/../' + str(odoo_sources_dirs[0])
|
||||
source_read_replace_vals['ODOO_ABSPATH'] = str(odoo_dir)
|
||||
sys.path.insert(0, str(odoo_dir))
|
||||
import odoo.addons
|
||||
odoo.addons.__path__.append(str(odoo_dir) + '/addons')
|
||||
@@ -184,8 +187,9 @@ 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-15.4': "Odoo Online",
|
||||
'saas-15.3': "Odoo Online",
|
||||
'saas-15.2': "Odoo Online",
|
||||
'saas-15.1': "Odoo Online",
|
||||
'15.0': "Odoo 15",
|
||||
'14.0': "Odoo 14",
|
||||
'13.0': "Odoo 13",
|
||||
@@ -194,18 +198,18 @@ versions_names = {
|
||||
# The language names that should be shown in the language switcher, if the config option `languages`
|
||||
# is populated. If a language is passed to `languages` but is not listed here, it will not be shown.
|
||||
languages_names = {
|
||||
'de': 'Deutsch',
|
||||
'en': 'English',
|
||||
'es': 'Español',
|
||||
'fr': 'Français',
|
||||
'nl': 'Nederlands',
|
||||
'pt_BR': 'Português (BR)',
|
||||
'uk': 'українська',
|
||||
'zh_CN': '简体中文',
|
||||
'de': 'DE',
|
||||
'en': 'EN',
|
||||
'es': 'ES',
|
||||
'fr': 'FR',
|
||||
'nl': 'NL',
|
||||
'pt_BR': 'PT',
|
||||
'uk': 'UA',
|
||||
'zh_CN': 'ZH',
|
||||
}
|
||||
|
||||
# The specifications of redirect rules used by the redirects extension.
|
||||
redirects_file = 'redirects.txt'
|
||||
# The directory in which files holding redirect rules used by the 'redirects' extension are listed.
|
||||
redirects_dir = 'redirects/'
|
||||
|
||||
sphinx_tabs_disable_tab_closing = True
|
||||
sphinx_tabs_disable_css_loading = True
|
||||
@@ -229,12 +233,12 @@ html_favicon = os.path.join(html_theme_path[0], html_theme, 'static', 'img', 'fa
|
||||
# They are copied after the builtin static files, so a file named "default.css" will overwrite the
|
||||
# builtin "default.css".
|
||||
html_static_path = ['static']
|
||||
html_add_permalinks = '¶' # Sphinx < 3.5
|
||||
html_permalinks = True # Sphinx >= 3.5
|
||||
html_permalinks = True
|
||||
|
||||
# Additional JS & CSS files that can be imported with the 'custom-js' and 'custom-css' metadata.
|
||||
# Lists are empty because the files are specified in extensions/themes.
|
||||
html_js_files = []
|
||||
html_css_files = ["css/js.css"]
|
||||
html_css_files = []
|
||||
|
||||
# PHP lexer option to not require <?php
|
||||
highlight_options = {
|
||||
|
||||
@@ -272,55 +272,80 @@ Enterprise Edition:
|
||||
* `Official download page <download_>`_
|
||||
* `GitHub repository <enterprise-repository_>`_
|
||||
|
||||
.. _setup/install/source/git:
|
||||
|
||||
Git
|
||||
~~~
|
||||
|
||||
The following requires `git <https://git-scm.com/>`_ to be installed on your machine and that you
|
||||
have basic knowledge of git commands.
|
||||
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/howtos/rdtraining>` developer tutorial, or plan
|
||||
on contributing to Odoo source code, choose SSH.
|
||||
|
||||
Community Edition:
|
||||
.. 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
|
||||
|
||||
.. code-block:: doscon
|
||||
.. tabs::
|
||||
|
||||
C:\> git clone https://github.com/odoo/odoo.git
|
||||
.. 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
|
||||
|
||||
.. code-block:: console
|
||||
.. tabs::
|
||||
|
||||
$ git clone https://github.com/odoo/odoo.git
|
||||
.. 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
|
||||
|
||||
.. code-block:: console
|
||||
.. tabs::
|
||||
|
||||
$ git clone https://github.com/odoo/odoo.git
|
||||
.. tab:: Clone with HTTPS
|
||||
|
||||
Enterprise Edition: (see :ref:`setup/install/editions` to get access)
|
||||
.. code-block:: console
|
||||
|
||||
.. tabs::
|
||||
$ git clone https://github.com/odoo/odoo.git
|
||||
$ git clone https://github.com/odoo/enterprise.git
|
||||
|
||||
.. group-tab:: Windows
|
||||
.. tab:: Clone with SSH
|
||||
|
||||
.. code-block:: doscon
|
||||
.. code-block:: console
|
||||
|
||||
C:\> git clone https://github.com/odoo/enterprise.git
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone https://github.com/odoo/enterprise.git
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ git clone https://github.com/odoo/enterprise.git
|
||||
$ 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
|
||||
@@ -329,6 +354,8 @@ Enterprise Edition: (see :ref:`setup/install/editions` to get access)
|
||||
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
|
||||
-------
|
||||
|
||||
@@ -451,6 +478,11 @@ PostgreSQL
|
||||
<https://postgresapp.com>`_ to download and install PostgreSQL (supported version: 10.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:
|
||||
|
||||
@@ -645,8 +677,8 @@ A typical way to run the server would be:
|
||||
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 default database
|
||||
to serve on `localhost:8069`.
|
||||
PostgreSQL login, `dbpassword` is the PostgreSQL password, and `mydb` is the name of the
|
||||
PostgreSQL database.
|
||||
|
||||
.. group-tab:: Linux
|
||||
|
||||
@@ -655,8 +687,8 @@ A typical way to run the server would be:
|
||||
$ cd /CommunityPath
|
||||
$ python3 odoo-bin --addons-path=addons -d mydb
|
||||
|
||||
Where `CommunityPath` is the path of the Odoo Community installation and `mydb` is the default
|
||||
database to serve on `localhost:8069`.
|
||||
Where `CommunityPath` is the path of the Odoo Community installation, and `mydb` is the name
|
||||
of the PostgreSQL database.
|
||||
|
||||
.. group-tab:: Mac OS
|
||||
|
||||
@@ -665,11 +697,27 @@ A typical way to run the server would be:
|
||||
$ cd /CommunityPath
|
||||
$ python3 odoo-bin --addons-path=addons -d mydb
|
||||
|
||||
Where `CommunityPath` is the path of the Odoo Community installation and `mydb` is the default
|
||||
database to serve on `localhost:8069`.
|
||||
Where `CommunityPath` is the path of the Odoo Community installation, and `mydb` is the name
|
||||
of the PostgreSQL database.
|
||||
|
||||
.. warning::
|
||||
Some versions of python on Mac might lead to the following error message: `current limit
|
||||
exceeds maximum limit`. In that case, add the following parameter `--limit-memory-hard 0`
|
||||
to avoid the problem.
|
||||
|
||||
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 arguments for odoo-bin </developer/misc/other/cmdline>`.
|
||||
:doc:`The exhaustive list of CLI arguments for odoo-bin </developer/cli>`.
|
||||
|
||||
.. _setup/install/docker:
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ Maintain
|
||||
.. toctree::
|
||||
|
||||
maintain/domain_names
|
||||
maintain/google_oauth
|
||||
maintain/update
|
||||
maintain/enterprise
|
||||
maintain/hosting_changes
|
||||
|
||||
192
content/administration/maintain/google_oauth.rst
Normal file
@@ -0,0 +1,192 @@
|
||||
========================================
|
||||
Connect Gmail to Odoo using Google OAuth
|
||||
========================================
|
||||
|
||||
Odoo is compatible with Google's OAuth for Gmail. In order to send secure emails from a custom
|
||||
domain, all that is required is to configure a few settings on Google's *Workspace* platform, as
|
||||
well as on the back end of the Odoo database. This configuration works by using either a personal
|
||||
email address or an address created by a custom domain.
|
||||
|
||||
.. tip::
|
||||
For more information, visit `Google's documentation
|
||||
<https://support.google.com/cloud/answer/6158849>`_ on setting up OAuth.
|
||||
|
||||
Setup in Google
|
||||
===============
|
||||
|
||||
Create a new project
|
||||
--------------------
|
||||
|
||||
To get started, go to the `Google API Platform
|
||||
<https://console.cloud.google.com/apis/credentials/consent>`_. Log in with your *Google Workspace*
|
||||
account if you have one, otherwise log in with your personal Gmail account (this should match the
|
||||
email address you want to configure in Odoo).
|
||||
|
||||
After that, click on :guilabel:`Create Project`, located on the far right of the OAuth consent
|
||||
screen. If a project has already been created in this account, then the :guilabel:`New Project`
|
||||
option will be located on the top left under the :guilabel:`Select a project` drop-down menu.
|
||||
|
||||
On the :guilabel:`New Project` screen, rename the :guilabel:`Project name` to `Odoo` and browse for
|
||||
the :guilabel:`Location`. Set the :guilabel:`Location` as the `Google Workspace` organization. If
|
||||
you are using a personal Gmail account, then leave the :guilabel:`Location` as `No Organization`.
|
||||
|
||||
.. image:: google_oauth/new-project.png
|
||||
:align: center
|
||||
:alt: Project Name and Location for Google Oauth.
|
||||
|
||||
Click on :guilabel:`Create` to finish this step. On the next screen, :guilabel:`User Type` options,
|
||||
select the :guilabel:`External` option, and then click on :guilabel:`Create` again, which will
|
||||
finally navigate to the :guilabel:`Edit app registration` page.
|
||||
|
||||
Edit app registration
|
||||
---------------------
|
||||
|
||||
- On the :guilabel:`Oauth consent screen` step, under the :guilabel:`App information` section,
|
||||
enter `Odoo` in the :guilabel:`App name` field. Select the organization's email address under the
|
||||
:guilabel:`User support` email field.
|
||||
- Next, under :menuselection:`App Domain --> Authorized domains`, click on :guilabel:`Add Domain`
|
||||
and enter `odoo.com`.
|
||||
- After that, under the :guilabel:`Developer contact information` section, enter the organization's
|
||||
email address. Google uses this email address to notify the organization about any changes to
|
||||
your project.
|
||||
- Next, click on the :guilabel:`Save and Continue` button.
|
||||
- Then, skip the :guilabel:`Scopes` page by scrolling to the bottom and clicking on
|
||||
:guilabel:`Save and Continue`.
|
||||
- Next, add the email being configured under the :guilabel:`Test users` step by clicking on
|
||||
:guilabel:`Add Users` and then the :guilabel:`Save and Continue` button. A summary of the
|
||||
:guilabel:`App registration` appears.
|
||||
- Finally, scroll to the bottom and click on :guilabel:`Back to Dashboard`.
|
||||
|
||||
Create Credentials
|
||||
------------------
|
||||
|
||||
Now that you have set up the project, you need to create credentials, which includes the
|
||||
:guilabel:`Client ID` and :guilabel:`Client Secret`. First, click on :guilabel:`Credentials` in the
|
||||
left sidebar menu.
|
||||
|
||||
Then, click on :guilabel:`Create Credentials` in the top menu and select
|
||||
:guilabel:`OAuth client ID` from the dropdown menu.
|
||||
|
||||
- Under :guilabel:`Application Type`, select :guilabel:`Web Application` from the dropdown menu.
|
||||
- In the :guilabel:`Client ID` field, enter `Odoo`.
|
||||
- Under the :guilabel:`Authorized redirect URIs` label, click the button :guilabel:`ADD URI`, and
|
||||
then input `https://yourdbname.odoo.com/google_gmail/confirm` in the :guilabel:`URIs 1` field. Be
|
||||
sure to replace the *yourdbname* part of the URL with your actual Odoo database name.
|
||||
- Next, click on :guilabel:`Create` to generate an OAuth :guilabel:`Client ID` and
|
||||
:guilabel:`Client Secret`. Finally, copy each generated value for later use when configuring in
|
||||
Odoo, and then navigate to the Odoo database.
|
||||
|
||||
.. image:: google_oauth/client-credentials.png
|
||||
:align: center
|
||||
:alt: Client ID and Client Secret for Google OAuth.
|
||||
|
||||
Setup in Odoo
|
||||
=============
|
||||
|
||||
Enter Google Credentials
|
||||
------------------------
|
||||
|
||||
First, open Odoo and navigate to the :guilabel:`Apps` module. Then, remove the :guilabel:`Apps`
|
||||
filter from the search bar and type in `Google`. Install the module called :guilabel:`Google Gmail`.
|
||||
|
||||
Next, navigate to :menuselection:`Settings --> General Settings`, and under the :guilabel:`Discuss`
|
||||
section, ensure that the checkbox for :guilabel:`Custom Email Servers` is checked. This populates a
|
||||
new option for :guilabel:`Gmail Credentials`. Then, copy and paste the :guilabel:`Client ID` and
|
||||
:guilabel:`Client Secret` into the respective fields and :guilabel:`Save` the settings.
|
||||
|
||||
Configure outgoing email server
|
||||
-------------------------------
|
||||
|
||||
After that, on the :guilabel:`General Settings` page, under :guilabel:`Custom Email Servers`, click
|
||||
:guilabel:`Outgoing Email Servers` to configure the external Gmail account.
|
||||
|
||||
.. image:: google_oauth/outgoing-servers.png
|
||||
:align: center
|
||||
:alt: Configure Outgoing Email Servers in Odoo.
|
||||
|
||||
Then, :guilabel:`Create` a new email server and select the option for :guilabel:`Gmail`. Next, fill
|
||||
in the :guilabel:`Description` (can be anything) and the email :guilabel:`Username` and click on
|
||||
:guilabel:`Connect your Gmail account`.
|
||||
|
||||
A new window from :guilabel:`Google` opens to complete the authorization process. Select the
|
||||
appropriate email address that is being configured in Odoo.
|
||||
|
||||
If the email address is a personal account, an extra step pops up, click :guilabel:`Continue` to
|
||||
allow the verification and connect the Gmail account to Odoo.
|
||||
|
||||
Then, allow Odoo to access the Google account by clicking on :guilabel:`Continue` or
|
||||
:guilabel:`Allow`. After that, the page navigates back to the newly configured outgoing email
|
||||
server in Odoo. The configuration automatically loads the token in Odoo, and a tag stating
|
||||
:guilabel:`Gmail Token Valid` appears in green.
|
||||
|
||||
.. image:: google_oauth/green-token.png
|
||||
:align: center
|
||||
:alt: Configure Outgoing Email Servers in Odoo.
|
||||
|
||||
Finally, save the settings and :guilabel:`Test the Connection`. A confirmation message should
|
||||
appear. The Odoo database can now send safe, secure emails through Google using OAuth
|
||||
authentication.
|
||||
|
||||
Google OAuth FAQ
|
||||
================
|
||||
|
||||
Production VS Testing Publishing Status
|
||||
---------------------------------------
|
||||
|
||||
Choosing :guilabel:`Production` as the :guilabel:`Publishing Status` (instead of Testing) will
|
||||
display the following warning message:
|
||||
|
||||
.. image:: google_oauth/published-status.png
|
||||
:align: center
|
||||
:alt: OAuth is Limited to 100 Sensitive Scope Logins.
|
||||
|
||||
To correct this warning, navigate to the `Google API Platform
|
||||
<https://console.cloud.google.com/apis/credentials/consent>`_. If the :guilabel:`Publishing status`
|
||||
is :guilabel:`In Production`, click :guilabel:`Back to Testing` to correct the issue.
|
||||
|
||||
No Test Users Added
|
||||
-------------------
|
||||
|
||||
If no test users are added to the OAuth consent screen, then a 403 access denied error will
|
||||
populate.
|
||||
|
||||
.. image:: google_oauth/403-error.png
|
||||
:align: center
|
||||
:alt: 403 Access Denied Error.
|
||||
|
||||
To correct this error, return to the :guilabel:`OAuth consent screen` under
|
||||
:guilabel:`APIs & Services` and add test user(s) to the app. Add the email that you are configuring
|
||||
in Odoo.
|
||||
|
||||
Gmail Module not updated
|
||||
------------------------
|
||||
|
||||
If the :guilabel:`Gmail Module` in Odoo has not been updated to the latest version, then a
|
||||
:guilabel:`Forbidden` error message populates.
|
||||
|
||||
.. image:: google_oauth/forbidden-error.png
|
||||
:align: center
|
||||
:alt: Forbidden you don't have the permission to access the requested resource.
|
||||
|
||||
To correct this error, go to the :guilabel:`Apps` module and clear out the search terms. Then,
|
||||
search for `Gmail` or `Google` and upgrade the :guilabel:`Google Gmail` module. Finally, click on
|
||||
the three dots on the upper right of the module and select :guilabel:`Upgrade`.
|
||||
|
||||
Application Type
|
||||
----------------
|
||||
|
||||
When creating the :guilabel:`Credentials` (OAuth Client ID and Client Secret), if
|
||||
:guilabel:`Desktop App` is selected for the :guilabel:`Application Type`, an
|
||||
:guilabel:`Authorization Error` appears.
|
||||
|
||||
.. image:: google_oauth/error-400.png
|
||||
:align: center
|
||||
:alt: Error 400 Redirect URI Mismatch.
|
||||
|
||||
To correct this error, delete the credentials already created and create new credentials, selecting
|
||||
:guilabel:`Web Application` for the :guilabel:`Application Type`. Then, under
|
||||
:guilabel:`Authorized redirect URIs`, click :guilabel:`ADD URI` and type:
|
||||
`https://yourdbname.odoo.com/google_gmail/confirm` in the field.
|
||||
|
||||
.. note::
|
||||
Replace *yourdbname* in the URL with the Odoo database name.
|
||||
BIN
content/administration/maintain/google_oauth/403-error.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 25 KiB |
BIN
content/administration/maintain/google_oauth/error-400.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
content/administration/maintain/google_oauth/forbidden-error.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
content/administration/maintain/google_oauth/green-token.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
content/administration/maintain/google_oauth/new-project.png
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
@@ -53,7 +53,7 @@ From Odoo.sh to Odoo Online
|
||||
|
||||
- Your subscription number
|
||||
- The URL you want to use for your database (e.g., `example.odoo.com`)
|
||||
- Which brand you want to migrate
|
||||
- Which branch you want to migrate
|
||||
- In which region you want to be hosted:
|
||||
|
||||
- Americas
|
||||
|
||||
@@ -68,14 +68,13 @@ This matrix shows the support status of every version.
|
||||
|
||||
🏁 Future version, not released yet
|
||||
|
||||
.. This is an awful way to display colored circles but "Large Green Circle Emoji" was only released
|
||||
in 2019 (see https://unicode-table.com/en/1F7E2/). Let's wait a few more years...
|
||||
.. |green| raw:: html
|
||||
|
||||
.. |green| image:: data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMzIuMTkgMjMyLjE5Ij48Y2lyY2xlIGN4PSIxMTYuMDkiIGN5PSIxMTYuMDkiIHI9IjExNi4wOSIgc3R5bGU9ImZpbGw6IzAwYTcwMCIvPjwvc3ZnPg==
|
||||
:width: 15
|
||||
<span class="text-success" style="font-size: 32px; line-height: 0.5">●</span>
|
||||
|
||||
.. |red| image:: data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMzIuMTkgMjMyLjE5Ij48Y2lyY2xlIGN4PSIxMTYuMDkiIGN5PSIxMTYuMDkiIHI9IjExNi4wOSIgc3R5bGU9ImZpbGw6I2QwMDAwMCIvPjwvc3ZnPg==
|
||||
:width: 15
|
||||
.. |red| raw:: html
|
||||
|
||||
<span class="text-danger" style="font-size: 32px; line-height: 0.5">●</span>
|
||||
|
||||
I run an older version of Odoo/OpenERP/TinyERP
|
||||
==============================================
|
||||
|
||||
@@ -167,7 +167,7 @@ In the above commands, the argument:
|
||||
* ``--stop-after-init`` will immediately shutdown the server instance after it completed the operations you asked.
|
||||
|
||||
More options are available and detailed in the
|
||||
:doc:`CLI documentation </developer/misc/other/cmdline>`.
|
||||
:doc:`CLI documentation </developer/cli>`.
|
||||
|
||||
You can find in the logs (*~/logs/odoo.log*) the addons path used by Odoo.sh to run your server.
|
||||
Look for "*odoo: addons paths*":
|
||||
|
||||
@@ -42,7 +42,7 @@ instance will be held temporarily unavailable for maintenance reason.
|
||||
|
||||
This method is equivalent to perform an upgrade of the module through the Apps menu,
|
||||
or through the :code:`-u` switch of
|
||||
:doc:`the command line </developer/misc/other/cmdline>`.
|
||||
:doc:`the command line </developer/cli>`.
|
||||
|
||||
In the case the changes in the commit prevent the server to restart,
|
||||
or if the modules update fails,
|
||||
@@ -279,10 +279,21 @@ The *import database* feature accepts database archives in the format provided b
|
||||
* the Odoo.sh backup download button of this *Backups* tab,
|
||||
* the Odoo.sh dump download button in the :ref:`Builds view <odoosh-gettingstarted-builds>`.
|
||||
|
||||
.. _odoo_sh/upgrade:
|
||||
|
||||
Upgrade
|
||||
-------
|
||||
|
||||
Available for production and staging branches for valid projects.
|
||||
|
||||
.. seealso::
|
||||
:doc:`Upgrade - Odoo.sh <../../upgrade/odoo_sh>`
|
||||
|
||||
.. _odoosh-gettingstarted-branches-tabs-settings:
|
||||
|
||||
Settings
|
||||
--------
|
||||
|
||||
Here you can find a couple of settings that only apply to the currently selected branch.
|
||||
|
||||
.. image:: branches/interface-branches-settings.jpg
|
||||
@@ -384,7 +395,7 @@ we are considering the feature if there is enough demand.
|
||||
In case the domain of your users email addresses use SPF (Sender Policy Framework) or DKIM
|
||||
(DomainKeys Identified Mail), don't forget to authorize Odoo as a sending host in your domain name
|
||||
settings to increase the deliverability of your outgoing emails.
|
||||
The configuration steps are explained in the documentation about :ref:`SPF
|
||||
The configuration steps are explained in the documentation about :ref:`SPF
|
||||
<email_communication/spf_compliant>` and :ref:`DKIM <email_communication/dkim_compliant>`.
|
||||
|
||||
|
||||
|
||||
@@ -37,7 +37,6 @@ The working directory is composed of the following folders:
|
||||
│ │ ├── enterprise Odoo Enterprise source code
|
||||
│ │ ├── themes Odoo Themes source code
|
||||
│ │ └── user Your repository branch source code
|
||||
│ ├── repositories The Git repositories used by your project
|
||||
│ ├── data
|
||||
│ │ ├── filestore database attachments, as well as the files of binary fields
|
||||
│ │ └── sessions visitors and users sessions
|
||||
|
||||
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 17 KiB |
@@ -1,66 +1,132 @@
|
||||
|
||||
=======
|
||||
Odoo.sh
|
||||
=======
|
||||
|
||||
Test upgrade request
|
||||
====================
|
||||
.. _upgrade/odoo_sh/overview:
|
||||
|
||||
Download a dump of your database (from the :ref:`Builds view
|
||||
<odoosh-gettingstarted-builds-download-dump>`), choose the **exact copy** and **without filestore**
|
||||
options. Upload the .sql.gz dump on https://upgrade.odoo.com/upload and select the testing purpose.
|
||||
Once it's processed, you'll get a dump of the database in return.
|
||||
Overview
|
||||
========
|
||||
|
||||
.. important::
|
||||
To have the most up-to-date test version of your database, create a backup of your production
|
||||
database just before creating your request. Upload it in your staging branch, select **Exact
|
||||
dump** and **Without filestore**, and then click *start*.
|
||||
|
||||
Test your upgraded database
|
||||
===========================
|
||||
|
||||
At the beginning of your upgrade project, make sure that you create a new staging branch for testing
|
||||
purposes by forking your main branch.
|
||||
|
||||
Once the staging build is complete (it doesn't matter if it failed due to the version
|
||||
incompatibility), import your upgraded dump in the *Backups* tab of the branch.
|
||||
Odoo.sh is integrated with the upgrade platform to make the upgrade process easier.
|
||||
|
||||
.. note::
|
||||
The platform automatically detects the version of the dump and changes the version of Odoo's
|
||||
source code to the corresponding version of the build.
|
||||
The :guilabel:`Upgrade` tab is available in the branches view. It is only available for valid
|
||||
projects with a valid production build.
|
||||
|
||||
Test the upgraded database and make sure everything runs as it's supposed to.
|
||||
.. image:: odoo_sh/odoo-sh-menu.png
|
||||
:align: center
|
||||
:alt: Click on the upgrade menu
|
||||
|
||||
Upgrade your production database
|
||||
================================
|
||||
The suggested upgrade steps on Odoo.sh are:
|
||||
|
||||
Once you've tested everything and you're satisfied, start the process over to get an up-to-date
|
||||
upgraded dump:
|
||||
|
||||
* Make a new dump of your production database (as described in step 1)
|
||||
* Upload it on upgrade.odoo.com and select the Production purpose
|
||||
* Receive the newly upgraded dump and import it in your production branch. The build might get
|
||||
marked as failed because the platform will run it with the upgraded databases' Odoo version
|
||||
together with the old custom code.
|
||||
* Merge or commit the upgraded custom code in the production branch
|
||||
|
||||
If anything goes wrong, remember you can restore a backup. The platform will always make one before
|
||||
you make any Odoo.sh operation on the production database. If the restored backup comes from a
|
||||
previous version, the platform will detect it and change the project's Odoo version back if it needs
|
||||
to.
|
||||
|
||||
Custom modules (if applicable)
|
||||
==============================
|
||||
|
||||
The upgrade of a database that contains custom modules is a 2 step process.
|
||||
|
||||
#. The standard upgrade is done when your upgrade request is completed.
|
||||
#. Your custom modules also need to be upgraded to keep them compatible with the new version.
|
||||
|
||||
Depending on your contract, the upgrade of your custom modules can be done
|
||||
- by yourself
|
||||
- by your Partner
|
||||
- by Odoo (if you hold a subscription to 'Maintenance of Customizations')
|
||||
#. On a :guilabel:`Development` branch, upgrade your custom modules to keep them compatible with the
|
||||
new version and thoroughly **test them**.
|
||||
#. Switch that branch to the :guilabel:`Staging` branch, **upgrade** the last daily production
|
||||
backup and **test it**. Write upgrade scripts if necessary.
|
||||
#. Trigger the production upgrade from your :guilabel:`Production` branch and sit tight.
|
||||
|
||||
.. seealso::
|
||||
- :ref:`upgrade/sla`
|
||||
- :doc:`../../administration/upgrade`
|
||||
- :doc:`Upgrade FAQ <../upgrade/faq>`
|
||||
- :doc:`Introduction to Odoo.sh <../odoo_sh/overview/introduction>`
|
||||
|
||||
.. _upgrade/odoo_sh/custom-modules:
|
||||
|
||||
Upgrade your custom modules
|
||||
===========================
|
||||
|
||||
The first step is to upgrade your custom modules to keep them compatible with the new version. Fork
|
||||
your :guilabel:`Production` branch in the :guilabel:`Development` stage, then go to the settings of
|
||||
your :guilabel:`Development` branch and select the Odoo version you target. If needed, modify your
|
||||
code to be compatible with the new version. Make sure to **test** your features are still working
|
||||
correctly.
|
||||
|
||||
.. note::
|
||||
Depending on your contract, the upgrade of your custom modules can be done by yourself, by your
|
||||
Partner or by Odoo (if you hold a subscription including maintenance of customizations).
|
||||
|
||||
.. _upgrade/odoo_sh/testing-phase:
|
||||
|
||||
Upgrade your database on a staging branch
|
||||
=========================================
|
||||
|
||||
Take the upgraded development branch and drag & drop it to :guilabel:`Staging`.
|
||||
|
||||
Go to the :guilabel:`Upgrade` tab and select the :guilabel:`target version`. Then, click on
|
||||
:guilabel:`Test Upgrade`.
|
||||
|
||||
.. image:: odoo_sh/odoo-sh-staging.png
|
||||
:align: center
|
||||
:alt: Odoo.sh project and tabs
|
||||
|
||||
The **latest production daily automatic backup** is sent to the
|
||||
`upgrade platform <https://www.upgrade.odoo.com>`_ to start the upgrade test process.
|
||||
|
||||
.. note::
|
||||
You can follow the upgrade process by going to the :guilabel:`Upgrade` menu of your
|
||||
:guilabel:`Production` branch.
|
||||
|
||||
When the upgraded backup is ready on the `upgrade platform <https://www.upgrade.odoo.com>`_, it is
|
||||
automatically downloaded back to your project.
|
||||
|
||||
The branch is now in a **special mode**: each time a **commit is pushed** on the branch, a
|
||||
**restore operation** of the upgraded backup occurs, and an **update of all the custom modules**
|
||||
happens. This allows you to quickly iterate on your custom modules upgrade scripts. The log file of
|
||||
the upgrade process can be found at :file:`~/logs/upgrade.log` in your newly upgraded staging build.
|
||||
|
||||
.. note::
|
||||
- The **special upgrade mode** is automatically closed after 30 days.
|
||||
- It may happen that custom modules are no longer needed after an upgrade. Custom modules in the
|
||||
upgraded database are set to be updated. If the modules are missing in the code, the update
|
||||
fails, thus failing the whole process. An empty module with a manifest and possibly some custom
|
||||
upgrade script are necessary to clean up the database. The complete removal of the module has
|
||||
to be handled afterwards.
|
||||
|
||||
Functionally test your upgraded database
|
||||
========================================
|
||||
|
||||
Now that the test upgraded database is available on your staging branch, **thoroughly test it** and
|
||||
make sure everything runs as it's supposed to. Once you are satisfied with the result, you are ready
|
||||
to upgrade your production database.
|
||||
|
||||
Production upgrade
|
||||
==================
|
||||
|
||||
Once you are happy with your testing, you can start the process on the :guilabel:`Production`
|
||||
branch.
|
||||
|
||||
On your :guilabel:`Production` branch, go to the :guilabel:`Upgrade` tab, select the
|
||||
:guilabel:`targeted version` and click on the :guilabel:`start Upgrade` button.
|
||||
|
||||
.. image:: odoo_sh/odoo-sh-prod.png
|
||||
:align: center
|
||||
:alt: View from the upgrade tab
|
||||
|
||||
The actual process is **triggered as soon as you push a new commit** in your branch. Make sure you
|
||||
are pushing code that is compatible with the new version. For example by merging the code from your
|
||||
upgraded staging branch.
|
||||
|
||||
.. note::
|
||||
You can see the progress of the upgrade by going to the :guilabel:`Upgrade` tab of the main
|
||||
branch.
|
||||
|
||||
.. image:: odoo_sh/odoo-sh-progress.png
|
||||
:align: center
|
||||
:alt: View showing the progress of the upgrade
|
||||
|
||||
.. important::
|
||||
Your database is unavailable throughout the process.
|
||||
|
||||
.. note::
|
||||
If anything goes wrong, the platform automatically reverts the upgrade, the same as it would be
|
||||
for a regular update. In case of success, a backup is always made.
|
||||
|
||||
The update of your custom modules must be successful to complete the entire upgrade process. Make
|
||||
sure the status of your staging upgrade is :guilabel:`successful` before trying it in production.
|
||||
|
||||
.. note::
|
||||
It may happen that custom modules are no longer needed after an upgrade. Custom modules in the
|
||||
upgraded database are set to be updated. If the modules are missing in the code, the update
|
||||
fails, thus failing the whole process. An empty module with a manifest and possibly some custom
|
||||
upgrade script are necessary to clean up the database. The complete removal of the module has to
|
||||
be handled afterwards.
|
||||
|
||||
BIN
content/administration/upgrade/odoo_sh/odoo-sh-menu.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
content/administration/upgrade/odoo_sh/odoo-sh-prod.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
content/administration/upgrade/odoo_sh/odoo-sh-progress.png
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
content/administration/upgrade/odoo_sh/odoo-sh-staging.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
@@ -15,7 +15,6 @@ development with features such as AI-powered invoice recognition, synchronizatio
|
||||
accounts, smart matching suggestions, etc.
|
||||
|
||||
.. seealso::
|
||||
- `Odoo Tutorials: Invoicing <https://www.odoo.com/slides/invoicing-18>`_
|
||||
- `Odoo Tutorials: Accounting <https://www.odoo.com/slides/accounting-19>`_
|
||||
- :doc:`Accounting Cheat Sheet <accounting/getting_started/memento>`
|
||||
|
||||
|
||||
@@ -42,5 +42,8 @@ Payments` tab. To display the outstanding accounts column, click on the toggle b
|
||||
:alt: Select the toggle button and click on outstanding Accounts
|
||||
|
||||
.. note::
|
||||
If you do not specify an outstanding payments account or an outstanding receipts account for a
|
||||
specific journal, Odoo uses the default outstanding accounts.
|
||||
- If you do not specify an outstanding payments account or an outstanding receipts account for a
|
||||
specific journal, Odoo uses the default outstanding accounts.
|
||||
- If your main bank account is added as an outstanding receipts account or outstanding payments
|
||||
account, when a payment is registered, the invoice or bill's status is directly set to
|
||||
:guilabel:`Paid`.
|
||||
|
||||
@@ -11,4 +11,4 @@ Vendor bills
|
||||
supplier_bills/purchase_receipts
|
||||
supplier_bills/deferred_expenses
|
||||
supplier_bills/assets
|
||||
supplier_bills/ocr
|
||||
supplier_bills/invoice_digitization
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
=============================================================
|
||||
Invoice digitization with optical character recognition (OCR)
|
||||
=============================================================
|
||||
|
||||
**Invoice digitization** is the process of automatically encoding traditional paper invoices into
|
||||
vendor bills and customer invoices forms in your accounting.
|
||||
|
||||
Odoo uses :abbr:`OCR (optical character recognition)` and artificial intelligence technologies to
|
||||
recognize the content of the documents. Vendor bills and customer invoices forms are automatically
|
||||
created and populated based on the scanned invoices.
|
||||
|
||||
.. seealso::
|
||||
- `Test Odoo's invoice digitization <https://www.odoo.com/app/invoice-automation>`_
|
||||
- :doc:`/applications/general/in_app_purchase`.
|
||||
- `Odoo Tutorials: Invoice Digitization with OCR
|
||||
<https://www.odoo.com/slides/slide/digitize-bills-with-ocr-1712>`_.
|
||||
|
||||
.. note::
|
||||
- The more documents you scan, the better the system identifies the correct data.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
In :menuselection:`Accounting --> Configuration --> Settings --> Digitalization`, check the box
|
||||
:guilabel:`Document Digitalization` and choose whether :guilabel:`Vendor Bills` and
|
||||
:guilabel:`Customer Invoices` should be processed automatically or manually.
|
||||
|
||||
The :guilabel:`Single Invoice Line Per Tax` option can also be selected. It enables to get only one
|
||||
line created per tax in the new bill, regardless of the number of lines from the invoice.
|
||||
|
||||
Invoice upload
|
||||
==============
|
||||
|
||||
Upload invoices manually
|
||||
------------------------
|
||||
|
||||
From the :guilabel:`Accounting Dashboard`, click on the :guilabel:`Upload` button of your vendor
|
||||
bills journal.
|
||||
Alternatively, go to :menuselection:`Accounting --> Customers --> Invoices` or
|
||||
:menuselection:`Accounting --> Vendors --> Bills` and select :guilabel:`Upload`.
|
||||
|
||||
Upload invoices using an email alias
|
||||
------------------------------------
|
||||
|
||||
You can configure your connected scanner to send scanned documents to an email alias. Emails sent to
|
||||
these aliases are converted into new draft customer invoices or vendor bills.
|
||||
|
||||
You can modify the email alias of a journal by going to :menuselection:`Accounting --> Configuration
|
||||
--> Journals`, opening the appropriate journal, opening the :guilabel:`Advanced Settings` tab, and
|
||||
modifying the :guilabel:`Email Alias` field.
|
||||
|
||||
If you use the :doc:`Documents <../../../documents>` app, you can send your scanned invoices to the
|
||||
:guilabel:`Finance` workspace (e.g., `inbox-financial@example.odoo.com`).
|
||||
|
||||
Invoice digitization
|
||||
====================
|
||||
|
||||
According to your settings, the document is either processed automatically, or you need to click on
|
||||
:guilabel:`Send for digitalization` to do it manually.
|
||||
|
||||
Once the data is extracted from the PDF, you can correct it if necessary by clicking on the
|
||||
respective tags (available in Edit mode) and selecting the proper information instead.
|
||||
|
||||
Pricing
|
||||
=======
|
||||
|
||||
| The **invoice digitization** is an In-App Purchase (IAP) service that requires prepaid credits to
|
||||
work. Digitizing one document consumes one credit.
|
||||
| To buy credits, go to :menuselection:`Accounting --> Configuration --> Settings --> Digitization`
|
||||
and click on :guilabel:`Buy credits`, or go to :menuselection:`Settings --> Odoo IAP` and click on
|
||||
:guilabel:`View My Services`.
|
||||
|
||||
.. important::
|
||||
- If you are on Odoo Online (SaaS) and have the Enterprise version, you benefit from free trial
|
||||
credits to test the feature.
|
||||
|
||||
.. seealso::
|
||||
- `Our Privacy Policy <https://iap.odoo.com/privacy#header_6>`_.
|
||||
@@ -1,56 +0,0 @@
|
||||
==============================================================
|
||||
Digitize vendor bills with optical character recognition (OCR)
|
||||
==============================================================
|
||||
|
||||
Encoding bills manually can be a time-consuming task. Having a solution that allows you to digitize
|
||||
them and automatically import the data into your database reduces errors and saves you time.
|
||||
|
||||
.. important::
|
||||
`Try it out <https://www.odoo.com/app/invoice-automation>`_! Upload one of your Bills or try one of our samples.
|
||||
|
||||
Set up the feature
|
||||
==================
|
||||
|
||||
Go to :menuselection:`Accounting --> Settings --> Bill Digitalization`, and choose whether the bills
|
||||
should be processed automatically (with OCR) or manually (on demand).
|
||||
|
||||
.. image:: ocr/setup_ocr.png
|
||||
:align: center
|
||||
:alt: Activate the feature going to the settings application in Odoo Accounting
|
||||
|
||||
Start digitizing your bills
|
||||
---------------------------
|
||||
|
||||
Scan your bills and then go to :menuselection:`Accounting --> Vendors --> Bills` and upload your
|
||||
document. Based on your configuration, it either processes the documents automatically, or you
|
||||
need to click on *Send for Digitalization* to do it manually.
|
||||
|
||||
.. tip::
|
||||
You can also create a vendor bill through the *Documents* app or by using an email alias on your
|
||||
journals.
|
||||
|
||||
Once the data is extracted from the PDF, you can correct it if necessary by clicking on the
|
||||
respective tag (available in *Edit* mode), and selecting the right information instead.
|
||||
|
||||
.. image:: ocr/example_ocr.png
|
||||
:align: center
|
||||
:height: 580
|
||||
:alt: Example of a scanned bill in Odoo Accounting
|
||||
|
||||
.. note::
|
||||
The more bills you scan, the better the system gets at identifying the correct data.
|
||||
|
||||
Pricing
|
||||
=======
|
||||
|
||||
| The *Bill Digitalization* is an *In-App Purchase (IAP)* service which requires prepaid credits to
|
||||
work. Digitizing one document consumes one credit.
|
||||
| To buy credits, go to :menuselection:`Accounting --> Configuration --> Settings --> Bill
|
||||
Digitalization` and click on *Buy credits*, or go to :menuselection:`Settings --> Odoo IAP` and
|
||||
click on *View My Services*.
|
||||
|
||||
.. important::
|
||||
- If you are on Odoo Online (SAAS) and have the Enterprise version, you benefit from free trial
|
||||
credits to test the feature.
|
||||
.. seealso::
|
||||
- Our `Privacy Policy <https://iap.odoo.com/privacy#header_6>`_.
|
||||
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 15 KiB |
@@ -15,3 +15,4 @@ Customer invoices
|
||||
customer_invoices/credit_notes
|
||||
customer_invoices/epc_qr_code
|
||||
customer_invoices/snailmail
|
||||
customer_invoices/electronic_invoicing
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
================================================================
|
||||
Electronic invoicing (:abbr:`EDI (electronic data interchange)`)
|
||||
================================================================
|
||||
|
||||
EDI, or electronic data interchange, is the inter-company communication of business documents, such
|
||||
as purchase orders and invoices, in a standard format. Sending documents according to an EDI
|
||||
standard ensures that the machine receiving the message can interpret the information correctly.
|
||||
Various EDI file formats exist and are available depending on your company's country.
|
||||
|
||||
EDI feature enables automating the administration between companies and might also be required by
|
||||
some governments for fiscal control or to facilitate the administration.
|
||||
|
||||
Electronic invoicing of your documents such as customer invoices, credit notes or vendor bills is
|
||||
one of the application of EDI.
|
||||
|
||||
Odoo supports, among others, the following formats.
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
|
||||
* - Format Name
|
||||
- Applicability
|
||||
* - Factur-X (CII)
|
||||
- Default format on Odoo (enabled by default)
|
||||
* - Peppol BIS Billing 3.0 (UBL)
|
||||
- For companies whose countries are part of the `EAS list
|
||||
<https://docs.peppol.eu/poacc/billing/3.0/codelist/eas/>`_
|
||||
* - E-FFF
|
||||
- For Belgian companies
|
||||
* - XRechnung (UBL)
|
||||
- For German companies
|
||||
* - Fattura PA (IT)
|
||||
- For Italian companies
|
||||
* - CFDI (4.0)
|
||||
- For Mexican companies
|
||||
* - Peru UBL 2.1
|
||||
- For Peruvian companies
|
||||
* - SII IVA Llevanza de libros registro (ES)
|
||||
- For Spanish companies
|
||||
* - UBL 2.1 (Columbia)
|
||||
- For Colombian companies
|
||||
* - Egyptian Tax Authority
|
||||
- For Egyptian companies
|
||||
* - E-Invoice (IN)
|
||||
- For Indian companies
|
||||
* - NLCIUS (Netherlands)
|
||||
- For Dutch companies
|
||||
* - EHF 3.0
|
||||
- For Norwegian companies
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../../fiscal_localizations/overview/fiscal_localization_packages`
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Go to :menuselection:`Accounting --> Configuration --> Journals --> Customer Invoices --> Advanced
|
||||
Settings --> Electronic Invoicing` and enable the formats you need for this journal.
|
||||
|
||||
.. image:: electronic_invoicing/formats.png
|
||||
:align: center
|
||||
:alt: Select the EDI format you need
|
||||
|
||||
Once an electronic invoicing format is enabled, XML documents are generated when clicking on
|
||||
:guilabel:`Confirm` in documents such as invoices, credit notes, etc. These documents are either
|
||||
visible in the attachment section, or embedded in the PDF.
|
||||
|
||||
.. note::
|
||||
- For E-FFF, the xml file only appears after having generated the PDF (:guilabel:`Print` or
|
||||
:guilabel:`Send & Print` button), since the PDF needs to be embedded inside the xml.
|
||||
- By default, the :guilabel:`Factur-X` option is enabled. It means that an XML file is
|
||||
automatically included in the PDF document that is sent.
|
||||
- The formats available depend on the country registered in your company's :guilabel:`General
|
||||
Information`.
|
||||
- Odoo supports the **Peppol BIS Billing 3.0** format that can be used via existing access
|
||||
points.
|
||||
|
||||
Add new formats to a database created before July 2022
|
||||
------------------------------------------------------
|
||||
|
||||
If your database was created before July 2022 and you wish to use one of the formats available from
|
||||
July 2022, you have to :ref:`install <general/install>` the module :guilabel:`Import/Export
|
||||
electronic invoices with UBL/CII` (module’s technical name: `account_edi_ubl_cii`) and your
|
||||
country-specific module.
|
||||
|
||||
.. example::
|
||||
If you want to use the Belgian format E-FFF in a database created prior to July 2022, you need to
|
||||
:ref:`install <general/install>`:
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
|
||||
* - Name
|
||||
- Technical name
|
||||
* - Belgium - E-Invoicing (UBL 2.0, e-fff)
|
||||
- `l10n_be_edi`
|
||||
* - Import/Export electronic invoices with UBL/CII
|
||||
- `account_edi_ubl_cii`
|
||||
|
||||
.. note::
|
||||
Once the new module is installed, UBL 2.0 and UBL 2.1 formats no longer appear in the journal
|
||||
since UBL BIS Billing 3.0 is available and more widely supported.
|
||||
|
After Width: | Height: | Size: 3.3 KiB |
@@ -145,5 +145,18 @@ It remains possible to resequence the invoices but with some restrictions:
|
||||
#. The feature does not work if the sequence is inconsistent with the month of the entry.
|
||||
#. It does not work if the sequence leads to a duplicate.
|
||||
#. The order of the invoice remains unchanged.
|
||||
#. It is useful for people who use a numbering from another software and who want to continue the
|
||||
#. It is useful for people who use a numbering from another software and who want to continue the
|
||||
current year without starting over from the beginning.
|
||||
|
||||
Invoice digitization with optical character recognition (OCR)
|
||||
---------------------------------------------------------------
|
||||
|
||||
**Invoice digitization** is the process of automatically encoding traditional paper invoices into
|
||||
invoices forms in your accounting.
|
||||
|
||||
Odoo uses OCR and artificial intelligence technologies to recognize the content of the documents.
|
||||
Vendor bills and customer invoices forms are automatically created and populated based on scanned
|
||||
invoices.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`/applications/finance/accounting/payables/supplier_bills/invoice_digitization`
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
Adyen
|
||||
=====
|
||||
|
||||
`Adyen <https://www.adyen.com/>`_ is a Dutch-based company that offers several online payment
|
||||
`Adyen <https://www.adyen.com/>`_ is a Dutch company that offers several online payment
|
||||
possibilities.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
.. seealso::
|
||||
- :ref:`payment_acquirers/add_new`
|
||||
:ref:`payment_acquirers/add_new`
|
||||
|
||||
Credentials tab
|
||||
---------------
|
||||
@@ -27,8 +27,10 @@ You can copy your credentials from your Adyen account, and paste them in the rel
|
||||
the **Credentials** tab.
|
||||
|
||||
.. important::
|
||||
If you are trying Adyen as a test, with a *test account*, change the **State** to *Test Mode*. We
|
||||
recommend doing this on a test Odoo database, rather than on your main database.
|
||||
If you are trying Adyen as a test, with an Adyen *test account*, head to
|
||||
:menuselection:`Accounting --> Configuration --> Payment Acquirers`. There, click on
|
||||
:guilabel:`Adyen`, enable :guilabel:`Test Mode` and enter your credentials in the
|
||||
:guilabel:`Credentials` tab.
|
||||
|
||||
.. _adyen/api_and_client_keys:
|
||||
|
||||
@@ -39,11 +41,13 @@ In order to retrieve the API Key and the Client Key, log into your Adyen account
|
||||
:menuselection:`Developers --> API Credentials`.
|
||||
- If you already have an API user, open it.
|
||||
- If you don't have an API user yet, click on **Create new credential**.
|
||||
Go to :menuselection:`Authentication` and get or generate your **API Key** and **Client Key**. Be
|
||||
careful to copy your API key as you'll not be allowed to get it later without generating a new one.
|
||||
Go to :menuselection:`Server settings --> Authentification` and copy or generate your **API Key**.
|
||||
Be careful to copy your API key as you'll not be allowed to get it later without generating a new
|
||||
one.
|
||||
|
||||
This is also the place where you'll :ref:`allow payments to be made from your website
|
||||
<adyen/allowed_origins>`.
|
||||
Now, head to :menuselection:`Client settings --> Authentification` and cody or generate your
|
||||
**Client Key**. This is also the place where you can :ref:`allow payments to be made from your
|
||||
website <adyen/allowed_origins>`.
|
||||
|
||||
.. _adyen/hmac_key:
|
||||
|
||||
@@ -54,19 +58,23 @@ In order to retrieve the HMAC Key, you'll need to configure a `Standard Notifica
|
||||
this, log into your Adyen account then go to :menuselection:`Developers --> Webhooks --> Add webhook
|
||||
--> Add Standard notification`.
|
||||
|
||||
.. image:: adyen/adyen_add_webhook.png
|
||||
.. image:: adyen/adyen-add-webhook.png
|
||||
:align: center
|
||||
:alt: Configure a webhook.
|
||||
|
||||
There, in :menuselection:`Transport --> URL`, enter your server address followed by
|
||||
`/payment/adyen/notification`.
|
||||
There, in :menuselection:`General --> Server configuration --> URL`, enter your server address
|
||||
followed by `/payment/adyen/notification`.
|
||||
|
||||
.. image:: adyen/adyen_webhook_url.png
|
||||
.. image:: adyen/adyen-webhook-url.png
|
||||
:align: center
|
||||
:alt: Enter the notification URL.
|
||||
|
||||
Then continue in :menuselection:`Additional Settings --> HMAC Key --> Generate new HMAC key`. Be
|
||||
careful to copy it as you'll not be allowed to get it later without generating a new one.
|
||||
Then enter :menuselection:`Security --> HMAC Key --> Generate`. Be careful to copy the key as you
|
||||
will not be allowed to do it later without generating a new one.
|
||||
|
||||
.. image:: adyen/adyen-hmac-key.png
|
||||
:align: center
|
||||
:alt: Generate a HMAC key and save it.
|
||||
|
||||
You have to save the webhook to finalize its creation.
|
||||
|
||||
@@ -76,10 +84,11 @@ URLs
|
||||
~~~~
|
||||
|
||||
To retrieve the URLs, log into your Adyen account, go to :menuselection:`Developers --> API URLs`.
|
||||
Pick one of the URLs listed next to **Recurring** as your **Recurring API URL** and one of the URLs
|
||||
listed next to **Checkout API** as your **Checkout API URL**.
|
||||
Select one of the URLs listed next to :guilabel:`Classic Recurring API` as your
|
||||
:guilabel:`Recurring API URL` and one listed next to :guilabel:`Checkout API` as your
|
||||
:guilabel:`Checkout API URL`.
|
||||
|
||||
.. image:: adyen/adyen_api_urls.png
|
||||
.. image:: adyen/adyen-api-urls.png
|
||||
:align: center
|
||||
:alt: Get the links for the different API.
|
||||
|
||||
@@ -92,10 +101,10 @@ Allow payments from a specific origin
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To allow payment originated from your website, follow the steps in :ref:`adyen/api_and_client_keys`
|
||||
to navigate to your API user and go to :menuselection:`Allowed Origins`, then add the URLs from
|
||||
to navigate to your API user and go to :menuselection:`Add allowed origins`, then add the URLs from
|
||||
where payments will be made (the URLs of the servers hosting your Odoo instances).
|
||||
|
||||
.. image:: adyen/adyen_allowed_origins.png
|
||||
.. image:: adyen/adyen-allowed-origins.png
|
||||
:align: center
|
||||
:alt: Allows payments originated from a specific domain.
|
||||
|
||||
@@ -126,4 +135,4 @@ Then, open your Adyen Merchant Account, go to :menuselection:`Account --> Settin
|
||||
**revoke** it.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../payment_acquirers`
|
||||
:doc:`../payment_acquirers`
|
||||
|
||||
|
After Width: | Height: | Size: 7.7 KiB |
|
After Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 4.0 KiB |
@@ -5,84 +5,106 @@ Ogone
|
||||
`Ogone <https://www.ingenico.com/>`_, also known as **Ingenico Payment Services** is a France-based
|
||||
company that provides the technology involved in secure electronic transactions.
|
||||
|
||||
Configuration on Odoo
|
||||
=====================
|
||||
|
||||
.. seealso::
|
||||
- :ref:`payment_acquirers/add_new`
|
||||
- `Ogone's documentation <https://epayments-support.ingenico.com/get-started/>`_.
|
||||
|
||||
Credentials tab
|
||||
---------------
|
||||
Settings in Ogone
|
||||
=================
|
||||
|
||||
Odoo needs your **API Credentials** to connect with your Ogone account, which comprise:
|
||||
Create an API user
|
||||
------------------
|
||||
|
||||
- **PSPID**: The ID solely used to identify the account with Ogone. You chose it when you opened
|
||||
your account.
|
||||
- :ref:`API User ID <ogone/api_user>`: The ID solely used to identify the user with Ogone.
|
||||
- :ref:`API User Password <ogone/api_user>`: Value used to identify the user with Ogone.
|
||||
- :ref:`SHA Key IN <ogone/sha_key_in>`: Key used in the signature Odoo send to Ogone.
|
||||
- :ref:`SHA Key OUT <ogone/sha_key_out>`: Key used in the signature Ogone send to Odoo.
|
||||
Log into your Ogone account and head to the :guilabel:`Configuration` tab.
|
||||
|
||||
You can copy your credentials from your Ogone account, and paste them in the related fields under
|
||||
the **Credentials** tab.
|
||||
You need to create an **API user** to be used in the creation of transactions from Odoo. While you
|
||||
can use your main account to do so, using an **API user** ensures that if the credentials used in
|
||||
Odoo are leaked, no access to your Ogone configuration is possible. Additionally, passwords for
|
||||
**API users** do not need to be updated regularly, unlike normal users.
|
||||
|
||||
.. _ogone/api_user:
|
||||
To create an **API user**, go to :menuselection:`Configuration --> Users` and click on
|
||||
:guilabel:`New User`. The following fields must be configured:
|
||||
|
||||
API User ID and Password
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
.. _ogone/ogone:
|
||||
|
||||
If you already created a user and have both its ID and password, just copy them. You can also
|
||||
generate a new password from :menuselection:`Configuration --> Users --> Your chosen user --> change
|
||||
password`.
|
||||
- :guilabel:`UserID`: you can choose anything you want.
|
||||
- :guilabel:`User's Name, E-mail and Timezone`: you can enter the information you want.
|
||||
- :guilabel:`Profile`: should be set to :guilabel:`Admin`.
|
||||
- :guilabel:`Special user for API`: should be checked.
|
||||
|
||||
If you don't have a user, create one by going to :menuselection:`Configuration --> Users -->
|
||||
New User`. Set your **User ID** to get your **password** when you save your new user.
|
||||
After the creation of the user, you are required to generate a password. Save the password and
|
||||
**UserID**, as they will be required later on during the setup.
|
||||
|
||||
.. image:: ogone/ogone_new_user.png
|
||||
:align: center
|
||||
:alt: Get your password when you save the new user.
|
||||
.. tip::
|
||||
If you already have an user set up, make sure it is activated without any error. If not, simply
|
||||
click the :guilabel:`Activate(Errors)` button to reset the user.
|
||||
|
||||
.. _ogone/sha_key_in:
|
||||
Set up Ogone for Odoo
|
||||
---------------------
|
||||
|
||||
SHA Key IN
|
||||
~~~~~~~~~~
|
||||
Ogone must now be configured to accept payments from Odoo. Head to :menuselection:`Configuration -->
|
||||
Technical Information --> Global Security Parameters`, select :guilabel:`SHA-512` as
|
||||
:guilabel:`Hash Algorithm` and :guilabel:`UTF-8` as :guilabel:`character encoding`. Then, go to the
|
||||
:guilabel:`Data and Origin verification` tab of the same page and leave the URL field of the
|
||||
:guilabel:`e-Commerce and Alias Gateway` section blank.
|
||||
|
||||
In order to retrieve the SHA Key IN, log into your ogone account, go to
|
||||
:menuselection:`Configuration --> Technical Information --> Data and origin verification -->
|
||||
Checks for e-Commerce & Alias Gateway`, and retrieve **SHA Key IN**.
|
||||
.. tip::
|
||||
If you need to use another algorithm, such as `sha-1` or `sha-256`, within Odoo, activate the
|
||||
:ref:`developer mode <developer-mode>` and go to the **Payment Acquirers** page in
|
||||
:menuselection:`Accounting --> Configuration --> Payment Acquirers`. Click on :guilabel:`Ogone`,
|
||||
and in the :guilabel:`Credentials` tab, select the algorithm you wish to use in the
|
||||
:guilabel:`Hash function` field.
|
||||
|
||||
.. _ogone/sha_key_out:
|
||||
You are now required to generate **SHA-IN** passphrases. **SHA-IN** and **SHA-OUT** passphrases are
|
||||
used to digitally sign the transaction requests and responses between Odoo and Ogone. By using these
|
||||
secret passphrases and the `sha-1` algorithm, both systems can ensure that the information they
|
||||
receive from the other was not altered or tampered with.
|
||||
|
||||
SHA Key OUT
|
||||
~~~~~~~~~~~
|
||||
Enter the same **SHA-IN** passphrase in both :guilabel:`Checks for e-Commerce & Alias Gateway` and
|
||||
:guilabel:`Checks for DirectLink and Batch (Automatic)`. You can leave the IP address field blank.
|
||||
|
||||
In order to retrieve the SHA Key OUT, log into your ogone account, go to
|
||||
:menuselection:`Configuration --> Technical Information --> Transaction feedback --> All transaction
|
||||
submission modes`, and get or generate your **API Key** and **Client Key**. Be careful to copy your
|
||||
API key as you'll not be allowed to get it later without generating a new one.
|
||||
Your **SHA-IN** and **SHA-OUT** passphrases should be different, and between 16 and 32 characters
|
||||
long. Make sure to use the same **SHA-IN** and **SHA-OUT** passphrases throughout the entire Ogone
|
||||
configuration, as Odoo only allows a single **SHA-IN** and single **SHA-OUT** passphrase.
|
||||
|
||||
In order to retrieve the **SHA-OUT** key, log into your Ogone account, go to
|
||||
:menuselection:`Configuration --> Technical Information --> Transaction feedback --> All
|
||||
transaction submission modes`, and get or generate your **API Key** and **Client Key**. Be careful
|
||||
to copy your API key as you’ll not be allowed to get it later without generating a new one.
|
||||
|
||||
When done, head to :menuselection:`Configuration --> Technical Information --> Transaction Feedback`
|
||||
and check the following options:
|
||||
|
||||
- The :guilabel:`URL` fields for :guilabel:`HTTP redirection in the browser` can be left empty, as
|
||||
Odoo will specify these URLs for every transaction request.
|
||||
- :guilabel:`I would like to receive transaction feedback parameters on the redirection URLs`:
|
||||
should be checked.
|
||||
- :guilabel:`Direct HTTP server-to-server request`: should to be set to `Online but switch to a
|
||||
deferred request when the online request fails`.
|
||||
- Both **URL** fields should contain the same following URL, with `<example>` replaced by your
|
||||
database: `https://<example>/payment/ogone/return`.
|
||||
|
||||
- :guilabel:`Dynamic eCommerce Parameters` should contain the following values: `ALIAS`, `AMOUNT`,
|
||||
`CARDNO`, `CN`, `CURRENCY`, `IP`, `NCERROR` `ORDERID`, `PAYID`, `PM`, `STATUS`, `TRXDATE`. Other
|
||||
parameters can be included (if you have another integration with Ogone that requires them), but
|
||||
are not advised.
|
||||
- In the :guilabel:`All transaction submission modes` section, fill out **SHA-OUT** passphrase and
|
||||
disable `HTTP request for status change`.
|
||||
|
||||
To allow your customers to save their credit card credentials for future use, head to
|
||||
:menuselection:`Configuration --> Alias --> My alias information`. From this tab, you can configure
|
||||
how the user can have its card details saved, for how long the information is saved, if a checkbox
|
||||
to save the card information should be displayed, etc.
|
||||
|
||||
Settings in Odoo
|
||||
================
|
||||
|
||||
To set up Ogone in Odoo, head to :menuselection:`Accounting --> Configuration --> Payment Acquirers`
|
||||
and open the Ogone acquirer. In the :guilabel:`Credentials` tab, enter the **PSPID** of your Ogone
|
||||
account, and fill out the other fields as configured in your :ref:`Ogone portal <ogone/ogone>`.
|
||||
|
||||
.. important::
|
||||
If you are trying Ogone as a test, with the Test Account, change the **State** to *Test Mode*. We
|
||||
recommend doing this on a test Odoo database, rather than on your main database.
|
||||
|
||||
Configuration on Ogone
|
||||
======================
|
||||
|
||||
Now that Odoo can communicate with Ogone, we need to make sure that Ogone can send information to
|
||||
your database.
|
||||
|
||||
To do so, log into your Ogone account and go to :menuselection:`Configuration --> Technical
|
||||
Information --> Transaction feedback --> Direct HTTP server-to-server request`.
|
||||
|
||||
Then, fill the form with the following data:
|
||||
|
||||
- In the **Timing of the request**, select *Online but switch to a deferred request when the online
|
||||
requests fail*.
|
||||
- | Enter your Odoo databases URL in both **URLs** followed by ``/payment/ogone/return``.
|
||||
| For example: ``https://yourcompany.odoo.com/payment/ogone/return``
|
||||
- Select *POST* for the **Request Method**.
|
||||
|
||||
Save, and you are ready to go!
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../payment_acquirers`
|
||||
If you wish to run tests with Ogone, within the accounting app, go to
|
||||
:menuselection:`Configuration --> Payment Acquirers`. Click on :guilabel:`Ogone`, enable
|
||||
:guilabel:`Test Mode` and enter your credentials in the :guilabel:`Credentials` tab. We recommend
|
||||
doing this on an Odoo test database, rather than on your main database.
|
||||
|
||||
|
Before Width: | Height: | Size: 3.9 KiB |
@@ -155,15 +155,19 @@ Odoo supports the following local payment methods:
|
||||
- iDEAL
|
||||
- Przelewy24 (P24)
|
||||
|
||||
To enable specific local payment methods with Stripe, list them as supported payment icons. To do
|
||||
so, go to :menuselection:`Payment Acquirers --> Stripe --> Configuration` and add the desired
|
||||
To enable some of these local payment methods with Stripe, list them as supported payment icons. To
|
||||
do so, go to :menuselection:`Payment Acquirers --> Stripe --> Configuration` and add the desired
|
||||
payment methods in the **Supported Payment Icons** field. If the desired payment method is already
|
||||
listed, you don't have anything to do. If a payment icon record doesn't exist in the database, its
|
||||
related payment method is considered enabled with Stripe.
|
||||
listed, you don't have anything to do.
|
||||
|
||||
.. image:: stripe/stripe_enable_local_payment_method.png
|
||||
:align: center
|
||||
:alt: Select and add icons of the payment methods you want to enable
|
||||
|
||||
.. note::
|
||||
- If a payment icon record does not exist in the database and its related local payment method is
|
||||
listed above, it is considered enabled with Stripe.
|
||||
- If a local payment method is not listed above, it is not supported and cannot be enabled.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../payment_acquirers`
|
||||
|
||||
@@ -68,4 +68,4 @@ Offering my own services
|
||||
I am more than welcome to offer my own IAP services through Odoo Apps! It is the perfect opportunity
|
||||
to get recurring revenue for an ongoing service use rather than — and possibly instead of — a sole
|
||||
initial purchase. Please, find more information at: :doc:`In-App Purchase
|
||||
</developer/misc/api/iap>`.
|
||||
</developer/api/iap>`.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
:nosearch:
|
||||
|
||||
===============
|
||||
Inventory & Mrp
|
||||
Inventory & MRP
|
||||
===============
|
||||
|
||||
|
||||
|
||||
@@ -16,9 +16,11 @@ terms of service. Then, click :guilabel:`Start your free trial`. Verify your ema
|
||||
Twilio, as per their instructions.
|
||||
|
||||
Next, enter your phone number into Twilio. Then, Twilio will send you an SMS text message
|
||||
containing a verification code. Enter the verification code into Twilio to verify your phone number.
|
||||
containing a verification code. Enter the verification code into Twilio to verify your phone
|
||||
number.
|
||||
|
||||
After that, Twilio redirects to a welcome page. Use the following list to answer Twilio's questions:
|
||||
After that, Twilio redirects to a welcome page. Use the following list to answer Twilio's
|
||||
questions:
|
||||
|
||||
- For :guilabel:`Which Twilio product are you here to use?`, select :guilabel:`Video`.
|
||||
- For :guilabel:`What do you plan to build with Twilio?`, select :guilabel:`Other`.
|
||||
@@ -47,8 +49,9 @@ Connect Twilio to Odoo
|
||||
======================
|
||||
|
||||
Open the Odoo database and go to :menuselection:`Settings --> General Settings --> Discuss`. Check
|
||||
the box next to :guilabel:`Use Twilio ICE servers` and enter the Twilio account's :guilabel:`Account
|
||||
SID` and :guilabel:`Auth Token`. Finally, click :guilabel:`Save` to apply these changes.
|
||||
the box next to :guilabel:`Use Twilio ICE servers` and enter the Twilio account's
|
||||
:guilabel:`Account SID` and :guilabel:`Auth Token`. Finally, click :guilabel:`Save` to apply these
|
||||
changes.
|
||||
|
||||
.. image:: ice_servers/connect-twilio-to-odoo.png
|
||||
:align: center
|
||||
@@ -57,6 +60,10 @@ SID` and :guilabel:`Auth Token`. Finally, click :guilabel:`Save` to apply these
|
||||
Define a list of custom ICE servers
|
||||
===================================
|
||||
|
||||
This step is not required for the Twilio configuration. However, if Twilio is not configured or is
|
||||
not working at any given moment, Odoo will fall back on the custom ICE servers list. The user must
|
||||
define the list of custom ICE servers.
|
||||
|
||||
In :menuselection:`Settings --> General Settings --> Discuss`, click the :guilabel:`ICE Servers`
|
||||
button under :guilabel:`Custom ICE server list`.
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ To link the scale to the **IoT Box**, connect them with a cable.
|
||||
.. note::
|
||||
In some cases, a serial to USB adapter may be needed.
|
||||
|
||||
If your scale is `compatibale with Odoo IoT Box <https://www.odoo.com/page/iot-hardware>`_, there
|
||||
If your scale is `compatible with Odoo IoT Box <https://www.odoo.com/page/iot-hardware>`_, there
|
||||
is no need to set up anything because it will be automatically detected as soon as it is connected.
|
||||
|
||||
.. image:: scale/iot-choice.png
|
||||
|
||||
@@ -1,21 +1,30 @@
|
||||
:nosearch:
|
||||
:show-content:
|
||||
:hide-page-toc:
|
||||
:show-toc:
|
||||
|
||||
======
|
||||
Studio
|
||||
======
|
||||
|
||||
Learn all you need in order to build custom applications: customize views, create specific reports,
|
||||
automate actions, define approval workflows, etc.
|
||||
|
||||
.. seealso::
|
||||
- `Odoo Tutorials: Studio <https://www.odoo.com/slides/studio-31>`_
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
studio/concepts
|
||||
studio/use_cases
|
||||
studio/how_to
|
||||
studio/fields
|
||||
studio/views
|
||||
studio/models_modules_apps
|
||||
studio/automated_actions
|
||||
|
||||
Studio is a toolbox that allows you to customize Odoo without coding knowledge. For example, you
|
||||
can, on any app, add or modify:
|
||||
|
||||
- :doc:`Fields <studio/fields>`
|
||||
- :doc:`Views <studio/views>`
|
||||
- :doc:`Models <studio/models_modules_apps>`
|
||||
- :doc:`Automated actions <studio/automated_actions>`
|
||||
- PDF reports
|
||||
- Approval rules
|
||||
- Security rules
|
||||
|
||||
Or you can :doc:`build an app from scratch <studio/models_modules_apps>`.
|
||||
|
||||
.. seealso::
|
||||
- `Odoo Tutorials: Studio <https://www.odoo.com/slides/studio-31>`_
|
||||
249
content/applications/productivity/studio/automated_actions.rst
Normal file
@@ -0,0 +1,249 @@
|
||||
===============================
|
||||
Automated actions (automations)
|
||||
===============================
|
||||
|
||||
Automated actions are used to trigger automatic changes based on user actions (e.g., apply a
|
||||
modification when a field is set to a specific value) or on time conditions (e.g., archive a record
|
||||
7 days after its last update).
|
||||
|
||||
To create an automated action with Studio, go to :guilabel:`Automations` from anywhere within
|
||||
Studio.
|
||||
|
||||
For every automated action you create, the following elements should be defined: the
|
||||
:ref:`studio/automated-actions/model`, the :ref:`studio/automated-actions/trigger`, the
|
||||
:ref:`studio/automated-actions/apply-on`, and the :ref:`studio/automated-actions/action`.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: automated_actions/automated-action-example.png
|
||||
:align: center
|
||||
:alt: Example of an automated action on the Subscription model
|
||||
|
||||
.. _studio/automated-actions/model:
|
||||
|
||||
Model
|
||||
=====
|
||||
|
||||
Select the model where the automated action should be applied.
|
||||
|
||||
.. note::
|
||||
The model you are on when you click on :guilabel:`Automations` is pre-selected by default.
|
||||
|
||||
.. _studio/automated-actions/trigger:
|
||||
|
||||
Trigger
|
||||
=======
|
||||
|
||||
Define when the automated action should be applied. Six triggers are available.
|
||||
|
||||
.. _studio/automated-actions/trigger/on-creation:
|
||||
|
||||
On Creation
|
||||
-----------
|
||||
|
||||
The action is triggered when a record is created and then saved.
|
||||
|
||||
.. _studio/automated-actions/trigger/on-update:
|
||||
|
||||
On Update
|
||||
---------
|
||||
|
||||
The action is triggered when a previously saved record is edited and then saved.
|
||||
|
||||
- Use :guilabel:`Trigger Fields` to specify which fields - and only those - trigger the action on
|
||||
their update.
|
||||
- To detect when a record changes from one state to another, define a :guilabel:`Before Update
|
||||
Domain` filter, which checks if the condition is satisfied before the record is updated. Then set
|
||||
an :ref:`studio/automated-actions/apply-on` filter, which checks if the condition is met after the
|
||||
record is updated.
|
||||
|
||||
.. example::
|
||||
If you want the automated action to happen when an email address is set on a contact, define
|
||||
the :guilabel:`Before Update Domain` to `Email is not set`, and the :guilabel:`Apply on`
|
||||
domain to `Email is set`.
|
||||
|
||||
.. image:: automated_actions/on-update-trigger-example.png
|
||||
:align: center
|
||||
:alt: Example of an On Update trigger
|
||||
|
||||
.. _studio/automated-actions/trigger/on-creation-update:
|
||||
|
||||
On Creation & Update
|
||||
--------------------
|
||||
|
||||
The action is triggered when a record is created and saved or edited afterward and saved.
|
||||
|
||||
.. _studio/automated-actions/trigger/on-deletion:
|
||||
|
||||
On Deletion
|
||||
-----------
|
||||
|
||||
The action is triggered when a record is deleted.
|
||||
|
||||
.. note::
|
||||
This trigger is rarely used, as archiving records is usually preferred to deletion.
|
||||
|
||||
.. _studio/automated-actions/trigger/form-modification:
|
||||
|
||||
Based on Form Modification
|
||||
--------------------------
|
||||
|
||||
The action is triggered when any change is done to a trigger field's value on the :ref:`Form view
|
||||
<studio/views/general/form>`, even before saving the record. This trigger only works on the user
|
||||
interface when a modification is made by a user. If the field is changed through another action and
|
||||
not by the user, the action will not run.
|
||||
|
||||
.. note::
|
||||
This trigger can only be used with the :ref:`Execute Python Code action
|
||||
<studio/automated-actions/action/python-code>`, so development is required.
|
||||
|
||||
.. _studio/automated-actions/trigger/timed-condition:
|
||||
|
||||
Based on Timed Condition
|
||||
------------------------
|
||||
|
||||
The action is triggered when a trigger field's date or date & time value is reached.
|
||||
|
||||
- To trigger the action after the :guilabel:`Trigger Date`, add a number of minutes, hours, days, or
|
||||
months under :guilabel:`Delay after trigger date`. To trigger the action before, add a negative
|
||||
number instead.
|
||||
|
||||
.. example::
|
||||
If you want to send a reminder email 30 minutes before the start of a calendar event, select
|
||||
the :guilabel:`Start (Calendar Event)` under :guilabel:`Trigger Date` and set the
|
||||
:guilabel:`Delay after trigger date` to **-30** :guilabel:`Minutes`.
|
||||
|
||||
.. image:: automated_actions/timed-condition-trigger-example.png
|
||||
:align: center
|
||||
:alt: Example of a Based on Timed Condition trigger
|
||||
|
||||
.. note::
|
||||
By default, the scheduler checks for trigger dates every 4 hours.
|
||||
|
||||
.. _studio/automated-actions/apply-on:
|
||||
|
||||
Apply on
|
||||
========
|
||||
|
||||
Define on which records of the model the automated action should be applied. It works the same way
|
||||
as when you apply filters on a model.
|
||||
|
||||
.. _studio/automated-actions/action:
|
||||
|
||||
Action
|
||||
======
|
||||
|
||||
Determine what the automated action should do (server action). There are eight types of action to
|
||||
choose from.
|
||||
|
||||
.. _studio/automated-actions/action/python-code:
|
||||
|
||||
Execute Python Code
|
||||
-------------------
|
||||
|
||||
The action is used to execute Python code. The available variables are described on the
|
||||
:guilabel:`Python Code` tab, which is also used to write your code, or on the :guilabel:`Help` tab.
|
||||
|
||||
- To allow the action to be run through the website, tick :guilabel:`Available on the Website` and
|
||||
add a :guilabel:`Website Path`.
|
||||
|
||||
.. _studio/automated-actions/action/new-record:
|
||||
|
||||
Create a new Record
|
||||
-------------------
|
||||
|
||||
The action is used to create a new record on any model.
|
||||
|
||||
.. note::
|
||||
Selecting a :guilabel:`Target Model` is only required if you want to target another model than
|
||||
the one you are on.
|
||||
|
||||
- To link the record that triggered the creation of the new record, select a field under
|
||||
:guilabel:`Link Field`. For example, you could create a contact automatically when a lead is
|
||||
turned into an opportunity.
|
||||
- :guilabel:`Data to Write` tab: the tab is used to specify the new record's values. After selecting
|
||||
a :guilabel:`Field`, select its :guilabel:`Evaluation Type`:
|
||||
|
||||
- :guilabel:`Value`: used to directly give the field's raw value in the :guilabel:`Value` column.
|
||||
- :guilabel:`Reference`: used to select the record under the :guilabel:`Record` column and let
|
||||
Studio add the internal ID in the :guilabel:`Value` column.
|
||||
|
||||
.. example::
|
||||
If an automated action creates a new task in a project, you can assign it to a specific user
|
||||
by setting the :guilabel:`Field` to :guilabel:`Responsible User (Project)`, the
|
||||
:guilabel:`Evaluation Type` to :guilabel:`Reference`, and the :guilabel:`Record` to a
|
||||
specific user.
|
||||
|
||||
.. image:: automated_actions/new-record-example.png
|
||||
:align: center
|
||||
:alt: Example of a Create a new Record action
|
||||
|
||||
- :guilabel:`Python expression`: used to dynamically define the newly created record’s value for a
|
||||
field using Python code in the :guilabel:`Value` column.
|
||||
|
||||
.. _studio/automated-actions/action/update-record:
|
||||
|
||||
Update the Record
|
||||
-----------------
|
||||
|
||||
The action is used to set value(s) for field(s) of any record on the current model.
|
||||
|
||||
.. note::
|
||||
The process to fill in the :guilabel:`Data to Write` tab is the same as described under
|
||||
:ref:`studio/automated-actions/action/new-record`.
|
||||
|
||||
.. _studio/automated-actions/action/several-actions:
|
||||
|
||||
Execute several actions
|
||||
-----------------------
|
||||
|
||||
The action is used to trigger multiple actions at the same time. To do so, click on :guilabel:`Add a
|
||||
line` under the :guilabel:`Actions` tab. In the :guilabel:`Child Actions` pop-up, click on
|
||||
:guilabel:`Create` and configure the action.
|
||||
|
||||
.. _studio/automated-actions/action/send-email:
|
||||
|
||||
Send Email
|
||||
----------
|
||||
|
||||
The action is used to send an email to a contact linked to a specific record. To do so, select or
|
||||
create an :guilabel:`Email Template`.
|
||||
|
||||
.. _studio/automated-actions/action/add-followers:
|
||||
|
||||
Add Followers
|
||||
-------------
|
||||
|
||||
The action is used to subscribe existing contacts to the record.
|
||||
|
||||
.. _studio/automated-actions/action/next-activity:
|
||||
|
||||
Create Next Activity
|
||||
--------------------
|
||||
|
||||
The action is used to schedule a new activity linked to the record. Use the :guilabel:`Activity` tab
|
||||
to set it up as usual, but instead of the :guilabel:`Assigned to` field, select an
|
||||
:guilabel:`Activity User Type`. Select :guilabel:`Specific User` and add the user under
|
||||
:guilabel:`Responsible` if the activity should always be assigned to the same user. To dynamically
|
||||
target a user linked to the record, select :guilabel:`Generic User From Record` instead and change
|
||||
the :guilabel:`User field name` if necessary.
|
||||
|
||||
.. example::
|
||||
After a lead is turned into an opportunity, you want your automated action to set up a call for
|
||||
the user responsible for the lead. To do so, set the :guilabel:`Activity` to :guilabel:`Call`
|
||||
and set the :guilabel:`Activity User Type` to :guilabel:`Generic User From Record`.
|
||||
|
||||
.. image:: automated_actions/next-activity-example.png
|
||||
:align: center
|
||||
:alt: Example of a Create Next Activity action
|
||||
|
||||
.. _studio/automated-actions/action/send-sms:
|
||||
|
||||
Send SMS Text Message
|
||||
---------------------
|
||||
|
||||
The action is used to send an SMS to a contact linked to the record. To do so, select or create an
|
||||
:guilabel:`SMS Template`.
|
||||
|
||||
.. tip::
|
||||
If you want sent messages to be logged in the Chatter, tick :guilabel:`Log as Note`.
|
||||
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
@@ -1,11 +0,0 @@
|
||||
:nosearch:
|
||||
|
||||
========
|
||||
Concepts
|
||||
========
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
concepts/understanding_general
|
||||
concepts/understanding_automated_actions
|
||||
@@ -1,77 +0,0 @@
|
||||
===============================
|
||||
Understanding Automated Actions
|
||||
===============================
|
||||
|
||||
| Automated actions are used to trigger actions. They are based on conditions and happen on top of
|
||||
Odoo’s default business logic.
|
||||
| Examples of automated actions include: creating a next activity upon a quote's confirmation;
|
||||
adding a user as a follower of a confirmed invoice if its total is higher than a
|
||||
certain amount; or preventing a lead from changing stage if a field is not filled in.
|
||||
|
||||
.. image:: understanding_automated_actions/automated_action_flow.png
|
||||
:align: center
|
||||
:height: 270
|
||||
:alt: Flowchart to exemplify an automated action rule for Odoo Studio
|
||||
|
||||
| Let's understand how to properly define *when* an automated action runs and *how* to create one:
|
||||
| The first step is to choose the :doc:`Model <understanding_general>` on which the action is
|
||||
applied.
|
||||
| The **Trigger** field defines the event that causes the automated action to happen:
|
||||
|
||||
- *On Creation*: when a new record is created. Note that the record is created once saved for the
|
||||
first time.
|
||||
- *On Update*: when the record is updated. Note that the update happens once the record is saved.
|
||||
- *On Creation & Update*: on the creation and/or on the update of a record once the form is saved.
|
||||
- *On Deletion*: on the removal of a record under the condition set.
|
||||
- *Based on Form Modification*: when the value of the specified *Trigger* field is changed in the
|
||||
interface (user sees the changes before saving the record). Note that this action can only be used
|
||||
with the *Execute Python Code* action type.
|
||||
- *Based on Timed Condition*: a delay happens after a specific date/time. Set a *Delay after trigger
|
||||
date* if you need a delay to happen before the *Trigger Date*. Example: to send a reminder 15min
|
||||
before a meeting. If the date/time is not set on the form of the model chosen, the date/time
|
||||
considered is the one of the creation/update of the record.
|
||||
|
||||
For every Trigger option, **conditions** can be applied, such as:
|
||||
|
||||
- *Before Update Domain*: if designated, this condition must be satisfied before the record is
|
||||
updated.
|
||||
- *Apply on*: if designated, this condition must be satisfied before executing the action rule
|
||||
(*Action To Do*), and after the update.
|
||||
|
||||
| The **Active** option is to be turned off when the rule should be hidden and not executed.
|
||||
| Under **Action To Do** choose the type of server action that must be executed once records meet
|
||||
the *Trigger* conditions:
|
||||
|
||||
- *Execute Python Code*: a block of code is executed. A *Help* tab with the variables that can be
|
||||
used is available.
|
||||
- *Create New Record*: a new record with new values is created.
|
||||
- *Update a Record*: updates the record that triggered the action.
|
||||
- *Execute several actions*: defines an action that triggers other server actions.
|
||||
- *Send Email*: an automatic :doc:`email </applications/general/email_communication/email_template>` is sent.
|
||||
- *Add Followers*: followers are notified of changes in the task.
|
||||
- *Create Next Activity*: creates an activity such as: *Call*, *Email*, *Reminder*.
|
||||
- *Send SMS Text Message*: sends an :doc:`SMS </applications/marketing/sms_marketing/pricing/pricing_and_faq>`.
|
||||
|
||||
Example
|
||||
~~~~~~~
|
||||
|
||||
This is the process of which the update of the *Email* field on the Lead/Opportunity *Model*, with a
|
||||
*Trigger Condition* set to *On Update*, goes through:
|
||||
|
||||
.. image:: understanding_automated_actions/action_update_lead_example.png
|
||||
:align: center
|
||||
:alt: View of an automated action being created in Odoo Studio
|
||||
|
||||
#. The user creates the record without an email address set.
|
||||
#. The user updates the record defining an email address.
|
||||
#. Once the change is saved, the automation checks if any of the *Watched Fields* are being updated
|
||||
(for the example: field name *email_from* (Email).
|
||||
#. If true, it checks if the record matches the *Before Update Domain* (for the example: *email
|
||||
is not set*).
|
||||
#. If true, it checks (*after the update*) whether the record matches the *Apply on* domain (for the
|
||||
example: *email is set*).
|
||||
#. If true, the chosen *Action To Do* is performed on the record.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`understanding_general`
|
||||
- :doc:`../use_cases/automated_actions`
|
||||
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 5.8 KiB |
@@ -1,95 +0,0 @@
|
||||
==============================
|
||||
Understanding General Concepts
|
||||
==============================
|
||||
|
||||
| Odoo Studio is a toolbox that allows you to add models or adapt functionalities on top of Odoo’s
|
||||
standard behavior without coding knowledge. You can also create custom views and modify existing
|
||||
ones without having to get into the XML code.
|
||||
| Even for experienced developers, typing out code requires time. By using Odoo Studio, you can
|
||||
quickly get your models up and going and focus on the crucial parts of your application. The
|
||||
result is a user-friendly solution that makes customizations and designing new applications easy
|
||||
with or without programming skills.
|
||||
|
||||
|
||||
Getting started
|
||||
===============
|
||||
|
||||
One you start using Odoo Studio, you automatically create a new *module* that contains all your
|
||||
modifications. These modifications can be done on existing screens (*views*), by adding new
|
||||
*fields* in existing applications, or by creating an entirely new *model*.
|
||||
|
||||
What is a Module?
|
||||
-----------------
|
||||
|
||||
| An Odoo **Module** can contain a number of elements, such as: business objects (models), object
|
||||
views, data files, web controllers, and static web data. An application is a collection of modules.
|
||||
| In object-oriented programming, models usually represent a concept from the real world.
|
||||
Example: Odoo has models for Sales Orders, Users, Countries, etc. If you were to build an
|
||||
application to manage Real Estate sales, a model that represents the Properties for sale would
|
||||
probably be your first step.
|
||||
|
||||
.. image:: understanding_general/new_app.png
|
||||
:align: center
|
||||
:alt: Overview of the main dashboard emphasizing the option to create a new app in Odoo Studio
|
||||
|
||||
.. _studio/concepts/understanding_general/models:
|
||||
|
||||
What is a Model (also called Object)?
|
||||
-------------------------------------
|
||||
|
||||
A **Model** determines the logical structure of a database and fundamentally determines in which
|
||||
manner data can be stored, organized, and manipulated. In other words, a model is a table of
|
||||
information that can be bridged with other tables.
|
||||
|
||||
What are Fields?
|
||||
----------------
|
||||
|
||||
| **Fields** compose models. It is where a record (a piece of data) is registered.
|
||||
| Example: on the Real Estate application, fields on the Properties model would include
|
||||
the price, address, a picture, a link to the current owner, etc.
|
||||
| There are 2 main types of fields in Odoo: *basic (or scalar) fields* and *relational fields*.
|
||||
| Basic fields represent simple values, like numbers or text. Relational fields represent relations
|
||||
between models. So, if you have a model for *Customers* and another one for *Properties*, you
|
||||
would use a relational field to link each Property to its Customer.
|
||||
|
||||
Relational Fields in detail
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
| **Relational Fields** provide the option to link the data of one model with the data of another
|
||||
model.
|
||||
| In Odoo, relational field types are: *One2many*, *Many2one*, *Many2many*.
|
||||
|
||||
.. image:: understanding_general/relational_fields.png
|
||||
:align: center
|
||||
:alt: Tables with a visual explanation of related fields for Odoo Studio
|
||||
|
||||
| An **One2many** field is a *one-way* direction of selecting *multiple* records from a table.
|
||||
| Example: a Sales Order can contain multiple Sales Order Lines, which also contain multiple fields
|
||||
of information.
|
||||
| A **Many2one** field is a *one-way* direction of selecting *one* record from a table.
|
||||
| Example: you can have many product categories, but each product can only belong to one category.
|
||||
| A **Many2many** field is a *two-way* direction of selecting records from a table.
|
||||
| Example: multiple tags can be added to a lead’s form.
|
||||
|
||||
.. note::
|
||||
An *One2many* field must have a *Many2one* related to it.
|
||||
|
||||
What are Views?
|
||||
---------------
|
||||
|
||||
**Views** define how records are displayed. They are specified in XML which means that they can be
|
||||
edited independently from the models that they represent. There are various types of views in Odoo,
|
||||
and each of them represents a mode of visualization. Some examples are: *form*, *list*, *kanban*.
|
||||
|
||||
What is a Menu?
|
||||
---------------
|
||||
|
||||
A **Menu** is a button that executes an action. In Odoo Studio, to create menus (models) and
|
||||
rearrange their hierarchy, click on *Edit Menu*.
|
||||
|
||||
.. image:: understanding_general/edit_menu.png
|
||||
:align: center
|
||||
:alt: Overview of a menu being edit in Odoo Studio
|
||||
|
||||
.. seealso::
|
||||
- `Studio Basics <https://www.odoo.com/fr_FR/slides/studio-31>`_
|
||||
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 33 KiB |
493
content/applications/productivity/studio/fields.rst
Normal file
@@ -0,0 +1,493 @@
|
||||
==================
|
||||
Fields and widgets
|
||||
==================
|
||||
|
||||
Fields structure the models of a database. If you picture a model as a table or spreadsheet, fields
|
||||
are the columns where data is stored in the records (i.e., the rows). Fields also define the type of
|
||||
data that is stored within them. How the data is presented and formatted on the :abbr:`UI (User
|
||||
Interface)` is defined by their widget.
|
||||
|
||||
From a technical point of view, there are 15 field types in Odoo. However, you can choose from 20
|
||||
fields in Studio, as some field types are available more than once with a different default widget.
|
||||
|
||||
.. tip::
|
||||
:guilabel:`New Fields` can only be added to the :ref:`studio/views/general/form` and
|
||||
:ref:`studio/views/multiple-records/list` views. On other views, you can only add
|
||||
:guilabel:`Existing Fields` :dfn:`(fields already on the model)`.
|
||||
|
||||
.. _studio/fields/simple-fields:
|
||||
|
||||
Simple fields
|
||||
=============
|
||||
|
||||
Simple fields contain basic values, such as text, numbers, files, etc.
|
||||
|
||||
.. note::
|
||||
Non-default widgets, when available, are presented as bullet points below.
|
||||
|
||||
.. _studio/fields/simple-fields/text:
|
||||
|
||||
Text (`char`)
|
||||
-------------
|
||||
|
||||
The :guilabel:`Text` field is used for short text containing any character. One text line is
|
||||
displayed when filling out the field.
|
||||
|
||||
- :guilabel:`Badge`: displays the value inside a rounded shape, similar to a tag. The value cannot
|
||||
be edited on the UI, but a default value can be set.
|
||||
- :guilabel:`Copy to Clipboard`: users can copy the value by clicking a button.
|
||||
- :guilabel:`E-mail`: the value becomes a clickable *mailto* link.
|
||||
- :guilabel:`Image`: displays an image using a URL. The value cannot be edited manually, but a
|
||||
default value can be set.
|
||||
|
||||
.. note::
|
||||
This works differently than selecting the :ref:`Image field
|
||||
<studio/fields/simple-fields/image>` directly, as the image is not stored in Odoo when using a
|
||||
:guilabel:`Text` field with the :guilabel:`Image` widget. For example, it can be useful if you
|
||||
want to save disk space.
|
||||
|
||||
- :guilabel:`Phone`: the value becomes a clickable *tel* link.
|
||||
|
||||
.. tip::
|
||||
Tick :guilabel:`Enable SMS` to add an option to send an SMS directly from Odoo next to the
|
||||
field.
|
||||
|
||||
- :guilabel:`URL`: the value becomes a clickable URL.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/text-examples.png
|
||||
:align: center
|
||||
:alt: Examples of Text fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/multiline-text:
|
||||
|
||||
Multiline Text (`text`)
|
||||
-----------------------
|
||||
|
||||
The :guilabel:`Multiline Text` field is used for longer text containing any type of character. Two
|
||||
text lines are displayed on the UI when filling out the field.
|
||||
|
||||
- :guilabel:`Copy to Clipboard`: users can copy the value by clicking a button.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/multiline-text-examples.png
|
||||
:align: center
|
||||
:alt: Examples of Multiline Text fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/integer:
|
||||
|
||||
Integer (`integer`)
|
||||
-------------------
|
||||
|
||||
The :guilabel:`Integer` field is used for all integer numbers (:dfn:`positive, negative, or zero,
|
||||
without a decimal`).
|
||||
|
||||
- :guilabel:`Percentage Pie`: displays the value inside a percentage circle, usually for a computed
|
||||
value. The value cannot be edited on the UI, but a default value can be set.
|
||||
- :guilabel:`Progress Bar`: displays the value next to a percentage bar, usually for a computed
|
||||
value. The field cannot be edited manually, but a default value can be set.
|
||||
- :guilabel:`Handle`: displays a drag handle icon to order records manually in :ref:`List view
|
||||
<studio/views/multiple-records/list>`.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/integer-examples.png
|
||||
:align: center
|
||||
:alt: Examples of Integer fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/decimal:
|
||||
|
||||
Decimal (`float`)
|
||||
-----------------
|
||||
|
||||
The :guilabel:`Decimal` field is used for all decimal numbers (:dfn:`positive, negative, or zero,
|
||||
with a decimal`).
|
||||
|
||||
.. note::
|
||||
Decimal numbers are displayed with two decimals after the decimal point on the UI, but they are
|
||||
stored in the database with more precision.
|
||||
|
||||
- :guilabel:`Monetary`: it is similar to using the :ref:`Monetary field
|
||||
<studio/fields/simple-fields/monetary>`. It is recommended to use the later as it offers more
|
||||
functionalities.
|
||||
- :guilabel:`Percentage`: displays a percent character `%` after the value.
|
||||
- :guilabel:`Percentage Pie`: displays the value inside a percentage circle, usually for a computed
|
||||
value. The field cannot be edited manually, but a default value can be set.
|
||||
- :guilabel:`Progress Bar`: displays the value next to a percentage bar, usually for a computed
|
||||
value. The field cannot be edited manually, but a default value can be set.
|
||||
- :guilabel:`Time`: the value must follow the *hh:mm* format, with a maximum of 59 minutes.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/decimal-examples.png
|
||||
:align: center
|
||||
:alt: Examples of Decimal fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/monetary:
|
||||
|
||||
Monetary (`monetary`)
|
||||
---------------------
|
||||
|
||||
The :guilabel:`Monetary` field is used for all monetary values.
|
||||
|
||||
.. note::
|
||||
When you first add a :guilabel:`Monetary` field, you are prompted to add a :guilabel:`Currency`
|
||||
field if none exists already on the model. Odoo offers to add the :guilabel:`Currency` field for
|
||||
you. Once it is added, add the :guilabel:`Monetary` field again.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/monetary-example.png
|
||||
:align: center
|
||||
:alt: Example of a Monetary field along with its Currency field
|
||||
|
||||
.. _studio/fields/simple-fields/html:
|
||||
|
||||
Html (`html`)
|
||||
-------------
|
||||
|
||||
The :guilabel:`Html` field is used to add text that can be edited using the Odoo HTML editor.
|
||||
|
||||
- :guilabel:`Multiline Text`: disables the Odoo HTML editor to allow editing raw HTML.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/html-example.png
|
||||
:align: center
|
||||
:alt: Examples of Html fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/date:
|
||||
|
||||
Date (`date`)
|
||||
-------------
|
||||
|
||||
The :guilabel:`Date` field is used to select a date on a calendar.
|
||||
|
||||
- :guilabel:`Remaining Days`: the remaining number of days before the selected date is displayed
|
||||
(e.g., *In 5 days*), based on the current date.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/date-examples.png
|
||||
:align: center
|
||||
:alt: Examples of Date fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/date-time:
|
||||
|
||||
Date & Time (`datetime`)
|
||||
------------------------
|
||||
|
||||
The :guilabel:`Date & Time` field is used to select a date on a calendar and a time on a clock. The
|
||||
user's current time is automatically used if no time is set.
|
||||
|
||||
- :guilabel:`Date`: used to record the time without displaying it on the UI.
|
||||
- :guilabel:`Remaining days`: displays the remaining number of days before the selected date (e.g.,
|
||||
*In 5 days*), based on the current date and time.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/date-time-examples.png
|
||||
:align: center
|
||||
:alt: Examples of Date & Time fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/checkbox:
|
||||
|
||||
Checkbox (`boolean`)
|
||||
--------------------
|
||||
|
||||
The :guilabel:`Checkbox` field is used when a value should only be true or false, indicated by
|
||||
checking or unchecking a checkbox.
|
||||
|
||||
- :guilabel:`Button`: displays a radio button. The widget works without switching to the edit mode.
|
||||
- :guilabel:`Toggle`: displays a toggle button. The widget works without switching to the edit mode.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/checkbox-examples.png
|
||||
:align: center
|
||||
:alt: Examples of Checkbox fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/selection:
|
||||
|
||||
Selection (`selection`)
|
||||
-----------------------
|
||||
|
||||
The :guilabel:`Selection` field is used when users should select a single value from a group of
|
||||
predefined values.
|
||||
|
||||
- :guilabel:`Badge`: displays the value inside a rounded shape, similar to a tag. The value cannot
|
||||
be edited on the UI, but a default value can be set.
|
||||
- :guilabel:`Badges`: displays all selectable values simultaneously inside rectangular shapes,
|
||||
organized horizontally.
|
||||
- :guilabel:`Priority`: displays star symbols instead of values, which can be used to indicate an
|
||||
importance or satisfaction level, for example. This has the same effect as selecting the
|
||||
:ref:`Priority field <studio/fields/simple-fields/priority>`, although, for the latter, four
|
||||
priority values are already predefined.
|
||||
- :guilabel:`Radio`: displays all selectable values at the same time as radio buttons.
|
||||
|
||||
.. tip::
|
||||
By default, radio buttons are organized vertically. Tick :guilabel:`display horizontally` to
|
||||
switch the way they are displayed.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/selection-examples.png
|
||||
:align: center
|
||||
:alt: Examples of Selection fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/priority:
|
||||
|
||||
Priority (`selection`)
|
||||
----------------------
|
||||
|
||||
The :guilabel:`Priority` field is used to display a three-star rating system, which can be used to
|
||||
indicate importance or satisfaction level. This field type is a :ref:`Selection field
|
||||
<studio/fields/simple-fields/selection>` with the :guilabel:`Priority` widget selected by default
|
||||
and four priority values predefined. Consequently, the :guilabel:`Badge`, :guilabel:`Badges`,
|
||||
:guilabel:`Radio`, and :guilabel:`Selection` widgets have the same effects as described under
|
||||
:ref:`Selection <studio/fields/simple-fields/selection>`.
|
||||
|
||||
.. tip::
|
||||
To change the number of available stars by adding or removing values, click :guilabel:`Edit
|
||||
Values`. Note that the first value is equal to 0 stars (i.e., when no selection is made), so
|
||||
having four values results in a three-star rating system, for example.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/priority-example.png
|
||||
:align: center
|
||||
:alt: Example of a Priority field
|
||||
|
||||
.. _studio/fields/simple-fields/file:
|
||||
|
||||
File (`binary`)
|
||||
---------------
|
||||
|
||||
The :guilabel:`File` field is used to upload any type of file, or sign a form (:guilabel:`Sign`
|
||||
widget).
|
||||
|
||||
- :guilabel:`Image`: users can upload an image file, which is then displayed in :ref:`Form view
|
||||
<studio/views/general/form>`. This has the same effect as using the :ref:`Image field
|
||||
<studio/fields/simple-fields/image>`.
|
||||
- :guilabel:`PDF Viewer`: users can upload a PDF file, which can be then browsed from the
|
||||
:ref:`Form view <studio/views/general/form>`.
|
||||
- :guilabel:`Sign`: users can electronically sign the form. This has the same effect as selecting
|
||||
the :ref:`Sign field <studio/fields/simple-fields/sign>`.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/file-examples.png
|
||||
:align: center
|
||||
:alt: Examples of File fields with different widgets
|
||||
|
||||
.. _studio/fields/simple-fields/image:
|
||||
|
||||
Image (`binary`)
|
||||
----------------
|
||||
|
||||
The :guilabel:`Image` field is used to upload an image and display it in :ref:`Form view
|
||||
<studio/views/general/form>`. This field type is a :ref:`File field
|
||||
<studio/fields/simple-fields/file>` with the :guilabel:`Image` widget selected by default.
|
||||
Consequently, the :guilabel:`File`, :guilabel:`PDF Viewer`, and :guilabel:`Sign` widgets have the
|
||||
same effects as described under :ref:`File <studio/fields/simple-fields/file>`.
|
||||
|
||||
.. tip::
|
||||
To change the display size of uploaded images, select :guilabel:`Small`, :guilabel:`Medium`, or
|
||||
:guilabel:`Large` under the :guilabel:`Size` option.
|
||||
|
||||
.. _studio/fields/simple-fields/sign:
|
||||
|
||||
Sign (`binary`)
|
||||
---------------
|
||||
|
||||
The :guilabel:`Sign` field is used to sign the form electronically. This field type is a :ref:`File
|
||||
field <studio/fields/simple-fields/file>` with the :guilabel:`Sign` widget selected by default.
|
||||
Consequently, the :guilabel:`File`, :guilabel:`Image`, and :guilabel:`PDF Viewer` widgets have the
|
||||
same effects as described under :ref:`File <studio/fields/simple-fields/file>`.
|
||||
|
||||
.. tip::
|
||||
To give users the :guilabel:`Auto` option when having to draw their signature, select one of the
|
||||
available :guilabel:`Auto-complete with` fields (:ref:`Text <studio/fields/simple-fields/text>`,
|
||||
:ref:`Many2One <studio/fields/relational-fields/many2one>`, and :ref:`Related Field
|
||||
<studio/fields/relational-fields/related-field>` on the model only). The signature is
|
||||
automatically generated using the data from the selected field.
|
||||
|
||||
.. _studio/fields/relational-fields:
|
||||
|
||||
Relational fields
|
||||
=================
|
||||
|
||||
Relational fields are used to link and display the data from records on another model.
|
||||
|
||||
.. note::
|
||||
Non-default widgets, when available, are presented as bullet points below.
|
||||
|
||||
.. _studio/fields/relational-fields/many2one:
|
||||
|
||||
Many2One (`many2one`)
|
||||
---------------------
|
||||
|
||||
The :guilabel:`Many2One` field is used to link another record (from another model) to the record
|
||||
being edited. The record's name from the other model is then displayed on the record being edited.
|
||||
|
||||
.. example::
|
||||
On the *Sales Order* model, the :guilabel:`Customer` field is a :guilabel:`Many2One` field
|
||||
pointing at the *Contact* model. This allows **many** sales orders to be linked to **one**
|
||||
contact (customer).
|
||||
|
||||
.. image:: fields/many2one-diagram.png
|
||||
:align: center
|
||||
:alt: Diagram showing a many2one relationship
|
||||
|
||||
.. tip::
|
||||
- To prevent users from creating a new record in the linked model, tick :guilabel:`Disable
|
||||
creation`.
|
||||
- To prevent users from opening records in a pop-up window, tick :guilabel:`Disable opening`.
|
||||
- To help users only select the right record, click on :guilabel:`Domain` to create a filter.
|
||||
|
||||
- :guilabel:`Badge`: displays the value inside a rounded shape, similar to a tag. The value cannot
|
||||
be edited on the UI.
|
||||
- :guilabel:`Radio`: displays all selectable values at the same time as radio buttons.
|
||||
|
||||
.. _studio/fields/relational-fields/one2many:
|
||||
|
||||
One2Many (`one2many`)
|
||||
---------------------
|
||||
|
||||
The :guilabel:`One2Many` field is used to display the existing relations between a record on the
|
||||
current model and multiple records from another model.
|
||||
|
||||
.. example::
|
||||
You could add a :guilabel:`One2Many` field on the *Contact* model to look at **one** customer's
|
||||
**many** sales orders.
|
||||
|
||||
.. image:: fields/one2many-diagram.png
|
||||
:align: center
|
||||
:alt: Diagram showing a one2many relationship
|
||||
|
||||
.. note::
|
||||
To use a :guilabel:`One2Many` field, the two models must have been linked already using a
|
||||
:ref:`Many2One field <studio/fields/relational-fields/many2one>`. One2Many relations do not exist
|
||||
independently: a reverse-search of existing Many2One relations is performed.
|
||||
|
||||
.. _studio/fields/relational-fields/lines:
|
||||
|
||||
Lines (`one2many`)
|
||||
------------------
|
||||
|
||||
The :guilabel:`Lines` field is used to create a table with rows and columns (e.g., the lines of
|
||||
products on a sales order).
|
||||
|
||||
.. tip::
|
||||
To modify the columns, click on the :guilabel:`Lines` field and then :guilabel:`Edit List View`.
|
||||
To edit the form that pops up when a user clicks on :guilabel:`Add a line`, click on
|
||||
:guilabel:`Edit Form View` instead.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/lines-example.png
|
||||
:align: center
|
||||
:alt: Example of a Lines field
|
||||
|
||||
.. _studio/fields/relational-fields/many2many:
|
||||
|
||||
Many2Many (`many2many`)
|
||||
-----------------------
|
||||
|
||||
The :guilabel:`Many2Many` field is used to link multiple records from another model to multiple
|
||||
records on the current model. Many2Many fields can use :guilabel:`Disable creation`,
|
||||
:guilabel:`Disable opening`, :guilabel:`Domain`, just like :ref:`Many2One fields
|
||||
<studio/fields/relational-fields/many2one>`.
|
||||
|
||||
.. example::
|
||||
On the *Task* model, the :guilabel:`Assignees` field is a :guilabel:`Many2Many` field pointing at
|
||||
the *Contact* model. This allows a single user to be assigned to **many** tasks and **many**
|
||||
users to be assigned to a single task.
|
||||
|
||||
.. image:: fields/many2many-diagram.png
|
||||
:align: center
|
||||
:alt: Diagram showing many2many relationships
|
||||
|
||||
- :guilabel:`Checkboxes`: users can select several values using checkboxes.
|
||||
- :guilabel:`Tags`: users can select several values appearing in rounded shapes, also known as
|
||||
*tags*. This has the same effect as selecting the :ref:`Tags field
|
||||
<studio/fields/relational-fields/tags>`.
|
||||
|
||||
.. _studio/fields/relational-fields/tags:
|
||||
|
||||
Tags (`many2many`)
|
||||
------------------
|
||||
|
||||
The :guilabel:`Tags` field is used to display several values from another model appearing in rounded
|
||||
shapes, also known as *tags*. This field type is a :ref:`Many2Many field
|
||||
<studio/fields/relational-fields/many2many>` with the :guilabel:`Tags` widget selected by default.
|
||||
Consequently, the :guilabel:`Checkboxes` and :guilabel:`Many2Many` widgets have the same effects as
|
||||
described under :ref:`Many2Many <studio/fields/relational-fields/many2many>`.
|
||||
|
||||
.. tip::
|
||||
To display tags with different background colors, tick :guilabel:`Use colors`.
|
||||
|
||||
.. example::
|
||||
|
||||
.. image:: fields/tags-example.png
|
||||
:align: center
|
||||
:alt: Example of a Tags field
|
||||
|
||||
.. _studio/fields/relational-fields/related-field:
|
||||
|
||||
Related Field (`related`)
|
||||
-------------------------
|
||||
|
||||
A :guilabel:`Related Field` is not a relational field per se; no relationship is created between
|
||||
models. It uses an existing relationship to fetch and display information from another record.
|
||||
|
||||
.. example::
|
||||
To display the email address of a customer on the *Sales Order* model, use the :guilabel:`Related
|
||||
Field` `partner_id.email` by selecting :guilabel:`Customer` and then :guilabel:`Email`.
|
||||
|
||||
.. _studio/fields/properties:
|
||||
|
||||
Properties
|
||||
==========
|
||||
|
||||
- :guilabel:`Invisible`: When it is not necessary for users to view a field on the UI, tick
|
||||
:guilabel:`Invisible`. It helps clear the UI by only showing the essential fields depending on a
|
||||
specific situation.
|
||||
|
||||
.. example::
|
||||
On the *Form* view of the *Contact* model, the :guilabel:`Title` field only appears when
|
||||
:guilabel:`Individual` is selected, as that field would not be helpful for a
|
||||
:guilabel:`Company` contact.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Invisible` attribute also applies to Studio. To view hidden fields inside
|
||||
Studio, click on a view's :guilabel:`View` tab and tick :guilabel:`Show Invisible
|
||||
Elements`.
|
||||
|
||||
- :guilabel:`Required`: If a field should always be completed by the user before being able to
|
||||
proceed, tick :guilabel:`Required`.
|
||||
- :guilabel:`Read only`: If users should not be able to modify a field, tick :guilabel:`Read only`.
|
||||
|
||||
.. note::
|
||||
You can choose to apply these three properties only for specific records by clicking on
|
||||
:guilabel:`Conditional` and creating a filter.
|
||||
|
||||
- :guilabel:`Label`: The :guilabel:`Label` is the field's name on the UI.
|
||||
|
||||
.. note::
|
||||
This is not the same name as used in the PostgreSQL database. To view and change the latter,
|
||||
activate the :ref:`Developer mode <developer-mode>`, and edit the :guilabel:`Technical Name`.
|
||||
|
||||
- :guilabel:`Help Tooltip`: To explain the purpose of a field, write a description under
|
||||
:guilabel:`Help Tooltip`. It is displayed inside a tooltip box when hovering with your mouse over
|
||||
the field's label.
|
||||
- :guilabel:`Placeholder`: To provide an example of how a field should be completed, write it under
|
||||
:guilabel:`Placeholder`. It is displayed in light gray in lieu of the field's value.
|
||||
- :guilabel:`Widget`: To change the default appearance or functionality of a field, select one of
|
||||
the available widgets.
|
||||
- :guilabel:`Default value`: To add a default value to a field when a record is created, use
|
||||
:guilabel:`Default value`.
|
||||
- :guilabel:`Limit visibility to groups`: To limit which users can see the field, select a user
|
||||
access group.
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 38 KiB |
BIN
content/applications/productivity/studio/fields/html-example.png
Normal file
|
After Width: | Height: | Size: 9.7 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
BIN
content/applications/productivity/studio/fields/tags-example.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 16 KiB |
@@ -1,12 +0,0 @@
|
||||
:nosearch:
|
||||
|
||||
======
|
||||
How To
|
||||
======
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
how_to/rainbow_man
|
||||
how_to/reports
|
||||
how_to/export_import
|
||||
@@ -1,28 +0,0 @@
|
||||
=========================
|
||||
Export and Import Modules
|
||||
=========================
|
||||
|
||||
When you do customizations in Odoo Studio, a new module is created in your database, making it easy
|
||||
to use Studio for prototyping.
|
||||
|
||||
To export these customizations, activate Studio on the main dashboard and, under the menu
|
||||
*Customizations*, click on *Export*. The default filename is *customizations.zip*.
|
||||
|
||||
.. image:: export_import/customizations_menu.png
|
||||
:align: center
|
||||
:alt: View of the menu customizations in Odoo Studio
|
||||
|
||||
| The module created contains the definition of custom models and fields, as well as the UI elements
|
||||
of any customization in an XML format.
|
||||
| To import and install the customizations in another instance, connect to the destination database,
|
||||
activate Studio and, under *Customizations*, click on *Import*.
|
||||
|
||||
.. image:: export_import/import_modules.png
|
||||
:align: center
|
||||
:alt: View of the import modules window for Odoo Studio
|
||||
|
||||
.. warning::
|
||||
Studio does not know which apps are customized (because the same view can be modified on
|
||||
different apps), therefore, it *does not* add the underlying modules as dependencies of the
|
||||
exported module. In other words, the applications installed on the source database should be
|
||||
installed on the destination database.
|
||||
|
Before Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 14 KiB |
@@ -1,23 +0,0 @@
|
||||
===========================
|
||||
Customizing the Rainbow Man
|
||||
===========================
|
||||
|
||||
The Rainbow Man in Odoo is an animation shown once the user completes certain tasks and clicks on
|
||||
certain buttons. It is a way to make the software fun to use, and rewarding, for employees.
|
||||
|
||||
.. image:: rainbow_man/crm_rainbow.png
|
||||
:align: center
|
||||
:alt: View of a sales form and the tab properties and its rainbow man field in Odoo Studio
|
||||
|
||||
| On most buttons in Odoo, such as *Send by Email*, *Confirm* or *Cancel*, once they are selected in
|
||||
Studio, under their *Properties*, the *Rainbow Man* effect can be applied.
|
||||
| By default, the feature is active:
|
||||
|
||||
- when opportunities are marked as won;
|
||||
- when users empty their inboxes;
|
||||
- when the user finishes a tour;
|
||||
- when the user finishes doing reconciliations.
|
||||
|
||||
.. image:: rainbow_man/properties_rainbow.png
|
||||
:align: center
|
||||
:alt: View of a sales form and the tab properties and its rainbow man field in Odoo Studio
|
||||
|
Before Width: | Height: | Size: 119 KiB |
|
Before Width: | Height: | Size: 46 KiB |
@@ -1,72 +0,0 @@
|
||||
===================
|
||||
Customizing Reports
|
||||
===================
|
||||
|
||||
| Odoo uses HTML and CSS technologies to create reports. HTML is a markup language that uses tags,
|
||||
also called elements. It is the core of any webpage because it provides its basic structure.
|
||||
CSS interacts with HTML elements to add style to the page, establishing how the HTML is shown to
|
||||
the user. Odoo’s reports also use Bootstrap’s grid layout, which is the containers, rows, and
|
||||
columns to align content, and support Odoo's website themes.
|
||||
| When creating a new report, choose the purpose of it and if you would like the report to include
|
||||
header and footer (company logo, name, address, phone, email address, etc.).
|
||||
|
||||
.. image:: reports/report_typing.png
|
||||
:align: center
|
||||
:alt: View of the types of new reports in Odoo Studio
|
||||
|
||||
Under the tab **Add**, you find the fields to be dragged and dropped to the view. *Fields*, *Data
|
||||
tables*, *Subtotal & Total*, and *Address Book* are dynamic elements (meaning that they need a
|
||||
:doc:`one2many or a many2many <../concepts/understanding_general>` related object). *Text*, *Title
|
||||
Block*, *Image*, and *Text in Cell* are static elements.
|
||||
|
||||
.. image:: reports/add_tab.png
|
||||
:align: center
|
||||
:alt: View of a report and the tab add in Odoo Studio
|
||||
|
||||
Once the element is added to the view, select it to see its **Options**. The first section shows the
|
||||
hierarchy of the selected object and its properties, allowing you to individually edit
|
||||
them. Fields with related objects have their directives shown on *Field Expression*.
|
||||
|
||||
.. image:: reports/options_tab.png
|
||||
:align: center
|
||||
:alt: View of a report and the tab options in Odoo Studio
|
||||
|
||||
| Under **Visible if**, define the rule(s) to set visibility conditions to fields.
|
||||
| Example: if choosing to display a product image, you could set a visibility rule to only display
|
||||
the ones that are *set* in the product form, avoiding having a plain icon when they are not set.
|
||||
| **Visible for** is used to set which :doc:`groups </applications/general/users>` can have access
|
||||
to specific elements in the report. **Limit visibility to groups**, under *Report*, sets the
|
||||
visibility of the report to specifics groups, meaning that users belonging to other groups do not
|
||||
see the same final document.
|
||||
|
||||
.. image:: reports/limit_visibility.png
|
||||
:align: center
|
||||
:alt: View of a report’s settings emphasizing the field limit visibility to groups in Odoo Studio
|
||||
|
||||
Under the **Report** tab, name your report, choose the paper format, and if the report should be
|
||||
added to the *Print* menu list on its respective document form.
|
||||
|
||||
.. image:: reports/print_menu.png
|
||||
:align: center
|
||||
:alt: View of an invoice form emphasizing the menu print for Odoo Studio
|
||||
|
||||
If activating the :ref:`developer mode <developer-mode>`, additional fields such as *Class* under
|
||||
*Options*, and *Reload from attachment* under *Report*, become visible.
|
||||
|
||||
- *Class*: add custom CSS classes to the selected element (e.g. Bootstrap classes such as
|
||||
*text-danger*).
|
||||
|
||||
- *Reload from attachment*: saves the report as an attachment of the document when printed. When the
|
||||
report is reprinted, it re-downloads that attachment instead of re-printing it.
|
||||
This means that if the underlying record (e.g. Invoice) changes when compared to the first
|
||||
impression, the report does not reflect the changes because they were done after the attachment was
|
||||
created. This is typically useful for reports linked to documents that should not change, such as
|
||||
Invoices.
|
||||
|
||||
.. tip::
|
||||
Actions in Odoo Studio can be undone until you *Close* the toolbox. Once you have closed Studio,
|
||||
changes can not be undone anymore.
|
||||
|
||||
.. image:: reports/undo_redo.png
|
||||
:align: center
|
||||
:alt: View of a report being built and emphasizing the undo and redo buttons in Odoo Studio
|
||||
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 22 KiB |