Compare commits

..

1 Commits

Author SHA1 Message Date
Tom Aarab (toaa)
d7cdf0d5ba [ADD] eCommerce: customer accounts
Adding a page on customer accounts for the eCommerce doc. Forward to
master.

taskid: 3223001
2023-03-09 14:59:40 +01:00
258 changed files with 138775 additions and 180171 deletions

View File

@@ -51,6 +51,11 @@ file_filter = locale/<lang>/LC_MESSAGES/services.po
source_file = locale/sources/services.pot
source_lang = en
[o:odoo:p:odoo-16-doc:r:theme]
file_filter = locale/<lang>/LC_MESSAGES/sphinx.po
source_file = locale/sources/sphinx.pot
source_lang = en
[o:odoo:p:odoo-16-doc:r:user_settings]
file_filter = locale/<lang>/LC_MESSAGES/settings.po
source_file = locale/sources/settings.pot

View File

@@ -85,4 +85,4 @@ static: $(HTML_BUILD_DIR)/_static/style.css
cp -r static/* $(HTML_BUILD_DIR)/_static/
test:
@python tests/main.py $(SOURCE_DIR)/administration $(SOURCE_DIR)/applications $(SOURCE_DIR)/contributing $(SOURCE_DIR)/developer $(SOURCE_DIR)/services redirects
python tests/rst_style.py $(SOURCE_DIR)

12
conf.py
View File

@@ -213,8 +213,6 @@ sphinx.transforms.i18n.docname_to_domain = (
# is populated. If a version is passed to `versions` but is not listed here, it will not be shown.
versions_names = {
'master': "Master",
'saas-16.2': "Odoo Online",
'saas-16.1': "Odoo Online",
'16.0': "Odoo 16",
'saas-15.2': "Odoo Online",
'15.0': "Odoo 15",
@@ -320,12 +318,6 @@ latex_documents = [
'odoo_partnership_agreement_es.tex', 'Odoo Partnership Agreement (ES)', '', 'howto'),
]
# List of languages that have legal translations (excluding EN). The keys must be in
# `languages_names`. These translations will have a link to their versions of the legal
# contracts, instead of the default EN one. The main legal documents are not part of the
# translations since they have legal meaning.
legal_translations = ['de', 'es', 'fr', 'nl']
# The name of an image file (relative to this directory) to place at the top of the title page.
latex_logo = 'static/img/odoo_logo.png'
@@ -454,10 +446,6 @@ def _generate_alternate_urls(app, pagename, templatename, context, doctree):
)
)
# Dynamic generation of localized legal doc links
context['legal_translations'] = legal_translations
def _build_url(_version=None, _lang=None):
if app.config.is_remote_build:
# Project root like https://www.odoo.com/documentation

View File

@@ -1,109 +1,80 @@
=======================================
Set up a content delivery network (CDN)
=======================================
===========================================
Setting up a Content Delivery Network (CDN)
===========================================
.. _reference/cdn/keycdn:
Deploying with KeyCDN
=====================
Deploying with KeyCDN_
======================
A :abbr:`CDN (Content Delivery Network)` or *content distribution network*, is a geographically
distributed network of servers that provides high speed internet content. The :abbr:`CDN (Content
Delivery Network)` provides quick, high-quality content delivery for content-heavy websites.
.. sectionauthor:: Fabien Meghazi
This document will guide you through the setup of a KeyCDN_ account with an Odoo powered website.
This document will guide you through the setup of a KeyCDN_ account with your
Odoo powered website.
Create a pull zone in the KeyCDN dashboard
------------------------------------------
Step 1: Create a pull zone in the KeyCDN dashboard
--------------------------------------------------
On the KeyCDN dashboard, start by navigating to the :menuselection:`Zones` menu item on the left. On
the form, give a value to the :guilabel:`Zone Name`, which will appear as part of the :abbr:`CDN
(Content Delivery Network)`'s :abbr:`URL (Uniform Resource Locator)`. Then, set the :guilabel:`Zone
Status` to :guilabel:`active` to engage the zone. For the :guilabel:`Zone Type` set the value to
:guilabel:`Pull`, and then, finally, under the :guilabel:`Pull Settings`, enter the
:guilabel:`Origin URL`— this address should be the full Odoo database :abbr:`URL (Uniform Resource
Locator)`.
.. image:: cdn/keycdn_create_a_pull_zone.png
:class: img-fluid
.. example::
Use ``https://yourdatabase.odoo.com`` and replace the *yourdatabase* subdomain prefix with the
actual name of the database. A custom :abbr:`URL (Uniform Resource Locator)` can be used, as
well, in place of the Odoo subdomain that was provided to the database.
When creating the zone, enable the CORS option in the
:guilabel:`advanced features` submenu. (more on that later)
.. image:: cdn/keycdn-zone.png
:align: center
:alt: KeyCDN's Zone configuration page.
.. image:: cdn/keycdn_enable_CORS.png
:class: img-fluid
Under the :guilabel:`General Settings` heading below the zone form, click the :guilabel:`Show all
settings` button to expand the zone options. This should be the last option on the page. After
expanding the :guilabel:`General Settings` ensure that the :guilabel:`CORS` option is
:guilabel:`enabled`.
Once done, you'll have to wait a bit while KeyCDN_ is crawling your website.
Next, scroll to the bottom of the zone configuration page and :guilabel:`Save` the changes. KeyCDN
will indicate that the new zone will be deployed. This can take about 10 minutes.
.. image:: cdn/keycdn_progressbar.png
:class: img-fluid
.. image:: cdn/zone-url.png
:align: center
:alt: KeyCDN deploying the new Zone.
.. note:: a new URL has been generated for your Zone, in this case it is
``http://pulltest-b49.kxcdn.com``
.. note::
A new :guilabel:`Zone URL` has been generated for your Zone, in this example it is
``pulltest-xxxxx.kxcdn.com``. This value will differ for each database.
Step 2: Configure the odoo instance with your zone
--------------------------------------------------
Copy this :guilabel:`Zone URL` to a text editor for later, as it will be used in the next steps.
In the Odoo back end, go to the :guilabel:`Website Settings`: menu, then
activate the CDN support and copy/paste your zone URL in the
:guilabel:`CDN Base URL` field. This field is only visible and configurable if
you have developer mode activated.
Configure the Odoo instance with the new zone
---------------------------------------------
.. image:: cdn/odoo_cdn_base_url.png
:class: img-fluid
In the Odoo :guilabel:`Website` app, go to the :menuselection:`Settings` and then activate the
:guilabel:`Content Delivery Network (CDN)` setting and copy/paste the :guilabel:`Zone URL` value
from the earlier step into the :guilabel:`CDN Base URL` field. This field is only visible and
configurable when :doc:`Developer Mode <../../applications/general/developer_mode>` is activated.
Now your website is using the CDN for the resources matching the
:guilabel:`CDN filters` regular expressions.
.. note::
Ensure that there are two *forward slashes* (`//`) before the :guilabel:`CDN Base URL` and one
forward slash (`/`) after the :guilabel:`CDN Base URL`.
You can have a look to the HTML of your website in order to check if the CDN
integration is properly working.
:guilabel:`Save` the settings when complete.
.. image:: cdn/odoo_check_your_html.png
:class: img-fluid
.. image:: cdn/cdn-base-url.png
:align: center
:alt: Activate the CDN setting in Odoo.
Now the website is using the CDN for the resources matching the :guilabel:`CDN filters` regular
expressions.
Why should I activate CORS?
---------------------------
In the HTML of the Odoo website, the :abbr:`CDN (content delivery network)` integration is evidenced
as working properly by checking the :abbr:`URL (Uniform Resource Locators)` of images. The *CDN Base
URL* value can be seen by using your web browser's :guilabel:`Inspect` feature on the Odoo website.
Look for it's record by searching within the :guilabel:`Network` tab inside of devtools.
A security restriction in some browsers (Firefox and Chrome at time of writing)
prevents a remotely linked CSS file to fetch relative resources on this same
external server.
.. image:: cdn/test-pull.png
:align: center
:alt: The CDN Base URL can be seen using the inspect function on the Odoo website.
If you don't activate the CORS option in the CDN zone, the more obvious
resulting problem on a default Odoo website will be the lack of font-awesome
icons because the font file declared in the font-awesome CSS won't be loaded on
the remote server.
Prevent security issues by activating cross-origin resource sharing (CORS)
--------------------------------------------------------------------------
Here's what you would see on your homepage in such a case:
A security restriction in some browsers (such as Mozilla Firefox and Google Chrome) prevents a
remotely linked CSS file to fetch relative resources on this same external server.
.. image:: cdn/odoo_font_file_not_loaded.png
:class: img-fluid
If the :abbr:`CORS (Cross-Origin Resource Sharing)` option isn't enabled in the :guilabel:`CDN
Zone`, the more obvious resulting problem on a standard Odoo website will be the lack of *Font
Awesome* icons because the font file declared in the *Font Awesome* CSS won't be loaded from the
remote server.
A security error message will also appear in the browser's console:
When these cross-origin resource issues occur, a security error message similar to the output
below will appear in the web browser's developer console:
.. image:: cdn/odoo_security_message.png
:class: img-fluid
``Font from origin 'http://pulltest-xxxxx.kxcdn.com' has been blocked from loading /shop:1 by
Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the
requested resource. Origin 'http://yourdatabase.odoo.com' is therefore not allowed access.``
.. image:: cdn/odoo-security-message.png
:align: center
:alt: Error message populated in the browser console.
Enabling the :abbr:`CORS (Cross-Origin Resource Sharing)` option in the :abbr:`CDN (Content Delivery
Network)` settings fixes this issue.
Enabling the CORS option in the CDN fixes this issue.
.. _KeyCDN: https://www.keycdn.com

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -161,9 +161,9 @@ Then, create a new email server and check the box for :guilabel:`Outlook`. Next,
: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>`.
<email_communication/default_from>`.
Then, click on :guilabel:`Connect your Outlook account`.
Then, cick 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.

View File

@@ -201,7 +201,7 @@ Connection`.
#. 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>`.
<email_servers/outgoing-email-server>`.
#. 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

View File

@@ -3,22 +3,20 @@ Odoo Online database management
===============================
To manage a database, sign in to https://www.odoo.com and access the `database management page
<https://www.odoo.com/my/databases>`_ by clicking on the user icon, then on
:guilabel:`My Databases`.
<https://www.odoo.com/my/databases>`_ by clicking on the user icon, then on *My Databases*.
.. image:: odoo_online/my-databases.png
:align: center
:alt: Clicking on the user icon opens a drop-down menu. "My databases" button is highlighted.
.. note::
Make sure to connect as the administrator of the database that changes will be made on.
Make sure you are connected as the administrator of the database you want to manage.
.. image:: odoo_online/dropdown-menu.png
:align: right
:alt: Clicking on the gear icon opens the drop-down menu.
Open the drop-down menu next to the database that changes will be made on by clicking on the gear
icon.
Open the drop-down menu next to the database you want to manage by clicking on the gear icon.
Several actions are available:
@@ -37,22 +35,22 @@ Several actions are available:
Upgrade
=======
If the database is *not* on the latest **Online version**, the administrator should receive an
invitation to :doc:`upgrade <../upgrade>` the database. A :guilabel:`Rolling Release`` button on the
database's main screen proposes an upgrade to the latest version (e.g., 14.0 to 16.1).
If you are *not* on the latest **Online version**, you should receive an invitation to :doc:`upgrade
<../upgrade>` your database. A **Rolling Release button** on your database's main screen proposes an
upgrade to the latest version (e.g., 13.0 to 15.1).
.. important::
- | **If the Odoo database's version is lower than the latest major release:**
| The database must be upgraded within two months. After these two months, an automatic
- | **If your Odoo database's version is lower than the latest major release:**
| You must upgrade your database within two months. After these two months, an automatic
upgrade is initiated.
- | **If the Odoo database's version is equal to or higher than the latest major release:**
| Disregard the invitation to upgrade as the database probably wouldn't benefit from new
- | **If your Odoo database's version is equal to or higher than the latest major release:**
| You can disregard the invitation to upgrade as you probably wouldn't benefit from new
features every two months.
.. note::
Versions that are not supported anymore become deprecated and need to be updated to avoid
security issues. Odoo recommends that the company initiate the upgrade, as this method allows for
the company to request a test upgrade of the database to check for any discrepancies.
security issues. We recommend you initiate the upgrade of the database yourself, as this method
allows you to request a test upgrade of your database to check for any discrepancies.
.. seealso::
- :doc:`../upgrade`
@@ -63,12 +61,12 @@ database's main screen proposes an upgrade to the latest version (e.g., 14.0 to
Duplicate
=========
This allows to make an exact copy of the database to be able to perform testing without compromising
the daily operations.
Make an exact copy of the database to be able to perform testing without compromising the daily
operations.
.. important::
- By checking :guilabel:`For testing purposes`, all external communication (emails, payments,
delivery orders, etc.) are disabled by default on the duplicated database.
- By checking *For testing purposes*, all external communication (emails, payments, delivery
orders, etc.) are disabled by default on the duplicated database.
- Duplicate databases expire automatically after 15 days.
.. _odoo_online/rename:
@@ -83,7 +81,7 @@ Rename the database and its URL.
Download
========
Instantly download a ZIP file with a backup of the database.
Download instantly a ZIP file with a backup of the database.
.. note::
Databases are backed up daily according to the `Odoo Cloud SLA
@@ -117,8 +115,8 @@ Delete a database instantly.
Deleting a database means that all data is permanently lost. The deletion is instant and for all
users. It is recommended to create a backup of the database before deleting it.
Carefully read the warning message that pops up and proceed only if the implications of deleting a
database are fully understood:
Read carefully the warning message that pops up and proceed only if you fully understand the
implications of deleting a database:
.. image:: odoo_online/delete.png
:align: center
@@ -129,6 +127,7 @@ database are fully understood:
- The database name is immediately available for a new database.
- It is not possible to delete a database if it is expired or linked to a subscription. If
needed, please get in touch with `Odoo Support <https://www.odoo.com/help>`_.
- To delete your account, please get in touch with `Odoo Support <https://www.odoo.com/help>`_.
.. _odoo_online/contact-support:
@@ -143,15 +142,14 @@ pre-filled.
Invite / Remove Users
=====================
To invite users, fill out the email address of the new user and click on :guilabel:`Invite`. To add
multiple users, click on :guilabel:`Add more users`.
To invite users, fill out the email address of the new user and click on *Invite*. To add multiple
users, click on *Add more users*.
.. image:: odoo_online/invite-users.png
:align: center
:alt: Clicking on "Add more users" adds additional email fields.
To remove users, select the users to remove and click on :guilabel:`Remove`.
To remove users, select the users to remove and click on *Remove*.
.. seealso::
- :doc:`/applications/general/users/manage_users`
- :doc:`/applications/general/users/delete_account`

View File

@@ -26,13 +26,9 @@ This matrix shows the support status of every version.
+-----------------+-------------+----------+-------------+----------------+------------------------+
| | Odoo Online | Odoo.sh | On-Premise | Release date | End of support |
+=================+=============+==========+=============+================+========================+
| Odoo saas~16.2 | |green| | N/A | N/A | March 2023 | June 2023 (planned) |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo saas~16.1 | |green| | N/A | N/A | February 2023 | April 2023 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| **Odoo 16.0** | |green| | |green| | |green| | October 2022 | October 2025 (planned) |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo saas~15.2 | |red| | N/A | N/A | March 2022 | January 2023 |
| Odoo saas~15.2 | |green| | N/A | N/A | March 2022 | January 2023 |
+-----------------+-------------+----------+-------------+----------------+------------------------+
| Odoo saas~15.1 | |red| | N/A | N/A | February 2022 | July 2022 |
+-----------------+-------------+----------+-------------+----------------+------------------------+

View File

@@ -9,5 +9,5 @@ Bank and cash
bank/setup
bank/feeds
bank/misc
bank/reconciliation
bank/interbank

View File

@@ -7,7 +7,7 @@ Bank feeds
.. toctree::
:titlesonly:
feeds/transactions
feeds/bank_statements
feeds/bank_synchronization
feeds/ponto
feeds/saltedge

View File

@@ -0,0 +1,62 @@
===============
Bank statements
===============
Importing your bank statements allows you to keep track of your bank account transactions and
reconcile them with the ones recorded in Odoo.
We recommend using :doc:`the bank synchronization feature <bank_synchronization>` for more
efficiency. However, if you do not want to use it or if your bank is not yet supported, other
options exist:
- Import the bank statement files delivered by your bank;
- Register the bank statements manually.
Import bank statements files
============================
Odoo supports multiple file formats to import bank statements:
- SEPA recommended Cash Management format (CAMT.053);
- Comma-separated values (.CSV);
- Open Financial Exchange (.OFX);
- Quicken Interchange Format (.QIF);
- Belgium: Coded Statement of Account (.CODA).
To import a file, go to the Accounting dashboard and click on :guilabel:`Import (Statements)` under
the :guilabel:`Bank` window, or click on the drop-down menu (:guilabel:`⋮`) button and then on
:guilabel:`Import Statement`.
.. image:: bank_statements/bank-overview.png
:align: center
:alt: Import a bank statement file in Odoo Accounting
Next, select the file you want to import and click on :guilabel:`Upload`.
Once the file uploaded, the **import widget** helps you set formatting options and **map** the
different columns you want to import. You also can :guilabel:`test` the bank statement file before
importing it to your database.
.. image:: bank_statements/import-bank-statement.png
:align: center
:alt: Register bank statements manually in Odoo Accounting
Register bank statements manually
=================================
If needed, you can also record your bank statements manually. To do so, go to the
:guilabel:`Accounting dashboard` and click on the :guilabel:`Create Statements` under the
:guilabel:`Bank` window. Alternatively, you can click the drop-down menu (:guilabel:`⋮`) button, and
then :guilabel:`New Statement`.
To ease the reconciliation process, make sure to fill out the :guilabel:`Partner` field. You can
also type in the payments references in the :guilabel:`Label` field. Add a new line for each
transaction written on the original bank statement.
.. image:: bank_statements/bank-statements-03.png
:align: center
:alt: Register bank statements manually in Odoo Accounting
.. note::
The **Ending Balance** and the **Computed Balance** should have the same amount. If this is not
the case, make sure there are no mistakes in the transactions amounts.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -197,6 +197,6 @@ Configuration --> Accounting: Online Synchronization`,open the connection you wa
credentials and click on the :guilabel:`Update Credentials` button.
.. seealso::
* :doc:`transactions`
* :doc:`bank_statements`
* :doc:`ponto`
* :doc:`saltedge`

View File

@@ -121,4 +121,4 @@ and we advise you to contact Ponto directly.
* :doc:`bank_synchronization`
* :doc:`saltedge`
* :doc:`transactions`
* :doc:`bank_statements`

View File

@@ -108,4 +108,4 @@ and this synchronization was created with Odoo, you will normally be able to fin
* :doc:`bank_synchronization`
* :doc:`ponto`
* :doc:`transactions`
* :doc:`bank_statements`

View File

@@ -1,46 +0,0 @@
============
Transactions
============
Importing transactions from your bank statements allows keeping track of bank account transactions
and reconciling them with the ones recorded in your accounting.
:doc:`Bank synchronization <bank_synchronization>` automates the process. However, if you do not
want to use it or if your bank is not yet supported, other options exist:
- :ref:`Import bank transactions <import-statements>` delivered by your bank;
- :ref:`Register bank transactions <register-transactions>` manually.
.. _import-statements:
Import transactions
===================
Odoo supports multiple file formats to import transactions:
- SEPA recommended Cash Management format (CAMT.053);
- Comma-separated values (.CSV);
- Open Financial Exchange (.OFX);
- Quicken Interchange Format (.QIF);
- Belgium: Coded Statement of Account (.CODA).
To import a file, go to the :guilabel:`Accounting Dashboard`, and in the :guilabel:`Bank` journal,
click on :guilabel:`Import Transactions`.
.. image:: transactions/import-transactions.png
:align: center
:alt: Import bank transactions from bank journal
Next, select the file and upload it.
After setting the necessary formatting options and mapping the needed columns, you can run a
:guilabel:`Test` and :guilabel:`Import` your bank transactions.
.. _register-transactions:
Register bank transactions manually
===================================
You can also record your bank transactions manually. To do so, go to :guilabel:`Accounting
Dashboard`, click on the :guilabel:`Bank` journal, and then on :guilabel:`New`. Make sure to fill
out the :guilabel:`Partner` and :guilabel:`Label` fields to ease the reconciliation process.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

View File

@@ -0,0 +1,10 @@
:nosearch:
=============
Miscellaneous
=============
.. toctree::
:titlesonly:
misc/interbank

View File

@@ -15,8 +15,8 @@ Settings` and then under the :guilabel:`Default Accounts` section.
.. note::
At least two bank accounts are needed to make internal transfers. Refer to
:doc:`Bank and cash accounts section <setup/bank_accounts>` to see how to add an additional bank
account to your database.
:doc:`Bank and cash accounts section <../setup/bank_accounts>` to see how to add an additional
bank account to your database.
Register an internal transfer from one bank to another
======================================================
@@ -91,8 +91,8 @@ Manage and reconcile bank statements
------------------------------------
The next step is to book the bank statements to finalize the transaction by creating,
:doc:`importing <feeds/transactions>`, or :doc:`synchronizing <feeds/bank_synchronization>` your
:guilabel:`Transactions lines`. Fill in the :guilabel:`Ending balance` and click on the
:doc:`importing <../feeds/bank_statements>`, or :doc:`synchronizing <../feeds/bank_synchronization>`
your :guilabel:`Transactions lines`. Fill in the :guilabel:`Ending balance` and click on the
:guilabel:`Reconcile` button.
.. image:: interbank/transactions-line.png
@@ -100,7 +100,7 @@ The next step is to book the bank statements to finalize the transaction by crea
:alt: Transaction lines to be filled in prior to reconciliation
.. seealso::
:doc:`reconciliation/use_cases`
- :doc:`../reconciliation/use_cases`
In the next window, choose counterparts for the payment - in this example, the outstanding payment
account - then click :guilabel:`Validate`.

View File

@@ -83,7 +83,7 @@ You can edit the accounting information and bank account number according to you
.. seealso::
- :doc:`../../others/multi_currency`
- :doc:`../../bank/feeds/transactions`
- :doc:`../../bank/feeds/bank_statements`
- :doc:`../../bank/setup/outstanding_accounts`
Suspense account
@@ -133,4 +133,4 @@ Bank feeds
.. seealso::
- :doc:`../../bank/feeds/bank_synchronization`
- :doc:`../../bank/feeds/transactions`
- :doc:`../../bank/feeds/bank_statements`

View File

@@ -8,6 +8,6 @@ Others
:titlesonly:
others/multi_currency
others/analytic_accounting
others/analytic
others/adviser
others/inventory

View File

@@ -0,0 +1,12 @@
:nosearch:
========
Analytic
========
.. toctree::
:titlesonly:
analytic/usage
analytic/timesheets
analytic/purchases_expenses

View File

@@ -0,0 +1,147 @@
==================================================
Track costs of purchases, expenses, subcontracting
==================================================
Overview
========
Thanks to analytical accounting we can track costs of purchases,
expenses and subcontracting in the accounting module.
We'll take the following example. We sold a consulting package for a
customer. The package is all inclusive meaning no extra cost can be
added. We would however like to follow which cost were attached to this
transaction as we need to pay for purchases, expenses, and
subcontracting costs related to the project.
Configuration
=============
The following modules needs to be installed to track cost. Enter the app
module and install the following apps:
.. list-table::
- - .. image:: purchases_expenses/purchase01.png
- .. image:: purchases_expenses/purchase02.png
- .. image:: purchases_expenses/purchase03.png
Please note that the applications provided by these apps only allows us
to **track** the costs. We won't be able to automatically re invoice
those costs to our customers. To track and **re invoice costs** you
should install the Sales management app as well.
.. image:: purchases_expenses/purchase04.png
:align: center
Enable Analytical accounting
----------------------------
Next step is to activate the analytical accounting. In the accounting
app, select :menuselection:`Configuration --> Settings` and thick the Analytic
accounting box.
.. image:: purchases_expenses/purchase05.png
:align: center
Moreover, scroll down and tick the **Analytic accounting for purchases**
box.
.. image:: purchases_expenses/purchase06.png
:align: center
Don't forget to save your changes.
Create an Analytical account.
=============================
First of all you should create an Analytical account on which you can
point all your expenses. Enter the accounting app, select
:menuselection:`Configuration --> Analytic Accounts`. Create a new one. In this
case we will call it "consulting pack" for our customer Smith&Co.
.. image:: purchases_expenses/purchase07.png
:align: center
We will point all our costs to this account to keep track of them.
Record an expense
=================
We start by booking an expense. Our
IT technician had to take a train to go see our customer. He paid for
his ticket himself.
Create an expense product
-------------------------
We first need to create an expense product. Enter the **Expense** module,
Click on :menuselection:`Configuration --> Expense Products`. Create a new product
called Train ticket and set the cost price to 15.50 euros. Make sure the **Can be
expensed** box is ticked.
.. image:: purchases_expenses/purchase08.png
:align: center
Book the expense
----------------
Enter the Expense module, click on :menuselection:`My expenses --> Create`. Select the
Train ticket product and link it to the analytical account discussed
above.
.. image:: purchases_expenses/purchase09.png
:align: center
Submit to manager and wait for the manager to approve and post the
journal entries.
Create a Purchase Order linked to the analytical account
========================================================
Purchase Product
----------------
We also need to buy a software for our customers. In the purchase app
create a purchase order for the software product.
Within the line we can link the product's cost with the analytical
account. Specify the order line and select the correct analytical
account. Confirm the sale.
.. image:: purchases_expenses/purchase10.png
:align: center
Accept the delivery and enter the invoice. Once the invoice is entered the cost
price (**Vendor Price** field) will be booked in the analytical account.
Subcontracting
--------------
The purchase module can be used in the same way as seen previously to
handle subcontracting. if we purchase a service from another company we
can re invoice this cost by linking the purchase order line to the
correct analytical account. We simply need to create the correct vendors
product.
.. note::
You can also track cost with timesheets, see: :doc:`timesheets`
Track costs in accounting
=========================
Now that everything is booked and points to the analytical account.
Simply open it to check the costs related to that account.
Enter the accounting module, click on :menuselection:`Advisers --> Analytic Accounts
--> Open Charts`.
Select "consulting pack - Smith" and click on the cost and revenue
button to have an overview of all cost linked to the account.
.. image:: purchases_expenses/purchase11.png
:align: center
.. note::
If you would like to have the revenue as well you should
invoice the Consulting Pack in the Invoice menu and link the invoice
line to this same analytical account.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -0,0 +1,169 @@
==============================================
Track costs of human resources with timesheets
==============================================
Human resource of course has a cost. It is interesting to see how much a
particular contract costs the company in term of human power in relation
to the invoiced amounts.
We will take the following example: Our two employees **Harry Potter** and
**Cedric Digory** both work on a **Consultancy pack** for our customer
**Smith&Co**. Harry is paid 18€ p.h. and Cedric's salary is 12€ p.h. We
would like to track their timesheet costs within the accounting app, and
compare them with the revenue of the consultancy service.
Configuration
=============
First, install the three applications necessary to use this
functionality, namely **Accounting**, **Sales** and **Timesheet**. Enter the apps
module name and install them.
.. image:: timesheets/timesheets14.png
:align: center
.. image:: timesheets/timesheets05.png
:align: center
.. image:: timesheets/timesheets11.png
:align: center
Next you will need to enable analytical accounting. To do so enter the
**Accounting app**. Select :menuselection:`Configuration --> Settings` and tick the
**Analytic accounting** option (see picture below)
.. image:: timesheets/timesheets06.png
:align: center
Apply your changes.
Create an employee
------------------
In order to check the revenue of an employee you need to have one. To
create an employee enter the **Employee** app. Select **Employees** and
create a new employee, fill in the name and the basic information.
On the employee sheet enter the **HR settings** tab. Here you are able to
specify the **Timesheet Cost** of your employee. In this case Harry has a
cost of 18 euros / hours. We will thus fill in 18 in this field.
.. image:: timesheets/timesheets07.png
:align: center
.. note::
If you want the employee to be able to enter timesheets he
needs to be related to a User.
Repeat the operation to create the Cedric Digory employee. Don't forget
to specify its related user and **Timesheet Costs**.
Issue a Sales Order
-------------------
We created two employees called Harry Potter and Cedric Diggory in the
**Employee** app. Both of them will work on a consultancy contract for our
customer Smith&Co where they will point their hours on a timesheet.
We thus need to create a **sales order** with a **service** product invoiced
**based on time and material** and tracked by timesheets with **hours** as unit
of measures.
.. image:: timesheets/timesheets03.png
:align: center
For more information on how to create a sales order based on time and
material please see :doc:`/applications/sales/sales/invoicing/time_materials`.
We save a Sales Order with the service product **External Consulting**. An
analytical account will automatically be generated once the **Sales Order**
is confirmed. Our employees will have to point to that account (in this
case **SO002-Smith&Co**) in order to be able to invoice their hours (see
picture below).
.. image:: timesheets/timesheets10.png
:align: center
Fill in timesheet
-----------------
As an employee linked to a user, Harry can enter the **Timesheet** app and
specify his timesheets for the contract. Logged on Harry's account we enter the
**Timesheet** app and enter a detailed line pointing to the **Analytical
Account** discussed above.
Harry worked three hours on a SWOT analysis for Smith&Co.
.. image:: timesheets/timesheets01.png
:align: center
In the meantime, Cedric discussed businesses needs with the customer for
1 hour and specified it as well in his personal timesheet, pointing as
well on the **Analytic Account**.
In the **Sales Order** we notice that the delivered amounts of hours is
automatically computed (see picture below).
.. image:: timesheets/timesheets02.png
:align: center
Analytic accounting
-------------------
Thanks to analytic accounts we are able to have an overview of HR cost
and revenues. All the revenues and cost of this transactions have been
registered in the **SO002-Smith&Co** account.
We can use two methods to analyze this situation.
Without filters
~~~~~~~~~~~~~~~
If we pointed all our costs and revenues of the project on the correct
analytical account we can easily retrieve the cost and revenues related
to this analytical account. Enter the *Accounting* app, select
:menuselection:`Adviser --> Analytic Accounts --> Open Charts`.
Note : you can specify a period for **Analysis**. If you want to open the
current situation you should keep the fields empty. We can already note
the credit and debit balance of the account.
.. image:: timesheets/timesheets12.png
:align: center
If we click on the account a special button is provided to have the
details of cost and revenues (see picture below).
.. image:: timesheets/timesheets13.png
:align: center
Click the button **Cost/Revenue** to have an overview of cost and revenues with the
corresponding description.
With filters
~~~~~~~~~~~~
We can thus filter this information from the **Analytic Entries**.
Enter the **Accounting** app, and click on :menuselection:`Adviser --> Analytic Entries`.
In this menu we have several options to analyse the human resource cost.
#. We filter on the **Analytic account** so we can see the cost and revenues
of the project. Add a custom **Filter** where the **Analytic Account**
contains the **Sales Order** number.
.. image:: timesheets/timesheets04.png
:align: center
In the results we see timesheets activities and invoiced lines with
the corresponding costs and revenues.
.. image:: timesheets/timesheets09.png
:align: center
#. We can group the different analytical accounts together and check
their respective revenues. Simply group by **Analytic account** and
select the **Graph view** to have a clear overview.
.. image:: timesheets/timesheets08.png
:align: center

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -0,0 +1,224 @@
==========================
Analytic account use cases
==========================
The analytic accounting can be used for several purposes:
- analyse costs of a company
- reinvoice time to a customer
- analyse performance of a service or a project
To manage analytic accounting, you have to activate it in
:menuselection:`Configuration --> Settings`:
.. image:: usage/usage01.png
:align: center
To illustrate analytic accounts clearly, you will follow three use
cases, each in one of three different types of company:
1. Industrial company: Costs Analyse
2. Law Firm: reinvoice spent hours
3. IT/Services Company: performance analysis
Case 1: Industrial company: Costs Analyse
-----------------------------------------
In industry, you will often find analytic charts of accounts structured
into departments and products the company itself is built on.
The objective is to examine the costs, sales and margins by
department/resources and by product. The first level of the structure
comprises the different departments, and the lower levels represent the
product ranges the company makes and sells.
**Analytic Chart of Accounts for an Industrial Manufacturing Company**:
1. Marketing Department
2. Commercial Department
3. Administration Department
4. Production Range 1
5. Production Range 2
In daily use, it is useful to mark the analytic account on each purchase
invoice. When the invoice is approved, it will
automatically generate the entries for both the general and the
corresponding analytic accounts. For each entry on the general
accounts, there is at least one analytic entry that allocates costs to
the department which incurred them.
Here is a possible breakdown of some general accounting entries for the
example above, allocated to various analytic accounts:
+---------------------------------------+-----------+---------+----------+----+-------------------------+----------+
| **General accounts** | | | | | **Analytic accounts** | |
+=======================================+===========+=========+==========+====+=========================+==========+
| **Title** |**Account**|**Debit**|**Credit**| | **Account** |**Value** |
+---------------------------------------+-----------+---------+----------+----+-------------------------+----------+
| Purchase of Raw Material | 2122 | 1500 | | | Production Range 1 | -1 500 |
+---------------------------------------+-----------+---------+----------+----+-------------------------+----------+
| Subcontractors | 2122 | 450 | | | Production Range 2 | -450 |
+---------------------------------------+-----------+---------+----------+----+-------------------------+----------+
| Credit Note for defective materials | 2122 | | 200 | | Production Range 1 | 200 |
+---------------------------------------+-----------+---------+----------+----+-------------------------+----------+
| Transport charges | 2122 | 450 | | | Production Range 1 | -450 |
+---------------------------------------+-----------+---------+----------+----+-------------------------+----------+
| Staff costs | 2121 | 10000 | | | Marketing | -2 000 |
+---------------------------------------+-----------+---------+----------+----+-------------------------+----------+
| | | | | | Commercial | -3 000 |
+---------------------------------------+-----------+---------+----------+----+-------------------------+----------+
| | | | | | Administrative | -1 000 |
+---------------------------------------+-----------+---------+----------+----+-------------------------+----------+
| | | | | | Production Range 1 | -2 000 |
+---------------------------------------+-----------+---------+----------+----+-------------------------+----------+
| | | | | | Production Range 2 | -2 000 |
+---------------------------------------+-----------+---------+----------+----+-------------------------+----------+
| PR | 2122 | 450 | | | Marketing | -400 |
+---------------------------------------+-----------+---------+----------+----+-------------------------+----------+
The analytic representation by department enables you to investigate the
costs allocated to each department in the company. The analytic chart of
accounts shows the distribution of the company's costs using the example above:
.. image:: usage/usage02.png
:align: center
In this example of a hierarchical structure in Odoo, you can analyse not
only the costs of each product range, but also the costs of the whole
production. A report that relates both general accounts and analytic
accounts enables you to get a breakdown of costs within a given
department.
.. image:: usage/usage03.png
:align: center
The examples above are based on a breakdown of the costs of the company.
Analytic allocations can be just as effective for sales. That gives you
the profitability (sales - costs) of different departments.
This analytic representation by department is generally used by trading
companies and industries.
A variantion of this, is not to break it down by sales and marketing
departments, but to assign each cost to its corresponding product range.
This will give you an analysis of the profitability of each product
range.
Choosing one over the other depends on how you look at your marketing
effort. Is it a global cost allocated in some general way, or is each
product range responsible for its own marketing costs?
Case 2: Law Firm: costs of human resources?
-------------------------------------------
Law firms generally adopt management by case, where each case represents
a current client file. All of the expenses and products are then
attached to a given file/analytic account.
A principal preoccupation of law firms is the invoicing of hours worked,
and the profitability by case and by employee.
Mechanisms used for encoding the hours worked will be covered in detail
in timesheet documentation. Like most system processes, hours worked are
integrated into the analytic accounting. In the employee form, specify
the cost of the employee. The hourly charge is a function of the
employee's cost.
So a law firm will opt for an analytic representation which reflects the
management of the time that employees work on the different customer
cases.
Billing for the different cases is a bit unusual. The cases do not match
any entry in the general account nor do they come from purchase or sales
invoices. They are represented by the various analytic operations and do
not have exact counterparts in the general accounts. They are calculated
on the basis of the hourly cost per employee.
At the end of the month when you pay salaries and benefits, you
integrate them into the general accounts but not in the analytic
accounts, because they have already been accounted for in billing each
account. A report that relates data from the analytic and general
accounts then lets you compare the totals, so you can readjust your
estimates of hourly cost per employee depending on the time actually
worked.
The following table shows an example of different analytic entries that
you can find for your analytic account:
+--------------------------------+------------------+--------------+----+----------------------------+-------------+--------------+
| **Title** | **Account** | **Amount** | | **General Account** | **Debit** | **Credit** |
+================================+==================+==============+====+============================+=============+==============+
| Study the file (1 h) | Case 1.1 | -15 | | | | |
+--------------------------------+------------------+--------------+----+----------------------------+-------------+--------------+
| Search for information (3 h) | Case 1.1 | -45 | | | | |
+--------------------------------+------------------+--------------+----+----------------------------+-------------+--------------+
| Consultation (4 h) | Case 2.1 | -60 | | | | |
+--------------------------------+------------------+--------------+----+----------------------------+-------------+--------------+
| Service charges | Case 1.1 | 280 | | 705 Billing services | | 280 |
+--------------------------------+------------------+--------------+----+----------------------------+-------------+--------------+
| Stationery purchase | Administrative | -42 | | 601 Furniture purchase | 42 | |
+--------------------------------+------------------+--------------+----+----------------------------+-------------+--------------+
| Fuel Cost -Client trip | Case 1.1 | -35 | | 613 Transports | 35 | |
+--------------------------------+------------------+--------------+----+----------------------------+-------------+--------------+
| Staff salaries | | | | 6201 Salaries | | 3 000 |
+--------------------------------+------------------+--------------+----+----------------------------+-------------+--------------+
Such a structure allows you to make a detailed study of the
profitability of various transactions.
For more details about profitablity, please read the following document:
:doc:`timesheets`
But analytical accounting is not limited to a simple analysis of the
profitability of different customer. The same data can be used for
automatic recharging of the services to the customer at the end of the
month. To invoice customers, just link the analytic account to a sale
order and sell products that manage timesheet or expenses .
Case 3: IT Services Company: performance analysis
-------------------------------------------------
Most IT service companies face the following problems:
- project planning,
- invoicing, profitability and financial follow-up of projects,
- managing support contracts.
To deal with these problems, you would use an analytic chart of accounts
structured by project and by sale order.
The management of services, expenditures and sales is similar to that
presented above for lawyers. Invoicing and the study of profitability
are also similar.
But now look at support contracts. These contracts are usually limited
to a prepaid number of hours. Each service posted in the analytic
accounts shows the remaining hours of support. To manage support
contracts, you would create a product configured to invoice on order and
link the sale order to an analytic account
In Odoo, each analytic line lists the number of units sold or used, as
well as what you would usually find there the amount in currency units
(USD or GBP, or whatever other choice you make). So you can sum the
quantities sold and used on each sale order to determine whether any
hours of the support contract remain.
Conclusion
----------
Analytic accounting helps you to analyse costs and revenues whatever the
use case. You can sell or purchase services, track time or analyse the
production performance.
Analytic accounting is flexible and easy to use through all Odoo
applications (sales, purchase, timesheet, production, invoice, …).

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@@ -1,131 +0,0 @@
===================
Analytic accounting
===================
Analytic accounting helps you track costs and revenues, as well as analyze the profitability of a
project or service. When creating your journal entries, the analytic widget allows the distribution
of costs in one or more analytic accounts.
Configuration
=============
Enable the :guilabel:`Analytic Accounting` feature by going to :menuselection:`Accounting -->
Configuration --> Settings --> Analytics`.
Analytic accounts
=================
The analytic accounts give an overview of your costs and revenue.
Access your existing analytic accounts by going to :menuselection:`Accounting --> Configuration -->
Analytic Accounting: Analytic Accounts`. To create a new analytic account, click :guilabel:`New`,
and fill in the required information:
- :guilabel:`Analytic Account`: add the name of your analytic account;
- :guilabel:`Customer`: select the customer related to your project;
- :guilabel:`Reference`: add a reference to make it easier to find the account when you are on your
bill;
- :guilabel:`Plan`: add an :ref:`analytic plan <analytic_accounting/analytic_plans>`;
- :guilabel:`Company`: if you are managing multiple companies, select the company for which the
analytic account will be used;
- :guilabel:`Currency`: select the currency of the analytic account;
Then, fill in your :doc:`budget <adviser/budget>` information.
.. _analytic_accounting/analytic_plans:
Analytic plans
==============
The analytic plans allow you to analyze your accounting. For example, to track costs and revenues by
project or department.
You can access the analytic plans by going to :menuselection:`Accounting --> Configuration -->
Analytic Accounting: Analytic Plans`. Click :guilabel:`New` to create a new plan.
.. image:: analytic_accounting/analytic_plans.png
:align: center
:alt: create an analytic plan
The following information must be completed:
- :guilabel:`Parent`: link your plan to another :guilabel:`Analytic Plan` to build a hierarchy
between your plans;
- :guilabel:`Default Applicability`: decide how your plan behaves in the widget when creating a new
journal entry:
- :guilabel:`Optional`: if selected, it is not mandatory to add the analytic plan in the widget;
- :guilabel:`Mandatory`: if selected, an orange bullet is visible in the widget next to the plan
until the analytic distribution is done (the bullet then turns to green); it is not possible to
confirm the entry if no analytic account is selected;
- :guilabel:`Unavailable`: if selected, the plan is not available in the widget.
- :guilabel:`Color`: select the color of the tag related to this specific plan;
- :guilabel:`Company`: add the company to which the plan applies;
You can also fine-tune your plans' applicability by filling in the :guilabel:`Applicability` tab:
- :guilabel:`Domain`: choose to which accounting document your plan applies;
- :guilabel:`Financial Accounts Prefix`: select the prefix of the account(s) to which this plan
should be applied;
- :guilabel:`Product Category`: decide to which product category the plan applies;
- :guilabel:`Applicability`: decide how your plan behaves in the widget when creating a new journal
entry. The applicability you set here always overrides the default applicability.
Two smart buttons are available in the top-right corner:
- :guilabel:`Subplans`: can be created to have a more complex analytic structure. Click the
:guilabel:`Subplans` smart button, and then :guilabel:`New` to add a subplan;
- :guilabel:`Analytic Accounts`: to reach the analytic accounts related to the plan.
.. note::
- The analytic widget is prefilled based on the applicability, and the
:ref:`Analytic Distribution Models <analytic_distribution_models>`;
- Each analytic plan must have at least one analytic account.
Analytic distribution
=====================
Add a plan in the :guilabel:`Analytic` column when creating an invoice or bill. This field is
mandatory only if you previously linked your analytic plan to at least one analytic account. After
adding the plan, a **widget** opens where you can fill in the different information. You can add
**tags** to reflect the related analytic accounts and decide how to split the costs between the
accounts by modifying the percentage.
.. image:: analytic_accounting/analytic_distribution.png
:align: center
:alt: create a distribution template
.. _analytic_distribution_models:
Analytic distribution models
----------------------------
The analytic distribution models automatically apply a specific distribution based on defined
criteria.
To create a new analytic distribution model, go to :menuselection:`Accounting --> Configuration -->
Analytic Distribution Models`, click :guilabel:`New` and set the conditions your model has to meet
to automatically apply:
- :guilabel:`Accounts Prefix`: this analytic distribution will apply to all financial accounts
sharing the prefix specified;
- :guilabel:`Partner`: select a partner for which the analytic distribution will be used;
- :guilabel:`Partner Category`: this field is not visible by default: add it by clicking on the
columns selection button, and tick the :guilabel:`Partner Category` box. Add the partner category
for which the analytic distribution will be used;
- :guilabel:`Product`: select a product for which the analytic distribution will be used;
- :guilabel:`Product Category`: this field is not visible by default: add it by clicking on the
columns selection button, and tick the :guilabel:`Product Category` box. Select a product category
for which the analytic distribution will be used;
- :guilabel:`Analytic`: add the analytic accounts and their distribution;
- :guilabel:`Company`: select a company for which the analytic distribution will be used;
- :guilabel:`Analytic Distribution`: if the above conditions are met, the :guilabel:`Analytic plan`
defined in this field as well as the distribution to be applied between the different analytic
accounts is selected automatically on the entry.
.. tip::
To **mass edit** several entries simultaneously, go to :menuselection:`Accounting --> Accounting
--> Journal items`, and select the ones that need to be updated. Add the required distribution in
the :guilabel:`Analytic Distribution` column, and click on the :guilabel:`floppy disk` icon to
save. The analytic distribution template pops up, and you can save it for later use.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -13,7 +13,7 @@ your company, or your company has an outstanding debit with a vendor. You can us
amounts to reduce unpaid invoices/bills.
.. seealso::
- :doc:`Internal transfers <../../bank/interbank>`
- :doc:`Internal transfers <../../bank/misc/interbank>`
- :doc:`../../bank/reconciliation/use_cases`
- `Odoo Tutorials: Bank Configuration
<https://www.odoo.com/slides/slide/bank-configuration-1880>`_

View File

@@ -2,229 +2,27 @@
Intrastat
=========
Intrastat is the data collection and statistics production system for goods traded among EU member
states. It collects data on:
**Intrastat** is the system for data collection and statistic production of goods traded among the
EU Member States. Organizations whose annual trade surpasses a certain threshold must provide data
about the goods traded with other EU countries.
- Commercial transactions of goods for use, consumption, investment, or resale with ownership
transfer;
- Goods movements without transfer of ownership (e.g., stock relocations or moves of goods
before or after outsourced production or processing, and after maintenance or repair);
- Returns of goods.
.. seealso::
- `Eurostat Statistics Explained - Glossary: Intrastat
<https://ec.europa.eu/eurostat/statistics-explained/index.php?title=Glossary:Intrastat>`_
.. note::
Although the Intrastat system continues to be used, the term Intrastat is not used in the `latest
legislation <http://data.europa.eu/eli/reg/2019/2152/2022-01-01>`_, referring instead to
*intra-Union trade in goods statistics*.
As of January 1, 2022, the reporting requirements have changed. One main modification concerns
the transaction codes which are now switching to a 2-digits format. All transactions recorded
after this date have to follow the new systems rules.
.. seealso::
`Eurostat Statistics Explained - Glossary: Intrastat
<https://ec.europa.eu/eurostat/statistics-explained/index.php?title=Glossary:Intrastat>`_
Configuration
=============
.. _intrastat/general-configuration:
General configuration
=====================
Enable the Intrastat report by going to :menuselection:`Accounting --> Configuration --> Settings`.
Under the :guilabel:`Customer Invoices` section, tick :guilabel:`Intrastat` and then
:guilabel:`Save`.
Go to :menuselection:`Accounting --> Settings --> Customer Invoices`, then enable **Intrastat** and
*Save*. Once the Intrastat has been activated you are able to choose the **Default incoterm**.
.. important::
If your Odoo database was created before **January 13, 2022**, first :ref:`upgrade
<general/upgrade>` the `account_intrastat` module to add the new transaction codes and
:ref:`install <general/install>` the `account_intrastat_expiry` module to archive the old codes.
.. _intrastat/default-transaction-codes:
Default transaction codes: invoice and refund
---------------------------------------------
You can set a default :ref:`transaction code <intrastat/transaction-code>` for all newly created
invoice and refund transactions. Under :menuselection:`Accounting --> Configuration --> Settings`,
select a :guilabel:`Default invoice transaction code` and/or a :guilabel:`Default refund transaction
code` and then :guilabel:`Save`. The code will be set automatically on all respective invoice lines.
.. _intrastat/default-incoterm:
Default Incoterm rule
---------------------
You can set a default :ref:`Incoterm rule <intrastat/incoterm>` to automatically populate the
Incoterm field on all newly created invoices and bills. Under :menuselection:`Accounting -->
Configuration --> Settings`, select the company's :guilabel:`Default Incoterm` and then
:guilabel:`Save`.
.. _intrastat/region-code:
Region code
-----------
The region code is **only used by Belgian companies**. Under :menuselection:`Accounting -->
Configuration --> Settings`, select the :guilabel:`Company Intrastat Region` where the company is
located and then :guilabel:`Save`.
.. tip::
If your warehouses are located in more than one region, you can define the region code at the
level of each warehouse instead. To do so, go to :menuselection:`Inventory --> Configuration -->
Warehouses`, select a warehouse, set its :guilabel:`Intrastat region`, and then :guilabel:`Save`.
.. image:: intrastat/warehouse-region.png
:align: center
:alt: Adding the Intrastat region to a warehouse
.. _intrastat/product-configuration:
Product configuration
=====================
All products must be properly configured to be included in the Intrastat report.
.. _intrastat/commodity-code:
Commodity code
--------------
Commodity codes are internationally recognized reference numbers used to classify goods depending on
their **nature**. Intrastat uses the `Combined Nomenclature <https://taxation-customs.ec.europa.eu/customs-4/calculation-customs-duties/customs-tariff/combined-nomenclature_en>`_.
To add a commodity code, go to :menuselection:`Accounting --> Customers --> Products` and select a
product. Under the :guilabel:`Accounting` tab, set the product's :guilabel:`Commodity Code`.
.. seealso::
`National Bank of Belgium - Intrastat commodity codes
<https://www.nbb.be/en/statistics/foreign-trade/nomenclature-and-codes>`_
.. _intrastat/quantity:
Quantity: weight and supplementary unit
---------------------------------------
Depending on the nature of the goods, it is necessary to specify either the product's weight in
kilos (without packaging) or the product's supplementary unit, such as square meter (`m2`), number
of items (`p/st`), liter (`l`), or gram (`g`).
To add a product's weight or supplementary unit, go to :menuselection:`Accounting --> Customers -->
Products` and select a product. Under the :guilabel:`Accounting` tab, depending on the commodity
code set, either fill in the product :guilabel:`Weight` or its :guilabel:`Supplementary Units`.
.. _intrastat/origin-country:
Country of origin
-----------------
To add the product's country of origin, go to :menuselection:`Accounting --> Customers --> Products`
and select a product. Under the :guilabel:`Accounting` tab, set the :guilabel:`Country of Origin`.
.. _intrastat/invoice-bill-configuration:
Invoices and bills configuration
================================
Once products are properly configured, several settings must be configured on the invoices and bills
you create.
.. _intrastat/transaction-code:
Transaction code
----------------
Transaction codes are used to identify a transaction's nature. :ref:`Default transaction codes
<intrastat/default-transaction-codes>` can be set for invoice and refund transactions.
To set a transaction code on an invoice line, create an invoice or a bill, click the columns
selection button, tick :guilabel:`Intrastat`, and use the newly-added :guilabel:`Intrastat` column
to select a transaction code.
.. image:: intrastat/intrastat-column.png
:align: center
:alt: Adding the Intrastat column to an invoice or bill
.. seealso::
`National Bank of Belgium - Intrastat: Nature of transactions from January 2022
<https://www.nbb.be/doc/dd/onegate/data/new_natures_of_transaction_2022_en.pdf>`_
.. _intrastat/incoterm:
Incoterm rule
-------------
Incoterms are 11 internationally recognized rules defining the responsibilities of sellers and
buyers, specifying who is responsible for paying and managing the shipment, insurance,
documentation, customs clearance, and other logistical activities. A :ref:`default Incoterm
<intrastat/default-incoterm>` can be set for all invoices and bills.
To set the Incoterm manually, create an invoice or a bill, click the :guilabel:`Other Info` tab, and
select the :guilabel:`Incoterm`.
.. seealso::
`Wikipedia: Incoterms <https://en.wikipedia.org/wiki/Incoterms>`_
.. _intrastat/partner-country:
Partner country
---------------
The partner country represents the vendor's country for bills and the customer's country for
invoices. It is automatically filled in using the country set in the contact's :guilabel:`Country`
field.
To edit the partner country manually, create an invoice or a bill, click the :guilabel:`Other Info`
tab, and select the :guilabel:`Intrastat Country`.
.. _intrastat/transport-code:
Transport code
--------------
The transport code identifies the presumed **mode of transport** used to send the goods (arrival or
dispatch).
To add the transport code, create an invoice or a bill, go to the :guilabel:`Other info` tab,
and select the :guilabel:`Intrastat Transport Mode`.
.. _intrastat/value:
Value of the goods
------------------
The value of a good is the untaxed :guilabel:`Subtotal` (:guilabel:`Price` multiplied by
:guilabel:`Quantity`) of an invoice line.
.. _intrastat/partner:
Partner configuration
=====================
Two fields from the partner's contact form are used with Intrastat: :guilabel:`VAT` and
:guilabel:`Country`. The country can be :ref:`manually set <intrastat/partner-country>` on the
invoice or bill.
Generate the Intrastat report
=============================
Generate the report by going to :menuselection:`Accounting --> Reporting --> Audit Reports:
Intrastat Report`. It is automatically computed based on the :ref:`default configuration
<intrastat/general-configuration>` and the information found on the :ref:`products
<intrastat/product-configuration>`, :ref:`invoices and bills
<intrastat/invoice-bill-configuration>`, and :ref:`partners <intrastat/partner>`.
Export the report as a PDF, XLSX, or XML file to post it to your legal administration.
Each report line refers to a single invoice line and contains the following information:
- Invoice or bill reference number;
- System, which is a code automatically generated depending on whether the document is an invoice
(dispatch) or a bill (arrival);
- :ref:`Country <intrastat/partner-country>`, which is the vendor's country for arrivals and the
customer's country for dispatches;
- :ref:`Transaction Code <intrastat/transaction-code>`;
- (If your company is located in Belgium) :ref:`Region Code <intrastat/region-code>`;
- :ref:`Commodity Code <intrastat/commodity-code>`;
- :ref:`Origin Country <intrastat/origin-country>`;
- :ref:`Partner VAT <intrastat/partner>`;
- :ref:`Transport Code <intrastat/transport-code>`;
- :ref:`Incoterm Code <intrastat/incoterm>`;
- :ref:`Weight <intrastat/quantity>`;
- :ref:`Supplementary Units <intrastat/quantity>`; and
- :ref:`Value <intrastat/value>`, which is always expressed in euros even if the original invoice or
bill used another currency.
If you created your Odoo database prior to **January 13, 2022**, please :ref:`upgrade
<general/upgrade>` the ``account_intrastat`` module to add the new transaction codes and
:ref:`install <general/install>` the ``account_intrastat_expiry`` module to archive the old
codes.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -61,6 +61,7 @@ POS.
- On a certified POS, you cannot:
- Make a refund.
- Set up and use the **global discounts** feature (the `pos_discount` module is blacklisted and
cannot be activated).
- Set up and use the **loyalty programs** feature (the `pos_loyalty` module is blacklisted and
@@ -75,9 +76,9 @@ POS.
and set to a :guilabel:`Rounding Precision` of `0,05` and a :guilabel:`Rounding Method` set as
:guilabel:`Half-Up`.
- Taxes must be set as included in the price. To set it up, go to :menuselection:`Point of Sale -->
Configuration --> Settings`, and from the :guilabel:`Accounting` section, open the
:guilabel:`Default Sales Tax` form by clicking the arrow next to the default sales tax field.
There, click :guilabel:`Advanced Options` and enable :guilabel:`Included in Price`.
Configuration --> Settings`, and from the :guilabel:`Taxes` section, open the :guilabel:`Default
Sales Tax` form by clicking the arrow next to the default sales tax field. There, click
:guilabel:`Advanced Options` and enable :guilabel:`Included in Price`.
- At the start of a POS session, users must click :guilabel:`Work in` to clock in. Doing so allows
the registration of POS orders. If users are not clocked in, they cannot make POS orders.
Likewise, they must click :guilabel:`Work Out` to clock out at the end of the session.
@@ -128,7 +129,7 @@ Once the module is activated, add your VAT number to your company information. T
:menuselection:`Settings --> Companies --> Update Info`, and fill in the :guilabel:`VAT` field.
Then, enter a national registration number for every staff member who operates the POS system. To do
so, go to the :guilabel:`Employees` app and open an employee form. There, go to :menuselection:`HR
settings tab --> Attendance/Point of Sale`, and fill in the :guilabel:`INSZ or BIS number` field.
settings tab --> Attendance`, and fill in the :guilabel:`INSZ or BIS number` field.
.. image:: belgium/bis-number.png
:align: center

View File

@@ -1,36 +1,37 @@
============================================
Configure DNS records to send emails in Odoo
============================================
=======================
Send an email with Odoo
=======================
SPAM labels overview
====================
Use an email domain in Odoo
===========================
Sometimes, emails from Odoo are misclassified by the different email providers and end up in spam
folders. At the moment, some settings are out of Odoo's control, notably the way the different email
providers classify Odoo's emails according to their own restriction policy and/or limitations.
Documents in Odoo (such as a CRM opportunity, a sales order, an invoice, etc.) have a discussion
thread, called *chatter*.
It is standard in Odoo that emails are received from ``"name of the author"
<notifications@mycompany.odoo.com>``. In other words this can be translated to: ``"name of the
author" <{ICP.mail.from.filter}@{mail.catchall.domain}>``. In this case ICP stands for
`ir.config.parameters`, which are the System Parameters. Deliverability is greatly improved with the
:ref:`notifications configuration <email_servers/notifications>`.
When a database user posts a message in the chatter, this message is sent by email to the followers
of the document. If a follower replies to the message, the reply updates the chatter, and Odoo
relays the reply to the followers as a notification.
In order for servers to accept emails from Odoo on a more regular basis, one of the solutions is
for customers to create rules within their own mailbox. A filter can be added to the email inbox so
that when email is received from Odoo (`notifications@mycompany.odoo.com`) it is moved to the
inbox. It is also possible to add the Odoo database domain onto a safe senders list or whitelist
on the receiving domain.
Messages sent in the chatter from internal database users to external users (such as partners,
customers, or vendors) are relayed on behalf of the database users. Messages sent back to the
chatter from external users will appear in the chatter from their respective email addresses, or as
they are listed in their Contacts record.
If an Odoo email server appears on a blacklist, notify Odoo via a `new help ticket
<https://www.odoo.com/help>`_ and the support team will work to get the servers removed from the
blacklist.
If the Odoo database is hosted on the cloud (Odoo Online or Odoo.sh), it is not necessary to add an
outgoing email server to send emails from a custom domain.
Should the Odoo database be using a custom domain for sending emails from Odoo there are three
records that should be implemented on the custom domain's DNS to ensure deliverability of email.
This includes setting records for :abbr:`SPF (Sender Policy Framework)`,
:abbr:`DKIM (DomainKeys Identified Mail)` and
:abbr:`DMARC (Domain-based Message Authentication, Reporting, & Conformance)`. Ultimately though,
it is up to the discretion of the final receiving mailbox.
.. important::
The Odoo server is subject to a daily email limit to prevent abuse. The default limit is 200
emails sent per day for databases with an **Enterprise** subscription. This limit can be
increased under certain conditions. See the :doc:`FAQ <faq>` or contact support for more
information.
To ensure that emails sent to and from the chatter reach their intended contacts, instead of being
considered spam, Odoo recommends configuring the domain name.
For the same reason, Odoo also recommends giving each database user an email address from the
configured domain, rather than a generic email address domain (such as gmail.com, outlook.com,
etc.).
.. _email_communication/spf_compliant:
@@ -39,23 +40,27 @@ Be SPF compliant
The Sender Policy Framework (SPF) protocol allows the owner of a domain name to specify which
servers are allowed to send emails from that domain. When a server receives an incoming email,
it checks whether the IP address of the sending server is on the list of allowed IPs according to
the sender's :abbr:`SPF (Sender Policy Framework)` record.
it checks if the IP address of the sending server is on the list of allowed IPs according to the
sender's :abbr:`SPF (Sender Policy Framework)` record.
.. note::
The :abbr:`SPF (Sender Policy Framework)` verification is performed on the domain mentioned in
the `Return-Path` field of the email. In the case of an email sent by Odoo, this domain
corresponds to the value of the `mail.catchall.domain` key in the database system parameters.
See the :ref:`documentation on incoming emails <email_communication/inbound_messages>`.
The :abbr:`SPF (Sender Policy Framework)` policy of a domain is set using a TXT record. The way to
create or modify a TXT record depends on the provider hosting the :abbr:`DNS (Domain Name System)`
zone of the domain name. In order for the verification to work properly, each domain can only have
one :abbr:`SPF (Sender Policy Framework)` record.
If the domain name does not yet have a :abbr:`SPF (Sender Policy Framework)` record, create one
using the following input: `v=spf1 include:_spf.odoo.com ~all`
If the domain name does not yet have an :abbr:`SPF (Sender Policy Framework)` record, the content
of the record to create it is as follows:
If the domain name already has a :abbr:`SPF (Sender Policy Framework)` record, the record must be
`v=spf1 include:_spf.odoo.com ~all`
If the domain name already has an :abbr:`SPF (Sender Policy Framework)` record, the record must be
updated (and do not create a new one).
.. example::
@@ -106,11 +111,6 @@ Conformance)` record of a domain name tell the destination server what to do wit
that fails the :abbr:`SPF (Sender Policy Framework)` and/or :abbr:`DKIM (DomainKeys Identified
Mail)` check.
.. example::
DMARC: TXT record
`v=DMARC1; p=none;`
There are three :abbr:`DMARC (Domain-based Message Authentication, Reporting, & Conformance)`
policies:
@@ -118,15 +118,15 @@ policies:
- `p=quarantine`
- `p=reject`
`p=quarantine` and `p=reject` instruct the server that receives an email to quarantine that email or
ignore it if the :abbr:`SPF (Sender Policy Framework)` and/or :abbr:`DKIM (DomainKeys Identified
`p=quarantine` and `p=reject` instruct the server that receives an email to quarantine that email
or ignore it if the :abbr:`SPF (Sender Policy Framework)` and/or :abbr:`DKIM (DomainKeys Identified
Mail)` check fails.
If the domain name uses :abbr:`DMARC (Domain-based Message Authentication, Reporting, &
Conformance)` and has defined one of these policies, the domain must be :abbr:`SPF (Sender Policy
Framework)` compliant or enable :abbr:`DKIM (DomainKeys Identified Mail)`.
.. warning::
.. danger::
Yahoo or AOL are examples of email providers with a :abbr:`DMARC (Domain-based Message
Authentication, Reporting, & Conformance)` policy set to `p=reject`. Odoo strongly advises
against using an *@yahoo.com* or *@aol.com* address for the database users. These emails will
@@ -136,55 +136,16 @@ Framework)` compliant or enable :abbr:`DKIM (DomainKeys Identified Mail)`.
should not impact the deliverability if the :abbr:`DMARC (Domain-based Message Authentication,
Reporting, & Conformance)` check fails.
:abbr:`DMARC (Domain-based Message Authentication, Reporting, & Conformance)` records are comprised
of tags in the form of :abbr:`DNS (Domain Name System)` records. These tags/parameters allow for
reporting, such as :abbr:`RUA (Reporting URI of aggregate reports)` and :abbr:`RUF (Reporting URI
for forensic reports)`, along with more precise specification like :abbr:`PCT (Percentage of
messages subjected to filtering)`, :abbr:`P (Policy for organizational domain)`, :abbr:`SP (Policy
for subdomains of the OD)` :abbr:`ADKIM (Alignment mode for DKIM)` & :abbr:`ASPF (Alignment mode for
SPF)`. For best practice, the the :abbr:`DMARC (Domain-based Message Authentication, Reporting, &
Conformance)` policy should not start out being too restrictive.
The following chart displays available tags:
.. list-table::
:header-rows: 1
:widths: 15 50 35
* - Tag Name
- Purpose
- Example
* - v
- Protocol version
- `v=DMARC1`
* - pct
- Percentage of messages subjected to filtering
- `pct=20`
* - ruf
- Reporting URI for forensic reports
- `ruf=mailto:authfail@example.com`
* - rua
- Reporting URI of aggregate reports
- `rua=mailto:aggrep@example.com`
* - p
- Policy for organizational domain
- `p=quarantine`
* - sp
- Policy for subdomains of the OD
- `sp=reject`
* - adkim
- Alignment mode for DKIM
- `adkim=s`
* - aspf
- Alignment mode for SPF
- `aspf=r`
Check the :abbr:`DMARC (Domain-based Message Authentication, Reporting, & Conformance)` record of a
domain name with a tool like `MXToolbox DMARC <https://mxtoolbox.com/DMARC.aspx>`_.
.. seealso::
`DMARC.org is another great resource to learn about DMARC records.
<https://dmarc.org/overview/>`_
If a partner, customer, or vendor, uses :abbr:`DMARC (Domain-based Message Authentication,
Reporting, & Conformance)` and has defined one of these policies, the Odoo server cannot relay
emails from this partner to the database users.
To solve this issue, :ref:`handle user notifications in Odoo
<discuss_app/notification_preferences>`, or replace the email address of the partner with a default
email address.
.. _email_communication/SPFDKIM_common_providers:
@@ -204,7 +165,30 @@ SPF, DKIM & DMARC documentation of common providers
To fully test the configuration, use the `Mail-Tester <https://www.mail-tester.com/>`_ tool, which
gives a full overview of the content and configuration in one sent email. Mail-Tester can also be
used to configure records for other, lesser-known providers.
used for other, lesser-known providers.
.. seealso::
`Using Mail-Tester to set SPF Records for specific carriers <https://www.mail-tester.com/spf/>`_
.. _email_communication/default:
Use a default email address
===========================
Access the :guilabel:`System Parameters` by activating :ref:`developer mode <developer-mode>` and
going to :menuselection:`Settings --> Technical --> Parameters --> System Parameters` menu.
To force the email address from which emails are sent, a combination of the following keys needs to
be set in the system parameters of the database:
- `mail.default.from`: accepts the local part or a complete email address as value
- `mail.default.from_filter`: accepts a domain name or a full email address as value
.. note::
The `mail.default.from_filter` works only for `odoo-bin` configurations, otherwise this
parameter can be set using the `from_filter` field on `ir.mail_server`.
If the email address of the author does not match `mail.default.from_filter`, the email address is
replaced by `mail.default.from` (if it contains a full email address) or a combination of
`mail.default.from` and `mail.catchall.domain`.
If the `from_filter` contains a full email address, and if the `mail.default.from` is the same as
this address, then all of the email addresses that are different from `mail.default.from` will be
encapsulated in `mail.default.from`.

View File

@@ -6,81 +6,87 @@ Odoo Online or Odoo.sh users
============================
Since **Odoo sets up its own mail servers for the database**, outgoing and incoming emails already
work out-of-the-box. So for **Odoo Online** and **Odoo.sh** customers, nothing needs to be
configured!
work out-of-the-box. So for **Odoo Online** and **Odoo.sh** customers, nothing needs to be done!
Unless an external mail server is required to send large batches of mass emails, simply use the
standard online Odoo database normally since it has already been pre-configured to send email.
.. important::
The Odoo server is subject to a daily email limit to prevent abuse. The default limit is 200
emails sent per day for databases with an **Enterprise** subscription. This limit can be
increased under certain conditions. See the :doc:`FAQ <faq>` or contact support for more
information.
Unless an external mail server is required to send large batches of mass mailing, simply use the
standard online Odoo database normally since it has already been preconfigured for email.
Scope of this documentation
===========================
This document is **mainly dedicated to Odoo on-premise databases** who don't benefit from an
This document is **mainly dedicated to Odoo on-premise users** who don't benefit from an
out-of-the-box solution to send and receive emails in Odoo, unlike `Odoo Online <https://www.odoo.
com/trial>`_ and `Odoo.sh <https://www.odoo.sh>`_. Incoming and outgoing servers must be configured
for on-premise databases.
com/trial>`_ and `Odoo.sh <https://www.odoo.sh>`_.
The following sections below contain information on how to integrate an external email server with
Odoo.
.. warning::
If no one in the company is employed to manage email servers, Odoo Online and Odoo.sh are
strongly recommended. In these Odoo hosting types email sending and receiving works instantly
and is monitored by professionals. Nevertheless, a company can use their own email server if
they want to manage the email server's reputation themselves. For more information see
:doc:`Configure DNS records to send emails in Odoo <email_domain>`
If no one in the company is used to managing email servers, Odoo Online and Odoo.sh are strongly
recommended. Those Odoo hosting types' email systems work instantly and are monitored by
professionals. Nevertheless, a company can use their own email server if they want to manage the
email server's reputation themselves.
.. _email_servers/notifications:
Default notifications system
============================
Documents in Odoo (such as a CRM opportunity, a sales order, an invoice, etc.) have a discussion
thread, called *chatter*.
When a database user posts a message in the chatter, this message is sent by email to the followers
of the document as a notification (except to the sender). If a follower replies to the message,
the reply updates the chatter, and Odoo relays another reply to the followers as a notification.
Messages sent back to the chatter from users or external users will appear in the chatter from
their respective email, or as the name listed in their *Contacts* record.
These notifications are sent using a default from address. For more information see
:ref:`Use a default email address <email_communication/default>`.
.. note::
Office 365 email servers don't easily allow the sending of external emails from hosts like Odoo.
Refer to `Microsoft's documentation <https://support.office.com/en-us/article/How-to-set-up-a-
multifunction-device-or-application-to-send-email-using-Office-365-69f58e99-c550-4274-ad18-
c805d654b4c4>`_ to make it work.
Manage outbound messages
========================
As a system admin, go to :menuselection:`Settings --> General Settings --> Discuss` in Odoo, and
enable the :guilabel:`Custom Email Servers` option. Then, click :guilabel:`Save`. Next, click
:guilabel:`Outgoing Email Servers` and click :guilabel:`Create` to create a new outgoing mail server
record in Odoo. Reference the SMTP data of the external email server. Once all the information has
been filled out, click :guilabel:`Test Connection`.
enable the :guilabel:`External Email Servers` option. Then, click :guilabel:`Save`. Next, click
:guilabel:`Outgoing Email Servers` and click :guilabel:`Create` to create a new outgoing mail
server record in Odoo. Reference the SMTP data of the external email server. Once all the
information has been filled out, click :guilabel:`Test Connection`.
.. seealso::
- :doc:`/administration/maintain/google_oauth`
- :doc:`/administration/maintain/azure_oauth`
Here is a typical configuration for a G Suite server.
.. image:: email_servers/outgoing-server.png
:align: center
:alt: The typical G Suite configuration on Odoo.
Then, go back to :menuselection:`Settings --> General Settings --> Discuss` and set the email
domain name in the :guilabel:`Alias Domain` name. Finally, click :guilabel:`Save` to finish setting
up the email server.
.. note::
Ensuring the outgoing domain has :abbr:`SPF (Sender Policy Framework)`, :abbr:`DKIM (DomainKeys
Identified Mail)` and :abbr:`DMARC (Domain-based Message Authentication, Reporting, &
Conformance)` set up on the :abbr:`DNS (Domain Name System)` will improve deliverability. For
more information see :doc:`email_domain`.
If an `[AUTHENTICATION FAILED] Invalid credentials (Failure)` warning appears when
:guilabel:`Test Connection` is clicked for a Gmail address, activate the :guilabel:`Less secure
app access` option. A direct link can be `accessed here <https://myaccount.google.com/
lesssecureapps?pli=1>`_.
In addition to that, enable the :guilabel:`IMAP setting` on the Gmail account.
Use an Office 365 server
------------------------
An Office 365 server can be used if the database's hosting type is **Odoo on-premise**. Office 365
SMTP relays are not compatible with Odoo Online or Odoo.sh unless Odoo is configured to
:ref:`force the outgoing "From" address <email_communication/default_from>`.
Please refer to `Microsoft's documentation <https://support.office.com/en-us/article/How-to-set-up-
a-multifunction-device-or-application-to-send-email-using-Office-365-69f58e99-c550-4274-ad18-
c805d654b4c4>`_ to configure an SMTP relay for the Odoo database's IP address.
Use a G Suite server
--------------------
A G Suite server can be used for any Odoo hosting type. To do so, set up the SMTP relay service.
The configuration steps are explained in `Google documentation <https://support.google.com
/a/answer/2956491?hl=en>`__.
.. _email_servers/restriction:
Port restriction
----------------
Restriction
-----------
Note that port 25 is blocked for security reasons on the Odoo Online and Odoo.sh platforms. Try
Please note that port 25 is blocked for security reasons on Odoo Online and Odoo.sh platforms. Try
using ports 465, 587, or 2525 instead.
.. _email_communication/default:
.. _email_communication/default_from:
Use a default "From" email address
----------------------------------
@@ -88,56 +94,112 @@ Use a default "From" email address
Sometimes, an email's "From" (outgoing) address can belong to a different domain, and that can be a
problem.
For example, if a customer with the email address `mary\@customer.example.com` responds to a
For example, if a customer with the email address *mary\@customer.example.com* responds to a
message, Odoo will try to redistribute that same email to the other subscribers in the thread.
However, if the domain `customer.example.com` forbids that kind of usage for security, the email
However, if the domain *customer.example.com* forbids that kind of usage for security, the email
that Odoo is trying to redistribute would get rejected by some recipients' email servers.
To avoid that problem, Odoo sends all emails using a "From" address from the same authorized
domain.
To avoid that problem, make sure all emails use a "From" address from the same authorized domain.
Access the :guilabel:`System Parameters` by activating :ref:`developer mode <developer-mode>` and
going to :menuselection:`Settings --> Technical --> Parameters --> System Parameters` menu.
If the MTA supports `SRS (Sender Rewriting Scheme) <https://en.wikipedia.org/wiki/Sender_Rewriting
_Scheme>`_, SRS can be enabled to handle these situations. However, that is more complex and
requires more technical knowledge that is not meant to be covered by this documentation.
To force the email address from which emails are sent, a combination of the following keys needs to
be set in the system parameters of the database:
Instead, Odoo can be configured to do something similar by itself:
- `mail.default.from`: accepts the local part or a complete email address as value
- `mail.default.from_filter`: accepts a domain name or a full email address as value
#. Set the :guilabel:`Alias Domain` name in the :menuselection:`Settings --> General Settings
--> Discuss`.
.. image:: email_servers/alias-domain.png
:alt: Setting the domain alias configuration on Odoo.
#. Turn on :doc:`developer mode </applications/general/developer_mode>`.
#. Go to :menuselection:`Settings --> Technical --> Parameters --> System Parameters`.
#. Add one system parameter from the following list:
* To use the same "From" address for *all* outgoing messages, use the key `mail.force.smtp.from`
and set that address as value (such as `outgoing@mycompany.example.com`).
* To keep the original "From" address for emails that use the same domain, but change it for
emails that use a different domain, use the key `mail.dynamic.smtp.from` and set the value as
the email address that should be used in those cases (such as `outgoing@mycompany.example.com`
).
.. _email_communication/inbound_messages:
Manage inbound messages
=======================
Odoo relies on generic email aliases to fetch incoming messages.
* **Reply messages** of messages sent from Odoo are routed to their original discussion thread (and
to the inbox of all its followers) by the catchall alias (**catchall@**).
* **Bounced messages** are routed to **bounce@** in order to track them in Odoo. This is especially
used in `Odoo Email Marketing <https://www.odoo.com/page/email-marketing>`__ to opt-out invalid
recipients.
* **Original messages**: Several business objects have their own alias to create new records in
Odoo from incoming emails:
* Sales Channel (to create Leads or Opportunities in `Odoo CRM <https://www.odoo.com/page/
crm>`__),
* Support Channel (to create Tickets in `Odoo Helpdesk <https://www.odoo.com/page/helpdesk>`__),
* Projects (to create new Tasks in `Odoo Project <https://www.odoo.com/page
/project-management>`__),
* Job Positions (to create Applicants in `Odoo Recruitment <https://www.odoo.com/page
/recruitment>`__),
* etc.
Depending on the mail server, there might be several methods to fetch emails. The easiest and most
recommended method is to manage one email address per Odoo alias in the mail server.
* Create the corresponding email addresses in the mail server (catchall@, bounce@, sales@, etc.).
* Set the :guilabel:`Alias Domain` name in :menuselection:`Settings --> General Settings -->
Discuss`.
* If the database's hosting type is Odoo on-premise, create an :guilabel:`Incoming Mail Server` in
Odoo for each alias. This can be done from the General Settings as well. Fill out the form
according to the email provider's settings. Leave the :guilabel:`Actions to Perform on Incoming
Mails` field blank. Once all the information has been filled out, click on :guilabel:`TEST &
CONFIRM`.
.. image:: email_servers/incoming-server.png
:align: center
:alt: Incoming mail server configuration on Odoo.
* If the database's hosting type is Odoo Online or Odoo.sh, redirecting incoming messages to Odoo's
domain name instead of the external email server is recommended. That way, incoming messages can
be received without delay. Odoo Online only fetches incoming messages of external servers once
every hour. Redirections for all email addresses should be set to Odoo's domain name in the email
server (e.g. *catchall\@mydomain.ext* to *catchall\@mycompany.odoo.com*).
All the aliases are customizable in Odoo. Object aliases can be edited from their respective
configuration view.
.. tip::
To edit catchall and bounce aliases, first activate the :ref:`developer mode <developer-mode>`.
Then, go to :menuselection:`Settings --> Technical --> Parameters --> System Parameters` to
customize the aliases (*mail.catchall.alias* & *mail.bounce.alias*).
.. image:: email_servers/system-parameters.png
:align: center
:alt: System parameters with catchall configuration in Odoo.
By default, inbound messages are fetched every 5 minutes in Odoo on-premise.
.. note::
The `mail.default.from_filter` works only for `odoo-bin` configurations or the default Odoo email
server, otherwise this parameter can be set using the `from_filter` field on `ir.mail_server`.
This value can be changed in :ref:`developer mode <developer-mode>`. Go to
:menuselection:`Settings --> Technical --> Automation --> Scheduled Actions` and look for
:guilabel:`Mail: Fetchmail Service`.
The field can be a domain name or an entire email address, or it can remain empty. If the sender's
email address does not match this set filter, then the email will be encapsulated using a
combination of the two system parameters: `mail.default.from` and `mail.catchall.domain`.
.. _email_servers/outgoing-email-server:
.. example::
In the following example, the from email address is replaced with the combination of the the two
system parameters (`mail.default.from` and `mail.catchall.domain`). This is the default\
notifications configuration in Odoo: ``“Admin” <admin@example.com>`` => ``“Admin”
<notifications@mycompany.com>``.
In other words if the email address of the author does not match `mail.default.from_filter`, the
email address is replaced by `mail.default.from` (if it contains a full email address) or a
combination of `mail.default.from` and `mail.catchall.domain`.
If the `from_filter` contains a full email address, and if the `mail.default.from` is the same as
this address, then all of the email addresses that are different from `mail.default.from` will be
encapsulated in `mail.default.from`.
.. _email_communication/from_filter:
Utilizing the "From" filter on an outgoing email server
-------------------------------------------------------
Utilizing the From Filter on an outgoing email server
=====================================================
The :guilabel:`FROM Filtering` field allows for the use of a specific outgoing email server
depending on the :guilabel:`From` email address or domain that Odoo is sending on behalf of. This
setting can be used to improve the deliverability or sending success rate of emails sent from the
database. Setting the :guilabel:`FROM Filtering` field can also be used to send from different
domains in a multi-company environment. Access this field in Odoo by navigating to
:menuselection:`Settings --> Discuss --> Custom Mail Servers --> Outgoing Mail Servers --> New`.
:menuselection:`Settings --> Custom Mail Servers --> Outgoing Mail Servers --> New`.
.. image:: email_servers/from-filter-setting.png
:align: center
@@ -169,105 +231,24 @@ first outgoing email server (sorted by priority).
example, if there are two email servers, one with a priority of `10` and the other with a
priority of `20`, then the email server with a priority of `10` is used first.
.. _email_communication/mass_mails:
Set up different dedicated servers for transactional and mass mails
===================================================================
Set up different dedicated servers for transactional and mass emails
--------------------------------------------------------------------
In Odoo a separate Mail Transfer Agent (MTA) server can be used for transactional emails and mass
mailings. Example: Use Postmark or SendinBlue for transactional emails, and Amazon SES, Mailgun or
Sendgrid for mass mailings.
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.
.. important::
.. tip::
A default outgoing email server is already configured. Do not create an alternative one unless a
specific external outgoing email server is needed for technical reasons.
To do this, first activate the :ref:`developer mode <developer-mode>`, and then go to
:menuselection:`Settings --> Technical --> Outgoing` email servers. There, create two outgoing email
server settings; one for the transactional emails and one for the mass mailing server. Make sure to
give priority to the transactional server over the mass mailing server by providing a lower priority
number for the transactional email server.
:menuselection:`Settings --> Technical --> Outgoing` email servers. There, create two email MTA
server settings; one for the transactional emails and one for the mass mailing server. Make sure
to give priority to the transactional server over the mass mailing server by providing a lower
priority number for the transactional MTA server.
Now, go to :menuselection:`Email Marketing --> Settings` and enable :guilabel:`Dedicated Server`.
Choose the appropriate email server. With these settings, Odoo uses the server with the lower
priority for transactional emails, and the server here selected for mass mails. Note that in this
case, the domain's Sender Policy Framework (SPF) records must be set to include both transactional
and mass mail servers.
.. seealso::
- :doc:`email_domain`
.. _email_communication/inbound_messages:
Manage inbound messages
=======================
Odoo relies on generic email aliases to fetch incoming messages.
* **Reply messages** of messages sent from Odoo are routed to their original discussion thread (and
to the inbox of all its followers) by the alias of the model if there is any or by the catchall
alias (**catchall@**). Replies to messages of models that don't have a custom alias will use the
catchall alias (`catchall@mycompany.odoo.com`). The catchall address, however, does not have
another action attached to it like other aliases might, it is only used to collect replies.
* **Bounced messages** are used as a Return-Path. One example this is especially
useful for is in `Odoo Email Marketing <https://www.odoo.com/page/email-marketing>`__. In this
case bounces are opt-out based on if the email bounced too many times (5) in the last month and
the bounces are separated by one week. This is done to avoid blacklisting someone because of a
mail server error. If these circumstances are met then the email is considered invalid and is
blacklisted. A log note is added on the contact under :guilabel:`Blacklisted Email Addresses` on
the :guilabel:`Email Marketing Configuration Menu`.
Messages that bounce in the chatter (outside of Email Marketing) will populate a red envelope
indicating the failed delivery. This can be helpful to know that a Sales Order or an Invoice did
not reach its final destination.
* **Original messages**: several business objects have their own alias to create new records in Odoo
from incoming emails:
* Sales channel (to create *Leads* or *Opportunities* in `Odoo CRM <https://www.odoo.com/page/
crm>`_)
* Support channel (to create *Tickets* in `Odoo Helpdesk <https://www.odoo.com/page/helpdesk>`_)
* Projects (to create new *Tasks* in `Odoo Project <https://www.odoo.com/page
/project-management>`_)
* Job positions (to create *Applicants* in `Odoo Recruitment <https://www.odoo.com/page
/recruitment>`_)
Depending on the mail server, there might be several methods to fetch emails. The easiest and most
recommended method is to manage one email address per Odoo alias in the mail server.
* Create the corresponding email addresses in the mail server (**catchall@**, **bounce@**,
**sales@**, etc.).
* Set the :guilabel:`Alias Domain` name in :menuselection:`Settings --> General Settings -->
Discuss`. Changing the :guilabel:`Alias Domain` will change the catchall's domain for the
database.
* If the database's hosting type is Odoo on-premise, create an :guilabel:`Incoming Mail Server` in
Odoo for each alias. To create a new incoming server go to: :menuselection:`Settings --> Discuss
--> Custom Mail Servers --> Incoming Mail Servers --> New` Fill out the form according to the
email provider's settings. Leave the :guilabel:`Actions to Perform on Incoming Mails` field blank.
Once all the information has been filled out, click on :guilabel:`TEST & CONFIRM`.
.. image:: email_servers/incoming-server.png
:align: center
:alt: Incoming mail server configuration on Odoo.
* If the database's hosting type is Odoo Online or Odoo.sh, redirecting or forwarding incoming
messages to Odoo's domain name instead of the external email server is recommended. That way,
incoming messages can be received without delay. Redirections for all email addresses should be
set to Odoo's domain name in the email server (e.g. `catchall\@mydomain.ext` to
`catchall\@mycompany.odoo.com`).
All the aliases are customizable in Odoo. Object aliases can be edited from their respective
configuration view by navigating to :menuselection:`Settings --> Technical Menu --> Email -->
Aliases`.
To edit catchall and bounce aliases, first activate the :ref:`developer mode <developer-mode>`.
Then, go to :menuselection:`Settings --> Technical --> Parameters --> System Parameters` to
customize the aliases (`mail.catchall.alias` & `mail.bounce.alias`). These types of changes should
be completed prior to the database going live. If a customer replies after a change is made then the
system will not recognize the old alias and the reply won't be received.
By default, inbound messages are fetched every 5 minutes for on-premise databases.
.. note::
This value can be changed in :ref:`developer mode <developer-mode>`. Go to
:menuselection:`Settings --> Technical --> Automation --> Scheduled Actions` and look for
:guilabel:`Mail: Fetchmail Service`.
With these settings, Odoo uses the server with the lower priority for transactional emails, and the
server here selected for mass mails. Note that in this case, the domain's Sender Policy Framework
(SPF) records must be set to include both transactional and mass mail servers.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View File

@@ -1,8 +1,10 @@
:nosearch:
:hide-page-toc:
:show-toc:
===================
Users and companies
===================
=================
Users & Companies
=================
Odoo defines a *user* as someone who has access to a database to perform daily tasks. You can add as
many users as you need and, in order to restrict the type of information each user can access, rules
@@ -16,4 +18,3 @@ can be applied. Users and access rights can be added and changed at any point.
users/access_rights
users/companies
users/portal
users/delete_account

View File

@@ -1,21 +0,0 @@
============================
Deleting an Odoo.com Account
============================
To delete your Odoo.com account, access the delete option by clicking on the user icon. The delete
option can be accessed by going to :menuselection:`My Account --> Edit Security Settings --> Delete
Account`. It can also be accessed by going to https://www.odoo.com/my/home.
.. danger::
Deleting an Odoo account is irreversible. Take caution when performing this action as the
Odoo.com account will not be retrievable.
Upon clicking the :guilabel:`Delete Account` button, a pop-up window will appear, asking you to
confirm the account deletion.
.. image:: delete_account/delete-account.png
:align: center
:alt: Clicking on the Delete Account button will populate a window verifying the change.
Confirm the deletion by entering the :guilabel:`password` and the :guilabel:`login` for the account
being deleted. Click the :guilabel:`Delete Account` button to confirm the deletion.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -27,9 +27,7 @@ needed.
in the Odoo database.
.. important::
Odoo integration of Sendcloud works on free Sendcloud plans *only* if a bank account is linked,
since Sendcloud won't ship for free. To use shipping rules or individual custom carrier contacts,
a paid plan of Sendcloud is required.
Odoo integration of Sendcloud does **not** work on free plans of Sendcloud.
Warehouse configuration
-----------------------
@@ -145,7 +143,7 @@ After configuring and saving the form, follow these steps to load the shipping p
| :guilabel:`Return Shipping Product`: `DPD Return 0-20kg`
| :guilabel:`Return Carrier`: `DPD`
| :guilabel:`Return Minimum Weight`: `0.00`
| :guilabel:`Return Maximum Weight`: `20.00`
| :guilabel:`Return Minimum Weight`: `20.00`
| :guilabel:`Return Countries`: `Belgium` `Netherlands`
.. image:: sendcloud_shipping/sendcloud-example.png

View File

@@ -12,7 +12,7 @@ that even product variants can have their own tailored :abbr:`BoMs (Bills of Mat
Correctly setting up a :abbr:`BoM (Bill of Materials)` helps optimize the manufacturing process and
save time.
Set up a bill of materials (BoM)
Set up a bill of baterials (BoM)
================================
The simplest :abbr:`BoM (Bill of Materials)` setup is one without operations or instructions, only

View File

@@ -1,38 +1,15 @@
:show-content:
:nosearch:
===================
Restaurant features
Restaurant Features
===================
Managing a restaurant or a bar comes with specific needs. The Point of Sale application provides
various features that allow performing all the required tasks in such businesses.
Once the POS is set to be used in a restaurant or a bar, you can:
- :doc:`organize your floors and tables to reflect your interior <restaurant/floors_tables>`;
- :ref:`take orders <floors_tables/orders>`;
- :doc:`communicate with the kitchen or the bar through the POS <restaurant/kitchen_printing>`;
- :doc:`print bills in advance and split them <restaurant/bill_printing>`;
- :doc:`collect tips <restaurant/tips>`; and
- :doc:`set different taxes for takeaway food <restaurant/fiscal_position>`.
Configuration
=============
To enable the restaurant and bar-specific features, go to :menuselection:`Point of Sale -->
Configuration --> Settings`, select the POS, and activate :guilabel:`Is a Bar/Restaurant`.
These features are displayed in the :guilabel:`Restaurant & Bar` section.
.. image:: restaurant/restaurant-bar-section.png
:align: center
:alt: restaurant and bar-specific features
.. toctree::
:titlesonly:
restaurant/restaurant
restaurant/split
restaurant/bill_printing
restaurant/floors_tables
restaurant/kitchen_printing
restaurant/fiscal_position
restaurant/tips

View File

@@ -1,41 +1,29 @@
=====
Bills
=====
Typical practices in restaurants or bars are to request the bill before proceeding to payment or
splitting it based on the items ordered. Odoo POS provides two features to perform these tasks
seamlessly: **Bill Printing** and **Bill Splitting**.
Configuration
=============
To activate the features, go to :menuselection:`Point of Sale --> Configuration --> Settings`,
select the POS, and activate :guilabel:`Early Receipt Printing` and :guilabel:`Allow Bill Splitting`
in the :guilabel:`Restaurant & Bar` section.
.. image:: bill_printing/settings.png
:align: center
:alt: activate the bill printing and bill splitting features in the POS settings
Bill printing
=============
From an open session, click :menuselection:`Bill --> Print` at any moment to generate and print a
bill.
.. note::
The printed bill is **not** final and will be updated to reflect any changes to the order.
Bill splitting
==============
Print the Bill
==============
From an open session, click :guilabel:`Split` to select the items to regroup. Once everything is
selected, click :guilabel:`Payment` and proceed to checkout for these items. Repeat for each guest.
Use the *Bill Printing* feature to print the bill before the payment.
This is useful if the bill is still subject to evolve and is thus not
the definitive ticket.
.. note::
- Once you return to the table, the selected items are no longer on order, as they have been paid
for.
- The feature is available as soon as at least two items are ordered.
Configure Bill Printing
=======================
.. seealso::
- :doc:`floors_tables`
To activate *Bill Printing*, go to :menuselection:`Point of Sale -->
Configuration --> Point of sale` and select your PoS interface.
Under the Bills & Receipts category, you will find *Bill Printing*
option.
.. image:: bill_printing/bill_printing01.png
:align: center
Split a Bill
============
On your PoS interface, you now have a *Bill* button.
.. image:: bill_printing/bill_printing02.png
:align: center
When you use it, you can then print the bill.

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

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