Compare commits

..

2 Commits

Author SHA1 Message Date
Antoine Vandevenne (anv)
87990e9377 [FIX] requirements: pin docutils to 0.16.0
Since sphinx-tabs 3.2.0 has the requirement docutils==0.16.0 and sphinx
3.5.4 has the requirement docutils>=0.12,<0.17, this commit pins
docutils to version 0.16.0.

While we're at it, the dependency to sphinx-tabs is also explicitly
listed, although it was already imported in the extensions. It causes
no trouble to install it from pip alongside the imported extension.

X-original-commit: 9d36e4e2a4
2022-06-10 11:29:56 +02:00
Denis Vermylen
bcc8498c0b [FIX] odoo.sh: remove hidden folder from documentation
it will also be renamed to .repositories in the near future

closes odoo/documentation#2166

X-original-commit: 1afee9e2c7
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2022-06-08 11:20:34 +02:00
290 changed files with 3020 additions and 4706 deletions

View File

@@ -26,7 +26,7 @@ SOURCE_DIR = content
HTML_BUILD_DIR = $(BUILD_DIR)/html
ifdef VERSIONS
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/saas-15.4
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/master
endif
ifneq ($(CURRENT_LANG),en)
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/$(CURRENT_LANG)

View File

@@ -4,11 +4,11 @@
### Requirements
- [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)
- [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)
### 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/saas-15.4/contributing/documentation.html#preview-your-changes)
3. See [this guide](https://www.odoo.com/documentation/master/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/saas-15.4/contributing/documentation.html).
[Introduction Guide](https://www.odoo.com/documentation/master/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
View File

@@ -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 = 'saas-15.4'
version = release = 'master'
# The minimal Sphinx version required to build the documentation.
needs_sphinx = '3.0.0'
@@ -51,10 +51,6 @@ 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
@@ -91,6 +87,7 @@ 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')
@@ -187,9 +184,8 @@ sphinx.transforms.i18n.docname_to_domain = (
# is populated. If a version is passed to `versions` but is not listed here, it will not be shown.
versions_names = {
'master': "Master",
'saas-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",
@@ -198,18 +194,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': 'DE',
'en': 'EN',
'es': 'ES',
'fr': 'FR',
'nl': 'NL',
'pt_BR': 'PT',
'uk': 'UA',
'zh_CN': 'ZH',
'de': 'Deutsch',
'en': 'English',
'es': 'Español',
'fr': 'Français',
'nl': 'Nederlands',
'pt_BR': 'Português (BR)',
'uk': 'українська',
'zh_CN': '简体中文',
}
# The directory in which files holding redirect rules used by the 'redirects' extension are listed.
redirects_dir = 'redirects/'
# The specifications of redirect rules used by the redirects extension.
redirects_file = 'redirects.txt'
sphinx_tabs_disable_tab_closing = True
sphinx_tabs_disable_css_loading = True
@@ -233,12 +229,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_permalinks = True
html_add_permalinks = '' # Sphinx < 3.5
html_permalinks = True # Sphinx >= 3.5
# 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 = []
html_css_files = ["css/js.css"]
# PHP lexer option to not require <?php
highlight_options = {

View File

@@ -272,80 +272,55 @@ Enterprise Edition:
* `Official download page <download_>`_
* `GitHub repository <enterprise-repository_>`_
.. _setup/install/source/git:
Git
~~~
The following requires `Git <git_>`_ to be installed on your machine and that you have basic
knowledge of Git commands. To clone a Git repository, you must choose between cloning with HTTPS or
SSH. If you do not know the difference between the two, the best option is most likely HTTPS. If you
are following the :doc:`Getting started </developer/howtos/rdtraining>` developer tutorial, or plan
on contributing to Odoo source code, choose SSH.
The following requires `git <https://git-scm.com/>`_ to be installed on your machine and that you
have basic knowledge of git commands.
.. 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.
Community Edition:
.. tabs::
.. group-tab:: Windows
.. tabs::
.. code-block:: doscon
.. 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
C:\> git clone https://github.com/odoo/odoo.git
.. group-tab:: Linux
.. tabs::
.. code-block:: console
.. 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
$ git clone https://github.com/odoo/odoo.git
.. group-tab:: Mac OS
.. tabs::
.. code-block:: console
.. tab:: Clone with HTTPS
$ git clone https://github.com/odoo/odoo.git
.. code-block:: console
Enterprise Edition: (see :ref:`setup/install/editions` to get access)
$ git clone https://github.com/odoo/odoo.git
$ git clone https://github.com/odoo/enterprise.git
.. tabs::
.. tab:: Clone with SSH
.. group-tab:: Windows
.. code-block:: console
.. code-block:: doscon
$ git clone git@github.com:odoo/odoo.git
$ git clone git@github.com:odoo/enterprise.git
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
.. note::
**The Enterprise git repository does not contain the full Odoo source code**. It is only a
@@ -354,8 +329,6 @@ on contributing to Odoo source code, choose SSH.
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
-------
@@ -478,11 +451,6 @@ 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:
@@ -677,8 +645,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 name of the
PostgreSQL database.
PostgreSQL login, `dbpassword` is the PostgreSQL password and `mydb` is the default database
to serve on `localhost:8069`.
.. group-tab:: Linux
@@ -687,8 +655,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 name
of the PostgreSQL database.
Where `CommunityPath` is the path of the Odoo Community installation and `mydb` is the default
database to serve on `localhost:8069`.
.. group-tab:: Mac OS
@@ -697,27 +665,11 @@ 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 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.
Where `CommunityPath` is the path of the Odoo Community installation and `mydb` is the default
database to serve on `localhost:8069`.
.. seealso::
:doc:`The exhaustive list of CLI arguments for odoo-bin </developer/cli>`.
- :doc:`The exhaustive list of arguments for odoo-bin </developer/misc/other/cmdline>`.
.. _setup/install/docker:

View File

@@ -7,7 +7,6 @@ Maintain
.. toctree::
maintain/domain_names
maintain/google_oauth
maintain/update
maintain/enterprise
maintain/hosting_changes

View File

@@ -1,192 +0,0 @@
========================================
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.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

View File

@@ -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 branch you want to migrate
- Which brand you want to migrate
- In which region you want to be hosted:
- Americas

View File

@@ -68,13 +68,14 @@ This matrix shows the support status of every version.
🏁 Future version, not released yet
.. |green| raw:: html
.. 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...
<span class="text-success" style="font-size: 32px; line-height: 0.5">●</span>
.. |green| image:: data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMzIuMTkgMjMyLjE5Ij48Y2lyY2xlIGN4PSIxMTYuMDkiIGN5PSIxMTYuMDkiIHI9IjExNi4wOSIgc3R5bGU9ImZpbGw6IzAwYTcwMCIvPjwvc3ZnPg==
:width: 15
.. |red| raw:: html
<span class="text-danger" style="font-size: 32px; line-height: 0.5">●</span>
.. |red| image:: data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMzIuMTkgMjMyLjE5Ij48Y2lyY2xlIGN4PSIxMTYuMDkiIGN5PSIxMTYuMDkiIHI9IjExNi4wOSIgc3R5bGU9ImZpbGw6I2QwMDAwMCIvPjwvc3ZnPg==
:width: 15
I run an older version of Odoo/OpenERP/TinyERP
==============================================

View File

@@ -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/cli>`.
:doc:`CLI documentation </developer/misc/other/cmdline>`.
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*":

View File

@@ -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/cli>`.
:doc:`the command line </developer/misc/other/cmdline>`.
In the case the changes in the commit prevent the server to restart,
or if the modules update fails,
@@ -279,21 +279,10 @@ 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
@@ -395,7 +384,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>`.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -1,132 +1,66 @@
=======
Odoo.sh
=======
.. _upgrade/odoo_sh/overview:
Test upgrade request
====================
Overview
========
Odoo.sh is integrated with the upgrade platform to make the upgrade process easier.
.. note::
The :guilabel:`Upgrade` tab is available in the branches view. It is only available for valid
projects with a valid production build.
.. image:: odoo_sh/odoo-sh-menu.png
:align: center
:alt: Click on the upgrade menu
The suggested upgrade steps on Odoo.sh are:
#. 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::
- :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
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.
.. important::
Your database is unavailable throughout the process.
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.
.. 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 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 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.
Test the upgraded database and make sure everything runs as it's supposed to.
.. 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.
Upgrade your production database
================================
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')
.. seealso::
- :ref:`upgrade/sla`

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -15,6 +15,7 @@ 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>`

View File

@@ -42,8 +42,5 @@ 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 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`.
If you do not specify an outstanding payments account or an outstanding receipts account for a
specific journal, Odoo uses the default outstanding accounts.

View File

@@ -11,4 +11,4 @@ Vendor bills
supplier_bills/purchase_receipts
supplier_bills/deferred_expenses
supplier_bills/assets
supplier_bills/invoice_digitization
supplier_bills/ocr

View File

@@ -1,78 +0,0 @@
=============================================================
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>`_.

View File

@@ -0,0 +1,56 @@
==============================================================
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>`_.

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -15,4 +15,3 @@ Customer invoices
customer_invoices/credit_notes
customer_invoices/epc_qr_code
customer_invoices/snailmail
customer_invoices/electronic_invoicing

View File

@@ -1,102 +0,0 @@
================================================================
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` (modules 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.

View File

@@ -145,18 +145,5 @@ 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`

View File

@@ -2,14 +2,14 @@
Adyen
=====
`Adyen <https://www.adyen.com/>`_ is a Dutch company that offers several online payment
`Adyen <https://www.adyen.com/>`_ is a Dutch-based company that offers several online payment
possibilities.
Configuration
=============
.. seealso::
:ref:`payment_acquirers/add_new`
- :ref:`payment_acquirers/add_new`
Credentials tab
---------------
@@ -27,10 +27,8 @@ 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 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.
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.
.. _adyen/api_and_client_keys:
@@ -41,13 +39,11 @@ 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:`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.
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.
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>`.
This is also the place where you'll :ref:`allow payments to be made from your website
<adyen/allowed_origins>`.
.. _adyen/hmac_key:
@@ -58,23 +54,19 @@ 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:`General --> Server configuration --> URL`, enter your server address
followed by `/payment/adyen/notification`.
There, in :menuselection:`Transport --> 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 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.
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.
You have to save the webhook to finalize its creation.
@@ -84,11 +76,10 @@ URLs
~~~~
To retrieve the URLs, log into your Adyen account, go to :menuselection:`Developers --> API URLs`.
Select one of the URLs listed next to :guilabel:`Classic Recurring API` as your
:guilabel:`Recurring API URL` and one listed next to :guilabel:`Checkout API` as your
:guilabel:`Checkout API URL`.
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**.
.. image:: adyen/adyen-api-urls.png
.. image:: adyen/adyen_api_urls.png
:align: center
:alt: Get the links for the different API.
@@ -101,10 +92,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:`Add allowed origins`, then add the URLs from
to navigate to your API user and go to :menuselection:`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.
@@ -135,4 +126,4 @@ Then, open your Adyen Merchant Account, go to :menuselection:`Account --> Settin
**revoke** it.
.. seealso::
:doc:`../payment_acquirers`
- :doc:`../payment_acquirers`

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -5,106 +5,84 @@ 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/>`_.
Settings in Ogone
=================
Credentials tab
---------------
Create an API user
------------------
Odoo needs your **API Credentials** to connect with your Ogone account, which comprise:
Log into your Ogone account and head to the :guilabel:`Configuration` tab.
- **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.
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.
You can copy your credentials from your Ogone account, and paste them in the related fields under
the **Credentials** tab.
To create an **API user**, go to :menuselection:`Configuration --> Users` and click on
:guilabel:`New User`. The following fields must be configured:
.. _ogone/api_user:
.. _ogone/ogone:
API User ID and 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 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`.
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.
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.
.. 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.
.. image:: ogone/ogone_new_user.png
:align: center
:alt: Get your password when you save the new user.
Set up Ogone for Odoo
---------------------
.. _ogone/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.
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.
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**.
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.
.. _ogone/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.
SHA Key OUT
~~~~~~~~~~~
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 youll 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>`.
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.
.. important::
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.
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`

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@@ -155,19 +155,15 @@ Odoo supports the following local payment methods:
- iDEAL
- Przelewy24 (P24)
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
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
payment methods in the **Supported Payment Icons** field. If the desired payment method is already
listed, you don't have anything to do.
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.
.. 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`

View File

@@ -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/api/iap>`.
</developer/misc/api/iap>`.

View File

@@ -1,7 +1,7 @@
:nosearch:
===============
Inventory & MRP
Inventory & Mrp
===============

View File

@@ -16,11 +16,9 @@ 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`.
@@ -49,9 +47,8 @@ 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
@@ -60,10 +57,6 @@ changes.
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`.

View File

@@ -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 `compatible with Odoo IoT Box <https://www.odoo.com/page/iot-hardware>`_, there
If your scale is `compatibale 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

View File

@@ -1,30 +1,21 @@
: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/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>`_
studio/concepts
studio/use_cases
studio/how_to

View File

@@ -1,249 +0,0 @@
===============================
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 records 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`.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

View File

@@ -0,0 +1,11 @@
:nosearch:
========
Concepts
========
.. toctree::
:titlesonly:
concepts/understanding_general
concepts/understanding_automated_actions

View File

@@ -0,0 +1,77 @@
===============================
Understanding Automated Actions
===============================
| Automated actions are used to trigger actions. They are based on conditions and happen on top of
Odoos 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`

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -0,0 +1,95 @@
==============================
Understanding General Concepts
==============================
| Odoo Studio is a toolbox that allows you to add models or adapt functionalities on top of Odoos
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 leads 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>`_

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@@ -1,493 +0,0 @@
==================
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.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,12 @@
:nosearch:
======
How To
======
.. toctree::
:titlesonly:
how_to/rainbow_man
how_to/reports
how_to/export_import

View File

@@ -0,0 +1,28 @@
=========================
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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,23 @@
===========================
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

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -0,0 +1,72 @@
===================
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. Odoos reports also use Bootstraps 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 reports 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -1,227 +0,0 @@
=========================
Models, modules, and apps
=========================
Models determine the logical structure of a database and how data is stored, organized, and
manipulated. In other words, a model is a table of information that can be linked with other tables.
A model usually represents a business concept, such as a *sales order*, *contact*, or *product*.
Modules and apps contain various elements, such as models, views, data files, web controllers, and
static web data.
.. note::
All apps are modules. Larger, standalone modules are typically referred to as apps, whereas other
modules usually serve as add-ons to said apps.
.. _studio/models-modules-apps/suggested-features:
Suggested features
==================
When you create a new model or app with Studio, you can choose to add up to 14 features to speed
up the creation process. These features bundle fields, default settings, and views that are usually
used together to provide some standard functionality. Most of these features can be added later on,
but adding them from the start makes the model creation process much easier. Furthermore, these
features interact together in some cases to increase their usefulness.
.. example::
Creating a model with the :ref:`studio/models-modules-apps/suggested-features/picture` and
:ref:`studio/models-modules-apps/suggested-features/pipeline-stages` features enabled adds the
image in the card layout of the :ref:`Kanban view <studio/views/multiple-records/kanban>`.
.. image:: models_modules_apps/picture-pipeline-kanban.png
:align: center
:alt: Combination of the Picture and Pipeline stages features on the Kanban view
.. _studio/models-modules-apps/suggested-features/contact-details:
Contact details
---------------
Selecting :guilabel:`Contact details` adds to the :ref:`Form view <studio/views/general/form>` a
:ref:`Many2One field <studio/fields/relational-fields/many2one>` linked to the *Contact* model and
two of its :ref:`Related Fields <studio/fields/relational-fields/related-field>`: :guilabel:`Phone`
and :guilabel:`Email`. The :guilabel:`Contact` field is also added to the :ref:`List view
<studio/views/multiple-records/list>`, and the :ref:`Map view <studio/views/multiple-records/map>`
is activated.
.. example::
.. image:: models_modules_apps/contact.png
:align: center
:alt: Contact details feature on the Form view
.. _studio/models-modules-apps/suggested-features/user-assignment:
User assignment
---------------
Selecting :guilabel:`User assignment` adds to the :ref:`Form view <studio/views/general/form>` a
:ref:`Many2One field <studio/fields/relational-fields/many2one>` linked to the *Contact* model, with
the following :guilabel:`Domain`: `Share User is not set` to only allow the selection of *Internal
Users*. In addition, the :guilabel:`many2one_avatar_user` widget is used to display the user's
avatar. The :guilabel:`Responsible` field is also added to the :ref:`List view
<studio/views/multiple-records/list>`.
.. example::
.. image:: models_modules_apps/user-assignment.png
:align: center
:alt: User assignment feature on the Form view
.. _studio/models-modules-apps/suggested-features/date-calendar:
Date & Calendar
---------------
Selecting :guilabel:`Date & Calendar` adds to the :ref:`Form view <studio/views/general/form>` a
:ref:`Date field <studio/fields/simple-fields/date>` and activates the :ref:`Calendar view
<studio/views/timeline/calendar>`.
.. _studio/models-modules-apps/suggested-features/date-range-gantt:
Date range & Gantt
------------------
Selecting :guilabel:`Date range & Gantt` adds to the :ref:`Form view <studio/views/general/form>`
two :ref:`Date fields <studio/fields/simple-fields/date>` next to each other: one to set a start
date, the other to set an end date, using the :guilabel:`daterange` widget, and activates the
:ref:`Gantt view <studio/views/timeline/gantt>`.
.. _studio/models-modules-apps/suggested-features/pipeline-stages:
Pipeline stages
---------------
Selecting :guilabel:`Pipeline stages` activates the :ref:`Kanban view
<studio/views/multiple-records/kanban>`, adds several fields such as :ref:`Priority
<studio/fields/simple-fields/priority>` and :guilabel:`Kanban State`, and three stages:
:guilabel:`New`, :guilabel:`In Progress`, and :guilabel:`Done`. The :guilabel:`Pipeline status bar`
and the :guilabel:`Kanban State` field are added to the :ref:`Form view
<studio/views/general/form>`. The :guilabel:`Color` field is added to the :ref:`List view
<studio/views/multiple-records/list>`.
.. note::
The :guilabel:`Pipeline stages` feature can be added at a later stage.
.. _studio/models-modules-apps/suggested-features/tags:
Tags
----
Selecting :guilabel:`Tags` adds to the :ref:`studio/views/general/form` and
:ref:`studio/views/multiple-records/list` views a :ref:`Tags field
<studio/fields/relational-fields/tags>`, creating a *Tag* model with preconfigured access rights in
the process.
.. _studio/models-modules-apps/suggested-features/picture:
Picture
-------
Selecting :guilabel:`Picture` adds to the top-right of the :ref:`Form view
<studio/views/general/form>` an :ref:`Image field <studio/fields/simple-fields/image>`.
.. note::
The :guilabel:`Picture` feature can be added at a later stage.
.. _studio/models-modules-apps/suggested-features/lines:
Lines
-----
Selecting :guilabel:`Lines`: adds to the :ref:`Form view <studio/views/general/form>` a :ref:`Lines
field <studio/fields/relational-fields/lines>` inside a :guilabel:`Tab` component.
.. _studio/models-modules-apps/suggested-features/notes:
Notes
-----
Selecting :guilabel:`Notes` adds to the :ref:`Form view <studio/views/general/form>` an :ref:`Html
field <studio/fields/simple-fields/html>` using the full width of the form.
.. _studio/models-modules-apps/suggested-features/monetary-value:
Monetary value
--------------
Selecting :guilabel:`Monetary value` adds to the :ref:`studio/views/general/form` and
:ref:`studio/views/multiple-records/list` views a :ref:`Monetary field
<studio/fields/simple-fields/monetary>`. The :ref:`studio/views/reporting/graph` and
:ref:`studio/views/reporting/pivot` views are also activated.
.. note::
A *Currency* field is added and hidden from the view.
.. _studio/models-modules-apps/suggested-features/company:
Company
-------
Selecting :guilabel:`Company` adds to the :ref:`studio/views/general/form` and
:ref:`studio/views/multiple-records/list` views a :ref:`Many2One field
<studio/fields/relational-fields/many2one>` linked to the *Company* model.
.. note::
This is only useful if you work in a multi-company environment.
.. _studio/models-modules-apps/suggested-features/custom-sorting:
Custom Sorting
--------------
Selecting :guilabel:`Custom Sorting` adds to the :ref:`List view
<studio/views/multiple-records/list>` a drag handle icon to manually reorder records.
.. example::
.. image:: views/list-drag-handle.png
:align: center
:alt: Custom Sorting feature on the List view
.. _studio/models-modules-apps/suggested-features/chatter:
Chatter
-------
Selecting :guilabel:`Chatter` adds to the :ref:`Form view <studio/views/general/form>` Chatter
functionalities (sending messages, logging notes, and scheduling activities).
.. note::
The :guilabel:`Chatter` feature can be added at a later stage.
.. example::
.. image:: models_modules_apps/chatter.png
:align: center
:alt: Chatter feature on the Form view
.. _studio/models-modules-apps/suggested-features/archiving:
Archiving
---------
Selecting :guilabel:`Archiving` adds to the :ref:`studio/views/general/form` and
:ref:`studio/views/multiple-records/list` views the :guilabel:`Archive` action and hides archived
records from searches and views by default.
.. _studio/export-import:
Export and import customizations
================================
When you do any customization with Studio, a new module named :guilabel:`Studio customizations` is
added to your database.
To export these customizations, go to :menuselection:`Main dashboard --> Studio --> Customizations
--> Export` to download a ZIP file containing all customizations.
To import and install these customizations in another database, connect to the destination database
and go to :menuselection:`Main dashboard --> Studio --> Customizations --> Import`, then upload
the exported ZIP file before clicking on the :guilabel:`Import` button.
.. warning::
Before importing, make sure the destination database contains the same apps and modules as the
source database. Studio does not add the underlying modules as dependencies of the exported
module.

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