Compare commits
385 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 55f940d2d5 | |||
| 192cbbf168 | |||
| f6586f4dbd | |||
| 1d25e55346 | |||
| 8a6dbe56c3 | |||
| f2f701dba6 | |||
| 85ebf41d2c | |||
| 85c70cb544 | |||
| 0c30ca938e | |||
| 2f3d467dc8 | |||
| 3e853095d3 | |||
| 7467c92786 | |||
| e0269e2f11 | |||
| 3323cfe8ab | |||
| 83d52c83fa | |||
| 520b6e296a | |||
| 04aacf8863 | |||
| e180e1066f | |||
| 7f09bae364 | |||
| ce069df416 | |||
| d55739b2c5 | |||
| 32c7993e1c | |||
| c1ea6d7a38 | |||
| abb2e04f10 | |||
| 479ab2028e | |||
| e8c6f3421c | |||
| 54a9fedea2 | |||
| 3806da48e7 | |||
| f836a2c5ad | |||
| f7fd7b09df | |||
| 01f78636f8 | |||
| 54064a06ef | |||
| 7d92fb64f3 | |||
| 6435abfbad | |||
| 1ed9dd99d8 | |||
| a04bb90354 | |||
| 22c18c0165 | |||
| b8e1f50ea6 | |||
| 89a11e2e96 | |||
| 5df8a40c6e | |||
| 07ac9eda1f | |||
| 27a3014633 | |||
| c94ab5301c | |||
| b593192db4 | |||
| 4f198849bb | |||
| 7a388707bc | |||
| 813dba5b92 | |||
| 96f521a160 | |||
| edffa80d3c | |||
| 7d608d8a0e | |||
| d9441dcf1c | |||
| 8ad9f28f24 | |||
| 80dbfbdd15 | |||
| a6e04372a8 | |||
| dd93828247 | |||
| baf256fc40 | |||
| fbadb8cca0 | |||
| 9f94e19837 | |||
| 11f3f830a8 | |||
| 19058c1876 | |||
| 33d781c5a5 | |||
| 467e2f2550 | |||
| 0dadc8e580 | |||
| 90bab61e66 | |||
| 862d07ba5b | |||
| 757c4ec23e | |||
| 47a9da91ac | |||
| b846ff3a57 | |||
| a0e0e994a6 | |||
| 03d435ea31 | |||
| 201c82d9c9 | |||
| a164b8ab65 | |||
| 05500b1416 | |||
| ce5a8d554d | |||
| 0d624f6c3e | |||
| 93b07b8a25 | |||
| b93a4f78dd | |||
| b774e6f99b | |||
| 6cf5d44380 | |||
| 14a5b77169 | |||
| fff0e0f2a7 | |||
| e04e586ef4 | |||
| 16d2e1582f | |||
| cbd8f2e8d9 | |||
| 410ee3fe39 | |||
| cd19ebd5ac | |||
| 047cf49add | |||
| c8f509746d | |||
| c74b788b8f | |||
| 9b93e7788e | |||
| b306f91ed4 | |||
| ce5973e335 | |||
| e68deaf9d6 | |||
| a18a378a87 | |||
| 64db022a95 | |||
| 48bc8793a3 | |||
| 1695ad998b | |||
| 0557514788 | |||
| 2e7f7b0dc5 | |||
| 2b98d9c304 | |||
| b10d17af6a | |||
| 11b77ac549 | |||
| f9f855cd2e | |||
| 4734ddb7be | |||
| 3606b35230 | |||
| 33244724b0 | |||
| 6535c1d587 | |||
| 99e8ebf5de | |||
| f83fce2125 | |||
| 93e76fe08b | |||
| 4ee7077ac8 | |||
| e9b1f18822 | |||
| f6107b4858 | |||
| dbf69f4019 | |||
| b0627464e5 | |||
| 3bfd593757 | |||
| 35931b493d | |||
| 2c38a625e1 | |||
| 9dac99024f | |||
| d11dcd33d1 | |||
| 59afd5062d | |||
| 88880b8915 | |||
| add4cb8a04 | |||
| 34c303ecea | |||
| fd9e326ca6 | |||
| 42b16e1347 | |||
| 2df60cb372 | |||
| 08fbc57c22 | |||
| af310bfeff | |||
| 6c9e6b94e8 | |||
| 0cd769549c | |||
| 6ac164fdf7 | |||
| a208a077dd | |||
| ddf5d2ca5a | |||
| fa6bc19ecb | |||
| 64b2295cd4 | |||
| 4b67e08dcb | |||
| 8b69948613 | |||
| 9d6c7600d4 | |||
| ac5f9cd28e | |||
| 5b82c8cb00 | |||
| 2adc169aec | |||
| 7fe5675144 | |||
| 3941c8191e | |||
| 9ae8bee50f | |||
| 6120d187ed | |||
| c7f385fee3 | |||
| 431f88f955 | |||
| e8e9f86b8f | |||
| a28a65a373 | |||
| f0b25461c7 | |||
| 04b8762b51 | |||
| 652bead830 | |||
| fab3e9f352 | |||
| 74884ff81c | |||
| c3e4d920d3 | |||
| a2d4bc6956 | |||
| ff0a767f79 | |||
| 9264fe40be | |||
| c636893e32 | |||
| fbfb81d80c | |||
| a9620242af | |||
| 3ca0a69957 | |||
| 085320a86d | |||
| 2c5c43c474 | |||
| 26edc3c56b | |||
| 8bbfebea55 | |||
| 85fda3e9e1 | |||
| 98f9fa803e | |||
| 6a0bb6ba9f | |||
| 50bd2e0d42 | |||
| c743f44177 | |||
| f5aaeb524e | |||
| 7524eccaef | |||
| 5c645508d4 | |||
| b6fef3dec0 | |||
| 7e04e250b0 | |||
| 6f4f511b34 | |||
| fb5fc7915c | |||
| 89d3907b4f | |||
| 2a3117dfee | |||
| c9f1bf7df8 | |||
| f7769365bc | |||
| 364d997cae | |||
| 692b932eed | |||
| 508c7aeccc | |||
| f603ac5624 | |||
| 6332d389f9 | |||
| 59e8cb1c3a | |||
| e0e2200a60 | |||
| 8e5c99f42a | |||
| c529500e6a | |||
| 95739dc0fc | |||
| 0180929780 | |||
| da8e2dfe6a | |||
| 980d9f67c5 | |||
| 44e3bd028b | |||
| fae4de26f2 | |||
| 0865e62d5f | |||
| d4da0c2425 | |||
| 4dfb271bde | |||
| 79878321d6 | |||
| e7c634b31b | |||
| 28596bd782 | |||
| 5fd963a36f | |||
| 570313b1cd | |||
| 8e3142bc37 | |||
| ba056f4f36 | |||
| 14dddabc4d | |||
| e89dc21e44 | |||
| 7eb1324d1c | |||
| 1287839683 | |||
| b4a8e166a6 | |||
| a936e3cb5d | |||
| 48a20b1596 | |||
| 3d10ecf770 | |||
| d09028357e | |||
| 790b9c7fd9 | |||
| 8e25d81ce5 | |||
| abf2ea81dd | |||
| 40f4077669 | |||
| 28476a2894 | |||
| 57314bb63f | |||
| 50efd5d4ce | |||
| 545e124d02 | |||
| 564f2640c7 | |||
| 348da6ec78 | |||
| 54e6c5d6d4 | |||
| 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
|
||||
|
||||
@@ -18,6 +18,7 @@ CONFIG_DIR = .
|
||||
SPHINXOPTS = -D project_root=$(ROOT) -D canonical_version=$(CANONICAL_VERSION) \
|
||||
-D versions=$(VERSIONS) -D languages=$(LANGUAGES) -D language=$(CURRENT_LANG) \
|
||||
-D is_remote_build=$(IS_REMOTE_BUILD) \
|
||||
-T \
|
||||
-A google_analytics_key=$(GOOGLE_ANALYTICS_KEY) \
|
||||
-A plausible_script=$(PLAUSIBLE_SCRIPT) \
|
||||
-A plausible_domain=$(PLAUSIBLE_DOMAIN) \
|
||||
@@ -26,7 +27,7 @@ SOURCE_DIR = content
|
||||
|
||||
HTML_BUILD_DIR = $(BUILD_DIR)/html
|
||||
ifdef VERSIONS
|
||||
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/master
|
||||
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/saas-17.4
|
||||
endif
|
||||
ifneq ($(CURRENT_LANG),en)
|
||||
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/$(CURRENT_LANG)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ copyright = 'Odoo S.A.'
|
||||
# `version` is the version info for the project being documented, acts as replacement for |version|,
|
||||
# also used in various other places throughout the built documents.
|
||||
# `release` is the full version, including alpha/beta/rc tags. Acts as replacement for |release|.
|
||||
version = release = 'master'
|
||||
version = release = 'saas-17.4'
|
||||
|
||||
# `current_branch` is the technical name of the current branch.
|
||||
# E.g., saas-15.4 -> saas-15.4; 12.0 -> 12.0, master -> master (*).
|
||||
@@ -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,8 @@ sphinx.transforms.i18n.docname_to_domain = (
|
||||
# is populated. If a version is passed to `versions` but is not listed here, it will not be shown.
|
||||
versions_names = {
|
||||
'master': "Master",
|
||||
'saas-17.4': "Odoo Online",
|
||||
'saas-17.2': "Odoo Online",
|
||||
'saas-17.1': "Odoo Online",
|
||||
'17.0': "Odoo 17",
|
||||
'saas-16.4': "Odoo Online",
|
||||
@@ -233,8 +253,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 +269,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 +471,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.
|
||||
@@ -21,7 +21,7 @@ turned into a testing environment.
|
||||
Deactivated features
|
||||
====================
|
||||
|
||||
Here is a non-exhaustive list of the deactivated parameters:
|
||||
Here is a non-exhaustive list of the deactivated features:
|
||||
|
||||
- all planned actions (e.g., automatic invoicing of subscriptions, mass mailing, etc.)
|
||||
- outgoing emails
|
||||
@@ -29,6 +29,7 @@ Here is a non-exhaustive list of the deactivated parameters:
|
||||
- payment providers
|
||||
- delivery methods
|
||||
- :abbr:`IAP (In-App Purchase)` tokens
|
||||
- website visibility (prevent search engines from indexing your site)
|
||||
|
||||
.. note::
|
||||
**A red banner at the top of the screen is displayed on the neutralized database so that it can
|
||||
|
||||
@@ -30,6 +30,8 @@ confirmation for the account deletion.
|
||||
To confirm the deletion, enter the :guilabel:`Password` and the :guilabel:`Login` for the account
|
||||
being deleted. Then, click the :guilabel:`Delete Account` button to confirm the deletion.
|
||||
|
||||
.. _odoocom/change_password:
|
||||
|
||||
Odoo.com account password change
|
||||
================================
|
||||
|
||||
|
||||
@@ -60,6 +60,8 @@ daily operations.
|
||||
- By checking :guilabel:`For testing purposes`, all external actions (emails, payments, delivery
|
||||
orders, etc.) are disabled by default on the duplicated database.
|
||||
- Duplicated databases expire automatically after 15 days.
|
||||
- A maximum of five duplicates can be made per database. Under extraordinary circumstances,
|
||||
contact `support <https://www.odoo.com/help>`_ to raise the limit.
|
||||
|
||||
.. _odoo_online/rename:
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -740,7 +740,143 @@ It should be stored securely, and should be generated randomly e.g.
|
||||
|
||||
$ python3 -c 'import base64, os; print(base64.b64encode(os.urandom(24)))'
|
||||
|
||||
which will generate a 32 characters pseudorandom printable string.
|
||||
which generates a 32-character pseudorandom printable string.
|
||||
|
||||
Reset the master password
|
||||
-------------------------
|
||||
|
||||
There may be instances where the master password is misplaced, or compromised, and needs to be
|
||||
reset. The following process is for system administrators of an Odoo on-premise database detailing
|
||||
how to manually reset and re-encrypt the master password.
|
||||
|
||||
.. seealso::
|
||||
For more information about changing an Odoo.com account password, see this documentation:
|
||||
:ref:`odoocom/change_password`.
|
||||
|
||||
When creating a new on-premise database, a random master password is generated. Odoo recommends
|
||||
using this password to secure the database. This password is implemented by default, so there is a
|
||||
secure master password for any Odoo on-premise deployment.
|
||||
|
||||
.. warning::
|
||||
When creating an Odoo on-premise database the installation is accessible to anyone on the
|
||||
internet, until this password is set to secure the database.
|
||||
|
||||
The master password is specified in the Odoo configuration file (`odoo.conf` or `odoorc` (hidden
|
||||
file)). The Odoo master password is needed to modify, create, or delete a database through the
|
||||
graphical user interface (GUI).
|
||||
|
||||
Locate configuration file
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
First, open the Odoo configuration file (`odoo.conf` or `odoorc` (hidden file)).
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Windows
|
||||
|
||||
The configuration file is located at: `c:\\ProgramFiles\\Odoo{VERSION}\\server\\odoo.conf`
|
||||
|
||||
.. tab:: Linux
|
||||
|
||||
Depending on how Odoo is installed on the Linux machine, the configuration file is located in
|
||||
one of two different places:
|
||||
|
||||
- Package installation: `/etc/odoo.conf`
|
||||
- Source installation: `~/.odoorc`
|
||||
|
||||
Change old password
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Once the appropriate file has been opened, proceed to modify the old password in the configuration
|
||||
file to a temporary password.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Graphical user interface
|
||||
|
||||
After locating the configuration file, open it using a (:abbr:`GUI (graphical user
|
||||
interface)`). This can be achieved by simply double clicking on the file. Then, the device
|
||||
should have a default :abbr:`GUI (graphical user interface)` to open the file with.
|
||||
|
||||
Next, modify the master password line `admin_passwd = $pbkdf2-sha…` to `admin_passwd =
|
||||
newpassword1234`, for example. This password can be anything, as long as it is saved
|
||||
temporarily. Make sure to modify all characters after the `=`.
|
||||
|
||||
.. example::
|
||||
The line appears like this:
|
||||
`admin_passwd =
|
||||
$pbkdf2-sh39dji295.59mptrfW.9z6HkA$w9j9AMVmKAP17OosCqDxDv2hjsvzlLpF8Rra8I7p/b573hji540mk/.3ek0lg%kvkol6k983mkf/40fjki79m`
|
||||
|
||||
The modified line appears like this: `admin_passwd = newpassword1234`
|
||||
|
||||
.. group-tab:: Command-line interface
|
||||
|
||||
Modify the master password line using the following Unix command detailed below.
|
||||
|
||||
Connect to the Odoo server's terminal via Secure Shell (SSH) protocol, and edit the
|
||||
configuration file. To modify the configuration file, enter the following command:
|
||||
:command:`sudo nano /etc/odoo.conf`
|
||||
|
||||
After opening the configuration file, modify the master password line `admin_passwd =
|
||||
$pbkdf2-sha…` to `admin_passwd = newpassword1234`. This password can be anything, as long as
|
||||
it is saved temporarily. Make sure to modify all characters after the `=`.
|
||||
|
||||
.. example::
|
||||
The line appears like this:
|
||||
`admin_passwd =
|
||||
$pbkdf2-sh39dji295.59mptrfW.9z6HkA$w9j9AMVmKAP17OosCqDxDv2hjsvzlLpF8Rra8I7p/b573hji540mk/.3ek0lg%kvkol6k983mkf/40fjki79m`
|
||||
|
||||
The modified line appears like this: `admin_passwd = newpassword1234`
|
||||
|
||||
.. important::
|
||||
It is essential that the password is changed to something else, rather than triggering a new
|
||||
password reset by adding a semicolon `;` at the beginning of the line. This ensures the database
|
||||
is secure throughout the entire password reset process.
|
||||
|
||||
Restart Odoo server
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
After setting the temporary password, a restart of the Odoo server is **required**.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. group-tab:: Graphical user interface
|
||||
|
||||
To restart the Odoo server, first, type `services` into the Windows :guilabel:`Search` bar.
|
||||
Then, select the :guilabel:`Services` application, and scroll down to the :guilabel:`Odoo`
|
||||
service.
|
||||
|
||||
Next, right click on :guilabel:`Odoo`, and select :guilabel:`Start` or :guilabel:`Restart`.
|
||||
This action manually restarts the Odoo server.
|
||||
|
||||
.. group-tab:: Command-line interface
|
||||
|
||||
Restart the Odoo server by typing the command: :command:`sudo service odoo15 restart`
|
||||
|
||||
.. note::
|
||||
Change the number after `odoo` to fit the specific version the server is running on.
|
||||
|
||||
Use web interface to re-encrypt password
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
First, navigate to `/web/database/manager` or `http://server_ip:port/web/database/manager` in a
|
||||
browser.
|
||||
|
||||
.. note::
|
||||
Replace `server_ip` with the IP address of the database. Replace `port` with the numbered port
|
||||
the database is accessible from.
|
||||
|
||||
Next, click :guilabel:`Set Master Password`, and type in the previously-selected temporary password
|
||||
into the :guilabel:`Master Password` field. Following this step, type in a :guilabel:`New Master
|
||||
Password`. The :guilabel:`New Master Password` is hashed (or encrypted), once the
|
||||
:guilabel:`Continue` button is clicked.
|
||||
|
||||
At this point, the password has been successfully reset, and a hashed version of the new password
|
||||
now appears in the configuration file.
|
||||
|
||||
.. seealso::
|
||||
For more information on Odoo database security, see this documentation:
|
||||
:ref:`db_manager_security`.
|
||||
|
||||
Supported Browsers
|
||||
==================
|
||||
|
||||
|
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::
|
||||
@@ -277,18 +277,22 @@ Dependencies
|
||||
|
||||
.. tab:: Debian/Ubuntu
|
||||
|
||||
For Debian-based systems, the packages are listed in the `debian/control
|
||||
<{GITHUB_PATH}/debian/control>`_ file of the Odoo sources.
|
||||
|
||||
On Debian/Ubuntu, the following commands should install the required packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ cd /CommunityPath
|
||||
$ sed -n -e '/^Depends:/,/^Pre/ s/ python3-\(.*\),/python3-\1/p' debian/control | sudo xargs apt-get install -y
|
||||
$ cd odoo #CommunityPath
|
||||
$ sudo ./setup/debinstall.sh
|
||||
|
||||
The `setup/debinstall.sh` script will parse the `debian/control
|
||||
<{GITHUB_PATH}/debian/control>`_ file and install the found packages.
|
||||
|
||||
.. tab:: Install with pip
|
||||
|
||||
.. warning::
|
||||
Using pip may lead to security issues and broken dependencies; only do this if you
|
||||
know what you are doing.
|
||||
|
||||
As some of the Python packages need a compilation step, they require system libraries to
|
||||
be installed.
|
||||
|
||||
|
||||
|
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
|
||||
@@ -44,7 +50,7 @@ This matrix shows the support status of every version.
|
||||
- November 2023
|
||||
- October 2026 (planned)
|
||||
* - Odoo saas~16.4
|
||||
- |green|
|
||||
- |red|
|
||||
- N/A
|
||||
- N/A
|
||||
- August 2023
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
Upgrade
|
||||
=======
|
||||
|
||||
.. _administration/upgrade:
|
||||
|
||||
An upgrade is the process of moving your database from an older version to a newer :doc:`supported
|
||||
version <supported_versions>` (e.g., Odoo 14.0 to Odoo 16.0). Frequently upgrading is essential as
|
||||
each version comes with new and improved features, bug fixes, and security patches.
|
||||
@@ -45,30 +43,23 @@ An upgrade does not cover:
|
||||
<upgrade/request-test-database>` while also :doc:`upgrading the source code of your custom
|
||||
modules </developer/howtos/upgrade_custom_db>`.
|
||||
|
||||
|
||||
Upgrading in a nutshell
|
||||
-----------------------
|
||||
|
||||
#. Request an upgraded test database (see :ref:`obtaining an upgraded test database
|
||||
<upgrade/request-test-database>`).
|
||||
|
||||
#. If applicable, upgrade the source code of your custom module to be compatible with the new
|
||||
version of Odoo (see :doc:`/developer/howtos/upgrade_custom_db`).
|
||||
|
||||
#. Thoroughly test the upgraded database (see :ref:`testing the new version of the database
|
||||
<upgrade/test_your_db>`).
|
||||
|
||||
#. Report any issue encountered during the testing to Odoo via the `support page
|
||||
<https://odoo.com/help?stage=migration>`__.
|
||||
|
||||
#. Report any issue encountered during the testing to Odoo by `submitting a ticket for an issue
|
||||
related to my future upgrade (I am testing an upgrade) <https://odoo.com/help?stage=migration>`_.
|
||||
#. Once all issues are resolved and you are confident that the upgraded database can be used as
|
||||
your main database without any issues, plan the upgrade of your production database.
|
||||
|
||||
#. Request the upgrade for the production database, rendering it unavailable for the time it takes
|
||||
to complete the process (see :ref:`upgrading the production database <upgrade/upgrade-prod>`).
|
||||
|
||||
#. Report any issue encountered during the upgrade to Odoo via the `support page
|
||||
<https://odoo.com/help?stage=post_upgrade>`__.
|
||||
#. Report any issue encountered during the upgrade to Odoo by `submitting a ticket for an issue
|
||||
related to my upgrade (production) <https://odoo.com/help?stage=post_upgrade>`_.
|
||||
|
||||
.. _upgrade/request-test-database:
|
||||
|
||||
@@ -254,9 +245,9 @@ working correctly and to get more familiar with the new version.
|
||||
This list is **not** exhaustive. Extend the example to your other apps based on your use of Odoo.
|
||||
|
||||
If you face an issue while testing your upgraded test database, you can request the assistance of
|
||||
Odoo via the `support page <https://odoo.com/help?stage=migration>`__ by selecting the option
|
||||
related to testing the upgrade. In any case, it is essential to report any
|
||||
problem encountered during the testing to fix it before upgrading your production database.
|
||||
Odoo by `submitting a ticket for an issue related to my future upgrade (I am testing an upgrade)
|
||||
<https://odoo.com/help?stage=migration>`_. In any case, it is essential to report any problem
|
||||
encountered during the testing to fix it before upgrading your production database.
|
||||
|
||||
You might encounter significant differences with standard views, features, fields, and models during
|
||||
testing. Those changes cannot be reverted on a case-by-case basis. However, if a change introduced
|
||||
@@ -280,24 +271,22 @@ Upgrading the production database
|
||||
---------------------------------
|
||||
|
||||
Once the :ref:`tests <upgrade/test_your_db>` are completed and you are confident that the upgraded
|
||||
database can be used as your main database without any issues, it is time to plan the go-live day. It
|
||||
can be planned in coordination with Odoo's upgrade support analysts, reachable via the `support page
|
||||
<https://odoo.com/help>`__.
|
||||
database can be used as your main database without any issues, it is time to plan the go-live day.
|
||||
|
||||
Your production database will be unavailable during its upgrade. Therefore, we recommend planning
|
||||
the upgrade at a time when the use of the database is minimal.
|
||||
|
||||
As the standard upgrade scripts and your database are constantly evolving, it is also recommended
|
||||
to frequently request another upgraded test database to ensure that the upgrade process is
|
||||
still successful, especially if it takes a long time to finish. **Fully rehearsing the upgrade
|
||||
process the day before upgrading the production database is also recommended.**
|
||||
to frequently request another upgraded test database to ensure that the upgrade process is still
|
||||
successful, especially if it takes a long time to finish. **Fully rehearsing the upgrade process the
|
||||
day before upgrading the production database is also recommended.**
|
||||
|
||||
.. important::
|
||||
- Going into production without first testing may lead to:
|
||||
Going into production without first testing may lead to:
|
||||
|
||||
- Users failing to adjust to the changes and new features
|
||||
- Business interruptions (e.g., no longer having the possibility to validate an action)
|
||||
- Poor customer experience (e.g., an eCommerce website that does not work correctly)
|
||||
- Users failing to adjust to the changes and new features
|
||||
- Business interruptions (e.g., no longer having the possibility to validate an action)
|
||||
- Poor customer experience (e.g., an eCommerce website that does not work correctly)
|
||||
|
||||
The process of upgrading a production database is similar to upgrading a test database with a few
|
||||
exceptions.
|
||||
@@ -358,10 +347,9 @@ exceptions.
|
||||
a filestore. Therefore, the upgraded database filestore must be merged with the production
|
||||
filestore before deploying the new version.
|
||||
|
||||
In case of an issue with your production database, you can request the assistance of Odoo via the
|
||||
`support page <https://odoo.com/help?stage=post_upgrade>`__ by selecting the option related to
|
||||
the upgrade in production.
|
||||
|
||||
In case of an issue with your production database, you can request the assistance of Odoo by
|
||||
`submitting a ticket for an issue related to my upgrade (production)
|
||||
<https://odoo.com/help?stage=post_upgrade>`_.
|
||||
|
||||
.. _upgrade/sla:
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 22 KiB |
@@ -7,5 +7,6 @@ Odoo essentials
|
||||
essentials/activities
|
||||
essentials/reporting
|
||||
essentials/search
|
||||
essentials/contacts
|
||||
essentials/export_import_data
|
||||
essentials/in_app_purchase
|
||||
|
||||
@@ -2,238 +2,344 @@
|
||||
Activities
|
||||
==========
|
||||
|
||||
*Activities* are follow-up tasks tied to a record in an Odoo database. Activities can be scheduled
|
||||
on any page of the database that contains a chatter thread, kanban view, list view, or activities
|
||||
view of an application.
|
||||
.. |clock| replace:: :icon:`fa-clock-o` :guilabel:`(clock)` icon
|
||||
|
||||
*Activities* are follow-up tasks tied to a record in an Odoo database.
|
||||
|
||||
.. _activities/important:
|
||||
|
||||
The icon used to display activities varies, depending on the :ref:`activity type
|
||||
<activities/types>`:
|
||||
|
||||
- :icon:`fa-clock-o` :guilabel:`(clock)` icon: the default activities icon.
|
||||
- :icon:`fa-phone` :guilabel:`(phone)` icon: a phone call is scheduled.
|
||||
- :icon:`fa-envelope` :guilabel:`(envelope)` icon: an email is scheduled.
|
||||
- :icon:`fa-check` :guilabel:`(check)` icon: a "to-do" is scheduled.
|
||||
- :icon:`fa-users` :guilabel:`(people)` icon: a meeting is scheduled.
|
||||
- :icon:`fa-upload` :guilabel:`(upload)` icon: a document is scheduled to be uploaded.
|
||||
- :icon:`fa-pencil-square-o` :guilabel:`(request signature)` icon: a signature request is scheduled.
|
||||
|
||||
Schedule activities
|
||||
===================
|
||||
|
||||
One way that activities are created is by clicking the :guilabel:`Schedule Activity` button, located
|
||||
at the top of the *chatter* on any record. On the pop-up window that appears, select an
|
||||
:guilabel:`Activity Type` from the drop-down menu.
|
||||
Activities can be scheduled on any page of the database that contains a :ref:`chatter
|
||||
<activities/chatter>` thread, :ref:`Kanban view <activities/kanban>`, :ref:`list view
|
||||
<activities/list>`, or :ref:`activities view <activities/activity>` of an application.
|
||||
|
||||
.. _activities/chatter:
|
||||
|
||||
Chatter
|
||||
-------
|
||||
|
||||
Activities can be created from the chatter on any record.
|
||||
|
||||
To schedule a new activity, click the :guilabel:`Activities` button, located at the top of the
|
||||
chatter. In the :guilabel:`Schedule Activity` pop-up window that appears, :ref:`fill out the
|
||||
Schedule Activity form <activities/form>`.
|
||||
|
||||
.. image:: activities/chatter.png
|
||||
:align: center
|
||||
:alt: New activity type form.
|
||||
|
||||
.. _activities/kanban:
|
||||
|
||||
Kanban view
|
||||
-----------
|
||||
|
||||
Activities can also be created from the :icon:`oi-view-kanban` :guilabel:`(Kanban)` view.
|
||||
|
||||
To do so, click on the |clock| located at the bottom of an individual record.
|
||||
|
||||
Click :guilabel:`+ Schedule An Activity`, then proceed to :ref:`fill out the Schedule Activity form
|
||||
<activities/form>`.
|
||||
|
||||
.. image:: activities/schedule-kanban-activity.png
|
||||
:align: center
|
||||
:alt: Kanban view of the CRM pipeline and the option to schedule an activity.
|
||||
|
||||
.. note::
|
||||
If a record already has a scheduled activity, the |clock| is replaced by the icon that represents
|
||||
the existing scheduled activity. Click on the activity type's icon to schedule another activity.
|
||||
|
||||
.. _activities/list:
|
||||
|
||||
List view
|
||||
---------
|
||||
|
||||
Activities can also be created from a :icon:`oi-view-list` :guilabel:`(list)` view.
|
||||
|
||||
If the :guilabel:`Activities` column is hidden, reveal it using the :icon:`oi-settings-adjust`
|
||||
:guilabel:`(settings adjust)` icon in the far-right of the top row.
|
||||
|
||||
Then, click on the |clock| for the record the activity is being added to, and click :guilabel:`+
|
||||
Schedule an activity`. Proceed to :ref:`fill out the Schedule Activity form <activities/form>` that
|
||||
appears.
|
||||
|
||||
.. note::
|
||||
If a record already has a scheduled activity, the |clock| is replaced by the icon that represents
|
||||
the existing scheduled activity. Click on the activity type's icon to schedule another activity.
|
||||
|
||||
.. image:: activities/schedule-list-activity.png
|
||||
:align: center
|
||||
:alt: List view of the CRM pipeline and the option to schedule an activity.
|
||||
|
||||
.. _activities/activity:
|
||||
|
||||
Activity view
|
||||
-------------
|
||||
|
||||
Most applications in Odoo have an *Activity* view available. If available, a |clock| is visible in
|
||||
the top-right corner of the main menu bar, amongst the other view option icons.
|
||||
|
||||
To open the activity view, click the |clock|.
|
||||
|
||||
.. image:: activities/activities.png
|
||||
:align: center
|
||||
:alt: Top-right menu with the Activities icon called out.
|
||||
|
||||
In this view, all the available activities are listed in the columns, while the horizontal entries
|
||||
represent all the individual records.
|
||||
|
||||
Activities that appear green have a due date in the future, activities that appear orange are due
|
||||
today, while activities appearing red are overdue.
|
||||
|
||||
Color bars in each column represent records for specific activity types, and display a number
|
||||
indicating how many activities are scheduled for that type.
|
||||
|
||||
If multiple activity types are scheduled for a record, a number appears in the box, indicating the
|
||||
total number of scheduled activities.
|
||||
|
||||
.. note::
|
||||
Activity colors, and their relation to an activity's due date, are consistent throughout Odoo,
|
||||
regardless of the activity type, or the view.
|
||||
|
||||
To schedule an activity for a record, hover over the corresponding field. Click the :icon:`fa-plus`
|
||||
:guilabel:`(plus)` icon that appears, and then :ref:`fill out the Schedule Activity form
|
||||
<activities/form>`.
|
||||
|
||||
.. image:: activities/activity-view.png
|
||||
:align: center
|
||||
:alt: Activity view of the CRM pipeline and the option to schedule an activity.
|
||||
|
||||
.. _activities/form:
|
||||
|
||||
Schedule Activity form
|
||||
----------------------
|
||||
|
||||
Activities can be scheduled from many different places, such as from the :ref:`chatter
|
||||
<activities/chatter>` of a record, or from one of multiple views in an application, when available:
|
||||
the :ref:`Kanban view <activities/kanban>`, :ref:`list view <activities/list>`, or :ref:`activity
|
||||
view <activities/activity>`.
|
||||
|
||||
Enter the following information on the form:
|
||||
|
||||
- :guilabel:`Activity Type`: select the type of activity from the drop-down menu. The default
|
||||
options are: :guilabel:`Email`, :guilabel:`Call`, :guilabel:`Meeting`, or :guilabel:`To-Do`.
|
||||
Depending on what other applications are installed, additional options may be available.
|
||||
- :guilabel:`Summary`: enter a short title for the activity, such as `Discuss Proposal`.
|
||||
- :guilabel:`Due Date`: using the calendar popover, select the activity's deadline.
|
||||
- :guilabel:`Assigned to`: by default, the current user populates this field. To assign a different
|
||||
user to the activity, select them from the drop-down menu.
|
||||
- :guilabel:`Notes`: add any additional information for the activity in this field.
|
||||
|
||||
When the :guilabel:`Schedule Activity` pop-up window is completed, click one of the following
|
||||
buttons:
|
||||
|
||||
- :guilabel:`Open Calendar`: opens the user's calendar to add and schedule the activity.
|
||||
|
||||
Click on the desired date and time for the activity, and a :guilabel:`New Event` pop-up window
|
||||
appears. The summary from the *Schedule Activity* pop-up window populates the :guilabel:`Title`
|
||||
field.
|
||||
|
||||
Enter the information in the :guilabel:`New Event` pop-up window, then click :guilabel:`Save &
|
||||
Close` to schedule it. Once scheduled, the activity is added to the chatter under the
|
||||
:guilabel:`Planned Activities` section.
|
||||
|
||||
.. important::
|
||||
The :guilabel:`Open Calendar` button **only** appears if the :guilabel:`Activity Type` is set
|
||||
to either :guilabel:`Call` or :guilabel:`Meeting`.
|
||||
|
||||
- :guilabel:`Schedule`: schedules the activity, and adds the activity to the chatter under
|
||||
:guilabel:`Planned Activities`.
|
||||
- :guilabel:`Schedule & Mark as Done`: adds the details of the activity to the chatter under
|
||||
:guilabel:`Today`. The activity is not scheduled, and is automatically marked as done.
|
||||
- :guilabel:`Done & Schedule Next`: adds the details of the activity to the chatter under
|
||||
:guilabel:`Today`. The activity is not scheduled, is automatically marked as done, and a new
|
||||
:guilabel:`Schedule Activity` pop-up window appears.
|
||||
- :guilabel:`Cancel`: discards any changes made on the :guilabel:`Schedule Activity` pop-up window.
|
||||
|
||||
.. image:: activities/schedule-pop-up.png
|
||||
:align: center
|
||||
:alt: View of CRM leads and the option to schedule an activity.
|
||||
|
||||
.. _activities/all:
|
||||
|
||||
All scheduled activities
|
||||
========================
|
||||
|
||||
To view a consolidated list of activities, organized by application, click the |clock| in the header
|
||||
menu, located in the top-right corner.
|
||||
|
||||
If any activities are scheduled, the number of activities appear in a red bubble on the
|
||||
|clock|.
|
||||
|
||||
All activities for each application are further divided into subsections, indicating where in the
|
||||
application the activity is to be completed. Each sub-section lists the number of scheduled
|
||||
activities that are :guilabel:`Late`, due :guilabel:`Today`, and scheduled in the
|
||||
:guilabel:`Future`.
|
||||
|
||||
.. example::
|
||||
In the *Time Off* application, one activity is scheduled to be done in the *All Time Off*
|
||||
requests dashboard, and six activities are scheduled to be done in the *Allocations* dashboard.
|
||||
|
||||
These requests appear in two separate lists in the all activities drop-down menu: one labeled
|
||||
`Time Off` and one labeled `Time Off Allocation`.
|
||||
|
||||
.. image:: activities/activities-menu.png
|
||||
:align: center
|
||||
:alt: The list of activities that is accessed from the main menu bar. Two entries for the Time
|
||||
Off application are highlighted.
|
||||
|
||||
Request a document
|
||||
------------------
|
||||
|
||||
The option to :guilabel:`Request a Document` is available at the bottom of the list of :ref:`all
|
||||
scheduled activities <activities/all>`, the option to :guilabel:`Request a Document` appears. Click
|
||||
:guilabel:`Request a Document`, and a :guilabel:`Request a file` pop-up window appears.
|
||||
|
||||
Enter the following information on the form:
|
||||
|
||||
- :guilabel:`Document Name`: enter a name for the document being requested.
|
||||
- :guilabel:`Request To`: select the user the document is being requested from using the drop-down
|
||||
menu.
|
||||
- :guilabel:`Due Date In`: enter a numerical value indicating when the document is due. Next to
|
||||
this field, a :guilabel:`Days` field is visible. Click :guilabel:`Days`, the default option, to
|
||||
reveal a drop-down menu. Select the desired time-frame option from the list. The options are
|
||||
:guilabel:`Days`, :guilabel:`Weeks`, or :guilabel:`Months`.
|
||||
- :guilabel:`Workspace`: using the drop-down menu, select the specific :ref:`Workspace
|
||||
<documents/workspaces>` the document is being uploaded to.
|
||||
- :guilabel:`Tags`: select any desired tags from the drop-down menu. The available tags displayed
|
||||
are based on the tags configured for the selected :guilabel:`Workspace`.
|
||||
- :guilabel:`Message`: enter a message to clarify the document request in this field.
|
||||
|
||||
When all the fields are completed, click :guilabel:`Request` to send the document request.
|
||||
|
||||
.. image:: activities/request-doc.png
|
||||
:align: center
|
||||
:alt: The Request a file form, with all fields filled out to request a contract.
|
||||
|
||||
.. _activities/types:
|
||||
|
||||
Activity types
|
||||
==============
|
||||
|
||||
To view the currently configured types of activities in the database, navigate to
|
||||
:menuselection:`Settings app --> Discuss section --> Activities setting --> Activity Types`.
|
||||
|
||||
.. image:: activities/settings-activities-types.png
|
||||
:align: center
|
||||
:alt: Activity Types button in the Settings application under the Discuss section.
|
||||
|
||||
Doing so reveals the :guilabel:`Activity Types` page, where the existing activity types are found.
|
||||
|
||||
.. tip::
|
||||
Individual applications have a list of *Activity Types* dedicated to that application. For
|
||||
example, to view and edit the activities available for the *CRM* application, go to
|
||||
:menuselection:`CRM app --> Configuration --> Activity Types`.
|
||||
|
||||
Enter a title for the activity in the :guilabel:`Summary` field, located in the :guilabel:`Schedule
|
||||
Activity` pop-up window.
|
||||
.. image:: activities/activity-list.png
|
||||
:align: center
|
||||
:alt: The list of activity types already configured and available.
|
||||
|
||||
To assign the activity to a different user, select a name from the :guilabel:`Assigned to` drop-down
|
||||
menu. Otherwise, the user creating the activity is automatically assigned.
|
||||
Edit activity types
|
||||
-------------------
|
||||
|
||||
Lastly, feel free to add any additional information in the optional :guilabel:`Log a note...` field.
|
||||
To edit an existing :ref:`activity type <activities/types>`, click on the activity type, and the
|
||||
activity type form loads.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Due Date` field on the :guilabel:`Schedule Activity` pop-up window auto-populates
|
||||
based on the configuration settings for the selected :guilabel:`Activity Type`. However, this
|
||||
date can be changed by selecting a day on the calendar in the :guilabel:`Due Date` field.
|
||||
Make any desired changes to the activity type form. The form automatically saves, but it can be
|
||||
saved manually at any time by clicking the :guilabel:`Save Manually` option, represented by a
|
||||
:icon:`fa-cloud-upload` :guilabel:`(cloud upload)` icon, located in the top-left corner of the page.
|
||||
|
||||
Lastly, click one of the following buttons:
|
||||
Create new activity types
|
||||
-------------------------
|
||||
|
||||
- :guilabel:`Schedule`: adds the activity to the chatter under :guilabel:`Planned activities`.
|
||||
- :guilabel:`Mark as Done`: adds the details of the activity to the chatter under :guilabel:`Today`.
|
||||
The activity is not scheduled, it is automatically marked as completed.
|
||||
- :guilabel:`Done \& Schedule Next`: adds the task under :guilabel:`Today` marked as done, and
|
||||
opens a new activity window.
|
||||
- :guilabel:`Discard`: discards any changes made on the pop-up window.
|
||||
To create a new :ref:`activity type <activities/types>`, click :guilabel:`New` from the
|
||||
:guilabel:`Activity Types` page, and a blank activity type form loads.
|
||||
|
||||
.. image:: activities/schedule-pop-up.png
|
||||
:alt: View of CRM leads and the option to schedule an activity.
|
||||
Enter a :guilabel:`Name` for the activity type at the top of the form, then enter the following
|
||||
information on the form.
|
||||
|
||||
.. note::
|
||||
Depending on the activity type, the :guilabel:`Schedule` button may be replaced by a
|
||||
:guilabel:`Save` button, or an :guilabel:`Open Calendar` button.
|
||||
Activity Settings section
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Scheduled activities are added to the chatter for the record under :guilabel:`Planned activities`.
|
||||
- :guilabel:`Action`: using the drop-down menu, select an action associated with this new activity
|
||||
type. Some actions trigger specific behaviors after an activity is scheduled, such as:
|
||||
|
||||
.. image:: activities/chatter-activities.png
|
||||
:alt: View of CRM leads and the option to schedule an activity.
|
||||
- :guilabel:`Upload Document`: if selected, a link to upload a document is automatically added to
|
||||
the planned activity in the chatter.
|
||||
- :guilabel:`Call` or :guilabel:`Meeting`: if selected, users have the option to open their
|
||||
calendar to select a date and time for the activity.
|
||||
- :guilabel:`Request Signature`: if selected, a link to open a signature request pop-up window is
|
||||
automatically added to the planned activity in the chatter. This requires the Odoo *Sign*
|
||||
application to be installed.
|
||||
|
||||
Activities can also be scheduled from the kanban, list, or activities view of an application.
|
||||
.. note::
|
||||
Available activity types vary based on the installed applications in the database.
|
||||
|
||||
.. tabs::
|
||||
- :guilabel:`Folder`: select a specific :ref:`workspace <documents/workspaces>` folder to save a
|
||||
document to. This field **only** appears if :guilabel:`Upload Document` is selected for the
|
||||
:guilabel:`Action`.
|
||||
|
||||
.. tab:: Kanban view
|
||||
Using the drop-down menu, select the :guilabel:`Folder` the document is saved to.
|
||||
|
||||
Select a record on which to schedule an activity. Click on the :guilabel:`🕘 (clock)` icon,
|
||||
then :guilabel:`Schedule An Activity`, and proceed to fill out the pop-up form.
|
||||
- :guilabel:`Default User`: select a user from the drop-down menu to automatically assign this
|
||||
activity to the selected user when this activity type is scheduled. If this field is left blank,
|
||||
the activity is assigned to the user who creates the activity.
|
||||
- :guilabel:`Default Summary`: enter a note to include whenever this activity type is created.
|
||||
|
||||
.. image:: activities/schedule-kanban-activity.png
|
||||
:alt: Kanban view of the CRM pipeline and the option to schedule an activity.
|
||||
.. note::
|
||||
The information in the :guilabel:`Default User` and :guilabel:`Default Summary` fields are
|
||||
included when an activity is created. However, they can be altered before the activity is
|
||||
scheduled or saved.
|
||||
|
||||
.. tab:: List view
|
||||
- :guilabel:`Keep Done`: tick this checkbox to keep activities that have been marked as `Done`
|
||||
visible in the :ref:`activity view <activities/activity>`.
|
||||
- :guilabel:`Default Note`: enter any notes to appear with the activity.
|
||||
|
||||
Select a record on which to schedule an activity. Click on the :guilabel:`🕘 (clock)` icon,
|
||||
then :guilabel:`Schedule An Activity`. If the record already has an activity scheduled, the
|
||||
clock icon may be replaced by a :guilabel:`📞 (phone)` or an :guilabel:`✉️ (envelope)` icon.
|
||||
|
||||
.. image:: activities/schedule-list-activity.png
|
||||
:alt: List view of the CRM pipeline and the option to schedule an activity.
|
||||
|
||||
.. tab:: Activity view
|
||||
|
||||
To open the activity view for an application, select the :guilabel:`🕘 (clock)` icon from the
|
||||
menu bar anywhere in the database. Select any application from the drop-down menu, and click
|
||||
the :guilabel:`🕘 (clock)` icon for the desired app.
|
||||
|
||||
.. image:: activities/schedule-activity-view-menu.png
|
||||
:alt: Activity menu drop down with focus on where to open activity view for CRM.
|
||||
|
||||
Select a record on which to schedule an activity. Move across the row to find the desired
|
||||
activity type, then click the :guilabel:`+ (plus sign)`.
|
||||
|
||||
.. image:: activities/schedule-activity-view.png
|
||||
:alt: Activity view of the CRM pipeline and the option to schedule an activity.
|
||||
|
||||
.. note::
|
||||
Activity colors, and their relation to an activity's due date, is consistent throughout Odoo,
|
||||
regardless of the activity type, or the view.
|
||||
|
||||
- Activities that appear in **green** indicate a due date sometime in the future.
|
||||
- **Yellow** indicates that the activity's due date is today.
|
||||
- **Red** indicates that the activity is overdue and the due date has passed.
|
||||
|
||||
For example, if an activity is created for a phone call, and the due date passes, the activity
|
||||
appears with a red phone in list view, and a red clock on the kanban view.
|
||||
|
||||
View scheduled activities
|
||||
=========================
|
||||
|
||||
To view scheduled activities, open either the :menuselection:`Sales app` or :menuselection:`CRM app`
|
||||
and click the :guilabel:`🕘 (clock)` icon, located to the far-right side of the other view options.
|
||||
|
||||
Doing so opens the activities menu, showcasing all the scheduled activities for the user, by
|
||||
default. To show all activities for every user, remove the :guilabel:`My Pipeline` filter from the
|
||||
:guilabel:`Search...` bar.
|
||||
|
||||
To view a consolidated list of activities separated by the application where they were created, and
|
||||
by deadline, click the :guilabel:`🕘 (clock)` icon on the header menu to see the activities for that
|
||||
specific application in a drop-down menu.
|
||||
|
||||
The possibility to :guilabel:`Add new note` and :guilabel:`Request a Document` appear at the bottom
|
||||
of this drop-down menu, when the :guilabel:`🕘 (clock)` icon on the header menu is clicked.
|
||||
|
||||
.. image:: activities/activities-menu.png
|
||||
:alt: View of CRM leads page emphasizing the activities menu.
|
||||
|
||||
Configure activity types
|
||||
========================
|
||||
|
||||
To configure the types of activities in the database, go to :menuselection:`Settings app --> Discuss
|
||||
--> Activities --> Activity Types`.
|
||||
|
||||
.. image:: activities/settings-activities-types.png
|
||||
:alt: View of the settings page emphasizing the menu activity types.
|
||||
|
||||
Doing so reveals the :guilabel:`Activity Types` page, where the existing activity types are found.
|
||||
|
||||
To edit an existing activity type, select it from the list, then click :guilabel:`Edit`. To create a
|
||||
new activity type, click :guilabel:`Create`.
|
||||
|
||||
At the top of a blank activity type form, start by choosing a :guilabel:`Name` for the new activity
|
||||
type.
|
||||
|
||||
.. image:: activities/new-activity-type.png
|
||||
:alt: New activity type form.
|
||||
|
||||
Activity settings
|
||||
-----------------
|
||||
|
||||
Action
|
||||
~~~~~~
|
||||
|
||||
The *Action* field specifies the intent of the activity. Some actions trigger specific behaviors
|
||||
after an activity is scheduled.
|
||||
|
||||
- If :guilabel:`Upload Document` is selected, a link to upload a document is added directly to the
|
||||
planned activity in the chatter.
|
||||
- If either :guilabel:`Phonecall` or :guilabel:`Meeting` are selected, users have the option to open
|
||||
their calendar to schedule a time for this activity.
|
||||
- If :guilabel:`Request Signature` is selected, a link is added to the planned activity in the
|
||||
chatter that opens a signature request pop-up window.
|
||||
|
||||
.. note::
|
||||
The actions available to select on an activity type vary, depending on the applications currently
|
||||
installed in the database.
|
||||
|
||||
Default user
|
||||
~~~~~~~~~~~~
|
||||
|
||||
To automatically assign this activity to a specific user when this activity type is scheduled,
|
||||
choose a name from the :guilabel:`Default User` drop-down menu. If this field is left blank, the
|
||||
activity is assigned to the user who creates the activity.
|
||||
|
||||
Default summary
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
To include notes whenever this activity type is created, enter them into the :guilabel:`Default
|
||||
Summary` field.
|
||||
|
||||
.. note::
|
||||
The information in the :guilabel:`Default User` and :guilabel:`Default Summary` fields are
|
||||
included when an activity is created. However, they can be altered before the activity is
|
||||
scheduled or saved.
|
||||
|
||||
Next activity
|
||||
-------------
|
||||
|
||||
To automatically suggest, or trigger, a new activity after an activity has been marked complete, the
|
||||
:guilabel:`Chaining Type` must be set.
|
||||
|
||||
Suggest next activity
|
||||
Next Activity section
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In the :guilabel:`Chaining Type` field, select :guilabel:`Suggest Next Activity`. Upon doing so, the
|
||||
field underneath changes to: :guilabel:`Suggest`. Click the :guilabel:`Suggest` field drop-down menu
|
||||
to select any activities to recommend as follow-up tasks to this activity type.
|
||||
It is possible to have another activity either suggested or triggered. To do so, configure the
|
||||
:guilabel:`Next Activity` section.
|
||||
|
||||
In the :guilabel:`Schedule` field, choose a default deadline for these activities. To do so,
|
||||
configure a desired number of :guilabel:`Days`, :guilabel:`Weeks`, or :guilabel:`Months`. Then,
|
||||
decide if it should occur :guilabel:`after completion date` or :guilabel:`after previous activity
|
||||
deadline`.
|
||||
- :guilabel:`Chaining Type`: select either :guilabel:`Suggest Next Activity` or :guilabel:`Trigger
|
||||
Next Activity` from the drop-down menu. Depending on the selected option, either the
|
||||
:guilabel:`Suggest` or :guilabel:`Trigger` field is displayed.
|
||||
|
||||
This :guilabel:`Schedule` field information can be altered before the activity is scheduled.
|
||||
.. note::
|
||||
The :guilabel:`Chaining Type` field does **not** appear if :guilabel:`Upload Document` is
|
||||
selected for the :guilabel:`Action`.
|
||||
|
||||
When all configurations are complete, click :guilabel:`Save`.
|
||||
- :guilabel:`Suggest/Trigger`: depending on what is selected for the :guilabel:`Chaining Type`, this
|
||||
field either displays :guilabel:`Suggest` or :guilabel:`Trigger`. Using the drop-down menu, select
|
||||
the activity to recommend or schedule as a follow-up task to the activity type.
|
||||
- :guilabel:`Schedule`: configure when the next activity is suggested or triggered.
|
||||
|
||||
.. image:: activities/schedule-recommended-activity.png
|
||||
:alt: Schedule activity popup with emphasis on recommended activities.
|
||||
First, enter a numerical value indicating when the activity is suggested or triggered.
|
||||
|
||||
.. note::
|
||||
If an activity has the :guilabel:`Chaining Type` set to :guilabel:`Suggest Next Activity`, and
|
||||
has activities listed in the :guilabel:`Suggest` field, users are presented with recommendations
|
||||
for activities as next steps.
|
||||
Next to this field, a :guilabel:`Days` field is visible. Click :guilabel:`Days`, the default
|
||||
option, to reveal a drop-down menu. Select the desired time-frame option from the list. The
|
||||
options are :guilabel:`Days`, :guilabel:`Weeks`, or :guilabel:`Months`.
|
||||
|
||||
Trigger next activity
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
Lastly, using the drop-down menu, select whether the activity is scheduled or triggered either
|
||||
:guilabel:`after previous activity deadline` or :guilabel:`after completion date`.
|
||||
|
||||
Setting the :guilabel:`Chaining Type` to :guilabel:`Trigger Next Activity` immediately launches the
|
||||
next activity once the previous one is completed.
|
||||
|
||||
If :guilabel:`Trigger Next Activity` is selected in the :guilabel:`Chaining Type` field, the field
|
||||
beneath changes to: :guilabel:`Trigger`. From the :guilabel:`Trigger` field drop-down menu, select
|
||||
the activity that should be launched once this activity is completed.
|
||||
|
||||
In the :guilabel:`Schedule` field, choose a default deadline for these activities. To do so,
|
||||
configure a desired number of :guilabel:`Days`, :guilabel:`Weeks`, or :guilabel:`Months`. Then,
|
||||
decide if it should occur :guilabel:`after completion date` or :guilabel:`after previous activity
|
||||
deadline`.
|
||||
|
||||
This :guilabel:`Schedule` field information can be altered before the activity is scheduled.
|
||||
|
||||
When all configurations are complete, click :guilabel:`Save`.
|
||||
|
||||
.. image:: activities/triggered-activities.png
|
||||
:alt: Schedule new activity popup with emphasis on Done and launch next button.
|
||||
|
||||
.. note::
|
||||
When an activity has the :guilabel:`Chaining Type` set to :guilabel:`Trigger Next Activity`,
|
||||
marking the activity as `Done` immediately launches the next activity listed in the
|
||||
:guilabel:`Trigger` field.
|
||||
.. image:: activities/new-activity.png
|
||||
:align: center
|
||||
:alt: A new Activity form with all the fields filled out.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`/applications/productivity/discuss`
|
||||
- :doc:`/applications/productivity/discuss/team_communication`
|
||||
- :doc:`../productivity/discuss`
|
||||
- :doc:`../productivity/discuss/team_communication`
|
||||
- :doc:`../sales/crm/optimize/utilize_activities`
|
||||
|
||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,263 @@
|
||||
:show-content:
|
||||
|
||||
========
|
||||
Contacts
|
||||
========
|
||||
|
||||
The *Contacts* application comes installed on all Odoo databases. Contacts are created for customers
|
||||
the company does business with through Odoo. A contact is a repository of vital business
|
||||
information, facilitating communication and business transactions.
|
||||
|
||||
Contact form
|
||||
============
|
||||
|
||||
To create a new contact, navigate to the :menuselection:`Contacts app`, and click
|
||||
:guilabel:`Create`. A new form appears where various contact information can be added.
|
||||
|
||||
Contact type
|
||||
------------
|
||||
|
||||
Odoo allows for both :guilabel:`Individual` and :guilabel:`Company` contacts. Select either
|
||||
:guilabel:`Individual` or :guilabel:`Company`, depending on the type of contact that is being added.
|
||||
|
||||
Name
|
||||
----
|
||||
|
||||
First, fill in the name of the :guilabel:`Individual` or :guilabel:`Company`. This is how the name
|
||||
appears throughout the database. This field is **mandatory**.
|
||||
|
||||
.. tip::
|
||||
:guilabel:`Individual` contacts can have a :guilabel:`Company` contact linked to it. After
|
||||
selecting :guilabel:`Individual`, a new :guilabel:`Company Name...` field appears below the
|
||||
first name field.
|
||||
|
||||
Address
|
||||
-------
|
||||
|
||||
Next, enter the :guilabel:`Address` of the :guilabel:`Company` or :guilabel:`Individual`.
|
||||
|
||||
.. tip::
|
||||
If the :guilabel:`Individual` option is chosen, then the *type of address* can be chosen from a
|
||||
drop-down menu. Options for this drop-down menu include: :guilabel:`Contact`, :guilabel:`Invoice
|
||||
Address`, :guilabel:`Delivery Address`, :guilabel:`Other Address`, and :guilabel:`Private
|
||||
Address`.
|
||||
|
||||
Additional fields
|
||||
-----------------
|
||||
|
||||
Additional details are included on the initial form. The following fields are available:
|
||||
|
||||
- :guilabel:`VAT`: Value Added Tax number.
|
||||
- :guilabel:`Citizen Identification`: citizen or government identification number (only available
|
||||
on :guilabel:`Individual`).
|
||||
- :guilabel:`Job Position`: list the job position of the :guilabel:`Individual` (only available on
|
||||
:guilabel:`Individual`).
|
||||
- :guilabel:`Phone`: list phone number (with country code). Make a call, send an SMS, or WhatsApp
|
||||
message by hovering over the field on the saved form, and clicking the desired option.
|
||||
- :guilabel:`Mobile`: list mobile phone number (with country code). Make a call, send an SMS, or
|
||||
WhatsApp message by hovering over the field on the saved form, and clicking on the desired option.
|
||||
- :guilabel:`Email`: enter the email address with the domain.
|
||||
- :guilabel:`Website`: enter the full website address, starting with `http` or `https`.
|
||||
- :guilabel:`Title`: select :guilabel:`Doctor`, :guilabel:`Madam`, :guilabel:`Miss`,
|
||||
:guilabel:`Mister`, :guilabel:`Professor`, or create a new one directly from this field.
|
||||
- :guilabel:`Tags`: enter preconfigured tags by typing them in the field, or clicking the drop-down
|
||||
menu, and selecting one. To create a new one, type the new tag in the field, and click
|
||||
:guilabel:`Create` from the resulting drop-down menu.
|
||||
|
||||
Contacts & Addresses tab
|
||||
------------------------
|
||||
|
||||
At the bottom of the contact form are several tabs. On the :guilabel:`Contacts & Addresses` tab,
|
||||
contacts can be added that are associated with a :guilabel:`Company` and related addresses. For
|
||||
example, a specific contact person for the company can be listed here.
|
||||
|
||||
Multiple addresses can be added on both :guilabel:`Individual` and :guilabel:`Company` contacts. To
|
||||
do so, click :guilabel:`Add` in the :guilabel:`Contacts & Addresses` tab. Doing so reveals a
|
||||
:guilabel:`Create Contact` pop-up form, in which additional addresses can be configured.
|
||||
|
||||
.. image:: contacts/contact-form-add-address.png
|
||||
:align: center
|
||||
:alt: Add a contact/address to the contact form.
|
||||
|
||||
On the :guilabel:`Create Contact` pop-up form, start by clicking the default :guilabel:`Other
|
||||
Address` field at the top to reveal a drop-down menu of address-related options.
|
||||
|
||||
Select any of the following options:
|
||||
|
||||
- :guilabel:`Contact`: adds another contact to the existing contact form.
|
||||
- :guilabel:`Invoice Address`: adds a specific invoice address to the existing contact form.
|
||||
- :guilabel:`Delivery Address`: adds a specific delivery address to the existing contact form.
|
||||
- :guilabel:`Other Address`: adds an alternate address to the existing contact form.
|
||||
- :guilabel:`Private Address`: adds a private address to the existing contact form.
|
||||
|
||||
.. image:: contacts/create-contact-window.png
|
||||
:align: center
|
||||
:alt: Create a new contact/address on a contact form.
|
||||
|
||||
Once an option is selected, enter the corresponding contact information that should be used for the
|
||||
specified address type.
|
||||
|
||||
Add the :guilabel:`Contact Name`, :guilabel:`Address`, :guilabel:`Email`, along with the
|
||||
:guilabel:`Phone` and/or :guilabel:`Mobile` numbers below.
|
||||
|
||||
Set the :guilabel:`Job Position`, which appears if the :guilabel:`Contact` address type has been
|
||||
selected. This is similar to the :guilabel:`Individual` contact.
|
||||
|
||||
To add a note, click on the text field next to :guilabel:`Notes`, and write anything that is
|
||||
applicable to the customer or contact.
|
||||
|
||||
Then, click :guilabel:`Save & Close` to save the address, and close the :guilabel:`Create Contact`
|
||||
window. Or, click :guilabel:`Save & New` to save the address, and immediately input another one.
|
||||
|
||||
Sales & Purchase tab
|
||||
--------------------
|
||||
|
||||
Next, is the :guilabel:`Sales & Purchases` tab, which only appears when the *Sales*, *Purchase*,
|
||||
**or** *Point of Sale* applications are installed.
|
||||
|
||||
The :guilabel:`Fiscal Position` can be set on the :guilabel:`Sales & Purchases` tab. Select a
|
||||
:guilabel:`Fiscal Position` from the drop-down menu.
|
||||
|
||||
Sales section
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
Under the :guilabel:`Sales` heading, a specific :guilabel:`Salesperson` can be assigned to a
|
||||
contact. To do that, click the :guilabel:`Salesperson` drop-down field, and select one. Create a new
|
||||
:guilabel:`Salesperson` by typing the user's name, and making the appropriate selection.
|
||||
|
||||
Certain :guilabel:`Payment Terms`, or a certain :guilabel:`Pricelist`, can also be set, if needed.
|
||||
Click the drop-down menu next to :guilabel:`Payment Terms`, and change it to one of the preselected
|
||||
:guilabel:`Payment Terms`, or :guilabel:`Create` a new one. Select the :guilabel:`Pricelist`
|
||||
drop-down menu to choose the appropriate :guilabel:`Pricelist`.
|
||||
|
||||
Click into the :guilabel:`Delivery Method` field to select an option from the drop-down menu.
|
||||
|
||||
Point Of Sale section
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Under the :guilabel:`Point Of Sale` heading, enter a :guilabel:`Barcode` that can be used to
|
||||
identify the contact. Use the :guilabel:`Loyalty Points` field to track points the user won as part
|
||||
of a *Loyalty Program*.
|
||||
|
||||
Purchase section
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
Specify :guilabel:`Payment Terms`, :guilabel:`1099 Box` information, and a preferred
|
||||
:guilabel:`Payment Method` here. A :guilabel:`Receipt Reminder` can be set here, as well.
|
||||
|
||||
Misc section
|
||||
~~~~~~~~~~~~
|
||||
|
||||
Under the :guilabel:`Misc.` heading, use :guilabel:`Reference` field to add any additional
|
||||
information for this contact. If this contact should only be accessible for one company in a
|
||||
multi-company database, select it from the :guilabel:`Company` field drop-down list. Use the
|
||||
:guilabel:`Website` drop-down menu to restrict the publishing of this contact to one website (if
|
||||
working on a database with multiple websites). Select one or more :guilabel:`Website Tags` to assist
|
||||
in filtering published customers on the `/customers` website page. Select an :guilabel:`Industry`
|
||||
for this contact from the drop-down menu. Use the :guilabel:`SLA Policies` field to assign a
|
||||
*Helpdesk* SLA policy to this contact.
|
||||
|
||||
Accounting tab
|
||||
--------------
|
||||
|
||||
The :guilabel:`Accounting` tab appears when the *Accounting* application is installed. Here, a user
|
||||
can add any related :guilabel:`Bank Accounts`, or set default :guilabel:`Accounting entries`.
|
||||
|
||||
Under the :guilabel:`Miscellaneous` heading, use the :guilabel:`LEI` field to enter a Legal Entity
|
||||
Identifier, if necessary.
|
||||
|
||||
Internal Notes tab
|
||||
------------------
|
||||
|
||||
Following the :guilabel:`Accounting` tab is the :guilabel:`Internal Notes` tab, where notes can be
|
||||
left on this contact form, just like on the contact form noted above.
|
||||
|
||||
Partner Assignment tab
|
||||
----------------------
|
||||
|
||||
Next is the :guilabel:`Partner Assignment` tab, which by default, includes a :guilabel:`Geolocation`
|
||||
section, and other partner options, including :guilabel:`Partner Activation` and :guilabel:`Partner
|
||||
Review` configurations. These are **only** present when the *Resellers* module is installed.
|
||||
|
||||
.. seealso::
|
||||
Follow the :doc:`Resellers documentation <../sales/crm/track_leads/resellers>` for more
|
||||
information on publishing partners on the website.
|
||||
|
||||
Membership tab
|
||||
--------------
|
||||
|
||||
Finally, there is the :guilabel:`Membership` tab on contact forms, which can help users manage any
|
||||
memberships that are being offered to this specific contact. It should be noted that this tab
|
||||
**only** appears when the *Members* application is installed.
|
||||
|
||||
Activate membership
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To activate a contact's membership, click :guilabel:`Buy Membership` in the :guilabel:`Membership`
|
||||
tab of a contact form. On the pop-up window that appears, select a :guilabel:`Membership` from the
|
||||
drop-down menu. Then, configure a :guilabel:`Member Price`. Click :guilabel:`Invoice Membership`
|
||||
when both fields are filled in.
|
||||
|
||||
Alternatively, to offer a free membership, tick the :guilabel:`Free Member` checkbox, in the
|
||||
:guilabel:`Membership` tab of a contact form.
|
||||
|
||||
.. seealso::
|
||||
Follow the :doc:`Members documentation <../sales/members>` for more information on publishing
|
||||
members on the website.
|
||||
|
||||
Smart buttons
|
||||
=============
|
||||
|
||||
At the top of the contact form, there are some additional options available, known as *smart
|
||||
buttons*.
|
||||
|
||||
Here, Odoo displays a variety of records, related to this contact, that were created on other apps.
|
||||
Odoo integrates information from every single app, so there are many smart buttons.
|
||||
|
||||
.. example::
|
||||
For example, there is an :guilabel:`Opportunities` smart button, where all the opportunities
|
||||
related to this customer from the *CRM* app are accessible.
|
||||
|
||||
.. tip::
|
||||
If the corresponding applications are installed, their related smart buttons appear
|
||||
automatically on a contact form.
|
||||
|
||||
A user can see any :guilabel:`Meetings`, :guilabel:`Sales`, :guilabel:`POS Orders`,
|
||||
:guilabel:`Subscriptions`, project :guilabel:`Tasks`, and the :guilabel:`More` smart button reveals
|
||||
additional options, via a drop-down menu. A user can even quickly access :guilabel:`Purchases`,
|
||||
:guilabel:`Helpdesk` tasks, :guilabel:`On-time Rate` for deliveries, :guilabel:`Invoiced`
|
||||
information, :guilabel:`Vendor Bills`, and the :guilabel:`Partner Ledger` connected to this contact.
|
||||
|
||||
Deliveries, documents, loyalty cards, and direct debits are *also* linked to smart buttons, like
|
||||
this, should there be any outstanding/on-file for this contact.
|
||||
|
||||
If the contact is a partner, the user can visit their partner page on the Odoo-built website by
|
||||
clicking the :guilabel:`Go to Website` smart button.
|
||||
|
||||
Archive contacts
|
||||
----------------
|
||||
|
||||
If a user decides they no longer want to have this contact active, the record can be archived. To do
|
||||
that, go to the :icon:`fa-cog` :guilabel:`Action` menu at the top of the contact form, and click
|
||||
:guilabel:`Archive`.
|
||||
|
||||
Then, click :guilabel:`OK` from the resulting :guilabel:`Confirmation` pop-up window.
|
||||
|
||||
With this contact successfully archived, as indicated by a banner at the top, they do not show up
|
||||
in the main contacts page, but they can still be searched for with the :guilabel:`Archived` filter.
|
||||
|
||||
.. tip::
|
||||
A contact can be *unarchived*, if the user decides to work with them again. To do that, just
|
||||
click the :icon:`fa-cog` :guilabel:`Action` menu again at the top of the archived contact form,
|
||||
and click :guilabel:`Unarchive`. Upon doing so, the :guilabel:`Archived` banner is removed, and
|
||||
the contact is restored.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`Add different addresses in CRM <../sales/sales/send_quotations/different_addresses>`
|
||||
- `Odoo's eLearning Contacts tutorial
|
||||
<https://www.odoo.com/slides/slide/contacts-2527?fullscreen=1>`_
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
contacts/merge
|
||||
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,78 @@
|
||||
==============
|
||||
Merge contacts
|
||||
==============
|
||||
|
||||
Odoo's *Contacts* application allows user's to merge duplicate contacts, without losing any
|
||||
information in the process. This keeps the database organized, and prevents contacts from being
|
||||
contacted by more than one salesperson.
|
||||
|
||||
.. _contacts/merge-duplicate:
|
||||
|
||||
Merge duplicate contacts
|
||||
========================
|
||||
|
||||
.. danger::
|
||||
Merging is an irreversible action. Do **not** merge contacts unless absolutely certain they
|
||||
should be combined.
|
||||
|
||||
Navigate to the :menuselection:`Contacts app`, and select the :icon:`oi-view-list`
|
||||
:guilabel:`(list)` icon. Select two or more duplicate contacts from the list, and tick the checkbox
|
||||
(on the far-left) for the contacts that should be merged. Then, click the :icon:`fa-cog`
|
||||
:guilabel:`Actions` icon, and select :guilabel:`Merge` from the resulting drop-down menu.
|
||||
|
||||
.. image:: merge/merge-menu.png
|
||||
:align: center
|
||||
:alt: The merge contacts option in the Contacts application.
|
||||
|
||||
This opens the :guilabel:`Merge` pop-up window. From here, review the details of the contacts before
|
||||
confirming they should be merged. If any contacts in the list should **not** be merged, click the
|
||||
:icon:`fa-times` :guilabel:`(delete)` icon at the far right of the contact.
|
||||
|
||||
.. tip::
|
||||
Click the individual contact to open the record for that contact, and view additional
|
||||
information.
|
||||
|
||||
.. image:: merge/merge-window.png
|
||||
:align: center
|
||||
:alt: The merge pop-up window in the Contacts application.
|
||||
|
||||
Click the :guilabel:`Destination Contact` field, and select an option from the drop-down list. This
|
||||
field defaults to the contact record that was created first in the system.
|
||||
|
||||
After confirming the information on the pop-up window, click :guilabel:`Merge Contacts`.
|
||||
|
||||
Deduplicate contacts
|
||||
====================
|
||||
|
||||
After the merge is finished, a pop-up window appears confirming it is complete. This pop-up window
|
||||
also contains a :guilabel:`Deduplicate the other Contacts` button. This feature searches for
|
||||
duplicated records, based on selected criteria, and merges them automatically, or after manual
|
||||
approval.
|
||||
|
||||
Click the :guilabel:`Deduplicate the other Contacts` button to open the :guilabel:`Deduplicate
|
||||
Contacts` pop-up window.
|
||||
|
||||
Select one or more fields to be used in the search for duplicated records. Duplicated contacts can
|
||||
be searched, based on the following criteria:
|
||||
|
||||
- :guilabel:`Email`
|
||||
- :guilabel:`Name`
|
||||
- :guilabel:`Is Company`
|
||||
- :guilabel:`VAT`
|
||||
- :guilabel:`Parent Company`
|
||||
|
||||
.. note::
|
||||
If more than one field is selected, only records that have **all** fields in common are suggested
|
||||
as duplicates.
|
||||
|
||||
If necessary, select criteria to be used to exclude potential duplicates from the search. Potential
|
||||
duplicates can be excluded from the search, based on the following criteria:
|
||||
|
||||
- :guilabel:`A user associated to the contact`
|
||||
- :guilabel:`Journal Items associated to the contact`
|
||||
|
||||
After confirming the search criteria, click either :guilabel:`Merge with Manual Check`,
|
||||
:guilabel:`Merge Automatically`, or :guilabel:`Merge Automatically all process`.
|
||||
|
||||
If :guilabel:`Merge with Manual Check` is selected, complete the merge by following the :ref:`steps
|
||||
above <contacts/merge-duplicate>`.
|
||||
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 20 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 |
@@ -76,6 +76,8 @@ expense either when the transaction occurs (accrual basis) or when the payment i
|
||||
.. seealso::
|
||||
:doc:`Cash basis <accounting/taxes/cash_basis>`
|
||||
|
||||
.. _accounting/multi-company:
|
||||
|
||||
Multi-company
|
||||
=============
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -112,8 +112,8 @@ If not done yet, :ref:`install <general/install>` the :guilabel:`Peppol` module
|
||||
- Peppol registration is **free** and available in Odoo Community
|
||||
- You can send **Customer Invoices** and **Credit Notes** and receive **Vendor Bills** and
|
||||
**Refunds** via Peppol.
|
||||
- You can send in one of the following supported document formats: **BIS Billing 3.0, XRechnung
|
||||
CIUS, NLCIUS**.
|
||||
- You can send and receive in one of the following supported document formats:
|
||||
**BIS Billing 3.0, XRechnung CIUS, NLCIUS**.
|
||||
- | The following **countries** are eligible for **Peppol registration in Odoo**:
|
||||
| Andorra, Albania, Austria, Bosnia and Herzegovina, Belgium, Bulgaria, Switzerland, Cyprus,
|
||||
Czech Republic, Germany, Denmark, Estonia, Spain, Finland, France, United Kingdom, Greece,
|
||||
@@ -126,79 +126,102 @@ Registration
|
||||
|
||||
Go to :menuselection:`Accounting --> Configuration --> Settings`. If you do not have the
|
||||
Peppol module installed, first tick the :guilabel:`Enable PEPPOL` checkbox and then **manually
|
||||
save**.
|
||||
save**. Click :guilabel:`Start sending via Peppol` to open the registration form.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-install.png
|
||||
:alt: Peppol module installation
|
||||
.. note::
|
||||
This registration form also pops up if you choose to :guilabel:`Send & Print` an
|
||||
invoice via Peppol without completing the registration process.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-registration-settings.png
|
||||
:alt: Peppol registration button
|
||||
|
||||
You can register either as a sender or a receiver. A sender can only send invoices and credit notes
|
||||
on Odoo via Peppol, without ever registering as a Peppol participant on Odoo SMP. If you have an
|
||||
existing Peppol registration elsewhere that you want to keep, but want to send invoices from your
|
||||
Odoo database and receive other documents in another software, register as a **sender**.
|
||||
|
||||
.. tip::
|
||||
- You can always register as a sender first and register to receive documents later.
|
||||
- When registering, you can specify if you would also like to receive documents.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-registration-wizard.png
|
||||
:alt: Peppol registration form
|
||||
|
||||
Fill in the following information:
|
||||
|
||||
- :guilabel:`Peppol EAS`. This is the Peppol Electronic Address Scheme and usually depends on your
|
||||
- Check the receiver box if you want to register on Odoo SMP. If you are migrating from another
|
||||
service provider, insert the :guilabel:`Migration key` from the previous provider (the field
|
||||
becomes visible after you tick the checkbox).
|
||||
- :guilabel:`E-Address Scheme`: the Peppol Electronic Address Scheme usually depends on your
|
||||
company's country. Odoo often prefills this with the most commonly used EAS code in your country.
|
||||
For example, the preferred EAS code for most companies in Belgium is 0208.
|
||||
- :guilabel:`Peppol Endpoint`. This is usually a Company Registry number or a VAT number.
|
||||
- :guilabel:`Phone Number`, including the country code (e.g., `+32` in Belgium)
|
||||
- :guilabel:`Primary contact email`
|
||||
For example, the preferred EAS code for most companies in Belgium is `0208`.
|
||||
- :guilabel:`Endpoint`: this is usually a Company Registry number or a VAT number.
|
||||
- :guilabel:`Phone`: phone number including the country code (e.g., `+32` in Belgium).
|
||||
- :guilabel:`Email`: this is the email Odoo can use to contact you regarding your Peppol
|
||||
registration.
|
||||
|
||||
If you want to explore or demo Peppol, you can choose to register in :guilabel:`Demo` mode.
|
||||
Otherwise, select :guilabel:`Live`.
|
||||
|
||||
.. tip::
|
||||
- Selecting :guilabel:`Demo` simulates everything in Odoo. There is no sending, receiving, or
|
||||
partner verification.
|
||||
- For **advanced users only**, it is possible to run tests on Peppol's test network. The server
|
||||
allows to register on Peppol and send/receive test invoices to/from other participants.
|
||||
To do so, enable the :ref:`developer-mode`, open the **Settings** app, go to
|
||||
:menuselection:`Technical --> System Parameters`, and search for `account_peppol.edi.mode`.
|
||||
Click the parameter and change the :guilabel:`Value` to `test`. Go back to the Peppol setup
|
||||
menu in the **Settings** app. The option :guilabel:`Test` is now available.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-system-parameter.png
|
||||
:alt: Peppol test mode parameter
|
||||
|
||||
.. seealso::
|
||||
- `Peppol EAS - European Commision <https://ec.europa.eu/digital-building-blocks/wikis/display/DIGITAL/Code+lists/>`_
|
||||
- `Peppol Endpoint - OpenPeppol eDEC Code Lists <https://docs.peppol.eu/edelivery/codelists/>`_
|
||||
(open the "Participant Identifier Schemes" as HTML page)
|
||||
|
||||
If you are migrating from another access point, insert the :guilabel:`Migration key` from the
|
||||
previous provider.
|
||||
When set up, request a verification code to be sent to you by clicking :guilabel:`Send a
|
||||
registration code by SMS`. A text message containing a code is sent to the phone number provided to
|
||||
finalize the verification process.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-settings.png
|
||||
:alt: Configuration for peppol
|
||||
|
||||
Finally, click :guilabel:`Validate registration`. If you want to explore or demo Peppol, you can
|
||||
choose to register in :guilabel:`Demo` mode. Otherwise, select :guilabel:`Live`.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-demo-mode.png
|
||||
:alt: Peppol demo mode selection
|
||||
|
||||
.. note::
|
||||
When testing Peppol, the system parameter `account_peppol.edi.mode` can be changed to `test`.
|
||||
Then, a radio button appears with the option to register on the test server.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-system-parameter.png
|
||||
:alt: Peppol test mode parameter
|
||||
|
||||
.. image:: electronic_invoicing/peppol-test-mode-settings.png
|
||||
:alt: Peppol test mode selection
|
||||
|
||||
Now, you can request a verification code to be sent to you by clicking :guilabel:`Verify phone
|
||||
number`.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-registration-verify.png
|
||||
:alt: phone validation request verification
|
||||
|
||||
A text message containing a code is sent to the phone number provided to finalize the verification
|
||||
process.
|
||||
|
||||
.. image:: electronic_invoicing/phone-registration.png
|
||||
.. image:: electronic_invoicing/peppol-phone-verification.png
|
||||
:alt: phone validation
|
||||
|
||||
Once you enter the code and click :guilabel:`Confirm`, you can see that your registration is pending
|
||||
activation. From this point onwards, the default journal for receiving Vendor Bills can be set.
|
||||
Once you enter the code and click :guilabel:`Register`, your Peppol participant status is updated.
|
||||
If you chose to only send documents, then the status changes to :guilabel:`Can send but
|
||||
not receive`.
|
||||
If you opted to receive documents as well, the status changes to :guilabel:`Can send, pending
|
||||
registration to receive`. In that case, it should be automatically activated within a day.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-registration-pending.png
|
||||
:alt: pending application
|
||||
|
||||
It should be automatically activated within a day.
|
||||
Then, set the default journal for receiving vendor bills in the :guilabel:`Incoming Invoices
|
||||
Journal`.
|
||||
|
||||
.. tip::
|
||||
It is also possible to manually trigger the cron that checks the registration status by going to
|
||||
:menuselection:`Settings --> Technical --> Scheduled Actions --> PEPPOL\: update participant
|
||||
status`.
|
||||
To manually trigger the cron that checks the registration status, enable the
|
||||
:ref:`developer-mode`, then go to :menuselection:`Settings --> Technical --> Scheduled Actions`,
|
||||
and search for the :guilabel:`PEPPOL: update participant status` action.
|
||||
|
||||
Your application status should be updated soon after you are registered on the Peppol network.
|
||||
Your receiver application status should be updated soon after you are registered on the Peppol
|
||||
network.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-registration-active.png
|
||||
:alt: active application
|
||||
.. image:: electronic_invoicing/peppol-receiver.png
|
||||
:alt: receiver application
|
||||
|
||||
All invoices and vendor bills can now be sent directly using the Peppol network.
|
||||
|
||||
.. important::
|
||||
To update the email that Odoo can use to contact you, modify the email and click
|
||||
:guilabel:`Update contact details`.
|
||||
|
||||
Configure Peppol services
|
||||
-------------------------
|
||||
|
||||
Once you are registered on Odoo SMP, the :guilabel:`Configure Peppol Services` button
|
||||
becomes visible to allow you to enable or disable document formats that other participants
|
||||
can send you via Peppol. By default, all document formats supported by Odoo are enabled (depending
|
||||
on the installed modules).
|
||||
|
||||
Contact verification
|
||||
--------------------
|
||||
|
||||
@@ -222,6 +245,13 @@ It is possible to verify the Peppol participant status of several customers at o
|
||||
To do so, go to :menuselection:`Accounting --> Customers --> Customers` and switch to the list view.
|
||||
Select the customers you want to verify and then click :menuselection:`Actions --> Verify Peppol`.
|
||||
|
||||
If the participant is registered on the Peppol network but cannot receive the format you selected
|
||||
for them, the :guilabel:`Peppol endpoint validity` label changes to :guilabel:`Cannot
|
||||
receive this format`.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-participant-format.png
|
||||
:alt: verify contact ubl format
|
||||
|
||||
Send invoices
|
||||
-------------
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 9.1 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 6.9 KiB |
@@ -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>`_
|
||||
|
||||
@@ -24,13 +24,15 @@ to reflect the change in inventory valuation. However, Odoo does **not** automat
|
||||
valuation <inventory/avg_price/leaving_inventory>`.
|
||||
|
||||
.. note::
|
||||
This document addresses a specific use case for theoretical purposes. Navigate :ref:`here
|
||||
<inventory/management/inventory_valuation_config>` for instructions on how to set up and use
|
||||
|AVCO| in Odoo.
|
||||
This document addresses a specific use case for theoretical purposes. For instructions on how to
|
||||
set up and use |AVCO|, refer to the :doc:`inventory valuation configuration
|
||||
<../../../inventory_and_mrp/inventory/warehouses_storage/inventory_valuation/inventory_valuation_config>`
|
||||
doc.
|
||||
|
||||
.. seealso::
|
||||
- :ref:`Using inventory valuation <inventory/reporting/using_inventory_val>`
|
||||
- :ref:`Other inventory valuation methods <inventory/inventory_valuation_config/costing_methods>`
|
||||
- :doc:`Using inventory valuation
|
||||
<../../../inventory_and_mrp/inventory/warehouses_storage/inventory_valuation/using_inventory_valuation>`
|
||||
- :ref:`Other inventory valuation methods <inventory/warehouses_storage/costing_methods>`
|
||||
|
||||
Configuration
|
||||
=============
|
||||
@@ -41,7 +43,8 @@ product category page, set :guilabel:`Costing Method` to `Average Cost (AVCO)` a
|
||||
:guilabel:`Inventory Valuation` to `Automated`.
|
||||
|
||||
.. seealso::
|
||||
:ref:`Inventory valuation configuration <inventory/management/inventory_valuation_config>`
|
||||
:doc:`Inventory valuation configuration
|
||||
<../../../inventory_and_mrp/inventory/warehouses_storage/inventory_valuation/inventory_valuation_config>`
|
||||
|
||||
Using average cost valuation
|
||||
============================
|
||||
@@ -260,7 +263,7 @@ value** increases based on the vendor price of the products that have entered th
|
||||
account (called **stock input**) is credited and only reconciled once the vendor bill is received.
|
||||
|
||||
.. seealso::
|
||||
- :ref:`Anglo-Saxon vs. Continental <inventory/inventory_valuation_config/accounting>`
|
||||
- :ref:`Anglo-Saxon vs. Continental <inventory/warehouses_storage/accounting-types>`
|
||||
|
||||
The table below reflects journal entries and accounts. The *stock input* account stores the money
|
||||
intended to pay vendors when the vendor bill has not yet been received. To balance accounts when
|
||||
|
||||
@@ -15,6 +15,8 @@ When browsing your chart of accounts, you can sort the accounts by :guilabel:`Co
|
||||
.. image:: chart_of_accounts/chart-of-accounts-sort.png
|
||||
:alt: Group the accounts by type in Odoo Accounting
|
||||
|
||||
.. _chart-of-account/create:
|
||||
|
||||
Configuration of an account
|
||||
===========================
|
||||
|
||||
|
||||
@@ -20,6 +20,8 @@ for use at a later date:
|
||||
- `Odoo Tutorials: Bank Configuration
|
||||
<https://www.odoo.com/slides/slide/bank-configuration-1880>`_
|
||||
|
||||
.. _payments/register:
|
||||
|
||||
Registering payment from an invoice or bill
|
||||
===========================================
|
||||
|
||||
|
||||
@@ -40,6 +40,8 @@ of your organisation as at a particular date.
|
||||
|
||||
.. image:: reporting/main_reports09.png
|
||||
|
||||
.. _accounting/reporting/balance-sheet:
|
||||
|
||||
Profit and Loss
|
||||
---------------
|
||||
|
||||
@@ -49,6 +51,8 @@ report period.
|
||||
|
||||
.. image:: reporting/main_reports10.png
|
||||
|
||||
.. _accounting/reporting/executive-summary:
|
||||
|
||||
Executive Summary
|
||||
-----------------
|
||||
|
||||
@@ -126,6 +130,8 @@ payment during a selected month and several months prior.
|
||||
|
||||
.. image:: reporting/main_reports07.png
|
||||
|
||||
.. _accounting/reporting/cash-flow-statement:
|
||||
|
||||
Cash Flow Statement
|
||||
-------------------
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -101,8 +101,9 @@ correctly reporting a balance of zero. If that is the case, set an :guilabel:`Al
|
||||
to the last day of the fiscal year by going to :menuselection:`Accounting --> Accounting --> Lock
|
||||
Dates`.
|
||||
|
||||
.. warning::
|
||||
Setting an :guilabel:`All Users Lock Date` is **irreversible** and cannot be removed.
|
||||
.. tip::
|
||||
Install the :guilabel:`Irreversible Lock Date` (`account_lock`) module to make the :guilabel:`All
|
||||
Users Lock Date` *irreversible* once set.
|
||||
|
||||
.. note::
|
||||
A specific year-end closing entry is **optional** in order to close out the **profit and loss
|
||||
|
||||