[MOV] documentation structure reorganization

This commit aims to improve the documentation's navigability by
redefining some categories' purposes and titles.

There is a redirection rule for each documentation page moved.
This ensures that users won't have a 404 error message.

task-3217827

closes odoo/documentation#8063

Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
This commit is contained in:
Jonathan Castillo (jcs)
2024-03-04 12:02:08 +01:00
parent af91b7c2b6
commit bf7fa31503
562 changed files with 644 additions and 643 deletions
@@ -45,8 +45,7 @@ Upgrade apps and modules
========================
On some occasions, new improvements or app features are added to :doc:`supported versions of Odoo
</administration/maintain/supported_versions>`. To be able to use them, you must **upgrade** your
app.
</administration/supported_versions>`. To be able to use them, you must **upgrade** your app.
Go to :menuselection:`Apps`, click on the *dropdown menu* of the app you want to upgrade, then on
*Upgrade*.
-13
View File
@@ -1,13 +0,0 @@
:nosearch:
==============
Authentication
==============
.. toctree::
:titlesonly:
auth/google
auth/azure
auth/ldap
auth/2fa
@@ -1,3 +1,5 @@
:show-content:
=========
Companies
=========
@@ -52,7 +54,7 @@ company only. To do so, on their forms, choose between:
Employees' access
=================
Once companies are created, manage your employees' :doc:`Access Rights <access_rights>`
Once companies are created, manage your employees' :doc:`Access Rights <users/access_rights>`
for *Multi Companies*.
.. image:: companies/access_rights_multi_companies.png
@@ -86,12 +88,12 @@ Inter-Company Transactions
First, make sure each one of your companies is properly set in relation to:
- :doc:`Chart of Accounts <../../finance/accounting/get_started/chart_of_accounts>`
- :doc:`Taxes <../../finance/accounting/taxes>`
- :doc:`Fiscal Positions <../../finance/accounting/taxes/fiscal_positions>`
- :doc:`Journals <../../finance/accounting/bank>`
- :doc:`Fiscal Localizations <../../finance/fiscal_localizations>`
- :doc:`Pricelists <../../sales/sales/products_prices/prices/pricing>`
- :doc:`Chart of Accounts <../finance/accounting/get_started/chart_of_accounts>`
- :doc:`Taxes <../finance/accounting/taxes>`
- :doc:`Fiscal Positions <../finance/accounting/taxes/fiscal_positions>`
- :doc:`Journals <../finance/accounting/bank>`
- :doc:`Fiscal Localizations <../finance/fiscal_localizations>`
- :doc:`Pricelists <../sales/sales/products_prices/prices/pricing>`
Now, activate the *Inter-Company Transactions* option under *Settings*. With the respective company
*activated* and *selected*, choose if you would like operations between companies to be synchronized
@@ -131,4 +133,10 @@ at an invoice/bills level or at a sales/purchase orders level.
.. seealso::
- :doc:`Multi-company Guidelines </developer/howtos/company>`
- :doc:`../../finance/accounting/get_started/multi_currency`
- :doc:`../finance/accounting/get_started/multi_currency`
.. toctree::
:titlesonly:
companies/digest_emails
companies/email_template

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

@@ -255,7 +255,7 @@ parameter used to generate all the links.
This is a known limitation.
For more information about how to configure domains, check out the :doc:`domain name documentation
</administration/maintain/domain_names>`.
</applications/websites/website/configuration/domain_names>`.
Updating translations within email templates
--------------------------------------------

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 68 KiB

@@ -1,7 +1,7 @@
:nosearch:
===================
Email Communication
Email communication
===================
.. toctree::
@@ -9,5 +9,7 @@ Email Communication
email_communication/email_servers
email_communication/email_domain
email_communication/email_template
email_communication/azure_oauth
email_communication/google_oauth
email_communication/mailjet_api
email_communication/faq
@@ -0,0 +1,293 @@
=======================================================
Connect Microsoft Outlook 365 to Odoo using Azure OAuth
=======================================================
Odoo is compatible with Microsoft's Azure OAuth for Microsoft 365. In order to send and receive
secure emails from a custom domain, all that is required is to configure a few settings on the
Azure platform and on the back end of the Odoo database. This configuration works with either a
personal email address or an address created by a custom domain.
.. seealso::
`Microsoft Learn: Register an application with the Microsoft identity platform
<https://learn.microsoft.com/azure/active-directory/develop/quickstart-register-app>`_
.. seealso::
- :doc:`/applications/general/users/azure`
- :doc:`/applications/productivity/calendar/outlook`
Setup in Microsoft Azure Portal
===============================
Create a new application
------------------------
To get started, go to `Microsoft's Azure Portal <https://portal.azure.com/>`_. Log in with the
:guilabel:`Microsoft Outlook Office 365` account if there is one, otherwise log in with the
personal :guilabel:`Microsoft account`. A user with administrative access to the Azure Settings
will need to connect and perform the following configuration. Next, navigate to the section
labeled :guilabel:`Manage Microsoft Entra ID` (formally *Azure Active Directory*).
Now, click on :guilabel:`Add (+)`, located in the top menu, and then select :guilabel:`App
registration`. On the :guilabel:`Register an application` screen, rename the :guilabel:`Name` to
`Odoo` or something recognizable. Under the :guilabel:`Supported account types` section select
:guilabel:`Accounts in any organizational directory (Any Microsoft Entra ID directory - Multitenant)
and personal Microsoft accounts (e.g. Skype, Xbox)`.
Under the :guilabel:`Redirect URL` section, select :guilabel:`Web` as the platform, and then input
`https://<odoo base url>/microsoft_outlook/confirm` in the :guilabel:`URL` field. The Odoo base URL
is the canonical domain at which your Odoo instance can be reached in the URL field.
.. example::
*mydatabase.odoo.com*, where *mydatabase* is the actual prefix of the database's subdomain,
assuming it's hosted on Odoo.com
After the URL has been added to the field, :guilabel:`Register` the application so it is created.
API permissions
---------------
The :guilabel:`API permissions` should be set next. Odoo will need specific API permissions to be
able to read (IMAP) and send (SMTP) emails in the Microsoft 365 setup. First, click the
:guilabel:`API permissions` link, located in the left menu bar. Next, click on the :guilabel:`(+)
Add a Permission` button and select :guilabel:`Microsoft Graph` under :guilabel:`Commonly Used
Microsoft APIs`. After, select the :guilabel:`Delegated Permissions` option.
In the search bar, search for the following :guilabel:`Delegated permissions` and click
:guilabel:`Add permissions` for each one:
- :guilabel:`SMTP.Send`
- :guilabel:`IMAP.AccessAsUser.All`
.. note::
The :guilabel:`User.Read` permission will be added by default.
.. image:: azure_oauth/permissions.png
:align: center
:alt: API permissions needed for Odoo integration are listed under the Microsoft Graph.
Assign users and groups
=======================
After adding the API permissions, navigate back to the :guilabel:`Overview` of the
:guilabel:`Application` in the top of the left sidebar menu.
Now, add users to this application. Under the :guilabel:`Essentials` overview table, click on the
link labeled :guilabel:`Managed Application in Local Directory`, or the last option on the bottom
right-hand side of the table.
.. image:: azure_oauth/managed-application.png
:align: center
:alt: Add users/groups by clicking the Managed application in local directory link for the
created application.
In the left sidebar menu, select :guilabel:`Users and Groups`. Next, click on :guilabel:`(+) Add
User/Group`. Depending on the account, either a :guilabel:`Group` and a :guilabel:`User` can be
added, or only :guilabel:`Users`. Personal accounts will only allow for :guilabel:`Users` to be
added.
Under :guilabel:`Users` or :guilabel:`Groups`, click on :guilabel:`None Selected` and add the users
or group of users that will be sending emails from the :guilabel:`Microsoft account` in Odoo.
:guilabel:`Add` the users/groups, click :guilabel:`Select`, and then :guilabel:`Assign` them to the
application.
Create credentials
------------------
Now that the Microsoft Azure app is set up, credentials need to be created for the Odoo setup.
These include the :guilabel:`Client ID` and :guilabel:`Client Secret`. To start, the
:guilabel:`Client ID` can be copied from the :guilabel:`Overview` page of the app. The
:guilabel:`Client ID` or :guilabel:`Application ID` is located under the :guilabel:`Display Name`
in the :guilabel:`Essentials` overview of the app.
.. image:: azure_oauth/application-id.png
:align: center
:alt: Application/Client ID located in the Overview of the app.
Next, the :guilabel:`Client Secret Value` needs to be retrieved. To get this value, click on
:guilabel:`Certificates & Secrets` in the left sidebar menu. Then, a :guilabel:`Client Secret`
needs to be produced. In order to do this, click on the :guilabel:`(+) New Client Secret` button.
A window on the right will populate with a button labeled :guilabel:`Add a client secret`. Under
:guilabel:`Description`, type in `Odoo Fetchmail` or something recognizable, and then set the
:guilabel:`expiration date`.
.. important::
A new :guilabel:`Client Secret` will need to be produced and configured if the first one
expires. In this event, there could be an interruption of service, so the expiration date should
be noted and set to the furthest possible date.
Next, click on :guilabel:`Add` when these two values are entered. A :guilabel:`Client Secret Value`
and :guilabel:`Secret ID` will be created. It is important to copy the :guilabel:`Value` or
:guilabel:`Client Secret Value` into a notepad as it will become encrypted after leaving this page.
The :guilabel:`Secret ID` is not needed.
.. image:: azure_oauth/secretvalue.png
:align: center
:alt: Client Secret Value or Value in the app's credentials.
After these steps, the following items should be ready to be set up in Odoo:
- A client ID (:guilabel:`Client ID` or :guilabel:`Application ID`)
- A client secret (:guilabel:`Value` or :guilabel:`Client Secret Value`)
This completes the setup on the :guilabel:`Microsoft Azure Portal` side.
Setup in Odoo
=============
Enter Microsoft Outlook credentials
-----------------------------------
First, open the Odoo database and navigate to the :guilabel:`Apps` module. Then, remove the
:guilabel:`Apps` filter from the search bar and type in `Outlook`. After that, install the module
called :guilabel:`Microsoft Outlook`.
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:`Outlook Credentials`.
:guilabel:`Save` the progress.
Then, copy and paste the :guilabel:`Client ID` (Application ID) and :guilabel:`Client Secret
(Client Secret Value)` into the respective fields and :guilabel:`Save` the settings.
.. image:: azure_oauth/outlookcreds.png
:align: center
:alt: Outlook Credentials in Odoo General Settings.
Configure outgoing email server
-------------------------------
On the :guilabel:`General Settings` page, under the :guilabel:`Custom Email Servers` setting,
click the :guilabel:`Outgoing Email Servers` link to configure the Microsoft account.
Then, create a new email server and check the box for :guilabel:`Outlook`. Next, fill in the
:guilabel:`Name` (it can be anything) and the Microsoft Outlook email :guilabel:`Username`.
If the :guilabel:`From Filter` field is empty, enter either a :ref:`domain or email address
<email_communication/default>`.
Then, click on :guilabel:`Connect your Outlook account`.
A new window from Microsoft opens to complete the :guilabel:`authorization process`. Select the
appropriate email address that is being configured in Odoo.
.. image:: azure_oauth/verify-outlook.png
:align: center
:alt: Permission page to grant access between newly created app and Odoo.
Then, allow Odoo to access the Microsoft account by clicking on :guilabel:`Yes`. After this, the
page will navigate back to the newly configured :guilabel:`Outgoing Mail Server` in Odoo. The
configuration automatically loads the :guilabel:`token` in Odoo, and a tag stating
:guilabel:`Outlook Token Valid` appears in green.
.. image:: azure_oauth/outlook-token.png
:align: center
:alt: Valid Outlook Token indicator.
Finally, click :guilabel:`Test Connection`. A confirmation message should appear. The Odoo database
can now send safe, secure emails through Microsoft Outlook using OAuth authentication.
.. _azure_oauth/notifications:
Configuration with a single outgoing mail server
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Configuring a single outgoing server is the simplest configuration available for Microsoft Azure
and it doesn't require extensive access rights for the users in the database.
A generic email address would be used to send emails for all users within the database. For example
it could be structured with a `notifications` alias (`notifications@example.com`) or `contact` alias
(`contact@example.com`). This address must be set as the :guilabel:`FROM Filtering` on the server.
This address must also match the `{mail.default.from}@{mail.catchall.domain}` key combination in the
system parameters.
.. seealso::
For more information on the from filter visit: :ref:`email_communication/default`.
.. note::
The :guilabel:`System Parameters` can be accessed by activating :ref:`developer-mode` in the
:menuselection:`Settings --> Technical --> Parameters --> System Parameters` menu.
When using this configuration, every email that is sent from the database will use the address of
the configured `notification` mailbox. However it should be noted that the name of the sender will
appear but their email address will change:
.. image:: azure_oauth/from-name-remain.png
:align: center
:alt: Name from real sender with static email.
.. example::
Single outgoing mail server configuration:
- Outgoing mail server **username** (login) = `notifications@example.com`
- Outgoing mail server :guilabel:`FROM Filtering` = `notifications@example.com`
- `mail.catchall.domain` in system parameters = `example.com`
- `mail.default.from` in system parameters = `notifications`
User-specific (multiple user) configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In addition to a generic email server, individual email servers can be set up for users in a
database. These email addresses must be set as the :guilabel:`FROM Filtering` on each individual
server for this configuration to work.
This configuration is the more difficult of the two Microsoft Azure configurations, in that it
requires all users configured with email servers to have access rights to settings in order to
establish a connection to the email server.
Setup
*****
Each user should have a separate email server set up. The :guilabel:`FROM Filtering` should be set
so that only the user's email is sent from that server. In other words, only a user with an email
address that matches the set :guilabel:`FROM Filtering` is able to use this server.
.. seealso::
For more information on the from filter visit: :ref:`email_communication/default`.
A :ref:`fallback server <azure_oauth/notifications>` must be setup to allow for the sending of
:guilabel:`notifications`. The :guilabel:`FROM Filtering` for this server should have the value of
the `{mail.default.from}@{mail.catchall.domain}`.
.. note::
The :guilabel:`System Parameters` can be accessed by activating :ref:`developer-mode` in the
:menuselection:`Settings --> Technical --> Parameters --> System Parameters` menu.
.. important::
The configuration for this transactional email server can work alongside an outgoing mass-mailing
email server. The :guilabel:`FROM Filtering` for the mass-mailing email server can remain empty,
but it's require to be added in the settings of the *Email Marketing* application.
.. seealso::
For more information on setting the mass-mailing email server visit
:ref:`email_communication/mass_mails`.
.. example::
Multiple user outgoing mail server configuration:
- User #1 mailbox
- Outgoing mail server #1 **username** (login) = `john@example.com`
- Outgoing mail server #1 :guilabel:`FROM Filtering` = `john@example.com`
- User #2 mailbox
- Outgoing mail server #2 **username** (login) = `jane@example.com`
- Outgoing mail server #2 :guilabel:`FROM Filtering` = `jane@example.com`
- Notifications mailbox
- Outgoing mail server #3 **username** (login) = `notifications@example.com`
- Outgoing mail server #3 :guilabel:`FROM Filtering` = `notifications@example.com`
- System Parameters
- `mail.catchall.domain` in system parameters = `example.com`
- `mail.default.from` in system parameters = `notifications`
Configure incoming email server
-------------------------------
The incoming account should be configured in a similar way to the outgoing email account. Navigate
to the :guilabel:`Incoming Mail Servers` in the :guilabel:`Technical Menu` and :guilabel:`Create` a
new configuration. Check or Select the button next to :guilabel:`Outlook Oauth Authentication` and
enter the :guilabel:`Microsoft Outlook username`. Click on :guilabel:`Connect your Outlook
account`. Odoo will state: :guilabel:`Outlook Token Valid` Now :guilabel:`Test and Confirm` the
account. The account should be ready to receive email to the Odoo database.
.. seealso::
:doc:`email_servers`
Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

@@ -65,8 +65,8 @@ record in Odoo. Reference the SMTP data of the external email server. Once all t
been filled out, click :guilabel:`Test Connection`.
.. seealso::
- :doc:`/administration/maintain/google_oauth`
- :doc:`/administration/maintain/azure_oauth`
- :doc:`google_oauth`
- :doc:`azure_oauth`
.. note::
Ensuring the outgoing domain has :abbr:`SPF (Sender Policy Framework)`, :abbr:`DKIM (DomainKeys
@@ -178,7 +178,7 @@ Set up different dedicated servers for transactional and mass emails
In Odoo a separate email server can be used for transactional emails and mass
mailings. Example: Use Postmark or SendinBlue for transactional emails, and Amazon SES, Mailgun,
Sendgrid or :doc:`Mailjet </administration/maintain/mailjet_api>` for mass mailings.
Sendgrid or :doc:`Mailjet <mailjet_api>` for mass mailings.
.. important::
A default outgoing email server is already configured. Do not create an alternative one unless a
@@ -0,0 +1,219 @@
========================================
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.
.. seealso::
- :doc:`/applications/general/users/google`
- :doc:`/applications/productivity/calendar/google`
Setup in Google
===============
Create a new project
--------------------
To get started, go to the `Google API Console <https://console.developers.google.com>`_. 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 :guilabel:`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 right under the :guilabel:`Select a project` drop-down
menu.
On the :menuselection:`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
:guilabel:`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.
OAuth consent screen
--------------------
If the page doesn't redirect to the :menuselection:`User Type` options, click on :guilabel:`OAuth
consent screen` in the left menu.
Under :guilabel:`User Type` options, select the appropriate :guilabel:`User Type`, and then click on
:guilabel:`Create` again, which will finally navigate to the :menuselection:`Edit app registration`
page.
.. warning::
*Personal* Gmail Accounts are only allowed to be **External** User Type, which means Google may
require an approval, or for *Scopes* to be added on. However, using a *Google WorkSpace* account
allows for **Internal** User Type to be used.
Note, as well, that while the API connection is in the *External* testing mode, then no approval is
necessary from Google. User limits in this testing mode is set to 100 users.
Edit app registration
---------------------
Next we will configure the app registration of the project.
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 :menuselection:`Scopes` page
by scrolling to the bottom and clicking on :guilabel:`Save and Continue`.
If continuing in testing mode (External), add the email addresses 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 app registration appears.
Finally, scroll to the bottom and click on :guilabel:`Back to Dashboard` to finish setting up the
project.
Create Credentials
------------------
Now that the project is set up, credentials should be created, which includes the *Client ID* and
*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:`Name` 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 the 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` or :guilabel:`External Email
Servers` is checked. This populates a new option for :guilabel:`Gmail Credentials` or :guilabel:`Use
a Gmail Sever`. Then, copy and paste the respective values into the :guilabel:`Client ID` and
:guilabel:`Client Secret` fields and :guilabel:`Save` the settings.
Configure outgoing email server
-------------------------------
To configure the external Gmail account, return to the top of the :guilabel:`Custom Email Servers`
setting and then click the :guilabel:`Outgoing Email Servers` link.
.. image:: google_oauth/outgoing-servers.png
:align: center
:alt: Configure Outgoing Email Servers in Odoo.
Then, click on :guilabel:`New` or :guilabel:`Create` to create a new email server, and fill in the
:guilabel:`Name`, :guilabel:`Description`, and the email :guilabel:`Username` (if required).
Next, click on :guilabel:`Gmail OAuth Authentication` or :guilabel:`Gmail` (under the
:guilabel:`Authenticate with` or :guilabel:`Connection` section). Finally, click on
:guilabel:`Connect your Gmail Account`.
A new window labeled :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, then an extra step pops up, so 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, :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
:guilabel:`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 *Google 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 :menuselection:`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 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, being sure to replace *yourdbname*
in the URL with the Odoo database name.
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

@@ -0,0 +1,217 @@
===========
Mailjet API
===========
Odoo is compatible with Mailjet's :abbr:`API (Application Programming Interface)` for mass mailing.
Set up a dedicated mass mailing server through Mailjet by configuring settings in the Mailjet
account and the Odoo database. In some circumstances, settings need to be configured on the custom
domain's :abbr:`DNS (Domain Name System)` settings as well.
Set up in Mailjet
=================
Create API credentials
----------------------
To get started, sign in to the `Mailjet Account Information <https://app.mailjet.com/account>`_
page. Next, navigate to the :guilabel:`Senders & Domains` section and click on :guilabel:`SMTP and
SEND API Settings`.
.. image:: mailjet_api/api-settings.png
:align: center
:alt: SMTP and Send API Settings link in the Senders & Domains section of Mailjet.
Then, copy the :abbr:`SMTP (Simple Mail Transfer Protocol)` configuration settings onto a notepad.
They can be found under the :guilabel:`Configuration (SMTP only)` section. The :abbr:`SMTP (Simple
Mail Transfer Protocol)` configuration settings include the server address, the security option
needed (Use :abbr:`SSL (Secure Sockets Layer)`/:abbr:`TLS (Transport Layer Security)`), and the
port number. The settings are needed to configure Mailjet in Odoo, which is covered in the
:ref:`last section <maintain/mailjet-api/odoo-setup>`.
.. seealso::
`Mailjet: How can I configure my SMTP parameters?
<https://documentation.mailjet.com/hc/articles/360043229473>`_
.. important::
Odoo blocks `port 25` on Odoo Online and Odoo.sh databases. :ref:`See reference here
<email_servers/restriction>`.
.. image:: mailjet_api/smtp-config.png
:align: center
:alt: SMTP configuration from Mailjet.
Next, click on the button labeled :guilabel:`Retrieve your API credentials` to retrieve the Mailjet
API credentials.
Then, click on the eye icon to reveal the :guilabel:`API key`. Copy this key to a notepad, as this
serves as the :guilabel:`Username` in the Odoo configuration. Next, click on the
:guilabel:`Generate Secret Key` button to generate the :guilabel:`Secret Key`. Copy this key to a
notepad, as this serves as the :guilabel:`Password` in the Odoo configuration.
Add verified sender address(es)
-------------------------------
The next step is to add a sender address or a domain to the Mailjet account settings so that the
email address or domain is approved to send emails using Mailjet's servers. First, navigate to the
`Mailjet Account Information <https://app.mailjet.com/account>`_ page. Next, click on the
:guilabel:`Add a Sender Domain or Address` link under the :guilabel:`Senders & Domains` section.
.. image:: mailjet_api/add-domain-email.png
:align: center
:alt: Add a sender domain or address in the Mailjet interface.
Determine if a sender's email address or the entire domain needs to be added to the Mailjet
settings. It may be easier to configure the domain as a whole if :abbr:`DNS (Domain Name System)`
access is available. Jump to the :ref:`Add a domain <maintain/mailjet-api/add-domain>` section for
steps on adding the domain.
.. note::
Either all email addresses of the Odoo database users who are sending emails using Mailjet's
servers need to be configured or the domain(s) of the users' email addresses can be configured.
By default, the email address originally set up in the Mailjet account is added as a trusted
sender. To add another email address, click on the button labeled :guilabel:`Add a sender address`.
Then, add the email address that is configured to send from the custom domain.
At minimum the following email addresses should be set up in the provider and verified in Mailjet:
- notifications\@yourdomain.com
- bounce\@yourdomain.com
- catchall\@yourdomain.com
.. note::
Replace `yourdomain` with the custom domain for the Odoo database. If there isn't one, then use
the :guilabel:`mail.catchall.domain` system parameter.
After that, fill out the :guilabel:`Email Information` form, making sure to select the appropriate
email type: transactional email or mass emails. After completing the form, an activation email is
sent to the email address and the trusted sender can be activated.
It is recommended to set up the :abbr:`SPF (Sender Policy Framework)`/:abbr:`DKIM (DomainKeys
Identified Mail)`/:abbr:`DMARC (Domain-based Message Authentication, Reporting, and
Conformance)` settings on the domain of the sender.
.. seealso::
`Mailjet's SPF/DKIM/DMARC documentation <https://documentation.mailjet.com/hc/articles/
360042412734-Authenticating-Domains-with-SPF-DKIM>`_
.. important::
If the database is not using a custom domain, then in order to verify the sender's address, a
temporary alias (of the three email addresses mentioned above) should be set up in Odoo CRM to
create a lead. Then, the database is able to receive the verification email and verify the
accounts.
.. _maintain/mailjet-api/add-domain:
Add a domain
------------
By adding an entire domain to the Mailjet account, all the sender addresses related to that domain
are automatically validated for sending emails using Mailjet servers. First, navigate to the
`Mailjet Account Information <https://app.mailjet.com/account>`_ page. Next, click on
:guilabel:`Add a Sender Domain or Address` link under the :guilabel:`Senders & Domains` section.
Then, click on :guilabel:`Add domain` to add the custom domain.
.. note::
The domain needs to be added to the Mailjet account and then validated through the :abbr:`DNS
(Domain Name System)`.
After that, fill out the :guilabel:`Add a new Domain` page on Mailjet and click
:guilabel:`Continue`.
After adding the domain, a validation page will populate. Unless the Odoo database is on-premise
(in which case, choose :guilabel:`Option 1`), choose :guilabel:`Option 2: Create a DNS Record`.
Copy the TXT record information to a notepad and then navigate to the domain's :abbr:`DNS (Domain
Name System)` provider to complete validation.
.. image:: mailjet_api/host-value-dns.png
:align: center
:alt: The TXT record information to input on the domain's DNS.
Setup in the domain's DNS
~~~~~~~~~~~~~~~~~~~~~~~~~
After getting the TXT record information from the Mailjet account, add a TXT record to the domain's
:abbr:`DNS (Domain Name System)`. This process varies depending on the :abbr:`DNS (Domain Name
System)` provider. Consult the provider for specific configuration processes. The TXT record
information consists of the :guilabel:`Host` and :guilabel:`Value`. Paste these into
the corresponding fields in the TXT record.
Return to Mailjet account information
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
After adding the TXT record to the domain's :abbr:`DNS (Domain Name System)`, navigate back to the
Mailjet account. Then, navigate to :menuselection:`Account Information --> Add a Sender Domain or
Address`, click the gear icon next to :guilabel:`Domain`, and select :guilabel:`Validate`.
This action can also be done by going to the `Sender domains & addresses <https://app.mailjet.com/
account/sender>`_ page on the Mailjet account information and clicking on :guilabel:`Manage`.
Next, click :guilabel:`Check Now` to validate the TXT record that was added on the domain. A
success screen will appear if the domain is configured correctly.
.. image:: mailjet_api/check-dns.png
:align: center
:alt: Check DNS record in Mailjet.
After successfully setting up the domain, there is an option to :guilabel:`Authenticate this domain
(SPF/DKIM)`. This button populates :abbr:`SPF (Sender Policy Framework)` & :abbr:`DKIM (DomainKeys
Identified Mail) records to input into the :abbr:`DNS (Domain Name System)` provider.
.. seealso::
`Mailjet's SPF/DKIM/DMARC documentation <https://documentation.mailjet.com/hc/articles/
360042412734-Authenticating-Domains-with-SPF-DKIM>`_
.. image:: mailjet_api/authenticate.png
:align: center
:alt: Authenticate the domain with SPF/DKIM records in Mailjet.
.. _maintain/mailjet-api/odoo-setup:
Set up in Odoo
==============
To complete the setup, navigate to the Odoo database and go to the :guilabel:`Settings`. With
:ref:`developer-mode` turned on, go to the :menuselection:`Technical Menu --> Email --> Outgoing
Mail Servers`. Then, create a new outgoing server configuration by clicking on the
:guilabel:`Create` button.
Next, input the `SMTP server` (in-v3.mailjet.com), `port number` (587 or 465), and `Security
(SSL/TLS)` that was copied earlier from the Mailjet account. They can also be found `here
<https://app.mailjet.com/account/setup>`_. It is recommended to use :abbr:`SSL (Secure Sockets
Layer)`/:abbr:`TLS (Transport Layer Security)` even though Mailjet may not require it.
For the :guilabel:`Username`, input the :guilabel:`API KEY`. For the :guilabel:`Password`, input
the :guilabel:`SECRET KEY` that was copied from the Mailjet account to the notepad earlier. These
settings can be found on :menuselection:`Mailjet --> Account Settings --> SMTP and SEND API
Settings`.
Then, if the Mailjet server is used for mass emailing, set the :guilabel:`Priority` value higher
than that of any transactional email server(s). Finally, save the settings and :guilabel:`Test the
Connection`.
.. image:: mailjet_api/server-settings.png
:align: center
:alt: Odoo outgoing email server settings.
.. important::
In order for the notifications feature to work using Mailjet, there are three settings that need
to be set in Odoo.
#. The :guilabel:`From Filter` needs to be set on the server configuration. It is recommended
to set it as a domain and not a full email address. It should match the domain in the two
proceeding steps. More information can be referenced :ref:`here
<email_communication/from_filter>`.
#. The :guilabel:`mail.default.from` system parameter must have the value
`notifications\@yourdomain.com`.
#. The :guilabel:`mail.default.from_filter` system parameter must have the value
`yourdomain.com`. Replace `yourdomain` with the custom domain for the Odoo database. If there
isn't one, then use the :guilabel:`mail.catchall.domain` system parameter.
For more information see :ref:`Using a default email address <email_communication/default>`.
The :guilabel:`System Parameters` can be accessed by activating the :ref:`developer mode
<developer-mode>`.
Once the setup is complete, the Odoo database is ready to use the Mailjet email server for mass
mailing or transactional emails!
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

@@ -1,411 +0,0 @@
======================
Export and import data
======================
.. _export-data:
Export data from Odoo
=====================
When working with a database, it sometimes is necessary to export your data in a distinct file.
Doing so can help to do reporting over your activities (even if Odoo offers a precise and easy
reporting tool with each available application).
With Odoo, you can export the values from any field in any record. To do so,
activate the list view on the items that need to be exported, click on *Action*, and, then,
on *Export*.
.. image:: export_import_data/list-view-export.png
:align: center
:alt: view of the different things to enable/click to export data
Pretty simple, this action still comes with some specificities. In fact,
when clicking on *Export*, a pop-up window appears with several
options for the data to export:
.. image:: export_import_data/export-data-overview.png
:align: center
:alt: overview of all the options to take into account when exporting data in Odoo
#. With the *I want to update data* option ticked, the system only
shows the fields which can be imported. This is very helpful in
case you want to update existing records. Basically, this works
like a filter. Leaving the box unticked gives way more field
options because it shows all the fields, not just the ones which
can be imported.
#. When exporting, you can choose between two formats: .csv and .xls.
With .csv, items are separated with a comma, while .xls holds information about all the
worksheets in a file, including both content and formatting.
#. Those are the items you may want to export. Use the arrows to display
more sub-field options. Of course, you can use the search bar to
find specific fields more easily. To use the search option more
efficiently, display all the fields by clicking on all the
arrows!
#. The + button is there to add fields to the "to export" list.
#. The "handles" next to the selected fields allow you to move the fields up and down to
change the order in which they must be displayed in the exported
file.
#. The trashcan is there if you need to remove fields.
#. For recurring reports, it might be interesting to save export presets.
Select all the needed ones and click on the template bar.
There, click on *New template* and give a name to yours. The
next time you need to export the same list, simply select the
related template.
.. tip::
Its good to keep the fields external identifier in mind. For example,
*Related Company* is equal to *parent_id*. Doing so helps export
only what you would like to import next.
.. _import-data:
Import data into Odoo
=====================
How to start
------------
You can import data on any Odoo's business object using either Excel
(.xlsx) or CSV (.csv) formats:
contacts, products, bank statements, journal entries and even orders!
Open the view of the object you want to populate and click on :menuselection:`Favorites --> Import
records`.
.. image:: export_import_data/import_button.png
:align: center
There you are provided with templates you can easily populate
with your own data. Such templates can be imported in one click;
The data mapping is already done.
How to adapt the template
-------------------------
* Add, remove and sort columns to fit at best your data structure.
* We advise to not remove the **ID** one (see why in the next section).
* Set a unique ID to every single record by dragging down the ID sequencing.
.. image:: export_import_data/dragdown.gif
:align: center
* When you add a new column, Odoo might not be able to map it automatically if its
label doesn't fit any field in Odoo. Don't worry! You can map
new columns manually when you test the import. Search the list for the
corresponding field.
.. image:: export_import_data/field_list.png
:align: center
Then, use this field's label in your file in order to make it work
straight on the very next time.
How to import from another application
--------------------------------------
In order to re-create relationships between different records,
you should use the unique identifier from the original application
and map it to the **ID** (External ID) column in Odoo.
When you import another record that links to the first one,
use **XXX/ID** (XXX/External ID) to the original unique identifier.
You can also find this record using its name but you will be stuck
if at least 2 records have the same name.
The **ID** will also be used to update the original import
if you need to re-import modified data later,
it's thus good practice to specify it whenever possible.
I cannot find the field I want to map my column to
--------------------------------------------------
Odoo tries to find with some heuristic, based on the first ten lines of
the files, the type of field for each column inside your file.
For example if you have a column only containing numbers,
only the fields that are of type *Integer* will be displayed for you
to choose from.
While this behavior might be good and easy for most cases,
it is also possible that it goes wrong or that you want to
map your column to a field that is not proposed by default.
If that happens, you just have to check the
** Show fields of relation fields (advanced)** option,
you will then be able to choose from the complete list of fields for each column.
.. image:: export_import_data/field_list.png
:align: center
Where can I change the date import format?
------------------------------------------
Odoo can automatically detect if a column is a date, and it will try to guess the date format from a
set of most commonly used date formats. While this process can work for many date formats, some date
formats will not be recognized. This can cause confusion due to day-month inversions; it is
difficult to guess which part of a date format is the day and which part is the month in a date such
as '01-03-2016'.
To view which date format Odoo has found from your file you can check the **Date Format** that is
shown when clicking on **Options** under the file selector. If this format is incorrect you can
change it to your liking using the *ISO 8601* to define the format.
.. note::
If you are importing an excel (.xls, .xlsx) file, you can use date cells to store dates as the
display of dates in excel is different from the way it is stored. That way you will be sure that
the date format is correct in Odoo whatever your locale date format is.
Can I import numbers with currency sign (e.g.: $32.00)?
-------------------------------------------------------
Yes, we fully support numbers with parenthesis to represent negative sign as well as numbers with
currency sign attached to them. Odoo also automatically detect which thousand/decimal separator you
use (you can change those under **options**). If you use a currency symbol that is not known to
Odoo, it might not be recognized as a number though and it will crash.
Examples of supported numbers (using thirty-two thousands as an example):
- 32.000,00
- 32000,00
- 32,000.00
- -32000.00
- (32000.00)
- $ 32.000,00
- (32000.00 €)
Example that will not work:
- ABC 32.000,00
- $ (32.000,00)
What can I do when the Import preview table isn't displayed correctly?
----------------------------------------------------------------------
By default the Import preview is set on commas as field separators and quotation marks as text
delimiters. If your csv file does not have these settings, you can modify the File Format Options
(displayed under the Browse CSV file bar after you select your file).
Note that if your CSV file has a tabulation as separator, Odoo will not detect the separations. You
will need to change the file format options in your spreadsheet application. See the following
question.
How can I change the CSV file format options when saving in my spreadsheet application?
---------------------------------------------------------------------------------------
If you edit and save CSV files in spreadsheet applications, your computer's regional settings will
be applied for the separator and delimiter. We suggest you use OpenOffice or LibreOffice Calc as
they will allow you to modify all three options (in :menuselection:`'Save As' dialog box --> Check the
box 'Edit filter settings' --> Save`).
Microsoft Excel will allow you to modify only the encoding when saving (in :menuselection:`'Save As'
dialog box --> click 'Tools' dropdown list --> Encoding tab`).
What's the difference between Database ID and External ID?
----------------------------------------------------------
Some fields define a relationship with another object. For example, the country of a contact is a
link to a record of the 'Country' object. When you want to import such fields, Odoo will have to
recreate links between the different records. To help you import such fields, Odoo provides three
mechanisms. You must use one and only one mechanism per field you want to import.
For example, to reference the country of a contact, Odoo proposes you 3 different fields to import:
- Country: the name or code of the country
- Country/Database ID: the unique Odoo ID for a record, defined by the ID postgresql column
- Country/External ID: the ID of this record referenced in another application (or the .XML file
that imported it)
For the country Belgium, you can use one of these 3 ways to import:
- Country: Belgium
- Country/Database ID: 21
- Country/External ID: base.be
According to your need, you should use one of these 3 ways to reference records in relations. Here
is when you should use one or the other, according to your need:
- Use Country: This is the easiest way when your data come from CSV files that have been created
manually.
- Use Country/Database ID: You should rarely use this notation. It's mostly used by developers as
it's main advantage is to never have conflicts (you may have several records with the same name,
but they always have a unique Database ID)
- Use Country/External ID: Use External ID when you import data from a third party application.
When you use External IDs, you can import CSV files with the "External ID" column to define the
External ID of each record you import. Then, you will be able to make a reference to that record
with columns like "Field/External ID". The following two CSV files give you an example for Products
and their Categories.
:download:`CSV file for categories
<export_import_data/External_id_3rd_party_application_product_categories.csv>`.
:download:`CSV file for Products
<export_import_data/External_id_3rd_party_application_products.csv>`.
What can I do if I have multiple matches for a field?
-----------------------------------------------------
If for example you have two product categories with the child name "Sellable" (ie. "Misc.
Products/Sellable" & "Other Products/Sellable"), your validation is halted but you may still import
your data. However, we recommend you do not import the data because they will all be linked to the
first 'Sellable' category found in the Product Category list ("Misc. Products/Sellable"). We
recommend you modify one of the duplicates' values or your product category hierarchy.
However if you do not wish to change your configuration of product categories, we recommend you use
make use of the external ID for this field 'Category'.
How can I import a many2many relationship field (e.g. a customer that has multiple tags)?
-----------------------------------------------------------------------------------------
The tags should be separated by a comma without any spacing. For example, if you want your customer
to be linked to both tags 'Manufacturer' and 'Retailer' then you will encode "Manufacturer,Retailer"
in the same column of your CSV file.
:download:`CSV file for Manufacturer, Retailer <export_import_data/m2m_customers_tags.csv>`
How can I import a one2many relationship (e.g. several Order Lines of a Sales Order)?
-------------------------------------------------------------------------------------
If you want to import sales order having several order lines; for each order line, you need to
reserve a specific row in the CSV file. The first order line will be imported on the same row as the
information relative to order. Any additional lines will need an additional row that does not have
any information in the fields relative to the order. As an example, here is
``purchase.order_functional_error_line_cant_adpat.CSV`` file of some quotations you can import,
based on demo data.
:download:`File for some Quotations <export_import_data/purchase.order_functional_error_line_cant_adpat.csv>`.
The following CSV file shows how to import purchase orders with their respective purchase order
lines:
:download:`Purchase orders with their respective purchase order lines <export_import_data/o2m_purchase_order_lines.csv>`.
The following CSV file shows how to import customers and their respective contacts:
:download:`Customers and their respective contacts <export_import_data/o2m_customers_contacts.csv>`.
Can I import several times the same record?
-------------------------------------------
If you import a file that contains one of the column "External ID" or "Database ID", records that
have already been imported will be modified instead of being created. This is very useful as it
allows you to import several times the same CSV file while having made some changes in between two
imports. Odoo will take care of creating or modifying each record depending if it's new or not.
This feature allows you to use the Import/Export tool of Odoo to modify a batch of records in your
favorite spreadsheet application.
What happens if I do not provide a value for a specific field?
--------------------------------------------------------------
If you do not set all fields in your CSV file, Odoo will assign the default value for every non
defined fields. But if you set fields with empty values in your CSV file, Odoo will set the EMPTY
value in the field, instead of assigning the default value.
How to export/import different tables from an SQL application to Odoo?
----------------------------------------------------------------------
If you need to import data from different tables, you will have to recreate relations between
records belonging to different tables. (e.g. if you import companies and persons, you will have to
recreate the link between each person and the company they work for).
To manage relations between tables, you can use the "External ID" facilities of Odoo. The "External
ID" of a record is the unique identifier of this record in another application. This "External ID"
must be unique across all the records of all objects, so it's a good practice to prefix this
"External ID" with the name of the application or table. (like 'company_1', 'person_1' instead of
'1')
As an example, suppose you have a SQL database with two tables you want to import: companies and
persons. Each person belong to one company, so you will have to recreate the link between a person
and the company he work for. (If you want to test this example, here is a :download:`dump of such a
PostgreSQL database <export_import_data/database_import_test.sql>`)
We will first export all companies and their "External ID". In PSQL, write the following command:
.. code-block:: sh
> copy (select 'company_'||id as "External ID",company_name as "Name",'True' as "Is a Company" from companies) TO '/tmp/company.csv' with CSV HEADER;
This SQL command will create the following CSV file:
.. code-block:: text
External ID,Name,Is a Company
company_1,Bigees,True
company_2,Organi,True
company_3,Boum,True
To create the CSV file for persons, linked to companies, we will use the following SQL command in PSQL:
.. code-block:: sh
> copy (select 'person_'||id as "External ID",person_name as "Name",'False' as "Is a Company",'company_'||company_id as "Related Company/External ID" from persons) TO '/tmp/person.csv' with CSV
It will produce the following CSV file:
.. code-block:: text
External ID,Name,Is a Company,Related Company/External ID
person_1,Fabien,False,company_1
person_2,Laurence,False,company_1
person_3,Eric,False,company_2
person_4,Ramsy,False,company_3
As you can see in this file, Fabien and Laurence are working for the Bigees company (company_1) and
Eric is working for the Organi company. The relation between persons and companies is done using the
External ID of the companies. We had to prefix the "External ID" by the name of the table to avoid a
conflict of ID between persons and companies (person_1 and company_1 who shared the same ID 1 in the
original database).
The two files produced are ready to be imported in Odoo without any modifications. After having
imported these two CSV files, you will have 4 contacts and 3 companies. (the firsts two contacts are
linked to the first company). You must first import the companies and then the persons.
How to adapt an import template
===============================
Import templates are provided in the import tool of the most common data to
import (contacts, products, bank statements, etc.).
You can open them with any spreadsheets software (Microsoft Office,
OpenOffice, Google Drive, etc.).
How to customize the file
=========================
* Remove columns you don't need. We advise to not remove the *ID* one (see
why here below).
* Set a unique ID to every single record by dragging down the ID sequencing.
.. image:: export_import_data/dragdown.gif
:align: center
* When you add a new column, Odoo might not be able to map it automatically if its
label doesn't fit any field of the system.
If so, find the corresponding field using the search.
.. image:: export_import_data/field_list.png
:align: center
Then, use the label you found in your import template in order to make it work
straight away the very next time you try to import.
Why an “ID” column
==================
The **ID** (External ID) is an unique identifier for the line item.
Feel free to use the one of your previous software to ease the transition to Odoo.
Setting an ID is not mandatory when importing but it helps in many cases:
* Update imports: you can import the same file several times without creating duplicates;
* Import relation fields (see here below).
How to import relation fields
=============================
An Odoo object is always related to many other objects (e.g. a product is linked
to product categories, attributes, vendors, etc.). To import those relations you need to
import the records of the related object first from their own list menu.
You can do it using either the name of the related record or its ID. The ID is expected when
two records have the same name. In such a case add " / ID" at the end of the column title
(e.g. for product attributes: Product Attributes / Attribute / ID).
@@ -1,6 +0,0 @@
External ID,Name,Parent Category/External ID
a1,Expenses,product.product_category_all
a2,Other Products,product.product_category_all
a3,Sellable Products,product.product_category_all
a4,Tables,a1
a5,Seating furniture,a2
1 External ID Name Parent Category/External ID
2 a1 Expenses product.product_category_all
3 a2 Other Products product.product_category_all
4 a3 Sellable Products product.product_category_all
5 a4 Tables a1
6 a5 Seating furniture a2
@@ -1,6 +0,0 @@
External ID,Name,Internal Reference,Category/External ID,Can be Expensed,Can be Purchased,Can be Sold,Sale Price,Cost,Supply Method,Product Type,Procurement Method
a6,Aluminum Stool,ALS,a5,False,True,True,49.00,25.00,Buy,Stockable Product,Make to Stock
a7,Chair,CHR,a5,False,True,True,89.00,40.00,Buy,Stockable Product,Make to Stock
a8,Table,TBL,a4,False,True,True,169.00,100.00,Buy,Stockable Product,Make to Stock
a9,Software Book Tutorial,SBT,a2,False,True,False,19.00,8.00,Buy,Consumable,Make to Stock
a10,Fuel,FL,a1,True,False,False,0.30,0.25,Buy,Service,Make to Stock
1 External ID Name Internal Reference Category/External ID Can be Expensed Can be Purchased Can be Sold Sale Price Cost Supply Method Product Type Procurement Method
2 a6 Aluminum Stool ALS a5 False True True 49.00 25.00 Buy Stockable Product Make to Stock
3 a7 Chair CHR a5 False True True 89.00 40.00 Buy Stockable Product Make to Stock
4 a8 Table TBL a4 False True True 169.00 100.00 Buy Stockable Product Make to Stock
5 a9 Software Book Tutorial SBT a2 False True False 19.00 8.00 Buy Consumable Make to Stock
6 a10 Fuel FL a1 True False False 0.30 0.25 Buy Service Make to Stock
@@ -1,154 +0,0 @@
--
-- PostgreSQL database dump
--
SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;
SET search_path = public, pg_catalog;
SET default_tablespace = '';
SET default_with_oids = false;
--
-- Name: companies; Type: TABLE; Schema: public; Owner: fp; Tablespace:
--
CREATE TABLE companies (
id integer NOT NULL,
company_name character varying
);
ALTER TABLE public.companies OWNER TO fp;
--
-- Name: companies_id_seq; Type: SEQUENCE; Schema: public; Owner: fp
--
CREATE SEQUENCE companies_id_seq
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
ALTER TABLE public.companies_id_seq OWNER TO fp;
--
-- Name: companies_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fp
--
ALTER SEQUENCE companies_id_seq OWNED BY companies.id;
--
-- Name: companies_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fp
--
SELECT pg_catalog.setval('companies_id_seq', 3, true);
--
-- Name: persons; Type: TABLE; Schema: public; Owner: fp; Tablespace:
--
CREATE TABLE persons (
id integer NOT NULL,
company_id integer,
person_name character varying
);
ALTER TABLE public.persons OWNER TO fp;
--
-- Name: persons_id_seq; Type: SEQUENCE; Schema: public; Owner: fp
--
CREATE SEQUENCE persons_id_seq
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
ALTER TABLE public.persons_id_seq OWNER TO fp;
--
-- Name: persons_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: fp
--
ALTER SEQUENCE persons_id_seq OWNED BY persons.id;
--
-- Name: persons_id_seq; Type: SEQUENCE SET; Schema: public; Owner: fp
--
SELECT pg_catalog.setval('persons_id_seq', 4, true);
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: fp
--
ALTER TABLE ONLY companies ALTER COLUMN id SET DEFAULT nextval('companies_id_seq'::regclass);
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: fp
--
ALTER TABLE ONLY persons ALTER COLUMN id SET DEFAULT nextval('persons_id_seq'::regclass);
--
-- Data for Name: companies; Type: TABLE DATA; Schema: public; Owner: fp
--
COPY companies (id, company_name) FROM stdin;
1 Bigees
2 Organi
3 Boum
\.
--
-- Data for Name: persons; Type: TABLE DATA; Schema: public; Owner: fp
--
COPY persons (id, company_id, person_name) FROM stdin;
1 1 Fabien
2 1 Laurence
3 2 Eric
4 3 Ramsy
\.
--
-- Name: companies_pkey; Type: CONSTRAINT; Schema: public; Owner: fp; Tablespace:
--
ALTER TABLE ONLY companies
ADD CONSTRAINT companies_pkey PRIMARY KEY (id);
--
-- Name: persons_company_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: fp
--
ALTER TABLE ONLY persons
ADD CONSTRAINT persons_company_id_fkey FOREIGN KEY (company_id) REFERENCES companies(id);
--
-- PostgreSQL database dump complete
--
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

@@ -1,6 +0,0 @@
Name,Reference,Tags,Customer,Street,City,Country
Credit & Leasing,3,Services,True,Central Avenue 814,Johannesburg,South Africa
Services & Finance,5,"Consultancy Services,IT Services",True,Grove Road 5,London,United Kingdom
Hydra Supplies,6,"Manufacturer,Retailer",True,Palm Street 9,Los Angeles,United States
Bolts & Screws,8,"Wholesaler,Components Buyer",True,Rua Américo 1000,Campinas,Brazil
National Parts & Supplies,18,"Manufacturer,Wholesaler",True,Guangdong Way 20,Shenzen,China
1 Name Reference Tags Customer Street City Country
2 Credit & Leasing 3 Services True Central Avenue 814 Johannesburg South Africa
3 Services & Finance 5 Consultancy Services,IT Services True Grove Road 5 London United Kingdom
4 Hydra Supplies 6 Manufacturer,Retailer True Palm Street 9 Los Angeles United States
5 Bolts & Screws 8 Wholesaler,Components Buyer True Rua Américo 1000 Campinas Brazil
6 National Parts & Supplies 18 Manufacturer,Wholesaler True Guangdong Way 20 Shenzen China
@@ -1,9 +0,0 @@
Name,Is a company,Related company,Address type,Customer,Supplier,Street,ZIP,City,State,Country
Aurora Shelves,1,,,1,0,25 Pacific Road,95101,San José,CA,United States
Roger Martins,0,Aurora Shelves,Invoice address,1,0,27 Pacific Road,95102,San José,CA,United States
House Sales Direct,1,,,1,0,104 Saint Mary Avenue,94059,Redwood,CA,United States
Yvan Holiday,0,House Sales Direct,Contact,1,0,104 Saint Mary Avenue,94060,Redwood,CA,United States
Jack Unsworth,0,House Sales Direct,Invoice address,1,0,227 Jackson Road,94061,Redwood,CA,United States
Michael Mason,0,,,1,0,16 5th Avenue,94104,San Francisco,CA,United States
International Wood,1,,,1,0,748 White House Boulevard,20004,Washington,DC,United States
Sharon Pecker,0,International Wood,Invoice address,1,0,755 White House Boulevard,20005,Washington,DC,United States
1 Name Is a company Related company Address type Customer Supplier Street ZIP City State Country
2 Aurora Shelves 1 1 0 25 Pacific Road 95101 San José CA United States
3 Roger Martins 0 Aurora Shelves Invoice address 1 0 27 Pacific Road 95102 San José CA United States
4 House Sales Direct 1 1 0 104 Saint Mary Avenue 94059 Redwood CA United States
5 Yvan Holiday 0 House Sales Direct Contact 1 0 104 Saint Mary Avenue 94060 Redwood CA United States
6 Jack Unsworth 0 House Sales Direct Invoice address 1 0 227 Jackson Road 94061 Redwood CA United States
7 Michael Mason 0 1 0 16 5th Avenue 94104 San Francisco CA United States
8 International Wood 1 1 0 748 White House Boulevard 20004 Washington DC United States
9 Sharon Pecker 0 International Wood Invoice address 1 0 755 White House Boulevard 20005 Washington DC United States
@@ -1,10 +0,0 @@
Order Date,Order Reference,Supplier,Destination,Pricelist,Order Lines / Product,Order Lines / Quantity
2012-12-15,PO00008,ASUSTeK,Stock,Default Purchase Pricelist,ADPT,20
,,,,,CARD,30
,,,,,C-Case,40
2012-12-15,PO00009,Axelor,Stock,Default Purchase Pricelist,CD,5
,,,,,CPUa8,15
2012-12-15,PO000010,China Export,Stock,Default Purchase Pricelist,HDD SH-1,10
,,,,,HDD SH-2,20
,,,,,LAP-CUS,35
,,,,,LAP-E5,40
1 Order Date Order Reference Supplier Destination Pricelist Order Lines / Product Order Lines / Quantity
2 2012-12-15 PO00008 ASUSTeK Stock Default Purchase Pricelist ADPT 20
3 CARD 30
4 C-Case 40
5 2012-12-15 PO00009 Axelor Stock Default Purchase Pricelist CD 5
6 CPUa8 15
7 2012-12-15 PO000010 China Export Stock Default Purchase Pricelist HDD SH-1 10
8 HDD SH-2 20
9 LAP-CUS 35
10 LAP-E5 40
@@ -1,6 +0,0 @@
"Order Reference","Supplier","Destination","Pricelist","Order Lines / Product","Order Lines / Quantity"
"PO000020","ASUSTeK","Stock","Default Purchase Pricelist","ADPT",20
,,,,"CARD",30
,,,,"C-Case",40
"PO000021","Axelor","Stock","Default Purchase Pricelist","CD",5
,,,,"CPUa8",15
1 Order Reference Supplier Destination Pricelist Order Lines / Product Order Lines / Quantity
2 PO000020 ASUSTeK Stock Default Purchase Pricelist ADPT 20
3 CARD 30
4 C-Case 40
5 PO000021 Axelor Stock Default Purchase Pricelist CD 5
6 CPUa8 15
@@ -1,192 +0,0 @@
=====================
In-app purchase (IAP)
=====================
.. |IAP| replace:: :abbr:`IAP (In-app purchases)`
In-app purchases (IAP) are optional services that enhance Odoo databases. Each service provides its
own specific features and functionality. A full list of services is available on the `Odoo IAP
Catalog <https://iap.odoo.com/iap/all-in-app-services>`_.
.. image:: in_app_purchase/iap.png
:align: center
:alt: The IAP catalog with various services available on IAP.Odoo.com.
.. example::
The :guilabel:`SMS` service sends text messages to contacts directly from the database, and the
:guilabel:`Documents Digitization` service digitizes scanned or PDF vendor bills, expenses, and
resumes with optical character recognition (OCR) and artificial intelligence (AI).
|IAP| services do **not** need to be configured or set up before use. Odoo users can simply click on
the service in the app to activate it. However, each service requires its own prepaid credits, and
when they run out, users **must** :ref:`buy more <iap/buying_credits>` in order to keep using it.
.. note::
Users with an Enterprise version of Odoo Online get free credits to test IAP features.
.. _in_app_purchase/portal:
IAP services
============
|IAP| services are provided by Odoo, as well as third-parties, and have a wide range of uses.
The following |IAP| services are provided by Odoo:
- :guilabel:`Documents Digitization`: digitizes scanned or PDF vendor bills, expenses, and resumes
with OCR and AI.
- :guilabel:`Partner Autocomplete`: automatically populates contact records with corporate data.
- :guilabel:`SMS`: sends SMS text messages to contacts directly from the database.
- :guilabel:`Lead Generation`: generates leads based on a set of criteria, and converts web visitors
into quality leads and opportunities.
- :guilabel:`Snailmail`: sends customer invoices and follow-up reports by post, worldwide.
For more information on every service currently available, visit the `Odoo IAP Catalog
<https://iap.odoo.com/iap/all-in-app-services>`_.
Use IAP services
----------------
|IAP| services are automatically integrated with Odoo, and do **not** require users to configure any
settings. To use a service, simply interact with it wherever it appears in the database.
.. example::
The following flow focuses on the *SMS* |IAP| service being used from a contact's record.
This can be done by clicking the :guilabel:`📱 (phone) SMS` icon within the database.
.. image:: in_app_purchase/sms-icon.png
:align: center
:alt: The SMS icon on a typical contact information form located within an Odoo database.
One way to utilize the *SMS* |IAP| service with Odoo is showcased in the following steps:
#. Navigate to the :menuselection:`Contacts application`, and click on a contact with a mobile
phone number entered in either the :guilabel:`Phone` or :guilabel:`Mobile` field of the
contact form.
#. Hover the mouse over the :guilabel:`Phone` or :guilabel:`Mobile` field, and a :guilabel:`📱
(phone) SMS` icon appears to the right.
#. Click the :guilabel:`📱 (phone) SMS` icon, and a :guilabel:`Send SMS Text Message` pop-up
window appears.
#. Type a message in the :guilabel:`Message` field of the :guilabel:`Send SMS Text Message`
pop-up window. Then, click the :guilabel:`Send SMS` button. Odoo then sends the message, via
SMS, to the contact, and logs what was sent in the *chatter* of the contact's form.
Upon sending the SMS message, the prepaid credits for the *SMS* |IAP| service are automatically
deducted from the existing credits. If there are not enough credits to send the message, Odoo
prompts the user to purchase more.
.. seealso::
For more information on how to use various |IAP| services, and for more in-depth instructions
related to SMS functionality in Odoo, review the documentation below:
- :doc:`Lead mining </applications/sales/crm/acquire_leads/lead_mining>`
- :doc:`Enrich your contacts base with Partner Autocomplete
</applications/sales/crm/optimize/partner_autocomplete>`
- :doc:`SMS essentials </applications/marketing/sms_marketing/essentials/sms_essentials>`
.. _in_app_purchase/credits:
IAP credits
===========
Every time an |IAP| service is used, the prepaid credits for that service are spent. Odoo prompts
the purchase of more credits when there are not enough credits left to continue using a service.
Email alerts can also be set up for when :ref:`credits are low <in_app_purchase/low-credits>`.
Credits are purchased in *Packs* from the `Odoo IAP Catalog
<https://iap.odoo.com/iap/all-in-app-services>`_, and pricing is specific to each service.
.. example::
The `SMS service <https://iap.odoo.com/iap/in-app-services/1>`_ has four packs available, in
denominations of:
- :guilabel:`Starter Pack`: 10 credits
- :guilabel:`Standard Pack`: 100 credits
- :guilabel:`Advanced Pack`: 500 credits
- :guilabel:`Expert Pack`: 1,000 credits
.. image:: in_app_purchase/packs.png
:align: center
:alt: Four different packs of credits for the SMS IAP service.
The number of credits consumed depends on the length of the SMS and the country of destination.
For more information, refer to the :doc:`SMS Pricing and FAQ
</applications/marketing/sms_marketing/pricing/pricing_and_faq>` documentation.
.. _iap/buying_credits:
Buy credits
-----------
If there are not enough credits to perform a task, the database automatically prompts the purchase
of more credits.
Users can check the current balance of credits for each service, and manually purchase more credits,
by navigating to the :menuselection:`Settings app --> Search IAP --> View My Services`.
Doing so reveals an :guilabel:`IAP Account` page, listing the various |IAP| services in the
database. From here, click an |IAP| service to open its :guilabel:`Account Information` page, where
additional credits can be purchased.
Manually buy credits
~~~~~~~~~~~~~~~~~~~~
To manually buy credits in Odoo, follow these steps:
#. Go to the :menuselection:`Settings application`.
#. Type `IAP` in the search bar.
#. Click :guilabel:`View My Services`.
.. image:: in_app_purchase/view-services.png
:align: center
:alt: The Settings app showing the Odoo IAP heading and View My Services button.
#. Doing so reveals an :guilabel:`IAP Account` page, listing the various |IAP| services in the
database. From here, click an |IAP| service to open its :guilabel:`Account Information` page,
where additional credits can be purchased.
#. On the :guilabel:`Account Information` page, click the :guilabel:`Buy Credit` button.
.. image:: in_app_purchase/account-info.png
:align: center
:alt: The Account Information page for an IAP service showing the Buy Credit button.
#. Doing so loads a :guilabel:`Buy Credits for (IAP Account)` page in a new tab. From here, click
:guilabel:`Buy` on the desired pack of credits. Then, follow the prompts to enter payment
details, and confirm the order.
.. image:: in_app_purchase/buy-pack.png
:align: center
:alt: The SMS service page on IAP.Odoo.com with four packs of credits available for purchase.
#. Once the transaction is complete, the credits are available for use in the database.
.. _in_app_purchase/low-credits:
Low-credit notification
~~~~~~~~~~~~~~~~~~~~~~~
It is possible to be notified when credits are low, in order to avoid running out of credits, while
using an |IAP| service. To do that, follow this process:
#. Go to the :menuselection:`Settings application`.
#. Type `IAP` in the search bar.
#. Click :guilabel:`View My Services`.
#. The available |IAP| accounts appear in a list view on the :guilabel:`IAP Account` page. From
here, click on the desired |IAP| account to view that service's :guilabel:`Account Information`
page.
#. On the :guilabel:`Account Information` page, tick the :guilabel:`Warn Me` box. Doing so reveals
two fields on the form: :guilabel:`Threshold` and :guilabel:`Warning Email`.
.. image:: in_app_purchase/low-credits.png
:align: center
:alt: Odoo will send an email alert when credits for this service fall below the threshold.
#. In the :guilabel:`Threshold` field, enter an amount of credits Odoo should use as the minimum
threshold for this service.
#. In the :guilabel:`Warning Email` field, enter the email address that should receive the
notification.
Odoo sends a low-credit alert to the :guilabel:`Warning Email` when the balance of credits falls
below the amount listed as the :guilabel:`Threshold`.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,9 @@
============
Integrations
============
.. toctree::
integrations/mail_plugins
integrations/unsplash
integrations/geolocation
@@ -36,4 +36,4 @@ To use it, select :guilabel:`Google Place Map` and enter your :ref:`API Key
:alt: Google Places API key
.. seealso::
:doc:`../../applications/websites/website/configuration/address_autocomplete`
:doc:`/applications/websites/website/configuration/address_autocomplete`

Before

Width:  |  Height:  |  Size: 385 KiB

After

Width:  |  Height:  |  Size: 385 KiB

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

@@ -0,0 +1,57 @@
:show-content:
============
Mail Plugins
============
.. toctree::
:titlesonly:
mail_plugins/outlook
mail_plugins/gmail
Mail Plugins are connectors that bridge your mailbox with your Odoo database. With them, you can
interact with your Odoo database directly from your mailbox by:
- Creating leads and centralizing prospects' emails into the CRM app.
- Generating tasks in any Odoo project.
- Creating tickets in the Helpdesk app.
- Searching and storing insights on your contacts.
Mail Plugins are available for :doc:`Outlook <mail_plugins/outlook>` and :doc:`Gmail
<mail_plugins/gmail>`.
.. _mail_plugins/pricing:
Pricing
=======
Mail Plugins are **free** to install and use.
However, they can provide **Lead Enrichment**, which is part of a paid service known as **Lead
Generation**.
Mail plugins allow you to test Lead Enrichment for free, whether you connect the plugins to a
database or not. After a while, the plugins ask you to buy :doc:`../../essentials/in_app_purchase`
credits if you would like to keep using this service.
.. _mail_plugins/lead-generation:
Lead Generation IAP service
---------------------------
Lead Enrichment uses the *Lead Generation IAP service*. Each request consumes one *Lead Generation
credit*.
To buy credits, go to :menuselection:`Settings --> CRM --> Lead Enrichment --> Buy credits` and
select a package.
.. note::
- If you are out of credits, the only information populated when clicking on the suggested
company is its website link and logo.
- Check out the `Lead Generation IAP service Privacy Policy
<https://iap.odoo.com/privacy#header_3>`_.
.. seealso::
- :doc:`../../essentials/in_app_purchase`
- `Odoo Tutorials: Lead Enrichment <https://www.odoo.com/r/p73>`_
@@ -0,0 +1,165 @@
============
Gmail Plugin
============
The *Gmail Plugin* integrates an Odoo database with a Gmail inbox, so users can keep track of all
their work between Gmail and Odoo, without losing any information.
Odoo Online users
=================
For databases hosted on Odoo Online (or Odoo.sh), follow the steps below to configure the Gmail
Plugin.
Install the Gmail Plugin
------------------------
First, log in to the Gmail account that the user wishes to connect to Odoo.
From the Gmail inbox, click the plus sign icon on the right side panel to get add-ons. If the side
panel is not visible, click on the arrow icon at the bottom right corner of the inbox to reveal it.
.. image:: gmail/gmail-side-panel.png
:align: center
:alt: Plus sign icon on the Gmail inbox side panel.
Then, use the search bar to search for `Odoo` and locate the :guilabel:`Odoo Inbox Addin`.
.. image:: gmail/google-workspace-marketplace.png
:align: center
:alt: Odoo Inbox Addin on Google Workspace Marketplace.
Or, go directly to the :guilabel:`Odoo Inbox Addin` page on the `Google Workspace Marketplace
<https://workspace.google.com/marketplace/app/odoo_inbox_addin/873497133275>`_.
Once the plugin is located, click :guilabel:`Install`. Then, click :guilabel:`Continue` to start
the installation.
Next, select which Gmail account the user wishes to connect to Odoo. Then click :guilabel:`Allow`
to let Odoo access the Google account. Google will then show a pop-up window confirming that the
installation was successful.
Configure the Odoo database
---------------------------
The :guilabel:`Mail Plugin` feature must be enabled in the Odoo database in order to use the Gmail
Plugin. To enable the feature, go to :menuselection:`Settings --> General Settings`. Under the
:guilabel:`Integrations` section, activate :guilabel:`Mail Plugin`, and then click
:guilabel:`Save`.
.. image:: gmail/mail-plugin-setting.png
:align: center
:alt: The Mail Plugin feature in the Settings.
Configure the Gmail inbox
-------------------------
In the Gmail inbox, a purple Odoo icon is now visible on the right side panel. Click on the Odoo
icon to open up the Odoo plugin window. Then, click on any email in the inbox. Click
:guilabel:`Authorize Access` in the plugin window to grant Odoo access to the Gmail inbox.
.. image:: gmail/authorize-access.png
:align: center
:alt: The Authorize Access button in the right sidebar of the Odoo plugin panel.
Next, click :guilabel:`Login`. Then, enter the URL of the Odoo database that the user wishes to
connect to the Gmail inbox, and log in to the database.
.. note::
Use the general URL for the database, not the URL of a specific page in the database. For
example, use `https://mycompany.odoo.com`, not
`https://mycompany.odoo.com/web#cids=1&action=menu`.
Finally, click :guilabel:`Allow` to let Gmail access the Odoo database. The browser will then show
a :guilabel:`Success!` message. After that, close the window. The Gmail inbox and Odoo database are
now connected.
Odoo On-Premise users
=====================
For databases hosted on servers other than Odoo Online (or Odoo.sh), follow the steps below to
configure the Gmail Plugin.
.. note::
As part of their security guidelines, Google requires add-on creators to provide a list of URLs
that can be used in actions and redirections launched by the add-on. This protects users by
ensuring, for example, that no add-on redirects users toward a malicious website. (Read more on
`Google Apps Script <https://developers.google.com/apps-script/manifest/allowlist-url>`_.)
Since Odoo can only list the `odoo.com` domain and not every on-premise customer's unique server
domain, on-premise customers cannot install the Gmail Plugin from the Google Workspace
Marketplace.
Install the Gmail Plugin
------------------------
First, access the `GitHub repository <https://github.com/odoo/mail-client-extensions>`_ for the
Odoo Mail Plugins. Next, click on the green :guilabel:`Code` button. Then, click
:guilabel:`Download ZIP` to download the Mail Plugin files onto the user's computer.
.. image:: gmail/gh-download-zip.png
:align: center
:alt: Download the ZIP file from the Odoo GitHub repository for Mail Plugins.
Open the ZIP file on the computer. Then, go to :menuselection:`mail-client-extensions-master -->
gmail --> src --> views`, and open the :file:`login.ts` file using any text editor software,
such as Notepad (Windows), TextEdit (Mac), or Visual Studio Code.
Delete the following three lines of text from the :file:`login.ts` file:
.. code-block::
if (!/^https:\/\/([^\/?]*\.)?odoo\.com(\/|$)/.test(validatedUrl)) {
return notify("The URL must be a subdomain of odoo.com");
}
This removes the `odoo.com` domain constraint from the Gmail Plugin program.
Next, in the ZIP file, go to :menuselection:`mail-client-extensions-master --> gmail`, and open the
file called :guilabel:`appsscript.json`. In the :guilabel:`urlFetchWhitelist` section, replace all
the references to `odoo.com` with the Odoo customer's unique server domain.
Then, in the same :guilabel:`gmail` folder, open the file called :guilabel:`README.md`. Follow the
instructions in the :guilabel:`README.md` file to push the Gmail Plugin files as a Google Project.
.. note::
The computer must be able to run Linux commands in order to follow the instructions on the
:guilabel:`README.md` file.
After that, share the Google Project with the Gmail account that the user wishes to connect to Odoo.
Then, click :guilabel:`Publish` and :guilabel:`Deploy from manifest`. Lastly, click
:guilabel:`Install the add-on` to install the Gmail Plugin.
Configure the Odoo database
---------------------------
The :guilabel:`Mail Plugin` feature must be enabled in the Odoo database in order to use the Gmail
Plugin. To enable the feature, go to :menuselection:`Settings --> General Settings`. Under the
:guilabel:`Integrations` section, activate :guilabel:`Mail Plugin`, and then click :guilabel:`Save`.
.. image:: gmail/mail-plugin-setting.png
:align: center
:alt: The Mail Plugin feature in the Settings.
Configure the Gmail inbox
-------------------------
In the Gmail inbox, a purple Odoo icon is now visible on the right side panel. Click on the Odoo
icon to open up the Odoo plugin window. Then, click on any email in the inbox. Click
:guilabel:`Authorize Access` in the plugin window to grant Odoo access to the Gmail inbox.
.. image:: gmail/authorize-access.png
:align: center
:alt: The Authorize Access button in the right sidebar of the Odoo plugin panel.
Next, click :guilabel:`Login`. Then, enter the URL of the Odoo database that the user wishes to
connect to the Gmail inbox, and log in to the database.
.. note::
Use the general URL for the database, not the URL of a specific page in the database. For
example, use `https://mycompany.odoo.com`, not
`https://mycompany.odoo.com/web#cids=1&action=menu`.
Finally, click :guilabel:`Allow` to let Gmail access the Odoo database. The browser will then show
a :guilabel:`Success!` message. After that, close the window. The Gmail inbox and Odoo database are
now connected.
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

@@ -0,0 +1,150 @@
==============
Outlook Plugin
==============
Outlook allows for third-party applications to connect in order to execute database actions from
emails. Odoo has a plugin for Outlook that allows for the creation of an opportunity from the email
panel.
Configuration
=============
The Outlook :doc:`Mail Plugin <../mail_plugins>` needs to be configured both on Odoo and Outlook.
.. _mail-plugin/outlook/enable-mail-plugin:
Enable Mail Plugin
------------------
First, enable the *Mail Plugin* feature in the database. Go to :menuselection:`Settings --> General
Settings --> Integrations`, enable :guilabel:`Mail Plugin`, and :guilabel:`Save` the configuration.
.. _mail-plugin/outlook/install-plugin:
Install the Outlook Plugin
--------------------------
Download (:menuselection:`Save Page As --> Web Page XML only`) the following XML file to upload
later: `https://download.odoocdn.com/plugins/outlook/manifest.xml
<https://download.odoocdn.com/plugins/outlook/manifest.xml>`_.
Next, open the Outlook mailbox, and select any email. After completing this, click on the
:guilabel:`More actions` button in the upper right-side and select :guilabel:`Get Add-ins`.
.. image:: outlook/more-actions.png
:align: center
:alt: More actions button in Outlook
Following this step, select the :guilabel:`My add-ins` tab on the left-side.
.. image:: outlook/my-add-ins.png
:align: center
:alt: My add-ins in Outlook
Under :guilabel:`Custom add-ins` towards the bottom, click on :guilabel:`+ Add a custom add-in`, and
then on :guilabel:`Add from file...`
.. image:: outlook/custom-add-ins.png
:align: center
:alt: Custom add-ins in Outlook
For the next step, attach the `manifest.xml` file downloaded above, and press :guilabel:`OK`. Next,
read the warning and click on :guilabel:`Install`.
.. image:: outlook/add-in-warning.png
:align: center
:alt: Custom add-in installation warning in Outlook
.. _mail-plugin/outlook/connect-database:
Connect the database
--------------------
Now, Outlook will be connected to the Odoo database. First, open any email in the Outlook mailbox,
click on the :guilabel:`More actions` button in the upper right-side, and select :guilabel:`Odoo for
Outlook`.
.. image:: outlook/odoo-for-outlook.png
:align: center
:alt: Odoo for Outlook add-in button
The right-side panel can now display **Company Insights**. At the bottom, click on
:guilabel:`Login`.
.. image:: outlook/panel-login.png
:align: center
:alt: Logging in the Odoo database
.. note::
Only a limited amount of **Company Insights** (*Lead Enrichment*) requests are available as a
trial database. This feature requires :ref:`prepaid credits <mail_plugins/pricing>`.
.. tip::
If, after a short while, the panel is still empty, it is possible that the browser cookie
settings prevented it from loading. Note that these settings also change if the browser is in
"Incognito" mode.
To fix this issue, configure the browser to always allow cookies on Odoo's plugin page.
For Google Chrome, change the browser cookie settings by following the guide at:
`https://support.google.com/chrome/answer/95647
<https://support.google.com/chrome/answer/95647>`_
and adding `download.odoo.com` to the list of :guilabel:`Sites that can always use cookies`.
Once this is complete, the Outlook panel needs to be opened again.
Now, enter the Odoo database URL and click on :guilabel:`Login`.
.. image:: outlook/enter-database-url.png
:align: center
:alt: Entering the Odoo database URL
Next, click on :guilabel:`Allow` to open the pop-up window.
.. image:: outlook/new-window-warning.png
:align: center
:alt: New window pop-up warning
If the user isn't logged into the database, enter the credentials. Click on :guilabel:`Allow` to let
the Outlook Plugin connect to the database.
.. image:: outlook/odoo-permission.png
:align: center
:alt: Allowing the Outlook Plugin to connect to a database
.. _mail-plugin/outlook/add-shortcut:
Add a shortcut to the plugin
----------------------------
By default, the Outlook Plugin can be opened from the *More actions* menu. However, to save time,
it's possible to add it next to the other default actions.
In the Outlook mailbox, click on :guilabel:`Settings`, then on :guilabel:`View all Outlook
settings`.
.. image:: outlook/all-outlook-settings.png
:align: center
:alt: Viewing all Outlook settings
Now, select :guilabel:`Customize actions` under :guilabel:`Mail`, click on :guilabel:`Odoo for
Outlook`, and then :guilabel:`Save`.
.. image:: outlook/customize-actions.png
:align: center
:alt: Odoo for Outlook customized action
Following this step, open any email; the shortcut should be displayed.
.. image:: outlook/odoo-outlook-shortcut.png
:align: center
:alt: Odoo for Outlook customized action
Using the plugin
----------------
Now that the plug-in is installed and operational, all that needs to be done to create a lead is to
click on the `O` [Odoo icon] or navigate to :guilabel:`More actions` and click on :guilabel:`Odoo
for Outlook`. The side panel will appear on the right-side, and under :guilabel:`Opportunities`
click on :guilabel:`New`. A new window with the created opportunity in the Odoo database will
populate.
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

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