Compare commits

..

1 Commits

Author SHA1 Message Date
Sébastien Theys 5b44b70c30 [IMP] tests: make post_install the default 2024-01-30 14:29:26 +01:00
9602 changed files with 373513 additions and 6493568 deletions
-1
View File
@@ -8,4 +8,3 @@ _build/
# Dependencies
odoo
venv/
+12 -42
View File
@@ -1,7 +1,7 @@
[main]
host = https://www.transifex.com
[o:odoo:p:odoo-18-doc:r:administration]
[o:odoo:p:odoo-17-doc:r:administration]
file_filter = locale/<lang>/LC_MESSAGES/administration.po
source_file = locale/sources/administration.pot
type = POT
@@ -11,7 +11,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-18-doc:r:applications]
[o:odoo:p:odoo-17-doc:r:applications]
file_filter = locale/<lang>/LC_MESSAGES/applications.po
source_file = locale/sources/applications.pot
type = POT
@@ -21,17 +21,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-18-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-18-doc:r:finance]
[o:odoo:p:odoo-17-doc:r:finance]
file_filter = locale/<lang>/LC_MESSAGES/finance.po
source_file = locale/sources/finance.pot
type = POT
@@ -41,7 +31,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-18-doc:r:general]
[o:odoo:p:odoo-17-doc:r:general]
file_filter = locale/<lang>/LC_MESSAGES/general.po
source_file = locale/sources/general.pot
type = POT
@@ -51,17 +41,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-18-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-18-doc:r:index]
[o:odoo:p:odoo-17-doc:r:index]
file_filter = locale/<lang>/LC_MESSAGES/index.po
source_file = locale/sources/index.pot
type = POT
@@ -71,7 +51,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-18-doc:r:inventory_and_mrp]
[o:odoo:p:odoo-17-doc:r:inventory_and_mrp]
file_filter = locale/<lang>/LC_MESSAGES/inventory_and_mrp.po
source_file = locale/sources/inventory_and_mrp.pot
type = POT
@@ -81,7 +61,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-18-doc:r:marketing]
[o:odoo:p:odoo-17-doc:r:marketing]
file_filter = locale/<lang>/LC_MESSAGES/marketing.po
source_file = locale/sources/marketing.pot
type = POT
@@ -91,7 +71,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-18-doc:r:productivity]
[o:odoo:p:odoo-17-doc:r:productivity]
file_filter = locale/<lang>/LC_MESSAGES/productivity.po
source_file = locale/sources/productivity.pot
type = POT
@@ -101,7 +81,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-18-doc:r:sales]
[o:odoo:p:odoo-17-doc:r:sales]
file_filter = locale/<lang>/LC_MESSAGES/sales.po
source_file = locale/sources/sales.pot
type = POT
@@ -111,7 +91,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-18-doc:r:services]
[o:odoo:p:odoo-17-doc:r:services]
file_filter = locale/<lang>/LC_MESSAGES/services.po
source_file = locale/sources/services.pot
type = POT
@@ -121,7 +101,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-18-doc:r:user_settings]
[o:odoo:p:odoo-17-doc:r:user_settings]
file_filter = locale/<lang>/LC_MESSAGES/settings.po
source_file = locale/sources/settings.pot
type = POT
@@ -131,17 +111,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-18-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-18-doc:r:websites]
[o:odoo:p:odoo-17-doc:r:websites]
file_filter = locale/<lang>/LC_MESSAGES/websites.po
source_file = locale/sources/websites.pot
type = POT
+4 -33
View File
@@ -14,32 +14,19 @@ ifndef CURRENT_LANG
endif
SPHINX_BUILD = sphinx-build
SPHINX_AUTO_BUILD = sphinx-autobuild
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) \
-j $(WORKERS)
SOURCE_DIR = content
THEME = extensions/odoo_theme
THEME_STATIC = extensions/odoo_theme/static
LOCALE = locale
STATIC = static
REDIRECTS = redirects
SERVER_IP := $(shell ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
# Get all listening ports
LISTENING_PORTS := $(shell ss -tuln | awk 'NR>1 {print $$4}' | awk -F: '{print $$NF}' | sort -n | uniq)
LOGFILE := $(BUILD_DIR)/live_server.log
# Default port
OPEN_PORTS := $(shell ss -tuln | awk 'NR>1 {print $$4}' | awk -F: '{print $$NF}' | sort -n | uniq)
SELECTED_PORT := $(shell echo "$(OPEN_PORTS)" | awk 'NR==1')
HTML_BUILD_DIR = $(BUILD_DIR)/html
ifdef VERSIONS
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/18.0
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/master
endif
ifneq ($(CURRENT_LANG),en)
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/$(CURRENT_LANG)
@@ -64,24 +51,8 @@ clean:
html: $(HTML_BUILD_DIR)/_static/style.css
@echo "Starting build..."
$(SPHINX_BUILD) -q -c $(CONFIG_DIR) -b html $(SPHINXOPTS) $(SOURCE_DIR) $(HTML_BUILD_DIR)
$(SPHINX_BUILD) -c $(CONFIG_DIR) -b html $(SPHINXOPTS) $(SOURCE_DIR) $(HTML_BUILD_DIR)
@echo "Build finished."
html_log: SPHINXOPTS += -A collapse_menu=True
html_log: $(HTML_BUILD_DIR)/_static/style.css
@echo "Starting build..."
$(SPHINX_BUILD) -q -c $(CONFIG_DIR) -b html $(SPHINXOPTS) $(SOURCE_DIR) $(HTML_BUILD_DIR) > $(LOGFILE) 2>&1
@echo "Build finished."
live: SPHINXOPTS += -A collapse_menu=True
live:
@echo "Starting Live Server..."
$(SPHINX_AUTO_BUILD) $(SOURCE_DIR) $(HTML_BUILD_DIR) \
--port 8000 --host $(SERVER_IP) \
--watch $(THEME) --watch $(LOCALE) --watch $(STATIC) --watch $(REDIRECTS) --watch $(THEME_STATIC) --watch . \
--pre-build "sh -c 'mkdir -p $(HTML_BUILD_DIR)/_static && python3 -m pysassc $(THEME)/static/style.scss $(HTML_BUILD_DIR)/_static/style.css'" \
$(SPHINXOPTS) -c $(CONFIG_DIR) -b html
# To call *after* `make html`
# Binary dependencies (Debian): texlive-fonts-recommended texlive-latex-extra
@@ -107,7 +78,7 @@ $(HTML_BUILD_DIR)/_static/style.css: extensions/odoo_theme/static/style.scss ext
#=== Development and debugging rules ===#
fast: SPHINXOPTS += -A collapse_menu=True
fast: hmlt
fast: html
static: $(HTML_BUILD_DIR)/_static/style.css
cp -r extensions/odoo_theme/static/* $(HTML_BUILD_DIR)/_static/
+3 -5
View File
@@ -1,4 +1,4 @@
# Documentation
# Odoo documentation
## Build the documentation locally
@@ -9,7 +9,6 @@
- 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
@@ -19,9 +18,8 @@
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` 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.
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.
## Contribute to the documentation
+190 -346
View File
@@ -13,92 +13,86 @@ from sphinx.util import logging
_logger = logging.getLogger(__name__)
# === General configuration ===#
#=== General configuration ===#
# General information about the project.
project = "Odoo"
copyright = "Odoo S.A."
project = 'Odoo'
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 = "18.0"
version = release = 'master'
# `current_branch` is the technical name of the current branch.
# E.g., saas-15.4 -> saas-15.4; 12.0 -> 12.0, master -> master (*).
current_branch = version
# `current_version` is the Odoo version linked to the current branch.
# E.g., saas-15.4 -> 15.4; 12.0 -> 12; master -> master (*).
current_version = current_branch.replace("saas-", "").replace(".0", "")
current_version = current_branch.replace('saas-', '').replace('.0', '')
# `current_major_branch` is the technical name of the major branch before the current branch.
# E.g., saas-15.4 -> 15.0; 12.0 -> 12.0; master -> master (*).
current_major_branch = re.sub(r"\.\d", ".0", current_branch.replace("saas-", ""))
current_major_branch = re.sub(r'\.\d', '.0', current_branch.replace('saas-', ''))
# `current_major_version` is the Odoo version linked to the current major branch.
# E.g., saas-15.4 -> 15; 12.0 -> 12; master -> master (*).
current_major_version = current_major_branch.replace(".0", "")
current_major_version = current_major_branch.replace('.0', '')
# (*): We don't care for master.
# The minimal Sphinx version required to build the documentation.
needs_sphinx = "3.0.0"
needs_sphinx = '3.0.0'
# The default language in which the documentation is written. It is set to `None` because Sphinx
# considers that no language means 'en'.
language = None
# The suffix of source filenames.
source_suffix = {
".md": "markdown",
".rst": "restructuredtext",
}
source_suffix = '.rst'
# The master toctree document.
master_doc = "index"
master_doc = 'index'
# List of patterns, relative to source directory, that match files and directories to ignore when
# looking for source files.
exclude_patterns = [
"locale",
"README.*",
"bin",
"include",
"lib",
"odoo",
'locale',
'README.*',
'bin', 'include', 'lib',
'odoo',
]
# The RST text role to use when the role is not specified. E.g.: `example`.
# We use 'literal' as default role for markdown compatibility: `foo` behaves like ``foo``.
# See https://docutils.sourceforge.io/docs/ref/rst/roles.html#standard-roles for other roles.
default_role = "literal"
default_role = 'literal'
html_copy_source = False
# Whether scaled down images should be be wrapped in a `<a/>` tag linking to the image file or not.
html_scaled_image_link = False
# If true, '()' will be appended to :func: etc. cross-reference text
add_function_parentheses = True
# === Extensions configuration ===#
#=== Extensions configuration ===#
source_read_replace_vals = {
"BRANCH": current_branch,
"CURRENT_BRANCH": current_branch,
"CURRENT_VERSION": current_version,
"CURRENT_MAJOR_BRANCH": current_major_branch,
"CURRENT_MAJOR_VERSION": current_major_version,
"GITHUB_PATH": f"https://github.com/odoo/odoo/blob/{version}",
"GITHUB_ENT_PATH": f"https://github.com/odoo/enterprise/blob/{version}",
"OWL_PATH": f"https://github.com/odoo/owl/blob/master",
'BRANCH': current_branch,
'CURRENT_BRANCH': current_branch,
'CURRENT_VERSION': current_version,
'CURRENT_MAJOR_BRANCH': current_major_branch,
'CURRENT_MAJOR_VERSION': current_major_version,
'GITHUB_PATH': f'https://github.com/odoo/odoo/blob/{version}',
'GITHUB_ENT_PATH': f'https://github.com/odoo/enterprise/blob/{version}',
'OWL_PATH': f'https://github.com/odoo/owl/blob/master',
}
# Add extensions directory to PYTHONPATH
extension_dir = Path("extensions")
extension_dir = Path('extensions')
sys.path.insert(0, str(extension_dir.absolute()))
# Search for the directory of odoo sources to know whether autodoc should be used on the dev doc
odoo_sources_candidate_dirs = (Path("Odoo18"), Path("../Odoo18"))
# odoo_sources_candidate_dirs = (Path('odoo'), Path('../odoo'))
odoo_sources_candidate_dirs = (Path('odoo'), Path('../odoo'))
odoo_sources_dirs = [
d for d in odoo_sources_candidate_dirs if d.is_dir() and (d / "odoo-bin").exists()
d for d in odoo_sources_candidate_dirs if d.is_dir() and (d / 'odoo-bin').exists()
]
odoo_dir_in_path = False
@@ -109,30 +103,20 @@ if not odoo_sources_dirs:
"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/odoo` or create a symbolic link.",
{
"dir_list": "\n".join(
[f"\t- {d.resolve()}" for d in odoo_sources_candidate_dirs]
)
},
{'dir_list': '\n'.join([f'\t- {d.resolve()}' for d in odoo_sources_candidate_dirs])},
)
else:
if (3, 6) < sys.version_info < (3, 7):
# Running odoo needs python 3.7 min but monkey patch version_info to be compatible with 3.6.
sys.version_info = (3, 7, 0)
odoo_dir = odoo_sources_dirs[0].resolve()
source_read_replace_vals["ODOO_RELPATH"] = "/../" + str(odoo_sources_dirs[0])
source_read_replace_vals['ODOO_RELPATH'] = '/../' + str(odoo_sources_dirs[0])
sys.path.insert(0, str(odoo_dir))
import odoo.addons
odoo.addons.__path__.append(str(odoo_dir) + "/addons")
from odoo import (
release as odoo_release,
) # Don't collide with Sphinx's 'release' config option
odoo_version = ".".join(str(s) for s in odoo_release.version_info[:2]).replace(
"~", "-"
) # Change saas~XX.Y to saas-XX.Y
odoo_version = "master" if "alpha" in odoo_release.version else odoo_version
odoo.addons.__path__.append(str(odoo_dir) + '/addons')
from odoo import release as odoo_release # Don't collide with Sphinx's 'release' config option
odoo_version = '.'.join(str(s) for s in odoo_release.version_info[:2]).replace('~', '-') # Change saas~XX.Y to saas-XX.Y
odoo_version = 'master' if 'alpha' in odoo_release.version else odoo_version
if release != odoo_version:
_logger.warning(
"Found Odoo sources in %(directory)s but with version '%(odoo_version)s' incompatible "
@@ -140,193 +124,146 @@ else:
"The 'Developer' documentation will be built but autodoc directives will be skipped.\n"
"In order to fully build the 'Developer' documentation, checkout the matching branch"
" with `cd odoo && git checkout %(doc_version)s`.",
{
"directory": odoo_dir,
"odoo_version": odoo_version,
"doc_version": version,
},
{'directory': odoo_dir, 'odoo_version': odoo_version, 'doc_version': version},
)
else:
_logger.info(
"Found Odoo sources in %(directory)s matching documentation version '%(version)s'.",
{"directory": odoo_dir, "version": release},
{'directory': odoo_dir, 'version': release},
)
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.
model_references = {
"account.account.type": "addons/account/data/data_account_type.xml",
"res.country": "odoo/addons/base/data/res_country_data.xml",
"res.currency": "odoo/addons/base/data/res_currency_data.xml",
'account.account.type': 'addons/account/data/data_account_type.xml',
'res.country': 'odoo/addons/base/data/res_country_data.xml',
'res.currency': 'odoo/addons/base/data/res_currency_data.xml',
}
# The Sphinx extensions to use, as module names.
# They can be extensions coming with Sphinx (named 'sphinx.ext.*') or custom ones.
extensions = [
# Link sources in other projects (used to build the reference doc)
"sphinx.ext.intersphinx",
'sphinx.ext.intersphinx',
# Support the specialized to-do directives
"sphinx.ext.todo",
'sphinx.ext.todo',
# Custom Odoo theme
"odoo_theme",
'odoo_theme',
# Youtube and Vimeo videos integration (youtube, vimeo directives)
"embedded_video",
"custom_admonitions",
'embedded_video',
'custom_admonitions',
# Redirection generator
"redirects",
'redirects',
# Content tabs
"sphinx_tabs.tabs",
'sphinx_tabs.tabs',
# Cards
# "cards",
'cards',
# Spoilers
"spoilers",
'spoilers',
# Strange html domain logic used in memento pages
"html_domain",
"myst_parser",
"sphinx_design",
'html_domain',
]
myst_enable_extensions = [
"amsmath",
"colon_fence",
"deflist",
"dollarmath",
"fieldlist",
"html_admonition",
"html_image",
"replacements",
"smartquotes",
"strikethrough",
"substitution",
"tasklist",
]
if odoo_dir_in_path:
# GitHub links generation
extensions += [
"sphinx.ext.linkcode",
"github_link",
'sphinx.ext.linkcode',
'github_link',
# Parse Python docstrings (autodoc, automodule, autoattribute directives)
"sphinx.ext.autodoc",
"autodoc_field",
'sphinx.ext.autodoc',
'autodoc_field',
]
else:
extensions += [
"autodoc_placeholder",
'autodoc_placeholder',
]
extensions.append(
"sphinx.ext.graphviz" if shutil.which("dot") else "graphviz_placeholder"
)
extensions.append('sphinx.ext.graphviz' if shutil.which('dot') else 'graphviz_placeholder')
todo_include_todos = False
intersphinx_mapping = {
"pillow": ("https://pillow.readthedocs.io/en/stable/", None),
"python": ("https://docs.python.org/3/", None),
"werkzeug": ("https://werkzeug.palletsprojects.com/en/2.3.x/", None),
'pillow': ('https://pillow.readthedocs.io/en/stable/', None),
'python': ('https://docs.python.org/3/', None),
'werkzeug': ('https://werkzeug.palletsprojects.com/en/2.3.x/', None),
}
github_user = "NextERP"
github_project = "documentation"
github_user = 'odoo'
github_project = 'documentation'
locale_dirs = ["../locale/"]
templates_path = ["../extensions"]
locale_dirs = ['../locale/']
templates_path = ['../extensions']
# custom docname_to_domain to divide the translations of applications in subdirectories
sphinx.transforms.i18n.docname_to_domain = sphinx.util.i18n.docname_to_domain = (
lambda docname, compact: docname.split("/")[
1 if docname.startswith("applications/") else 0
]
)
sphinx.transforms.i18n.docname_to_domain = (
sphinx.util.i18n.docname_to_domain
) = lambda docname, compact: docname.split('/')[1 if docname.startswith('applications/') else 0]
# The version names that should be shown in the version switcher, if the config option `versions`
# is populated. If a version is passed to `versions` but is not listed here, it will not be shown.
versions_names = {
"master": "Master",
"saas-18.1": "Odoo Online",
"18.0": "18.0",
"saas-17.4": "Odoo Online",
"saas-17.2": "Odoo Online",
"17.0": "Odoo 17",
"16.0": "Odoo 16",
"15.0": "Odoo 15",
'master': "Master",
'17.0': "Odoo 17",
'saas-16.4': "Odoo Online",
'saas-16.3': "Odoo Online",
'saas-16.2': "Odoo Online",
'saas-16.1': "Odoo Online",
'16.0': "Odoo 16",
'saas-15.2': "Odoo Online",
'15.0': "Odoo 15",
'14.0': "Odoo 14",
}
# The language names that should be shown in the language switcher, if the config option `languages`
# is populated. If a language is passed to `languages` but is not listed here, it will not be shown.
languages_names = {
"de": "DE",
"en": "EN",
"es": "ES",
"es_419": "ES (LATAM)",
"fr": "FR",
"id": "ID",
"it": "IT",
"ja": "JA",
"ko": "KR",
"nl": "NL",
"pt_BR": "PT",
"ro": "RO",
"sv": "SV",
"th": "TH",
"uk": "UA",
"vi": "VI",
"zh_CN": "ZH (CN)",
"zh_TW": "ZH (TW)",
'de': 'DE',
'en': 'EN',
'es': 'ES',
'fr': 'FR',
'it': 'IT',
'nl': 'NL',
'pt_BR': 'PT',
'uk': 'UA',
'zh_CN': 'ZH (CN)',
'zh_TW': 'ZH (TW)'
}
# The directory in which files holding redirect rules used by the 'redirects' extension are listed.
redirects_dir = "redirects/"
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 ===#
# === Options for HTML output ===#
html_theme = "odoo_theme"
html_theme = 'odoo_theme'
# The name of the Pygments (syntax highlighting) style to use.
# See extensions/odoo_theme/pygments_override.py
pygments_style = "odoo"
pygments_style = 'odoo'
# The paths that contain custom themes, relative to this directory.
html_theme_path = ["extensions"]
html_theme_path = ['extensions']
# The name of an image file (within the static path) to use as favicon of the docs.
# This file should be a Windows icon file (.ico) being 16x16 or 32x32 pixels large.
html_favicon = os.path.join(
html_theme_path[0], html_theme, "static", "img", "favicon.ico"
)
html_favicon = os.path.join(html_theme_path[0], html_theme, 'static', 'img', 'favicon.ico')
# The paths that contain custom static files, relative to this directory.
# They are copied after the builtin static files, so a file named "default.css" will overwrite the
# builtin "default.css".
html_static_path = ["static"]
html_static_path = ['static']
html_permalinks = True
# Additional JS & CSS files that can be imported with the 'custom-js' and 'custom-css' metadata.
@@ -336,131 +273,72 @@ html_css_files = []
# PHP lexer option to not require <?php
highlight_options = {
"php": {"startinline": True},
'php': {'startinline': True},
}
# === Options for LaTeX output ===#
#=== Options for LaTeX output ===#
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
"papersize": "a4paper",
'papersize': 'a4paper',
# Additional stuff for the LaTeX preamble.
"preamble": r"\usepackage{odoo}",
"tableofcontents": "", # no TOC
'preamble': r'\usepackage{odoo}',
'tableofcontents': '', # no TOC
# Output manually in latex docs
"releasename": release,
'releasename': release,
}
latex_additional_files = ["static/latex/odoo.sty"]
latex_additional_files = ['static/latex/odoo.sty']
# Grouping the document tree into LaTeX files. List of tuples:
# (source start file, target name, title, author, documentclass [howto, manual, or own class]).
latex_documents = [
(
"legal/terms/enterprise_tex",
"odoo_enterprise_agreement.tex",
"Odoo Enterprise Subscription Agreement",
"",
"howto",
),
(
"legal/terms/partnership_tex",
"odoo_partnership_agreement.tex",
"Odoo Partnership Agreement",
"",
"howto",
),
(
"legal/terms/terms_of_sale",
"terms_of_sale.tex",
"Odoo Terms of Sale",
"",
"howto",
),
(
"legal/terms/i18n/enterprise_tex_fr",
"odoo_enterprise_agreement_fr.tex",
"Odoo Enterprise Subscription Agreement (FR)",
"",
"howto",
),
(
"legal/terms/i18n/partnership_tex_fr",
"odoo_partnership_agreement_fr.tex",
"Odoo Partnership Agreement (FR)",
"",
"howto",
),
(
"legal/terms/i18n/terms_of_sale_fr",
"terms_of_sale_fr.tex",
"Conditions Générales de Vente Odoo",
"",
"howto",
),
(
"legal/terms/i18n/enterprise_tex_nl",
"odoo_enterprise_agreement_nl.tex",
"Odoo Enterprise Subscription Agreement (NL)",
"",
"howto",
),
(
"legal/terms/i18n/enterprise_tex_de",
"odoo_enterprise_agreement_de.tex",
"Odoo Enterprise Subscription Agreement (DE)",
"",
"howto",
),
(
"legal/terms/i18n/terms_of_sale_de",
"terms_of_sale_de.tex",
"Allgemeine Verkaufsbedingungen Odoo",
"",
"howto",
),
(
"legal/terms/i18n/enterprise_tex_es",
"odoo_enterprise_agreement_es.tex",
"Odoo Enterprise Subscription Agreement (ES)",
"",
"howto",
),
(
"legal/terms/i18n/partnership_tex_es",
"odoo_partnership_agreement_es.tex",
"Odoo Partnership Agreement (ES)",
"",
"howto",
),
(
"legal/terms/i18n/terms_of_sale_es",
"terms_of_sale_es.tex",
"Términos Generales de Venta Odoo",
"",
"howto",
),
(
"legal/terms/i18n/enterprise_tex_pt_BR",
"odoo_enterprise_agreement_pt_BR.tex",
"Odoo Enterprise Subscription Agreement (PT)",
"",
"howto",
),
('legal/terms/enterprise_tex', 'odoo_enterprise_agreement.tex',
'Odoo Enterprise Subscription Agreement', '', 'howto'),
('legal/terms/partnership_tex',
'odoo_partnership_agreement.tex', 'Odoo Partnership Agreement', '', 'howto'),
('legal/terms/terms_of_sale',
'terms_of_sale.tex', 'Odoo Terms of Sale', '', 'howto'),
('legal/terms/i18n/enterprise_tex_fr', 'odoo_enterprise_agreement_fr.tex',
'Odoo Enterprise Subscription Agreement (FR)', '', 'howto'),
('legal/terms/i18n/partnership_tex_fr',
'odoo_partnership_agreement_fr.tex', 'Odoo Partnership Agreement (FR)', '', 'howto'),
('legal/terms/i18n/terms_of_sale_fr', 'terms_of_sale_fr.tex',
'Conditions Générales de Vente Odoo', '', 'howto'),
('legal/terms/i18n/enterprise_tex_nl', 'odoo_enterprise_agreement_nl.tex',
'Odoo Enterprise Subscription Agreement (NL)', '', 'howto'),
('legal/terms/i18n/enterprise_tex_de', 'odoo_enterprise_agreement_de.tex',
'Odoo Enterprise Subscription Agreement (DE)', '', 'howto'),
('legal/terms/i18n/terms_of_sale_de', 'terms_of_sale_de.tex',
'Allgemeine Verkaufsbedingungen Odoo', '', 'howto'),
('legal/terms/i18n/enterprise_tex_es', 'odoo_enterprise_agreement_es.tex',
'Odoo Enterprise Subscription Agreement (ES)', '', 'howto'),
('legal/terms/i18n/partnership_tex_es',
'odoo_partnership_agreement_es.tex', 'Odoo Partnership Agreement (ES)', '', 'howto'),
('legal/terms/i18n/terms_of_sale_es', 'terms_of_sale_es.tex',
'Términos Generales de Venta Odoo', '', 'howto'),
('legal/terms/i18n/enterprise_tex_pt_BR', 'odoo_enterprise_agreement_pt_BR.tex',
'Odoo Enterprise Subscription Agreement (PT)', '', 'howto'),
]
# List of languages that have legal translations (excluding EN). The keys must be in
# `languages_names`. These translations will have a link to their versions of the legal
# contracts, instead of the default EN one. The main legal documents are not part of the
# translations since they have legal meaning.
legal_translations = ["de", "es", "fr", "nl", "pt_BR"]
legal_translations = ['de', 'es', 'fr', 'nl', 'pt_BR']
# The name of an image file (relative to this directory) to place at the top of the title page.
latex_logo = "static/img/odoo_logo.png"
latex_logo = 'static/img/odoo_logo.png'
# If true, show URL addresses after external links.
latex_show_urls = "True"
latex_show_urls = 'True'
# https://github.com/sphinx-doc/sphinx/issues/4054#issuecomment-329097229
def source_read_replace(app, docname, source):
@@ -478,42 +356,33 @@ def source_read_replace(app, docname, source):
result = result.replace(f"{{{key}}}", app.config.source_read_replace_vals[key])
source[0] = result
def setup(app):
# Generate all alternate URLs for each document
app.add_config_value("project_root", None, "env")
app.add_config_value("canonical_version", None, "env")
app.add_config_value("versions", None, "env")
app.add_config_value("languages", None, "env")
app.add_config_value(
"is_remote_build", None, "env"
) # Whether the build is remotely deployed
app.add_config_value("source_read_replace_vals", {}, "env")
app.connect("source-read", source_read_replace)
# TODO uncomment after moving to >= v7.2.5 to also substitute placeholders in included files.
# See https://github.com/sphinx-doc/sphinx/commit/ff1831
# app.connect('include-read', source_read_replace)
app.add_config_value('project_root', None, 'env')
app.add_config_value('canonical_version', None, 'env')
app.add_config_value('versions', None, 'env')
app.add_config_value('languages', None, 'env')
app.add_config_value('is_remote_build', None, 'env') # Whether the build is remotely deployed
app.add_config_value('source_read_replace_vals', {}, 'env')
app.connect('source-read', source_read_replace)
app.add_lexer("json", JsonLexer)
app.add_lexer("xml", XmlLexer)
app.add_lexer('json', JsonLexer)
app.add_lexer('xml', XmlLexer)
app.connect("html-page-context", _generate_alternate_urls)
app.connect('html-page-context', _generate_alternate_urls)
# Add a `condition` option on directives to ignore them based on config values
app.add_config_value("odoo_dir_in_path", None, "env")
app.add_config_value('odoo_dir_in_path', None, 'env')
def context_eval(expr):
return eval(expr, {confval.name: confval.value for confval in app.config})
def patch(to_patch):
to_patch.option_spec["condition"] = context_eval
to_patch.option_spec['condition'] = context_eval
original_run = to_patch.run
def new_run(self):
if not self.options.get("condition", True):
if not self.options.get('condition', True):
return []
return original_run(self)
to_patch.run = new_run
for to_patch in (
@@ -524,7 +393,7 @@ def setup(app):
def _generate_alternate_urls(app, pagename, templatename, context, doctree):
"""Add keys of required alternate URLs for the current document in the rendering context.
""" Add keys of required alternate URLs for the current document in the rendering context.
Alternate URLS are required for:
- The canonical link tag
@@ -533,7 +402,7 @@ def _generate_alternate_urls(app, pagename, templatename, context, doctree):
"""
def _canonicalize():
"""Add the canonical URL for the current document in the rendering context.
""" Add the canonical URL for the current document in the rendering context.
The canonical version is the last released version of the documentation.
For a given language, the canonical root of a page is in the same language so that web
@@ -545,117 +414,92 @@ def _generate_alternate_urls(app, pagename, templatename, context, doctree):
"""
# If the canonical version is not set, assume that the project has a single version
_canonical_version = app.config.canonical_version or app.config.version
_canonical_lang = (
"en" # Always 'en'. Don't take the value of the config option.
)
context["canonical"] = _build_url(
_version=_canonical_version, _lang=_canonical_lang
)
_canonical_lang = 'en' # Always 'en'. Don't take the value of the config option.
context['canonical'] = _build_url(_version=_canonical_version, _lang=_canonical_lang)
def _versionize():
"""Add the pairs of (version, url) for the current document in the rendering context.
""" Add the pairs of (version, url) for the current document in the rendering context.
The entry 'version' is added by Sphinx in the rendering context.
"""
context["version_display_name"] = versions_names[version]
context['version_display_name'] = versions_names[version]
# If the list of versions is not set, assume the project has no alternate version
_provided_versions = (
app.config.versions and app.config.versions.split(",") or []
)
_provided_versions = app.config.versions and app.config.versions.split(',') or []
# Map alternate versions to their display names and URLs.
context["alternate_versions"] = []
context['alternate_versions'] = []
for _alternate_version, _display_name in versions_names.items():
if (
_alternate_version in _provided_versions
and _alternate_version != version
):
context["alternate_versions"].append(
if _alternate_version in _provided_versions and _alternate_version != version:
context['alternate_versions'].append(
(_display_name, _build_url(_alternate_version))
)
def _localize():
"""Add the pairs of (lang, code, url) for the current document in the rendering context.
""" Add the pairs of (lang, code, url) for the current document in the rendering context.
E.g.: ('French', 'fr', 'https://.../fr_BE/...')
The entry 'language' is added by Sphinx in the rendering context.
"""
_current_lang = app.config.language or "en"
_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, _current_lang.upper())
context["language_code"] = _current_lang
context['language'] = languages_names.get(_current_lang)
context['language_code'] = _current_lang
# If the list of languages is not set, assume that the project has no alternate language
_provided_languages = (
app.config.languages and app.config.languages.split(",") or []
)
_provided_languages = app.config.languages and app.config.languages.split(',') or []
# Map alternate languages to their display names and URLs.
context["alternate_languages"] = []
context['alternate_languages'] = []
for _alternate_lang, _display_name in languages_names.items():
if (
_alternate_lang in _provided_languages
and _alternate_lang != _current_lang
):
context["alternate_languages"].append(
if _alternate_lang in _provided_languages and _alternate_lang != _current_lang:
context['alternate_languages'].append(
(
_display_name,
(
_alternate_lang.split("_")[0]
if _alternate_lang != "en"
else "x-default"
),
_alternate_lang.split('_')[0] if _alternate_lang != 'en' else 'x-default',
_build_url(_lang=_alternate_lang),
)
)
# Dynamic generation of localized legal doc links
context["legal_translations"] = legal_translations
context['legal_translations'] = legal_translations
def _build_url(_version=None, _lang=None):
# print(f"###################################{app.config.is_remote_build}")
# print(f"###################################{app.config.project_root}")
if app.config.is_remote_build:
# Project root like https://www.odoo.com/documentation
_root = app.config.project_root
else:
# Project root like .../documentation/_build/html/14.0/fr
_root = re.sub(
rf"(/{app.config.version})?(/{app.config.language})?$", "", app.outdir
)
_root = re.sub(rf'(/{app.config.version})?(/{app.config.language})?$', '', app.outdir)
# If the canonical version is not set, assume that the project has a single version
_canonical_version = app.config.canonical_version or app.config.version
_version = _version or app.config.version
_lang = _lang or app.config.language or "en"
_canonical_page = f"{pagename}.html"
_lang = _lang or app.config.language or 'en'
_canonical_page = f'{pagename}.html'
# legal translations have different URLs schemes as they are not managed on transifex
# e.g. FR translation of /terms/enterprise => /fr/terms/enterprise_fr
if pagename.startswith("legal/terms/"):
if pagename.startswith('legal/terms/'):
if _lang in legal_translations and not pagename.endswith(f"_{_lang}"):
# remove language code for current translation, set target one
_page = re.sub("_[a-z]{2}$", "", pagename)
if "terms/i18n" not in _page:
if 'terms/i18n' not in _page:
_page = _page.replace("/terms/", "/terms/i18n/")
_canonical_page = f"{_page}_{_lang}.html"
elif _lang == "en" and pagename.endswith(
tuple(f"_{l}" for l in legal_translations)
):
_canonical_page = f'{_page}_{_lang}.html'
elif _lang == 'en' and pagename.endswith(tuple(f"_{l}" for l in legal_translations)):
# remove language code for current translation, link to original EN one
_page = re.sub("_[a-z]{2}$", "", pagename)
_canonical_page = f'{_page.replace("/i18n/", "/")}.html'
if app.config.is_remote_build:
_canonical_page = _canonical_page.replace("index.html", "")
_canonical_page = _canonical_page.replace('index.html', '')
return (
f"{_root}"
f'{f"/{_version}" if app.config.versions else ""}'
f'{f"/{_lang}" if _lang != "en" else ""}'
f"/{_canonical_page}"
)
return f'{_root}' \
f'{f"/{_version}" if app.config.versions else ""}' \
f'{f"/{_lang}" if _lang != "en" else ""}' \
f'/{_canonical_page}'
_canonicalize()
_versionize()
-42
View File
@@ -1,42 +0,0 @@
# -d, --dry-run Do not write/remove any files
# -R, --replace-files Remove parsed files
# -S, --stop-on-fail Stop on first failure
# -W, --raise-on-warning Raise exception on parsing warning
# -l, --language TEXT Language code for directive names [default:
# en]
# --sphinx / --no-sphinx Load sphinx. [default: sphinx]
# -e, --extensions TEXT A comma-separated list of sphinx extensions
# to load.
# -dd, --default-domain TEXT Default sphinx domain [default: py]
# -dr, --default-role TEXT Default sphinx role [default: convert to
# literal]
# -cp, --cite-prefix TEXT Prefix to add to citation references
# [default: cite]
# --consecutive-numbering / --no-consecutive-numbering
# Apply consecutive numbering to ordered lists
# [default: consecutive-numbering]
# --colon-fences / --no-colon-fences
# Use colon fences for directives with parsed
# content [default: colon-fences]
# --dollar-math / --no-dollar-math
# Convert math (where possible) to dollar-
# delimited math [default: dollar-math]
# -c, --conversions PATH YAML file mapping directives -> conversions
# --encoding TEXT Encoding for read/write [default: utf8]
# --config FILE YAML file to read default configuration from
# -h, --help Show this message and exit.
language: en
sphinx: true
default_conversion: parse_all
conversions:
docutils.parsers.rst.directives.images.image: parse_all
sphinx.directives.patches.ListTable: parse_all # For tables if needed
extensions:
- sphinx.ext.intersphinx
- sphinx.ext.todo
- sphinx_tabs.tabs
- sphinx_design
default_domain: py
consecutive_numbering: true
colon_fences: true
dollar_math: true
-65
View File
@@ -1,65 +0,0 @@
:nosearch:
:show-content:
:hide-page-toc:
:show-toc:
===================
Database management
===================
These guides provide instructions on how to install, maintain and upgrade Odoo databases.
.. seealso::
:doc:`History of Versions <administration/supported_versions>`
Installation
============
Depending on the intended use case, there are multiple ways to install Odoo - or not install it at
all.
- :doc:`Online <administration/odoo_online>` is the easiest way to use Odoo in production or to try it.
- :doc:`Packaged installers <administration/on_premise/packages>` are suitable for testing Odoo and
developing modules. They can be used for long-term production with additional deployment and
maintenance work.
- :doc:`Source install <administration/on_premise/source>` provides greater flexibility, as it
allows, for example, running multiple Odoo versions on the same system. It is adequate to develop
modules and can be used as a base for production deployment.
- A `Docker <https://hub.docker.com/_/odoo/>`_ base image is available for development or
deployment.
.. _install/editions:
Editions
========
There are two different editions.
**Odoo Community** is the free and open-source version of the software, licensed under the `GNU
LGPLv3 <https://github.com/odoo/odoo/blob/master/LICENSE>`_. It is the core upon which Odoo
Enterprise is built.
**Odoo Enterprise** is the shared source version of the software, giving access to more
functionalities, including functional support, upgrades, and hosting. `Pricing
<https://www.odoo.com/pricing-plan>`_ starts from one app free.
.. tip::
:doc:`Switch from Community to Enterprise <administration/on_premise/community_to_enterprise>` at
any time (except for the source install).
.. toctree::
:titlesonly:
administration/hosting
administration/odoo_online
administration/odoo_sh
administration/on_premise
administration/upgrade
administration/neutralized_database
administration/supported_versions
administration/mobile
administration/odoo_accounts
-121
View File
@@ -1,121 +0,0 @@
=======
Hosting
=======
.. _hosting/change-solution:
Change hosting solution
=======================
The instructions to change the hosting type of a database depend on the current solution used and to
which solution the database should be moved.
Transferring an on-premise database
===================================
To Odoo Online
--------------
.. important::
- Odoo Online is *not* compatible with **non-standard apps**.
- The database's current version must be :doc:`supported <supported_versions>`.
#. 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:
- your **subscription number**,
- the **URL** you want to use for the database (e.g., `company.odoo.com`), and
- the **dump** as an attachment or as a link to the file (required for 60 MB+ files).
#. Odoo then makes sure the database is compatible before putting it online. In case of technical
issues during the process, Odoo might contact you.
.. note::
If you have time constraints, `submit a support ticket <https://www.odoo.com/help>`_ as soon as
possible to schedule the transfer.
To Odoo.sh
----------
Follow the instructions found in :ref:`the Import your database section
<odoo_sh_import_your_database>` of the Odoo.sh *Create your project* documentation.
Transferring an Odoo Online database
====================================
.. important::
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
17.0.
.. tip::
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
-------------
#. Sign in to `the Odoo Online database manager <https://www.odoo.com/my/databases/>`_ and click the
gear icon (:guilabel:`⚙`) next to the database name to :guilabel:`Download` a backup. If the
download fails due to the file being too large, `contact Odoo support
<https://www.odoo.com/help>`_.
#. Restore the database from the database manager on your local server using the backup.
To Odoo.sh
----------
#. Sign in to `the Odoo Online database manager <https://www.odoo.com/my/databases/>`_ and click the
gear icon (:guilabel:`⚙`) next to the database name to :guilabel:`Download` a backup. If the
download fails due to the file being too large, `contact Odoo support
<https://www.odoo.com/help>`_.
#. Follow the instructions found in :ref:`the Import your database section
<odoo_sh_import_your_database>` of the Odoo.sh *Create your project* documentation.
Transferring an Odoo.sh database
================================
To Odoo Online
--------------
.. important::
Odoo Online is *not* compatible with **non-standard apps**.
#. Uninstall all **non-standard apps** in a staging build before doing it in the production build.
#. `Create a support ticket <https://www.odoo.com/help>`_ including the following:
- your **subscription number**,
- the **URL** you want to use for the database (e.g., `company.odoo.com`),
- which **branch** should be migrated,
- in which **region** you want the database to be hosted (Americas, Europe, or Asia),
- which user(s) will be the **administrator(s)**, and
- **when** (and in which timezone) you want the database to be up and running.
#. Odoo then makes sure the database is compatible before putting it online. In case of technical
issues during the process, Odoo might contact you.
.. note::
- If you have time constraints, `submit a support ticket <https://www.odoo.com/help>`_ as soon as
possible to schedule the transfer.
- Select the **region** closest to most of your users to reduce latency.
- Future **administrator(s)** must have an Odoo.com account.
- The **date and time** you want the database to be up and running are helpful to organize the
switch from the Odoo.sh server to the Odoo Online servers.
- Databases are **not reachable** during their migration.
To on-premise
-------------
#. Download a :ref:`backup of your Odoo.sh production database <odoo_sh_branches_backups>`.
#. Restore the database from the database manager on your local server using the backup.
-67
View File
@@ -1,67 +0,0 @@
================
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 SSO authentication.
@@ -1,36 +0,0 @@
====================
Neutralized database
====================
A neutralized database is a non-production database on which several parameters are deactivated.
This enables one to carry out tests without the risk of launching specific automated processes that
could impact production data (e.g., sending emails to customers). Live access is removed and
turned into a testing environment.
.. note::
**Any testing database created is a neutralized database:**
- testing backup databases
- duplicate databases
- for Odoo.sh: staging and development databases
.. important::
A database can also be neutralized when upgrading, as it is vital to do some tests before
switching to a new version.
Deactivated features
====================
Here is a non-exhaustive list of the deactivated features:
- all planned actions (e.g., automatic invoicing of subscriptions, mass mailing, etc.)
- outgoing emails
- bank synchronization
- 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
be seen immediately.**
@@ -1,80 +0,0 @@
=================
Odoo.com accounts
=================
This documentation is dedicated to edits made to an Odoo.com account. The following processes
describe how to delete an Odoo.com account, and how to change the password on an Odoo.com account.
Delete Odoo.com account
=======================
To delete an Odoo.com account, start by clicking the profile icon in the upper-right corner
(represented by the username and icon) to reveal a drop-down menu. From the drop-down menu, select
:guilabel:`My Odoo.com account`, which reveals the user portal.
From the user portal, the delete option can be accessed by going to :menuselection:`My Account -->
Edit Security Settings --> Delete Account`. It can also be accessed by going to
`https://www.odoo.com/my/home <https://www.odoo.com/my/home>`_.
.. danger::
Deleting an Odoo account is irreversible. Be careful performing this action, as the Odoo.com
account is **not** retrievable once deleted.
Upon clicking the :guilabel:`Delete Account` button, a pop-up window appears, requesting
confirmation for the account deletion.
.. image:: odoo_accounts/delete-account.png
:align: center
:alt: Clicking on the Delete Account button will populate a window verifying the change.
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
================================
To change an Odoo.com account password, first login into the Odoo.com user account from the Odoo.com
login page. After logging-in, go to the upper-right corner of the screen, and click the :guilabel:`▼
(down arrow)` icon next to the profile icon. Then, select :guilabel:`My Account`, and a portal
dashboard appears.
To change the Odoo.com password, click on the :guilabel:`Edit Security Settings` link, below the
:menuselection:`Account Security` section. Next, make the necessary changes by typing in the current
:guilabel:`Password`, :guilabel:`New Password`, and verify the new password. Lastly, click on
:guilabel:`Change Password` to complete the password change.
.. note::
If a customer would like to change the login, contact Odoo support `here
<https://www.odoo.com/help>`_.
.. note::
Passwords for Odoo.com users and portal users remain separate, even if the same email address is
used.
Add two-factor authentication
=============================
To add two-factor authentication, login into the Odoo.com user account from the Odoo.com login page.
After logging-in, go to the upper-right corner of the screen, and click the :guilabel:`▼ (down
arrow)` icon next to the :guilabel:`profile icon`. Then, select :guilabel:`My Account`, and a portal
dashboard appears.
If the user would like to turn on two-factor authentication (2FA) for Odoo.com access, click on the
:guilabel:`Edit Security Settings` link below the :menuselection:`Account Security` section.
Click on :guilabel:`Enable two-factor authentication` to turn on :abbr:`2FA (two-factor
authentication)`. Then, confirm the current password in the :guilabel:`Password` field. Next, click
on :guilabel:`Confirm Password`. Following that, activate :abbr:`2FA (two-factor authentication)` in
a :abbr:`2FA (two-factor authentication)` app (Google Authenticator, Authy, etc.), by scanning the
:guilabel:`QR code` or entering a :guilabel:`Verification Code`.
Finally, click on :guilabel:`Enable two-factor authentication` to complete the setup.
.. note::
Under :guilabel:`My Account` Odoo.com users can also access the following:
- :guilabel:`My Partner dashboard`
- :guilabel:`My In-App Services`
- :guilabel:`My Apps Dashboard`
-151
View File
@@ -1,151 +0,0 @@
===========
Odoo Online
===========
`Odoo Online <https://www.odoo.com/trial>`_ provides private databases which are fully managed and
hosted by Odoo. It can be used for long-term production or to test Odoo thoroughly, including
customizations that don't require code.
.. note::
Odoo Online is incompatible with custom modules or the Odoo App Store.
Odoo Online databases are accessed using any web browser and do not require a local installation.
To quickly try out Odoo, shared `demo <https://demo.odoo.com>`_ instances are available. No
registration is required, but each instance only lives for a few hours.
Database management
===================
To manage a database, go to the `database manager <https://www.odoo.com/my/databases>`_ and sign in
as the database administrator.
All the main database management options are available by clicking the database name, except the
upgrade option, which can be accessed by clicking the **arrow in a circle** icon next to the
database name. It is only displayed if an upgrade is available.
.. image:: odoo_online/database-manager.png
:alt: Accessing the database management options
- :ref:`odoo_online/upgrade`
- :ref:`odoo_online/duplicate`
- :ref:`odoo_online/rename`
- :ref:`odoo_online/download`
- :ref:`odoo_online/domains`
- :ref:`odoo_online/tags`
- :ref:`odoo_online/delete`
- :ref:`odoo_online/contact-support`
- :ref:`odoo_online/users`
.. _odoo_online/upgrade:
Upgrade
=======
Trigger a database upgrade.
.. seealso::
For more information about the upgrade process, check out the :ref:`Odoo Online upgrade
documentation <upgrade-request-test>`.
.. _odoo_online/duplicate:
Duplicate
=========
Create an exact copy of the database, which can be used to perform testing without compromising
daily operations.
.. important::
- 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:
Rename
======
Rename the database and its URL.
.. _odoo_online/download:
Download
========
Download a ZIP file containing a backup of the database.
.. note::
Databases are backed up daily as per the `Odoo Cloud Hosting SLA
<https://www.odoo.com/cloud-sla>`_.
.. _odoo_online/domains:
Domain names
============
Use a custom :doc:`domain name </applications/websites/website/configuration/domain_names>` to
access the database via another URL.
.. tip::
You can :ref:`register a domain name for free <domain-name/register>`.
.. _odoo_online/tags:
Tags
====
Add tags to easily identify and sort your databases.
.. tip::
You can search for tags in the search bar.
.. _odoo_online/delete:
Delete
======
Delete a database instantly.
.. danger::
Deleting a database means that all data is permanently lost. The deletion is instant and applies
to all users. It is recommended to create a backup of the database before deleting it.
Carefully read the warning message and only proceed if the implications of deleting a database are
fully understood.
.. image:: odoo_online/delete.png
:alt: The warning message displayed before deleting a database
.. note::
- Only an administrator can delete a database.
- The database name is immediately made available to anyone.
- Deleting a database if it has expired or is linked to a subscription is impossible. In that
case, contact `Odoo Support <https://www.odoo.com/help>`_.
.. _odoo_online/contact-support:
Contact us
==========
Access the `Odoo.com support page <https://www.odoo.com/help>`_ with the database's details already
pre-filled.
.. _odoo_online/users:
Invite / remove users
=====================
To invite users, fill out the new user's email address and click :guilabel:`Invite`. To add multiple
users, click :guilabel:`Add more users`.
.. image:: odoo_online/invite-users.png
:alt: Inviting a user on a database
To remove users, select them and click :guilabel:`Remove`.
.. seealso::
- :doc:`/applications/general/users`
- :doc:`odoo_accounts`
Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

@@ -1,60 +0,0 @@
.. _odoosh-advanced-frequent_technical_questions:
============================
Frequent Technical Questions
============================
"Scheduled actions do not run at the exact time they were expected"
-------------------------------------------------------------------
On the Odoo.sh platform, we cannot guarantee an exact running time for scheduled actions.
This is due to the fact that there might be multiple customers on the same server, and we must guarantee a fair share of the server for every customer. Scheduled actions are therefore implemented slightly differently than on a regular Odoo server, and are run on a *best effort* policy.
.. warning::
Do not expect any scheduled action to be run more often than every 5 min.
Are there "best practices" regarding scheduled actions?
-------------------------------------------------------
**Odoo.sh always limits the execution time of scheduled actions (*aka* crons).**
Therefore, you must keep this fact in mind when developing your own crons.
We advise that:
- Your scheduled actions should work on small batches of records.
- Your scheduled actions should commit their work after processing each batch;
this way, if they get interrupted by the time-limit, there is no need to start over.
- Your scheduled actions should be
`idempotent <https://stackoverflow.com/a/1077421/3332416>`_: they must not
cause side-effects if they are started more often than expected.
.. _ip-address-change:
How can I automate tasks when an IP address change occurs?
----------------------------------------------------------
**Odoo.sh notifies project administrators of IP address changes.**
Additionally, when the IP address of a production instance changes, an HTTP `GET` request is made
to the path `/_odoo.sh/ip-change` with the new IP address included as a query string parameter
(`new`), along with the previous IP address as an additional parameter (`old`).
This mechanism allows custom actions to be applied in response to the IP address change
(e.g., sending an email, contacting a firewall API, configuring database objects, etc.)
For security reasons, the `/_odoo.sh/ip-change` route is accessible only internally by the platform
itself and returns a `403` response if accessed through any other means.
Here is a pseudo-implementation example:
.. code-block:: python
class IPChangeController(http.Controller):
@http.route('/_odoo.sh/ip-change', auth='public')
def ip_change(self, old=None, new=None):
_logger.info("IP address changed from %s to %s", old, new)
# Then perform whatever action required for your use case, e.g., update an
# ir.config_parameter, send an email, contact an external firewall service's API, ...
return 'ok'
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

@@ -1,205 +0,0 @@
.. _odoosh-gettingstarted-create:
===================
Create your project
===================
Deploy your platform
====================
Go to `Odoo.sh <https://www.odoo.sh/>`_ and hit the *Deploy your platform* button.
.. image:: create/deploy.png
:align: center
Sign in with Github
===================
Sign in with your Github account. If you do not have an account yet, hit the *Create an account*
link.
.. image:: create/github-signin.png
:align: center
Authorize Odoo.sh
=================
Grant Odoo.sh the required accesses to your account by clicking the *Authorize* button.
.. image:: create/github-authorize.png
:align: center
Odoo.sh basically needs:
* to know your Github login and email,
* to create a new repository in case you decide to start from scratch,
* to read your existing repositories, including the ones of your organizations, in case you want to
start from an existing repository,
* to create a webhook to be notified each time you push changes,
* to commit changes to make your deployment easier, merging branches or adding new `submodules
<https://git-scm.com/book/en/v2/Git-Tools-Submodules>`_ for example.
Submit your project
===================
Choose if you want to start from scratch by creating a new repository, or if you want to use an
existing repository.
Then, choose a name or select the repository you want to use.
Choose the Odoo version you want to use. If you plan to import an existing database or an existing
set of applications, you might need to choose the according version. If you start from scratch, use
the latest version.
Enter your *subscription code*. This is also called *subscription referral*, *contract number* or
*activation code*.
It should be the code of your Enterprise subscription that includes Odoo.sh.
Partners can use their partnership codes to start a trial. Should their clients start a project,
they ought to get an Enterprise subscription including Odoo.sh and use its subscription code. The
partner will get 50% of the amount back as commission. Contact your sales representative or account
manager in order to get it.
When submitting the form, if you are notified your subscription is not valid, it either means:
* it is not an existing subscription,
* it is not a partnership subscription,
* it is an enterprise subscription, but which does not include Odoo.sh,
* it is neither a partnership subscription or an enterprise subscription (e.g. an online
subscription).
In case of doubt with your subscription, please contact the `Odoo support
<https://www.odoo.com/help>`_.
.. image:: create/deploy-form.png
:align: center
You're done !
=============
You can start using Odoo.sh. Your first build is about to be created. You will soon be able to
connect to your first database.
.. image:: create/deploy-done.png
:align: center
.. _odoo_sh_import_your_database:
Import your database
====================
You can import your database in your Odoo.sh project as long as it is in a :doc:`supported version
</administration/supported_versions>` of Odoo.
Push your modules in production
-------------------------------
If you use community or custom modules, add them in a branch in your Github repository.
Databases hosted on the Odoo.com online platform do not have any custom modules.
Users of these databases can therefore skip this step.
You can structure your modules as you wish, Odoo.sh will automatically detect the folders containing
Odoo addons. For instance, you can put all your modules folder in the root directory of your
repository, or group the modules in folders by categories that you define (accounting, project,
...).
For community modules available in public Git repositories,
you can also consider to add them using :ref:`Submodules <odoosh-advanced-submodules>`.
Then, either :ref:`make this branch the production branch <odoosh-gettingstarted-branches-stages>`,
or :ref:`merge it into your production branch <odoosh-gettingstarted-branches-mergingbranches>`.
Download a backup
-----------------
On-premise databases
~~~~~~~~~~~~~~~~~~~~
Access the URL :file:`/web/database/manager` of your on-premise database and download a backup.
.. Warning::
If you cannot access the database manager, it may have been disabled by your system administrator.
See the :ref:`database manager security documentation <db_manager_security>`.
You will need the master password of your database server. If you do not have it, contact your
system administrator.
.. image:: create/create-import-onpremise-backup.png
:align: center
Choose a zip including the filestore as the backup format.
.. image:: create/create-import-onpremise-backup-dialog.png
:align: center
Odoo Online databases
~~~~~~~~~~~~~~~~~~~~~
`Access your databases manager <https://accounts.odoo.com/my/databases/manage>`_ and download a
backup of your database.
.. image:: create/create-import-online-backup.png
:align: center
.. Warning::
Online versions (e.g. *saas-**) are not supported on Odoo.sh.
Upload the backup
-----------------
Then, in your Odoo.sh project, in the backups tab of your production branch, import the backup you
just downloaded.
.. image:: create/create-import-production.png
:align: center
Once the backup imported, you can access the database using the *Connect* button in the history of
the branch.
.. image:: create/create-import-production-done.png
:align: center
Check your outgoing email servers
---------------------------------
There is a default mail server provided with Odoo.sh.
To use it, there must be no enabled outgoing mail server configured in your database in
:menuselection:`Settings --> Technical --> Outgoing Mail Servers` (:ref:`Developer mode
<developer-mode>` must be activated).
After the import of your database, all outgoing email servers are disabled so you use the Odoo.sh
email server provided by default.
.. warning::
Port 25 is (and will stay) closed. If you want to connect to an external SMTP server, you should
use ports 465 and 587.
Check your scheduled actions
----------------------------
All scheduled actions are disabled after the import.
This is to prevent your newly imported database to perform actions that could impact your running
production, such as sending the mails remaining in the queue, processing mass mailings, or
third-party services synchronization (Calendars, files hosting, ...).
If you plan to make the imported database your production, enable the scheduled actions you need.
You can check what is enabled in the database of origin and enable the same actions in the imported
database. Scheduled actions are located under :menuselection:`Settings --> Technical --> Automation
--> Scheduled Actions`.
Register your subscription
--------------------------
Your subscription is unlinked after the import.
The imported database is considered a duplicate by default and the enterprise subscription is
therefore removed, as you can only have one database linked per subscription.
If you plan to make it your production, unlink your former database from the subscription, and
register the newly imported database. Read the :doc:`database registration documentation
<../../on_premise>` for instructions.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

@@ -1,339 +0,0 @@
========
Settings
========
Overview
========
The settings allow you to manage the configuration of your project.
.. image:: settings/interface-settings.png
:align: center
Project name
============
The name of your project.
.. image:: settings/interface-settings-projectname.png
:align: center
This defines the address that will be used to access your production database.
Addresses of your staging and development builds are derived from this name and assigned
automatically. However, when you change your project name, only future builds will use the new name.
.. _odoosh-gettingstarted-settings-collaborators:
Collaborators
=============
Manage the Github users who can access your project.
.. image:: settings/interface-settings-collaborators.png
:align: center
There are three levels of users:
- :guilabel:`Admin`: has access to all features of an Odoo.sh project.
- :guilabel:`Tester`: has access to the *Staging* and *Development* databases and their tooling.
This role is for users conducting User Acceptance Tests. Testers can work with copies of
production data but cannot access the production database through the Odoo.sh tooling.
- :guilabel:`Developer`: has access only to the *Development* databases and their tooling. This
role is for developers who propose code modifications but are not allowed to access production
and staging databases through the Odoo.sh tooling.
.. list-table::
:header-rows: 1
:widths: auto
* -
-
- Developer
- Tester
- Admin
* - Development
- History
- |green|
- |green|
- |green|
* -
- 1-click connect
- |green|
- |green|
- |green|
* -
- Logs
- |green|
- |green|
- |green|
* -
- Shell/SSH
- |green|
- |green|
- |green|
* -
- Mails
- |green|
- |green|
- |green|
* -
- Settings
- |green|
- |green|
- |green|
* - Staging
- History
- |green|
- |green|
- |green|
* -
- 1-click connect
-
- |green|
- |green|
* -
- Logs
-
- |green|
- |green|
* -
- Shell/SSH
-
- |green|
- |green|
* -
- Mails
-
- |green|
- |green|
* -
- Monitoring
-
- |green|
- |green|
* -
- Backups
-
-
- |green|
* -
- Upgrade
-
- |green|
- |green|
* -
- Settings
-
- |green|
- |green|
* - Production
- History
- |green|
- |green|
- |green|
* -
- 1-click connect
-
-
- |green|
* -
- Logs
-
-
- |green|
* -
- Shell/SSH
-
-
- |green|
* -
- Mails
-
-
- |green|
* -
- Monitoring
-
-
- |green|
* -
- Backups
-
-
- |green|
* -
- Upgrade
-
-
- |green|
* -
- Settings
-
-
- |green|
* - Status
-
- |green|
- |green|
- |green|
* - Settings
-
-
-
- |green|
.. warning::
Those roles only apply to the usage of Odoo.sh. It is important to reflect the user roles
attribution within the repository on GitHub. Please refer to the GitHub documentation section on
`Managing a branch protection rule <https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule>`_
for detailed guidance.
.. |green| raw:: html
<span class="text-success" style="font-size: 32px; line-height: 0.5">●</span>
.. |orange| raw:: html
<span class="text-warning" style="font-size: 32px; line-height: 0.5">●</span>
.. |red| raw:: html
<span class="text-danger" style="font-size: 32px; line-height: 0.5">●</span>
Public Access
=============
Allow public access to your development builds.
.. image:: settings/interface-settings-public.png
:align: center
If activated, this option exposes the Builds page publicly, allowing visitors to view logs of development builds.
Production and staging builds are excluded, visitors can only see their status.
.. _odoosh-gettingstarted-settings-modules-installation:
GitHub commit statuses
======================
This option enables Odoo.sh to push commit statuses to your GitHub repository when a build is
created or updated. It requires a GitHub token with permissions to push commit statuses to the
repository. Refer to `GitHub's documentation on personal access tokens <https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens>`_
for instructions to create yours.
.. note::
GitHub's **fine-grained personal tokens** have an expiration date and will be disabled if they
fail to update the commit status. You can replace the token at any time on Odoo.sh.
The commit statuses pushed to GitHub can have the following contexts:
- :guilabel:`ci/odoo.sh (dev)`: status of a development build
- :guilabel:`ci/odoo.sh (staging)`: status of a staging build
- :guilabel:`ci/odoo.sh (production)`: status of a production build
- :guilabel:`ci/odoo.sh (test_ci)`: testing the token from the Settings page will push a test
status on the last commit of your repository
Custom domains
==============
To configure additional domains please refer to the corresponding branch's :ref:`settings tab
<odoosh-gettingstarted-branches-tabs-settings>`.
.. _odoosh-gettingstarted-settings-submodules:
Submodules
==========
Configure the deploy keys for the private repositories you use
as submodules in your branches to allow Odoo.sh to download them.
.. warning::
These settings are required for **private repositories** only. If you are looking on how to set
up your submodules, instructions are available in the chapter :ref:`Submodules
<odoosh-advanced-submodules>` of this documentation.
.. image:: settings/interface-settings-submodules.png
:align: center
When a repository is private, it is not possible to publicly download its branches and revisions.
For that reason, you need to configure a deploy key for Odoo.sh,
so the remote Git server allows our platform to download the revisions
of this private repository.
To configure the deploy key for a private repository, proceed as follows:
* in the input, paste the SSH URL of your private sub-repository and click on *Add*,
* e.g. *git@github.com:USERNAME/REPOSITORY.git*
* it can be another Git server than Github, such as Bitbucket, Gitlab or even your own self-hosted
server
* copy the public key,
* it should look like *ssh-rsa some...random...characters...here...==*
* in the settings of the private sub-repository, add the public key amongst the deploy keys.
* Github.com: :menuselection:`Settings --> Deploy keys --> Add deploy key`
* Bitbucket.com: :menuselection:`Settings --> Access keys --> Add key`
* Gitlab.com: :menuselection:`Settings --> Repository --> Deploy Keys`
* Self-hosted: append the key to the git users authorized_keys file in its .ssh directory
Storage Size
============
This section shows the storage size used by your project.
.. image:: settings/interface-settings-storage.png
:align: center
Storage size is computed as follows:
* the size of the PostgreSQL database
* the size of the disk files available in your container: database filestore, sessions storage directory...
.. warning::
In case you want to analyze disk usage, you can run the tool `ncdu
<https://dev.yorhel.nl/ncdu/man>`_ in your Web Shell.
Should your production database size grow to exceed what's provisioned in your subscription, it
will automatically be synchronized with it.
Database Workers
================
Additional database workers can be configured here. More workers help increase the load your
production database is able to handle. If you add more, it will automatically be synchronized
with your subscription.
.. image:: settings/interface-settings-workers.png
:align: center
.. Warning::
Adding more workers will not magically solve all performance issues. It only allows the server
to handle more connections at the same time. If some operations are unusually slow, it's most
likely a problem with the code, if it's not due to your own customizations you can open a ticket
`here <https://www.odoo.com/help>`_.
Staging Branches
================
Additional staging branches allow you to develop and test more features at the same time. If you
add more, it will automatically be synchronized with your subscription.
.. image:: settings/interface-settings-staging-branches.png
:align: center
Activation
==========
Shows the status of the project's activation. You can change the project's activation code if
needed.
.. image:: settings/interface-settings-activation.png
:align: center
Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

-117
View File
@@ -1,117 +0,0 @@
:show-content:
==========
On-premise
==========
Register a database
===================
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.
.. tip::
The expiration date is also displayed at the bottom of the Settings page.
.. _on-premise/duplicate:
Duplicate a database
====================
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.
Common error messages and solutions
===================================
Registration error
------------------
In case of a registration error, the following message should be displayed.
.. image:: on_premise/error-message-sub-code.png
:alt: Database registration error message
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:
- Odoo 18.0 and above: `services.odoo.com` on port `80`
- Odoo 17.0 and below: `services.openerp.com` on port `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.
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::
on_premise/packages
on_premise/source
on_premise/update
on_premise/deploy
on_premise/email_gateway
on_premise/geo_ip
on_premise/community_to_enterprise
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

@@ -1,106 +0,0 @@
.. _setup/enterprise:
===================================
Switch from Community to Enterprise
===================================
Depending on your current installation, there are multiple ways to upgrade
your community version.
In any case the basic guidelines are:
* Backup your community database
.. image:: community_to_enterprise/db_manager.png
:class: img-fluid
* Shutdown your server
* Install the web_enterprise module
* Restart your server
* Enter your Odoo Enterprise Subscription code
.. image:: community_to_enterprise/enterprise_code.png
:class: img-fluid
On Linux, using an installer
============================
* Backup your community database
* Stop the odoo service
.. code-block:: console
$ sudo service odoo stop
* Install the enterprise .deb (it should install over the community package)
.. code-block:: console
$ sudo dpkg -i <path_to_enterprise_deb>
* Update your database to the enterprise packages using
.. code-block:: console
$ python3 /usr/bin/odoo-bin -d <database_name> -i web_enterprise --stop-after-init
* You should be able to connect to your Odoo Enterprise instance using your usual mean of identification.
You can then link your database with your Odoo Enterprise Subscription by entering the code you received
by e-mail in the form input
On Linux, using the source code
===============================
There are many ways to launch your server when using sources, and you probably
have your own favourite. You may need to adapt sections to your usual workflow.
* Shutdown your server
* Backup your community database
* Update the ``--addons-path`` parameter of your launch command (see :doc:`../on_premise/source`)
* Install the web_enterprise module by using
.. code-block:: console
$ -d <database_name> -i web_enterprise --stop-after-init
Depending on the size of your database, this may take some time.
* Restart your server with the updated addons path of point 3.
You should be able to connect to your instance. You can then link your database with your
Odoo Enterprise Subscription by entering the code you received by e-mail in the form input
On Windows
==========
* Backup your community database
* Uninstall Odoo Community (using the Uninstall executable in the installation folder) -
PostgreSQL will remain installed
.. image:: community_to_enterprise/windows_uninstall.png
:class: img-fluid
* Launch the Odoo Enterprise Installer and follow the steps normally. When choosing
the installation path, you can set the folder of the Community installation
(this folder still contains the PostgreSQL installation).
Uncheck ``Start Odoo`` at the end of the installation
.. image:: community_to_enterprise/windows_setup.png
:class: img-fluid
* Using a command window, update your Odoo Database using this command (from the Odoo
installation path, in the server subfolder)
.. code-block:: console
$ ..\python\python.exe odoo-bin -d <database_name> -i web_enterprise --stop-after-init
* No need to manually launch the server, the service is running.
You should be able to connect to your Odoo Enterprise instance using your usual
mean of identification. You can then link your database with your Odoo Enterprise
Subscription by entering the code you received by e-mail in the form input
@@ -1,107 +0,0 @@
:hide-page-toc:
.. _supported_versions:
==================
Supported versions
==================
Odoo provides support and bug fixing **for the 3 last major versions** of Odoo.
.. note::
Odoo releases intermediary versions called **Online versions** on the :doc:`Odoo Online
<odoo_online>` hosting every two months. Odoo Online users can then benefit from the latest
features of Odoo.
- Admins of Odoo Online databases are invited to :doc:`upgrade <upgrade>` them regularly.
- Online versions are *not* released for Odoo.sh and On-Premise installations.
- Online versions are listed below as *SaaS*.
This matrix shows the support status of every version.
**Major releases are in bold type.**
.. list-table::
:header-rows: 1
:widths: auto
* -
- Odoo Online
- Odoo.sh
- On-Premise
- Release date
- End of support
* - Odoo SaaS 18.1
- |green|
- N/A
- N/A
- January 2025
-
* - **Odoo 18.0**
- |green|
- |green|
- |green|
- October 2024
- October 2027 (planned)
* - Odoo SaaS 17.4
- |red|
- N/A
- N/A
- July 2024
- October 2024
* - Odoo SaaS 17.2
- |red|
- N/A
- N/A
- April 2024
- October 2024
* - **Odoo 17.0**
- |green|
- |green|
- |green|
- November 2023
- October 2026 (planned)
* - **Odoo 16.0**
- |green|
- |green|
- |green|
- October 2022
- October 2025 (planned)
* - **Odoo 15.0**
- |red|
- |red|
- |red|
- October 2021
- October 2024
* - **Odoo 14.0**
- |red|
- |red|
- |red|
- October 2020
- November 2023
* - Older versions
- |red|
- |red|
- |red|
- Before 2020
- Before 2023
.. admonition:: Legend
|green| Supported version
|red| End-of-support
N/A Never released for this platform
.. important::
Even though we don't support older versions, you can always `upgrade from any version
<https://upgrade.odoo.com/>`_.
.. |green| raw:: html
<span class="text-success" style="font-size: 32px; line-height: 0.5">●</span>
.. |red| raw:: html
<span class="text-danger" style="font-size: 32px; line-height: 0.5">●</span>
-439
View File
@@ -1,439 +0,0 @@
=======
Upgrade
=======
An upgrade involves moving a database from an older version to a newer supported version (e.g., from
Odoo 16.0 to Odoo 18.0). Regular upgrades are crucial as each version offers new features, bug
fixes, and security patches. Using a :doc:`supported version <supported_versions>` is strongly
recommended. Each major version is supported for three years.
Depending on the hosting type and Odoo version used, a database upgrade can be **mandatory**.
.. tabs::
.. group-tab:: Odoo Online
- If a database is on a **major version** (e.g., 16.0, 17.0, 18.0), an upgrade is mandatory
every two years.
- If a database is on a **minor version** (e.g., 17.1, 17.2, 17.4), an upgrade is mandatory
a few weeks after the next version is released. Minor versions are usually released every
two months.
.. group-tab:: Odoo.sh
After the initial three years of support, you will have another two years to complete the
upgrade. You will be notified when an upgrade is required.
.. image:: upgrade/odoo-sh-message.png
:alt: The "unsupported version" popup on Odoo.sh.
.. group-tab:: On-premise
You can stay on the same version indefinitely, even if it is not recommended. Note that the
smaller the version gap, the easier the upgrade should be.
.. spoiler:: Automatic upgrades: Odoo Online's Rolling Release process
You will receive a notification in your database a few weeks before a mandatory upgrade will be
automatically carried out. You are in control of the process as long as the deadline is not
reached.
.. image:: upgrade/rr-upgrade-message.png
:alt: The upgrade message prompt on the top right of the database
Concretely, Odoos Upgrade Team performs a silent test upgrade of every database that should be
upgraded. If the test is successful and lasts less than 20 minutes, you can directly trigger the
upgrade from the database. If the test fails, you can test an upgrade using the `database manager
<https://www.odoo.com/my/databases>`_.
When you are invited to upgrade, it is strongly recommended to :ref:`request an upgraded test
database <upgrade-request-test>` first and spend time :ref:`testing <upgrade-testing>` it.
An automatic upgrade to the next version will be triggered if no action is taken before the
specified due date.
An upgrade does not cover:
- Downgrading to a previous version of Odoo
- :doc:`Switching editions <on_premise/community_to_enterprise>` (e.g., from Community to
Enterprise)
- :ref:`Changing hosting type <hosting/change-solution>` (e.g., from on-premise to Odoo Online)
- Migrating from another ERP to Odoo
.. warning::
If your database contains custom modules, it cannot be upgraded until a version of your custom
modules is available for the target version of Odoo. For customers maintaining their own custom
modules, we recommend to parallelize the process by :ref:`requesting an upgraded database
<upgrade-request-test>` while also :doc:`upgrading the source code of your custom
modules </developer/howtos/upgrade_custom_db>`.
.. _upgrade-nutshell:
Upgrading in a nutshell
=======================
#. Request an upgraded test database (see :ref:`obtaining an upgraded test database
<upgrade-request-test>`).
#. 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-testing>`).
#. Report any issue encountered during the testing to Odoo by going to the `Support page and
selecting "An issue related to my future upgrade (I am testing an upgrade)"
<https://www.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-production>`).
#. Report any issue encountered during the upgrade to Odoo by going to the `Support page and
selecting "An issue related to my upgrade (production)"
<https://www.odoo.com/help?stage=post_upgrade>`_.
.. _upgrade-request-test:
Obtaining an upgraded test database
===================================
The `Upgrade page <https://upgrade.odoo.com>`_ is the main platform for requesting an upgraded
database. However, depending on the hosting type, you can upgrade from the command line
(on-premise), the Odoo Online `database manager <https://www.odoo.com/my/databases>`_, or your
`Odoo.sh project <https://www.odoo.sh/project>`_.
.. note::
The Upgrade platform follows the same `Privacy Policy <https://www.odoo.com/privacy>`_ as the
other Odoo.com services. Visit the `General Data Protection Regulation page
<https://www.odoo.com/gdpr>`_ to learn more about how Odoo handles your data and privacy.
.. tabs::
.. group-tab:: Odoo Online
Odoo Online databases can be manually upgraded via the `database manager
<https://www.odoo.com/my/databases>`_.
The database manager displays all databases associated with the user's account. Databases
not on the most recent version of Odoo display an arrow in a circle icon next to their name,
indicating that they can be upgraded.
.. image:: upgrade/databases-page.png
:alt: The database manager with an upgrade button next to the name of a database.
Click the **arrow in a circle** icon to start the upgrade process. In the popup, fill in:
- The **version** of Odoo you want to upgrade to, usually the latest version
- The **email** address that should receive the link to the upgraded database
- The :guilabel:`Purpose` of the upgrade, which is automatically set to :guilabel:`Test` for
your first upgrade request
.. image:: upgrade/upgrade-popup.png
:alt: The "Upgrade your database" popup.
The :guilabel:`Upgrade in progress` tag is displayed next to the database name until
completion. Once the process succeeds, an email containing a link to the upgraded test
database is sent to the address provided. The database can also be accessed from the database
manager by clicking the dropdown arrow before the database name.
.. image:: upgrade/access-upgraded-db.png
:alt: Clicking the menu arrow displays the upgraded test database.
.. group-tab:: Odoo.sh
Odoo.sh is integrated with the upgrade platform to simplify the upgrade process.
.. image:: upgrade/odoo-sh-staging.png
:alt: Odoo.sh project and tabs
The **latest production daily automatic backup** is then sent to the Upgrade platform.
Once the upgrade platform is done upgrading the backup and uploading it on the branch, it is
put in a **special mode**: each time a **commit is pushed** on the branch, a **restore
operation** of the upgraded backup and an **update of all the custom modules** occur. This
allows you to test your custom modules on a pristine copy of the upgraded database. The log
file of the upgrade process can be found in your newly upgraded staging build by going to
:file:`~/logs/upgrade.log`.
.. important::
In databases where custom modules are installed, their source code must be up-to-date with
the target version of Odoo before the upgrade can be performed. If there are none, the
"update on commit" mode is skipped, the upgraded database is built as soon as it is
transferred from the upgrade platform, and the upgrade mode is exited.
Check out the :doc:`/developer/howtos/upgrade_custom_db` page for more information.
.. group-tab:: On-premise
The standard upgrade process can be initiated by entering the following command line on the
machine where the database is hosted:
.. code-block:: console
$ python <(curl -s https://upgrade.odoo.com/upgrade) test -d <your db name> -t <target version>
.. note::
This command has some requirements on the environment it runs in:
- Some external commands that must be provided by the operating system, normally found in
any Linux distribution (including WSL). An error will be displayed if one or several of
them are missing.
- The system user that executes the command needs to be configured with access to the
database. Please refer to the PostgreSQL documentation of the `client environment
<https://www.postgresql.org/docs/current/libpq-envars.html>`_ or the `client password
file <https://www.postgresql.org/docs/current/libpq-pgpass.html>`_ for this requirement.
- The script needs to be able to reach one or multiple servers of the upgrade platform
both on TCP port 443 and to any random TCP port in the range between 32768 and 60999.
This can be in conflict with your restrictive firewall and may need an exception added
to the firewall configuration.
The following command can be used to display the general help and the main commands:
.. code-block:: console
$ python <(curl -s https://upgrade.odoo.com/upgrade) --help
An upgraded test database can also be requested via the `Upgrade page
<https://upgrade.odoo.com>`_.
.. important::
In databases where custom modules are installed, their source code must be up-to-date with
the target version of Odoo before the upgrade can be performed. Check out the
:doc:`/developer/howtos/upgrade_custom_db` page for more information.
.. note::
- For security reasons, only the person who submitted the upgrade request can download it.
- For storage reasons, the database's copy is submitted without a filestore to the upgrade
server. Therefore, the upgraded database does not contain the production filestore.
- Before restoring the upgraded database, its filestore must be merged with the production
filestore to be able to perform tests in the same conditions as it would be in the new
version.
- The upgraded database contains:
- A `dump.sql` file containing the upgraded database
- A `filestore` folder containing files extracted from in-database records into
attachments (if there are any) and new standard Odoo files from the targeted Odoo
version (e.g., new images, icons, payment provider's logos, etc.).
This is the folder that should be merged with the production filestore
in order to get the full upgraded filestore.
.. note::
You can request multiple test databases if you wish to test an upgrade more than once.
.. note::
When an upgrade request is completed, an upgrade report is attached to the successful upgrade
email, and it becomes available in the Discuss app for users who are part of the "Administration
/ Settings" group. This report provides important information about the changes introduced by
the new version.
.. _upgrade-testing:
Testing the new version of the database
=======================================
It is essential to test the upgraded test database to ensure that you are not stuck in your
day-to-day activities by a change in views, behavior, or an error message once the upgrade goes
live.
.. note::
Test databases are neutralized, and some features are disabled to prevent them from impacting the
production database:
#. Scheduled actions are disabled.
#. Outgoing mail servers are disabled by archiving the existing ones and adding a fake one.
#. Payment providers and delivery carriers are reset to the test environment.
#. Bank synchronization is disabled. Should you want to test the synchronization, contact your
bank synchronization provider to get sandbox credentials.
Testing as many of your business flows as possible is strongly recommended to ensure they are
working correctly and to get more familiar with the new version.
.. admonition:: Basic test checklist
- Are there views that are deactivated in your test database but active in your production
database?
- Are your usual views still displayed correctly?
- Are your reports (invoice, sales order, etc.) correctly generated?
- Are your website pages working correctly?
- Are you able to create and modify records? (sales orders, invoices, purchases, users, contacts,
companies, etc.)
- Are there any issues with your mail templates?
- Are there any issues with saved translations?
- Are your search filters still present?
- Can you export your data?
.. spoiler:: Example of end-to-end testing
- Checking a random product in your product catalog and comparing its test and production data to
verify everything is the same (product category, selling price, cost price, vendor, accounts,
routes, etc.).
- Buying this product (Purchase app).
- Confirming the reception of this product (Inventory app).
- Checking if the route to receive this product is the same in your production database
(Inventory app).
- Selling this product (Sales app) to a random customer.
- Opening your customer database (Contacts app), selecting a customer (or company), and checking
its data.
- Shipping this product (Inventory app).
- Checking if the route to ship this product is the same as in your production database
(Inventory app).
- Validating a customer invoice (Invoicing or Accounting app).
- Crediting the invoice (issuing a credit note) and checking if it behaves as in your production
database.
- Checking your reports' results (Accounting app).
- Randomly checking your taxes, currencies, bank accounts, and fiscal year (Accounting app).
- Making an online order (Website apps) from the product selection in your shop until the
checkout process and checking if everything behaves as in your production database.
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 by going to the `Support page and selecting "An issue related to my future upgrade (I am
testing an upgrade)" <https://www.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
by a new version breaks a customization, it is the responsibility of the maintainer of your custom
module to make it compatible with the new version of Odoo.
.. tip::
Do not forget to test:
- Integrations with external software (EDI, APIs, etc.)
- Workflows between different apps (online sales with eCommerce, converting a lead all the way to
a sales order, delivery of products, etc.)
- Data exports
- Automated actions
- Server actions in the action menu on form views, as well as by selecting multiple records on
list views
.. _upgrade-production:
Upgrading the production database
=================================
Once the :ref:`tests <upgrade-testing>` 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.
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.**
.. important::
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)
The process of upgrading a production database is similar to upgrading a test database, but with a
few exceptions.
.. tabs::
.. group-tab:: Odoo Online
The process is similar to :ref:`obtaining an upgraded test database
<upgrade-request-test>`, except for the purpose option, which must be set to
:guilabel:`Production` instead of :guilabel:`Test`.
.. warning::
Once the upgrade is requested, the database will be unavailable until the upgrade is
finished. Once the process is completed, it is impossible to revert to the previous
version.
.. group-tab:: Odoo.sh
The process is similar to :ref:`obtaining an upgraded test database <upgrade-request-test>` on
the :guilabel:`Production` branch.
.. image:: upgrade/odoo-sh-prod.png
:alt: View from the upgrade tab
The process is **triggered as soon as a new commit is made** on the branch. This
allows the upgrade process to be synchronized with the deployment of the custom modules'
upgraded source code.
If there are no custom modules, the upgrade process is triggered immediately.
.. important::
The database is unavailable throughout the process. If anything goes wrong, the platform
automatically reverts the upgrade, as it would be for a regular update. In case of success,
a backup of the database before the upgrade is created.
The update of your custom modules must be successful to complete the entire upgrade process.
Make sure the status of your staging upgrade is :guilabel:`successful` before trying it in
production. More information on how to upgrade your custom modules can be found on
:doc:`/developer/howtos/upgrade_custom_db`.
.. group-tab:: On-premise
The command to upgrade a database to production is similar to the one of upgrading a test
database except for the argument `test`, which must be replaced by `production`:
.. code-block:: console
$ python <(curl -s https://upgrade.odoo.com/upgrade) production -d <your db name> -t <target version>
An upgraded production database can also be requested via the `Upgrade page
<https://upgrade.odoo.com>`_.
Once the database is uploaded, any modification to your production database will **not** be
present on your upgraded database. This is why we recommend not using it during the upgrade
process.
.. important::
When requesting an upgraded database for production purposes, the copy is submitted without
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 by going
to the `Support page and selecting "An issue related to my upgrade (production)"
<https://www.odoo.com/help?stage=post_upgrade>`_.
.. _upgrade-sla:
Service-level agreement (SLA)
=============================
With Odoo Enterprise, upgrading a database to the most recent version of Odoo is **free**, including
any support required to rectify potential discrepancies in the upgraded database.
Information about the upgrade services included in the Enterprise Licence is available in the
:ref:`Odoo Enterprise Subscription Agreement <upgrade>`. However, this section clarifies what
upgrade services you can expect.
.. _upgrade-sla-covered:
Upgrade services covered by the SLA
-----------------------------------
Databases hosted on Odoo's cloud platforms (Odoo Online and Odoo.sh) or self-hosted (On-Premise) can
benefit from upgrade services at all times for:
- the upgrade of all **standard applications**;
- the upgrade of all **customizations created with the Studio app**, as long as Studio is still
installed and the respective subscription is still active; and
- the upgrade of all **developments and customizations covered by a maintenance of customizations
subscription**.
Upgrade services are limited to the technical conversion and adaptation of a database (standard
modules and data) to make it compatible with the version targeted by the upgrade.
.. _upgrade-sla-not-covered:
Upgrade services not covered by the SLA
---------------------------------------
The following upgrade-related services are **not** included:
- the **cleaning** of pre-existing data and configurations while upgrading;
- the upgrade of **additional modules not covered by a maintenance contract** that are created
in-house or by third parties, including Odoo partners; and
- **training** on using the upgraded version's features and workflows.
.. seealso::
- :doc:`Odoo.sh documentation <odoo_sh>`
- :doc:`Supported Odoo versions <supported_versions>`
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

-13
View File
@@ -1,13 +0,0 @@
===============
Odoo essentials
===============
.. toctree::
essentials/activities
essentials/reporting
essentials/search
essentials/contacts
essentials/export_import_data
essentials/in_app_purchase
essentials/keyboard_shortcuts
@@ -1,345 +0,0 @@
==========
Activities
==========
.. |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
===================
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`.
.. image:: activities/activity-list.png
:align: center
:alt: The list of activity types already configured and available.
Edit activity types
-------------------
To edit an existing :ref:`activity type <activities/types>`, click on the activity type, and the
activity type form loads.
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.
Create new activity types
-------------------------
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.
Enter a :guilabel:`Name` for the activity type at the top of the form, then enter the following
information on the form.
Activity Settings section
~~~~~~~~~~~~~~~~~~~~~~~~~
- :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:
- :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.
.. note::
Available activity types vary based on the installed applications in the database.
- :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`.
Using the drop-down menu, select the :guilabel:`Folder` the document is saved to.
- :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.
.. 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.
- :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.
Next Activity section
~~~~~~~~~~~~~~~~~~~~~
It is possible to have another activity either suggested or triggered. To do so, configure the
:guilabel:`Next Activity` section.
- :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.
.. note::
The :guilabel:`Chaining Type` field does **not** appear if :guilabel:`Upload Document` is
selected for the :guilabel:`Action`.
- :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.
First, enter a numerical value indicating when the activity is suggested or triggered.
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`.
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`.
.. image:: activities/new-activity.png
:align: center
:alt: A new Activity form with all the fields filled out.
.. seealso::
- :doc:`../productivity/discuss`
- :doc:`../productivity/discuss/team_communication`
- :doc:`../sales/crm/optimize/utilize_activities`
Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

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