Compare commits

...

38 Commits

Author SHA1 Message Date
Aurelien van Delft (avd) 9319327a9a [ADD] tools: add populate cli documentation 2024-10-22 15:45:32 +02:00
Ricardo Gomes Rodrigues 946c518039 [IMP] accounting: deferred full months
Feature added in commit https://github.com/odoo/enterprise/commit/5dca9c0c2691cba2335e110ad63a2dcc8bbf6d57

closes odoo/documentation#11238

X-original-commit: 939d0de821
Signed-off-by: Ricardo Gomes Rodrigues (rigr) <rigr@odoo.com>
2024-10-21 16:04:07 +00:00
Ricardo Gomes Rodrigues 8f73708332 [IMP] accounting: add loan management
This has been done in https://github.com/odoo/enterprise/pull/68698

closes odoo/documentation#11035

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2024-10-21 09:10:27 +00:00
Joseph (jcb) d50ff09926 [IMP] web: notification: custom autoclose delay
closes odoo/documentation#11219

Related: odoo/odoo#184037
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2024-10-18 10:48:31 +00:00
jero-odoo e9c19f63d4 [IMP] Contacts: Update contacts basics
closes odoo/documentation#11220

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
2024-10-17 20:37:43 +00:00
benderliz 95aae86762 [IMP] Inventory: Updating serial numbers documentation
closes odoo/documentation#11217

X-original-commit: 3270549c3a
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: Liz Bender (beli) <beli@odoo.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2024-10-17 15:53:50 +00:00
Louis Wicket (wil) da7fe3d69d [I18N] add es_419 to the documentation
This commit adds es_419 (LATAM Spanish) to the available languages. It
populates LATAM Spanish translation based on the existing Spanish
translation.

closes odoo/documentation#11210

Signed-off-by: Louis Wicket (wil) <wil@odoo.com>
2024-10-17 15:53:48 +00:00
masp-odoo 9e9fce957f [FIX] general : Update link from Google Domains to Squarespace
Task-4224635

closes odoo/documentation#11213

X-original-commit: 399b20d9c7
Signed-off-by: Marion Spindler (masp) <masp@odoo.com>
2024-10-17 07:10:44 +00:00
Olivier Dony ab9313a451 [FIX] legal: update license info for 18.0 2024-10-16 19:07:31 +02:00
xpl-odoo 868ecc61a5 [IMP] studio: update approval rules for v18
closes odoo/documentation#11200

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2024-10-16 11:13:34 +00:00
Felicious 73638c012c [IMP] inventory: improve routes definitions
closes odoo/documentation#11168

X-original-commit: 21cb6bb5cf
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
2024-10-15 18:59:26 +00:00
Felicious 753d10106a [IMP] inventory: merge resupply
closes odoo/documentation#11204

X-original-commit: 7f24a51d7d
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: Liz Bender <92882399+benderliz@users.noreply.github.com>
Co-authored-by: Zachary Straub <zst@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2024-10-15 18:59:25 +00:00
KC (ksc) 64a0fbd75e [IMP] surveys: add cards and links/intros
closes odoo/documentation#11176

X-original-commit: 3337149a62
Signed-off-by: Kevin Scannell (ksc) <ksc@odoo.com>
2024-10-15 14:23:05 +00:00
Odoo Translation Bot a2af035da6 [I18N] Update translation terms from Transifex 2024-10-13 02:42:30 +02:00
Felicious bb761431d5 [REF] inventory: resupply warehouses
closes odoo/documentation#11194

X-original-commit: ef367bd442
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
2024-10-11 22:11:21 +00:00
Felicious 0b5e4bb5b4 [IMP] inventory: fix typos in shipping table
closes odoo/documentation#11184

X-original-commit: e41e3c7ba0
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
2024-10-11 17:21:32 +00:00
larm-odoo 32ecbd0c5b [ADD] Payroll: Work entry analysis report
closes odoo/documentation#11180

X-original-commit: 34814984ec
Signed-off-by: Lara Martini (larm) <larm@odoo.com>
2024-10-11 16:07:13 +00:00
Odoo's Mergebot 31725deaf0 [FW][ADD] odoo.sh: new ci token usage
closes odoo/documentation#11189

Forward-port-of: odoo/documentation#11172
Signed-off-by: Fabien Meghazi (fme) <fme@odoo.com>
Signed-off-by: Stanislas Sobieski (sts) <sts@odoo.com>
Co-authored-by: Fabien Meghazi <fme@odoo.com>
Co-authored-by: Stanislas Sobieski <sts@odoo.com>
2024-10-11 11:35:31 +00:00
afma-odoo 0e71f8681e [IMP] accounting: pdf menu to export reports
task-3605633

closes odoo/documentation#11113

X-original-commit: 380c4bc10f
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Anne-Françoise Marcq (afma) <afma@odoo.com>
2024-10-11 08:58:30 +00:00
Demesmaeker da682b7f22 [ADD] payment_providers/worldline
task-3499275

New payment provider and its related configuration; remove Ogone and SIPS payments providers as they were replaced by Wordline.

closes odoo/documentation#11070

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2024-10-10 08:40:21 +00:00
Donatienne (dopi) cc270a9afe [IMP] ecommerce: products page updated
closes odoo/documentation#11164

Taskid: 4056328
X-original-commit: 1c5bf1337e
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Donatienne Pirlot (dopi) <dopi@odoo.com>
2024-10-10 06:49:12 +00:00
Ricardo Gomes Rodrigues df0cf93856 [IMP] accounting: split deferred settings
This has been done in https://github.com/odoo/enterprise/commit/39fffc5541eb51d7a3ae25405abe90fe6031001a

closes odoo/documentation#11161

X-original-commit: ac69e2872c
Signed-off-by: Ricardo Gomes Rodrigues (rigr) <rigr@odoo.com>
2024-10-09 17:58:16 +00:00
dikd-odoo 213a3ca73b [IMP] calendar: expand parent documentation
[ADD] expand parent calendar documentation

[FIX] formatting changes

[FIX] formatting changes

[FIX] content changes

Apply suggestions from KAEK review

[FIX] KAEK review edits

[FIX] resize images

Apply suggestions from KSC review

[FIX] content from KSC review

[FIX] revisions KSC review

[FIX] formatting

newline

formatting

Apply suggestions from KSC review

[FIX] Content change

[FIX] Content changes

Apply suggestions from KSC review

Apply suggestions from SALI review

Apply suggestions from SALI review2

content changes

format

Apply suggestions from SALI review

content

content

closes odoo/documentation#11132

X-original-commit: 721c07d341
Signed-off-by: Dina Klarisse Dugar (dikd) <dikd@odoo.com>
Co-authored-by: kekiss <karaekiss@yahoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2024-10-08 19:20:15 +00:00
xpl-odoo 0e4810f40b [IMP] administration: on-premise publisher warranty URL
task-4226945

closes odoo/documentation#11154

X-original-commit: 544e2c18d0
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2024-10-07 16:38:37 +00:00
Tiffany Chang (tic) 4e7df807e7 [I18N] *: export latest terms
As per usual, leave off developer.pot and contributing.pot since we
don't translate them (not useful, can't really contribute to/dev in
Odoo without knowing English)

Also update the tx/config to point to v18 project

closes odoo/documentation#11148

X-original-commit: 5aa4151
Signed-off-by: Tiffany Chang (tic) <tic@odoo.com>
2024-10-07 15:14:06 +00:00
Odoo Translation Bot 0a3c8ec10a [I18N] Update translation terms from Transifex 2024-10-06 02:42:45 +02:00
Felicious 416fcaa7a1 [ADD] purchase: import vendor pricelist
closes odoo/documentation#11141

X-original-commit: 3b69030302
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: kekiss <karaekiss@yahoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2024-10-04 21:38:24 +00:00
Felicious d8e0ae04b9 [ADD] inventory: valuation by lots
closes odoo/documentation#11138

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2024-10-04 20:30:59 +00:00
larm-odoo 5688664e3a [IMP] Appraisals: Skills Report - highest improvement
closes odoo/documentation#11136

X-original-commit: 6c843244eb
Signed-off-by: Lara Martini (larm) <larm@odoo.com>
2024-10-04 19:16:45 +00:00
Antoine Vandevenne (anv) 61f05b699a [IMP] supported_versions: release 18.0
closes odoo/documentation#11125

X-original-commit: a0472c95e5
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2024-10-01 14:11:12 +00:00
Odoo Translation Bot 318d80a4a1 [I18N] Update translation terms from Transifex 2024-09-29 02:43:41 +02:00
Pierre Pulinckx (PIPU) b79c83f52a [IMP] developer/testing: update tours documentation
The towers interface was modified during version 17. Therefore, in this commit, we update the documentation of this interface.

closes odoo/documentation#11116

Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com>
2024-09-28 14:29:32 +00:00
masp-odoo 6d2f193622 [FIX] website: recaptcha threshold number
task-4145451

closes odoo/documentation#11107

X-original-commit: 0aa1a671dd
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Marion Spindler (masp) <masp@odoo.com>
2024-09-26 15:09:34 +00:00
larm-odoo 0cd4dd2978 [ADD] Appraisals: Skills Evolution reporting
closes odoo/documentation#11100

X-original-commit: 1e39d90420
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: Lara Martini (larm) <larm@odoo.com>
2024-09-25 19:52:56 +00:00
larm-odoo b4beccaf8e [ADD] Employees: Certifications
closes odoo/documentation#11099

X-original-commit: 14007868bb
Signed-off-by: Lara Martini (larm) <larm@odoo.com>
2024-09-25 19:52:55 +00:00
larm-odoo fd5d5581cc [ADD] Employees: Employee retention report
closes odoo/documentation#11093

X-original-commit: 43d99f8070
Signed-off-by: Lara Martini (larm) <larm@odoo.com>
2024-09-25 19:52:49 +00:00
Parish Bracha 9083a0927c [IMP] Subscriptions: Contract in exception
closes odoo/documentation#11090

X-original-commit: ea2fc6dbc4
Signed-off-by: Parish Bracha (pabr) <pabr@odoo.com>
2024-09-25 15:42:47 +00:00
Christophe Monniez b5c37e33b1 [REL] 18.0 2024-09-25 12:35:25 +00:00
527 changed files with 5328964 additions and 279067 deletions
+15 -15
View File
@@ -1,7 +1,7 @@
[main]
host = https://www.transifex.com
[o:odoo:p:odoo-17-doc:r:administration]
[o:odoo:p:odoo-18-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-17-doc:r:applications]
[o:odoo:p:odoo-18-doc:r:applications]
file_filter = locale/<lang>/LC_MESSAGES/applications.po
source_file = locale/sources/applications.pot
type = POT
@@ -21,7 +21,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-17-doc:r:essentials]
[o:odoo:p:odoo-18-doc:r:essentials]
file_filter = locale/<lang>/LC_MESSAGES/essentials.po
source_file = locale/sources/essentials.pot
type = POT
@@ -31,7 +31,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-17-doc:r:finance]
[o:odoo:p:odoo-18-doc:r:finance]
file_filter = locale/<lang>/LC_MESSAGES/finance.po
source_file = locale/sources/finance.pot
type = POT
@@ -41,7 +41,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-17-doc:r:general]
[o:odoo:p:odoo-18-doc:r:general]
file_filter = locale/<lang>/LC_MESSAGES/general.po
source_file = locale/sources/general.pot
type = POT
@@ -51,7 +51,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-17-doc:r:hr]
[o:odoo:p:odoo-18-doc:r:hr]
file_filter = locale/<lang>/LC_MESSAGES/hr.po
source_file = locale/sources/hr.pot
type = POT
@@ -61,7 +61,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-17-doc:r:index]
[o:odoo:p:odoo-18-doc:r:index]
file_filter = locale/<lang>/LC_MESSAGES/index.po
source_file = locale/sources/index.pot
type = POT
@@ -71,7 +71,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-17-doc:r:inventory_and_mrp]
[o:odoo:p:odoo-18-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 +81,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-17-doc:r:marketing]
[o:odoo:p:odoo-18-doc:r:marketing]
file_filter = locale/<lang>/LC_MESSAGES/marketing.po
source_file = locale/sources/marketing.pot
type = POT
@@ -91,7 +91,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-17-doc:r:productivity]
[o:odoo:p:odoo-18-doc:r:productivity]
file_filter = locale/<lang>/LC_MESSAGES/productivity.po
source_file = locale/sources/productivity.pot
type = POT
@@ -101,7 +101,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-17-doc:r:sales]
[o:odoo:p:odoo-18-doc:r:sales]
file_filter = locale/<lang>/LC_MESSAGES/sales.po
source_file = locale/sources/sales.pot
type = POT
@@ -111,7 +111,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-17-doc:r:services]
[o:odoo:p:odoo-18-doc:r:services]
file_filter = locale/<lang>/LC_MESSAGES/services.po
source_file = locale/sources/services.pot
type = POT
@@ -121,7 +121,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-17-doc:r:user_settings]
[o:odoo:p:odoo-18-doc:r:user_settings]
file_filter = locale/<lang>/LC_MESSAGES/settings.po
source_file = locale/sources/settings.pot
type = POT
@@ -131,7 +131,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-17-doc:r:studio]
[o:odoo:p:odoo-18-doc:r:studio]
file_filter = locale/<lang>/LC_MESSAGES/studio.po
source_file = locale/sources/studio.pot
type = POT
@@ -141,7 +141,7 @@ replace_edited_strings = false
keep_translations = false
source_lang = en
[o:odoo:p:odoo-17-doc:r:websites]
[o:odoo:p:odoo-18-doc:r:websites]
file_filter = locale/<lang>/LC_MESSAGES/websites.po
source_file = locale/sources/websites.pot
type = POT
+1 -1
View File
@@ -27,7 +27,7 @@ SOURCE_DIR = content
HTML_BUILD_DIR = $(BUILD_DIR)/html
ifdef VERSIONS
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/master
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/18.0
endif
ifneq ($(CURRENT_LANG),en)
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/$(CURRENT_LANG)
+3 -8
View File
@@ -22,7 +22,7 @@ copyright = 'Odoo S.A.'
# `version` is the version info for the project being documented, acts as replacement for |version|,
# also used in various other places throughout the built documents.
# `release` is the full version, including alpha/beta/rc tags. Acts as replacement for |release|.
version = release = 'master'
version = release = '18.0'
# `current_branch` is the technical name of the current branch.
# E.g., saas-15.4 -> saas-15.4; 12.0 -> 12.0, master -> master (*).
@@ -231,18 +231,12 @@ sphinx.transforms.i18n.docname_to_domain = (
# is populated. If a version is passed to `versions` but is not listed here, it will not be shown.
versions_names = {
'master': "Master",
'18.0': "Odoo 18",
'saas-17.4': "Odoo Online",
'saas-17.2': "Odoo Online",
'saas-17.1': "Odoo Online",
'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`
@@ -251,6 +245,7 @@ languages_names = {
'de': 'DE',
'en': 'EN',
'es': 'ES',
'es_419': 'ES (LATAM)',
'fr': 'FR',
'it': 'IT',
'ja': 'JA',
@@ -217,6 +217,26 @@ 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
==============
+2 -2
View File
@@ -61,8 +61,8 @@ To resolve the issue:
your **network and firewall settings** allow the Odoo server to open outgoing connections
towards:
- `services.odoo.com` on port `443` (or `80`)
- for older deployments, `services.openerp.com` on port `443` (or `80`)
- Odoo 18.0 and above: `services.odoo.com` on port `443` (or `80`)
- Odoo 17.0 and below: `services.openerp.com` on port `443` (or `80`)
These ports must be kept open even after registering a database, as the update notification runs
once a week.
+15 -21
View File
@@ -31,24 +31,24 @@ This matrix shows the support status of every version.
- On-Premise
- Release date
- End of support
* - Odoo saas~17.4
* - **Odoo 18.0**
- |green|
- |green|
- |green|
- October 2024
- October 2027 (planned)
* - Odoo SaaS 17.4
- |green|
- N/A
- N/A
- July 2024
-
* - Odoo saas~17.2
* - Odoo SaaS 17.2
- |green|
- N/A
- N/A
- April 2024
-
* - Odoo saas~17.1
- |green|
- N/A
- N/A
- January 2024
-
* - **Odoo 17.0**
- |green|
- |green|
@@ -60,31 +60,25 @@ This matrix shows the support status of every version.
- |green|
- |green|
- October 2022
- November 2025 (planned)
- October 2025 (planned)
* - **Odoo 15.0**
- |green|
- |green|
- |green|
- |red|
- |red|
- |red|
- October 2021
- November 2024 (planned)
- October 2024
* - **Odoo 14.0**
- |red|
- |red|
- |red|
- October 2020
- November 2023
* - **Odoo 13.0**
- |red|
- |red|
- |red|
- October 2019
- October 2022
* - Older versions
- |red|
- |red|
- |red|
- Before 2019
- Before 2022
- Before 2020
- Before 2023
.. admonition:: Legend
+3 -3
View File
@@ -4,9 +4,9 @@
Contacts
========
The *Contacts* application comes installed on all Odoo databases. Contacts are created for customers
the company does business with through Odoo. A contact is a repository of vital business
information, facilitating communication and business transactions.
Contacts are created in the **Contacts** application for customers the company does business with
through Odoo. A contact is a repository of vital business information, facilitating communication
and business transactions.
Contact form
============
@@ -193,3 +193,4 @@ Payments` tab. To display the outstanding accounts column, click on the toggle b
bank/reconciliation
bank/reconciliation_models
bank/foreign_currency
bank/loans
@@ -0,0 +1,70 @@
================
Loans management
================
Odoo's loan management gives a comprehensive list of all loans undertaken by your company in order
to maintain a holistic and forecasted view of upcoming due dates (e.g., cash forecast). Set up
amortization schedules—or import them—and let Odoo automatically handle monthly interest and
principal adjustments so that your financial reports are always accurate with minimal effort.
Create a new loan
-----------------
Create a new loan by going to :menuselection:`Accounting --> Accounting --> Loans`. When creating a
new loan, there are three options for how to create amortization schedules:
- importing it from a supported file;
- calculating it from multiple input values (e.g., the :guilabel:`Amount Borrowed`, the
:guilabel:`Duration`, etc.) using the :guilabel:`Compute` button;
- manually filling in the lines of the schedule.
In each case, three different fields are required for each line of the amortization schedule: the
:guilabel:`Date`, the :guilabel:`Principal`, and the :guilabel:`Interest`.
The :guilabel:`Amount Borrowed`, :guilabel:`Interest`, and :guilabel:`Duration` fields will be red
if the sum of the lines does not match the total of the amortization schedule lines.
Loan entries mechanism
----------------------
When the amount borrowed is credited to a bank account, it should be transferred to a long-term
account (defined in the :guilabel:`Loan Settings` tab). Then, upon the validation of the loan, Odoo
creates the necessary journal entries so that there is always a holistic and forecasted view of
upcoming due dates. The entire process is completely automated with a long-term and short-term
principal reclassification mechanism.
For each line of the amortization schedule, Odoo creates the following entries:
A payment entry on the same date that
- debits the principal amount to the long-term account;
- debits the interest amount to the expense account;
- credits the payment amount to the short-term account: this is the amount that will be
withdrawn by the bank.
A reclassification entry on the same date that
- debits the sum of the principal amounts of the next 12 months to the long-term account;
- credits the sum of the principal amounts of the next 12 months to the short-term account.
A reversed entry of the reclassification entry on *the next day* that simply reverses the previous
one.
With this mechanism, month after month, the short-term account is always up to date with the
current short-term due amounts.
Closing a loan
--------------
By default, a loan will be closed whenever its last payment entry is posted. However, it can also
be manually closed (e.g., because it is being paid off early) by clicking on the :guilabel:`Close`
button. A wizard will appear asking from which date the loan should be closed. All draft entries
after this date will be deleted too.
A loan can also be cancelled. In that case, all entries will be deleted even if they were already
posted.
Loans Analysis Report
---------------------
By going to :menuselection:`Accounting --> Reporting --> Loans Analysis`, you can access a
report with a pivot view of your ongoing loans. By default, the report shows the principal,
interest, and total payment for each year for the loan duration.
@@ -33,19 +33,28 @@ Make sure the default settings are correctly configured for your business. To do
Journal
The deferral entries are posted in this journal.
Deferred Expense Account
Expenses are deferred on this Current Asset account until they are recognized.
Deferred Revenue Account
Deferred Revenue
Revenues are deferred on this Current Liability account until they are recognized.
Generate Entries
By default, Odoo :ref:`automatically generates <customer_invoices/deferred/generate_on_validation>`
the deferral entries when you post a customer invoice. However, you can also choose to
:ref:`generate them manually <customer_invoices/deferred/generate_manually>` by selecting the
:guilabel:`Manually & Grouped` option instead.
Amount Computation
Suppose an invoice of $1200 must be deferred over 12 months. The :guilabel:`Equal per month`
computation accounts for $100 each month, while the :guilabel:`Based on days` computation
accounts for different amounts depending on the number of days in each month.
Based on
Suppose an invoice of $1200 must be deferred over 12 months.
- The :guilabel:`Months` option accounts for $100 each month prorated to the number of days in
that month (e.g., $50 for the first month if the :guilabel:`Start Date` is set to the 15th of
the month).
- The :guilabel:`Full Months` option considers each month started to be full (e.g., $100 for the
first month even if the :guilabel:`Start Date` is set to the 15th of the month); this means that
with the :guilabel:`Full Months` option, a full $100 is recognized in the first partial month,
eliminating the need for a 13th month to recognize any remainder as would be the case when using
the :guilabel:`Months` option.
- The :guilabel:`Days` option accounts for different amounts depending on the number of days in
each month (e.g., ~$102 for January and ~$92 for February).
.. _customer_invoices/deferred/generate_on_validation:
@@ -24,8 +24,9 @@ the details.
.. image:: reporting/reporting-annotate.png
:alt: Annotate reports.
To export reports in PDF or XLSX format, click :guilabel:`PDF` or :guilabel:`XLSX` at the top of the
page.
To export reports in PDF or XLSX format, click :guilabel:`PDF` at the top or click the
:icon:`fa-caret-down` (:guilabel:`down arrow`) icon next to the :guilabel:`PDF` button and
select :guilabel:`XLSX`.
To compare values across periods, click the :guilabel:`Comparison` menu and select the periods you
want to compare.
@@ -33,19 +33,28 @@ Make sure the default settings are correctly configured for your business. To do
Journal
The deferral entries are posted in this journal.
Deferred Expense Account
Deferred Expense
Expenses are deferred on this Current Asset account until they are recognized.
Deferred Revenue Account
Revenues are deferred on this Current Liability account until they are recognized.
Generate Entries
By default, Odoo :ref:`automatically generates <vendor_bills/deferred/generate_on_validation>`
the deferral entries when you post a vendor bill. However, you can also choose to
:ref:`generate them manually <vendor_bills/deferred/generate_manually>` by selecting the
:guilabel:`Manually & Grouped` option instead.
Amount Computation
Suppose a bill of $1200 must be deferred over 12 months. The :guilabel:`Equal per month`
computation recognizes $100 each month, while the :guilabel:`Based on days` computation recognizes
different amounts depending on the number of days in each month.
Based on
Suppose a bill of $1200 must be deferred over 12 months.
- The :guilabel:`Months` option accounts for $100 each month prorated to the number of days in
that month (e.g., $50 for the first month if the :guilabel:`Start Date` is set to the 15th of
the month).
- The :guilabel:`Full Months` option considers each month started to be full (e.g., $100 for the
first month even if the :guilabel:`Start Date` is set to the 15th of the month); this means that
with the :guilabel:`Full Months` option, a full $100 is recognized in the first partial month,
eliminating the need for a 13th month to recognize any remainder as would be the case when using
the :guilabel:`Months` option.
- The :guilabel:`Days` option accounts for different amounts depending on the number of days in
each month (e.g., ~$102 for January and ~$92 for February).
.. _vendor_bills/deferred/generate_on_validation:
@@ -17,11 +17,10 @@ Online payments
payment_providers/flutterwave
payment_providers/mercado_pago
payment_providers/mollie
payment_providers/ogone
payment_providers/paypal
payment_providers/razorpay
payment_providers/sips
payment_providers/stripe
payment_providers/worldline
payment_providers/xendit
Odoo embeds several **payment providers** that allow your customers to pay online, on their
@@ -126,18 +125,18 @@ Online payment providers
- Full only
- Full and partial
-
* - :doc:`SIPS <payment_providers/sips>`
- The provider's website
-
-
-
-
* - :doc:`Stripe <payment_providers/stripe>`
- Odoo
- |V|
- Full only
- Full and partial
- |V|
* - :doc:`Worldline <payment_providers/worldline>`
- The provider's website
- |V|
-
-
-
* - :doc:`Xendit <payment_providers/xendit>`
- The provider's website
-
@@ -457,11 +456,10 @@ other payments.
- :doc:`payment_providers/demo`
- :doc:`payment_providers/mercado_pago`
- :doc:`payment_providers/mollie`
- :doc:`payment_providers/ogone`
- :doc:`payment_providers/paypal`
- :doc:`payment_providers/razorpay`
- :doc:`payment_providers/sips`
- :doc:`payment_providers/stripe`
- :doc:`payment_providers/worldline`
- :doc:`payment_providers/xendit`
- :doc:`../websites/ecommerce/checkout_payment_shipping/payments`
- :doc:`accounting/bank`
@@ -1,107 +0,0 @@
=====
Ogone
=====
`Ogone <https://www.ingenico.com/>`_, also known as **Ingenico Payment Services** is a France-based
company that provides the technology involved in secure electronic transactions.
.. seealso::
- :ref:`payment_providers/add_new`
- `Ogone's documentation <https://epayments-support.ingenico.com/get-started/>`_.
.. warning::
The provider Ogone is deprecated. It is recommended to use :doc:`stripe` instead.
Settings in Ogone
=================
Create an API user
------------------
Log into your Ogone account and head to the :guilabel:`Configuration` tab.
You need to create an **API user** to be used in the creation of transactions from Odoo. While you
can use your main account to do so, using an **API user** ensures that if the credentials used in
Odoo are leaked, no access to your Ogone configuration is possible. Additionally, passwords for
**API users** do not need to be updated regularly, unlike normal users.
To create an **API user**, go to :menuselection:`Configuration --> Users` and click on
:guilabel:`New User`. The following fields must be configured:
.. _ogone/ogone:
- :guilabel:`UserID`: you can choose anything you want.
- :guilabel:`User's Name, E-mail and Timezone`: you can enter the information you want.
- :guilabel:`Profile`: should be set to :guilabel:`Admin`.
- :guilabel:`Special user for API`: should be checked.
After the creation of the user, you are required to generate a password. Save the password and
**UserID**, as they will be required later on during the setup.
.. tip::
If you already have an user set up, make sure it is activated without any error. If not, simply
click the :guilabel:`Activate(Errors)` button to reset the user.
Set up Ogone for Odoo
---------------------
Ogone must now be configured to accept payments from Odoo. Head to :menuselection:`Configuration -->
Technical Information --> Global Security Parameters`, select :guilabel:`SHA-512` as
:guilabel:`Hash Algorithm` and :guilabel:`UTF-8` as :guilabel:`character encoding`. Then, go to the
:guilabel:`Data and Origin verification` tab of the same page and leave the URL field of the
:guilabel:`e-Commerce and Alias Gateway` section blank.
.. tip::
If you need to use another algorithm, such as `sha-1` or `sha-256`, within Odoo, activate the
:ref:`developer mode <developer-mode>` and go to the **Payment Providers** page in
:menuselection:`Accounting --> Configuration --> Payment Providers`. Click on :guilabel:`Ogone`,
and in the :guilabel:`Credentials` tab, select the algorithm you wish to use in the
:guilabel:`Hash function` field.
You are now required to generate **SHA-IN** passphrases. **SHA-IN** and **SHA-OUT** passphrases are
used to digitally sign the transaction requests and responses between Odoo and Ogone. By using these
secret passphrases and the `sha-1` algorithm, both systems can ensure that the information they
receive from the other was not altered or tampered with.
Enter the same **SHA-IN** passphrase in both :guilabel:`Checks for e-Commerce & Alias Gateway` and
:guilabel:`Checks for DirectLink and Batch (Automatic)`. You can leave the IP address field blank.
Your **SHA-IN** and **SHA-OUT** passphrases should be different, and between 16 and 32 characters
long. Make sure to use the same **SHA-IN** and **SHA-OUT** passphrases throughout the entire Ogone
configuration, as Odoo only allows a single **SHA-IN** and single **SHA-OUT** passphrase.
In order to retrieve the **SHA-OUT** key, log into your Ogone account, go to
:menuselection:`Configuration --> Technical Information --> Transaction feedback --> All
transaction submission modes`, and get or generate your **API Key** and **Client Key**. Be careful
to copy your API key as youll not be allowed to get it later without generating a new one.
When done, head to :menuselection:`Configuration --> Technical Information --> Transaction Feedback`
and check the following options:
- The :guilabel:`URL` fields for :guilabel:`HTTP redirection in the browser` can be left empty, as
Odoo will specify these URLs for every transaction request.
- :guilabel:`I would like to receive transaction feedback parameters on the redirection URLs`:
should be checked.
- :guilabel:`Direct HTTP server-to-server request`: should to be set to `Online but switch to a
deferred request when the online request fails`.
- Both **URL** fields should contain the same following URL, with `<example>` replaced by your
database: `https://<example>/payment/ogone/return`.
- :guilabel:`Dynamic eCommerce Parameters` should contain the following values: `ALIAS`, `AMOUNT`,
`CARDNO`, `CN`, `CURRENCY`, `IP`, `NCERROR` `ORDERID`, `PAYID`, `PM`, `STATUS`, `TRXDATE`. Other
parameters can be included (if you have another integration with Ogone that requires them), but
are not advised.
- In the :guilabel:`All transaction submission modes` section, fill out **SHA-OUT** passphrase and
disable `HTTP request for status change`.
To allow your customers to save their credit card credentials for future use, head to
:menuselection:`Configuration --> Alias --> My alias information`. From this tab, you can configure
how the user can have its card details saved, for how long the information is saved, if a checkbox
to save the card information should be displayed, etc.
Settings in Odoo
================
To set up Ogone in Odoo, head to :menuselection:`Accounting --> Configuration --> Payment Providers`
and open the Ogone provider. In the :guilabel:`Credentials` tab, enter the **PSPID** of your Ogone
account, and fill out the other fields as configured in your :ref:`Ogone portal <ogone/ogone>`.
@@ -1,32 +0,0 @@
====
SIPS
====
`SIPS <https://sips.worldline.com/>`_ is an online payments solution from the multinational
Worldline.
Configuration
=============
.. seealso::
- :ref:`payment_providers/add_new`
Credentials tab
---------------
Odoo needs your **API Credentials** to connect with your SIPS account, which comprise:
- **Merchant ID**: The ID solely used to identify the merchant account with SIPS.
- **Secret Key**: The key to sign the merchant account with SIPS.
- **Secret Key Version**: The version of the key, pre-filled.
- **Interface Version**: Pre-filled, don't change it.
You can copy your credentials from your SIPS environment info documentation, in the section
**PROD**, and paste them in the related fields under the **Credentials** tab.
.. important::
If you are trying SIPS as a test, with the *TEST* credentials, change the **State** to *Test
Mode*. We recommend doing this on a test Odoo database, rather than on your main database.
.. seealso::
- :doc:`../payment_providers`
@@ -0,0 +1,68 @@
=========
Worldline
=========
`Worldline <https://worldline.com/>`_ is a France-based company and the world's fourth largest
payment provider.
Settings in Worldline
=====================
.. _worldline/API-user:
Create an API user
------------------
It is recommended to set up an **API user** to create transactions from Odoo to ensure that your
Worldline configuration remains safe even if credentials are compromised. Additionally, API users do
not require frequent password updates like regular accounts.
To create an **API user**, proceed as follows:
#. Log into your `Worldline Merchant Portal <https://merchant-portal.preprod.worldline-solutions.com/dashboard>`_,
click the :icon:`fa-th` (:guilabel:`menu`) icon, and select :guilabel:`Back Office`.
#. Go to :menuselection:`Configuration --> Users` and click on :guilabel:`New User`.
#. Configure the following fields:
#. Specify a :guilabel:`UserID`, :guilabel:`User's name`, :guilabel:`E-mail address`, and
:guilabel:`Timezone` of your choice.
#. Set the :guilabel:`Profile` field to :guilabel:`Admin`.
#. Enable :guilabel:`Special user for API`.
.. tip::
If you have already set up a user, make sure it is activated without any error.
.. _worldline/set-up:
Set up Worldline for Odoo
-------------------------
Worldline must now be configured to accept payments from Odoo.
#. From your merchant portal, go to :menuselection:`Developer --> Payment API` and click on
:guilabel:`Generate API key`. Copy the :guilabel:`API key ID` and the :guilabel:`Secret API key`
and save them for :ref:`later <wordline/odoo-configuration>`.
#. Go to :menuselection:`Developer --> Webhooks` and click on :guilabel:`Generate webhook keys`.
Copy the :guilabel:`Webhook ID` and the associated :guilabel:`Secret webhook key` and
save them for :ref:`later <wordline/odoo-configuration>`.
#. | Click :guilabel:`Add webhook endpoint`, enter your Odoo database's URL followed by
`/payment/worldline/webhook` in the :guilabel:`Endpoint url` field, and :guilabel:`Confirm`.
| For example: `https://example.odoo.com/payment/worldline/webhook`.
.. _wordline/odoo-configuration:
Settings in Odoo
================
To set up Worldline in Odoo:
#. :ref:`Navigate to the payment provider Worldline <payment_providers/add_new>` and change its
state to :guilabel:`Enabled`.
#. In the :guilabel:`Credentials` tab, enter the :guilabel:`PSPID` of your Worldline account and
fill in the :guilabel:`API Key`, :guilabel:`API Secret`, :guilabel:`Webhook Key`, and
:guilabel:`Webhook Secret` with the values you saved at the step :ref:`Set up Worldline for
Odoo <worldline/set-up>`.
#. Configure the rest of the options to your liking.
.. seealso::
:doc:`../payment_providers`
@@ -141,7 +141,7 @@ SPF, DKIM and DMARC documentation of common providers
- `GoDaddy CNAME record <https://www.godaddy.com/help/add-a-cname-record-19236>`_
- `NameCheap <https://www.namecheap.com/support/knowledgebase/article.aspx/317/2237/how-do-i-add-txtspfdkimdmarc-records-for-my-domain/>`_
- `CloudFlare DNS <https://support.cloudflare.com/hc/en-us/articles/360019093151>`_
- `Google Domains <https://support.google.com/domains/answer/3290350?hl=en>`_
- `Squarespace DNS records <https://support.squarespace.com/hc/en-us/articles/360002101888-Adding-custom-DNS-records-to-your-Squarespace-managed-domain>`_
- `Azure DNS <https://docs.microsoft.com/en-us/azure/dns/dns-getstarted-portal>`_
To fully test the configuration, use the `Mail-Tester <https://www.mail-tester.com/>`_ tool, which
+2
View File
@@ -174,6 +174,7 @@ document.
- :doc:`appraisals/new_appraisals`
- :doc:`appraisals/goals`
- :doc:`appraisals/appraisal_analysis`
- :doc:`appraisals/skills_evolution`
.. toctree::
:titlesonly:
@@ -181,3 +182,4 @@ document.
appraisals/new_appraisals
appraisals/goals
appraisals/appraisal_analysis
appraisals/skills_evolution
@@ -24,13 +24,12 @@ Each appraisal card displays the following information:
- **Name**: the employee's name.
- **Department**: the department the employee is associated with.
- **Company**: the company the employee works for. This only appears in a multi-company
database.
- **Company**: the company the employee works for. This only appears in a multi-company database.
- **Date**: the date the appraisal was requested, or is scheduled for in the future.
- **Activities**: any :doc:`activities <../../essentials/activities>` that are scheduled for the
appraisal, such as *Meetings* or *Phone Calls*.
- **Manager**: the employee's manager, indicated by the profile icon in the bottom-right
corner of an appraisal card.
- **Manager**: the employee's manager, indicated by the profile icon in the bottom-right corner of
an appraisal card.
- **Status banner**: the status of the appraisal. A banner appears if an appraisal is marked as
either *Canceled* or *Done*. If no banner is present, that means the appraisal has not happened,
or has not been scheduled yet.
@@ -274,8 +273,9 @@ Once the appraisal is marked as *Done*, the :guilabel:`Mark as Done` button disa
button.
Then, click the :guilabel:`Confirm` button that appears, and make any modifications needed. Once
all modifications are complete, click the the :guilabel:`Mark as Done` button again.
all modifications are complete, click the :guilabel:`Mark as Done` button again.
.. seealso::
- :doc:`../appraisals/goals`
- :doc:`../appraisals/appraisal_analysis`
- :doc:`../appraisals/skills_evolution`
@@ -0,0 +1,164 @@
================
Skills evolution
================
In Odoo's **Appraisals** app, it is possible to view employee's skills as they progress over time in
the :ref:`Skills Evolution <appraisals/identify-skills-evolution>` report, also known as the
*Appraisal Skills Report*.
Managers can use this to see who is achieving their various skill goals set on their appraisals, who
is meeting their skill deadlines, who has the highest performance in terms of skill development, and
more.
The *Skills Evolution* report also provides the ability to :ref:`search for employees with specific
skills <appraisals/identify-skills>` at certain levels, which can be helpful for scenarios where
specific skills are required.
.. _appraisals/identify-skills-evolution:
Skills evolution report
=======================
To access this *Skills Evolution* report, navigate to :menuselection:`Appraisals app --> Reporting
--> Skills Evolution`.
Doing so reveals the :guilabel:`Appraisal Skills Report` page, which displays a report of all
skills, grouped by employee, in alphabetical order, by default.
.. note::
Skill levels are **only** updated after an appraisal is marked as done. Any skill level changes
from ongoing appraisals that have **not** been finalized are **not** included in this report.
All the :guilabel:`Employee` lines are expanded, with all the various skill types nested below. Each
individual skill type is collapsed, by default. To view the individual skills contained within a
skill type, click anywhere on the skill type line to expand the data.
Each skill has the following information listed:
- :guilabel:`Employee`: the name of the employee.
- :guilabel:`Skill Type`: the category the skill falls under.
- :guilabel:`Skill`: the specific, individual skill.
- :guilabel:`Previous Skill Level`: the level the employee had previously achieved for the skill.
- :guilabel:`Previous Skill Progress`: the previous percentage of competency achieved for the skill
(based on the :guilabel:`Skill Level`).
- :guilabel:`Current Skill Level`: the current level the employee has achieved for the skill.
- :guilabel:`Current Skill Progress`: the current percentage of competency achieved for the skill.
- :guilabel:`Justification`: any notes entered on the skill, explaining the progress.
The color of the skill text indicates any changes from the previous appraisal. Skill levels that
have increased since the last appraisal appear in green, as an *Improvement*. Skill levels that have
**not** changed appear in black, as *No Change*. Skills that have regressed appear in red, as
*Regression*.
This report can be modified to find specific information by adjusting the :ref:`filters
<search/filters>` and :ref:`groupings <search/group>` set in the search bar at the top.
.. image:: skills_evolution/skills-report.png
:align: center
:alt: A report showing all the skills grouped by employee.
.. _appraisals/identify-skills:
Use case: Identify employees with specific skills
=================================================
Since the :guilabel:`Appraisal Skills Report` organizes all skills by employee, it can be difficult
to find employees with a specific skill at a specific level. To find these employees, a custom
filter must be used.
In this example, the report is modified to show employees with an expert level of Javascript
knowledge. To view only those employees, first remove all active filters in the search bar.
Next, click the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon in the search bar, then click
:guilabel:`Add Custom Filter` beneath the :icon:`fa-filters` :guilabel:`Filters` column to load an
:guilabel:`Add Custom Filter` pop-up window.
Using the drop-down menu in the first field, select :guilabel:`Skill`. Then, keep the second field
as-is, and select :guilabel:`Javascript` from the third drop-down menu in the third field.
Next, click :guilabel:`New Rule`, and another line appears. In this second line, select
:guilabel:`Current Skill Level` for the first drop-down field, leave the second field as-is, then
select :guilabel:`Expert` for the third drop-down field.
After the :guilabel:`New Rule` button is clicked, the word :guilabel:`"any"` in the sentence
:guilabel:`Match any of the following rules:`, changes from plain text into a drop-down menu. Click
the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon after the word :guilabel:`any`, and select
:guilabel:`all`.
Finally, click the :guilabel:`Add` button.
.. image:: skills_evolution/javascript.png
:align: center
:alt: The Custom Filter pop-up with the parameters set.
Now, only employees that have an :guilabel:`Expert` level for the skill :guilabel:`Javascript`
appear. In this example, only :guilabel:`Marc Demo` meets these criteria.
.. image:: skills_evolution/results.png
:align: center
:alt: The employees with expert Javascript skills.
Use case: Assess highest improvement
====================================
Another way to modify the :guilabel:`Appraisal Skills Report` is to identify the employee who has
the highest amount of improved skills over a specific period of time.
To view this information, first remove the default filter in the search bar. Next, click the
:icon:`fa-caret-down` :guilabel:`(down arrow)` icon in the search bar, then click
:guilabel:`Improvement` beneath the :icon:`fa-filter` :guilabel:`Filters` column. Enabling this
filter only presents skills that have improved.
It is possible to view the skills that have improved over a period of time, such as a specific
quarter, or month. With the search bar drop-down menu still expanded, click :guilabel:`Add Custom
Filter` at the bottom of the :icon:`fa-filter` :guilabel:`Filters` column, and an :guilabel:`Add
Custom Filter` pop-up window appears.
Select :guilabel:`Create Date` for the first drop-down field, then select :guilabel:`is between` for
the second drop-down field. Once :guilabel:`is between` is selected, a second field appears after
the last field. Using the calendar selector, select the date range to apply the filter to. Once all
the fields are properly formatted, click :guilabel:`Add`.
The custom filter presents only the skills that have improved during the specified time period,
organized by employee.
.. example::
To determine the employee with the most amount of improved skills for the third quarter, remove
the default filter in the search bar of the :guilabel:`Appraisal Skills Report`. Next, activate
the :guilabel:`Improvement` filter, then click :guilabel:`Add Custom Filter` at the bottom of the
:icon:`fa-filter` :guilabel:`Filters` column.
In the resulting :guilabel:`Add Custom Filter` pop-up window, select :guilabel:`Create Date` for
the first drop-down field, then select :guilabel:`is between` for the second drop-down field. Two
date fields appear after :guilabel:`is between` is selected.
Using the calendar selector, set the first date to :guilabel:`07/01/2024` and the second date to
:guilabel:`09/30/2024`, then click :guilabel:`Add`.
These filters present only the skills that have improved during the third quarter (between July
1st and September 30th, 2024), organized by employee.
.. image:: skills_evolution/custom-filter.png
:alt: The Custom Filter pop-up with the parameters set.
To view the number of employees and skills in further detail, click the :icon:`oi-view-pivot`
:guilabel:`(Pivot)` icon in the top-right corner to view the data in a pivot table. This presents a
pivot table with the employees populating the rows, and the only visible column represents the total
number of improved skills.
To expand more rows or columns to view which skill types had the most overall improvement, click
:icon:`fa-plus-square` :guilabel:`Total` above the :guilabel:`Count` column, then click
:guilabel:`Skill Type` from the resulting drop-down menu. This organizes the total improved skills
by their respective skill type.
.. example::
In this example, it is determined that :guilabel:`Charles Reginald` had the largest improvement
in the third quarter, with six improved skills. Additionally, they also had the most skill
improvements for both :guilabel:`Languages` (three) and :guilabel:`Programming Languages` (two).
.. image:: skills_evolution/largest-improvement.png
:alt: The pivot table showing the skill improvements for the third quarter.
.. seealso::
- :doc:`Odoo essentials reporting <../../essentials/reporting>`
- :doc:`../../essentials/search`
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

+2
View File
@@ -13,4 +13,6 @@ Odoo *Employees* organizes a company's employee records, contracts, and departme
employees/new_employee
employees/departments
employees/certifications
employees/offboarding
employees/retention_report
@@ -0,0 +1,117 @@
==============
Certifications
==============
When jobs require specific knowledge, it is necessary to track employee certifications to ensure the
necessary knowledge and certifications are in place.
Certifications include classes, tests, professional seminars, and more. There are no restrictions in
terms of what type of certification records can be added in Odoo.
.. important::
To access the *Employee Certifications* report, the **Surveys** app **must** be installed.
View certifications
===================
To view a full list of all employee certifications, navigate to :menuselection:`Employees app -->
Reporting --> Certifications`.
All certifications appear in a list view, grouped by employee. Each certification entry displays the
following:
- :guilabel:`Employee`: the employee's name, along with their avatar image.
- :guilabel:`Name`: the title of the certification.
- :guilabel:`Validity Start`: when the employee received the certification.
- :guilabel:`Validity End`: when the certification expires.
- :guilabel:`Certification`: the corresponding course in the **Surveys** app that was completed by
the employee, if applicable.
The entries are also color-coded. Current certifications that are still valid appear in black,
expired certifications appear in red, and certifications that are going to expire within the next
90 days appear in orange.
.. image:: certifications/certifications.png
:align: center
:alt: The list of employee certifications.
.. important::
**Only** certification records with the *Display Type* set to *Certification* on their
:ref:`certification form <employees/certifications-form>` appear on the :guilabel:`Employee
Certifications` report. All other certifications appear in the resume section of the
:doc:`employee form <new_employee>`.
View certifications by expiration status
----------------------------------------
When managing a large number of employees with a variety of certifications, it can be difficult to
determine which employees need to keep necessary certifications current in the default list view. In
this scenario, it is beneficial to view the certifications by expiration status.
To do so, navigate to :menuselection:`Employees app --> Reporting --> Certifications`. Next, click
the :icon:`fa-caret-down` :guilabel:`(down arrow)` in the search bar, then click :guilabel:`Add
Custom Group`, revealing a drop-down menu. Click :guilabel:`Expiration Status`, then click away from
the drop-down menu to close it.
After doing so, all the certifications are organized by status, starting with :guilabel:`Expired`
certifications, then certifications that are :guilabel:`Expiring` soon (within the next 90 days),
and lastly, certifications that are still :guilabel:`Valid`.
This view provides an easy way to see which employees have certifications that are going to expire
soon, to determine which employees need to take action to keep their certifications current.
.. image:: certifications/status.png
:align: center
:alt: The list of employee certifications, grouped by status.
.. _employees/certifications-form:
Log a certification
===================
To log a certification for an employee, navigate to :menuselection:`Employees app --> Reporting -->
Certifications`. Click :guilabel:`New`, and a blank certification form loads. Enter the following
information on the form:
- :guilabel:`Title`: Enter a short description for the certification in this field.
- :guilabel:`Employee`: Using the drop-down menu, select the employee who received the
certification.
- :guilabel:`Type`: Using the drop-down menu, select the type of certification received. This field
determines where on the employee's resume the certification appears. To create a new
:guilabel:`Type`, enter the type in the field, then click :guilabel:`Create "type"`.
The default options are:
- :guilabel:`Experience`: Select this option to have the certification appear in the *Experience*
section of the *Resume* tab on the :doc:`employee form <new_employee>`.
- :guilabel:`Education`: Select this option to have the certification appear in the *Education*
section of the *Resume* tab on the :doc:`employee form <new_employee>`.
- :guilabel:`Internal Certification`: Select this option to have the certification appear in the
*Internal Certification* section of the *Resume* tab on the :doc:`employee form <new_employee>`.
- :guilabel:`Completed Internal Training`: Select this option to have the certification appear in
*Completed Internal Training* section of the *Resume* tab on the :doc:`employee form
<new_employee>`.
- :guilabel:`Display Type`: Select the visibility of the certification in this field. The default
options are:
- :guilabel:`Classic`: Select this option to have the certification appear in the *Resume* section
of the employee form, and **not** appear on the *Employee Certifications* report.
- :guilabel:`Course`: Select this option to have the certification appear in the *Resume* section
of the employee form, and **not** appear on the *Employee Certifications* report. Once this
option is selected, a :guilabel:`Course` field appears beneath the :guilabel:`Display Type`
field. Using the drop-down menu, select the course the employee took. The course is created in
the **Surveys** app.
- :guilabel:`Certification`: Select this option to have the certification appear in the *Resume*
section of the employee form, **and** appear on the *Employee Certifications* report. Once this
is selected, a :guilabel:`Certification` field appears beneath the :guilabel:`Display
Type` field. Using the drop-down menu, select the certification the employee took.
- :guilabel:`Description`: Enter a description for the certification in this field.
- :guilabel:`Duration`: Click into the first field, and a calendar pop-over window appears. Click on
the start and end dates for the certification validity period. When the correct dates are
selected, click :icon:`fa-check` :guilabel:`Apply`, and both fields are populated.
.. image:: certifications/osha.png
:align: center
:alt: A certification form filled out for an OSHA certificate for construction.
Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

@@ -0,0 +1,103 @@
=========================
Employee retention report
=========================
It is possible to determine the retention rate for a company by modifying an existing report.
First, navigate to :menuselection:`Employees app --> Reporting --> Contracts` to open the
:guilabel:`Employee Analysis` report. This report shows the number of all employees for the
:guilabel:`Last 365 Days`, in a default :icon:`fa-line-chart` :guilabel:`Line Chart`.
.. image:: retention_report/employees-analysis.png
:align: center
:alt: The default Employees Analysis report.
Next, click the :guilabel:`Measures` :icon:`fa-caret-down` button in the upper-left corner,
revealing a drop-down menu. Click :guilabel:`# Departure Employee` in the list, then click away from
the drop-down menu to close it. Now, the report shows all the employees who were archived for the
:guilabel:`Last 365 Days`.
To view this information in an easier format, click the :icon:`oi-view-pivot` :guilabel:`(Pivot)`
icon in the upper-right corner, and the data is presented in a pivot table.
The various employees, organized by department, populate the rows. The columns display the following
totals: the monthly :guilabel:`Wage`, the :guilabel:`Fuel Card` budget, total :guilabel:`Annual
Employee Budget` (also referred to as the *annual salary*), the number of :guilabel:`New Employees`,
as well as the number of :guilabel:`Departure Employees` (employees who left).
.. image:: retention_report/pivot-departures.png
:align: center
:alt: The Employees Analysis report, modified to show departed employees only.
Employee retention rate comparison report
=========================================
It is possible to compare data only for employees who left, compared to the total current employees,
between two separate time periods. This is commonly referred to as the *employee retention rate*.
To view these metrics, first open the :guilabel:`Employee Analysis` report by navigating to
:menuselection:`Employees app --> Reporting --> Contracts`. Click the :icon:`oi-view-pivot`
:guilabel:`(Pivot)` icon in the upper-right corner to view the information in a pivot table.
Next, click the :guilabel:`Measures` :icon:`fa-caret-down` button in the upper-left corner,
revealing a drop-down menu. Click :guilabel:`# New Employees`, :guilabel:`Annual Employee Budget`,
:guilabel:`Fuel Card`, and :guilabel:`Wage` in the list, to deselect these metrics and hide them in
the table. Then, click :guilabel:`Count` at the bottom of the list to enable that metric.
Click away from the drop-down menu to close it. Now, the report shows all the employees who left the
company (:guilabel:`# Departure Employee`), as well as the total number of employees
(:guilabel:`Count`), for the :guilabel:`Last 365 Days`.
To compare the data for the current year with the previous year, click the :icon:`fa-caret-down`
:guilabel:`(down arrow)` in the search bar, revealing multiple filter and grouping options. Click
:guilabel:`Last 365 Days` in the :icon:`fa-filter` :guilabel:`Filters` column, to turn off that
filter. Then, click :guilabel:`Date`, and click the current year (in this example, :guilabel:`2024`)
from the resulting drop-down menu.
Once a selection is made beneath :guilabel:`Date` in the :icon:`fa-filter` :guilabel:`Filters`
column, a :icon:`fa-adjust` :guilabel:`Comparison` column appears. Click :guilabel:`Date: Previous
Year` in the new column, then click off of the drop-down menu to close it.
.. note::
In Odoo, in order to access the :icon:`fa-adjust` :guilabel:`Comparison` column, a specific time
*other than* :guilabel:`Last 365 Days` **must** be selected. If not, the :icon:`fa-adjust`
:guilabel:`Comparison` column is **not** visible.
Now, the pivot table displays the total number of employees who left the company (:guilabel:`#
Departure Employee`), as well as the total number of employees (:guilabel:`Count`) in the columns.
These are further divided by the two different years, and also displays the :guilabel:`Variation`
between the two.
The rows display the departments, and lists each individual employee for each department, in the
rows.
For a more concise view of this report, click :icon:`fa-minus-square-o` :guilabel:`Total` above the
top row of the departments and employees, to collapse the rows. Now, the table presents the total
number of employees who left the company for both years, compared to the total number of employees
for both years, including the difference, in a percentage.
.. example::
In this example, :guilabel:`3` employees out of :guilabel:`83` left in 2023, and :guilabel:`8`
employees out of :guilabel:`202` left in 2024. There was a :guilabel:`166.67%` increase in the
employees who left in 2024 as compared to 2023. Additionally, there was a :guilabel:`143.37%`
increase in the total number of employees in 2024 as compared to 2023.
.. image:: retention_report/comparison-years.png
:align: center
:alt: The report modified to show the difference between two years of employees who left.
To view more detailed rates for each department, click :icon:`fa-plus-square` :guilabel:`Total` in
the single row, revealing a drop-down menu, and click :guilabel:`Department`. Click away from the
drop-down to close it, and now the pivot table displays the total number of employees who left
(:guilabel:`# Departure Employee`), the total number of employees (:guilabel:`Count`), and the
:guilabel:`Variation` (in a percentage) for both 2023 and 2024, organized by department.
.. example::
In this example, it can be determined that the :guilabel:`Management` department had the best
retention rate in 2024 as compared to 2023, with a :guilabel:`Variation` rate of
:guilabel:`-100%`. Additionally, it can be determined that the :guilabel:`Management / Research &
Development` department had the most turnover, with a :guilabel:`Variation` of :guilabel:`300%`.
.. image:: retention_report/department-totals.png
:align: center
:alt: The expanded employee retention report by department.
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

+2
View File
@@ -963,6 +963,7 @@ form.
- :doc:`payroll/payslips`
- :doc:`payroll/work_entries`
- :doc:`payroll/reporting`
- :doc:`payroll/work_entry_analysis`
.. toctree::
:titlesonly:
@@ -971,3 +972,4 @@ form.
payroll/work_entries
payroll/payslips
payroll/reporting
payroll/work_entry_analysis
+4 -56
View File
@@ -178,63 +178,11 @@ spreadsheet view with the report added to it.
.. _payroll/doc-storage:
.. note::
If the *Documents* app is **not** installed, the :guilabel:`Insert in Spreadsheet` option places
the newly-created spreadsheet in the *Dashboards* app.
If the **Documents** app is **not** installed, the :guilabel:`Insert in Spreadsheet` option
places the newly-created spreadsheet in the **Dashboards** app.
If the *Documents* application **is** installed, the spreadsheet has the option to be stored in
either the *Dashboards* app or *Documents* app.
Work entry analysis
-------------------
The default :guilabel:`Work entry analysis` report provides an overview of the validated work
entries for the current month. To view this report, navigate to :menuselection:`Payroll app -->
Reporting --> Work Entry Analysis`.
The work entries appear in a pivot table, with the default filters of `Current month: (Month)(Year)`
and `Validated`. The various types of :doc:`work_entries` are listed on the left-hand side (x-axis),
while the :guilabel:`Total` values appear along the top (the y-axis).
To change the displayed view, click the :guilabel:` (plus)` icon next to the word
:guilabel:`Total`, then click on one of the grouping options. The available options are
:guilabel:`Work Entry Type`, :guilabel:`Employee`, and :guilabel:`Department`. If in a multi-company
database, a :guilabel:`Company` option also appears.
To add a new group to sort the data, click :guilabel:`Add Custom Group`, then click one of the
presented options.
.. tip::
Wherever a :guilabel:` (plus)` icon appears on a pivot table, the information can be further
grouped. Click on a :guilabel:` (plus)` icon to reveal the available grouping options.
Click on a :guilabel:` (minus)` icon anywhere on the pivot table to remove that respective
grouping.
It is possible to compare the current :guilabel:`Work entry analysis` report to the previous month
or the previous year. To view these comparisons, click the :guilabel:`⬇️ (down arrow)` icon in the
search bar to reveal the various :ref:`filter <payroll/filters>` and grouping options.
In the section titled :guilabel:`Comparison`, click on either :guilabel:`Current Month: Previous
Period` or :guilabel:`Current Month: Previous Year`. The report updates and displays the previous
time period values, as well as the :guilabel:`Variation` between the two.
.. image:: reporting/work-entry-comparison.png
:align: center
:alt: A pivot table comparing the work entries of the current month and the previous month.
To export the data in an XLSX format, click the :guilabel:`Download xlsx` button, represented by a
:guilabel:`⬇️ (down arrow above a horizontal bar)` icon, located at the far-right of the available
icons. The information is then downloaded into a spreadsheet.
The data can also be inserted into a spreadsheet. Click the :guilabel:`Insert in Spreadsheet` button
and a :guilabel:`Select a spreadsheet to insert your (type of report)` pop-up window appears, asking
which spreadsheet to place the information in. Select an existing spreadsheet or dashboard, or
select a new :guilabel:`Blank spreadsheet`. Click the :guilabel:`Confirm` button to move to a
spreadsheet view with the report added to it.
.. note::
The work entry analysis spreadsheet is :ref:`stored in the same locations <payroll/doc-storage>`
as a pivot table.
If the **Documents** application *is* installed, the spreadsheet has the option to be stored in
either the **Dashboards** app or **Documents** app.
Salary attachment report
------------------------
Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

@@ -59,8 +59,8 @@ Enter the following information on the form:
this field is left blank, it automatically populates once an employee is selected. The default
entry is `Attendance: (Employee)`.
- :guilabel:`Employee`: select the employee the work entry is for, using the drop-down menu.
- :guilabel:`Work Entry Type`: select the :ref:`work entry type <payroll/work-entries-config>` using
the drop-down menu.
- :guilabel:`Work Entry Type`: select the :ref:`work entry type <payroll/work-entries>` using the
drop-down menu.
- :guilabel:`From` and :guilabel:`To`: enter the start (:guilabel:`From`) and end (:guilabel:`To`)
dates and times for the work entry.
@@ -0,0 +1,80 @@
===================
Work entry analysis
===================
The default *Work Entries Analysis* report provides an overview of the validated work entries for
the current month. To view this report, navigate to :menuselection:`Payroll app --> Reporting -->
Work Entry Analysis`.
The work entries appear in a pivot table, with the default filters of :guilabel:`Current month:
(Month)(Year)` and :guilabel:`Validated`. The various types of :doc:`work_entries` populate the
rows, while the :guilabel:`Total` values populate the only visible column.
To change the displayed information, click :icon:`fa-plus-square` :guilabel:`Total` above the main
column, revealing a drop-down menu of available metrics. Click on one of the available groupings,
and the data is further organized by that selected metric. The default options are :guilabel:`Work
Entry Type`, :guilabel:`Employee`, and :guilabel:`Department`. If in a multi-company database, a
:guilabel:`Company` option also appears.
Work entry analysis comparison
==============================
It is possible to compare the work entries from one time period to a previous time period. To view
this comparison, first navigate to :menuselection:`Payroll app --> Reporting --> Work Entry
Analysis`.
Next, click the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon in the search bar, revealing a
drop-down menu. Under the :icon:`fa-adjust` :guilabel:`Comparison` section, click on either
:guilabel:`Current Month: Previous Period` or :guilabel:`Current Month: Previous Year`.
The report updates and displays the data for the current time period, data for the selected previous
time period, as well as the :guilabel:`Variation` between the two, in a percentage.
.. image:: work_entry_analysis/work-entry-comparison.png
:alt: A pivot table comparing the work entries of the current month and the previous month.
.. note::
If no work entries for a specific :ref:`work entry type <payroll/work-entries>` are logged for
the time period, it does **not** appear on the report. That does **not** mean the work entry type
does not exist, or is not configured.
Additionally, if the default :guilabel:`Current month: (Month)(Year)` filter is removed from the
search bar, the :guilabel:`Comparison` column does **not** appear; there must be a time-frame
selected to view the :guilabel:`Comparison` column.
Use case: overtime report comparison
====================================
It is possible to alter the *Work Entries Analysis* report to show a comparison of only overtime
work entries, grouped by employee, for a specific time period. To view this data, first navigate to
the default *Work entry analysis* report by going to :menuselection:`Payroll app --> Reporting -->
Work Entry Analysis`.
Next, click the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon in the search bar, revealing a
drop-down menu. Under the :icon:`fa-filter` :guilabel:`Filters` column, click :guilabel:`Add Custom
Filter`, and a :guilabel:`Add Custom Filter` pop-up window appears.
Using the drop-down menu, select :guilabel:`Work Entry Type` for the first field, leave the middle
field as-is (with :guilabel:`is in` populating the field), and select :guilabel:`Overtime Hours` for
the last field. Click :guilabel:`Add`, and all other work entry types disappear, and
:guilabel:`Overtime Hours` appear in the sole row.
To compare overtime from the current month to the previous month, to see which month had more
overtime logged, click the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon again in the search
bar. Under the :icon:`fa-adjust` :guilabel:`Comparison` section, click :guilabel:`Current Month:
Previous Period`. Click away from the drop-down menu to close it.
Now, the report displays the :guilabel:`Overtime Hours` for the current month and the previous
month, along with the :guilabel:`Variation`, in a percentage.
To view which employees received the most overtime, click :icon:`fa-plus-square` :guilabel:`Overtime
Hours`, revealing a drop-down menu of options. Click :guilabel:`Employee`, and all employees with
overtime work entries for either the current or previous month appears.
In this example, it can be determined that :guilabel:`Marc Demo` worked the most overtime in
:guilabel:`August 2024`, whereas :guilabel:`Beth Evans` worked the most overtime hours in
:guilabel:`September 2024`. Additionally, :guilabel:`Mitchell Admin` had the largest variation
change, with a :guilabel:`-100%` change from :guilabel:`August 2024` to :guilabel:`September 2024`.
.. image:: work_entry_analysis/variation.png
:alt: A pivot table comparing the overtime from September 2024 with August 2024.
Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

@@ -167,6 +167,8 @@ warehouse. Next, in the :guilabel:`Applicable on` section, tick the :guilabel:`P
Route with "Packagings" selected, with "Products" and "Warehouses" not selected.
.. _inventory/product_management/route-on-packaging:
Apply route on packaging
------------------------
@@ -10,3 +10,4 @@ Inventory valuation
inventory_valuation/inventory_valuation_config
inventory_valuation/using_inventory_valuation
inventory_valuation/integrating_landed_costs
inventory_valuation/valuation_by_lots
@@ -108,6 +108,8 @@ available during a prior specified date can be seen and selected.
the teal :guilabel:`➡️ (right arrow)` button to the right of the :guilabel:`Reference` column
value.
.. _inventory/product_management/update-unit-price:
Update product unit price
-------------------------
@@ -0,0 +1,208 @@
================================
Valuation by lots/serial numbers
================================
Track :doc:`inventory valuation <using_inventory_valuation>` by :doc:`lots or serial numbers
<../../product_management/product_tracking>` to:
#. :ref:`Compare and differentiate purchasing cost <inventory/product_management/view-valuation>`,
based on lot or serial numbers.
#. Track the actual cost of manufactured products, based on the real cost of each tracked component
used.
#. Depreciate specific lot or serial numbers when they :doc:`sit in stock for too long
<../../warehouses_storage/reporting/aging>`.
.. important::
Please read this :doc:`introduction to inventory valuation <inventory_valuation_config>` before
setting up valuation by lot/serial numbers.
Configuration
=============
To enable valuation by lots or serial numbers, begin by enabling the :doc:`Lots and Serial Numbers
feature <../product_tracking>`. After that, go to :menuselection:`Inventory app --> Products -->
Products`, and select the desired product, or create a new product, by clicking :guilabel:`New`.
On the product form, in the :guilabel:`Category` field, choose a product category. Ensure the
product category's :ref:`Costing Method <inventory/warehouses_storage/costing_methods>` is set to
*First In First Out (FIFO)* or *Average Cost (AVCO)*.
.. tip::
To check the costing method set on the product category, hover over the :guilabel:`Category`
field, and click the :icon:`oi-arrow-right` :guilabel:`(Internal Link)` icon.
.. seealso::
:ref:`Costing methods <inventory/warehouses_storage/costing_methods>`
Next, activate the product to be tracked by lots or serial numbers by ticking the :guilabel:`Track
Inventory` checkbox. Then, click the adjacent field that appears, and choose either :guilabel:`By
Lots` or :guilabel:`By Unique Serial Number` from the resulting drop-down menu.
Doing so makes the :guilabel:`Valuation by Lot/Serial number` checkbox appear below it. Tick that
checkbox, and the configuration to track valuation by lot or serial numbers is complete.
.. figure:: valuation_by_lots/product-form.png
:alt: Product form showing the Valuation by Lot or Serial Number feature.
Product form showing the Valuation by Lot or Serial Number feature
Valuation layers
================
To understand how valuation by lots and serial numbers works, consider these scenarios:
#. :ref:`Purchase and sell products <inventory/product_management/valuation-cost-example>`: cost is
calculated based on the *product category's* costing method.
#. :ref:`Create new lot/serial numbers <inventory/product_management/valuation-cost-new>` using an
inventory adjustment: value of the new lot/serial number is assigned to the cost from the product
form.
#. Inventory adjustment to update quantities for an :ref:`existing lot/serial number
<inventory/product_management/valuation-cost-existing>`: value is assigned based on the most
recent cost for that lot/serial number.
For both :abbr:`AVCO (Average Cost)` and :abbr:`FIFO (First In First Out)` methods, the *Cost* field
on the product form is calculated using this formula:
:math:`Avg~Cost = \frac{Total~Value}{Total~Qty}`
.. _inventory/product_management/valuation-cost-example:
Purchase products
-----------------
Consider how purchasing products affect the inventory valuation, in the table below.
.. list-table::
:header-rows: 1
:stub-columns: 1
* -
- Quantity
- Lot number
- Math
- Average cost on product form
* - Empty stock
- 0.00
-
-
- $0
* - Day 1: Receive one product at $10/unit
- 1.00
- LOT 1
- :math:`\frac{10}{1}`
- $10
* - Day 2: Receive another product at $20/unit
- 1.00
- LOT 2
- :math:`\frac{10+20}{2}`
- $15
.. figure:: valuation_by_lots/lip-gloss.png
:alt: Show Cost on the product form.
As a result, the product form displays an average cost of $15 in the **Cost** field.
.. _inventory/product_management/valuation-cost-new:
Create new lot/serial number
----------------------------
Creating a new lot/serial number through an :doc:`inventory adjustment
<../../warehouses_storage/inventory_management/count_products>` assigns the same value as the cost
on the product form.
To make an inventory adjustment, and assign a lot number, go to :menuselection:`Inventory app -->
Operations --> Physical Inventory`. Then, click :guilabel:`New`.
In the new inventory adjustment line that appears, set the :guilabel:`Product`, create the
:guilabel:`Lot/Serial Number`, set the :guilabel:`Counted Quantity`, and click :icon:`fa-floppy-o`
:guilabel:`Apply`.
To view the valuation layer, go to :menuselection:`Inventory app --> Reporting --> Valuation`. The
:guilabel:`Total Value` per unit matches the *Cost* on the product form.
.. example::
Continuing the example in the table above, when the product cost is `$15`, the valuation for a
newly-created `LOT3` is also be `$15`.
.. image:: valuation_by_lots/create-new.png
:alt: Show inventory adjustment valuation.
.. _inventory/product_management/valuation-cost-existing:
Existing lot/serial number
--------------------------
When adjusting the quantity of an existing lot/serial number, the value is based on the most recent
valuation layer for that specific lot/serial number.
.. example::
Continuing the example in the table above, the value for `LOT 1` is `$10`.
So, when the quantity is updated from `1.00` to `2.00`, the additional quantity is also valued at
`$10`, reflecting the latest valuation layer for `LOT 1`.
.. figure:: valuation_by_lots/existing.png
:alt: Show valuation of LOT 1 getting updated.
The inventory adjustment (top line) is valued the same as LOT 1 (bottom line).
.. _inventory/product_management/view-valuation:
View valuation
==============
To find the average cost of a specific lot/serial number, go to :menuselection:`Inventory app -->
Products --> Lots/Serial Numbers`, and select the desired record.
Both the :guilabel:`Cost` and :guilabel:`Average Cost` fields show a unit's average cost. The
:guilabel:`Total Value` reflects the total on-hand value for that lot/serial number.
.. important::
Ensure the costing method is set to *First In First Out (FIFO)* or *Average Cost (AVCO)* to
display the cost on this page.
.. figure:: valuation_by_lots/lot.png
:alt: Show cost of the lot/serial number.
Lot form, displaying **Cost** field. The **Valuation** smart button is in the top-right.
Valuation layers of a lot/serial number can be viewed through the :ref:`valuation report
<inventory/product_management/valuation-report>`, or by clicking the lot/serial number's
:guilabel:`Valuation` smart button. These detailed, line-by-line records can help determine how each
inventory move of the specific lot/serial number affects its valuation.
.. _inventory/product_management/valuation-report:
Valuation report
----------------
Display the valuation of lots and serial numbers in the database by going to
:menuselection:`Inventory app --> Reporting --> Valuation`.
On the resulting :guilabel:`Stock Valuation` report, click the search bar, and in the
:icon:`oi-group` :guilabel:`Group By` section of the resulting drop-down menu, select
:guilabel:`Lot/Serial number`.
.. tip::
Click the :icon:`fa-plus` :guilabel:`(plus)` icon to the right of a collapsed lot number line to
:ref:`manually modify the cost <inventory/product_management/update-unit-price>`.
This is useful for adjusting individual lot prices when a purchase order or bill includes
multiple lots/serial numbers, as initial prices are identical upon reception.
.. image:: valuation_by_lots/stock-valuation.png
:alt: Show valuation report, by lots.
Valuation smart button
----------------------
To access a filtered part of the *Stock Valuation* report, specific to a lot or serial number, go to
:menuselection:`Inventory app --> Products --> Lots/Serial Numbers`, and select the desired item.
On the :guilabel:`Lot/Serial Numbers` page, click the :guilabel:`Valuation` smart button.
.. figure:: valuation_by_lots/lot-stock-valuation.png
:alt: All stock moves relating to `LOT 1`.
All stock moves that affect the valuation of `LOT 1`.
@@ -104,7 +104,6 @@ quantities with that assigned number. For unique serial numbers that are *not* r
:titlesonly:
product_tracking/serial_numbers
product_tracking/create_sn
product_tracking/lots
product_tracking/reassign
product_tracking/expiration_dates
@@ -1,204 +0,0 @@
=====================
Assign serial numbers
=====================
Assigning serial numbers to individual products allows the for tracking of properties,
:doc:`expiration dates <expiration_dates>`, and location throughout the supply chain, which
particularly benefits manufacturers providing after-sales services.
.. seealso::
- `Odoo Tutorials: Serial Numbers <https://www.youtube.com/watch?v=ZP-gMz2X5AY>`_
- :doc:`serial_numbers`
In Odoo, serial numbers are assigned to products:
- in the :ref:`Detailed Operations page <inventory/product_management/detailed-operations>` on a
receipt
- by clicking the :ref:`Assign Serial Numbers <inventory/product_management/assign-sn>` button on a
receipt
- in the :ref:`Open: Stock move window <inventory/product_management/stock-move-section>` on a
receipt
- :doc:`during a manufacturing order
<../../../manufacturing/basic_setup/configure_manufacturing_product>` for a product tracked by
lot/serial numbers
- when making an inventory adjustment
.. _inventory/product_management/detailed-operations-popup:
.. figure:: create_sn/assign-serial-numbers.png
:align: center
:alt: Display the Detailed Operations smart button and bulleted list icon on a receipt.
Display the **Detailed Operations** smart button and bulleted list icon on a receipt.
Configuration
=============
To assign serial numbers to products, activate the :guilabel:`Lots and Serial Numbers` feature in
:menuselection:`Inventory app --> Configuration --> Settings`.
Then, in the :guilabel:`Inventory` tab of an item's product form, set the :guilabel:`Tracking` field
to :guilabel:`By Unique Serial Number`.
.. seealso::
- :ref:`Enable serial numbers <inventory/product_management/enable-lots>`
- :ref:`Track products by serial numbers <inventory/product_management/configure-lots>`
.. _inventory/product_management/configure-new-serials:
Next, enable creating new serial numbers by going to :menuselection:`Inventory app --> Configuration
--> Operations Types`.
From the :guilabel:`Operations Types` page, select the desired operation type (e.g.
:guilabel:`Receipts`, :guilabel:`Delivery Orders`, or :guilabel:`Manufacturing`), and select the
:guilabel:`Create New` option in the :guilabel:`Lots/Serial Numbers` section of the operation type's
configuration page.
.. image:: create_sn/create-new.png
:align: center
:alt: Show "Create New" option is selected on the Receipts operation type.
.. _inventory/product_management/detailed-operations:
Detailed Operations
===================
Serial numbers can be assigned to products when entering stock for the first time, from the
:guilabel:`Detailed Operations` page on the receipt. Receipts can be accessed by navigating to
:menuselection:`Inventory app --> Operations --> Receipts`.
.. important::
Serial numbers can **not** be assigned to products on a request for quotation (RfQ) or purchase
order (PO) — **only** on a receipt.
.. figure:: create_sn/purchase-order-or-receipt.png
:align: center
:alt: Show the purchase order and the Receipt smart button
Screenshot of a "Purchase Order" with the "Receipt" smart button at the top.
To record an item's serial number before receiving the item, follow the steps in the next
sections to assign serial numbers, but do **not** click the receipt's :guilabel:`Validate`
button, until the products are received from the vendor.
Assign a single serial number to a product by clicking the :guilabel:`Detailed Operations` smart
button on a receipt.
In the :guilabel:`Lot/Serial Number Name` column, manually type in the serial number for a single
product.
.. image:: create_sn/add-a-line.png
:align: center
:alt: Add a line on the Detailed Operations page to assign serial numbers.
When finished, click the receipt's breadcrumbs, and the assigned serial numbers are automatically
saved.
.. _inventory/product_management/assign-sn:
Assign serial numbers
=====================
To generate new serial numbers in a sequence, click the :guilabel:`+ (plus)` icon in the
:ref:`product line <inventory/product_management/detailed-operations-popup>`.
.. image:: create_sn/plus-icon.png
:align: center
:alt: Show the plus icon in the product line.
.. important::
If the icon is not visible, ensure the :guilabel:`Create New` option is selected in the
:ref:`receipt's configuration page <inventory/product_management/configure-new-serials>`.
Doing so opens the :guilabel:`Assign Serial Numbers` pop-up window. The :guilabel:`Number of SN`
field is auto-filled based on the product quantity requiring serial numbers. Manually input the
first serial number in the :guilabel:`First SN` field, and click :guilabel:`Assign Serial Numbers`
to generate a sequence of serial numbers based on the first serial number entered.
.. image:: create_sn/assign-numbers-in-sequence.png
:align: center
:alt: Show Assign Serial numbers pop-up.
.. _inventory/product_management/stock-move-section:
Stock move pop-up window
========================
For various methods of assigning serial numbers in bulk, click the :guilabel:`⦙≣ (bulleted list)`
icon in the :ref:`product line <inventory/product_management/detailed-operations-popup>` of a
receipt.
Add a line
----------
In the :guilabel:`Open: Stock move` pop-up window that appears, manually input the serial numbers in
the :guilabel:`Lot/Serial Number` column.
.. image:: create_sn/add-a-line-stock-move.png
:align: center
:alt: Add a line on the Stock move pop-up.
Generate Serials
----------------
Assign multiple serial numbers at once by clicking the :guilabel:`Generate Serials/Lots` button in
the :guilabel:`Open: Stock move` pop-up window.
.. image:: create_sn/generate-serials.png
:align: center
:alt: Show generate serials button.
Doing so opens the :guilabel:`Generate Serial numbers` pop-up window, where the first serial number
is entered in the :guilabel:`First SN` field to generate a sequence of serial numbers, based on the
first serial number entered.
For more details on how to fill in this pop-up window, :ref:`refer to this section
<inventory/product_management/assign-sn>`.
Import Serials
--------------
Assign multiple serial numbers at once by clicking the :guilabel:`Import Serials/Lots` button in the
:guilabel:`Open: Stock move` pop-up window.
.. important::
If the button is not visible, ensure the :guilabel:`Create New` option is selected in the
:ref:`receipt's configuration page <inventory/product_management/configure-new-serials>`.
Doing so opens the :guilabel:`Import Lots` pop-up window. Enter each serial number on a separate
line in the :guilabel:`Lots/Serial numbers` text field.
.. tip::
Copy/paste serial numbers from an existing excel spreadsheet and add them to the
:guilabel:`Lots/Serial numbers` text field.
.. image:: create_sn/copy-from-excel.png
:align: center
:alt: Show excel sheet to copy serial numbers from.
Tick the :guilabel:`Keep current lines` checkbox to add serial numbers to the list of products, and
serial numbers in the :guilabel:`Lot/Serial Number` table, in the :guilabel:`Open: Stock move`
pop-up window. To replace the serial numbers in the list, leave the :guilabel:`Keep current lines`
option unchecked.
Finally, click :guilabel:`Generate`.
.. example::
For a receipt with a :guilabel:`Demand` of `3.00` products, one product has already been assigned
a serial number in the :guilabel:`Open: Stock move` pop-up window.
So, in the :guilabel:`Import Lots` pop-up window, two serial numbers, `124` and `125` are
assigned to the remaining products by entering the following in the :guilabel:`Lots/Serial
numbers` input field:
.. code-block::
124
125
The :guilabel:`Keep current lines` option is selected to add these two serial numbers **in
addition** to the serial number, `123`, that has already been assigned.
.. image:: create_sn/import-serial.png
:align: center
:alt: Show example of correctly inputting serial numbers in the text field.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

@@ -17,7 +17,6 @@ assigned lots.
.. seealso::
- :doc:`Set up and use lot numbers <lots>`
- :doc:`Set up serial numbers <create_sn>`
- :doc:`Use serial numbers <serial_numbers>`
Change on-hand quantity to zero
@@ -1,66 +1,109 @@
====================================
Use serial numbers to track products
====================================
==============
Serial numbers
==============
*Serial numbers* are one of the two ways to identify and track products in Odoo. A serial number is
a unique identifier assigned incrementally (or sequentially) to an item or product, used to
distinguish it from other items and products.
*Serial numbers* are one of the two ways to identify and track products in Odoo, along with
:doc:`lots <lots>`. A serial number is a unique identifier assigned to a product to distinguish it
from other products in a series. Serial numbers can consist of several character types: they can
contain numbers, letters, other typographical characters, or any mix of these character types.
Serial numbers can consist of many different types of characters: they can be strictly numerical,
they can contain letters and other typographical symbols, or they can be a mix of all of the above.
The goal of assigning serial numbers to individual products is to make sure that every item's
history is identifiable when it travels through the supply chain. This can be especially useful for
manufacturers that provide after-sales services to products that they sell and deliver.
The goal of assigning serial numbers allows for the tracking of individual products and their
:doc:`expiration dates <expiration_dates>` and location throughout the supply chain. For instance,
serial numbers can help manufacturers locate products to provide after-sales services or in the
event of a recall.
.. seealso::
:doc:`/applications/inventory_and_mrp/inventory/product_management/product_tracking/lots`
`Odoo Tutorials: Serial Numbers <https://www.youtube.com/watch?v=ZP-gMz2X5AY>`_
.. _inventory/product_management/enable-lots:
Enable lots & serial numbers
============================
To track products using serial numbers, the :guilabel:`Lots & Serial Numbers` feature must be
enabled. To enable this, go to :menuselection:`Inventory app --> Configuration --> Settings`, scroll
down to the :guilabel:`Traceability` section, and click the box next to :guilabel:`Lots & Serial
Numbers`. Remember to click the :guilabel:`Save` button to save changes.
To track products using serial numbers, two settings need to be enabled: the :ref:`Lots & Serial
Numbers traceability setting <inventory/product_management/traceability-setting>`, and :ref:`serial
number usage by operation type <inventory/product_management/operation-type-setting>`.
.. image:: serial_numbers/serial-numbers-enabled-setting.png
:align: center
:alt: Enabled lots and serial numbers setting.
.. _inventory/product_management/traceability-setting:
.. _inventory/product_management/configure-lots:
Traceability setting
--------------------
Configure serial number tracking on products
============================================
The *Lots & Serial Numbers* traceability feature *must* be enabled first to track
products. To do so, go to :menuselection:`Inventory app --> Configuration --> Settings`, scroll down
to the :guilabel:`Traceability` section, and tick the :guilabel:`Lots & Serial Numbers` checkbox.
Remember to click the :guilabel:`Save` button to save changes.
Once the :guilabel:`Lots & Serial Numbers` setting has been activated, individual products can now
be tracked using serial numbers. To configure this, go to :menuselection:`Inventory app --> Products
--> Products`, and choose a desired product to track.
Once on the product form, click :guilabel:`Edit`, and click the :guilabel:`Inventory` tab.
.. image:: serial_numbers/enabled-setting.png
:alt: Enabled Lots & Serial Numbers setting.
Once on the product form, click :guilabel:`Edit`, navigate to the :guilabel:`Inventory` tab, and
scroll to the :guilabel:`Traceability` section. Then, select the :guilabel:`By Unique Serial Number`
option, and click :guilabel:`Save` to save the changes. Existing or new serial numbers can now be
selected and assigned to newly-received or manufactured batches of this product.
.. _inventory/product_management/operation-type-setting:
.. image:: serial_numbers/serial-numbers-product-tracking.png
:align: center
By operation type
-----------------
Next, specify whether the ability to create new or use existing serial numbers should be turned on
for particular operation types (such as shipping or receiving goods). In other words, this setting
allows for serial number tracking on warehouse receipts and delivery orders.
.. example::
Enabling the *Create New* option for receipts allows new serial numbers to be assigned
as items are received. However, for delivery orders, it is often disabled to prevent workers from
accidentally assigning serial numbers that do not exist in inventory.
To enable the creation of new serial numbers on an operation, navigate to :menuselection:`Inventory
app --> Configuration --> Operations Types`.
From the :guilabel:`Operations Types` page, select the desired operation type (e.g.
:guilabel:`Receipts`, :guilabel:`Delivery Orders`, or :guilabel:`Manufacturing`), and select the
:guilabel:`Create New` option in the :guilabel:`Lots/Serial Numbers` section of the operation type's
configuration page.
.. image:: serial_numbers/create-new-setting.png
:alt: Show "Create New" option is selected on the Receipts operation type.
.. _inventory/product_management/detailed-operations:
Configure serial number tracking on individual products
=======================================================
Once the :ref:`Lots & Serial Numbers setting <inventory/product_management/traceability-setting>`
has been activated, individual products can now be tracked using serial numbers. To track a product,
go to :menuselection:`Inventory app --> Products --> Products`, and select the desired product.
In the :guilabel:`General Information` tab on the product form, make sure the box next to
:guilabel:`Track Inventory` is checked. Then, select :guilabel:`By Unique Serial Number`, and click
:guilabel:`Save` to save the changes. Now, existing or new serial numbers can now be selected and
assigned to newly-received or manufactured batches of this product.
.. image:: serial_numbers/product-tracking.png
:alt: Enabled serial number tracking on product form.
.. warning::
If a product doesn't have a serial number assigned to it, a user error pop-up window will appear.
The error message states that the product(s) in stock have no lot/serial number. However, a
lot/serial number can be assigned to the product by making an inventory adjustment.
.. _inventory/product_management/assign-sn:
Assign serial numbers
=====================
In Odoo, serial numbers can be assigned at several times and places:
- When a product is :ref:`already in stock <inventory/product_management/already-in-stock>`
- Via the :ref:`Moves smart button <inventory/product_management/moves-button>` on a receipt
- Via the :ref:`Open: Stock move window <inventory/product_management/stock-move>` on a receipt
- :doc:`During a manufacturing order
<../../../manufacturing/basic_setup/configure_manufacturing_product>` for a product tracked by
lots/serial numbers
- When :doc:`making an inventory adjustment
<../../warehouses_storage/inventory_management/count_products>`
.. _inventory/product_management/already-in-stock:
Create new serial numbers for products already in stock
-------------------------------------------------------
New serial numbers can be created for products already in stock with no assigned serial number. To
do this, go to :menuselection:`Inventory --> Products --> Lots/Serial Numbers`, and click
:guilabel:`Create`. Doing so reveals a blank lots/serial numbers form. On this form, a new
do so, go to :menuselection:`Inventory --> Products --> Lots/Serial Numbers`, and click
:guilabel:`New`. Doing so reveals a blank lot/serial number form. On this form, a new
:guilabel:`Lot/Serial Number` is generated automatically.
.. tip::
@@ -72,222 +115,234 @@ Once the :guilabel:`Lot/Serial Number` is generated, click the blank field next
:guilabel:`Product` to reveal a drop-down menu. From this menu, select the product to which this new
number will be assigned.
This form also provides the option to adjust the :guilabel:`Quantity`, to assign a unique
:guilabel:`Internal Reference` number (for traceability purposes), and to assign this specific
lot/serial number configuration to a specific website in the :guilabel:`Website` field (if working
in a multi-website environment).
This form also provides the option to adjust the :guilabel:`On Hand Quantity`, to assign a unique
:guilabel:`Internal Reference` number (for additional traceability), and to assign this specific
lot/serial number configuration to a specific company in the :guilabel:`Company` field. A detailed
description of this specific lot/serial number can also be added in the :guilabel:`Description` tab
below.
A detailed description of this specific lot/serial number can also be added in the
:guilabel:`Description` tab below.
.. tip::
The :guilabel:`Internal Reference` number field is a space for manufacturers to input an
additional unique number to allow for easier tracking. For instance, SKU values may be used
here.
When all desired configurations are complete, click the :guilabel:`Save` button to save all changes.
.. image:: serial_numbers/serial-numbers-new-serial-number.png
:align: center
.. image:: serial_numbers/new-serial-number.png
:alt: New serial number created for existing product stock.
After a new serial number has been created, assigned to the desired product, and saved, navigate
back to the product form, by going to :menuselection:`Products --> Products`, and selecting the
product that this newly-created serial number was just assigned to.
back to the product form, by going to :menuselection:`Inventory app --> Products --> Products`, and
selecting the product that this newly-created serial number was just assigned to.
On that product's detail form, click the :guilabel:`Lot/Serial Numbers` smart button to view the new
serial number.
Manage serial numbers for shipping and receiving
================================================
.. _inventory/product_management/incoming-outgoing-products:
Serial numbers can be assigned for both **incoming** and **outgoing** goods. For incoming goods,
serial numbers are assigned directly on the purchase order form. For outgoing goods, serial numbers
are assigned directly on the sales order form.
Create serial numbers to incoming or outgoing products
------------------------------------------------------
Assign serial numbers to newly received products
------------------------------------------------
Serial numbers can be assigned to both incoming and outgoing goods. The receipt and delivery order
forms mirror one another; the instructions below can be followed to assign serial numbers in either
form.
Assigning serial numbers to **incoming** goods can be done on the receipt, by clicking the
:ref:`Detailed Operations smart button <inventory/product_management/detailed-operations>` or by
clicking the :guilabel:`⦙≣ (bulleted list)` icon in the product line.
- **Incoming goods:** Assign serial numbers directly on the **receipt**. Receipts can be accessed by
navigating to :menuselection:`Inventory app --> Operations --> Receipts`.
- **Outgoing goods:** Assign serial numbers directly on the **delivery order**. Receipts can be
accessed by navigating to :menuselection:`Inventory app --> Operations --> Deliveries`.
.. seealso::
:doc:`create_sn`
.. important::
Before assigning serial numbers on receipts or delivery orders, be sure that the ability to
:ref:`create new serial numbers by operations type
<inventory/product_management/operation-type-setting>` is enabled.
.. image:: serial_numbers/assign-serial-numbers.png
:align: center
:alt: Display the bulleted list icon and Detailed Operations smart buttons.
Lots/serial number field
~~~~~~~~~~~~~~~~~~~~~~~~
.. warning::
Clicking :guilabel:`Validate` before assigning a serial number to received quantities will cause
a :guilabel:`User Error` pop-up to appear. The pop-up requires entry of a lot or serial number
for the ordered products. The :abbr:`RFQ (request for quotation)` **cannot** be validated without
a serial number being assigned.
Serial numbers can be entered directly into the :guilabel:`Serial Numbers` field on a receipt or
delivery order.
.. image:: serial_numbers/serial-numbers-user-error-popup.png
:align: center
:alt: User error popup prompting serial number entry.
There are multiple ways to do this: manually assigning serial numbers, automatically assigning
serial numbers, and copy/pasting serial numbers from a spreadsheet.
Assign serial numbers automatically
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If a large quantity of products need individual serial numbers assigned to them, Odoo can
automatically generate and assign serial numbers to each of the individual products.
To accomplish this, start with the :guilabel:`First SN` field in the :guilabel:`Detailed Operations`
pop-up window, and type the first serial number in the desired order to be assigned.
Then, in the :guilabel:`Number of SN` field, type the total number of items that need
newly-generated unique serial numbers assigned to them.
Finally, click :guilabel:`Assign Serial Numbers`, and a list will populate with new serial numbers
matching the ordered quantity of products.
.. image:: serial_numbers/serial-numbers-auto-assign-sn.png
:align: center
:alt: Automatic serial number assignment in detailed operations popup.
Copy/paste serial numbers from a spreadsheet
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To copy and paste serial numbers from an existing spreadsheet, first populate a spreadsheet with all
of the serial numbers received from the supplier (or manually chosen upon receipt). Then, copy and
paste them in the :guilabel:`Lot/Serial Number Name` column. Odoo will automatically create the
necessary number of lines based on the amount of numbers pasted in the column.
From here, the :guilabel:`To` locations and :guilabel:`Done` quantities can be manually entered in
each of the serial number lines.
.. image:: serial_numbers/serial-numbers-excel-spreadsheet.png
:align: center
:alt: List of serial numbers copied in Excel spreadsheet.
.. image:: serial_numbers/enter-in-field.png
:alt: Select value for Serial Number field on receipt.
.. tip::
For purchase orders that include large quantities of products to receive, the best method of
serial number assignment is to automatically assign serial numbers using the :guilabel:`Assign
Serial Numbers` button located on the :abbr:`PO (purchase order)`. This prevents any serial
numbers from being reused or duplicated, and improves traceability reporting.
To make the :guilabel:`Serial Numbers` field visible on a receipt or delivery order, click the
:icon:`oi-settings-adjust` :guilabel:`(Adjust Settings)` icon, and in the drop-down menu, tick
the :guilabel:`Serial Numbers` checkbox.
Once all product quantities have been assigned a serial number, click the :guilabel:`Confirm` button
to close the pop-up. Then, click :guilabel:`Validate`.
.. figure:: serial_numbers/field-visible.png
:alt: Allow Serial Numbers field to show on a receipt or delivery order.
A :guilabel:`Traceability` smart button appears upon validating the receipt. Click the
:guilabel:`Traceability` smart button to see the updated :guilabel:`Traceability Report`, which
includes: a :guilabel:`Reference` document, the :guilabel:`Product` being traced, the
:guilabel:`Lot/Serial #`, and more.
Example **Serial Numbers** field on a delivery order.
Once all product quantities have been assigned a serial number, click :guilabel:`Confirm` to close
the popup, and click :guilabel:`Validate`. A :guilabel:`Traceability` smart button will appear upon
validating the receipt. Click the :guilabel:`Traceability` smart button to see the updated
:guilabel:`Traceability Report`, which includes: a :guilabel:`Reference` document, the
:guilabel:`Product` being traced, the :guilabel:`Lot/Serial #`, and more.
.. _inventory/product_management/stock-move:
Manage serial numbers on delivery orders
----------------------------------------
Stock move pop-up window
~~~~~~~~~~~~~~~~~~~~~~~~
Assigning serial numbers to **outgoing** goods can be done directly from the sales order (SO).
For various methods of assigning serial numbers individually or in bulk, click the :icon:`fa-list`
:guilabel:`(list)` icon in the product line of a receipt.
To create an :abbr:`SO (sales order)`, navigate to the :menuselection:`Sales` app, and click the
:guilabel:`Create` button. Doing so reveals a new, blank quotation form. On this blank quotation
form, fill out the necessary information, by adding a :guilabel:`Customer`, and adding products to
the :guilabel:`Product` lines (in the :guilabel:`Order Lines` tab), by clicking :guilabel:`Add a
product`.
Add a line
**********
Then, choose the desired quantity to sell by changing the number in the :guilabel:`Quantity` column.
In the :guilabel:`Open: Stock move` pop-up window, manually enter serial numbers in the
:guilabel:`Lot/Serial Number` column. This method is best reserved for adding only one or a few
serial numbers.
Once the quotation has been filled out, click the :guilabel:`Confirm` button to confirm the
quotation. When the quotation is confirmed, the quotation becomes an :abbr:`SO (sales order)`, and a
:guilabel:`Delivery` smart button appears.
.. image:: serial_numbers/stock-move-add-line.png
:alt: Add a line on the stock move pop-up.
Click the :guilabel:`Delivery` smart button to view the warehouse receipt form for that specific
:abbr:`SO (sales order)`.
.. _inventory/product_management/generate-serials:
From here, click the :guilabel:`Additional Options` menu, represented by a `hamburger` icon (four
horizontal lines, located to the right of the :guilabel:`Unit of Measure` column in the
:guilabel:`Operations` tab). Clicking that icon reveals a :guilabel:`Detailed Operations` pop-up.
Generate Serials/Lots
*********************
In the pop-up, a :guilabel:`Lot/Serial Number` will be chosen by default, with each product of the
total :guilabel:`Reserved` quantity listed with their unique serial numbers (most likely listed in
sequential order).
Assign multiple serial numbers at once by clicking the :guilabel:`Generate Serials/Lots` button in
the :guilabel:`Open: Stock move` pop-up window.
To manually change a product's serial number, click the drop-down menu under :guilabel:`Lot/Serial
Number`, and choose (or type) the desired serial number. Then, mark the :guilabel:`Done` quantities,
and click :guilabel:`Confirm` to close the pop-up.
.. image:: serial_numbers/stock-move-generate-serials.png
:alt: Show generate serials pop-up.
Finally, click the :guilabel:`Validate` button to deliver the products.
Doing so opens a new popup, :guilabel:`Generate Serial numbers`, which contains a few fields:
.. image:: serial_numbers/serial-numbers-detailed-operations-popup.png
:align: center
:alt: Serial numbers listed in detailed operations popup.
- :guilabel:`First SN`: Input the first serial number that should start the sequence. From there,
Odoo automatically detects what pattern should be followed to generate more serial numbers.
- :guilabel:`Number of SN`: Specify the desired number of serial numbers to generate.
Upon validating the delivery order, a :guilabel:`Traceability` smart button appears. Click the
:guilabel:`Traceability` smart button to see the updated :guilabel:`Traceability Report`, which
includes: a :guilabel:`Reference` document, the :guilabel:`Product` being traced, the
:guilabel:`Date`, and the :guilabel:`Lot/Serial #` assigned.
.. note::
The number of serials generated will be reflected in the :guilabel:`Quantity` field on a
receipt or delivery order. Even if the number of serial numbers generated exceeds the
:guilabel:`Demand` value, Odoo still allows the quantity (based on the serial numbers) to be
delivered or received.
The :guilabel:`Traceability Report` can also include a :guilabel:`Reference` receipt from the
previous purchase order (PO), if any of the product quantities shared a serial number assigned
during receipt of that specific :abbr:`PO (purchase order)`.
.. image:: serial_numbers/stock-move-generate-quantity-tip.png
:alt: Show how the quantity of serial numbers alters the delivery order quantity.
Manage serial numbers for different operations types
====================================================
- :guilabel:`Keep current lines` checkbox: Check this box to keep existing serial numbers that may
have been previously added. To replace existing serial numbers in the list, leave the box
unchecked.
By default in Odoo, the creation of new serial numbers is only allowed upon **receiving** products
from a purchase order. **Existing** serial numbers cannot be used. For sales orders, the opposite is
true: new serial numbers cannot be created on the delivery order, only existing serial numbers can
be used.
After filling out these fields, click the :guilabel:`Generate` button. The newly generated serials
now appear in the :guilabel:`Open: Stock move` window. By clicking :icon:`fa-cloud-upload`
:guilabel:`(Save)`, the :guilabel:`Quantity` and the :guilabel:`Serial Numbers` fields on the
delivery order or receipt update automatically.
To change the ability to use new (or existing) serial numbers on any operation type, go to
:menuselection:`Inventory app --> Configuration --> Operations Types`, and select the desired
:guilabel:`Operation Type`.
Import Serials/Lots
*******************
For the :guilabel:`Receipts` operation type, found on the :guilabel:`Operations Types` page, the
:guilabel:`Use Existing Lots/Serial Numbers` option can be enabled, by selecting
:guilabel:`Receipts` from the :guilabel:`Operations Types` page, clicking :guilabel:`Edit`, and then
clicking the checkbox beside the :guilabel:`Use Existing Lots/Serial Numbers` option (in the
:guilabel:`Traceability` section). Lastly, click the :guilabel:`Save` button to save the changes.
Another option for assigning multiple serial numbers at once is to click the :guilabel:`Import
Serials/Lots` button in the :guilabel:`Open: Stock move` pop-up window.
For the :guilabel:`Delivery Orders` operation type, located on the :guilabel:`Operations Types`
page, the :guilabel:`Create New Lots/Serial Numbers` option can be enabled, by selecting
:guilabel:`Delivery Orders` from the :guilabel:`Operations Types` page, clicking :guilabel:`Edit`,
and clicking the checkbox beside the :guilabel:`Create New Lots/Serial Numbers` option (in the
:guilabel:`Traceability` section). Be sure to click :guilabel:`Save` to save changes.
.. important::
If the import button is not visible, ensure the :guilabel:`Create New` box is checked in the
:ref:`receipt's configuration page <inventory/product_management/operation-type-setting>`.
.. image:: serial_numbers/serial-numbers-operations-types.png
:align: center
:alt: Enabled traceability setting in operations type form.
Doing so opens the :guilabel:`Import Serials` pop-up window. Enter each serial number on a separate
line in the :guilabel:`Lots/Serial numbers` text field.
Serial number traceability
==========================
As when :ref:`generating serials <inventory/product_management/generate-serials>`, check the
:guilabel:`Keep current lines` box to keep existing serial numbers, or leave it unchecked to
overwrite them.
Manufacturers and companies can refer to the traceability reports to see the entire lifecycle of a
product: where it came from (and when), where it was stored, and who it went to.
.. tip::
To expedite this process, copy/paste serial numbers from an existing spreadsheet and add them to
the :guilabel:`Lots/Serial numbers` text field.
Finally, click :guilabel:`Generate`.
.. image:: serial_numbers/stock-move-import-serials.png
:alt: Show import serials pop-up.
.. example::
For a receipt with a :guilabel:`Demand` of `3.00` products, one product has already been assigned
a serial number in the :guilabel:`Open: Stock move` pop-up window.
So, in the :guilabel:`Import Lots` pop-up window, two serial numbers, `124` and `125` are
assigned to the remaining products by entering the following in the :guilabel:`Lots/Serial
numbers` input field:
.. code-block::
124
125
The :guilabel:`Keep current lines` option is selected to add these two serial numbers **in
addition** to the serial number, `123`, that has already been assigned.
.. image:: serial_numbers/import-serial.png
:alt: Show example of correctly inputting serial numbers in the text field.
.. _inventory/product_management/moves-button:
Detailed operations
~~~~~~~~~~~~~~~~~~~
Accessible from both receipt and delivery order forms, the *Detailed Operations* page shows a
detailed view of product movements, including information about serial numbers, exact locations,
expiration dates, etc. This level of detail permits more precise tracking, for example, when
handling perishable or regulated goods.
To access this page, first :ref:`select a warehouse receipt or delivery order
<inventory/product_management/incoming-outgoing-products>`. Then, click on the :icon:`fa-bars`
:guilabel:`Moves` smart button at the top of the page.
In the :guilabel:`Lot/Serial Number` column, manually type (or select from the drop-down menu)
the desired serial numbers for each individual product.
.. image:: serial_numbers/moves-button.png
:alt: Show the detailed Moves page.
When finished, click the receipt/delivery order's breadcrumbs, and the assigned serial numbers are
automatically saved.
Traceability & reporting
========================
Manufacturers and companies can refer to the *Lots/Serial Numbers* dashboard and traceability
reports to see the entire lifecycle of a product: when and where it originated, where it was stored,
and who it was shipped to.
Lots/Serial Numbers dashboard
-----------------------------
To see the full traceability of a product, or group by serial numbers, go to
:menuselection:`Inventory app --> Products --> Lots/Serial Numbers`. Doing so reveals the
:guilabel:`Lots/Serial Numbers` dashboard.
From here, products with serial numbers assigned to them will be listed by default, and can be
expanded to show what serial numbers have been specifically assigned to them.
Reporting
~~~~~~~~~
On the :guilabel:`Lots/Serial Numbers` dashboard, products with serial numbers assigned to them are
listed by default. Click the :icon:`fa-caret-right` :guilabel:`(expand)` icon to show which serial
numbers are assigned to the chosen product.
To group by serial numbers (or lots), first remove any default filters from the search bar in the
upper-right corner. Then, click :guilabel:`Group By`, and select :guilabel:`Add Custom Group`, which
reveals a mini drop-down menu. From this mini drop-down menu, select :guilabel:`Lot/Serial Number`,
and click :guilabel:`Apply`.
upper-right corner. Then, click the :icon:`fa-caret-down` :guilabel:`(down arrow)` icon and select
:guilabel:`Add Custom Group`, which reveals a mini drop-down menu. From this mini drop-down menu,
select :guilabel:`Lot/Serial Number`, and click :guilabel:`Apply`.
Doing so reveals all existing serial numbers and lots, and can be expanded to show all quantities of
products with that assigned number. For unique serial numbers that are not reused, there should be
just one product per serial number.
Doing so reveals all existing serial numbers and lots. Each row can be expanded to show all
quantities of product assigned to that serial/lot number. For unique serial numbers that are not
reused, there should be just one product per serial number.
.. image:: serial_numbers/serial-numbers-reporting-page.png
:align: center
.. image:: serial_numbers/serial-numbers-dashboard.png
:alt: Serial numbers reporting page with drop-down lists.
.. tip::
For additional information regarding an individual serial number (or lot number), click the line
item for the serial number to reveal that specific serial number's :guilabel:`Serial Number`
form. From this form, click the :guilabel:`Location` and :guilabel:`Traceability` smart buttons
to see all stock on-hand using that serial number, and any operations made using that serial
number.
For additional information regarding an individual serial (or lot) number, click the line
item for the serial number to reveal that specific :guilabel:`Serial Number` form. From this
form, click the :guilabel:`Location` and :guilabel:`Traceability` smart buttons to see all stock
on-hand using that serial number, and any operations made using that serial number.
.. seealso::
:doc:`../product_tracking`
:doc:`Reassign <reassign>`
In addition to using the :guilabel:`Lots/Serial Numbers` dashboard, there are several other
reporting templates that display the :guilabel:`Lot/Serial Number` field or the ability to filter
by serial number. Go to :menuselection:`Inventory app --> Reporting` to access:
- :guilabel:`Locations` report
- :guilabel:`Moves History` report
- :guilabel:`Moves Analysis` report
@@ -143,6 +143,8 @@ deliveries or manufacturing orders.
:align: center
:alt: Internal transfer form for products ordered from vendor.
.. _inventory/shipping_receiving/two-step-delivery:
Process delivery order in two steps (pick + ship)
=================================================
@@ -1,19 +1,21 @@
.. _use-routes:
==========================
Routes and push/pull rules
==========================
In inventory management, the supply chain strategy determines when products should be
purchased/manufactured, delivered to distribution centers, and made available to the retail
channel.
*Routes* in Odoo control the movement of products between different locations, whether internal or
external, using push and pull rules. Once set up, these rules help automate the logistics of product
movement based on specific conditions.
In Odoo, a product's supply chain strategy can be configured using *Routes*, which feature *Pull
and Push Rules*. Once everything is properly configured, the Inventory app can automatically
generate transfers following the configured push/pull rules.
.. seealso::
- `Odoo Tutorials: Routes <https://www.youtube.com/watch?v=qkhDUezyZuc>`_
- :doc:`Standard routes in Odoo <../daily_operations>`
Inside the warehouse
====================
.. note::
Routes are applicable on products, product categories, shipping methods, :ref:`packagings
<inventory/product_management/route-on-packaging>`, and on the sales order line.
About routes and terminology
============================
In a generic warehouse, there are receiving docks, a quality control area, storage locations,
picking and packing areas, and shipping docks. All products go through all these locations. As the
@@ -42,58 +44,56 @@ boxes, and conveyor belts bring them to the shipping docks, ready to be delivere
:align: center
:alt: View of a generic pull from rule when preparing deliveries.
Pull rules
==========
With *Pull Rules*, a demand for some products triggers procurements, while *Push Rules* are
triggered by products arriving in a specific location.
Pull Rules are used to fulfill a sales order. Odoo generates a need at the *Customer Location* for
each product in the order. Because pull rules are triggered by a need, Odoo looks for a pull rule
defined on the *Customer Location*.
In this case, a "delivery order" pull rule that transfers products from the *Shipping Area* to the
*Customer Location* is found, and a transfer between the two locations is created.
Then, Odoo finds another pull rule that tries to fulfill the need for the *Shipping Area*: the
"packing" rule that transfers products from the *Packing Area* to the *Shipping Area*. Finally,
other pull rules are triggered until a transfer between the *Stock* and the *Picking Area* is
created.
.. note::
All these product transfers are automatically generated by Odoo based on the pull rules, starting
from the end (the customer location) and going backward (the stock warehouse). While working, the
operator processes these transfers in the opposite order: first the picking, then the packing,
and finally the delivery order.
Push rules
==========
----------
On the other hand, *Push Rules* are much easier to understand. Instead of generating documents
based on needs, they are triggered in real time when products arrive in a specific location. Push
rules basically say: "when a product arrives at a specific location, move it to another location."
An example of a push rule would be: when a product arrives in the *Receipt Area*, move it to the
*Storage Location*. As different push rules can be applied to different products, the user can
assign different storage locations for different products.
Another push rule could be: when products arrive at a location, move them to the *Quality Control
Area*. Then, once the quality check is done, move them to their *Storage Location*.
Push rules are used to *supply products into a storage locations* as soon as they arrive at a
specific receiving location.
.. note::
Push rules can only be triggered if there are no pull rules that have already generated the
product transfers.
.. important::
Sets of push/pull rules like those are called *Routes*. The grouping on the rule decides if
products are grouped in the same transfer or not. For example, during the picking operation, all
orders and their products are grouped in one transfer, whereas the packing operation respects the
grouping per customer order.
In a :doc:`one-step receipt route <receipts_delivery_one_step>`, which uses one push rule, when a
product arrives in the warehouse, a push rule can automatically transfer it to the *Storage
Location*. Different push rules can be applied to different products, allowing for customized
storage locations.
.. figure:: use_routes/push-rule.png
:align: center
:alt: Rule for a Receive in one step route.
Push rule for the 'Receive in one step' route.
For more information about configuring rules, skip to the :ref:`Configure rules section
<inventory/shipping_receiving/configure-rules>`.
Pull rules
----------
Pull rules trigger product moves on demand, such as a sales order or a :doc:`need to restock
<../../warehouses_storage/replenishment/reordering_rules>`.
Pull rules work backward from the demand location. For example, in a :ref:`two-step delivery
<inventory/shipping_receiving/two-step-delivery>` route, where items move from *Stock* to *Output*
before being delivered to the *Customer Location*, the pull rule first creates a transfer from
*Output* to the customer. If the product is not at *Output*, another pull rule creates a transfer
from *Stock* to *Output*. The warehouse workers then process these transfers in the reverse order:
picking, then shipping.
.. figure:: use_routes/pull-rule.png
:align: center
:alt: Example pull rule.
Pull rules for the 'Deliver in two steps' route.
For more information about configuring rules, skip to the :ref:`Configure rules section
<inventory/shipping_receiving/configure-rules>`.
.. _use-routes/routes-rules:
Use routes and rules
====================
Configuration
=============
Since *Routes* are a collection of *Push and Pull Rules*, Odoo helps you manage advanced route
configurations such as:
@@ -221,6 +221,8 @@ section, select the :guilabel:`Routes`.
.. important::
Rules must be set on the route in order for the route to work.
.. _inventory/shipping_receiving/configure-rules:
Rules
~~~~~
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

@@ -228,7 +228,7 @@ quantities for the picking.
`1/2` units of the `Cabinet with Doors` has already been picked, and after scanning the product
barcode for the second cabinet, Odoo prompts the user to `Scan a serial number` to record the
unique serial number for :ref:`product tracking <inventory/product_management/configure-lots>`.
unique serial number for :ref:`product tracking <inventory/product_management/enable-lots>`.
.. image:: batch/barcode-products.png
:align: center
@@ -30,30 +30,27 @@ The following is a list of available shipping connectors in Odoo:
- Region availability
* - :doc:`FedEx <fedex>`
- All
* - :doc:`DHL Express* <dhl_credentials>`
* - :doc:`DHL Express <dhl_credentials>`
- All
* - :doc:`UPS <ups_credentials>`
- All
* - US Postal Service
- United States of America
* - :doc:`Sendcloud <sendcloud_shipping>`
- :ref:`EU** <inventory/shipping_receiving/sendcloud-eu>`
* - :doc:`Bpost <bpost>`
- Some European countries (see details below)
* - Bpost
- Belgium
* - Easypost
- North America
* - Shiprocket
- India
* - :doc:`Starshipit <starshipit_shipping>`
- Australasia
.. _inventory/shipping_receiving/sendcloud-eu:
- Australia and New Zealand
.. important::
Other services from DHL are **not** supported.
\* Other services from DHL are **not** supported.
** Sendcloud currently supports shipping **from** Austria, Belgium, France, Germany, Italy, the
Sendcloud currently supports shipping **from** Austria, Belgium, France, Germany, Italy, the
Netherlands, Spain, and the United Kingdom, and **to** any European country.
Configuration
@@ -206,4 +206,3 @@ on the product form.
replenishment/reordering_rules
replenishment/lead_times
replenishment/resupply_warehouses
replenishment/warehouse_replenishment_transfer
@@ -26,6 +26,8 @@ current stock level of the product being ordered.
Finally, click :guilabel:`Save` to save the change.
.. _inventory/warehouses_storage/unarchive-mto:
Unarchive MTO route
===================
@@ -95,6 +95,8 @@ For advanced usage of reordering rules, learn about the following reordering rul
- :ref:`Visibility days <inventory/product_management/visibility-days>`
- :ref:`Route <inventory/product_management/route>`
.. _inventory/warehouses_storage/zero-zero:
0/0/1 reordering rule
---------------------
@@ -1,70 +1,172 @@
===============================
Resupply from another warehouse
===============================
=============================
Inter-warehouse replenishment
=============================
A common use case for multiple warehouses is to have one central warehouse that resupplies multiple
shops, and in this case, each shop is considered a local warehouse. When a shop wants to replenish
a product, the product is ordered to the central warehouse. Odoo allows the user to easily set
which warehouse(s) can resupply another warehouse.
.. |MTO| replace:: :abbr:`MTO (Make to Order)`
When a business operates multiple locations, such as warehouses, retail shops, or manufacturing
facilities, resupplying stock from a central warehouse is sometimes necessary. Odoo uses a *Route*
configuration that enables locations to replenish from a central distribution center, automatically
generating *inter-warehouse transfers*. Odoo :guilabel:`Inventory` manages these transfers to keep
stores in stock.
This guide explains how to conduct inter-warehouse transfers using two replenishment strategies:
#. :ref:`Make to order (MTO) <inventory/warehouses_storage/MTO>`
#. :ref:`Reordering rule <inventory/warehouses_storage/reordering-rule>`
.. seealso::
:doc:`Difference between MTO and reordering rules <../replenishment>`
Configuration
=============
To resupply from another warehouse, first go to :menuselection:`Inventory --> Configuration -->
Settings --> Warehouse` and activate :guilabel:`Multi-Step Routes`. Then, click :guilabel:`Save` to
apply the setting.
The initial configuration for both replenishment strategies is the same. First go to
:menuselection:`Inventory app --> Configuration --> Settings`. In the :guilabel:`Warehouse` section,
activate :guilabel:`Storage Locations`. Then, click :guilabel:`Save` to apply the setting.
.. image:: resupply_warehouses/virtual-warehouses-settings.png
.. image:: resupply_warehouses/storage-locations.png
:align: center
:alt: Enable Multi-Step Routes in Inventory settings.
:alt: Enable Storage Locations in Inventory settings.
View all the configured warehouses by going to :menuselection:`Inventory --> Configuration -->
Warehouses`.
Warehouses
----------
Create a new warehouse by clicking :guilabel:`Create`. Then, give the warehouse a name and a
:guilabel:`Short Name`. Finally, click :guilabel:`Save` to finish creating the warehouse.
Configure the settings for the central warehouse and connecting storage locations by going to
:menuselection:`Inventory app --> Configuration --> Warehouses`.
After that, go back to the :guilabel:`Warehouses` page and open the warehouse that will be
resupplied by the second warehouse. Then, click :guilabel:`Edit`. In the :guilabel:`Warehouse
Configuration` tab, locate the :guilabel:`Resupply From` field, and check the box next to the
second warehouse's name. If the warehouse can be resupplied by more than one warehouse, make sure
to check those warehouses' boxes too. Finally, click :guilabel:`Save` to apply the setting. Now,
Odoo knows which warehouses can resupply this warehouse.
.. important::
Each central warehouse and other locations *must* have its own warehouse. For example, each shop
is considered a local warehouse.
.. image:: resupply_warehouses/resupply-from-second-warehouse.png
Select an existing warehouse, or create a new one to be resupplied from the central warehouse, by
clicking :guilabel:`New`. Then, give the warehouse a name and a :guilabel:`Short Name`, which will
appear on that warehouse's transfers.
In the :guilabel:`Warehouse Configuration` tab, locate the :guilabel:`Resupply From` field. Check
the box next to the central warehouse's name. If the warehouse can be resupplied by more than one
warehouse, make sure to check those warehouses' boxes too. Now, Odoo knows which warehouses can
resupply this warehouse.
.. example::
The central warehouse that will supply the shops is called `Central warehouse`. The
:guilabel:`Resupply From` field is set to this warehouse on the shop's warehouse configuration
page.
.. seealso::
:doc:`../inventory_management/warehouses`
.. image:: resupply_warehouses/warehouse.png
:align: center
:alt: Supply one warehouse with another in the Warehouse Configuration tab.
Set route on a product
======================
----------------------
After configuring which warehouse(s) to resupply from, a new route is now available on all product
forms. The new route appears as :guilabel:`Supply Product from [Warehouse Name]` under the
:guilabel:`Inventory` tab on a product form. Use the :guilabel:`Supply Product from [Warehouse
Name]` route with a reordering rule or the make to order (MTO) route to replenish stock by moving
the product from one warehouse to another.
Products must also be configured properly in order for them to be transferred between warehouses.
.. image:: resupply_warehouses/product-resupply-route-settings.png
:align: center
:alt: Route setting which enables a product to resupplied from a second warehouse.
Go to :menuselection:`Inventory app --> Products --> Products` and select the desired product.
When a product's reordering rule is triggered and the product has the :guilabel:`Supply Product
from [Warehouse Name]` route set, Odoo automatically creates two pickings. One picking is a
*delivery order* from the second warehouse, which contains all the necessary products, and the
second picking is a *receipt* with the same products for the main warehouse. The product move from
the second warehouse to the main warehouse is fully tracked in Odoo.
In the :guilabel:`Inventory` tab, the new route appears as :guilabel:`X: Supply Product from Y` in
the :guilabel:`Routes` section, where 'X' is the store's warehouse that receives products, and 'Y'
is the warehouse that sends products.
On the picking/transfer records created by Odoo, the :guilabel:`Source Document` is the product's
reordering rule. The location between the delivery order and the receipt is a transit location.
Tick the :guilabel:`X: Supply Product from Y` checkbox, which is intended to be used with the |MTO|
route or a reordering rule to replenish stock by moving the product from one warehouse to another.
Proceed to the dedicated sections below to continue the process.
.. image:: resupply_warehouses/resupply-receipts-from-reordering-rule.png
:align: center
:alt: A reordering rule automatically creates two receipts for stock between warehouses.
.. _inventory/warehouses_storage/MTO:
.. image:: resupply_warehouses/second-warehouse-delivery-order.png
:align: center
:alt: A warehouse order for resupplying one warehouse's stock with another.
MTO
~~~
To replenish products using the make-to-order method, go to the product form and ensure the
:ref:`MTO route is unarchived <inventory/warehouses_storage/unarchive-mto>`, so it appears in the
:guilabel:`Routes` section of the :guilabel:`Inventory` tab.
With the resupply and |MTO| routes ticked, jump to the section titled: :ref:`Replenish from another
warehouse <inventory/warehouses_storage/resupply-workflow>`.
.. example::
The product, sold at the warehouse, `Store`, is resupplied from the central warehouse, named
`YourCompany`. To replenish the product using |MTO|, the following routes are selected:
- :guilabel:`Store: Supply Product from YourCompany`
- :guilabel:`Replenish on Order (MTO)`
.. image:: resupply_warehouses/resupply-route.png
:align: center
:alt: Route setting which enables a product to resupplied from a second warehouse.
.. _inventory/warehouses_storage/reordering-rule:
Reordering rule
~~~~~~~~~~~~~~~
To replenish products using reordering rules, first ensure the :guilabel:`X: Supply Product from Y`
route is selected in the :guilabel:`Inventory` tab of the product form.
Then, create a reordering rule to automate replenishment by clicking the :guilabel:`Reordering
Rules` smart button.
Click :guilabel:`New`, and set:
- :guilabel:`Location`: the stock location of the retail store. For example, `SHOP/Stock`.
- :guilabel:`Route`: :guilabel:`X: Supply Product from Y`.
- :guilabel:`Min Quantity` and :guilabel:`Max Quantity` to trigger automatic stock transfers when
inventory falls below the set threshold.
.. seealso::
:doc:`reordering_rules`
.. example::
A :ref:`0/0 reordering rule <inventory/warehouses_storage/zero-zero>` to replenish the shop's
warehouse is created, with the :guilabel:`Location` set to `SHOP/Stock`, and the
:guilabel:`Route` set to :guilabel:`Store: Resupply from YourCompany`.
.. image:: resupply_warehouses/reordering-rule.png
:align: center
:alt: Show reordering rule configurations.
.. _inventory/warehouses_storage/resupply-workflow:
Replenish one warehouse from another
====================================
After completing the setup, trigger replenishment using one of several methods, such as:
- Navigate to the product form of the product that is resupplied from another warehouse.
Click the :guilabel:`Replenish` button on the top-left of the product page. In the pop-up window,
set the warehouse to the retail shop, (e.g. `Store`), and click :guilabel:`Confirm`.
.. image:: resupply_warehouses/replenish.png
:align: center
:alt: Replenish pop-up window on the product form.
- Create a quotation, and in the :guilabel:`Other Info` tab, set the :guilabel:`Warehouse` to the
retail shop (e.g. `Store`), when selling the product makes the on-hand quantity of the product go
below the minimum set on the reordering rule.
.. image:: resupply_warehouses/warehouse-field.png
:align: center
:alt: Create a quote at the store.
Once triggered, Odoo creates two transfers: One is a *delivery order* from the central, supplying
warehouse, which contains all the necessary products to the store, and the second is a *receipt* at
the shop, from the main warehouse.
While in transit, the product is located at `Physical Locations/Inter-warehouse transit`.
.. example::
A sales order for the product at the shop is created. To replenish the product at the shop and
ship it from there, Odoo generates a delivery order from the central warehouse's stock,
`WH/Stock` to the shop's warehouse `SHOP/Stock`. While the products are traveling between
warehouses, they are in `Physical Locations/Inter-warehouse transit`.
The final delivery order is from the shop to the customer's delivery address, and is not
pertinent to the workflow in this guide.
.. image:: resupply_warehouses/transfers.png
:alt: Show shipments from warehouse to store.
.. image:: resupply_warehouses/second-warehouse-stock-receipt.png
:align: center
:alt: A receipt for stock received to one warehouse from another.

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