Compare commits
158 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| cc53a11b8a | |||
| 601e6fe30c | |||
| 5db7eabaaf | |||
| d7beff11c0 | |||
| cd6f706e7c | |||
| bf0a7d3160 | |||
| c56819763f | |||
| 5bc5448bbe | |||
| 4b030b0b83 | |||
| 96deed63ad | |||
| 3c082c8f0b | |||
| 378eff8585 | |||
| 417867026e | |||
| e14b809722 | |||
| f741898d3e | |||
| ead609a337 | |||
| a712aeabea | |||
| 0c25dbe3e7 | |||
| 15bdaa7bdb | |||
| c932d24162 | |||
| 3bba491f57 | |||
| 16fd9dc828 | |||
| 4a0624c897 | |||
| 8d4ad5f6fb | |||
| 5c7ab478d9 | |||
| b301ee896a | |||
| 124edfd676 | |||
| 7adaac544f | |||
| a4f06b2130 | |||
| 5fa5126572 | |||
| 6402602d1e | |||
| fe5e284c4d | |||
| bab0ae401c | |||
| c2caa3cc34 | |||
| 03873b6b34 | |||
| 8fed1cf0a8 | |||
| a25e800a76 | |||
| e0a499bb39 | |||
| 44e9dfb329 | |||
| 013a121b6a | |||
| 64203a815f | |||
| 40fa45c252 | |||
| 57b7ca69d9 | |||
| b8dae6e6b2 | |||
| f83b27d07a | |||
| 257b86abb1 | |||
| 5911d0be1b | |||
| a59a882dd0 | |||
| e3f5824313 | |||
| e4f81db89e | |||
| d0135e4d3e | |||
| 6f4a3b61db | |||
| 6b13865e4d | |||
| 210effcd22 | |||
| 9c7ce86077 | |||
| b91b663c82 | |||
| 734dc4ff93 | |||
| c7daca2df6 | |||
| 67aefbacd4 | |||
| 8bee34d230 | |||
| 7c0598e164 | |||
| a8f0df1fde | |||
| ac5f799d02 | |||
| 28b5989abf | |||
| 7b3824fa23 | |||
| 92e313396f | |||
| 3793e8cc37 | |||
| 3730e134cc | |||
| 8cacfab918 | |||
| 644cbd052f | |||
| 2ab5bb32c8 | |||
| 2277114c8e | |||
| 0227f484f2 | |||
| d805a742ab | |||
| aaaf688d13 | |||
| d78b540718 | |||
| 07d762cb29 | |||
| f51df981f2 | |||
| b0d390c1bf | |||
| 34db98ad59 | |||
| 81a73ce00e | |||
| 141399ec33 | |||
| 258fa17a76 | |||
| e2503fdc29 | |||
| acb491fba2 | |||
| 06d25495e6 | |||
| b298744499 | |||
| 45efd8c90d | |||
| e84a7d1f28 | |||
| 1dd818e0c7 | |||
| 8c8679c856 | |||
| d0e0332651 | |||
| d14daf3e82 | |||
| 0a93b57cb3 | |||
| 5f3e56454a | |||
| b3f96a6168 | |||
| 76ca1e1eef | |||
| 28accc3dd2 | |||
| c08c69ce79 | |||
| 9078dec21d | |||
| 27bf8784c0 | |||
| 2c71281056 | |||
| 2cd4a12dd4 | |||
| d27481635c | |||
| 5420b360ff | |||
| 498670abc1 | |||
| 21cd532bb2 | |||
| 7c40b31212 | |||
| 6d28b69fda | |||
| c46e9eb7ea | |||
| 88f51eff5e | |||
| adf649f6e4 | |||
| 6766c70169 | |||
| e39ccf8de0 | |||
| 48640eff5a | |||
| 4813419d4e | |||
| 5f2a5d318e | |||
| c2c47456c7 | |||
| 6a6077b306 | |||
| 53763fd099 | |||
| c9ba286471 | |||
| a7b8901bdd | |||
| 8e5ee9ec2c | |||
| 6a8158c657 | |||
| 632be997c8 | |||
| b32aab35a0 | |||
| c2add27bd5 | |||
| 4234a68d25 | |||
| 47edb88436 | |||
| bb8e72fb60 | |||
| ac92c70b91 | |||
| 765b61eff3 | |||
| 2058488eaa | |||
| 3e4b026979 | |||
| d6cd27bc9d | |||
| 0001bbaec4 | |||
| cbe068e3ab | |||
| c411a9f924 | |||
| df1f1dd6b6 | |||
| 379798b35c | |||
| b3d06500ef | |||
| 5bb97c3fcb | |||
| fbbce69f56 | |||
| bec530e580 | |||
| de49e8f05a | |||
| 124f9743c6 | |||
| f2ceb28cb5 | |||
| 027fca4bbd | |||
| 8125ae7fc6 | |||
| 075b0e1036 | |||
| ff36e1f7aa | |||
| 7032c2e008 | |||
| f459ba48ef | |||
| b09b8847bf | |||
| cb948c7f05 | |||
| 858089caf7 | |||
| 65b28ce72e | |||
| 9e2d8fb343 |
@@ -21,6 +21,16 @@ replace_edited_strings = false
|
||||
keep_translations = false
|
||||
source_lang = en
|
||||
|
||||
[o:odoo:p:odoo-17-doc:r:essentials]
|
||||
file_filter = locale/<lang>/LC_MESSAGES/essentials.po
|
||||
source_file = locale/sources/essentials.pot
|
||||
type = POT
|
||||
minimum_perc = 0
|
||||
resource_name = essentials
|
||||
replace_edited_strings = false
|
||||
keep_translations = false
|
||||
source_lang = en
|
||||
|
||||
[o:odoo:p:odoo-17-doc:r:finance]
|
||||
file_filter = locale/<lang>/LC_MESSAGES/finance.po
|
||||
source_file = locale/sources/finance.pot
|
||||
@@ -41,6 +51,16 @@ replace_edited_strings = false
|
||||
keep_translations = false
|
||||
source_lang = en
|
||||
|
||||
[o:odoo:p:odoo-17-doc:r:hr]
|
||||
file_filter = locale/<lang>/LC_MESSAGES/hr.po
|
||||
source_file = locale/sources/hr.pot
|
||||
type = POT
|
||||
minimum_perc = 0
|
||||
resource_name = hr
|
||||
replace_edited_strings = false
|
||||
keep_translations = false
|
||||
source_lang = en
|
||||
|
||||
[o:odoo:p:odoo-17-doc:r:index]
|
||||
file_filter = locale/<lang>/LC_MESSAGES/index.po
|
||||
source_file = locale/sources/index.pot
|
||||
@@ -111,6 +131,16 @@ replace_edited_strings = false
|
||||
keep_translations = false
|
||||
source_lang = en
|
||||
|
||||
[o:odoo:p:odoo-17-doc:r:studio]
|
||||
file_filter = locale/<lang>/LC_MESSAGES/studio.po
|
||||
source_file = locale/sources/studio.pot
|
||||
type = POT
|
||||
minimum_perc = 0
|
||||
resource_name = studio
|
||||
replace_edited_strings = false
|
||||
keep_translations = false
|
||||
source_lang = en
|
||||
|
||||
[o:odoo:p:odoo-17-doc:r:websites]
|
||||
file_filter = locale/<lang>/LC_MESSAGES/websites.po
|
||||
source_file = locale/sources/websites.pot
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
- Python dependencies listed in the file `requirements.txt`.
|
||||
- Make
|
||||
- A local copy of the [odoo/odoo repository](https://github.com/odoo/odoo) (optional)
|
||||
- A local copy of the [odoo/upgrade-util repository](https://github.com/odoo/upgrade-util) (optional)
|
||||
|
||||
### Instructions
|
||||
|
||||
@@ -18,8 +19,9 @@
|
||||
3. See [this guide](https://www.odoo.com/documentation/latest/contributing/documentation.html)
|
||||
for more detailed instructions.
|
||||
|
||||
Optional: place your local copy of the `odoo/odoo` repository in the parent directory or in the root
|
||||
directory of the documentation to build the latter with the documented Python docstrings.
|
||||
Optional: place your local copy of the `odoo/odoo` and `odoo/upgrade-util` repositories in
|
||||
the parent directory or in the root directory of the documentation to build the latter
|
||||
with the documented Python docstrings.
|
||||
|
||||
## Contribute to the documentation
|
||||
|
||||
|
||||
@@ -133,6 +133,24 @@ else:
|
||||
)
|
||||
odoo_dir_in_path = True
|
||||
|
||||
if odoo_dir_in_path:
|
||||
upgrade_util_dir = next(filter(Path.exists, [Path('upgrade-util'), Path('../upgrade-util')]), None)
|
||||
if not upgrade_util_dir:
|
||||
_logger.warning(
|
||||
"Could not find Upgrade Utils sources directory in `upgrade_util`.\n"
|
||||
"The developer documentation will be built but autodoc directives will be skipped.\n"
|
||||
"In order to fully build the 'Developer' documentation, clone the repository with "
|
||||
"`git clone https://github.com/odoo/upgrade-util` or create a symbolic link."
|
||||
)
|
||||
odoo_dir_in_path = False
|
||||
else:
|
||||
_logger.info(
|
||||
"Found Upgrade Util sources in %(directory)s",
|
||||
{'directory': upgrade_util_dir.resolve()},
|
||||
)
|
||||
from odoo import upgrade
|
||||
upgrade.__path__.append(str((upgrade_util_dir / 'src').resolve()))
|
||||
|
||||
# Mapping between odoo models related to master data and the declaration of the
|
||||
# data. This is used to point users to available xml_ids when giving values for
|
||||
# a field with the autodoc_field extension.
|
||||
@@ -213,6 +231,7 @@ 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-17.2': "Odoo Online",
|
||||
'saas-17.1': "Odoo Online",
|
||||
'17.0': "Odoo 17",
|
||||
'saas-16.4': "Odoo Online",
|
||||
@@ -233,8 +252,11 @@ languages_names = {
|
||||
'es': 'ES',
|
||||
'fr': 'FR',
|
||||
'it': 'IT',
|
||||
'ko': 'KO',
|
||||
'nl': 'NL',
|
||||
'pt_BR': 'PT',
|
||||
'ro': 'RO',
|
||||
'sv': 'SV',
|
||||
'uk': 'UA',
|
||||
'zh_CN': 'ZH (CN)',
|
||||
'zh_TW': 'ZH (TW)'
|
||||
@@ -246,6 +268,9 @@ redirects_dir = 'redirects/'
|
||||
sphinx_tabs_disable_tab_closing = True
|
||||
sphinx_tabs_disable_css_loading = True
|
||||
|
||||
# Autodoc ordering
|
||||
autodoc_member_order = 'bysource'
|
||||
|
||||
#=== Options for HTML output ===#
|
||||
|
||||
html_theme = 'odoo_theme'
|
||||
@@ -445,7 +470,7 @@ def _generate_alternate_urls(app, pagename, templatename, context, doctree):
|
||||
"""
|
||||
_current_lang = app.config.language or 'en'
|
||||
# Replace the context value by its upper-cased value ("FR" instead of "fr")
|
||||
context['language'] = languages_names.get(_current_lang)
|
||||
context['language'] = languages_names.get(_current_lang, _current_lang.upper())
|
||||
context['language_code'] = _current_lang
|
||||
|
||||
# If the list of languages is not set, assume that the project has no alternate language
|
||||
|
||||
@@ -61,4 +61,5 @@ functionalities, including functional support, upgrades, and hosting. `Pricing
|
||||
administration/upgrade
|
||||
administration/neutralized_database
|
||||
administration/supported_versions
|
||||
administration/mobile
|
||||
administration/odoo_accounts
|
||||
|
||||
@@ -20,7 +20,7 @@ To Odoo Online
|
||||
- Odoo Online is *not* compatible with **non-standard apps**.
|
||||
- The database's current version must be :doc:`supported <supported_versions>`.
|
||||
|
||||
#. Create a :ref:`duplicate <duplicate_premise>` of the database.
|
||||
#. Create a :ref:`duplicate of the database <on-premise/duplicate>`.
|
||||
#. In this duplicate, uninstall all **non-standard apps**.
|
||||
#. Use the database manager to grab a *dump with filestore*.
|
||||
#. `Submit a support ticket <https://www.odoo.com/help>`_ including the following:
|
||||
@@ -46,10 +46,10 @@ Transferring an Odoo Online database
|
||||
====================================
|
||||
|
||||
.. important::
|
||||
Odoo Online's :ref:`intermediary versions <supported_versions>` cannot be hosted on-premise as
|
||||
that type of hosting does not support those versions. Therefore, if the database to transfer
|
||||
is running an intermediary version, it must be upgraded first to the next :ref:`major version
|
||||
<supported_versions>`, waiting for its release if necessary.
|
||||
Odoo Online's :ref:`intermediary versions <supported_versions>` are not supported by Odoo.sh or
|
||||
on-premise. Therefore, if the database to transfer is running an intermediary version, it must be
|
||||
upgraded first to the next :ref:`major version <supported_versions>`, waiting for its release if
|
||||
necessary.
|
||||
|
||||
.. example::
|
||||
Transferring an online database running on Odoo 16.3 would require first upgrading it to Odoo
|
||||
@@ -59,6 +59,11 @@ Transferring an Odoo Online database
|
||||
Click the gear icon (:guilabel:`⚙`) next to the database name on the `Odoo Online database
|
||||
manager <https://www.odoo.com/my/databases/>`_ to display its version number.
|
||||
|
||||
.. warning::
|
||||
If there is an active Odoo subscription linked to the database being migrated, reach out to
|
||||
the Customer Service Manager or `submit a support ticket <https://www.odoo.com/help>`_ to
|
||||
complete the subscription transfer.
|
||||
|
||||
To on-premise
|
||||
-------------
|
||||
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
================
|
||||
Odoo mobile apps
|
||||
================
|
||||
|
||||
Two kind of Odoo mobile app exist: the progressive web app (PWA) and store apps. Using the PWA is
|
||||
recommended.
|
||||
|
||||
Progressive web app (PWA)
|
||||
=========================
|
||||
|
||||
PWAs are web-based applications designed to function across different devices and platforms,
|
||||
leveraging web browsers to deliver user experiences similar to native apps.
|
||||
|
||||
The Odoo PWA features include:
|
||||
|
||||
- Quick access by adding the PWA to a device's home screen
|
||||
- Seamless and borderless navigation experience
|
||||
- Push notifications
|
||||
- SSO authentication
|
||||
|
||||
To install the Odoo PWA, launch a browser supporting PWAs, and sign in to an Odoo database. The
|
||||
instructions to install a PWA depend on the platform and browser used.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Android
|
||||
|
||||
**Chrome**: open Chrome's menu (:guilabel:`⋮`), select :guilabel:`Install app`, and tap
|
||||
:guilabel:`Install`.
|
||||
|
||||
**Firefox**: open Firefox's menu (:guilabel:`⋮`), select :guilabel:`Install`, and either touch
|
||||
and hold the Odoo icon or tap :guilabel:`Add automatically`.
|
||||
|
||||
The PWA can also be installed with **Samsung Internet**, **Edge**, and **Opera**.
|
||||
|
||||
.. tab:: iOS
|
||||
|
||||
**Safari**: open the **Share** menu by tapping the square with an arrow pointing upwards icon,
|
||||
select :guilabel:`Add to Home Screen`, edit the PWA details if desired, and tap
|
||||
:guilabel:`Add`.
|
||||
|
||||
On iOS 16.4 and above, the PWA can also be installed with **Chrome**, **Firefox**, and
|
||||
**Edge**.
|
||||
|
||||
.. tab:: Desktop
|
||||
|
||||
**Chrome** and **Edge**: click the installation icon at the right of the address bar and click
|
||||
:guilabel:`Install`.
|
||||
|
||||
.. seealso::
|
||||
- `Google Chrome Help: Use progressive web apps
|
||||
<https://support.google.com/chrome/answer/9658361>`_
|
||||
- `MDN Web Docs: Installing and uninstalling web apps
|
||||
<https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Guides/Installing>`_
|
||||
- `Microsoft Support: Install, manage, or uninstall apps in Microsoft Edge <https://support.microsoft.com/en-us/topic/install-manage-or-uninstall-apps-in-microsoft-edge-0c156575-a94a-45e4-a54f-3a84846f6113>`_
|
||||
|
||||
Store apps
|
||||
==========
|
||||
|
||||
The Odoo mobile apps are available for download on the `Google Play Store
|
||||
<https://play.google.com/store/apps/details?id=com.odoo.mobile>`_ and `Apple App Store
|
||||
<https://apps.apple.com/app/odoo/id1272543640>`_.
|
||||
|
||||
.. important::
|
||||
The iOS app cannot be updated and will be deprecated at some point in the future.
|
||||
|
||||
While the store apps support multi-accounts, they are not compatible with SS0 authentication.
|
||||
@@ -146,7 +146,7 @@ Manually
|
||||
--------
|
||||
|
||||
If you want to create your module structure manually,
|
||||
you can follow the :doc:`/developer/tutorials/getting_started` tutorial to understand
|
||||
you can follow the :doc:`/developer/tutorials/server_framework_101` tutorial to understand
|
||||
the structure of a module and the content of each file.
|
||||
|
||||
Push the development branch
|
||||
|
||||
@@ -7,159 +7,110 @@ On-premise
|
||||
Register a database
|
||||
===================
|
||||
|
||||
To register your database, you just need to enter your Subscription Code in the
|
||||
banner in the App Switcher. Make sure you do not add extra spaces before or after
|
||||
your subscription code. If the registration is successful, it will turn green and
|
||||
will provide you with the Expiration Date of your freshly-registered database. You
|
||||
can check this Expiration Date in the About menu (Odoo 9) or in the Settings Dashboard
|
||||
(Odoo 10).
|
||||
To register your database, enter your subscription code in the banner in the app dashboard. If the
|
||||
registration is successful, the banner will turn green and display the database expiration date.
|
||||
|
||||
Registration Error Message
|
||||
--------------------------
|
||||
.. tip::
|
||||
The expiration date is also displayed at the bottom of the Settings page.
|
||||
|
||||
If you are unable to register your database, you will likely encounter this
|
||||
message:
|
||||
|
||||
.. image:: on_premise/error_message_sub_code.png
|
||||
:alt: Something went wrong while registering your database, you can try again or contact Odoo
|
||||
Help
|
||||
|
||||
Solutions
|
||||
~~~~~~~~~
|
||||
|
||||
* Do you have a valid Enterprise subscription?
|
||||
|
||||
* Check if your subscription details get the tag "In Progress" on
|
||||
your `Odoo Account
|
||||
<https://accounts.odoo.com/my/subscription>`__ or with your Account Manager
|
||||
|
||||
* Have you already linked a database with your subscription reference?
|
||||
|
||||
* You can link only one database per subscription.
|
||||
(Need a test or a development database? `Find a partner
|
||||
<https://www.odoo.com/partners>`__)
|
||||
|
||||
* You can unlink the old database yourself on your `Odoo Contract
|
||||
<https://accounts.odoo.com/my/subscription>`__ with the button "Unlink database"
|
||||
|
||||
.. image:: on_premise/unlink_single_db.png
|
||||
|
||||
A confirmation message will appear; make sure this is the correct database as
|
||||
it will be deactivated shortly:
|
||||
|
||||
.. image:: on_premise/unlink_confirm_enterprise_edition.png
|
||||
|
||||
* Do you have the updated version of Odoo 9?
|
||||
|
||||
* From July 2016 onward, Odoo 9 now automatically change the uuid of a
|
||||
duplicated database; a manual operation is no longer required.
|
||||
|
||||
* If it's not the case, you may have multiple databases sharing the same
|
||||
UUID. Please check on your `Odoo Contract
|
||||
<https://accounts.odoo.com/my/subscription>`__, a short message will appear
|
||||
specifying which database is problematic:
|
||||
|
||||
.. image:: on_premise/unlink_db_name_collision.png
|
||||
|
||||
In this case, you need to change the UUID on your test databases to solve this
|
||||
issue. You will find more information about this in :ref:`this section <duplicate_premise>`.
|
||||
|
||||
For your information, we identify database with UUID. Therefore, each database
|
||||
should have a distinct UUID to ensure that registration and invoicing proceed
|
||||
effortlessly for your and for us.
|
||||
|
||||
* Check your network and firewall settings
|
||||
|
||||
* The Update notification must be able to reach Odoo's subscription
|
||||
validation servers. In other words, make sure that the Odoo server is able
|
||||
to open outgoing connections towards:
|
||||
|
||||
* services.odoo.com on port 443 (or 80)
|
||||
* services.openerp.com on port 443 (or 80) for older deployments
|
||||
|
||||
* Once you activated your database, you must keep these ports open, as the
|
||||
Update notification runs once a week.
|
||||
|
||||
Error message due to too many users
|
||||
-----------------------------------
|
||||
|
||||
If you have more users in your local database than provisionned in your
|
||||
Odoo Enterprise subscription, you may encounter this message:
|
||||
|
||||
.. image:: on_premise/add_more_users.png
|
||||
:alt: This database will expire in X days, you have more users than your subscription allows
|
||||
|
||||
|
||||
When the message appears you have 30 days before the expiration.
|
||||
The countdown is updated everyday.
|
||||
|
||||
Solutions
|
||||
~~~~~~~~~
|
||||
|
||||
- **Add more users** on your subscription: follow the link and Validate
|
||||
the upsell quotation and pay for the extra users.
|
||||
- **Deactivate users** as explained in this `documentation <documentation.html#deactivating-users>`_
|
||||
and **Reject** the upsell quotation.
|
||||
|
||||
Once your database has the correct number of users, the expiration message
|
||||
will disappear automatically after a few days, when the next verification occurs.
|
||||
We understand that it can be a bit frightening to see the countdown,
|
||||
so you can :ref:`force an Update Notification <force_ping>` to make the message disappear
|
||||
right away.
|
||||
|
||||
Database expired error message
|
||||
------------------------------
|
||||
|
||||
If your database reaches its expiration date before your renew your subscription,
|
||||
you will encounter this message:
|
||||
|
||||
.. image:: on_premise/database_expired.png
|
||||
:alt: This database has expired.
|
||||
|
||||
This **blocking** message appears after a non-blocking message that lasts 30 days.
|
||||
If you fail to take action before the end of the countdown, the database is expired.
|
||||
|
||||
Solutions
|
||||
~~~~~~~~~
|
||||
|
||||
* Renew your subscription: follow the link and renew your subscription - note that
|
||||
if you wish to pay by Wire Transfer, your subscription will effectively be renewed
|
||||
only when the payment arrives, which can take a few days. Credit card payments are
|
||||
processed immediately.
|
||||
* Contact our `Support <https://www.odoo.com/help>`__
|
||||
|
||||
None of those solutions worked for you? Please contact our
|
||||
`Support <https://www.odoo.com/help>`__
|
||||
|
||||
.. _force_ping:
|
||||
|
||||
.. _duplicate_premise:
|
||||
.. _on-premise/duplicate:
|
||||
|
||||
Duplicate a database
|
||||
====================
|
||||
|
||||
You can duplicate your database by accessing the database manager on your
|
||||
server (<odoo-server>/web/database/manager). In this page, you can easily
|
||||
duplicate your database (among other things).
|
||||
Duplicate a database by accessing the database manager on your server
|
||||
(`<odoo-server>/web/database/manager`). Typically, you want to duplicate your production database
|
||||
into a neutralized testing database. It can be done by checking the neutralize box when prompted,
|
||||
which executes all :file:`neutralize.sql` scripts for every installed module.
|
||||
|
||||
.. image:: on_premise/db_manager.gif
|
||||
Common error messages and solutions
|
||||
===================================
|
||||
|
||||
When you duplicate a local database, it is **strongly** advised to change
|
||||
the duplicated database's uuid (Unniversally Unique Identifier), since this
|
||||
uuid is how your database identifies itself with our servers. Having two
|
||||
databases with the same uuid could result in invoicing problems or registration
|
||||
problems down the line.
|
||||
Registration error
|
||||
------------------
|
||||
|
||||
.. note::
|
||||
From July 2016 onward, Odoo 9 now automatically change the uuid of a duplicated database; a
|
||||
manual operation is no longer required.
|
||||
In case of a registration error, the following message should be displayed.
|
||||
|
||||
The database uuid is currently accessible from the menu :menuselection:`Settings --> Technical -->
|
||||
System Parameters`, we advise you to use a `uuid generator <https://www.uuidtools.com>`_ or to
|
||||
use the unix command ``uuidgen`` to generate a new uuid. You can then simply replace it like any
|
||||
other record by clicking on it and using the edit button.
|
||||
.. image:: on_premise/error-message-sub-code.png
|
||||
:alt: Database registration error message
|
||||
|
||||
.. image:: on_premise/db_uuid.png
|
||||
To resolve the issue:
|
||||
|
||||
- Check the **validity of your Odoo Enterprise subscription** by verifying if your subscription
|
||||
details have the tag :guilabel:`In Progress` on your `Odoo Account
|
||||
<https://accounts.odoo.com/my/subscription>`_ or contact your Account Manager.
|
||||
|
||||
- Ensure that **no other database is linked** to the subscription code, as only one database can be
|
||||
linked per subscription.
|
||||
|
||||
.. tip::
|
||||
If a test or a development database is needed, you can :ref:`duplicate a database
|
||||
<on-premise/duplicate>`.
|
||||
|
||||
- Verify that **no databases share the same UUID** (Universally Unique Identifier) by opening your
|
||||
`Odoo Contract <https://accounts.odoo.com/my/subscription>`_. If two or more databases share the
|
||||
same UUID, their name will be displayed.
|
||||
|
||||
.. image:: on_premise/unlink-db-name-collision.png
|
||||
:alt: Database UUID error message
|
||||
|
||||
If that is the case, manually change the database(s) UUID or `send a support ticket
|
||||
<https://www.odoo.com/help>`_.
|
||||
|
||||
- As the update notification must be able to reach Odoo's subscription validation servers, ensure
|
||||
your **network and firewall settings** allow the Odoo server to open outgoing connections
|
||||
towards:
|
||||
|
||||
- `services.odoo.com` on port `443` (or `80`)
|
||||
- for older deployments, `services.openerp.com` on port `443` (or `80`)
|
||||
|
||||
These ports must be kept open even after registering a database, as the update notification runs
|
||||
once a week.
|
||||
|
||||
Too many users error
|
||||
--------------------
|
||||
|
||||
If you have more users in a local database than provisioned in your Odoo Enterprise subscription,
|
||||
the following message should be displayed.
|
||||
|
||||
.. image:: on_premise/add-more-users.png
|
||||
:alt: Too many users on a database error message
|
||||
|
||||
When the message appears, you have 30 days to act before the database expires. The countdown is
|
||||
updated every day.
|
||||
|
||||
To resolve the issue, either:
|
||||
|
||||
- **Add more users** to your subscription by clicking the :guilabel:`Upgrade your subscription` link
|
||||
displayed in the message to validate the upsell quotation and pay for the extra users.
|
||||
- :ref:`Deactivate users <users/deactivate>` and **reject** the upsell quotation.
|
||||
|
||||
.. important::
|
||||
If you are on a monthly subscription plan, the database will automatically update to reflect the
|
||||
added user(s). If you are on a yearly or multi-year plan, an expiration banner will appear in the
|
||||
database. You can create the upsell quotation by clicking the banner to update the subscription
|
||||
or `send a support ticket <https://www.odoo.com/help>`_ to resolve the issue.
|
||||
|
||||
Once your database has the correct number of users, the expiration message disappears automatically
|
||||
after a few days, when the next verification occurs.
|
||||
|
||||
Database expired error
|
||||
----------------------
|
||||
|
||||
If your database expires before you renew your subscription, the following message should be
|
||||
displayed.
|
||||
|
||||
.. image:: on_premise/database-expired.png
|
||||
:alt: Database expired error message
|
||||
|
||||
This message appears if you fail to act before the end of the 30-day countdown.
|
||||
|
||||
To resolve the issue, either:
|
||||
|
||||
- Click the :guilabel:`Renew your subscription` link displayed in the message and complete the
|
||||
process. If you pay by wire transfer, your subscription will be renewed when the payment arrives
|
||||
which can take a few days. Credit card payments are processed immediately.
|
||||
- `Send a support ticket <https://www.odoo.com/help>`_.
|
||||
|
||||
.. toctree::
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 17 KiB |
@@ -9,7 +9,7 @@ internet.
|
||||
|
||||
.. warning:: If you are setting up a public server, be sure to check our :ref:`security` recommendations!
|
||||
|
||||
.. _db_filter:
|
||||
.. _dbfilter:
|
||||
|
||||
dbfilter
|
||||
========
|
||||
@@ -573,12 +573,12 @@ security-related topics:
|
||||
|
||||
- Use appropriate database filters ( :option:`--db-filter <odoo-bin --db-filter>`)
|
||||
to restrict the visibility of your databases according to the hostname.
|
||||
See :ref:`db_filter`.
|
||||
See :ref:`dbfilter`.
|
||||
You may also use :option:`-d <odoo-bin -d>` to provide your own (comma-separated)
|
||||
list of available databases to filter from, instead of letting the system fetch
|
||||
them all from the database backend.
|
||||
|
||||
- Once your ``db_name`` and ``db_filter`` are configured and only match a single database
|
||||
- Once your ``db_name`` and ``dbfilter`` are configured and only match a single database
|
||||
per hostname, you should set ``list_db`` configuration option to ``False``, to prevent
|
||||
listing databases entirely, and to block access to the database management screens
|
||||
(this is also exposed as the :option:`--no-database-list <odoo-bin --no-database-list>`
|
||||
@@ -722,7 +722,7 @@ management screens.
|
||||
the system administrator, including provisioning of new databases and automated backups.
|
||||
|
||||
Be sure to setup an appropriate ``db_name`` parameter
|
||||
(and optionally, ``db_filter`` too) so that the system can determine the target database
|
||||
(and optionally, ``dbfilter`` too) so that the system can determine the target database
|
||||
for each request, otherwise users will be blocked as they won't be allowed to choose the
|
||||
database themselves.
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
@@ -45,7 +45,7 @@ Git
|
||||
|
||||
To clone a Git repository, choose between cloning with HTTPS or SSH. In most cases, the best option
|
||||
is HTTPS. However, choose SSH to contribute to Odoo source code or when following the :doc:`Getting
|
||||
Started developer tutorial </developer/tutorials/getting_started>`.
|
||||
Started developer tutorial </developer/tutorials/server_framework_101>`.
|
||||
|
||||
.. tabs::
|
||||
|
||||
@@ -144,7 +144,7 @@ Odoo requires **Python 3.10** or later to run.
|
||||
to download and install Python 3 if needed.
|
||||
|
||||
.. note::
|
||||
If Python 3 is already installed, make sure that the version is 3.7 or above, as previous
|
||||
If Python 3 is already installed, make sure that the version is 3.10 or above, as previous
|
||||
versions are not compatible with Odoo.
|
||||
|
||||
.. tabs::
|
||||
|
||||
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 14 KiB |
@@ -31,6 +31,12 @@ This matrix shows the support status of every version.
|
||||
- On-Premise
|
||||
- Release date
|
||||
- End of support
|
||||
* - Odoo saas~17.2
|
||||
- |green|
|
||||
- N/A
|
||||
- N/A
|
||||
- April 2024
|
||||
-
|
||||
* - Odoo saas~17.1
|
||||
- |green|
|
||||
- N/A
|
||||
|
||||
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 22 KiB |
@@ -2,166 +2,246 @@
|
||||
Export and import data
|
||||
======================
|
||||
|
||||
In Odoo, it is sometimes necessary to export or import data for running reports, or for data
|
||||
modification. This document covers the export and import of data into and out of Odoo.
|
||||
|
||||
.. important::
|
||||
Sometimes, users run into a 'time out' error, or a record does not process, due to its size. This
|
||||
can occur with large exports, or in cases where the import file is too large. To circumvent this
|
||||
limitation surrounding the size of the records, process exports or imports in smaller batches.
|
||||
|
||||
.. _export-data:
|
||||
|
||||
Export data from Odoo
|
||||
=====================
|
||||
|
||||
When working with a database, it sometimes is necessary to export your data in a distinct file.
|
||||
Doing so can help to do reporting over your activities (even if Odoo offers a precise and easy
|
||||
reporting tool with each available application).
|
||||
When working with a database, it is sometimes necessary to export data in a distinct file. Doing so
|
||||
can aid in reporting on activities, although, Odoo provides a precise and easy reporting tool with
|
||||
each available application.
|
||||
|
||||
With Odoo, you can export the values from any field in any record. To do so,
|
||||
activate the list view on the items that need to be exported, click on *Action*, and, then,
|
||||
on *Export*.
|
||||
With Odoo, the values can be exported from any field in any record. To do so, activate the list view
|
||||
(:guilabel:`≣ (four horizontal lines)` icon), on the items that need to be exported, and then
|
||||
select the records that should be exported. To select a record, tick the checkbox next to the
|
||||
corresponding record. Finally, click on :guilabel:`⚙️ Action`, and then :guilabel:`Export`.
|
||||
|
||||
.. image:: export_import_data/list-view-export.png
|
||||
:align: center
|
||||
:alt: view of the different things to enable/click to export data
|
||||
:alt: View of the different things to enable/click to export data.
|
||||
|
||||
Pretty simple, this action still comes with some specificities. In fact,
|
||||
when clicking on *Export*, a pop-up window appears with several
|
||||
options for the data to export:
|
||||
When clicking on :guilabel:`Export`, an :guilabel:`Export Data` pop-over window appears, with
|
||||
several options for the data to export:
|
||||
|
||||
.. image:: export_import_data/export-data-overview.png
|
||||
:align: center
|
||||
:alt: overview of all the options to take into account when exporting data in Odoo
|
||||
:alt: Overview of options to consider when exporting data in Odoo..
|
||||
|
||||
#. With the *I want to update data* option ticked, the system only
|
||||
shows the fields which can be imported. This is very helpful in
|
||||
case you want to update existing records. Basically, this works
|
||||
like a filter. Leaving the box unticked gives way more field
|
||||
options because it shows all the fields, not just the ones which
|
||||
can be imported.
|
||||
#. When exporting, you can choose between two formats: .csv and .xls.
|
||||
With .csv, items are separated with a comma, while .xls holds information about all the
|
||||
worksheets in a file, including both content and formatting.
|
||||
#. Those are the items you may want to export. Use the arrows to display
|
||||
more sub-field options. Of course, you can use the search bar to
|
||||
find specific fields more easily. To use the search option more
|
||||
efficiently, display all the fields by clicking on all the
|
||||
arrows!
|
||||
#. The + button is there to add fields to the "to export" list.
|
||||
#. The "handles" next to the selected fields allow you to move the fields up and down to
|
||||
change the order in which they must be displayed in the exported
|
||||
file.
|
||||
#. The trashcan is there if you need to remove fields.
|
||||
#. For recurring reports, it might be interesting to save export presets.
|
||||
Select all the needed ones and click on the template bar.
|
||||
There, click on *New template* and give a name to yours. The
|
||||
next time you need to export the same list, simply select the
|
||||
related template.
|
||||
#. With the :guilabel:`I want to update data (import-compatable export)` option ticked, the system
|
||||
only shows the fields that can be imported. This is helpful in the case where the existing
|
||||
records need to be updated. This works like a filter. Leaving the box unticked, gives many more
|
||||
field options because it shows all the fields, not just the ones that can be imported.
|
||||
#. When exporting, there is the option to export in two formats: `.csv` and `.xls`. With `.csv`,
|
||||
items are separated by a comma, while `.xls` holds information about all the worksheets in a
|
||||
file, including both content and formatting.
|
||||
#. These are the items that can be exported. Use the :guilabel:`> (right arrow)` icon to display
|
||||
more sub-field options. Use the :guilabel:`Search` bar to find specific fields. To use the
|
||||
:guilabel:`Search` option more efficiently, click on all the :guilabel:`> (right arrows)` to
|
||||
display all fields.
|
||||
#. The :guilabel:`+ (plus sign)` icon button is present to add fields to the :guilabel:`Fields to
|
||||
export` list.
|
||||
#. The :guilabel:`↕️ (up-down arrow)` to the left of the selected fields can be used to move the
|
||||
fields up and down, to change the order in which they are displayed in the exported file.
|
||||
Drag-and-drop using the :guilabel:`↕️ (up-down arrow)` icon.
|
||||
#. The :guilabel:`🗑️ (trash can)` icon is used to remove fields. Click on the :guilabel:`🗑️ (trash
|
||||
can)` icon to remove the field.
|
||||
#. For recurring reports, it is helpful to save export presets. Select all the needed fields, and
|
||||
click on the template drop-down menu. Once there, click on :guilabel:`New template`, and give a
|
||||
unique name to the export just created. Click the :guilabel:`💾 (floppy drive)` icon to save the
|
||||
configuration. The next time the same list needs to be exported, select the related template that
|
||||
was previously saved from the drop-down menu.
|
||||
|
||||
.. tip::
|
||||
It’s good to keep the field’s external identifier in mind. For example,
|
||||
*Related Company* is equal to *parent_id*. Doing so helps export
|
||||
only what you would like to import next.
|
||||
It is helpful to know the field's external identifier. For example, :guilabel:`Related Company`
|
||||
in the export user interface is equal to *parent_id* (external identifier). This is helpful
|
||||
because then, the only data exported is what should be modified and re-imported.
|
||||
|
||||
.. _import-data:
|
||||
|
||||
Import data into Odoo
|
||||
=====================
|
||||
|
||||
How to start
|
||||
------------
|
||||
Importing data into Odoo is extremely helpful during implementation, or in times where data needs to
|
||||
be updated in bulk. The following documentation covers how to import data into an Odoo database.
|
||||
|
||||
You can import data on any Odoo's business object using either Excel
|
||||
(.xlsx) or CSV (.csv) formats:
|
||||
contacts, products, bank statements, journal entries and even orders!
|
||||
.. warning::
|
||||
Imports are permanent and **cannot** be undone. However, it is possible to use filters (`created
|
||||
on` or `last modified`) to identify records changed or created by the import.
|
||||
|
||||
Open the view of the object you want to populate and click on :menuselection:`Favorites --> Import
|
||||
records`.
|
||||
.. tip::
|
||||
Activating :ref:`developer mode <developer-mode>` changes the visible import settings in the left
|
||||
menu. Doing so reveals an :menuselection:`Advanced` menu. Included in this advanced menu are two
|
||||
options: :guilabel:`Track history during import` and :guilabel:`Allow matching with subfields`.
|
||||
|
||||
.. image:: export_import_data/import_button.png
|
||||
.. image:: export_import_data/advanced-import.png
|
||||
:align: center
|
||||
:alt: Advanced import options when developer mode is activated.
|
||||
|
||||
If the model uses openchatter, the :guilabel:`Track history during import` option sets up
|
||||
subscriptions and sends notifications during the import, but leads to a slower import.
|
||||
|
||||
Should the :guilabel:`Allow matching with subfields` option be selected, then all subfields
|
||||
within a field are used to match under the :guilabel:`Odoo Field` while importing.
|
||||
|
||||
Get started
|
||||
-----------
|
||||
|
||||
Data can be imported on any Odoo business object using either Excel (`.xlsx`) or :abbr:`CSV
|
||||
(Comma-separated Values)` (`.csv`) formats. This includes: contacts, products, bank statements,
|
||||
journal entries, and orders.
|
||||
|
||||
Open the view of the object to which the data should be imported/populated, and click on
|
||||
:menuselection:`⚙️ (Action) --> Import records`.
|
||||
|
||||
.. image:: export_import_data/import-button.png
|
||||
:align: center
|
||||
:alt: Action menu revealed with the import records option highlighted.
|
||||
|
||||
There you are provided with templates you can easily populate
|
||||
with your own data. Such templates can be imported in one click;
|
||||
The data mapping is already done.
|
||||
After clicking :guilabel:`Import records`, Odoo reveals a separate page with templates that can be
|
||||
downloaded and populated with the company's own data. Such templates can be imported in one click,
|
||||
since the data mapping is already done. To download a template click :guilabel:`Import Template for
|
||||
Customers` at the center of the page.
|
||||
|
||||
How to adapt the template
|
||||
-------------------------
|
||||
.. important::
|
||||
When importing a :abbr:`CSV (Comma-separated Values)` file, Odoo provides :guilabel:`Formatting`
|
||||
options. These options do **not** appear when importing the proprietary Excel file type (`.xls`,
|
||||
`.xlsx`).
|
||||
|
||||
* Add, remove and sort columns to fit at best your data structure.
|
||||
* We advise to not remove the **ID** one (see why in the next section).
|
||||
* Set a unique ID to every single record by dragging down the ID sequencing.
|
||||
.. image:: export_import_data/formatting.png
|
||||
:align: center
|
||||
:alt: Formatting options presented when a CVS file is imported in Odoo.
|
||||
|
||||
Make necessary adjustments to the *Formatting* options, and ensure all columns in the
|
||||
:guilabel:`Odoo field` and :guilabel:`File Column` are free of errors. Finally, click
|
||||
:guilabel:`Import` to import the data.
|
||||
|
||||
Adapt a template
|
||||
----------------
|
||||
|
||||
Import templates are provided in the import tool of the most common data to import (contacts,
|
||||
products, bank statements, etc.). Open them with any spreadsheet software (*Microsoft Office*,
|
||||
*OpenOffice*, *Google Drive*, etc.).
|
||||
|
||||
Once the template is downloaded, proceed to follow these steps:
|
||||
|
||||
- Add, remove, and sort columns to best fit the data structure.
|
||||
- It is strongly advised to **not** remove the :guilabel:`External ID` (ID) column (see why in the
|
||||
next section).
|
||||
- Set a unique ID to every record by dragging down the ID sequencing in the :guilabel:`External ID`
|
||||
(ID) column.
|
||||
|
||||
.. image:: export_import_data/dragdown.gif
|
||||
:align: center
|
||||
:alt: An animation of the mouse dragging down the ID column, so each record has a unique ID.
|
||||
|
||||
* When you add a new column, Odoo might not be able to map it automatically if its
|
||||
label doesn't fit any field in Odoo. Don't worry! You can map
|
||||
new columns manually when you test the import. Search the list for the
|
||||
corresponding field.
|
||||
.. note::
|
||||
When a new column is added, Odoo may not be able to map it automatically, if its label does not
|
||||
fit any field within Odoo. However, new columns can be mapped manually when the import is tested.
|
||||
Search the drop-down menu for the corresponding field.
|
||||
|
||||
.. image:: export_import_data/field_list.png
|
||||
:align: center
|
||||
.. image:: export_import_data/field_list.png
|
||||
:align: center
|
||||
:alt: Drop-down menu expanded in the initial import screen on Odoo.
|
||||
|
||||
Then, use this field's label in your file in order to make it work
|
||||
straight on the very next time.
|
||||
Then, use this field's label in the import file to ensure future imports are successful.
|
||||
|
||||
How to import from another application
|
||||
--------------------------------------
|
||||
.. tip::
|
||||
Another useful way to find out the proper column names to import is to export a sample file
|
||||
using the fields that should be imported. This way, if there is not a sample import template,
|
||||
the names are accurate.
|
||||
|
||||
In order to re-create relationships between different records,
|
||||
you should use the unique identifier from the original application
|
||||
and map it to the **ID** (External ID) column in Odoo.
|
||||
When you import another record that links to the first one,
|
||||
use **XXX/ID** (XXX/External ID) to the original unique identifier.
|
||||
You can also find this record using its name but you will be stuck
|
||||
if at least 2 records have the same name.
|
||||
Import from another application
|
||||
-------------------------------
|
||||
|
||||
The **ID** will also be used to update the original import
|
||||
if you need to re-import modified data later,
|
||||
it's thus good practice to specify it whenever possible.
|
||||
The :guilabel:`External ID` (ID) is a unique identifier for the line item. Feel free to use one
|
||||
from previous software to facilitate the transition to Odoo.
|
||||
|
||||
Setting an ID is not mandatory when importing, but it helps in many cases:
|
||||
|
||||
I cannot find the field I want to map my column to
|
||||
--------------------------------------------------
|
||||
- Update imports: import the same file several times without creating duplicates.
|
||||
- :ref:`Import relation fields <export_import_data/relation-fields>`.
|
||||
|
||||
Odoo tries to find with some heuristic, based on the first ten lines of
|
||||
the files, the type of field for each column inside your file.
|
||||
For example if you have a column only containing numbers,
|
||||
only the fields that are of type *Integer* will be displayed for you
|
||||
to choose from.
|
||||
While this behavior might be good and easy for most cases,
|
||||
it is also possible that it goes wrong or that you want to
|
||||
map your column to a field that is not proposed by default.
|
||||
To recreate relationships between different records, the unique identifier from the original
|
||||
application should be used to map it to the :guilabel:`External ID` (ID) column in Odoo.
|
||||
|
||||
If that happens, you just have to check the
|
||||
** Show fields of relation fields (advanced)** option,
|
||||
you will then be able to choose from the complete list of fields for each column.
|
||||
When another record is imported that links to the first one, use **XXX/ID** (XXX/External ID) for
|
||||
the original unique identifier. This record can also be found using its name.
|
||||
|
||||
.. warning::
|
||||
It should be noted that there will be a conflict if two or more records have the same name.
|
||||
|
||||
The :guilabel:`External ID` (ID) can also be used to update the original import, if modified data
|
||||
needs to be re-imported later, therefore, it is a good practice to specify it whenever possible.
|
||||
|
||||
Field missing to map column
|
||||
---------------------------
|
||||
|
||||
Odoo heuristically tries to find the type of field for each column inside the imported file, based
|
||||
on the first ten lines of the files.
|
||||
|
||||
For example, if there is a column only containing numbers, only the fields with the *integer* type
|
||||
are presented as options.
|
||||
|
||||
While this behavior might be beneficial in most cases, it is also possible that it could fail, or
|
||||
the column may be mapped to a field that is not proposed by default.
|
||||
|
||||
If this happens, check the :guilabel:`Show fields of relation fields (advanced) option`, then a
|
||||
complete list of fields becomes available for each column.
|
||||
|
||||
.. image:: export_import_data/field_list.png
|
||||
:align: center
|
||||
:alt: Searching for the field to match the tax column.
|
||||
|
||||
Where can I change the date import format?
|
||||
------------------------------------------
|
||||
|
||||
Odoo can automatically detect if a column is a date, and it will try to guess the date format from a
|
||||
set of most commonly used date formats. While this process can work for many date formats, some date
|
||||
formats will not be recognized. This can cause confusion due to day-month inversions; it is
|
||||
difficult to guess which part of a date format is the day and which part is the month in a date such
|
||||
as '01-03-2016'.
|
||||
|
||||
To view which date format Odoo has found from your file you can check the **Date Format** that is
|
||||
shown when clicking on **Options** under the file selector. If this format is incorrect you can
|
||||
change it to your liking using the *ISO 8601* to define the format.
|
||||
Change data import format
|
||||
-------------------------
|
||||
|
||||
.. note::
|
||||
If you are importing an excel (.xls, .xlsx) file, you can use date cells to store dates as the
|
||||
display of dates in excel is different from the way it is stored. That way you will be sure that
|
||||
the date format is correct in Odoo whatever your locale date format is.
|
||||
Odoo can automatically detect if a column is a date, and tries to guess the date format from a
|
||||
set of most commonly used date formats. While this process can work for many date formats, some
|
||||
date formats are not recognizable. This can cause confusion, due to day-month inversions; it is
|
||||
difficult to guess which part of a date format is the day, and which part is the month, in a
|
||||
date, such as `01-03-2016`.
|
||||
|
||||
Can I import numbers with currency sign (e.g.: $32.00)?
|
||||
-------------------------------------------------------
|
||||
When importing a :abbr:`CSV (Comma-separated Values)` file, Odoo provides :guilabel:`Formatting`
|
||||
options.
|
||||
|
||||
Yes, we fully support numbers with parenthesis to represent negative sign as well as numbers with
|
||||
currency sign attached to them. Odoo also automatically detect which thousand/decimal separator you
|
||||
use (you can change those under **options**). If you use a currency symbol that is not known to
|
||||
Odoo, it might not be recognized as a number though and it will crash.
|
||||
To view which date format Odoo has found from the file, check the :guilabel:`Date Format` that is
|
||||
shown when clicking on options under the file selector. If this format is incorrect, change it to
|
||||
the preferred format using *ISO 8601* to define the format.
|
||||
|
||||
Examples of supported numbers (using thirty-two thousands as an example):
|
||||
.. important::
|
||||
*ISO 8601* is an international standard, covering the worldwide exchange, along with the
|
||||
communication of date and time-related data. For example, the date format should be `YYYY-MM-DD`.
|
||||
So, in the case of July 24th 1981, it should be written as `1981-07-24`.
|
||||
|
||||
.. tip::
|
||||
When importing Excel files (`.xls`, `.xlsx`), consider using *date cells* to store dates. This
|
||||
maintains locale date formats for display, regardless of how the date is formatted in Odoo. When
|
||||
importing a :abbr:`CSV (Comma-separated Values)` file, use Odoo's :guilabel:`Formatting` section
|
||||
to select the date format columns to import.
|
||||
|
||||
Import numbers with currency signs
|
||||
----------------------------------
|
||||
|
||||
Odoo fully supports numbers with parenthesis to represent negative signs, as well as numbers with
|
||||
currency signs attached to them. Odoo also automatically detects which thousand/decimal separator is
|
||||
used. If a currency symbol unknown to Odoo is used, it might not be recognized as a number, and the
|
||||
import crashes.
|
||||
|
||||
.. note::
|
||||
When importing a :abbr:`CSV (Comma-separated Values)` file, the :guilabel:`Formatting` menu
|
||||
appears on the left-hand column. Under these options, the :guilabel:`Thousands Separator` can be
|
||||
changed.
|
||||
|
||||
Examples of supported numbers (using 'thirty-two thousand' as the figure):
|
||||
|
||||
- 32.000,00
|
||||
- 32000,00
|
||||
@@ -176,156 +256,191 @@ Example that will not work:
|
||||
- ABC 32.000,00
|
||||
- $ (32.000,00)
|
||||
|
||||
What can I do when the Import preview table isn't displayed correctly?
|
||||
----------------------------------------------------------------------
|
||||
.. important::
|
||||
A :guilabel:`() (parenthesis)` around the number indicates that the number is a negative value.
|
||||
The currency symbol **must** be placed within the parenthesis for Odoo to recognize it as a
|
||||
negative currency value.
|
||||
|
||||
By default the Import preview is set on commas as field separators and quotation marks as text
|
||||
delimiters. If your csv file does not have these settings, you can modify the File Format Options
|
||||
(displayed under the Browse CSV file bar after you select your file).
|
||||
Import preview table not displayed correctly
|
||||
--------------------------------------------
|
||||
|
||||
Note that if your CSV file has a tabulation as separator, Odoo will not detect the separations. You
|
||||
will need to change the file format options in your spreadsheet application. See the following
|
||||
question.
|
||||
By default, the import preview is set on commas as field separators, and quotation marks as text
|
||||
delimiters. If the :abbr:`CSV (Comma-separated Values)` file does not have these settings, modify
|
||||
the :guilabel:`Formatting` options (displayed under the :guilabel:`Import` :abbr:`CSV
|
||||
(Comma-separated Values)` file bar after selecting the :abbr:`CSV (Comma-separated Values)` file).
|
||||
|
||||
How can I change the CSV file format options when saving in my spreadsheet application?
|
||||
---------------------------------------------------------------------------------------
|
||||
.. important::
|
||||
If the :abbr:`CSV (Comma-separated Values)` file has a tabulation as a separator, Odoo does
|
||||
**not** detect the separations. The file format options need to be modified in the spreadsheet
|
||||
application. See the following :ref:`Change CSV file format <export_import_data/change-csv>`
|
||||
section.
|
||||
|
||||
If you edit and save CSV files in spreadsheet applications, your computer's regional settings will
|
||||
be applied for the separator and delimiter. We suggest you use OpenOffice or LibreOffice Calc as
|
||||
they will allow you to modify all three options (in :menuselection:`'Save As' dialog box --> Check the
|
||||
box 'Edit filter settings' --> Save`).
|
||||
.. _export_import_data/change-csv:
|
||||
|
||||
Microsoft Excel will allow you to modify only the encoding when saving (in :menuselection:`'Save As'
|
||||
dialog box --> click 'Tools' dropdown list --> Encoding tab`).
|
||||
Change CSV file format in spreadsheet application
|
||||
-------------------------------------------------
|
||||
|
||||
What's the difference between Database ID and External ID?
|
||||
----------------------------------------------------------
|
||||
When editing and saving :abbr:`CSV (Comma-separated Values)` files in spreadsheet applications, the
|
||||
computer's regional settings are applied for the separator and delimiter. Odoo suggests using
|
||||
*OpenOffice* or *LibreOffice*, as both applications allow modifications of all three options (from
|
||||
*LibreOffice* application, go to :menuselection:`'Save As' dialog box --> Check the box 'Edit filter
|
||||
settings' --> Save`).
|
||||
|
||||
Microsoft Excel can modify the encoding when saving (:menuselection:`'Save As' dialog box -->
|
||||
'Tools' drop-down menu --> Encoding tab`).
|
||||
|
||||
Difference between Database ID and External ID
|
||||
----------------------------------------------
|
||||
|
||||
Some fields define a relationship with another object. For example, the country of a contact is a
|
||||
link to a record of the 'Country' object. When you want to import such fields, Odoo will have to
|
||||
recreate links between the different records. To help you import such fields, Odoo provides three
|
||||
mechanisms. You must use one and only one mechanism per field you want to import.
|
||||
link to a record of the 'Country' object. When such fields are imported, Odoo has to recreate links
|
||||
between the different records. To help import such fields, Odoo provides three mechanisms.
|
||||
|
||||
For example, to reference the country of a contact, Odoo proposes you 3 different fields to import:
|
||||
.. important::
|
||||
**Only one** mechanism should be used per field that is imported.
|
||||
|
||||
- Country: the name or code of the country
|
||||
- Country/Database ID: the unique Odoo ID for a record, defined by the ID postgresql column
|
||||
- Country/External ID: the ID of this record referenced in another application (or the .XML file
|
||||
that imported it)
|
||||
For example, to reference the country of a contact, Odoo proposes three different fields to import:
|
||||
|
||||
For the country Belgium, you can use one of these 3 ways to import:
|
||||
- :guilabel:`Country`: the name or code of the country
|
||||
- :guilabel:`Country/Database ID`: the unique Odoo ID for a record, defined by the ID PostgreSQL
|
||||
column
|
||||
- :guilabel:`Country/External ID`: the ID of this record referenced in another application (or the
|
||||
`.XML` file that imported it)
|
||||
|
||||
- Country: Belgium
|
||||
- Country/Database ID: 21
|
||||
- Country/External ID: base.be
|
||||
For the country of Belgium, for example, use one of these three ways to import:
|
||||
|
||||
According to your need, you should use one of these 3 ways to reference records in relations. Here
|
||||
is when you should use one or the other, according to your need:
|
||||
- :guilabel:`Country`: `Belgium`
|
||||
- :guilabel:`Country/Database ID`: `21`
|
||||
- :guilabel:`Country/External ID`: `base.be`
|
||||
|
||||
- Use Country: This is the easiest way when your data come from CSV files that have been created
|
||||
manually.
|
||||
- Use Country/Database ID: You should rarely use this notation. It's mostly used by developers as
|
||||
it's main advantage is to never have conflicts (you may have several records with the same name,
|
||||
According to the company's need, use one of these three ways to reference records in relations. Here
|
||||
is an example when one or the other should be used, according to the need:
|
||||
|
||||
- Use :guilabel:`Country`: this is the easiest way when data comes from :abbr:`CSV (Comma-separated
|
||||
Values)` files that have been created manually.
|
||||
- Use :guilabel:`Country/Database ID`: this should rarely be used. It is mostly used by developers
|
||||
as the main advantage is to never have conflicts (there may be several records with the same name,
|
||||
but they always have a unique Database ID)
|
||||
- Use Country/External ID: Use External ID when you import data from a third party application.
|
||||
- Use :guilabel:`Country/External ID`: use *External ID* when importing data from a third-party
|
||||
application.
|
||||
|
||||
When you use External IDs, you can import CSV files with the "External ID" column to define the
|
||||
External ID of each record you import. Then, you will be able to make a reference to that record
|
||||
with columns like "Field/External ID". The following two CSV files give you an example for Products
|
||||
and their Categories.
|
||||
When *External IDs* are used, import :abbr:`CSV (Comma-separated Values)` files with the
|
||||
:guilabel:`External ID` (ID) column defining the *External ID* of each record that is imported.
|
||||
Then, a reference can be made to that record with columns, like `Field/External ID`. The following
|
||||
two :abbr:`CSV (Comma-separated Values)` files provide an example for products and their categories.
|
||||
|
||||
:download:`CSV file for categories
|
||||
<export_import_data/External_id_3rd_party_application_product_categories.csv>`.
|
||||
- :download:`CSV file for categories
|
||||
<export_import_data/External_id_3rd_party_application_product_categories.csv>`
|
||||
- :download:`CSV file for Products
|
||||
<export_import_data/External_id_3rd_party_application_products.csv>`
|
||||
|
||||
:download:`CSV file for Products
|
||||
<export_import_data/External_id_3rd_party_application_products.csv>`.
|
||||
.. _export_import_data/relation-fields:
|
||||
|
||||
What can I do if I have multiple matches for a field?
|
||||
-----------------------------------------------------
|
||||
Import relation fields
|
||||
----------------------
|
||||
|
||||
If for example you have two product categories with the child name "Sellable" (ie. "Misc.
|
||||
Products/Sellable" & "Other Products/Sellable"), your validation is halted but you may still import
|
||||
your data. However, we recommend you do not import the data because they will all be linked to the
|
||||
first 'Sellable' category found in the Product Category list ("Misc. Products/Sellable"). We
|
||||
recommend you modify one of the duplicates' values or your product category hierarchy.
|
||||
An Odoo object is always related to many other objects (e.g. a product is linked to product
|
||||
categories, attributes, vendors, etc.). To import those relations, the records of the related object
|
||||
need to be imported first, from their own list menu.
|
||||
|
||||
However if you do not wish to change your configuration of product categories, we recommend you use
|
||||
make use of the external ID for this field 'Category'.
|
||||
This can be achieved by using either the name of the related record, or its ID, depending on the
|
||||
circumstances. The ID is expected when two records have the same name. In such a case add `/ ID`
|
||||
at the end of the column title (e.g. for product attributes: `Product Attributes / Attribute / ID`).
|
||||
|
||||
How can I import a many2many relationship field (e.g. a customer that has multiple tags)?
|
||||
-----------------------------------------------------------------------------------------
|
||||
Options for multiple matches on fields
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The tags should be separated by a comma without any spacing. For example, if you want your customer
|
||||
to be linked to both tags 'Manufacturer' and 'Retailer' then you will encode "Manufacturer,Retailer"
|
||||
in the same column of your CSV file.
|
||||
If, for example, there are two product categories with the child name `Sellable` (e.g. `Misc.
|
||||
Products/Sellable` & `Other Products/Sellable`), the validation is halted, but the data may still be
|
||||
imported. However, Odoo recommends that the data is not imported because it will all be linked to
|
||||
the first `Sellable` category found in the *Product Category* list (`Misc. Products/Sellable`).
|
||||
Odoo, instead, recommends modifying one of the duplicate's values, or the product category
|
||||
hierarchy.
|
||||
|
||||
:download:`CSV file for Manufacturer, Retailer <export_import_data/m2m_customers_tags.csv>`
|
||||
However, if the company does not wish to change the configuration of product categories, Odoo
|
||||
recommends making use of the *External ID* for this field, 'Category'.
|
||||
|
||||
Import many2many relationship fields
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
How can I import a one2many relationship (e.g. several Order Lines of a Sales Order)?
|
||||
-------------------------------------------------------------------------------------
|
||||
The tags should be separated by a comma, without any spacing. For example, if a customer needs to be
|
||||
linked to both tags: `Manufacturer` and `Retailer` then 'Manufacturer,Retailer' needs to be encoded
|
||||
in the same column of the :abbr:`CSV (Comma-separated Values)` file.
|
||||
|
||||
If you want to import sales order having several order lines; for each order line, you need to
|
||||
reserve a specific row in the CSV file. The first order line will be imported on the same row as the
|
||||
information relative to order. Any additional lines will need an additional row that does not have
|
||||
any information in the fields relative to the order. As an example, here is
|
||||
``purchase.order_functional_error_line_cant_adpat.CSV`` file of some quotations you can import,
|
||||
based on demo data.
|
||||
- :download:`CSV file for Manufacturer, Retailer <export_import_data/m2m_customers_tags.csv>`
|
||||
|
||||
:download:`File for some Quotations <export_import_data/purchase.order_functional_error_line_cant_adpat.csv>`.
|
||||
Import one2many relationships
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The following CSV file shows how to import purchase orders with their respective purchase order
|
||||
lines:
|
||||
If a company wants to import a sales order with several order lines, a specific row **must** be
|
||||
reserved in the :abbr:`CSV (Comma-separated Values)` file for each order line. The first order line
|
||||
is imported on the same row as the information relative to order. Any additional lines need an
|
||||
additional row that does not have any information in the fields relative to the order.
|
||||
|
||||
:download:`Purchase orders with their respective purchase order lines <export_import_data/o2m_purchase_order_lines.csv>`.
|
||||
As an example, here is a :abbr:`CSV (Comma-separated Values)` file of some quotations that can be
|
||||
imported, based on demo data:
|
||||
|
||||
The following CSV file shows how to import customers and their respective contacts:
|
||||
- :download:`File for some Quotations
|
||||
<export_import_data/purchase.order_functional_error_line_cant_adpat.csv>`
|
||||
|
||||
:download:`Customers and their respective contacts <export_import_data/o2m_customers_contacts.csv>`.
|
||||
The following :abbr:`CSV (Comma-separated Values)` file shows how to import purchase orders with
|
||||
their respective purchase order lines:
|
||||
|
||||
Can I import several times the same record?
|
||||
-------------------------------------------
|
||||
- :download:`Purchase orders with their respective purchase order lines
|
||||
<export_import_data/o2m_purchase_order_lines.csv>`
|
||||
|
||||
If you import a file that contains one of the column "External ID" or "Database ID", records that
|
||||
have already been imported will be modified instead of being created. This is very useful as it
|
||||
allows you to import several times the same CSV file while having made some changes in between two
|
||||
imports. Odoo will take care of creating or modifying each record depending if it's new or not.
|
||||
The following :abbr:`CSV (Comma-separated Values)` file shows how to import customers and their
|
||||
respective contacts:
|
||||
|
||||
This feature allows you to use the Import/Export tool of Odoo to modify a batch of records in your
|
||||
favorite spreadsheet application.
|
||||
- :download:`Customers and their respective contacts
|
||||
<export_import_data/o2m_customers_contacts.csv>`
|
||||
|
||||
What happens if I do not provide a value for a specific field?
|
||||
Import records several times
|
||||
----------------------------
|
||||
|
||||
If an imported file contains one of the columns: :guilabel:`External ID` or :guilabel:`Database ID`,
|
||||
records that have already been imported are modified, instead of being created. This is extremely
|
||||
useful as it allows users to import the same :abbr:`CSV (Comma-separated Values)` file several
|
||||
times, while having made some changes in between two imports.
|
||||
|
||||
Odoo takes care of creating or modifying each record, depending if it is new or not.
|
||||
|
||||
This feature allows a company to use the *Import/Export tool* in Odoo to modify a batch of records
|
||||
in a spreadsheet application.
|
||||
|
||||
Value not provided for a specific field
|
||||
---------------------------------------
|
||||
|
||||
If all fields are not set in the CSV file, Odoo assigns the default value for every non-defined
|
||||
field. But, if fields are set with empty values in the :abbr:`CSV (Comma-separated Values)` file,
|
||||
Odoo sets the empty value in the field, instead of assigning the default value.
|
||||
|
||||
Export/import different tables from an SQL application to Odoo
|
||||
--------------------------------------------------------------
|
||||
|
||||
If you do not set all fields in your CSV file, Odoo will assign the default value for every non
|
||||
defined fields. But if you set fields with empty values in your CSV file, Odoo will set the EMPTY
|
||||
value in the field, instead of assigning the default value.
|
||||
If data needs to be imported from different tables, relations need to be recreated between records
|
||||
belonging to different tables. For instance, if companies and people are imported, the link between
|
||||
each person and the company they work for needs to be recreated.
|
||||
|
||||
How to export/import different tables from an SQL application to Odoo?
|
||||
----------------------------------------------------------------------
|
||||
To manage relations between tables, use the `External ID` facilities of Odoo. The `External ID` of a
|
||||
record is the unique identifier of this record in another application. The `External ID` must be
|
||||
unique across all records of all objects. It is a good practice to prefix this `External ID` with
|
||||
the name of the application or table. (like, 'company_1', 'person_1' - instead of '1')
|
||||
|
||||
If you need to import data from different tables, you will have to recreate relations between
|
||||
records belonging to different tables. (e.g. if you import companies and persons, you will have to
|
||||
recreate the link between each person and the company they work for).
|
||||
As an example, suppose there is an SQL database with two tables that are to be imported: companies
|
||||
and people. Each person belongs to one company, so the link between a person and the company they
|
||||
work for must be recreated.
|
||||
|
||||
To manage relations between tables, you can use the "External ID" facilities of Odoo. The "External
|
||||
ID" of a record is the unique identifier of this record in another application. This "External ID"
|
||||
must be unique across all the records of all objects, so it's a good practice to prefix this
|
||||
"External ID" with the name of the application or table. (like 'company_1', 'person_1' instead of
|
||||
'1')
|
||||
Test this example, with a :download:`sample of a PostgreSQL database
|
||||
<export_import_data/database_import_test.sql>`.
|
||||
|
||||
As an example, suppose you have a SQL database with two tables you want to import: companies and
|
||||
persons. Each person belong to one company, so you will have to recreate the link between a person
|
||||
and the company he work for. (If you want to test this example, here is a :download:`dump of such a
|
||||
PostgreSQL database <export_import_data/database_import_test.sql>`)
|
||||
|
||||
We will first export all companies and their "External ID". In PSQL, write the following command:
|
||||
First, export all companies and their *External ID*. In PSQL, write the following command:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
> copy (select 'company_'||id as "External ID",company_name as "Name",'True' as "Is a Company" from companies) TO '/tmp/company.csv' with CSV HEADER;
|
||||
|
||||
This SQL command will create the following CSV file:
|
||||
This SQL command creates the following :abbr:`CSV (Comma-separated Values)` file:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
@@ -334,13 +449,14 @@ This SQL command will create the following CSV file:
|
||||
company_2,Organi,True
|
||||
company_3,Boum,True
|
||||
|
||||
To create the CSV file for persons, linked to companies, we will use the following SQL command in PSQL:
|
||||
To create the :abbr:`CSV (Comma-separated Values)` file for people linked to companies, use the
|
||||
following SQL command in PSQL:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
> copy (select 'person_'||id as "External ID",person_name as "Name",'False' as "Is a Company",'company_'||company_id as "Related Company/External ID" from persons) TO '/tmp/person.csv' with CSV
|
||||
|
||||
It will produce the following CSV file:
|
||||
It produces the following :abbr:`CSV (Comma-separated Values)` file:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
@@ -350,62 +466,13 @@ It will produce the following CSV file:
|
||||
person_3,Eric,False,company_2
|
||||
person_4,Ramsy,False,company_3
|
||||
|
||||
As you can see in this file, Fabien and Laurence are working for the Bigees company (company_1) and
|
||||
Eric is working for the Organi company. The relation between persons and companies is done using the
|
||||
External ID of the companies. We had to prefix the "External ID" by the name of the table to avoid a
|
||||
conflict of ID between persons and companies (person_1 and company_1 who shared the same ID 1 in the
|
||||
original database).
|
||||
In this file, Fabien and Laurence are working for the Bigees company (`company_1`), and Eric is
|
||||
working for the Organi company. The relation between people and companies is done using the
|
||||
*External ID* of the companies. The *External ID* is prefixed by the name of the table to avoid a
|
||||
conflict of ID between people and companies (`person_1` and `company_1`, who shared the same ID 1 in
|
||||
the original database).
|
||||
|
||||
The two files produced are ready to be imported in Odoo without any modifications. After having
|
||||
imported these two CSV files, you will have 4 contacts and 3 companies. (the firsts two contacts are
|
||||
linked to the first company). You must first import the companies and then the persons.
|
||||
|
||||
How to adapt an import template
|
||||
===============================
|
||||
|
||||
Import templates are provided in the import tool of the most common data to
|
||||
import (contacts, products, bank statements, etc.).
|
||||
You can open them with any spreadsheets software (Microsoft Office,
|
||||
OpenOffice, Google Drive, etc.).
|
||||
|
||||
How to customize the file
|
||||
=========================
|
||||
|
||||
* Remove columns you don't need. We advise to not remove the *ID* one (see
|
||||
why here below).
|
||||
* Set a unique ID to every single record by dragging down the ID sequencing.
|
||||
|
||||
.. image:: export_import_data/dragdown.gif
|
||||
:align: center
|
||||
|
||||
* When you add a new column, Odoo might not be able to map it automatically if its
|
||||
label doesn't fit any field of the system.
|
||||
If so, find the corresponding field using the search.
|
||||
|
||||
.. image:: export_import_data/field_list.png
|
||||
:align: center
|
||||
|
||||
Then, use the label you found in your import template in order to make it work
|
||||
straight away the very next time you try to import.
|
||||
|
||||
Why an “ID” column
|
||||
==================
|
||||
|
||||
The **ID** (External ID) is an unique identifier for the line item.
|
||||
Feel free to use the one of your previous software to ease the transition to Odoo.
|
||||
|
||||
Setting an ID is not mandatory when importing but it helps in many cases:
|
||||
|
||||
* Update imports: you can import the same file several times without creating duplicates;
|
||||
* Import relation fields (see here below).
|
||||
|
||||
How to import relation fields
|
||||
=============================
|
||||
|
||||
An Odoo object is always related to many other objects (e.g. a product is linked
|
||||
to product categories, attributes, vendors, etc.). To import those relations you need to
|
||||
import the records of the related object first from their own list menu.
|
||||
|
||||
You can do it using either the name of the related record or its ID. The ID is expected when
|
||||
two records have the same name. In such a case add " / ID" at the end of the column title
|
||||
(e.g. for product attributes: Product Attributes / Attribute / ID).
|
||||
imported these two :abbr:`CSV (Comma-separated Values)` files, there are four contacts and three
|
||||
companies (the first two contacts are linked to the first company). Keep in mind to first import
|
||||
the companies, and then the people.
|
||||
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 47 KiB |
@@ -1,6 +1,6 @@
|
||||
=====================
|
||||
In-app purchase (IAP)
|
||||
=====================
|
||||
======================
|
||||
In-app purchases (IAP)
|
||||
======================
|
||||
|
||||
.. |IAP| replace:: :abbr:`IAP (In-app purchases)`
|
||||
|
||||
@@ -22,7 +22,9 @@ the service in the app to activate it. However, each service requires its own pr
|
||||
when they run out, users **must** :ref:`buy more <iap/buying_credits>` in order to keep using it.
|
||||
|
||||
.. note::
|
||||
Users with an Enterprise version of Odoo Online get free credits to test IAP features.
|
||||
Enterprise Odoo users with a valid subscription get free credits to test IAP features before
|
||||
deciding to purchase more credits for the database. This includes demo/training databases,
|
||||
educational databases, and one-app-free databases.
|
||||
|
||||
.. _in_app_purchase/portal:
|
||||
|
||||
@@ -31,7 +33,7 @@ IAP services
|
||||
|
||||
|IAP| services are provided by Odoo, as well as third-parties, and have a wide range of uses.
|
||||
|
||||
The following |IAP| services are provided by Odoo:
|
||||
The following |IAP| services are offered by Odoo:
|
||||
|
||||
- :guilabel:`Documents Digitization`: digitizes scanned or PDF vendor bills, expenses, and resumes
|
||||
with OCR and AI.
|
||||
@@ -40,9 +42,12 @@ The following |IAP| services are provided by Odoo:
|
||||
- :guilabel:`Lead Generation`: generates leads based on a set of criteria, and converts web visitors
|
||||
into quality leads and opportunities.
|
||||
- :guilabel:`Snailmail`: sends customer invoices and follow-up reports by post, worldwide.
|
||||
- :guilabel:`Signer identification with itsme®️`: ask document signatories in Odoo *Sign* to provide
|
||||
their identity using the *itsme®* identity platform, which is available in Belgium and the
|
||||
Netherlands.
|
||||
|
||||
For more information on every service currently available, visit the `Odoo IAP Catalog
|
||||
<https://iap.odoo.com/iap/all-in-app-services>`_.
|
||||
For more information on every service currently available (offered from developers other than Odoo),
|
||||
visit the `Odoo IAP Catalog <https://iap.odoo.com/iap/all-in-app-services>`_.
|
||||
|
||||
Use IAP services
|
||||
----------------
|
||||
@@ -53,7 +58,7 @@ settings. To use a service, simply interact with it wherever it appears in the d
|
||||
.. example::
|
||||
The following flow focuses on the *SMS* |IAP| service being used from a contact's record.
|
||||
|
||||
This can be done by clicking the :guilabel:`📱 (phone) SMS` icon within the database.
|
||||
This can be done by clicking the :guilabel:`📱 SMS` icon within the database.
|
||||
|
||||
.. image:: in_app_purchase/sms-icon.png
|
||||
:align: center
|
||||
@@ -61,16 +66,17 @@ settings. To use a service, simply interact with it wherever it appears in the d
|
||||
|
||||
One way to utilize the *SMS* |IAP| service with Odoo is showcased in the following steps:
|
||||
|
||||
#. Navigate to the :menuselection:`Contacts application`, and click on a contact with a mobile
|
||||
phone number entered in either the :guilabel:`Phone` or :guilabel:`Mobile` field of the
|
||||
contact form.
|
||||
#. Hover the mouse over the :guilabel:`Phone` or :guilabel:`Mobile` field, and a :guilabel:`📱
|
||||
(phone) SMS` icon appears to the right.
|
||||
#. Click the :guilabel:`📱 (phone) SMS` icon, and a :guilabel:`Send SMS Text Message` pop-up
|
||||
window appears.
|
||||
#. Type a message in the :guilabel:`Message` field of the :guilabel:`Send SMS Text Message`
|
||||
pop-up window. Then, click the :guilabel:`Send SMS` button. Odoo then sends the message, via
|
||||
SMS, to the contact, and logs what was sent in the *chatter* of the contact's form.
|
||||
First, navigate to the :menuselection:`Contacts application`, and click on a contact with a
|
||||
mobile phone number entered in either the :guilabel:`Phone` or :guilabel:`Mobile` field of the
|
||||
contact form.
|
||||
|
||||
Next, find the :guilabel:`📱 SMS` icon that appears to the right of the :guilabel:`Phone` or
|
||||
:guilabel:`Mobile` fields. Click the :guilabel:`📱 SMS` icon, and a :guilabel:`Send SMS Text
|
||||
Message` pop-up window appears.
|
||||
|
||||
Type a message in the :guilabel:`Message` field of the pop-up window. Then, click the
|
||||
:guilabel:`Send SMS` button. Odoo then sends the message, via SMS, to the contact, and logs what
|
||||
was sent in the *chatter* of the contact's form.
|
||||
|
||||
Upon sending the SMS message, the prepaid credits for the *SMS* |IAP| service are automatically
|
||||
deducted from the existing credits. If there are not enough credits to send the message, Odoo
|
||||
@@ -80,10 +86,10 @@ settings. To use a service, simply interact with it wherever it appears in the d
|
||||
For more information on how to use various |IAP| services, and for more in-depth instructions
|
||||
related to SMS functionality in Odoo, review the documentation below:
|
||||
|
||||
- :doc:`Lead mining </applications/sales/crm/acquire_leads/lead_mining>`
|
||||
- :doc:`Lead mining <../sales/crm/acquire_leads/lead_mining>`
|
||||
- :doc:`Enrich your contacts base with Partner Autocomplete
|
||||
</applications/sales/crm/optimize/partner_autocomplete>`
|
||||
- :doc:`SMS essentials </applications/marketing/sms_marketing/essentials/sms_essentials>`
|
||||
<../sales/crm/optimize/partner_autocomplete>`
|
||||
- :doc:`SMS essentials <../marketing/sms_marketing/essentials/sms_essentials>`
|
||||
|
||||
.. _in_app_purchase/credits:
|
||||
|
||||
@@ -113,7 +119,7 @@ Credits are purchased in *Packs* from the `Odoo IAP Catalog
|
||||
The number of credits consumed depends on the length of the SMS and the country of destination.
|
||||
|
||||
For more information, refer to the :doc:`SMS Pricing and FAQ
|
||||
</applications/marketing/sms_marketing/pricing/pricing_and_faq>` documentation.
|
||||
<../marketing/sms_marketing/pricing/pricing_and_faq>` documentation.
|
||||
|
||||
.. _iap/buying_credits:
|
||||
|
||||
@@ -124,9 +130,10 @@ If there are not enough credits to perform a task, the database automatically pr
|
||||
of more credits.
|
||||
|
||||
Users can check the current balance of credits for each service, and manually purchase more credits,
|
||||
by navigating to the :menuselection:`Settings app --> Search IAP --> View My Services`.
|
||||
by navigating to the :menuselection:`Settings app --> Contacts section`, and beneath the
|
||||
:guilabel:`Odoo IAP` setting, click :guilabel:`View My Services`.
|
||||
|
||||
Doing so reveals an :guilabel:`IAP Account` page, listing the various |IAP| services in the
|
||||
Doing so reveals an :guilabel:`IAP Service` page, listing the various |IAP| services in the
|
||||
database. From here, click an |IAP| service to open its :guilabel:`Account Information` page, where
|
||||
additional credits can be purchased.
|
||||
|
||||
@@ -135,32 +142,29 @@ Manually buy credits
|
||||
|
||||
To manually buy credits in Odoo, follow these steps:
|
||||
|
||||
#. Go to the :menuselection:`Settings application`.
|
||||
#. Type `IAP` in the search bar.
|
||||
#. Click :guilabel:`View My Services`.
|
||||
First, go to the :menuselection:`Settings application` and type `IAP` in the :guilabel:`Search...`
|
||||
bar. Alternatively users can scroll down to the :guilabel:`Contacts` section. Under the
|
||||
:guilabel:`Contacts` section, where it says :guilabel:`Odoo IAP`, click :guilabel:`View My
|
||||
Services`.
|
||||
|
||||
.. image:: in_app_purchase/view-services.png
|
||||
:align: center
|
||||
:alt: The Settings app showing the Odoo IAP heading and View My Services button.
|
||||
.. image:: in_app_purchase/view-services.png
|
||||
:align: center
|
||||
:alt: The Settings app showing the Odoo IAP heading and View My Services button.
|
||||
|
||||
#. Doing so reveals an :guilabel:`IAP Account` page, listing the various |IAP| services in the
|
||||
database. From here, click an |IAP| service to open its :guilabel:`Account Information` page,
|
||||
where additional credits can be purchased.
|
||||
#. On the :guilabel:`Account Information` page, click the :guilabel:`Buy Credit` button.
|
||||
Doing so reveals an :guilabel:`IAP Account` page, listing the various |IAP| services in the
|
||||
database. From here, click an |IAP| service to open its :guilabel:`Account Information` page, where
|
||||
additional credits can be purchased.
|
||||
|
||||
.. image:: in_app_purchase/account-info.png
|
||||
:align: center
|
||||
:alt: The Account Information page for an IAP service showing the Buy Credit button.
|
||||
On the :guilabel:`Account Information` page, click the :guilabel:`Buy Credit` button. Doing so loads
|
||||
a :guilabel:`Buy Credits for (IAP Account)` page in a new tab. From here, click :guilabel:`Buy` on
|
||||
the desired pack of credits. Then, follow the prompts to enter payment details, and confirm the
|
||||
order.
|
||||
|
||||
#. Doing so loads a :guilabel:`Buy Credits for (IAP Account)` page in a new tab. From here, click
|
||||
:guilabel:`Buy` on the desired pack of credits. Then, follow the prompts to enter payment
|
||||
details, and confirm the order.
|
||||
.. image:: in_app_purchase/buy-pack.png
|
||||
:align: center
|
||||
:alt: The SMS service page on IAP.Odoo.com with four packs of credits available for purchase.
|
||||
|
||||
.. image:: in_app_purchase/buy-pack.png
|
||||
:align: center
|
||||
:alt: The SMS service page on IAP.Odoo.com with four packs of credits available for purchase.
|
||||
|
||||
#. Once the transaction is complete, the credits are available for use in the database.
|
||||
Once the transaction is complete, the credits are available for use in the database.
|
||||
|
||||
.. _in_app_purchase/low-credits:
|
||||
|
||||
@@ -170,23 +174,19 @@ Low-credit notification
|
||||
It is possible to be notified when credits are low, in order to avoid running out of credits, while
|
||||
using an |IAP| service. To do that, follow this process:
|
||||
|
||||
#. Go to the :menuselection:`Settings application`.
|
||||
#. Type `IAP` in the search bar.
|
||||
#. Click :guilabel:`View My Services`.
|
||||
#. The available |IAP| accounts appear in a list view on the :guilabel:`IAP Account` page. From
|
||||
here, click on the desired |IAP| account to view that service's :guilabel:`Account Information`
|
||||
page.
|
||||
#. On the :guilabel:`Account Information` page, tick the :guilabel:`Warn Me` box. Doing so reveals
|
||||
two fields on the form: :guilabel:`Threshold` and :guilabel:`Warning Email`.
|
||||
Go to the :menuselection:`Settings application`, and type `IAP` in the :guilabel:`Search...` bar.
|
||||
Under the :guilabel:`Contacts` section, where it says :guilabel:`Odoo IAP`, click :guilabel:`View My
|
||||
Services`.
|
||||
|
||||
.. image:: in_app_purchase/low-credits.png
|
||||
:align: center
|
||||
:alt: Odoo will send an email alert when credits for this service fall below the threshold.
|
||||
The available |IAP| accounts appear in a list view on the :guilabel:`IAP Account` page. From here,
|
||||
click on the desired |IAP| account to view that service's :guilabel:`Account Information` page.
|
||||
|
||||
#. In the :guilabel:`Threshold` field, enter an amount of credits Odoo should use as the minimum
|
||||
threshold for this service.
|
||||
#. In the :guilabel:`Warning Email` field, enter the email address that should receive the
|
||||
notification.
|
||||
On the :guilabel:`Account Information` page, tick the :guilabel:`Warn Me` checkbox. Doing so reveals
|
||||
two fields on the form: :guilabel:`Threshold` and :guilabel:`Warning Email`.
|
||||
|
||||
In the :guilabel:`Threshold` field, enter an amount of credits Odoo should use as the
|
||||
minimum threshold for this service. In the :guilabel:`Warning Email` field, enter the email address
|
||||
that receives the notification.
|
||||
|
||||
Odoo sends a low-credit alert to the :guilabel:`Warning Email` when the balance of credits falls
|
||||
below the amount listed as the :guilabel:`Threshold`.
|
||||
|
||||
|
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.7 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 6.9 KiB |
@@ -1,100 +1,214 @@
|
||||
=========================
|
||||
Search and filter records
|
||||
=========================
|
||||
=================================
|
||||
Search, filter, and group records
|
||||
=================================
|
||||
|
||||
Odoo uses filters to include only the most relevant records depending on the purpose of the view you
|
||||
are on. However, you can edit the default filter or search for specific values.
|
||||
|
||||
.. _search/preconfigured-filters:
|
||||
|
||||
Preconfigured filters
|
||||
=====================
|
||||
|
||||
You can modify the default selection of records by clicking :guilabel:`Filters` and selecting one or
|
||||
several **preconfigured filters**.
|
||||
|
||||
.. example::
|
||||
On the Sales Analysis report, only records at the sales order stage are selected by default.
|
||||
However, you could *also* include records at the quotation stage by selecting
|
||||
:guilabel:`Quotations`. Furthermore, you could *only* include records from a specific year, for
|
||||
example *2022*, by selecting :menuselection:`Order Date --> 2022`.
|
||||
|
||||
.. image:: search/preconfigured-filters.png
|
||||
:align: center
|
||||
:alt: Using preconfigured filters on the Sales Analysis report
|
||||
|
||||
.. note::
|
||||
If you select preconfigured filters from the same group (i.e., that are *not* separated by an
|
||||
horizontal line), the records can match *any* condition to be included. However, if you select
|
||||
filters from different groups, the records have to match *all* condition to be included.
|
||||
|
||||
.. _search/custom-filters:
|
||||
|
||||
Custom filters
|
||||
==============
|
||||
|
||||
You can create custom filters using most fields present on the model by clicking
|
||||
:menuselection:`Filters --> Add Custom Filter`, selecting a field, an operator, a value, and
|
||||
clicking :guilabel:`Apply`.
|
||||
|
||||
.. example::
|
||||
You could *only* include records from a single salesperson on the Sales Analysis report, for
|
||||
example *Mitchell Admin*, by selecting :guilabel:`Salesperson` as the field, :guilabel:`is equal
|
||||
to` as the operator, and typing `Mitchell Admin` as the value.
|
||||
|
||||
.. image:: search/custom-filter.png
|
||||
:align: center
|
||||
:alt: Using a custom filter on the Sales Analysis report
|
||||
|
||||
.. note::
|
||||
If the records should *only* match one of several conditions, click :guilabel:`Add a condition`
|
||||
before applying a custom filter. If the records should match *all* conditions, add new custom
|
||||
filters instead.
|
||||
Odoo allows for the searching, filtering, and grouping of records in a view to display only the most
|
||||
relevant records. The search bar is located at the top of the view, start typing to :ref:`search for
|
||||
values <search/values>`, or click the :guilabel:`🔽 (down arrow)` icon to access the :ref:`Filter
|
||||
<search/filters>`, :ref:`Group By <search/group>`, and :ref:`Favorites <search/favorites>` drop-down
|
||||
menus.
|
||||
|
||||
.. _search/values:
|
||||
|
||||
Search for values
|
||||
=================
|
||||
|
||||
You can use the search field to quickly look for specific values and add them as a filter. Either
|
||||
type the full value you are searching for and select the desired field, or type a part of the
|
||||
value, click the dropdown button (:guilabel:`⏵`) before the chosen field, and select the exact
|
||||
value you are looking for.
|
||||
Use the search field to quickly look for specific values, and add them as a filter. Type the value
|
||||
to search for, and select the desired option from the drop-down menu to apply the search filter.
|
||||
|
||||
.. example::
|
||||
Instead of adding a custom filter to select records where *Mitchell Admin* is the salesperson on
|
||||
the Sales Analysis report, you could search for `Mitch`, click the dropdown button
|
||||
(:guilabel:`⏵`) next to :guilabel:`Search Salesperson for: Mitch`, and select
|
||||
:guilabel:`Mitchell Admin`.
|
||||
Instead of adding a :ref:`custom filter <search/custom-filters>` to select records where
|
||||
*Mitchell Admin* is the salesperson on the *Sales Analysis* report (:menuselection:`Sales app -->
|
||||
Reporting --> Sales`), search for `Mitch`, and click the :guilabel:`⏵ (right arrow)` next to
|
||||
:guilabel:`Search Salesperson for: Mitch`, and select :guilabel:`Mitchell Admin`.
|
||||
|
||||
.. image:: search/search-values.png
|
||||
:align: center
|
||||
:alt: Searching for a specific value on the Sales Analysis report
|
||||
|
||||
.. note::
|
||||
Using the search field is equivalent to using the *contains* operator when adding a custom
|
||||
filter. If you enter a partial value and directly select the desired field, *all* records
|
||||
containing the characters you typed for the selected field will be included.
|
||||
Using the search field is equivalent to using the *contains* operator when adding a :ref:`custom
|
||||
filter <search/custom-filters>`. If a partial value is entered, and the desired field is directly
|
||||
selected (without selecting the :guilabel:`⏵ (right arrow)`), *all* records containing the typed
|
||||
characters for the selected field are included.
|
||||
|
||||
.. _search/filters:
|
||||
|
||||
Filters
|
||||
=======
|
||||
|
||||
Filters are used to select records that meet specific criteria. The default selection of records is
|
||||
specific to each view, but can be modified by selecting one (or several) :ref:`preconfigured filters
|
||||
<search/preconfigured-filters>`, or by adding a :ref:`custom filter <search/custom-filters>`.
|
||||
|
||||
.. _search/preconfigured-filters:
|
||||
|
||||
Preconfigured filters
|
||||
---------------------
|
||||
|
||||
Modify the default selection of records by clicking the :guilabel:`🔽 (down arrow)` icon from the
|
||||
search bar, and selecting one (or several) *preconfigured filters* from the :guilabel:`Filters`
|
||||
drop-down menu.
|
||||
|
||||
.. example::
|
||||
On the *Sales Analysis* report (:menuselection:`Sales app --> Reporting --> Sales`), only records
|
||||
that are at the *sales order* stage, with an *order date* within the last 365 days, are selected
|
||||
by default.
|
||||
|
||||
To also include records at the *quotation* stage, select :guilabel:`Quotations` from the
|
||||
:guilabel:`Filters`.
|
||||
|
||||
Furthermore, to *only* include sales order and quotation records from a specific year, like
|
||||
2024, for example, first remove the existing `Order Date: Last 365 Days` filter, by clicking the
|
||||
:guilabel:`❌ (remove)` icon, then select :menuselection:`Order Date --> 2024`.
|
||||
|
||||
.. image:: search/preconfigured-filters.png
|
||||
:align: center
|
||||
:alt: Using preconfigured filters on the Sales Analysis report
|
||||
|
||||
.. note::
|
||||
The preconfigured :guilabel:`Filters` are grouped, and each group is separated by a horizontal
|
||||
line. Selecting preconfigured filters from the same group allows records to match *any* of the
|
||||
applied conditions. However, selecting filters from different groups requires records to match
|
||||
*all* of the applied conditions.
|
||||
|
||||
.. _search/custom-filters:
|
||||
|
||||
Custom filters
|
||||
--------------
|
||||
|
||||
If the :ref:`preconfigured filters <search/preconfigured-filters>` are not specific enough, add a
|
||||
custom filter. To do so, click the :guilabel:`🔽 (down arrow)` icon in the search bar, then select
|
||||
:menuselection:`Filters --> Add Custom Filter`.
|
||||
|
||||
The :guilabel:`Add Custom Filter` pop-up window displays the matching option, filter rule, and a
|
||||
toggle to :guilabel:`Include archived` records.
|
||||
|
||||
.. image:: search/custom-filter.png
|
||||
:align: center
|
||||
:alt: The Add Custom Filter pop-up window.
|
||||
|
||||
The default matching configuration is to :guilabel:`Match any of the following rules`, indicating
|
||||
that each filter rule is applied independently. To change the matching configuration to
|
||||
:guilabel:`Match all of the following rules`, at least two filter rules must be added to the custom
|
||||
filter.
|
||||
|
||||
- :guilabel:`Match all 🔽 of the following rules`: **all** of the filter rules must be met.
|
||||
Logically, this is an *AND* (`&`) operation.
|
||||
- :guilabel:`Match any 🔽 of the following rules`: **any** of the filter rules can be met.
|
||||
Logically, this is an *OR* (`|`) operation.
|
||||
|
||||
By default, a single filter rule is added to the custom filter. The following describes the
|
||||
structure of a filter rule:
|
||||
|
||||
#. The first inline field is the *field name* to filter by. Some fields have refined parameters that
|
||||
are nested within another field. These fields have an :guilabel:`> (arrow)` icon beside them,
|
||||
which can be selected to reveal the nested fields.
|
||||
#. The second inline field is the conditional *operator* used to compare the field name to the
|
||||
value. The :ref:`available conditional operators <reference/orm/domains>` are specific to the
|
||||
field's data type.
|
||||
#. The third inline field is the variable *value* of the field name. The value input may appear as a
|
||||
drop-down menu, a text input, a number input, a date/time input, a boolean selector, or it may be
|
||||
blank, depending on the operator used and the field's data type.
|
||||
|
||||
Three inline buttons are also available to the right of the rule's filter criteria:
|
||||
|
||||
#. :guilabel:`➕ (plus sign)`: adds a new rule below the existing rule.
|
||||
#. :guilabel:`(Add branch)`: adds a new group of rules below the existing rule, with the
|
||||
:guilabel:`any` and :guilabel:`all` matching options available to define how each rule within
|
||||
this branch is applied to the filter. If the matching option is set to the same as the parent
|
||||
group, the fields are moved to join the parent group.
|
||||
|
||||
.. example::
|
||||
If the matching option is set to :guilabel:`Match all 🔽 of the following rules`, and a new
|
||||
branch is added with its matching option changed from :guilabel:`any 🔽 of` to :guilabel:`all
|
||||
🔽 of`, the newly-added branch disappears, and its group of rules are moved to the parent
|
||||
group.
|
||||
|
||||
#. :guilabel:`🗑️ (garbage can)`: deletes the node. If a branch node is deleted, all children of
|
||||
that node are deleted, as well.
|
||||
|
||||
A new filter rule can be added to the custom filter by clicking the :guilabel:`New Rule` button.
|
||||
|
||||
Once the filter criteria are defined, click :guilabel:`Add` to add the custom filter to the view.
|
||||
|
||||
.. example::
|
||||
To target all leads and opportunities from the :menuselection:`CRM` app that are in the *Won*
|
||||
stage, and have an expected revenue greater than $1,000, the following should be entered:
|
||||
|
||||
:guilabel:`Match all 🔽 (down arrow) of the following rules:`
|
||||
|
||||
#. :guilabel:`Stage` :guilabel:`is in` :guilabel:`Won`
|
||||
#. :guilabel:`Expected Revenue` :guilabel:`>` `1,000`
|
||||
#. :guilabel:`any 🔽 (down arrow)` :guilabel:`of:`
|
||||
|
||||
- :guilabel:`Type` :guilabel:`=` :guilabel:`Lead`
|
||||
- :guilabel:`Type` :guilabel:`=` :guilabel:`Opportunity`
|
||||
|
||||
.. image:: search/custom-filter-example.png
|
||||
:align: center
|
||||
:alt: Adding a custom filter to filter specific records in CRM.
|
||||
|
||||
.. tip::
|
||||
Activate :ref:`developer-mode` to reveal each field's technical name and data type, as well as
|
||||
the :guilabel:`# Code editor` text area below the filter rules, to view and edit the domain
|
||||
manually.
|
||||
|
||||
.. _search/group:
|
||||
|
||||
Group records
|
||||
=============
|
||||
|
||||
You can click :guilabel:`Group By` below the search field to cluster records together according to
|
||||
one of the **preconfigured groups**.
|
||||
The display of records in a view can be clustered together, according to one of the *preconfigured
|
||||
groups*. To do so, click the :guilabel:`🔽 (down arrow)` icon in the search bar, then select one of
|
||||
the :guilabel:`Group By` options from the drop-down menu.
|
||||
|
||||
.. example::
|
||||
You could group the records by salesperson on the Sales Analysis report by clicking
|
||||
:guilabel:`Group By` and selecting :guilabel:`Salesperson`. No records are filtered out.
|
||||
To group the records by salesperson on the *Sales Analysis* report (:menuselection:`Sales app -->
|
||||
Reporting --> Sales`), click the :guilabel:`Salesperson` option from the :guilabel:`Group By`
|
||||
drop-down menu. The view changes to group the records by salesperson, without filtering out any
|
||||
records.
|
||||
|
||||
.. image:: search/group.png
|
||||
:align: center
|
||||
:alt: Grouping records on the Sales Analysis report
|
||||
|
||||
You can **customize groups** by using a wide selection of fields present on the model. To do so,
|
||||
click :menuselection:`Group By --> Add Custom Group`, select a field, and click :guilabel:`Apply`.
|
||||
It is possible to *customize groups* by using a field present on the model. To do so, click
|
||||
:menuselection:`Add Custom Group`, and select a field from the drop-down menu.
|
||||
|
||||
.. note::
|
||||
You can use several groups at the same time. The first group you select is the main cluster, the
|
||||
next one you add further divides the main group's categories, and so on.
|
||||
Several groups can be used at the same time. The first group that is selected is the main
|
||||
cluster, the next one that is added further divides the main group's categories, and so on.
|
||||
Furthermore, filters and groups can be used together to refine the view even more.
|
||||
|
||||
.. _search/favorites:
|
||||
|
||||
Favorites
|
||||
=========
|
||||
|
||||
Favorites are a way to save a specific search for future use, or as the new default filter for the
|
||||
view.
|
||||
|
||||
To save the current view as a favorite, click the :guilabel:`🔽 (down arrow)` icon in the search
|
||||
bar, then select the :guilabel:`Save current search` drop-down menu to display the following
|
||||
options:
|
||||
|
||||
- Filter name: name of the favorited search.
|
||||
- :guilabel:`Default filter`: sets the favorited search as the default filter for the view.
|
||||
- :guilabel:`Shared`: makes the favorited search available to all users. By default, the favorited
|
||||
search is only available to the user who created it.
|
||||
|
||||
Once the options are set, click :guilabel:`Save` to save the favorited search.
|
||||
|
||||
.. image:: search/favorites.png
|
||||
:align: center
|
||||
:alt: Saving a favorite search on the Sales Analysis report
|
||||
|
||||
Saved favorites can be accessed by clicking the :guilabel:`🔽 (down arrow)` icon in the search bar,
|
||||
then selecting the saved filter in the :guilabel:`Favorites` drop-down menu. To remove a saved
|
||||
favorite, click the :guilabel:`🗑️ (garbage can)` icon next to the favorited search.
|
||||
|
||||
.. tip::
|
||||
To view *all* favorited searches, first activate :ref:`developer-mode`, and navigate to
|
||||
:menuselection:`Settings app --> Technical --> User Interface: User-defined Filters`. From here,
|
||||
all favorited searches can be viewed, edited, archived, or deleted.
|
||||
|
||||
|
After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 8.0 KiB |
@@ -27,11 +27,19 @@ Odoo supports multiple file formats to import transactions:
|
||||
- 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`.
|
||||
To import a file, go to the **Accounting Dashboard**, and in the :guilabel:`Bank` journal,
|
||||
click on :guilabel:`Import File`.
|
||||
|
||||
.. image:: transactions/import-transactions.png
|
||||
:alt: Import bank transactions from the bank journal
|
||||
.. tip::
|
||||
Alternatively, you can also:
|
||||
|
||||
- click :guilabel:`⋮` on the :guilabel:`Bank` journal and select :guilabel:`Import file`;
|
||||
- or access the transaction list by clicking :guilabel:`⋮` on the :guilabel:`Bank` journal and
|
||||
selecting :guilabel:`Transactions`, then click the gear icon :guilabel:`(⚙)` and select
|
||||
:guilabel:`Import records`.
|
||||
|
||||
.. image:: transactions/import-transactions.png
|
||||
:alt: Import bank transactions from the bank journal
|
||||
|
||||
Next, select the file and upload it.
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 17 KiB |
@@ -47,9 +47,7 @@ Draft invoices
|
||||
--------------
|
||||
|
||||
The system generates invoice which are initially set to the Draft state.
|
||||
While these invoices
|
||||
|
||||
remain unvalidated, they have no accounting impact within the system.
|
||||
While these invoices remain unvalidated, they have no accounting impact within the system.
|
||||
There is nothing to stop users from creating their own draft invoices.
|
||||
|
||||
Let's create a customer invoice with following information:
|
||||
|
||||
@@ -55,7 +55,8 @@ Generate deferral entries on validation
|
||||
.. tip::
|
||||
Make sure the :guilabel:`Start Date` and :guilabel:`End Date` fields are visible in the
|
||||
:guilabel:`Invoice Lines` tab. In most cases, the :guilabel:`Start Date` should be in the same
|
||||
month as the :guilabel:`Invoice Date`.
|
||||
month as the :guilabel:`Invoice Date`. Deferred revenue entries are posted from the invoice
|
||||
date and are displayed in the report accordingly.
|
||||
|
||||
For each line of the invoice that should be deferred, specify the start and end dates of the
|
||||
deferral period.
|
||||
|
||||
@@ -36,8 +36,8 @@ your customer’s address is set correctly, including the country, before sendin
|
||||
<developer-mode>`, go to :menuselection:`General Settings --> Technical --> Reporting
|
||||
section: Paper Format`.
|
||||
- A square of **15mm by 15mm** on the bottom left corner has to stay clear.
|
||||
- The postage area has to stay clear (click :download:`here <snailmail/snailmail-template.pdf>`
|
||||
to get more info about the area).
|
||||
- The postage area has to stay clear (:download:`download the snailmail PDF template
|
||||
<snailmail/snailmail-template.pdf>` for more details).
|
||||
- Pingen (Odoo Snailmail service provider) scans the area to process the address, so if something
|
||||
gets written outside the area, it is not counted as part of the address.
|
||||
|
||||
@@ -51,7 +51,5 @@ To buy stamps, go to :menuselection:`Accounting --> Configuration --> Settings -
|
||||
invoices: Snailmail`, click on :guilabel:`Buy credits`, or go to :menuselection:`Settings --> In-App
|
||||
Purchases: Odoo IAP`, and click on :guilabel:`View my Services`.
|
||||
|
||||
.. tip::
|
||||
- If you are on Odoo Online and have the Enterprise version, you benefit from free trial credits
|
||||
to test the feature.
|
||||
- Click `here <https://iap.odoo.com/privacy#header_4>`_ to know about our *Privacy Policy*.
|
||||
.. seealso::
|
||||
`Odoo's IAP Privacy Policy <https://iap.odoo.com/privacy#header_4>`_
|
||||
|
||||
@@ -7,7 +7,7 @@ inalterable**, meaning that once an entry has been posted, it can no longer be c
|
||||
|
||||
To do so, Odoo can use the **SHA-256 algorithm** to create a unique fingerprint for each posted
|
||||
entry. This fingerprint is called a hash. The hash is generated by taking an entry's essential data
|
||||
(the values of the `date`, `journal_id`, `company_id`, `debit`, `credit`, `account_id`, and
|
||||
(the values of the `name`, `date`, `journal_id`, `company_id`, `debit`, `credit`, `account_id`, and
|
||||
`partner_id` fields), concatenating it, and inputting it to the SHA-256 hash function, which then
|
||||
outputs a fixed size (256-bit) string of characters. The hash function is deterministic (:dfn:`the
|
||||
same input always creates the same output`): any minor modification to the original data would
|
||||
@@ -26,16 +26,25 @@ would break the hash chain.
|
||||
|
||||
.. _data-inalterability/lock:
|
||||
|
||||
Lock posted entries with hash
|
||||
=============================
|
||||
Lock entries with hash
|
||||
======================
|
||||
|
||||
To start using the hashing function, go to :menuselection:`Accounting --> Configuration > Journals`.
|
||||
Open the journal for which you want to activate the feature, go to the :guilabel:`Advanced Settings`
|
||||
tab, and enable :guilabel:`Lock Posted Entries with Hash`.
|
||||
tab, and enable :guilabel:`Lock Sent Invoices with Hash` for sale journals, or
|
||||
:guilabel:`Lock Entries Manually` for purchase and general journals.
|
||||
|
||||
For sale journals, the entry is automatically locked once it is sent. You can also click on the
|
||||
button :guilabel:`Lock` on the invoice to lock it without sending it. For sale, purchase, and
|
||||
general journals, the locking is always done manually using the same button.
|
||||
|
||||
To compute the hash of an entry, Odoo retrieves the predecessor entries of the chain (i.e., the
|
||||
entries with the same sequence prefix) and hashes them in a continuous way from the last hashed
|
||||
entry to the new entry to hash.
|
||||
|
||||
.. warning::
|
||||
Once you post an entry on a locked journal, you cannot disable the feature anymore, nor edit any
|
||||
posted entry.
|
||||
Once you lock an entry in a locked journal, you cannot disable the feature anymore, nor edit any
|
||||
locked entry.
|
||||
|
||||
.. _data-inalterability/report:
|
||||
|
||||
@@ -46,9 +55,8 @@ To download the data inalterability check report, go to :menuselection:`Accounti
|
||||
--> Settings --> Reporting` and click on :guilabel:`Download the Data Inalterability Check Report`.
|
||||
|
||||
The report's first section is an overview of all your journals and their configuration. Under the
|
||||
inalterability check column, you can see whether or not a journal's posted entries are locked with
|
||||
a hash (V) or not (X). The coverage column tells you when a journal's posted entries started being
|
||||
locked.
|
||||
inalterability check column, you can see whether or not a journal's entries are locked with a hash
|
||||
(V) or not (X). The coverage column tells you when a journal's entries started being locked.
|
||||
|
||||
.. image:: data_inalterability/journal-overview.png
|
||||
:align: center
|
||||
|
||||
@@ -307,6 +307,32 @@ directly to a product line.
|
||||
.. image:: taxes/list-sequence.png
|
||||
:alt: The taxes' sequence in Odoo determines which tax is applied first
|
||||
|
||||
Extra taxes
|
||||
===========
|
||||
|
||||
"Extra taxes" is a broad term referring to additional taxes beyond the standard or basic taxes
|
||||
imposed by governments. These extra taxes can be **luxury** taxes, **environmental** taxes,
|
||||
**import** or **export duties** taxes, etc.
|
||||
|
||||
.. note::
|
||||
The method to compute these taxes varies across different countries. We recommend consulting your
|
||||
country's regulations to understand how to calculate them for your business.
|
||||
|
||||
To compute an extra tax in Odoo, :ref:`create a tax <taxes/configuration>`, enter a tax name, select
|
||||
a :ref:`Tax Computation <taxes/configuration>`, set an :guilabel:`Amount`, and in the
|
||||
:guilabel:`Advanced Options` tab, check :guilabel:`Affect Base of Subsequent Taxes`. Then, drag and
|
||||
drop the taxes in the :ref:`order they should be computed <taxes/base-subsequent>`.
|
||||
|
||||
.. example::
|
||||
- In Belgium, the formula to compute an environmental tax is: `(product price + environmental
|
||||
tax) x sales tax`. Therefore, our environmental tax has to come *before* the sales tax in the
|
||||
computation sequence.
|
||||
- In our case, we created a 5% environmental tax (Ecotax) and put it *before* the Belgian base
|
||||
tax of 21%.
|
||||
|
||||
.. image:: taxes/ecotax.png
|
||||
:alt: Environmental tax sequence in Belgium.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`taxes/fiscal_positions`
|
||||
- :doc:`taxes/B2B_B2C`
|
||||
|
||||
|
After Width: | Height: | Size: 6.7 KiB |
@@ -55,7 +55,8 @@ Generate deferral entries on validation
|
||||
.. tip::
|
||||
Make sure the :guilabel:`Start Date` and :guilabel:`End Date` fields are visible in the
|
||||
:guilabel:`Invoice Lines` tab. In most cases, the :guilabel:`Start Date` should be in the same
|
||||
month as the :guilabel:`Bill Date`.
|
||||
month as the :guilabel:`Bill Date`. Deferred expense entries are posted from the bill date and
|
||||
are displayed in the report accordingly.
|
||||
|
||||
For each line of the bill that should be deferred, specify the start and end dates of the deferral
|
||||
period.
|
||||
|
||||
@@ -948,6 +948,73 @@ the corresponding layout and fiscal stamps stated in the :ref:`Invoice printed r
|
||||
.. seealso::
|
||||
:doc:`Client account creation <../../websites/ecommerce/checkout_payment_shipping/checkout>`
|
||||
|
||||
Liquidity product direct sales
|
||||
------------------------------
|
||||
|
||||
Liquidity product direct sales are used for sales involving third parties. For such
|
||||
sales, the seller and the proprietary company of the goods can each register their corresponding
|
||||
sales and purchases.
|
||||
|
||||
.. note::
|
||||
:ref:`Install <general/install>` the *Argentinian Electronic Invoicing* module (`l10n_ar_edi`) to
|
||||
use this feature.
|
||||
|
||||
Configuration
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
Purchase journal
|
||||
****************
|
||||
|
||||
A purchase journal is needed to generate an electronic vendor bill with a document type *Liquidity
|
||||
Product*. This journal needs to be synchronized with the AFIP as it will be used to generate the
|
||||
liquidity product electronic document.
|
||||
|
||||
To modify the existing purchase journal or create a new one, navigate to :menuselection:`Accounting
|
||||
--> Configuration --> Journals`. Then, select the existing purchase journal or click the
|
||||
:guilabel:`New` button, and fill in the following required information:
|
||||
|
||||
- :guilabel:`Type`: select :guilabel:`Purchase`.
|
||||
- :guilabel:`Use Documents`: check this field to to be able select the electronic document type.
|
||||
- :guilabel:`Is AFIP POS`: check this field to be able to generate electronic documents.
|
||||
- :guilabel:`AFIP POS System`: select :guilabel:`Electronic Invoice - Web Service` from the
|
||||
drop-down menu in order to send the electronic document to AFIP via web service.
|
||||
- :guilabel:`AFIP POS Number`: is the number configured in the AFIP to identify the operations
|
||||
related to this AFIP POS.
|
||||
- :guilabel:`AFIP POS Address`: is the field related to the commercial address registered for the
|
||||
POS, which is usually the same address as the company. For example, if a company has multiple
|
||||
stores (fiscal locations) then the AFIP will require the company to have one AFIP POS per
|
||||
location. This location will be printed in the invoice report.
|
||||
|
||||
.. image:: argentina/l10n-ar-purchase-journal.png
|
||||
:align: center
|
||||
:alt: l10n_ar Purchase Journal Configuration.
|
||||
|
||||
Sales journal
|
||||
*************
|
||||
|
||||
A sales journal is needed to register the invoice when a product is sold to a third party that will
|
||||
then sell the same product. This journal will not be synced with AFIP as the invoice will not be
|
||||
electronic.
|
||||
|
||||
To modify the existing sales journal or create a new one, navigate to
|
||||
:menuselection:`Accounting --> Configuration --> Journals`. Then, selecting the sales journal or
|
||||
click the :guilabel:`New` button, and fill in the following required information:
|
||||
|
||||
- :guilabel:`Type`: select :guilabel:`Sales`.
|
||||
- :guilabel:`Use Documents`: check this field on the journal to select the electronic document type
|
||||
(in this case the electronic invoice).
|
||||
|
||||
.. image:: argentina/l10n-ar-sales-journal.png
|
||||
:align: center
|
||||
:alt: l10n_ar Sales Journal Configuration.
|
||||
|
||||
Invoicing flow
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
Once the configurations are all set, the *Liquidity Product Vendor Bill* will be generated by the
|
||||
company that is selling the product on behalf of another party. For example, a distributor of a
|
||||
specific product.
|
||||
|
||||
Reports
|
||||
=======
|
||||
|
||||
@@ -965,11 +1032,10 @@ VAT reports
|
||||
Sales VAT book
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
In this report, all the sales are recorded, which are taken as the basis for the accounting records
|
||||
to determine the VAT (Tax Debit).
|
||||
|
||||
The :guilabel:`Sales VAT` book report can be exported in a `.zip` file :guilabel:`VAT BOOK (ZIP)`
|
||||
button in the top left, which contains `.txt` files to upload in the AFIP portal.
|
||||
This report records all the sales, which are taken as the basis for the accounting records
|
||||
to determine the VAT (Tax Debit). The :guilabel:`Sales VAT` book report can be exported as a `.zip`
|
||||
file using the :guilabel:`VAT BOOK (ZIP)` button at the top left, containing `.txt` files to upload
|
||||
to the AFIP portal.
|
||||
|
||||
.. image:: argentina/sales-vat-book.png
|
||||
:align: center
|
||||
@@ -978,8 +1044,9 @@ button in the top left, which contains `.txt` files to upload in the AFIP portal
|
||||
Purchases VAT book
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The :guilabel:`Purchases VAT` book report can be exported in a `.zip` file :guilabel:`VAT BOOK
|
||||
(ZIP)` button in the top left, which contains `.txt` files to upload in the AFIP portal.
|
||||
The :guilabel:`Purchases VAT` book report can be exported as a `.zip` file using the
|
||||
:guilabel:`VAT BOOK (ZIP)` button at the top left, which contains `.txt` files to upload to the AFIP
|
||||
portal.
|
||||
|
||||
.. image:: argentina/purchases-vat-book.png
|
||||
:align: center
|
||||
@@ -988,7 +1055,7 @@ The :guilabel:`Purchases VAT` book report can be exported in a `.zip` file :guil
|
||||
VAT summary
|
||||
~~~~~~~~~~~
|
||||
|
||||
Pivot table designed to check the monthly VAT totals. This report is for internal usage, it is not
|
||||
Pivot table designed to check the monthly VAT totals. This report is for internal use and is not
|
||||
sent to the AFIP.
|
||||
|
||||
.. image:: argentina/vat-summary.png
|
||||
@@ -1002,7 +1069,7 @@ IIBB - Sales by jurisdiction
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Pivot table where you can validate the gross income in each jurisdiction. Affidavit for the
|
||||
corresponding taxes to pay, therefore it is not sent to the AFIP.
|
||||
corresponding taxes to pay; and therefore, it is not sent to the AFIP.
|
||||
|
||||
.. image:: argentina/iibb-sales-jurisdiction.png
|
||||
:align: center
|
||||
@@ -1012,7 +1079,7 @@ IIBB - Purchases by jurisdiction
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Pivot table where you can validate the gross purchases in each jurisdiction. Affidavit for the
|
||||
corresponding taxes to pay, therefore it is not sent to the AFIP.
|
||||
corresponding taxes to pay; and therefore, it is not sent to the AFIP.
|
||||
|
||||
.. image:: argentina/iibb-purchases-jurisdiction.png
|
||||
:align: center
|
||||
|
||||
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 21 KiB |
@@ -216,14 +216,14 @@ CODA
|
||||
----
|
||||
|
||||
**CODA** is an electronic XML format used to import Belgian bank statements. You can download CODA
|
||||
files from your bank and import them directly into Odoo by clicking :guilabel:`Import Statement`
|
||||
from your :guilabel:`Bank` journal on your dashboard.
|
||||
files from your bank and import them directly into Odoo by clicking :guilabel:`Import file` from
|
||||
your :guilabel:`Bank` journal on your dashboard.
|
||||
|
||||
.. image:: belgium/coda-import.png
|
||||
:alt: Import CODA files
|
||||
|
||||
.. seealso::
|
||||
:ref:`Import bank statements files <transactions/import>`
|
||||
:ref:`Import bank files <transactions/import>`
|
||||
|
||||
.. _belgium/soda:
|
||||
|
||||
@@ -249,7 +249,8 @@ information and statements. Odoo provides a way to import such statements automa
|
||||
|
||||
.. note::
|
||||
As an accounting firm, you must manage your clients on separate databases and configure them
|
||||
individually to avoid mixing up their data.
|
||||
individually to avoid mixing up their data. The connection must be made by the accounting firm
|
||||
with valid CodaBox Connect credentials.
|
||||
|
||||
Configuration
|
||||
~~~~~~~~~~~~~
|
||||
@@ -262,9 +263,8 @@ You must first :ref:`install <general/install>` :guilabel:`CodaBox` to start.
|
||||
|
||||
.. important::
|
||||
Make sure the company settings are correctly configured, i.e., the country is set to
|
||||
:guilabel:`Belgium`, the :guilabel:`Tax ID` and :guilabel:`Accounting Firm` fields are filled,
|
||||
as well as the :guilabel:`Tax ID` of the accounting firm (if not filled, the :guilabel:`Tax ID`
|
||||
of the company is used).
|
||||
:guilabel:`Belgium`, the :guilabel:`Tax ID` and :guilabel:`Accounting Firm` fields are filled, as
|
||||
well as the :guilabel:`Tax ID` of the :guilabel:`Accounting Firm`.
|
||||
|
||||
Configure the journals
|
||||
**********************
|
||||
@@ -281,6 +281,10 @@ Configure the journals
|
||||
:align: center
|
||||
:alt: Configuration of a CODA journal.
|
||||
|
||||
.. tip::
|
||||
When working with bank transactions that use different currencies, it is recommended to
|
||||
create multiple journals with the same bank account but different currencies.
|
||||
|
||||
.. tab:: For SODA files
|
||||
|
||||
#. Create a new miscellaneous journal.
|
||||
|
||||
@@ -745,6 +745,55 @@ If you claim a vendor bill, the status changes from :guilabel:`Draft` to :guilab
|
||||
automatically. Considering this as best practice, all the claimed documents should be canceled as
|
||||
they won't be valid for your accounting records.
|
||||
|
||||
Electronic purchase invoice
|
||||
---------------------------
|
||||
|
||||
The *electronic purchase invoice* is a feature included in the `l10n_cl_edi` module.
|
||||
|
||||
Once all configurations have been made for :ref:`electronic invoices <chile/electronic-invoice>`
|
||||
(e.g., uploading a valid company certificate, setting up master data, etc.), the electronic
|
||||
purchase invoices need their own :abbr:`CAFs (Folio Authorization Code)`. Please refer to the
|
||||
:ref:`CAF documentation <chile/caf-documentation>` to check the details on how to acquire the
|
||||
:abbr:`CAFs (Folio Authorization Code)` for electronic purchase invoices.
|
||||
|
||||
Electronic purchase invoices are useful when vendors are not obligated to expedite an electronic
|
||||
vendor bill for your purchase. Still, your obligations require a document to be sent to the
|
||||
:abbr:`SII (Servicio de Impuestos Internos)` as proof of purchase.
|
||||
|
||||
Configuration
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
To generate an electronic purchase invoice from a vendor bill, the bill must be created in a
|
||||
purchase journal with the *Use Documents* feature enabled. It is possible to modify an existing
|
||||
purchase journal or create a new one in the following process.
|
||||
|
||||
To modify the existing purchase journal, or create a new purchase journal, navigate to
|
||||
:menuselection:`Accounting --> Configuration --> Journals`. Then, click the :guilabel:`New` button,
|
||||
and fill in the following required information:
|
||||
|
||||
- :guilabel:`Type`: select :guilabel:`Purchase` from the drop-down menu for vendor bill journals.
|
||||
- :guilabel:`Use Documents`: check this field so the journal can generate electronic documents (in
|
||||
this case the electronic purchase invoice).
|
||||
|
||||
Generate an electronic purchase invoice
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To generate this type of document, it is necessary to create a vendor bill in Odoo. To do so,
|
||||
navigate to :menuselection:`Accounting --> Vendors --> Bills`, and click the :guilabel:`New` button.
|
||||
|
||||
When all of the electronic purchase invoice information is filled, select the option :guilabel:`(46)
|
||||
Electronic Purchase Invoice` in the :guilabel:`Document Type` field:
|
||||
|
||||
After the vendor bill is posted:
|
||||
|
||||
- The :abbr:`DTE (Documentos Tributarios Electrónicos)` file (Electronic Tax Document) is
|
||||
automatically created and added to the chatter.
|
||||
- The :guilabel:`DTE SII Status` is set as :guilabel:`Pending to be sent`.
|
||||
|
||||
Odoo automatically updates the *DTE Status* every night using a scheduled action. To get a response
|
||||
from the :abbr:`SII (Servicio de Impuestos Internos)` immediately, click the :guilabel:`Send now to
|
||||
SII` button.
|
||||
|
||||
Delivery guide
|
||||
--------------
|
||||
|
||||
|
||||
@@ -61,11 +61,28 @@ localization:
|
||||
<../accounting/customer_invoices/electronic_invoicing>`, based on the Technical
|
||||
documentation published by the SRI. The authorized documents are: Invoices, Credit Notes,
|
||||
Debit Notes, Withholdings and Purchase liquidations.
|
||||
* - :guilabel:`Ecuadorian Accounting Reports`
|
||||
- `l10n_ec_reports`
|
||||
- Includes all the technical and functional requirements to generate forms 103 and 104.
|
||||
* - :guilabel:`Ecuador - ATS Report`
|
||||
- `l10n_ec_reports_ats`
|
||||
- Includes all the technical and functional requirements to generate the ATS report XML file
|
||||
ready to be uploaded to the *DIMM Formularios*.
|
||||
* - :guilabel:`Ecuadorian Website`
|
||||
- `l10n_ec_website_sale`
|
||||
- Includes all the technical and functional requirements to generate automatic electronic
|
||||
invoices from a Website sale.
|
||||
* - :guilabel:`Ecuadorian Point of Sale`
|
||||
- `l10n_ec_edi_pos`
|
||||
- Includes all the technical and functional requirements to generate automatic electronic
|
||||
invoices from a PoS sale.
|
||||
|
||||
.. note::
|
||||
When you install a database from scratch selecting `Ecuador` as the country, Odoo automatically
|
||||
installs the base module :guilabel:`Ecuadorian - Accounting`.
|
||||
|
||||
.. _l10n_ec/configure-your-company:
|
||||
|
||||
Configure your company
|
||||
----------------------
|
||||
|
||||
@@ -586,3 +603,59 @@ includes the tax code within the parenthesis in order to report it to the SRI.
|
||||
.. image:: ecuador/104-form.png
|
||||
:align: center
|
||||
:alt: Report 104 form for Ecuador.
|
||||
|
||||
ATS report
|
||||
----------
|
||||
|
||||
:ref:`Install <general/install>` the *ATS Report* (`l10n_ec_reports_ats`) module to enable
|
||||
downloading the ATS report in XML format.
|
||||
|
||||
.. note::
|
||||
The Ecuadorian *ATS Report* module is dependent on the previous installation of the *Accounting*
|
||||
app and the *Ecuadorian EDI module*.
|
||||
|
||||
Configuration
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
To issue electronic documents, ensure your company is configured as explained in the
|
||||
:ref:`electronic invoice <l10n_ec/configure-your-company>` section.
|
||||
|
||||
In the :abbr:`ATS (Anexo Transaccional Simplificado)`, every document generated in Odoo (invoices,
|
||||
vendor bills, sales and purchases withholdings, credit notes, and debit notes) will be included.
|
||||
|
||||
Vendor bills
|
||||
************
|
||||
|
||||
When generating a vendor bill, it is necessary to register the authorization number from the
|
||||
invoice that the vendor generated for the purchase. To do so, go to :menuselection:`Accounting
|
||||
--> Vendors --> Bills` and select the bill. Then, enter the number from the vendor's invoice in the
|
||||
:guilabel:`Authorization Number` field.
|
||||
|
||||
Credit and debit notes
|
||||
**********************
|
||||
|
||||
When generating a credit note or debit note manually or through importation, it is necessary to link
|
||||
this note to the sales invoice that is being modified by it.
|
||||
|
||||
.. note::
|
||||
Remember to add all required information to the documents before downloading the :abbr:`ATS
|
||||
(Anexo Transaccional Simplificado)` file. For example, add the *Authorization Number* and the
|
||||
*SRI Payment Method* on documents, when needed.
|
||||
|
||||
XML generation
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
To generate the :abbr:`ATS (Anexo Transaccional Simplificado)` report, go to
|
||||
:menuselection:`Accounting --> Reports --> Tax Report` and choose a time period for the desired
|
||||
:abbr:`ATS (Anexo Transaccional Simplificado)` report, then click :guilabel:`ATS`.
|
||||
|
||||
The downloaded XML file is ready to be uploaded to *DIMM Formularios*.
|
||||
|
||||
.. image:: ecuador/ats-report.png
|
||||
:align: center
|
||||
:alt: ATS report download for Ecuador in Odoo Accounting.
|
||||
|
||||
.. note::
|
||||
When downloading the :abbr:`ATS (Anexo Transaccional Simplificado)` report, Odoo generates a
|
||||
warning pop-up alerting the user if a document(s) has missing or incorrect data. Nevertheless,
|
||||
the user can still download the XML file.
|
||||
|
||||
|
After Width: | Height: | Size: 15 KiB |
@@ -22,10 +22,10 @@ localization:
|
||||
- Default :ref:`fiscal localization package <fiscal_localizations/packages>`
|
||||
* - Italy - E-invoicing
|
||||
- `l10n_it_edi`
|
||||
- e-invoice implementation
|
||||
* - Italy - E-invoicing
|
||||
- E-invoice implementation
|
||||
* - Italy - E-invoicing (Withholding)
|
||||
- `l10n_it_edi_withholding`
|
||||
- e-invoice withholding
|
||||
- E-invoice withholding
|
||||
* - Italy - Accounting Reports
|
||||
- `l10n_it_reports`
|
||||
- Country-specific reports
|
||||
@@ -33,10 +33,6 @@ localization:
|
||||
- `l10n_it_stock_ddt`
|
||||
- Transport documents - Documento di Trasporto (DDT)
|
||||
|
||||
.. image:: italy/italy-modules.png
|
||||
:align: center
|
||||
:alt: Italian localization modules
|
||||
|
||||
Company information
|
||||
-------------------
|
||||
|
||||
@@ -49,70 +45,149 @@ section, click :guilabel:`Update info`. From here, fill out the fields:
|
||||
- :guilabel:`Codice Fiscale`: the fiscal code of the company;
|
||||
- :guilabel:`Tax System`: the tax system under which the company falls;
|
||||
|
||||
.. image:: italy/italy-company.png
|
||||
:align: center
|
||||
:alt: Company information to provide
|
||||
.. image:: italy/company.png
|
||||
:alt: Company information to be provided
|
||||
|
||||
Taxes configuration
|
||||
-------------------
|
||||
|
||||
Many of the e-invoicing features are implemented using Odoo's tax system. As such, taxes must be
|
||||
properly configured to generate invoices correctly and handle other billing use cases.
|
||||
|
||||
The **Italian** localization contains predefined **examples** of taxes for various purposes.
|
||||
|
||||
.. _italy/tax-exemption:
|
||||
|
||||
Tax exemption
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
The use of sale taxes that amount to **zero percent** (0%) is required by Italian authorities to
|
||||
keep track of the exact :guilabel:`Tax Exemption Kind (Natura)` and :guilabel:`Law Reference` that
|
||||
justify the exemption operated on an invoice line.
|
||||
|
||||
.. example::
|
||||
The export tax in the EU can be used as reference (`0% EU`, invoice label `00eu`). It can be
|
||||
found under :menuselection:`Accounting --> Configuration --> Taxes`. Exports are exempt from VAT,
|
||||
and therefore, they require :guilabel:`Exoneration` kind and :guilabel:`Law Reference` filled in.
|
||||
|
||||
.. image:: italy/tax-exemption.png
|
||||
:alt: Tax Exemption Settings
|
||||
|
||||
.. seealso::
|
||||
There are many :guilabel:`Tax Exemption Kind (Natura)` and :guilabel:`Law Reference` codes. Make
|
||||
sure you check the latest version available to get the latest information on:
|
||||
|
||||
- `Italian authorities documentation <https://www.agenziaentrate.gov.it/portale/web/guest/aree-tematiche/fatturazione-elettronica>`_
|
||||
- `Official guide on Tax exemption <https://www.agenziaentrate.gov.it/portale/documents/20143/451259/Guida_compilazione-FE-Esterometro-V_1.9_2024-03-05.pdf/67fe4c2d-1174-e8de-f1ee-cea77b7f5203>`_
|
||||
|
||||
.. note::
|
||||
If you need to use a different kind of exoneration, go to :menuselection:`Accounting -->
|
||||
Configuration --> Taxes`, select a similar tax, then click on the cog icon and select
|
||||
:guilabel:`Duplicate`. In the :guilabel:`Advanced Options` tab, add the :guilabel:`Exoneration`
|
||||
and :guilabel:`Law Reference`. To confirm click on :guilabel:`Save`.
|
||||
|
||||
.. tip::
|
||||
**Rename** your taxes in the :guilabel:`Name` field according to their :guilabel:`Exoneration` to
|
||||
differentiate them easily.
|
||||
|
||||
.. _italy/reverse-charge:
|
||||
|
||||
Reverse charge
|
||||
==============
|
||||
|
||||
The **reverse charge** mechanism is a VAT rule that shifts the liability to pay VAT from the
|
||||
supplier to the customer. The customers pay the VAT *themselves* to the :abbr:`AdE (Agenzia delle
|
||||
Entrate)` instead. There are different types:
|
||||
|
||||
- | :guilabel:`Internal Reverse Charge` (for domestic sales)
|
||||
| The VAT responsibility is shifted to the buyer for certain categories of products and services.
|
||||
- | :guilabel:`External Reverse Charge` (for intra-EU sales)
|
||||
| VAT is due in the country of the delivery or in the country where the service is performed. When
|
||||
the buyer is itself an Italian business, then the EU offers a mechanism that allows the seller
|
||||
to transfer his responsibility to the buyer.
|
||||
|
||||
Invoices
|
||||
--------
|
||||
|
||||
**Reverse-charged** customer invoices show no VAT amount, but the :abbr:`AdE (Agenzia delle
|
||||
Entrate)` requires the seller to specify the :guilabel:`Tax Exemption` reason and the :guilabel:`Law
|
||||
Reference` that enable the reverse-charge mechanism. Odoo provides a set of special 0% taxes that
|
||||
can be assigned to each reverse-charged invoice lines, representing the most commonly used
|
||||
configurations.
|
||||
|
||||
Vendor bills
|
||||
------------
|
||||
|
||||
Italian companies subjected to Reverse Charge must send the information in the bill received to the
|
||||
:abbr:`AdE (Agenzia delle Entrate)`.
|
||||
|
||||
.. note::
|
||||
Self-reported VAT XML files must be issued and sent to the :abbr:`AdE (Agenzia Delle Entrate)`
|
||||
for reverse charged bills.
|
||||
|
||||
When creating a vendor bill, **reverse charge** taxes are available to be added in the
|
||||
:guilabel:`Taxes` field. You can check which taxes are available by going to
|
||||
:menuselection:`Accounting --> Configuration --> Taxes`, you can see that the 10% Goods and 22%
|
||||
Services taxes are activated, among others. Due to the automated configuration of the Italian fiscal
|
||||
position, these are automatically activated in the tax list.
|
||||
|
||||
.. _italy/grids:
|
||||
|
||||
Tax grids
|
||||
---------
|
||||
|
||||
The Italian localization has a specific :ref:`tax grid <tax-returns/tax-grids>` section for
|
||||
**reverse charge** taxes. These tax grids are identifiable by the :ref:`VJ <italy/grids>` tag, and
|
||||
can be found by going to :menuselection:`Accounting --> Reporting --> Audit Reports: Tax Report`.
|
||||
|
||||
.. image:: italy/grids.png
|
||||
:alt: Reverse charge tax grid from the VJ section of the Tax Declaration
|
||||
|
||||
.. _italy/e-invoicing:
|
||||
|
||||
E-invoicing
|
||||
-----------
|
||||
===========
|
||||
|
||||
The :abbr:`SdI (Sistema di Interscambio)` is the electronic invoicing system used in Italy. It
|
||||
enables to send and receive electronic invoices to and from customers. The documents must be in XML
|
||||
format and formally validated by the system before being delivered.
|
||||
The :abbr:`SdI (Sistema di Interscambio)` is the :doc:`electronic invoicing
|
||||
<../accounting/customer_invoices/electronic_invoicing>` system used in Italy. It enables the sending
|
||||
and receiving of electronic invoices to and from customers. The documents must be in an XML
|
||||
:abbr:`EDI (Electronic Data Interchange)` format called **FatturaPA** and formally validated by the
|
||||
system before being delivered.
|
||||
|
||||
To be able to receive invoices and notifications, the :abbr:`SdI (Sistema di Interscambio)` service
|
||||
must be notified that the user's files are to be sent to **Odoo** and processed on their behalf. To
|
||||
so, you must set up Odoo's :guilabel:`Codice Destinatario` on the **Agenzia Delle Entrate**
|
||||
portal.
|
||||
must be notified that the user's files need to be sent to Odoo and processed on their behalf. To do
|
||||
so, you must set up Odoo's :guilabel:`Destination Code` on the :abbr:`AdE (Agenzia Delle
|
||||
Entrate)` portal.
|
||||
|
||||
#. Go to https://ivaservizi.agenziaentrate.gov.it/portale/ and authenticate;
|
||||
#. Go to `Italian authorities portal <https://ivaservizi.agenziaentrate.gov.it/portale>`_ and
|
||||
authenticate;
|
||||
#. Go to section :menuselection:`Fatture e Corrispettivi`;
|
||||
#. Set the user as Legal Party for the VAT number you wish to configure the electronic address;
|
||||
#. In :menuselection:`Servizi Disponibili --> Fatturazione Elettronica --> Registrazione
|
||||
dell’indirizzo telematico dove ricevere tutte le fatture elettroniche`, insert Odoo's
|
||||
:guilabel:`Codice Destinatario` `K95IV18`, and confirm.
|
||||
:guilabel:`Destination Code` `K95IV18`, and confirm.
|
||||
|
||||
Electronic Data Interchange (EDI)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Odoo uses the **FatturaPA** :abbr:`EDI (Electronic Data Interchange)` format for the Italian
|
||||
localization and is enabled on the default journals when installed. When the **file processing
|
||||
authorization** has been set, all **invoices** and **bills** are automatically sent.
|
||||
|
||||
.. note::
|
||||
You can :ref:`enable electronic invoicing for other sales and purchase journals
|
||||
<e-invoicing/configuration>` than the default ones.
|
||||
|
||||
You can check the current status of an invoice by the :guilabel:`Electronic invoicing` field. The
|
||||
XML file can be found in the **chatter** of the invoice.
|
||||
|
||||
.. image:: italy/italy-test.png
|
||||
:align: center
|
||||
:alt: Electronic invoicing status (waiting for confirmation)
|
||||
|
||||
.. seealso::
|
||||
:doc:`../accounting/customer_invoices/electronic_invoicing`
|
||||
|
||||
File processing authorization (Odoo)
|
||||
------------------------------------
|
||||
EDI Mode and authorization
|
||||
--------------------------
|
||||
|
||||
Since the files are transmitted through Odoo's server before being sent to the :abbr:`SdI (Sistema
|
||||
di Interscambio)` or received by your database, you need to authorize Odoo to process your files
|
||||
from your database. To do so, go to :menuselection:`Accounting --> Configuration --> Settings -->
|
||||
Electronic Document Invoicing`.
|
||||
|
||||
There are **three** modes available:
|
||||
There are three modes available:
|
||||
|
||||
:guilabel:`Demo`
|
||||
This mode simulates an environment in which invoices are sent to the government. In this mode,
|
||||
invoices need to be *manually* downloaded as XML files and uploaded to the **Agenzia delle
|
||||
Entrate**'s website.
|
||||
:guilabel:`Test (experimental)`
|
||||
This mode sends invoices to a non-production (i.e., test) service made available by the **Agenzia
|
||||
delle Entrate**. Saving this change directs all companies on the database to use this
|
||||
configuration.
|
||||
:guilabel:`Official`
|
||||
This is a production mode that sends your invoices directly to the **Agenzia delle Entrate**.
|
||||
- | :guilabel:`Demo`
|
||||
| This mode simulates an environment in which invoices are sent to the government. In this mode,
|
||||
invoices need to be *manually* downloaded as XML files and uploaded to the :abbr:`AdE
|
||||
(Agenzia delle Entrate)`'s website.
|
||||
- | :guilabel:`Test (experimental)`
|
||||
| This mode sends invoices to a non-production (i.e., test) service made available by the
|
||||
:abbr:`AdE (Agenzia delle Entrate)`. Saving this change directs all companies on the database to
|
||||
use this configuration.
|
||||
- | :guilabel:`Official`
|
||||
| This is a production mode that sends your invoices directly to the :abbr:`AdE (Agenzia delle
|
||||
Entrate)`.
|
||||
|
||||
Once a mode is selected, you need to accept the **terms and conditions** by ticking :guilabel:`Allow
|
||||
Odoo to process invoices`, and then :guilabel:`Save`. You can now record your transactions in Odoo
|
||||
@@ -120,340 +195,436 @@ Accounting.
|
||||
|
||||
.. warning::
|
||||
Selecting either :guilabel:`Test (experimental)` or :guilabel:`Official` is **irreversible**.
|
||||
Once in :guilabel:`Official` mode, it is not possible to select :guilabel:`Test (experimental)`
|
||||
or :guilabel:`Demo`, and same for :guilabel:`Test (experimental)`. We recommend creating a
|
||||
separate database for testing purposes only.
|
||||
For example, once in :guilabel:`Official` mode, it is not possible to select :guilabel:`Test
|
||||
(experimental)` or :guilabel:`Demo`. We recommend creating a **separate database** for testing
|
||||
purposes only.
|
||||
|
||||
.. note::
|
||||
When in :guilabel:`Test (Experimental)` mode, all invoices sent *must* have a partner using one
|
||||
of the following fake :guilabel:`Codice Destinatario` given by the **Agenzia Delle Entrate**:
|
||||
`0803HR0` - `N8MIMM9` - `X9XX79Z`. Any real production :guilabel:`Codice Destinario` of your
|
||||
customers will not be recognized as valid by the test service.
|
||||
of the following fake :guilabel:`Destination Code` given by the :abbr:`AdE (Agenzia Delle
|
||||
Entrate)`: `0803HR0` - `N8MIMM9` - `X9XX79Z`. Any real production :guilabel:`Codice Destinario`
|
||||
of your customers will not be recognized as valid by the test service.
|
||||
|
||||
.. image:: italy/italy-edi.png
|
||||
:align: center
|
||||
:alt: Italy's electronic document invoicing options
|
||||
.. image:: italy/edi.png
|
||||
:alt: Electronic document invoicing settings
|
||||
|
||||
Taxes configuration
|
||||
===================
|
||||
.. _italy/e-invoicing-process:
|
||||
|
||||
Many of the e-invoicing features are implemented using Odoo's tax system. As such, it is very
|
||||
important that taxes are properly configured in order to generate invoices correctly and handle
|
||||
other billing use cases. For example, specific configurations are required for the **reverse
|
||||
charge** type of taxes. In case of a **reverse charge** tax, the seller does *not* charge the
|
||||
customer for the VAT but, instead, the customer pays the VAT *themselves* to their government. There
|
||||
are **two** main types:
|
||||
Process
|
||||
-------
|
||||
|
||||
- :ref:`external reverse charge <italy/external-reverse>`;
|
||||
- :ref:`internal reverse charge <italy/internal-reverse>`.
|
||||
|
||||
.. _italy/external-reverse:
|
||||
|
||||
External reverse charge
|
||||
-----------------------
|
||||
|
||||
Invoices
|
||||
~~~~~~~~
|
||||
|
||||
To make an export invoice, make sure that the invoice lines all use a tax configured for **reverse
|
||||
charge**. The **Italian** localization contains an **example** of a reverse charge tax for export in
|
||||
the EU to be used as reference (`0% EU`, invoice label `00eu`), which can be found under
|
||||
:menuselection:`Accounting --> Configuration --> Taxes`. Exports are exempt from VAT, and therefore
|
||||
**reverse charge** taxes require the :guilabel:`Has exoneration of tax (Italy)` option ticked, with
|
||||
both the :guilabel:`Exoneration` kind and :guilabel:`Law Reference` filled in.
|
||||
|
||||
.. image:: italy/italy-tax.png
|
||||
:align: center
|
||||
:alt: External reverse charge settings
|
||||
The submission of invoices to the :abbr:`SdI (Sistema di Interscambio)` for Italy is an electronic
|
||||
process used for the mandatory transmission of tax documents in XML format between companies and the
|
||||
:abbr:`AdE (Agenzia delle Entrate)` to reduce errors and verify the correctness of operations.
|
||||
|
||||
.. note::
|
||||
If you need to use a different kind of :guilabel:`Exoneration`, click :menuselection:`Action -->
|
||||
Duplicate` within the tax menu to create a copy of an existing similar tax. Then, select another
|
||||
:guilabel:`Exoneration`, and :guilabel:`Save`. Repeat this process as many times as you need
|
||||
different kind of :guilabel:`Exoneration` taxes.
|
||||
You can check the current status of an invoice by the :guilabel:`SdI State` field. The XML file
|
||||
is attached to the invoice.
|
||||
|
||||
.. tip::
|
||||
**Rename** your taxes in the :guilabel:`Name` field according to their :guilabel:`Exoneration` to
|
||||
differentiate them easily.
|
||||
.. image:: italy/edi-process.png
|
||||
:alt: EDI system architecture
|
||||
|
||||
On your invoice, select the corresponding tax you need in the :guilabel:`Taxes` field. You can find
|
||||
the following **additional info** by opening the **XML** file of the issued invoice:
|
||||
XML Documents creation
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- :guilabel:`SdI address (Codice Destinatario)`: must be filled for both **EU** or **non-EU**;
|
||||
- :guilabel:`Country Id`: must contain the country of the foreign seller in the two-letter ISO
|
||||
(Alpha-2) code (ex., `IT` for 'Italy');
|
||||
- :guilabel:`CAP`: must be filled with `00000`;
|
||||
- :guilabel:`Partita Iva` (**VAT number**): must contain the **VAT** number for **EU businesses**
|
||||
and `OO99999999999` (double 'O' **letter**, not 'zero') for **non-EU businesses**. In case of
|
||||
private customers without **VAT** number, use `0000000`;
|
||||
- :guilabel:`Fiscal Code`: for foreign entities without an actual **Codice Fiscale**, any
|
||||
recognizable identifier is valid.
|
||||
Odoo generates the required XML files as attachments to invoices in the `FatturaPA` format required
|
||||
by the :abbr:`AdE (Agenzia delle Entrate)`. Once the invoices needed are selected, go to
|
||||
:guilabel:`Action` and click on :guilabel:`Send and Print`.
|
||||
|
||||
.. note::
|
||||
Odoo does not support sending user-modified XML files.
|
||||
.. image:: italy/edi-menu.png
|
||||
:alt: Send and Print menu
|
||||
|
||||
For **invoices**, multiple configurations are technically identified by a :guilabel:`Tipo Documento`
|
||||
code:
|
||||
When the pop-up window opens there is a selection of actions that can be taken. :guilabel:`Generate
|
||||
XML File` generates the attachments.
|
||||
|
||||
- `TD02` - Down payments;
|
||||
- `TDO7` - Simplified invoice;
|
||||
- `TD08` - Simplified credit note;
|
||||
- `TD09` - Simplified debit note;
|
||||
- `TD24` - Deferred invoice.
|
||||
.. image:: italy/edi-send-and-print.png
|
||||
:alt: Send and Print dialog
|
||||
|
||||
.. tabs::
|
||||
The XML file as well as the PDF once can be found attached to the invoice.
|
||||
|
||||
.. tab:: `TD02`
|
||||
.. image:: italy/edi-attachments.png
|
||||
:alt: EDI Attachments
|
||||
|
||||
Down payments.
|
||||
Submission to SDI
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
**Down payment** invoices are imported/exported with a different :guilabel:`Tipo Documento`
|
||||
code `TDO2` than regular invoices. Upon import of the invoice, it creates a regular vendor
|
||||
bill.
|
||||
The :guilabel:`Send to Tax Agency` option in the :guilabel:`Send and Print` dialog sends the
|
||||
attachment to the :guilabel:`Proxy Server`, which gathers all requests and then forwards them via a
|
||||
WebServices channel to the :abbr:`SdI (Sistema di Interscambio)`. Check the sending status of the
|
||||
invoice through the :guilabel:`Check Sending` button at the top of the invoice's view.
|
||||
|
||||
Odoo exports moves as `TD02` if the following conditions are met:
|
||||
Processing by SDI
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
- Is an invoice;
|
||||
- All invoice lines are related to **sales order lines** that have the flag `is_downpayment`
|
||||
set as `True`.
|
||||
The :abbr:`SdI (Sistema di Interscambio)` receives the document and verifies for any errors. At this
|
||||
stage, the invoice is in the :guilabel:`SdI Processing` state, as shown on the invoice. The invoice
|
||||
also gets assigned a :guilabel:`FatturaPA Transaction` number that is shown in the
|
||||
:guilabel:`Electronic Invoicing` tab. The checks may take variable time, ranging from a few seconds
|
||||
up to a day, depending on the queue of invoices sent throughout Italy.
|
||||
|
||||
.. tab:: `TD07`, `TD08`, and `TD09`
|
||||
.. image:: italy/edi-processing.png
|
||||
:alt: Check Sending button and Sdi Processing state
|
||||
|
||||
Simplified invoices, and credit/debit notes.
|
||||
Acceptance
|
||||
~~~~~~~~~~
|
||||
|
||||
Simplified invoices and credit notes can be used to certify **domestic transactions** under
|
||||
**400 EUR** (VAT included). Its status is the same as a regular invoice, but with fewer
|
||||
information requirements.
|
||||
|
||||
For a **simplified** invoice to be established, it must include:
|
||||
|
||||
- :guilabel:`Customer Invoice` reference: **unique** numbering sequence with **no gaps**;
|
||||
- :guilabel:`Invoice Date`: issue **date** of the invoice;
|
||||
- :guilabel:`Company Info`: the **seller**'s full credentials (VAT/TIN number, name, full
|
||||
address) under :menuselection:`General Settings --> Companies (section)`;
|
||||
- :guilabel:`VAT`: the **buyer**'s VAT/TIN number (on their profile card);
|
||||
- :guilabel:`Total`: the total **amount** (VAT included) of the invoice.
|
||||
|
||||
In the :abbr:`EDI (Electronic Data Interchange)`, Odoo exports invoices as simplified if:
|
||||
|
||||
- It is a **domestic** transaction (i.e., the partner is from Italy);
|
||||
- The buyer's data is **insufficient** for a regular invoice;
|
||||
- The **required fields** for a regular invoice (address, ZIP code, city, country) are
|
||||
provided;
|
||||
- The total amount VAT included is **less** than **400 EUR**.
|
||||
|
||||
.. note::
|
||||
The 400 EUR threshold was defined in `the decree of the 10th of May 2019 in the Gazzetta
|
||||
Ufficiale <https://www.gazzettaufficiale.it/eli/id/2019/05/24/19A03271/sg>`_. We advise you
|
||||
to check the current official value.
|
||||
|
||||
.. tab:: `TD24`
|
||||
|
||||
Deferred invoices.
|
||||
|
||||
The **deferred invoice** is an invoice that is **issued at a later time** than the sale of
|
||||
goods or the provision of services. A **deferred invoice** has to be issued at the latest
|
||||
within the **15th day** of the month following the delivery covered by the document.
|
||||
|
||||
It usually is a **summary invoice** containing a list of multiple sales of goods or services,
|
||||
carried out in the month. The business is allowed to **group** the sales into **one invoice**,
|
||||
generally issued at the **end of the month** for accounting purposes. Deferred invoices are
|
||||
default for **wholesaler** having recurrent clients.
|
||||
|
||||
If the goods are transported by a **carrier**, every delivery has an associated **Documento di
|
||||
Transporto (DDT)**, or **Transport Document**. The deferred invoice **must** indicate the
|
||||
details of all the **DDTs** information for better tracing.
|
||||
|
||||
.. note::
|
||||
E-invoicing of deferred invoices requires the `l10n_it_stock_ddt`
|
||||
:ref:`module <italy/modules>`. In this case, a dedicated :guilabel:`Tipo Documento` `TD24`
|
||||
is used in the e-invoice.
|
||||
|
||||
Odoo exports moves as `TD24` if the following conditions are met:
|
||||
|
||||
- Is an invoice;
|
||||
- Is associated to deliveries whose **DDTs** have a **different** date than the issuance date
|
||||
of the invoice.
|
||||
|
||||
Vendor bills
|
||||
~~~~~~~~~~~~
|
||||
|
||||
Italian companies buying goods or services from EU countries (or services from non-EU countries)
|
||||
must send the information contained within the bill received to the **Agenzia delle Entrate**. This
|
||||
allows you to complete tax-related information on your bill, and to send it. The seller must be set
|
||||
as :guilabel:`Cedente/Prestatore`, and the buyer as :guilabel:`Cessionario/Committente`. Contained
|
||||
within the **XML** document for the vendor bill, the vendor's credentials show as
|
||||
:guilabel:`Cedente/Prestatore`, and your company's credentials as
|
||||
:guilabel:`Cessionario/Committente`.
|
||||
|
||||
.. note::
|
||||
Self-billing invoices or VAT invoice integrations must be issued and sent to the tax agency.
|
||||
|
||||
When inputting taxes in a vendor bill, it is possible to select **reverse charge** taxes. These are
|
||||
automatically activated in the Italian fiscal position. By going to :menuselection:`Accounting -->
|
||||
Configuration --> Taxes`, the `10%` and `22%` :guilabel:`Goods` and :guilabel:`Services` tax scopes
|
||||
are activated and preconfigured with the correct tax grids. These are set up automatically to ensure
|
||||
the correct booking of accounting entries and display of the tax report.
|
||||
|
||||
For **vendor bills**, **three** types of configurations are technically identified by a code called
|
||||
:guilabel:`Tipo Documento`:
|
||||
|
||||
- `TD17` - Buying services from **EU** and **non-EU** countries;
|
||||
- `TD18` - Buying **goods** from **EU**;
|
||||
- `TD19` - Buying **goods** from a **foreign** vendor, but the **goods** are already in **Italy**
|
||||
in a **VAT deposit**.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: `TD17`
|
||||
|
||||
Buying **services** from **EU** and **non-EU** countries:
|
||||
|
||||
The foreign *seller* invoices a service with a **VAT-excluded** price, as it is not
|
||||
taxable in Italy. The VAT is paid by the *buyer* in Italy;
|
||||
|
||||
- Within EU: the *buyer* integrates the invoice received with the **VAT information**
|
||||
due in Italy (i.e., **vendor bill tax integration**);
|
||||
- Non-EU: the *buyer* sends themselves an invoice (i.e., **self-billing**).
|
||||
|
||||
Odoo exports a transaction as `TD17` if the following conditions are met:
|
||||
|
||||
- Is a vendor bill;
|
||||
- At least one tax on the invoice lines targets the tax grids :ref:`VJ <italy/grids>`;
|
||||
- All invoice lines either have :guilabel:`Services` as **products**, or a tax with the
|
||||
:guilabel:`Services` as **tax scope**.
|
||||
|
||||
.. tab:: `TD18`
|
||||
|
||||
Buying **goods** from **EU**:
|
||||
|
||||
Invoices issued within the EU follow a **standard format**, therefore only an integration of
|
||||
the existing invoice is required.
|
||||
|
||||
Odoo exports a transaction as `TD18` if the following conditions are met:
|
||||
|
||||
- Is a vendor bill;
|
||||
- At least one tax on the invoice lines targets the tax grids :ref:`VJ <italy/grids>`;
|
||||
- All invoice lines either have :guilabel:`Consumable` as **products**, or a tax with the
|
||||
:guilabel:`Goods` as **tax scope**.
|
||||
|
||||
.. tab:: `TD19`
|
||||
|
||||
Buying **goods** from a **foreign** vendor, but the **goods** are already in **Italy** in a
|
||||
**VAT deposit**:
|
||||
|
||||
- From EU: the *buyer* integrates the invoice received with the **VAT information** due in
|
||||
Italy (i.e., **vendor bill tax integration**);
|
||||
- Non-EU: the *buyer* sends an invoice to *themselves* (i.e., **self-billing**).
|
||||
|
||||
Odoo exports a move as a `TD19` if the following conditions are met:
|
||||
|
||||
- Is a vendor bill;
|
||||
- At least one tax on the invoice lines targets the tax grid :ref:`VJ3 <italy/grids>`;
|
||||
- All invoice lines either have :guilabel:`Consumable` products, or a tax with
|
||||
:guilabel:`Goods` as tax scope.
|
||||
If the document is valid, it is recorded and considered fiscally valid by the :abbr:`AdE (Agenzia
|
||||
delle Entrate)`, which will proceed with archiving in :guilabel:`Substitute Storage (Conservazione
|
||||
Sostitutiva)` if explicitly requested on the Agency's portal.
|
||||
|
||||
.. warning::
|
||||
Odoo does not offer the
|
||||
`Conservazione Sostitutiva <https://www.agid.gov.it/index.php/it/piattaforme/conservazione>`_
|
||||
requirements. Other providers and **Agenzia delle Entrate** supply free and certified storage to
|
||||
meet the requested conditions.
|
||||
Odoo does not offer the `Conservazione Sostitutiva
|
||||
<https://www.agid.gov.it/index.php/it/piattaforme/conservazione>`_ requirements. Other providers
|
||||
and :abbr:`AdE (Agenzia delle Entrate)` supply free and certified storage to meet the
|
||||
specifications requested by law.
|
||||
|
||||
.. _italy/internal-reverse:
|
||||
The :abbr:`SdI (Sistema di Interscambio)` :guilabel:`Destination Code` attempts to forward the
|
||||
invoice to the customer at the provided address, whether it is a `PEC` email address or a
|
||||
:abbr:`SdI (Sistema di Interscambio)` :guilabel:`Destination Code` for their ERP's WebServices
|
||||
channels. A maximum of 6 attempts are made every 12 hours, so even if unsuccessful, this process can
|
||||
take up to three days. The invoice status is :guilabel:`Accepted by SDI, Forwarding to Partner`.
|
||||
|
||||
Internal reverse charge
|
||||
-----------------------
|
||||
Possible Rejection
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. warning::
|
||||
Odoo currently does not support domestic **internal reverse charge** processes.
|
||||
The :abbr:`SdI (Sistema di Interscambio)` may find inaccuracies in the compilation, possibly even
|
||||
formal ones. In this case, the invoice is in the :guilabel:`SDI Rejected` state. The :abbr:`SdI
|
||||
(Sistema di Interscambio)`'s observations are inserted at the top of the Invoice tab. To resolve the
|
||||
issue, it is sufficient to delete the attachments of the invoice, return the invoice to
|
||||
:guilabel:`Draft`, and fix the errors. Once the invoice is ready, it can be resent.
|
||||
|
||||
.. _italy/grids:
|
||||
.. note::
|
||||
To regenerate the XML, both the XML attachment and the PDF report must be deleted, so that they
|
||||
are then regenerated together. This ensures that both always contain the same data.
|
||||
|
||||
'Reverse Charge' tax grids
|
||||
--------------------------
|
||||
.. image:: italy/edi-rejected.png
|
||||
:alt: EDI Rejected State
|
||||
|
||||
The Italian localization has a specific **tax grid** section for **reverse charge** taxes. These
|
||||
tax grids are identifiable by the :ref:`VJ <italy/grids>` tag, and can be found under
|
||||
:menuselection:`Accounting --> Reporting --> Audit Reports: Tax Report`.
|
||||
Forwarding Completed
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. image:: italy/italy-grids.png
|
||||
:align: center
|
||||
:alt: Italian reverse charge tax grids
|
||||
The invoice has been delivered to the customer; however, you can still send a copy to the customer
|
||||
in PDF via email or post. Its status is :guilabel:`Accepted by SDI, Delivered to Partner`.
|
||||
|
||||
San Marino
|
||||
==========
|
||||
If the :abbr:`SdI (Sistema di Interscambio)` cannot contact your customer, they may not be
|
||||
registered on the :abbr:`AdE (Agenzia delle Entrate)` portal. In this case, just make sure to send
|
||||
the invoice in PDF via email or by mail. The invoice is then in the :guilabel:`Accepted by SDI,
|
||||
Partner Delivery Failed` state.
|
||||
|
||||
Tax Integration
|
||||
---------------
|
||||
|
||||
When you receive a vendor bill, either from :abbr:`SdI (Sistema di Interscambio)`, from paper or
|
||||
from an imported XML file, the Tax Agency might request that you send some tax information
|
||||
integration back to the :abbr:`SdI (Sistema di Interscambio)`. It happens when a transaction that
|
||||
was tax exempt becomes taxable for any reason.
|
||||
|
||||
.. example::
|
||||
Here is a non-exhaustive list:
|
||||
|
||||
- | :ref:`italy/reverse-charge`
|
||||
| As a buyer, you have to pay taxes on what you buy and integrate tax information.
|
||||
:guilabel:`Reverse Charge` taxes.
|
||||
- | :ref:`italy/split-payment`
|
||||
| As a :abbr:`PA (Public Administration)` business buyer, you have to pay taxes and integrate
|
||||
tax information. Be sure that you replace the :guilabel:`0% Sale Taxes` on the vendor bill
|
||||
you received with the correct :guilabel:`Split Payment` taxes.
|
||||
- | :guilabel:`Self Consumption`
|
||||
| When, as a business owner, you use an asset that you bought for business for personal reasons
|
||||
instead, you have to pay those taxes you originally deducted as a business cost for it.
|
||||
|
||||
Odoo may detect that your vendor bill can be interpreted as a document of a type that needs tax
|
||||
integration, as detailed in the :ref:`italy/document-types` section.
|
||||
|
||||
.. important::
|
||||
Be sure that you replace the :guilabel:`0% Sale Taxes` on the vendor bill you received with the
|
||||
ones you're supposed to pay to the :abbr:`AdE (Agenzia delle Entrate)`. A button then appears on
|
||||
the top of the single vendor bill form to send them.
|
||||
|
||||
When clicking on the :guilabel:`Send Tax Integration` button, an XML file of the appropriate
|
||||
:guilabel:`Document Type` is generated, attached to the bill, and sent as for invoices.
|
||||
|
||||
.. image:: italy/edi-tax-integration-button.png
|
||||
:alt: EDI Send Tax Integration button
|
||||
|
||||
.. _italy/document-types:
|
||||
|
||||
Document Types
|
||||
--------------
|
||||
|
||||
The :abbr:`SdI (Sistema di Interscambio)` requires businesses to send customer invoices and other
|
||||
documents through the :abbr:`EDI (Electronic Data Interchange)`.
|
||||
|
||||
The following :guilabel:`Document Type` codes all technically identify different business use cases.
|
||||
|
||||
TD01 - Invoices
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
This represents the standard **domestic** scenario for all invoices exchanged through the :abbr:`SdI
|
||||
(Sistema di Interscambio)`. Any invoice that doesn't fall into one of the specific special cases
|
||||
is categorized as a regular invoice, identified by the :guilabel:`Document Type` `TD01`.
|
||||
|
||||
TD02 - Down payments
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
**Down payment** invoices are imported/exported with a different :guilabel:`Document Type` code
|
||||
`TDO2` than regular invoices. Upon import of the invoice, a regular vendor bill is created.
|
||||
|
||||
Odoo exports transactions as `TD02` if the following conditions are met:
|
||||
|
||||
#. It is an invoice;
|
||||
#. All invoice lines are related to down payment sales order lines.
|
||||
|
||||
TD04 - Credit notes
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
It is the standard scenario for all **credit notes** issued to **domestic** clients, when we need to
|
||||
formally acknowledge that the seller is reducing or canceling a previously issued invoice, for
|
||||
example, in case of overbilling, incorrect items, or overpayment. Just like invoices, they must be
|
||||
sent to the :abbr:`SdI (Sistema di Interscambio)`, their :guilabel:`Document Type` `TD04`
|
||||
|
||||
TD07, TD08, TD09 - Simplified Invoicing
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Simplified invoices (`TD07`), credit notes (`TD08`), and debit notes (`TD09`) can be used to certify
|
||||
domestic transactions under 400 EUR (VAT included). Its status is the same as that of a regular
|
||||
invoice, but with fewer information requirements.
|
||||
|
||||
For a simplified invoice to be established, it must include:
|
||||
|
||||
#. :guilabel:`Customer Invoice` reference: **unique** numbering sequence with **no gaps**;
|
||||
#. :guilabel:`Invoice Date`: issue **date** of the invoice;
|
||||
#. :guilabel:`Company Info`: the **seller**'s full credentials (VAT/TIN number, name, full address)
|
||||
under :menuselection:`General Settings --> Companies (section)`;
|
||||
#. :guilabel:`VAT`: the **buyer**'s VAT/TIN number (on the partner form);
|
||||
#. :guilabel:`Total`: the total **amount** (VAT included) of the invoice.
|
||||
|
||||
In the :abbr:`EDI (Electronic Data Interchange)`, Odoo exports invoices as simplified if:
|
||||
|
||||
#. It is a domestic transaction (i.e., the partner is from Italy);
|
||||
#. Your company's **required fields** (:guilabel:`VAT Number` or :guilabel:`Codice Fiscale`,
|
||||
:guilabel:`Fiscal Regime`, and full **address**) are provided;
|
||||
#. The partner's address is not fully specified (i.e., it misses the City or the ZipCode);
|
||||
#. The total amount of VAT included is **less** than **400 EUR**.
|
||||
|
||||
.. note::
|
||||
The 400 EUR threshold was defined in `the decree of the 10th of May 2019 in the Gazzetta
|
||||
Ufficiale <https://www.gazzettaufficiale.it/eli/id/2019/05/24/19A03271/sg>`_. We advise you to
|
||||
check the current official value.
|
||||
|
||||
TD16 - Internal Reverse Charge
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Internal reverse charge transactions (see :ref:`italy/tax-exemption` and
|
||||
:ref:`italy/reverse-charge`) are exported as `TD16` if the following conditions are met:
|
||||
|
||||
- It is a vendor bill;
|
||||
- It has at least **one tax** on the invoice lines that targets one of these :ref:`tax grids
|
||||
<italy/grids>`: `VJ6`, `VJ7`, `VJ8`, `VJ12`, `VJ13`, `VJ14`, `VJ15`, `VJ16`, `VJ17`
|
||||
|
||||
TD17 - Buying services from abroad
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
When buying **services** from **EU** and **non-EU** countries, the foreign *seller* invoices a
|
||||
service with a **VAT-excluded** price, as it is not taxable in Italy. The VAT is paid by the *buyer*
|
||||
in Italy.
|
||||
|
||||
- Within the EU: the *buyer* integrates the invoice received with the **VAT information** due in
|
||||
Italy (i.e., **vendor bill tax integration**);
|
||||
- Non-EU: the *buyer* sends themselves an invoice (i.e., **self-billing**).
|
||||
|
||||
Odoo exports a transaction as `TD17` if the following conditions are met:
|
||||
|
||||
- It is a vendor bill;
|
||||
- It has at least **one tax** on the invoice lines that targets the tax grid :ref:`VJ3
|
||||
<italy/grids>`;
|
||||
- All invoice lines either have :guilabel:`Services` as **products**, or a tax with the
|
||||
:guilabel:`Services` as **tax scope**.
|
||||
|
||||
TD18 - Buying goods from EU
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Invoices issued within the EU follow a **standard format**, therefore only an integration of the
|
||||
existing invoice is required.
|
||||
|
||||
Odoo exports a transaction as `TD18` if the following conditions are met:
|
||||
|
||||
- It is a vendor bill;
|
||||
- The **partner** is from an **EU** country;
|
||||
- It has at least one tax on the invoice lines that targets the tax grid :ref:`VJ9 <italy/grids>`;
|
||||
- All invoice lines either have :guilabel:`Consumable` as **products**, or a tax with
|
||||
:guilabel:`Goods` as **tax scope**.
|
||||
|
||||
TD19 - Buying goods from VAT deposit
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Buying **goods** from a **foreign** vendor, but the **goods** are already in **Italy** in a **VAT
|
||||
deposit**.
|
||||
|
||||
- From the EU: the *buyer* integrates the invoice received with the **VAT information** due in
|
||||
Italy (i.e., **vendor bill tax integration**);
|
||||
- Non-EU: the *buyer* sends an invoice to *themselves* (i.e., **self-billing**).
|
||||
|
||||
Odoo exports a transaction as a `TD19` if the following conditions are met:
|
||||
|
||||
- It is a vendor bill;
|
||||
- It has at least one tax on the invoice lines that targets the tax grid :ref:`VJ3 <italy/grids>`;
|
||||
- All invoice lines either have :guilabel:`Consumables` as products, or a tax with
|
||||
:guilabel:`Goods` as **tax scope**.
|
||||
|
||||
TD24 - Deferred invoices
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The **deferred invoice** is an invoice that is **issued at a later time** than the sale of goods or
|
||||
the provision of services. A **deferred invoice** has to be issued at the latest within the **15th
|
||||
day** of the month following the delivery covered by the document.
|
||||
|
||||
It usually is a **summary invoice** containing a list of multiple sales of goods or services carried
|
||||
out in the month. The business is allowed to **group** the sales into **one invoice**, generally
|
||||
issued at the **end of the month** for accounting purposes. Deferred invoices are default for
|
||||
**wholesalers** having recurrent clients.
|
||||
|
||||
If the goods are transported by a **carrier**, every delivery has an associated **Documento di
|
||||
Transporto (DDT)**, or **Transport Document**. The deferred invoice **must** indicate the details of
|
||||
all the **DDTs** information for better tracing.
|
||||
|
||||
.. note::
|
||||
E-invoicing of deferred invoices requires the `l10n_it_stock_ddt` :ref:`module <italy/modules>`.
|
||||
In this case, a dedicated :guilabel:`Document Type` `TD24` is used in the e-invoice.
|
||||
|
||||
Odoo exports transactions as `TD24` if the following conditions are met:
|
||||
|
||||
#. It is an invoice;
|
||||
#. It is associated with deliveries whose **DDTs** have a **different** date than the issue date of
|
||||
the invoice.
|
||||
|
||||
TD28 - San Marino
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
Invoices
|
||||
--------
|
||||
********
|
||||
|
||||
San Marino and Italy have special agreements on e-invoicing operations. As such, **invoices** follow
|
||||
the regular **reverse charge** rules. Additional requirements are not enforced by Odoo, however, the
|
||||
user is requested by the **State** to:
|
||||
the regular **reverse charge** rules. You can use the proper :guilabel:`Document Type` depending on
|
||||
the invoice type: `TD01`, `TD04`, `TD05`, `TD24`, `TD25`. Additional requirements are not enforced
|
||||
by Odoo. However, the user is requested by the **State** to:
|
||||
|
||||
- Select a tax with the option :guilabel:`Has exoneration of tax (Italy)` ticked, and the
|
||||
:guilabel:`Exoneration` set to `N3.3`;
|
||||
- Use the generic :abbr:`SdI (Sistema di Interscambio)` :guilabel:`Codice Destinatario` `2R4GT08`.
|
||||
The invoice is then routed by a dedicated office in San Marino to the correct business.
|
||||
- Select a tax with the :guilabel:`Tax Exemption Kind` set to `N3.3`;
|
||||
- Use the generic :abbr:`SdI (Sistema di Interscambio)` :guilabel:`Destination Code` `2R4GT08`.
|
||||
|
||||
Bills
|
||||
-----
|
||||
The invoice is then routed by a dedicated office in San Marino to the correct business.
|
||||
|
||||
Vendor Bills
|
||||
************
|
||||
|
||||
When a **paper bill** is received from San Marino, any Italian company **must** submit that invoice
|
||||
to the **Agenzia delle Entrate** by indicating the e-invoice's :guilabel:`Tipo Documento` field with
|
||||
the special value `TD28`.
|
||||
to the :abbr:`AdE (Agenzia delle Entrate)` by indicating the e-invoice's :guilabel:`Document Type`
|
||||
field with the special value `TD28`.
|
||||
|
||||
.. tabs::
|
||||
Odoo exports a transaction as `TD28` if the following conditions are met:
|
||||
|
||||
.. tab:: `TD28`
|
||||
#. It is a vendor bill;
|
||||
#. It has at least one tax on the invoice lines that targets the tax grids :ref:`VJ <italy/grids>`;
|
||||
#. The **country** of the partner is **San Marino**.
|
||||
|
||||
Odoo exports a move as `TD28` if the following conditions are met:
|
||||
Public Administration Businesses (B2G)
|
||||
======================================
|
||||
|
||||
- Is a vendor bill;
|
||||
- At least one tax on the invoice lines targets the tax grids :ref:`VJ <italy/grids>`;
|
||||
- The **country** of the partner is **San Marino**.
|
||||
:abbr:`PA (Public Administration)` businesses are subjected to more control than private businesses
|
||||
as they handle public money coming from taxpayers. The :abbr:`EDI (Electronic Data Interchange)`
|
||||
process adds some steps to the :ref:`regular one <italy/e-invoicing-process>`, as :abbr:`PA (Public
|
||||
Administration)` businesses can **accept** or **refuse** invoices.
|
||||
|
||||
Pubblica amministrazione (B2G)
|
||||
==============================
|
||||
.. note::
|
||||
:abbr:`PA (Public Administration)` businesses have a 6-digit long :guilabel:`Destination Code`,
|
||||
also called :abbr:`CUU (Codice Univoco Ufficio)`, that is **mandatory**, **PEC** address cannot
|
||||
be used in this case.
|
||||
|
||||
.. warning::
|
||||
Odoo does **not** send invoices directly to the government as they need to be signed. If we see
|
||||
that the codice destinatario is 6 digits, then it is not sent to the PA automatically, but you
|
||||
can download the XML, sign it with an external program and send it through the portal.
|
||||
|
||||
Digital qualified signature
|
||||
---------------------------
|
||||
|
||||
For invoices and bills intended to the **Pubblica Amministrazione (B2G)**, a **Digital Qualified
|
||||
Signature** is required for all files sent through the :abbr:`SdI (Sistema di Interscambio)`. The
|
||||
**XML** file must be certified using a certificate that is either:
|
||||
|
||||
- a **smart card**;
|
||||
- a **USB token**;
|
||||
- a **Hardware Security Module (HSM)**.
|
||||
.. seealso::
|
||||
`Complete list of businesses that belong to the Public Administration along with their
|
||||
Destination Code <https://www.agenziaentrate.gov.it/portale/web/guest/aree-tematiche/fatturazione-elettronica>`_
|
||||
|
||||
CIG, CUP, DatiOrdineAcquisto
|
||||
----------------------------
|
||||
|
||||
To ensure the effective traceability of payments by public administrations, electronic invoices
|
||||
issued to the public administrations must contain:
|
||||
issued to public administrations must contain:
|
||||
|
||||
- The :abbr:`CIG (Codice Identificativo Gara)`, except in cases of exclusion from traceability
|
||||
obligations provided by law n. 136 of August 13, 2010;
|
||||
- The :abbr:`CUP (Codice Unico di Progetto)`, in case of invoices related to public works.
|
||||
|
||||
If the **XML** file requires it, the **Agenzia Delle Entrate** can *only* proceed payments of
|
||||
electronic invoices when the **XML** file contains a :abbr:`CIG (Codice Identificativo Gara)` and
|
||||
:abbr:`CUP (Codice Unico di Progetto)`. For each electronic invoice, it is **necessary** to indicate
|
||||
the :abbr:`CUU (Codice Univoco Ufficio)`, which represents the unique identifier code that allows
|
||||
the :abbr:`SdI (Sistema di Interscambio)` to correctly deliver the electronic invoice to the
|
||||
recipient office.
|
||||
If the XML file requires it, the :abbr:`AdE (Agenzia Delle Entrate)` can *only* proceed payments of
|
||||
electronic invoices when the XML file contains a :abbr:`CIG (Codice Identificativo Gara)` and
|
||||
:abbr:`CUP (Codice Unico di Progetto)`.
|
||||
|
||||
.. note::
|
||||
- The :abbr:`Codice Unico di Progetto)` and the :abbr:`CIG (Codice Identificativo Gara)` must be
|
||||
included in one of the **2.1.2** (DatiOrdineAcquisto), **2.1.3** (Dati Contratto), **2.1.4**
|
||||
(DatiConvenzione), **2.1.5** (Date Ricezione), or **2.1.6** (Dati Fatture Collegate)
|
||||
information blocks. These correspond to the elements named :guilabel:`CodiceCUP` and
|
||||
:guilabel:`CodiceCIG` of the electronic invoice **XML** file, whose table can be found on the
|
||||
government `website <http://www.fatturapa.gov.it/>`_.
|
||||
- The :abbr:`CUU (Codice Univoco Ufficio)` must be included in the electronic invoice
|
||||
corresponding to the element **1.1.4** (:guilabel:`CodiceDestinario`).
|
||||
The :abbr:`CUP (Codice Unico di Progetto)` and the :abbr:`CIG (Codice Identificativo Gara)` must
|
||||
be included in one of the `DatiOrdineAcquisto`, `DatiContratto`, `DatiConvenzione`,
|
||||
`DateRicezione`, or `DatiFattureCollegate` XML tags.
|
||||
|
||||
These correspond to the elements named :guilabel:`CodiceCUP` and :guilabel:`CodiceCIG` of the
|
||||
electronic invoice XML file, whose table can be found on the government `website
|
||||
<http://www.fatturapa.gov.it/>`_.
|
||||
|
||||
.. _italy/split-payment:
|
||||
|
||||
Split Payment
|
||||
-------------
|
||||
|
||||
The :guilabel:`Split Payment` mechanism behaves much like :ref:`italy/reverse-charge`.
|
||||
|
||||
.. example::
|
||||
When an Italian company bills a :abbr:`PA (Public Administration)` business - for example,
|
||||
cleaning services for a public building - the :abbr:`PA (Public Administration)` business
|
||||
self-reports the VAT to the Tax Agency themselves, and the vendor just has to select the
|
||||
appropriate tax with the right :guilabel:`Tax Exemption` for their invoice lines.
|
||||
|
||||
The specific :guilabel:`Scissione dei Pagamenti` fiscal position is available to deal with partners
|
||||
belonging to the :abbr:`PA (Public Administration)`.
|
||||
|
||||
Process
|
||||
-------
|
||||
|
||||
.. _italy/digital-signature:
|
||||
|
||||
Digital qualified signature
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
For invoices and bills intended for the :abbr:`PA (Public Administration)`, a **Digital Qualified
|
||||
Signature** is required for all files sent through the :abbr:`SdI (Sistema di Interscambio)`. The
|
||||
XML file must be certified using a certificate that is either:
|
||||
|
||||
- a **smart card**;
|
||||
- a **USB token**;
|
||||
- an :abbr:`HSM (Hardware Security Module)`.
|
||||
|
||||
.. warning::
|
||||
Odoo **cannot** digitally sign documents for you. When a 6-digit long :guilabel:`Codice
|
||||
Destinatario` is detected, then the :abbr:`EDI (Electronic Data Interchange)` process stops, and
|
||||
the invoice is set on the :guilabel:`Requires user signature` state. You can download the
|
||||
document in XML, sign it with any :guilabel:`Digital Qualified Signature` provider's external
|
||||
program and send it through the :abbr:`AdE (Agenzia Delle Entrate)` portal.
|
||||
|
||||
Acceptance or Refusal
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. warning::
|
||||
As Odoo does not handle sending signed invoices to :abbr:`PA (Public Administration)` businesses,
|
||||
these states cannot be directly triggered by Odoo. When you upload the invoice on the :abbr:`AdE
|
||||
(Agenzia Delle Entrate)` portal, Odoo receives notifications about it, putting the correct
|
||||
:guilabel:`SdI State` on the invoice.
|
||||
|
||||
After receiving the invoice through the :abbr:`SdI (Sistema di Interscambio)`, the :abbr:`PA (Public
|
||||
Administration)` business has 15 days to accept the invoice. If it does, then the process ends here.
|
||||
If the :abbr:`PA (Public Administration)` business refuses the invoice, it is still considered valid
|
||||
once it is accepted by the :abbr:`SdI (Sistema di Interscambio)`. You then have to issue a credit
|
||||
note to compensate and send it to the :abbr:`SdI (Sistema di Interscambio)`.
|
||||
|
||||
Expired Terms
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
If the :abbr:`PA (Public Administration)` business doesn't reply within 15 days, you need to contact
|
||||
the :abbr:`PA (Public Administration)` business directly, sending them both the invoice and the
|
||||
received deadline notification by email. You can make an arrangement with them and manually set the
|
||||
correct :guilabel:`SdI State` on your invoice.
|
||||
|
||||
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
@@ -11,9 +11,9 @@ localization, such as a chart of accounts, taxes, and the BIR 2307 report. These
|
||||
template to get started with using Philippine accounting.
|
||||
|
||||
.. note::
|
||||
- When creating a new database and `Philippines` is selected as a country, the fiscal
|
||||
- When creating a new database and selecting the `Philippines` as a country, the fiscal
|
||||
localization module **Philippines - Accounting** is automatically installed.
|
||||
- If installing the module in an existing company, the **chart of accounts** and **taxes** will
|
||||
- If the module is installed in an existing company, the **chart of accounts** and **taxes** will
|
||||
*not* be replaced if there are already posted journal entries.
|
||||
- The BIR 2307 report is installed, but the withholding taxes may need to be manually created.
|
||||
|
||||
@@ -21,20 +21,22 @@ Chart of accounts and taxes
|
||||
---------------------------
|
||||
|
||||
A minimum configuration default chart of accounts is installed, and the following types of taxes are
|
||||
installed and also linked to the relevant account:
|
||||
installed and linked to the relevant account:
|
||||
|
||||
- VAT 12%
|
||||
- VAT Exempt
|
||||
- Withholding taxes
|
||||
- Sales and Purchase VAT 12%
|
||||
- Sales and Purchase VAT Exempt
|
||||
- Sales and Purchase VAT Zero-Rated
|
||||
- Purchase Withholding
|
||||
|
||||
For the withholding taxes, there is an additional :guilabel:`Philippines ATC` field under the
|
||||
:guilabel:`Philippines` tab.
|
||||
For the withholding taxes (:menuselection:`Configuration --> Taxes`), there is an additional
|
||||
:guilabel:`Philippines ATC` field under the :guilabel:`Philippines` tab.
|
||||
|
||||
.. image:: philippines/philippines-atc-code.png
|
||||
:alt: Philippines ATC code field set on taxes.
|
||||
|
||||
Taxes' ATC codes are used for the BIR 2307 report. If a tax is created manually, its ATC code must
|
||||
be added.
|
||||
.. note::
|
||||
Taxes' ATC codes are used for the BIR 2307 report. If a tax is created manually, its ATC code
|
||||
must be added.
|
||||
|
||||
Contacts
|
||||
--------
|
||||
@@ -59,8 +61,9 @@ For individuals not belonging to a company, identify them by using the following
|
||||
BIR 2307 report
|
||||
===============
|
||||
|
||||
**BIR 2307** report data, also known as *Certificate of Creditable Tax Withheld at Source*,
|
||||
can be generated for purchase orders and vendor payments with the applicable withholding taxes.
|
||||
**BIR 2307** report data, also known as `Certificate of Creditable Tax Withheld at Source
|
||||
<https://www.bir.gov.ph/index.php/bir-forms/certificates.html>`_, can be generated for purchase
|
||||
orders and vendor payments with the applicable withholding taxes.
|
||||
|
||||
To generate a BIR 2307 report, select one or multiple vendor bills from the list view, and click
|
||||
:menuselection:`Action --> Download BIR 2307 XLS`.
|
||||
@@ -68,7 +71,8 @@ To generate a BIR 2307 report, select one or multiple vendor bills from the list
|
||||
.. image:: philippines/philippines-multi-bill.png
|
||||
:alt: Multiple vendor bills selected with action to "Download BIR 2307 XLS".
|
||||
|
||||
The same action can be performed on a vendor bill from the form view.
|
||||
.. tip::
|
||||
The same action can be performed on a vendor bill from the form view.
|
||||
|
||||
A pop-up appears to review the selection, then click on :guilabel:`Generate`.
|
||||
|
||||
@@ -78,18 +82,67 @@ A pop-up appears to review the selection, then click on :guilabel:`Generate`.
|
||||
This generates the `Form_2307.xls` file that lists all the vendor bill lines with the applicable
|
||||
withholding tax.
|
||||
|
||||
The same process above can also be done for a *single* vendor :doc:`payment
|
||||
<../accounting/payments>` if they were linked to one or more :doc:`vendor bills
|
||||
<../accounting/payments>` with applied withholding taxes.
|
||||
The process above can also be used for a *single* vendor :doc:`payment <../accounting/payments>` if
|
||||
it is linked to one or more :doc:`vendor bills <../accounting/payments>` with applied withholding
|
||||
taxes.
|
||||
|
||||
.. note::
|
||||
- If there is no withholding tax applied, then the XLS file will not generate records for those
|
||||
vendor bill lines.
|
||||
- If no withholding tax is applied, then the XLS file will not generate records for those vendor
|
||||
bill lines.
|
||||
- When grouping payments for multiple bills, Odoo splits the payments based on the contact. From
|
||||
a payment, clicking :menuselection:`Action --> Download BIR 2307 XLS`, generates a report that
|
||||
a payment, clicking :menuselection:`Action --> Download BIR 2307 XLS` generates a report that
|
||||
only includes vendor bills related to that contact.
|
||||
|
||||
.. important::
|
||||
Odoo cannot generate the BIR 2307 PDF report or DAT files directly.
|
||||
The generated `Form_2307.xls` file can be exported to an *external* tool to convert it to BIR DAT
|
||||
or PDF format.
|
||||
Odoo cannot generate the BIR 2307 PDF report or DAT files directly. The generated
|
||||
:file:`Form_2307.xls` file can be exported to an *external* tool to convert it to BIR DAT or PDF
|
||||
format.
|
||||
|
||||
SLSP Report
|
||||
===========
|
||||
|
||||
The **SLSP** report, also known as the *Summary List of Sales and Purchases*, can be viewed and
|
||||
exported (in XLSX format). The report can be viewed from :menuselection:`Reporting --> Partner
|
||||
Reports --> Summary List of Sales and Purchases`.
|
||||
|
||||
The report is split into two sections, which can be accessed from their respective buttons at the
|
||||
top:
|
||||
|
||||
- | :guilabel:`Sales` for :abbr:`SLS (Summary List of Sales)` report
|
||||
| All customer invoices with the associated sales taxes applied are shown in this report.
|
||||
- | :guilabel:`Purchases` for :abbr:`SLP (Summary List of Purchases)` report
|
||||
| All vendor bills with the associated purchase taxes applied are shown in this report.
|
||||
|
||||
.. image:: philippines/slsp.png
|
||||
:alt: SLSP Report
|
||||
|
||||
By default, both reports exclude journal entries containing partners without a TIN number set and
|
||||
those with importation taxes set. To view or hide them, the :guilabel:`Options:` button gives
|
||||
additional filters to include these, among others:
|
||||
|
||||
- `Including Partners Without TIN`
|
||||
- `Including Importations`
|
||||
|
||||
.. important::
|
||||
Odoo cannot generate the DAT files directly. The :guilabel:`Export SLSP` and :guilabel:`XLSX`
|
||||
buttons export an XLSX file, which can be processed using an *external* tool to convert to the
|
||||
DAT format.
|
||||
|
||||
2550Q Tax report
|
||||
================
|
||||
|
||||
The tax report report is accessible by navigating to :menuselection:`Reporting --> Statement Reports
|
||||
--> Tax Report --> 2550Q(PH)`. The form is based on the latest *2550Q (Quarterly Value-Added Tax
|
||||
Return)* Jan. 2023 version.
|
||||
|
||||
.. image:: philippines/2550Q.png
|
||||
:alt: 2550Q Tax Report
|
||||
|
||||
.. tip::
|
||||
Most lines in the tax report are automatically computed based on the taxes. For more accurate
|
||||
reporting and filing of the tax report, manual journal entries can also be mapped to the tax
|
||||
report through preconfigured **Tax Grids** for each tax report line.
|
||||
|
||||
.. important::
|
||||
Odoo cannot generate the 2550Q BIR formatted PDF report directly. It should be used as a
|
||||
reference when externally filing the form manually or online.
|
||||
|
||||
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 31 KiB |
@@ -96,6 +96,13 @@ Periodic submission to HMRC
|
||||
Import your obligations HMRC, filter on the period you want to submit, and send your tax report by
|
||||
clicking :guilabel:`Send to HMRC`.
|
||||
|
||||
.. tip::
|
||||
You can use dummy credentials to demo the HMRC flow. To do so, activate the
|
||||
:ref:`developer mode <developer-mode>` and go to :menuselection:`General Settings -->
|
||||
Technical --> System Parameters`. From here, search for `l10n_uk_reports.hmrc_mode` and change
|
||||
the value line to `demo`. You can get such credentials from the `HMRC Developer Hub
|
||||
<https://developer.service.hmrc.gov.uk/api-test-user>`_.
|
||||
|
||||
Periodic submission to HMRC for multi-company
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@@ -5,6 +5,10 @@ Stripe
|
||||
`Stripe <https://stripe.com/>`_ is a United States-based online payment solution provider allowing
|
||||
businesses to accept **credit cards** and other payment methods.
|
||||
|
||||
.. seealso::
|
||||
- `List of countries supported by Stripe <https://stripe.com/global>`_
|
||||
- `List of payment methods supported by Stripe <https://stripe.com/payments/payment-methods>`_
|
||||
|
||||
Create your Stripe account with Odoo
|
||||
====================================
|
||||
|
||||
|
||||
@@ -4,89 +4,196 @@
|
||||
Companies
|
||||
=========
|
||||
|
||||
A centralized management environment allows you to select multiple companies simultaneously and set
|
||||
their specific warehouses, customers, equipment, and contacts. It provides you the ability to
|
||||
generate reports of aggregated figures without switching interfaces, which facilitates daily tasks
|
||||
and the overall management process.
|
||||
A centralized management environment allows an administrator to select multiple companies
|
||||
simultaneously, and set their specific warehouses, customers, equipment, and contacts. It provides
|
||||
the ability to generate reports of aggregated figures without switching interfaces, which
|
||||
facilitates daily tasks, and enhances the overall management process.
|
||||
|
||||
.. danger::
|
||||
Utilizing a multi-company environment in an Odoo database warrants a subscription change from
|
||||
*Standard* (or *One App Free*) to a *Custom* plan. Should the administrator not migrate the
|
||||
subscription to a *Custom* plan after adding another company, the database risks being
|
||||
deactivated. For more information, consult the `Odoo Pricing page
|
||||
<https://www.odoo.com/pricing-plan>`_.
|
||||
|
||||
If the customer is on the *Standard* plan, and adds multi-company functionality to the database,
|
||||
it triggers an upsell for the *Custom* plan.
|
||||
|
||||
If they are on a *Yearly* or *Multi-year* contract, this creates an upsell order, with a 30-day
|
||||
limit (risking deactivation). If multi-company functionality is fully removed within that time
|
||||
period, the next time the database pings, the upsell order and limit are removed automatically.
|
||||
|
||||
If the customer is on a *Monthly* contract, once the next bill is created, and multi-company
|
||||
functionality is still detected while they are on a *Standard* plan, they are automatically
|
||||
switched, and billed on the *Custom* plan.
|
||||
|
||||
Should the customer want to go back to *Standard*, the Customer Success Team **must** be
|
||||
contacted.
|
||||
|
||||
To create a new company, navigate to :menuselection:`Settings app --> Companies section`, and click
|
||||
:guilabel:`Manage Companies`. Then, click :guilabel:`New` to create a new company.
|
||||
|
||||
Proceed to fill out the new company form that appears.
|
||||
|
||||
.. tip::
|
||||
To archive a company, navigate to :menuselection:`Settings app --> Companies section --> Manage
|
||||
Companies`. Then, tick the checkbox to the left of the company to be archived. If the
|
||||
:guilabel:`Companies` page is not in list view, click the :guilabel:`≣ (four bars)` icon, located
|
||||
in the top-right corner of the page.
|
||||
|
||||
After selecting the appropriate company, click the :guilabel:`⚙️ Actions` icon, and select
|
||||
:guilabel:`Archive` from the resulting drop-down menu.
|
||||
|
||||
To ensure all records related to the archived company are archived, contact Odoo's `Support Team
|
||||
<https://www.odoo.com/help>`_.
|
||||
|
||||
Should a record not be archived, there is a risk of reactivating the archived company, and
|
||||
creating the upsell again.
|
||||
|
||||
.. _companies/manage:
|
||||
|
||||
Manage companies and records
|
||||
============================
|
||||
|
||||
Go to :menuselection:`Settings --> Manage Companies` and fill in the form with your company’s
|
||||
information. If a *Parent Company* is selected, records are shared between the two companies (as
|
||||
long as both environments are active).
|
||||
Go to :menuselection:`Settings app --> Companies section --> Manage Companies`. Then, either click
|
||||
:guilabel:`New`, and fill in the form with the company's information, or select a pre-existing
|
||||
company to edit it.
|
||||
|
||||
.. image:: companies/create_js_store_us.png
|
||||
.. image:: companies/company-info.png
|
||||
:align: center
|
||||
:alt: Overview of a new company's form in Odoo
|
||||
:alt: Overview of a new company's form in Odoo.
|
||||
|
||||
.. tip::
|
||||
Activate the :ref:`developer mode <developer-mode>` to choose a *Favicon* for each of your
|
||||
companies, and easily identify them by the browser tabs. Set your favicons’ files size to 16x16
|
||||
or 32x32 pixels. JPG, PNG, GIF, and ICO are extensions accepted.
|
||||
Activate the :ref:`developer mode <developer-mode>` to set social media accounts and
|
||||
company-specific email system parameters. See this documentation on
|
||||
:doc:`../marketing/social_marketing` and :ref:`email_servers/outbound`.
|
||||
|
||||
.. image:: companies/favicon.png
|
||||
Companies also have a :guilabel:`Parent Company` set on the company form in :ref:`developer mode
|
||||
<developer-mode>`.
|
||||
|
||||
Switch between companies
|
||||
------------------------
|
||||
|
||||
Switch between (or select) multiple companies, by clicking on the company name, located in the
|
||||
far-right corner of the header menu, anywhere throughout the database. Tick the checkboxes next to
|
||||
the desired company name(s) to activate them. The highlighted company represents the current
|
||||
environment that is in use. To switch environments, click on the desired company name.
|
||||
|
||||
.. example::
|
||||
In the example below, the user has access to eight companies, two are activated, and the
|
||||
environment the database is in belongs to: *My Company (San Francisco)*.
|
||||
|
||||
.. image:: companies/multi-companies-menu-dashboard.png
|
||||
:align: center
|
||||
:height: 200
|
||||
:alt: View of a web browser and the favicon for a specific company chosen in Odoo
|
||||
:alt: View of the companies menu through the main dashboard in Odoo.
|
||||
|
||||
Switch between or select multiple companies by enabling their selection boxes to activate them. The
|
||||
grayed company is the one which environment is in use. To switch environments, click on the
|
||||
company’s name. In the example below, the user has access to three companies, two are activated, and
|
||||
the environment in use is of *JS Store US*.
|
||||
Share records
|
||||
-------------
|
||||
|
||||
.. image:: companies/multi_companies_menu_dashboard.png
|
||||
:align: center
|
||||
:alt: View of the companies menu through the main dashboard in Odoo
|
||||
|
||||
Data such as Products, Contacts, and Equipment can be shared or set to be shown for a specific
|
||||
Data (such as, products, contacts, and equipment) can be shared, or set to be shown for a specific
|
||||
company only. To do so, on their forms, choose between:
|
||||
|
||||
- *A blank field*: the record is shared within all companies.
|
||||
- *Adding a company*: the record is visible to users logged in to that specific company.
|
||||
|
||||
.. image:: companies/product_form_company.png
|
||||
.. image:: companies/product-form-company.png
|
||||
:align: center
|
||||
:alt: View of a product's form emphasizing the company field in Odoo Sales
|
||||
:alt: View of a product's form emphasizing the company field in Odoo Sales.
|
||||
|
||||
Employees' access
|
||||
=================
|
||||
When an environment is selected from the top menu, along with an additional company, records are
|
||||
shared between the two companies.
|
||||
|
||||
Once companies are created, manage your employees' :doc:`Access Rights <users/access_rights>`
|
||||
for *Multi Companies*.
|
||||
Branches
|
||||
========
|
||||
|
||||
.. image:: companies/access_rights_multi_companies.png
|
||||
Branches are available to add to a company. Branches can be added by navigating to
|
||||
:menuselection:`Settings app --> Companies section --> Manage Companies`. Then, select the desired
|
||||
company from the list. From the company detail form, open the :guilabel:`Branches` tab. To add a
|
||||
branch, click :guilabel:`Add a line`, and fill out the :guilabel:`Create Branches` pop-up form that
|
||||
appears.
|
||||
|
||||
.. image:: companies/add-branch.png
|
||||
:align: center
|
||||
:alt: Add a branch to a company with branches and add a line highlighted.
|
||||
|
||||
.. tip::
|
||||
Activate the :ref:`developer mode <developer-mode>` to set social media accounts and
|
||||
company-specific email system parameters. See this documentation on
|
||||
:doc:`../marketing/social_marketing` and :ref:`email_servers/outbound`.
|
||||
|
||||
Branches also have a :guilabel:`Parent Company` set on the branch form in :ref:`developer mode
|
||||
<developer-mode>`. Accounting and fiscal localizations for the branch are set on the
|
||||
:guilabel:`Parent Company`. To do so, select the company from the *company selector* in the top
|
||||
menu, and go to :menuselection:`Settings app --> Accounting --> Fiscal Localization`.
|
||||
|
||||
.. danger::
|
||||
Adding a branch to a company triggers an upsell, should the database be in the *Standard* or
|
||||
*One App Free* pricing plans. Adding one or more branches constitutes a multi-company database,
|
||||
and needs to be moved to the *Custom* pricing plan.
|
||||
|
||||
For more information on pricing, see `Odoo's pricing <https://www.odoo.com/pricing-plan>`_ page.
|
||||
|
||||
Employee access
|
||||
===============
|
||||
|
||||
Once companies are created, manage the employees' :doc:`Access Rights <users/access_rights>` for
|
||||
*Multi Companies*.
|
||||
|
||||
To access the *Access Rights*, navigate to :menuselection:`Settings app --> Users section --> Manage
|
||||
Users`.
|
||||
|
||||
From the :guilabel:`Users` page, select a user from the list to modify. Then, either change the
|
||||
fields for :guilabel:`Allowed Companies` or :guilabel:`Default Company`.
|
||||
|
||||
Multiple companies can be set for :guilabel:`Allowed Companies`, and *only one* can be set as the
|
||||
:guilabel:`Default Company`.
|
||||
|
||||
.. image:: companies/access-rights-multi-companies.png
|
||||
:align: center
|
||||
:alt: View of an user form emphasizing the multi companies field under the access rights tabs
|
||||
in Odoo
|
||||
in Odoo.
|
||||
|
||||
| If a user has multiple companies *activated* on his database, and he is **editing** a record,
|
||||
the editing happens on the record's related company.
|
||||
| Example: if editing a sale order issued under JS Store US while working on the JS Store Belgium
|
||||
environment, the changes are applied under JS Store US (the company from which the sale order
|
||||
was issued).
|
||||
| When **creating** a record, the company taken into account is:
|
||||
If an administrator has multiple companies activated on the database, and is editing a record, the
|
||||
editing occurs on the record's related company.
|
||||
|
||||
- The current company (the one active) or,
|
||||
- No company is set (on products and contacts’ forms for example) or,
|
||||
- The company set is the one linked to the document (the same as if a record is being edited).
|
||||
.. example::
|
||||
If editing a sale order issued under `JS Store US`, while working on the `JS Store Belgium`
|
||||
environment, the changes are applied under `JS Store US` (the company from which the sale order
|
||||
was issued).
|
||||
|
||||
Documents’ format
|
||||
=================
|
||||
When creating a record, the company taken into account is:
|
||||
|
||||
To set documents' formats according to each company, *activate* and *select* the respective one and,
|
||||
under *Settings*, click on *Configure Document Layout*.
|
||||
- The current company selected in the company selector, in the upper-right hand of the screen (the
|
||||
one that is highlighted/active)
|
||||
|
||||
.. image:: companies/document_layout.png
|
||||
**OR**
|
||||
|
||||
- No company is set (because none is set on the product and contact forms, for example)
|
||||
|
||||
**OR**
|
||||
|
||||
- The company set is the company linked to the document (the same as if a record is being edited)
|
||||
|
||||
Document format
|
||||
===============
|
||||
|
||||
To set document formats according to each company, *activate* and *select* the respective company,
|
||||
and, under the :menuselection:`Settings app --> Companies section`, click on :guilabel:`Configure
|
||||
Document Layout` and edit the information as needed.
|
||||
|
||||
.. image:: companies/document-layout.png
|
||||
:align: center
|
||||
:alt: View of the settings page emphasizing the document layout field in Odoo
|
||||
:alt: View of the settings page emphasizing the document layout field in Odoo.
|
||||
|
||||
Inter-Company Transactions
|
||||
:guilabel:`Company Details` can be edited on the document layout. By default, this field is
|
||||
populated from the company information listed, when navigating here: :menuselection:`Settings app
|
||||
--> Companies section --> Manage Companies`, and select a company from the list.
|
||||
|
||||
Inter-company transactions
|
||||
==========================
|
||||
|
||||
First, make sure each one of your companies is properly set in relation to:
|
||||
First, activate the :ref:`developer mode <developer-mode>`. Then, make sure each one of the
|
||||
companies is properly set in relation to:
|
||||
|
||||
- :doc:`Chart of Accounts <../finance/accounting/get_started/chart_of_accounts>`
|
||||
- :doc:`Taxes <../finance/accounting/taxes>`
|
||||
@@ -95,44 +202,54 @@ First, make sure each one of your companies is properly set in relation to:
|
||||
- :doc:`Fiscal Localizations <../finance/fiscal_localizations>`
|
||||
- :doc:`Pricelists <../sales/sales/products_prices/prices/pricing>`
|
||||
|
||||
Now, activate the *Inter-Company Transactions* option under *Settings*. With the respective company
|
||||
*activated* and *selected*, choose if you would like operations between companies to be synchronized
|
||||
at an invoice/bills level or at a sales/purchase orders level.
|
||||
Next, navigate to :menuselection:`Settings app --> Companies section --> Manage Companies`. Then,
|
||||
select the desired company from the list. On the company form, select the :guilabel:`Inter-Company
|
||||
Transactions` tab, on the individual company's detail form.
|
||||
|
||||
.. image:: companies/inter_company_transactions.png
|
||||
With the respective company activated and selected, choose one of the following :guilabel:`Rule`
|
||||
options:
|
||||
|
||||
- :guilabel:`Do not synchronize`: do not synchronize any inter-company transactions.
|
||||
- :guilabel:`Synchronized invoice/bills`: generates a bill/invoice when a company confirms a
|
||||
bill/invoice for the selected company.
|
||||
- :guilabel:`Synchronize Sales Order`: generates a drafted sales order using the selected company
|
||||
warehouse, when a sales order is confirmed for the selected company. If, instead of a drafted
|
||||
sales order, it should be validated, enable :guilabel:`Automatic Validation`.\*
|
||||
- :guilabel:`Synchronize Purchase Order`: generates a drafted purchase order using the selected
|
||||
company warehouse, when a purchase order is confirmed for the selected company. If, instead of a
|
||||
drafted purchase order, it should be validated, enable :guilabel:`Automatic Validation`.\*
|
||||
- :guilabel:`Synchronize Sales and Purchase Order`: generates a drafted purchase/sales order using
|
||||
the selected company warehouse, when a sales/purchase order is confirmed for the selected company.
|
||||
If, instead of a drafted purchase/sales order, it should be validated, enable :guilabel:`Automatic
|
||||
Validation`.\*
|
||||
|
||||
\* The given option needs to be selected, so :guilabel:`Automatic Validation` appears in the
|
||||
configuration.
|
||||
|
||||
.. image:: companies/inter-company-transactions.png
|
||||
:align: center
|
||||
:alt: View of the settings page emphasizing the inter company transaction field in Odoo
|
||||
|
||||
- **Synchronize invoice/bills**: generates a bill/invoice when a company confirms a bill/invoice for
|
||||
the selected company.
|
||||
|
||||
*Example:* an invoice posted on JS Store Belgium, for JS Store US, automatically creates a vendor
|
||||
bill on the JS Store US, from the JS Store Belgium.
|
||||
|
||||
.. image:: companies/invoice_inter_company.png
|
||||
:align: center
|
||||
:alt: View of an invoice for JS Store US created on JS Store Belgium in Odoo
|
||||
|
||||
- **Synchronize sales/purchase order**: generates a drafted purchase/sales order using the selected
|
||||
company warehouse when a sales/purchase order is confirmed for the selected company. If instead of
|
||||
a drafted purchase/sales order you rather have it validated, enable *Automatic Validation*.
|
||||
|
||||
*Example:* when a sale order for JS Store US is confirmed on JS Store Belgium, a purchase order
|
||||
on JS Store Belgium is automatically created (and confirmed if the *Automatic Validation* feature
|
||||
was enabled).
|
||||
|
||||
.. image:: companies/purchase_order_inter_company.png
|
||||
:align: center
|
||||
:alt: View of the purchase created on JS Store US from JS Store Belgium in Odoo
|
||||
:alt: View of the settings page emphasizing the inter company transaction field in Odoo.
|
||||
|
||||
.. note::
|
||||
Products have to be configured as *Can be sold* and must be shared between the companies.
|
||||
Products **must** be configured as :guilabel:`Can be sold` and shared between the companies. See
|
||||
:doc:`../inventory_and_mrp/inventory/product_management/product_tracking/type`.
|
||||
|
||||
.. example::
|
||||
:guilabel:`Synchronize invoice/bills`: an invoice posted on `JS Store Belgium`, for `JS Store
|
||||
US`, automatically creates a vendor bill, and generates a drafted purchase/sales order using the
|
||||
selected company warehouse, when a sales/purchase order is confirmed for the selected company.
|
||||
If, instead of a drafted purchase/sales order, it should be validated, enable
|
||||
:guilabel:`Automatic Validation`.
|
||||
|
||||
:guilabel:`Synchronize sales/purchase order`: when a sale order for `JS Store US` is confirmed on
|
||||
`JS Store Belgium`, a purchase order on `JS Store Belgium` is automatically created (and
|
||||
confirmed, if the :guilabel:`Automatic Validation` feature was enabled).
|
||||
|
||||
.. tip::
|
||||
Remember to test all workflows as an user other than the administrator.
|
||||
Remember to test all workflows as a user *other* than the administrator.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`Multi-company Guidelines </developer/howtos/company>`
|
||||
- :doc:`Multi-company Guidelines <../../developer/howtos/company>`
|
||||
- :doc:`../finance/accounting/get_started/multi_currency`
|
||||
|
||||
.. toctree::
|
||||
|
||||
|
After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 23 KiB |
@@ -1,83 +1,232 @@
|
||||
=============
|
||||
Digest Emails
|
||||
Digest emails
|
||||
=============
|
||||
|
||||
**Digest Emails** are periodic snapshots sent to your organization via email that include high-level
|
||||
information about how your business is performing.
|
||||
*Digest Emails* are periodic snapshots sent via email to users in an organization that include
|
||||
high-level information about how the business is performing.
|
||||
|
||||
Navigate to Digest Emails by going to :menuselection:`Settings --> General Settings --> Statistics`,
|
||||
then activate the **Digest Emails** feature and click on save.
|
||||
To start sending digest emails, begin by navigating to :menuselection:`Settings app --> Statistics
|
||||
section`, activate the :guilabel:`Digest Emails` feature, and click :guilabel:`Save`.
|
||||
|
||||
.. image:: digest_emails/digest-email-settings.png
|
||||
:align: center
|
||||
:alt: Digest Emails section inside General Settings.
|
||||
|
||||
You can control a variety of settings for your Digest Emails, such as:
|
||||
A variety of settings can be configured for digest emails, such as:
|
||||
|
||||
- which KPIs are shared in the Digest
|
||||
- how often Digest Emails are sent
|
||||
- who in your organization receives Digest Emails
|
||||
- creating custom Digest Email templates
|
||||
- adding additional KPIs (Studio required)
|
||||
- Deciding which :abbr:`KPIs (key performance indicators)` are shared in the digest emails
|
||||
- Determining how often digest emails are sent
|
||||
- Choosing who in the organization receives digest emails
|
||||
- Creating custom digest email templates
|
||||
- Adding additional :abbr:`KPIs (key performance indicators)` (*Studio* app required)
|
||||
|
||||
.. note::
|
||||
By default, Digest Email is *enabled*, and *Your Odoo Periodic Digest* serves as the primary
|
||||
template, which includes all KPI measurements across your Odoo database and is sent daily to
|
||||
administrators.
|
||||
By default, the :guilabel:`Digest Email` feature is enabled. :guilabel:`Your Odoo Periodic
|
||||
Digest` serves as the primary template, which includes all :abbr:`KPI (key performance
|
||||
indicator)` measurements across the Odoo database, and is sent daily to administrators.
|
||||
|
||||
.. warning::
|
||||
When creating duplicates of databases that have sending capabilities (not testing-mode), the
|
||||
digest emails continue to send from the duplicate database, unless deactivated.
|
||||
|
||||
To deactivate the digest email, navigate to :menuselection:`Settings --> Statistics section`.
|
||||
Then, deactivate the :guilabel:`Digest Emails` feature, by un-ticking the checkbox, and clicking
|
||||
:guilabel:`Save`. See the section on :ref:`digest-emails/deactivate`.
|
||||
|
||||
.. _digest-emails/customize-digest:
|
||||
|
||||
Customize *Your Odoo Periodic Digest*
|
||||
=====================================
|
||||
Customize default digest email
|
||||
==============================
|
||||
|
||||
To customize the default Digest Email (*Your Odoo Periodic Digest*), go to :menuselection:`Settings
|
||||
--> General Settings --> Statistics --> Digest Email`, select *Your Odoo Periodic Digest* and click
|
||||
on the *external link* next to the dropdown selection.
|
||||
To customize the default digest email (*Your Odoo Periodic Digest*), go to :menuselection:`Settings
|
||||
app --> Statistics section --> Digest Email field`. Then, select :guilabel:`Your Odoo Periodic
|
||||
Digest`, and click on the :guilabel:`↗️ (External link)` icon, next to the drop-down menu selection.
|
||||
|
||||
A popup window appears and presents a variety of editable settings, which include:
|
||||
A pop-up window appears, and presents a variety of editable settings, which include:
|
||||
|
||||
- **Digest Title** - what you want your Digest Email to be called
|
||||
- **Periodicity** - control the regimen in how often Digest Emails are sent
|
||||
- **KPIs** - check/uncheck each calculated KPI that appears in Digest Emails
|
||||
- **Recipients** - add/remove users who receive your Digest Emails
|
||||
- **Custom** - add your own KPIs (Studio required)
|
||||
- :guilabel:`Digest Name`: the name of the digest email.
|
||||
- :guilabel:`Periodicity`: control how often digest emails are sent (:guilabel:`Daily`,
|
||||
:guilabel:`Weekly`, :guilabel:`Monthly`, or :guilabel:`Quarterly`).
|
||||
- :guilabel:`Next Send Date`: the date on which the digest email will be sent again.
|
||||
- :guilabel:`KPIs` tab: check/uncheck each calculated :abbr:`KPI (key performance indicator)` that
|
||||
appears in digest emails. A ticked box indicates an active :abbr:`KPI (key performance indicator)`
|
||||
in the digest email. See the section on :ref:`digest-emails/kpis`.
|
||||
- :guilabel:`Recipients` tab: add/remove users who receive the digest emails. See the section on
|
||||
:ref:`digest-emails/recipients`.
|
||||
|
||||
.. note::
|
||||
The :abbr:`KPIs (key performance indicators)` can be customized using Odoo *Studio*. Additional
|
||||
costs to the database subscription are incurred should *Studio* need to be installed. See this
|
||||
section on :ref:`digest-emails/custom-kpi`.
|
||||
|
||||
.. image:: digest_emails/periodic-digest.png
|
||||
:align: center
|
||||
:alt: Customize default Digest Email settings and custom KPIs.
|
||||
|
||||
.. _digest-emails/deactivate:
|
||||
|
||||
Deactivate digest email
|
||||
=======================
|
||||
|
||||
To manually deactivate an individual digest email, first navigate to :menuselection:`Settings app
|
||||
--> Statistics section`, and click :guilabel:`Configure Digest Emails`. Then, select the desired
|
||||
digest email from the list that should be deactivated.
|
||||
|
||||
Next, click :guilabel:`DEACTIVATE FOR EVERYONE` to deactivate the digest email for everyone, or
|
||||
:guilabel:`UNSUBSCRIBE ME` to remove the logged in user from the mailing list. These buttons are
|
||||
located in the top menu, just above the :guilabel:`Digest Name`.
|
||||
|
||||
Manually send digest email
|
||||
==========================
|
||||
|
||||
To manually send a digest email, first navigate to :menuselection:`Settings app --> Statistics
|
||||
section`, and click :guilabel:`Configure Digest Emails`. Then, select the desired digest email, and
|
||||
click :guilabel:`SEND NOW`. This button is located in the top menu, just above the :guilabel:`Digest
|
||||
Name`.
|
||||
|
||||
.. _digest-emails/kpis:
|
||||
|
||||
KPIs
|
||||
====
|
||||
|
||||
Pre-configured :abbr:`KPIs (key performance indicators)` can be added to the digest email from the
|
||||
:guilabel:`KPIs` tab of the digest email template form.
|
||||
|
||||
First, navigate to :menuselection:`Settings app --> Statistics section`, and click
|
||||
:guilabel:`Configure Digest Emails`.
|
||||
|
||||
Then, select the desired digest email, and open the :guilabel:`KPIs` tab.
|
||||
|
||||
To add a :abbr:`KPI (key performance indicator)` to the digest email, tick the checkbox next to the
|
||||
desired :abbr:`KPI (key performance indicator)`. After all :abbr:`KPIs (key performance indicators)`
|
||||
are added (or deselected), click :guilabel:`Save`.
|
||||
|
||||
The following :abbr:`KPIs (key performance indicators)` are available in the :guilabel:`KPIs` tab on
|
||||
a digest email template form out-of-box in Odoo:
|
||||
|
||||
.. image:: digest_emails/oob-kpis.png
|
||||
:align: right
|
||||
:alt: KPIs listed in the out-of-box digest email.
|
||||
|
||||
:guilabel:`General`
|
||||
- :guilabel:`Connected Users`
|
||||
- :guilabel:`Messages`
|
||||
|
||||
:guilabel:`Project`
|
||||
- :guilabel:`Open Tasks`
|
||||
|
||||
:guilabel:`Recruitment`
|
||||
- :guilabel:`Employees`
|
||||
|
||||
:guilabel:`CRM`
|
||||
- :guilabel:`New Leads/Opportunities`
|
||||
- :guilabel:`Opportunities Won`
|
||||
|
||||
:guilabel:`Sales`
|
||||
- :guilabel:`All Sales`
|
||||
- :guilabel:`eCommerce Sales`
|
||||
|
||||
:guilabel:`Point of Sale`
|
||||
- :guilabel:`POS Sales`
|
||||
|
||||
:guilabel:`Live Chat`
|
||||
- :guilabel:`% of Happiness`
|
||||
- :guilabel:`Conversations handled`
|
||||
- :guilabel:`Time to answer (sec)`
|
||||
|
||||
:guilabel:`Helpdesk`
|
||||
- :guilabel:`Tickets Closed`
|
||||
|
||||
:guilabel:`Invoicing`
|
||||
- :guilabel:`Revenue`
|
||||
- :guilabel:`Banks and Cash Moves`
|
||||
|
||||
.. _digest-emails/recipients:
|
||||
|
||||
Recipients
|
||||
==========
|
||||
|
||||
Digest email recipients are added from the :guilabel:`Recipients` tab of the digest email template
|
||||
form.
|
||||
|
||||
To add a recipient, navigate to :menuselection:`Settings app --> Statistics section`, and click
|
||||
:guilabel:`Configure Digest Emails`. Then, select the desired digest email, and open the
|
||||
:guilabel:`Recipients` tab.
|
||||
|
||||
To add a recipient, click :guilabel:`Add a line`, and an :guilabel:`Add Recipients` pop-up window
|
||||
appears, with all available users to add as recipients.
|
||||
|
||||
From the pop-up window, tick the checkbox next to the :guilabel:`Name` of the user(s), and click the
|
||||
:guilabel:`Select` button.
|
||||
|
||||
To remove a user as a recipient, click the :guilabel:`❌ (remove)` icon to the far-right of the user
|
||||
listed in the :guilabel:`Recipients` tab.
|
||||
|
||||
Click :guilabel:`Save` to implement the changes.
|
||||
|
||||
.. _digest-emails/custom-emails:
|
||||
|
||||
Custom digest emails
|
||||
Create digest emails
|
||||
====================
|
||||
|
||||
To do so, click on **Configure Digest Emails** and then **Create**.
|
||||
To create a new digest email, navigate to :menuselection:`Settings app --> Statistics section`, and
|
||||
click :guilabel:`Configure Digest Emails`. Then, click :guilabel:`Create` to create a new digest
|
||||
email.
|
||||
|
||||
From there, give your Digest Email a title, specify periodicity, and choose your desired KPIs and
|
||||
recipients fields as needed.
|
||||
A separate page, with a blank digest email template appears, and presents a variety of editable
|
||||
settings, including:
|
||||
|
||||
After you click **Save**, your new custom Digest Email is available as a selection in the **General
|
||||
Settings** dropdown menu.
|
||||
- :guilabel:`Digest Name`: the name of the digest email.
|
||||
- :guilabel:`Periodicity`: control how often digest emails are sent (:guilabel:`Daily`,
|
||||
:guilabel:`Weekly`, :guilabel:`Monthly`, or :guilabel:`Quarterly`).
|
||||
- :guilabel:`Next Send Date`: the date on which the digest email will be sent again.
|
||||
- :guilabel:`KPIs` tab: check/uncheck each calculated :abbr:`KPI (key performance indicator)` that
|
||||
appears in digest emails. A ticked box indicates an active :abbr:`KPI (key performance indicator)`
|
||||
in the digest email. See the section on :ref:`digest-emails/kpis`.
|
||||
- :guilabel:`Recipients` tab: add/remove users who receive the digest emails. See the section on
|
||||
:ref:`digest-emails/recipients`.
|
||||
|
||||
From there, give the digest email a :guilabel:`Digest Name`, specify :guilabel:`Periodicity`,
|
||||
choose the desired :abbr:`KPIs (key performance indicators)`, and add :guilabel:`Recipients`, as
|
||||
needed.
|
||||
|
||||
After clicking :guilabel:`Save`, the new custom digest email is available as a selection in the
|
||||
:guilabel:`Digest Email` field, located in the :menuselection:`Settings app --> Statistics section`.
|
||||
|
||||
.. _digest-emails/custom-kpi:
|
||||
|
||||
Custom KPIs with Studio
|
||||
-----------------------
|
||||
Custom KPIs with Odoo Studio
|
||||
============================
|
||||
|
||||
For either *Your Odoo Periodic Digest* or your own custom Digest Email, you can add your own KPIs
|
||||
by using Odoo Studio.
|
||||
The :abbr:`KPIs (key performance indicators)` on a digest email template form, in the
|
||||
:guilabel:`KPIs` tab, can be customized using Odoo *Studio*.
|
||||
|
||||
To begin, click the **Toggle Studio** icon or click the **Recipients** tab and then the ellipses
|
||||
:menuselection:`… icon --> Add Custom Field` to edit the template or add additional fields.
|
||||
.. warning::
|
||||
Additional costs to the database subscription are incurred, should Odoo *Studio* need to be
|
||||
installed.
|
||||
|
||||
In order to create additional fields, you must create two fields on the digest object:
|
||||
To begin, click the :guilabel:`🛠️ (tools)` icon in the top-right of the screen. This is the link to
|
||||
the Odoo *Studio* application.
|
||||
|
||||
#. create a boolean field called `kpi_myfield` and display it in the KPIs tab
|
||||
#. create a computed field called `kpi_myfield_value` that computes your customized KPI
|
||||
#. select your KPI(s) in the KPIs tab.
|
||||
In order to create additional fields, create two fields on the digest object:
|
||||
|
||||
#. Create a boolean field called `kpi_myfield`, and display it in the :guilabel:`KPIs` tab.
|
||||
#. Create a computed field called `kpi_myfield_value` that computes the customized :abbr:`KPI (key
|
||||
performance indicator)`.
|
||||
#. Select the :abbr:`KPIs (key performance indicators)` in the :guilabel:`KPIs` tab.
|
||||
|
||||
.. tip::
|
||||
Here is the `source code
|
||||
<https://github.com/odoo/odoo/blob/15.0/addons/digest/models/digest.py>`_ for the `digest.py`
|
||||
file, which guides the programmer in the coding of the computed field.
|
||||
|
||||
.. seealso::
|
||||
Users can also click the :guilabel:`Recipients` tab, and then the vertical three-dot
|
||||
:guilabel:`(kebab)` menu to edit this view. Either click :guilabel:`EDIT LIST VIEW` or
|
||||
:guilabel:`EDIT FORM VIEW` to modify this tab.
|
||||
|
||||
Computed values reference table
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
-------------------------------
|
||||
|
||||
+-----------------------+-------------------------------------------+
|
||||
| LABEL | VALUE |
|
||||
|
||||
|
After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 43 KiB |