Compare commits
26 Commits
master-def
...
master-bea
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b94a59081b | ||
|
|
efa4ea8f16 | ||
|
|
65ad28bbf5 | ||
|
|
27a6f56a97 | ||
|
|
6c80250596 | ||
|
|
2838dbdfdc | ||
|
|
6fdacdbccb | ||
|
|
c604efb3bc | ||
|
|
6bbba379b8 | ||
|
|
960d89a55d | ||
|
|
cc18f846e5 | ||
|
|
cd05311e27 | ||
|
|
9d8e1476f6 | ||
|
|
27ac9a8119 | ||
|
|
38f47ed1cc | ||
|
|
cf4f8e2b85 | ||
|
|
4840e3542f | ||
|
|
1199d09c71 | ||
|
|
21d0709f50 | ||
|
|
c430791b00 | ||
|
|
b44dfce306 | ||
|
|
8085941467 | ||
|
|
4c9786e502 | ||
|
|
d229372795 | ||
|
|
77e0e58b0d | ||
|
|
e4351395e6 |
6
Makefile
@@ -13,6 +13,10 @@ ifndef CURRENT_LANG
|
||||
CURRENT_LANG = en
|
||||
endif
|
||||
|
||||
ifndef EXPORT_PATH
|
||||
EXPORT_PATH = locale/sources
|
||||
endif
|
||||
|
||||
SPHINX_BUILD = sphinx-build
|
||||
CONFIG_DIR = .
|
||||
SPHINXOPTS = -D project_root=$(ROOT) -D canonical_version=$(CANONICAL_VERSION) \
|
||||
@@ -69,7 +73,7 @@ latexpdf:
|
||||
|
||||
gettext:
|
||||
@echo "Generating translatable files..."
|
||||
$(SPHINX_BUILD) -c $(CONFIG_DIR) -b gettext $(SOURCE_DIR) locale/sources
|
||||
$(SPHINX_BUILD) -c $(CONFIG_DIR) -b gettext $(SOURCE_DIR) $(EXPORT_PATH)
|
||||
@echo "Generation finished."
|
||||
|
||||
$(HTML_BUILD_DIR)/_static/style.css: extensions/odoo_theme/static/style.scss extensions/odoo_theme/static/scss/*.scss
|
||||
|
||||
@@ -10,7 +10,7 @@ Database management
|
||||
These guides provide instructions on how to install, maintain and upgrade Odoo databases.
|
||||
|
||||
.. seealso::
|
||||
:doc:`History of Versions <administration/supported_versions>`
|
||||
:doc:`History of Versions <administration/standard_extended_support>`
|
||||
|
||||
Installation
|
||||
============
|
||||
@@ -60,6 +60,6 @@ functionalities, including functional support, upgrades, and hosting. `Pricing
|
||||
administration/on_premise
|
||||
administration/upgrade
|
||||
administration/neutralized_database
|
||||
administration/supported_versions
|
||||
administration/standard_extended_support
|
||||
administration/mobile
|
||||
administration/odoo_accounts
|
||||
|
||||
@@ -18,7 +18,7 @@ To Odoo Online
|
||||
|
||||
.. important::
|
||||
- Odoo Online is *not* compatible with **non-standard apps**.
|
||||
- The database's current version must be :doc:`supported <supported_versions>`.
|
||||
- The database's current version must be :doc:`supported <standard_extended_support>`.
|
||||
|
||||
#. Create a :ref:`duplicate of the database <on-premise/duplicate>`.
|
||||
#. In this duplicate, uninstall all **non-standard apps**.
|
||||
@@ -46,10 +46,10 @@ Transferring an Odoo Online database
|
||||
====================================
|
||||
|
||||
.. important::
|
||||
Odoo Online's :ref:`intermediary versions <supported_versions>` are not supported by Odoo.sh or
|
||||
on-premise. Therefore, if the database to transfer is running an intermediary version, it must be
|
||||
upgraded first to the next :ref:`major version <supported_versions>`, waiting for its release if
|
||||
necessary.
|
||||
Odoo Online's :doc:`intermediary versions <standard_extended_support>` are not supported by
|
||||
Odoo.sh or on-premise. Therefore, if the database to transfer is running an intermediary version,
|
||||
it must be upgraded first to the next :doc:`major version <standard_extended_support>`, waiting
|
||||
for its release if necessary.
|
||||
|
||||
.. example::
|
||||
Transferring an online database running on Odoo 16.3 would require first upgrading it to Odoo
|
||||
|
||||
@@ -1,105 +1,57 @@
|
||||
=================
|
||||
Odoo.com accounts
|
||||
=================
|
||||
================
|
||||
Odoo.com account
|
||||
================
|
||||
|
||||
This document describes how to edit and manage an Odoo.com account, including adding a client
|
||||
database, deleting an account, resetting a password, and enabling two-factor authentication.
|
||||
Open the `Connection & Security page <https://www.odoo.com/my/security>`_ on your Odoo.com account
|
||||
portal to:
|
||||
|
||||
Grant users access to database
|
||||
==============================
|
||||
- Change your :guilabel:`Password`.
|
||||
|
||||
A database can be linked to an Odoo.com account that was created by a different Odoo.com account.
|
||||
This allows the database to appear in the *My Databases* page of the account. To do so, the
|
||||
client Odoo.com account needs to be added to the database as a user.
|
||||
.. note::
|
||||
- When you create a database, a user linked to your Odoo.com account is generated on the
|
||||
database. Changing your Odoo.com account's password will also modify the password used to
|
||||
sign in with that user to the database.
|
||||
- You can set a database-specific password for that user by going to the :ref:`database's
|
||||
settings <users/change-password>`. However, you will still be able to sign in with your
|
||||
Odoo.com account's password.
|
||||
|
||||
First, sign in to the Odoo.com account that created the client database. In the main Odoo dashboard
|
||||
of the database, navigate to the **Settings** app, and click :guilabel:`Manage Users` in the
|
||||
:guilabel:`Users` section. Click the :guilabel:`New` button, and enter a name in the
|
||||
:guilabel:`Name` field for this user. Next, enter the email address used to register the desired
|
||||
Odoo.com account in the :guilabel:`Email` field. Navigate back to :guilabel:`Settings` using the
|
||||
breadcrumbs, and a pop-up window titled :guilabel:`Users Invitations` appears, with a warning that
|
||||
adding additional users will increase the amount of the subscription.
|
||||
- Enable :guilabel:`Two-factor authentication` using an authenticator app.
|
||||
|
||||
Click :guilabel:`Confirm`, and the :guilabel:`Users` list appears. An invitation is automatically
|
||||
sent to the email address. Once confirmed, the client database now appears in the **My Databases**
|
||||
page of the target Odoo.com account.
|
||||
.. seealso::
|
||||
Refer to the :doc:`Two-factor authentication documentation <../applications/general/users/2fa>`
|
||||
for more information. The process to enable it for a database user and for your Odoo.com
|
||||
account is similar.
|
||||
|
||||
- :guilabel:`Log out from all devices` signed in to your Odoo.com account, except for the current
|
||||
session.
|
||||
|
||||
.. tip::
|
||||
To log out from the current session, click the :icon:`fa-user-circle-o` (:guilabel:`user`)
|
||||
icon in the top right and select :icon:`fa-sign-out` :guilabel:`Logout`.
|
||||
|
||||
- Enable :ref:`developer mode <developer-mode>` to add a :ref:`developer API key
|
||||
<api/external_api/keys>`.
|
||||
|
||||
- :guilabel:`Delete` your account.
|
||||
|
||||
.. danger::
|
||||
Deleting your Odoo.com account is **irreversible**. Once deleted, your account **cannot be
|
||||
retrieved**.
|
||||
|
||||
Open the `Account Information page <https://www.odoo.com/my/account>`_ to edit your account details,
|
||||
including your **email address**.
|
||||
|
||||
.. note::
|
||||
- When you create a database, a user linked to your Odoo.com account is generated on the
|
||||
database. Changing your Odoo.com account's email address does not modify the email address used
|
||||
to sign in with that user.
|
||||
- You can set a database-specific email address for that user by clicking your avatar in the
|
||||
top-right corner of the database and selecting :guilabel:`My Preferences`. You will still need
|
||||
to sign in to the database using the email address used at the time of the database creation.
|
||||
- To change the email address used to sign in to a database, `contact Odoo Support
|
||||
<https://www.odoo.com/help>`_.
|
||||
|
||||
.. tip::
|
||||
To provide full access to the database for this user, set the :guilabel:`Dashboard` field under
|
||||
the :guilabel:`Productivity` header to :guilabel:`Admin`. Next, set the
|
||||
:guilabel:`Administration` field under the :guilabel:`Administration` header to
|
||||
:guilabel:`Settings`.
|
||||
|
||||
Delete Odoo.com account
|
||||
=======================
|
||||
|
||||
To delete an Odoo.com account, start by clicking the profile icon in the upper-right corner
|
||||
(represented by the username and icon) to reveal a drop-down menu. From the drop-down menu, select
|
||||
:guilabel:`My Odoo.com account`, which reveals the user portal.
|
||||
|
||||
From the user portal, the delete option can be accessed by going to :menuselection:`My Account -->
|
||||
Edit Security Settings --> Delete Account`. It can also be accessed by going to
|
||||
`https://www.odoo.com/my/home <https://www.odoo.com/my/home>`_.
|
||||
|
||||
.. danger::
|
||||
Deleting an Odoo account is irreversible. Be careful performing this action, as the Odoo.com
|
||||
account is **not** retrievable once deleted.
|
||||
|
||||
Upon clicking the :guilabel:`Delete Account` button, a pop-up window appears, requesting
|
||||
confirmation for the account deletion.
|
||||
|
||||
.. image:: odoo_accounts/delete-account.png
|
||||
:align: center
|
||||
:alt: Clicking on the Delete Account button will populate a window verifying the change.
|
||||
|
||||
To confirm the deletion, enter the :guilabel:`Password` and the :guilabel:`Login` for the account
|
||||
being deleted. Then, click the :guilabel:`Delete Account` button to confirm the deletion.
|
||||
|
||||
.. _odoocom/change_password:
|
||||
|
||||
Odoo.com account password change
|
||||
================================
|
||||
|
||||
To change an Odoo.com account password, first login into the Odoo.com user account from the Odoo.com
|
||||
login page. After logging-in, go to the upper-right corner of the screen, and click the :guilabel:`▼
|
||||
(down arrow)` icon next to the profile icon. Then, select :guilabel:`My Account`, and a portal
|
||||
dashboard appears.
|
||||
|
||||
To change the Odoo.com password, click on the :guilabel:`Edit Security Settings` link, below the
|
||||
:menuselection:`Account Security` section. Next, make the necessary changes by typing in the current
|
||||
:guilabel:`Password`, :guilabel:`New Password`, and verify the new password. Lastly, click on
|
||||
:guilabel:`Change Password` to complete the password change.
|
||||
|
||||
.. note::
|
||||
If a customer would like to change the login, contact Odoo support `here
|
||||
<https://www.odoo.com/help>`_.
|
||||
|
||||
.. note::
|
||||
Passwords for Odoo.com users and portal users remain separate, even if the same email address is
|
||||
used.
|
||||
|
||||
Add two-factor authentication
|
||||
=============================
|
||||
|
||||
To add two-factor authentication, login into the Odoo.com user account from the Odoo.com login page.
|
||||
After logging-in, go to the upper-right corner of the screen, and click the :guilabel:`▼ (down
|
||||
arrow)` icon next to the :guilabel:`profile icon`. Then, select :guilabel:`My Account`, and a portal
|
||||
dashboard appears.
|
||||
|
||||
If the user would like to turn on two-factor authentication (2FA) for Odoo.com access, click on the
|
||||
:guilabel:`Edit Security Settings` link below the :menuselection:`Account Security` section.
|
||||
|
||||
Click on :guilabel:`Enable two-factor authentication` to turn on :abbr:`2FA (two-factor
|
||||
authentication)`. Then, confirm the current password in the :guilabel:`Password` field. Next, click
|
||||
on :guilabel:`Confirm Password`. Following that, activate :abbr:`2FA (two-factor authentication)` in
|
||||
a :abbr:`2FA (two-factor authentication)` app (Google Authenticator, Authy, etc.), by scanning the
|
||||
:guilabel:`QR code` or entering a :guilabel:`Verification Code`.
|
||||
|
||||
Finally, click on :guilabel:`Enable two-factor authentication` to complete the setup.
|
||||
|
||||
.. note::
|
||||
Under :guilabel:`My Account` Odoo.com users can also access the following:
|
||||
|
||||
- :guilabel:`My Partner dashboard`
|
||||
- :guilabel:`My In-App Services`
|
||||
- :guilabel:`My Apps Dashboard`
|
||||
In addition to the database you create, all databases you are :ref:`invited to join
|
||||
<users/add-individual>` with your Odoo.com account's email address will be displayed under the
|
||||
`database manager <https://www.odoo.com/my/databases>`_.
|
||||
|
||||
@@ -67,7 +67,7 @@ Import a database
|
||||
=================
|
||||
|
||||
Once your platform is deployed, you can import a database into your Odoo.sh project, provided it
|
||||
uses a :doc:`supported version <../../supported_versions>` of Odoo.
|
||||
uses a :doc:`supported version <../../standard_extended_support>` of Odoo.
|
||||
|
||||
.. note::
|
||||
Due to `Odoo's backup policy <https://www.odoo.com/cloud-sla>`_, the import process requires
|
||||
|
||||
@@ -533,6 +533,8 @@ X-Sendfile and X-Accel).
|
||||
location /web/filestore {
|
||||
internal;
|
||||
alias /path/to/odoo/data-dir/filestore;
|
||||
add_header Content-Security-Policy $upstream_http_content_security_policy;
|
||||
add_header X-Content-Type-Options nosniff;
|
||||
}
|
||||
|
||||
In case you don't know what is the path to your filestore, start Odoo with the
|
||||
@@ -750,8 +752,7 @@ reset. The following process is for system administrators of an Odoo on-premise
|
||||
how to manually reset and re-encrypt the master password.
|
||||
|
||||
.. seealso::
|
||||
For more information about changing an Odoo.com account password, see this documentation:
|
||||
:ref:`odoocom/change_password`.
|
||||
:doc:`../odoo_accounts`
|
||||
|
||||
When creating a new on-premise database, a random master password is generated. Odoo recommends
|
||||
using this password to secure the database. This password is implemented by default, so there is a
|
||||
|
||||
102
content/administration/standard_extended_support.rst
Normal file
@@ -0,0 +1,102 @@
|
||||
=============================
|
||||
Standard and extended support
|
||||
=============================
|
||||
|
||||
.. warning::
|
||||
The information presented on this page is not intended to amend, modify, or replace any terms of
|
||||
the :doc:`Odoo Enterprise Subscription Agreement <../legal/terms/enterprise>`. In the event of
|
||||
any inconsistency or conflict, the Subscription Agreement shall govern.
|
||||
|
||||
Odoo provides **standard support** for all major versions for three years. It includes helpdesk
|
||||
support, bug fixing, and security updates.
|
||||
|
||||
Beyond those three years, you can benefit from **extended support** by paying an extra fee. It
|
||||
includes helpdesk support and bug fixes (depending on feasibility).
|
||||
|
||||
.. note::
|
||||
- Odoo releases intermediary versions, called online or SaaS versions, every two to three months.
|
||||
These versions are only available on Odoo Online and are not eligible for extended support.
|
||||
- You can `upgrade <https://upgrade.odoo.com>`_ from any version.
|
||||
|
||||
The table below shows the support status of every version. Major releases are highlighted in bold.
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: auto
|
||||
|
||||
* -
|
||||
- Odoo Online
|
||||
- Odoo.sh
|
||||
- On-premise
|
||||
- Release date
|
||||
- End of standard support
|
||||
* - **Odoo 19.0**
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
- September 2025
|
||||
- September 2028 (planned)
|
||||
* - Odoo SaaS 18.4
|
||||
- |red|
|
||||
- N/A
|
||||
- N/A
|
||||
- July 2025
|
||||
-
|
||||
* - Odoo SaaS 18.3
|
||||
- |red|
|
||||
- N/A
|
||||
- N/A
|
||||
- May 2025
|
||||
-
|
||||
* - Odoo SaaS 18.2
|
||||
- |red|
|
||||
- N/A
|
||||
- N/A
|
||||
- March 2025
|
||||
-
|
||||
* - **Odoo 18.0**
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
- October 2024
|
||||
- September 2027 (planned)
|
||||
* - **Odoo 17.0**
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
- November 2023
|
||||
- September 2026 (planned)
|
||||
* - **Odoo 16.0**
|
||||
- |red|
|
||||
- |red|
|
||||
- |red|
|
||||
- October 2022
|
||||
- September 2025
|
||||
* - **Odoo 15.0**
|
||||
- |red|
|
||||
- |red|
|
||||
- |red|
|
||||
- October 2021
|
||||
- October 2024
|
||||
* - Older versions
|
||||
- |red|
|
||||
- |red|
|
||||
- |red|
|
||||
- Before 2021
|
||||
- Before 2024
|
||||
|
||||
.. admonition:: Legend
|
||||
|
||||
|green| : Standard support
|
||||
|
||||
|red| : Extended support available (with an extra fee)
|
||||
|
||||
N/A : Never released for this platform
|
||||
|
||||
.. |green| raw:: html
|
||||
|
||||
<span class="text-success" style="font-size: 32px; line-height: 32px; display: inline-block; vertical-align: middle;">●</span>
|
||||
|
||||
.. |red| raw:: html
|
||||
|
||||
<span class="text-danger" style="font-size: 32px; line-height: 32px; display: inline-block; vertical-align: middle;">●</span>
|
||||
@@ -1,107 +0,0 @@
|
||||
:hide-page-toc:
|
||||
|
||||
.. _supported_versions:
|
||||
|
||||
==================
|
||||
Supported versions
|
||||
==================
|
||||
|
||||
Odoo provides support and bug fixing **for the 3 last major versions** of Odoo.
|
||||
|
||||
.. note::
|
||||
Odoo releases intermediary versions called **Online versions** on the :doc:`Odoo Online
|
||||
<odoo_online>` hosting every two months. Odoo Online users can then benefit from the latest
|
||||
features of Odoo.
|
||||
|
||||
- Admins of Odoo Online databases are invited to :doc:`upgrade <upgrade>` them regularly.
|
||||
- Online versions are *not* released for Odoo.sh and On-Premise installations.
|
||||
- Online versions are listed below as *SaaS*.
|
||||
|
||||
This matrix shows the support status of every version.
|
||||
|
||||
**Major releases are in bold type.**
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: auto
|
||||
|
||||
* -
|
||||
- Odoo Online
|
||||
- Odoo.sh
|
||||
- On-Premise
|
||||
- Release date
|
||||
- End of support
|
||||
* - **Odoo 19.0**
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
- September 2025
|
||||
- September 2028 (planned)
|
||||
* - Odoo SaaS 18.4
|
||||
- |red|
|
||||
- N/A
|
||||
- N/A
|
||||
- July 2025
|
||||
-
|
||||
* - Odoo SaaS 18.3
|
||||
- |red|
|
||||
- N/A
|
||||
- N/A
|
||||
- May 2025
|
||||
-
|
||||
* - Odoo SaaS 18.2
|
||||
- |red|
|
||||
- N/A
|
||||
- N/A
|
||||
- March 2025
|
||||
-
|
||||
* - **Odoo 18.0**
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
- October 2024
|
||||
- September 2027 (planned)
|
||||
* - **Odoo 17.0**
|
||||
- |green|
|
||||
- |green|
|
||||
- |green|
|
||||
- November 2023
|
||||
- September 2026 (planned)
|
||||
* - **Odoo 16.0**
|
||||
- |red|
|
||||
- |red|
|
||||
- |red|
|
||||
- October 2022
|
||||
- September 2025
|
||||
* - **Odoo 15.0**
|
||||
- |red|
|
||||
- |red|
|
||||
- |red|
|
||||
- October 2021
|
||||
- October 2024
|
||||
* - Older versions
|
||||
- |red|
|
||||
- |red|
|
||||
- |red|
|
||||
- Before 2021
|
||||
- Before 2024
|
||||
|
||||
.. admonition:: Legend
|
||||
|
||||
|green| Supported version
|
||||
|
||||
|red| End-of-support
|
||||
|
||||
N/A Never released for this platform
|
||||
|
||||
.. important::
|
||||
Even though we don't support older versions, you can always `upgrade from any version
|
||||
<https://upgrade.odoo.com/>`_.
|
||||
|
||||
.. |green| raw:: html
|
||||
|
||||
<span class="text-success" style="font-size: 32px; line-height: 0.5">●</span>
|
||||
|
||||
.. |red| raw:: html
|
||||
|
||||
<span class="text-danger" style="font-size: 32px; line-height: 0.5">●</span>
|
||||
@@ -4,8 +4,8 @@ Upgrade
|
||||
|
||||
An upgrade involves moving a database from an older version to a newer supported version (e.g., from
|
||||
Odoo 16.0 to Odoo 18.0). Regular upgrades are crucial as each version offers new features, bug
|
||||
fixes, and security patches. Using a :doc:`supported version <supported_versions>` is strongly
|
||||
recommended. Each major version is supported for three years.
|
||||
fixes, and security patches. Using a :doc:`supported version <standard_extended_support>` is
|
||||
strongly recommended. Each major version is supported for three years.
|
||||
|
||||
Depending on the hosting type and Odoo version used, a database upgrade can be **mandatory**.
|
||||
|
||||
@@ -429,4 +429,4 @@ The following upgrade-related services are **not** included:
|
||||
|
||||
.. seealso::
|
||||
- :doc:`Odoo.sh documentation <odoo_sh>`
|
||||
- :doc:`Supported Odoo versions <supported_versions>`
|
||||
- :doc:`Supported Odoo versions <standard_extended_support>`
|
||||
|
||||
@@ -7,7 +7,7 @@ Webinars
|
||||
|
||||
Below you can find videos with a general description of the localization, and how to configure it.
|
||||
|
||||
- `Webinar - Localización de Argentina <https://www.youtube.com/watch?v=_H1HbU-wKVg>`_.
|
||||
- `Webinar - Localización de Argentina <https://youtu.be/S5xlANeXja0>`_.
|
||||
- `eCommerce - Localización de Argentina <https://www.youtube.com/watch?v=5gUi2WWfRuI>`_.
|
||||
|
||||
.. seealso::
|
||||
|
||||
@@ -498,15 +498,27 @@ via Codaclean are checked every twelve hours.
|
||||
To manually check for new CODA files, go to the Accounting Dashboard and click :guilabel:`Fetch
|
||||
from Codaclean` on the relevant :ref:`journal <belgium/codaclean-configuration-journal>` .
|
||||
|
||||
Electronic invoicing
|
||||
====================
|
||||
.. _belgium/peppol:
|
||||
|
||||
Odoo supports the **Peppol BIS Billing 3.0 (UBL)** electronic invoicing format. To enable it for a
|
||||
customer, go to :menuselection:`Accounting --> Customers --> Customers`, open their contact form,
|
||||
and under the :guilabel:`Accounting` tab, select the :guilabel:`Peppol BIS Billing 3.0` format.
|
||||
Electronic invoicing with Peppol
|
||||
================================
|
||||
|
||||
As of 1 January 2026, all Belgian companies must be registered on the Peppol network to send and
|
||||
receive electronic invoices.
|
||||
|
||||
To activate Peppol, refer to the :ref:`Peppol documentation <accounting/e-invoicing/peppol>`,
|
||||
ensuring during :ref:`registration <accounting/e-invoicing/peppol-registration>` that:
|
||||
|
||||
- The :guilabel:`Peppol EAS` field is set to :guilabel:`0208 - Numero d'entreprise /
|
||||
ondernemingsnummer / Unternehmensnummer`.
|
||||
- the :guilabel:`Peppol Endpoint` field is set to the company registry number.
|
||||
|
||||
In addition, when veryfing that a customer is :ref:`registered as a Peppol participant
|
||||
<accounting/e-invoicing/contact-verification>`, ensure the :guilabel:`Format` field is set to
|
||||
:guilabel:`BIS Billing 3.0`.
|
||||
|
||||
.. seealso::
|
||||
:doc:`../accounting/customer_invoices/electronic_invoicing`
|
||||
:ref:`Peppol documentation <accounting/e-invoicing/peppol>`
|
||||
|
||||
.. _belgium/cash-discount:
|
||||
|
||||
@@ -548,7 +560,7 @@ The Odoo POS system is certified for databases hosted on **Odoo Online**, **Odoo
|
||||
**On-Premise**.
|
||||
|
||||
.. seealso::
|
||||
:doc:`/administration/supported_versions`
|
||||
:doc:`/administration/standard_extended_support`
|
||||
|
||||
A `certified POS system <https://www.systemedecaisseenregistreuse.be/systemes-certifies>`_ must
|
||||
adhere to rigorous government regulations, which means it operates differently from a non-certified
|
||||
|
||||
@@ -45,8 +45,8 @@ app's card.
|
||||
Upgrade apps and modules
|
||||
========================
|
||||
|
||||
With each :doc:`new Odoo release </administration/supported_versions>`, new improvements or app
|
||||
features are added. Upgrade the app to use these new improvements and features.
|
||||
With each :doc:`new Odoo release <../../administration/standard_extended_support>`, new improvements
|
||||
or app features are added. Upgrade the app to use these new improvements and features.
|
||||
|
||||
Go to :menuselection:`Apps` and then on the app to upgrade, click the :icon:`fa-ellipsis-v`
|
||||
:guilabel:`(vertical ellipsis)` icon and select :guilabel:`Upgrade`.
|
||||
|
||||
@@ -5,11 +5,10 @@ Digest emails
|
||||
*Digest Emails* are periodic snapshots sent via email to users in an organization that include
|
||||
high-level information about how the business is performing.
|
||||
|
||||
To start sending digest emails, begin by navigating to :menuselection:`Settings app --> Statistics
|
||||
To start sending digest emails, begin by navigating to :menuselection:`Settings app --> Emails
|
||||
section`, activate the :guilabel:`Digest Emails` feature, and click :guilabel:`Save`.
|
||||
|
||||
.. image:: digest_emails/digest-email-settings.png
|
||||
:align: center
|
||||
.. image:: digest_emails/digest-email-settings-screenshot.png
|
||||
:alt: Digest Emails section inside General Settings.
|
||||
|
||||
A variety of settings can be configured for digest emails, such as:
|
||||
@@ -29,8 +28,8 @@ A variety of settings can be configured for digest emails, such as:
|
||||
When creating duplicates of databases that have sending capabilities (not testing-mode), the
|
||||
digest emails continue to send from the duplicate database, unless deactivated.
|
||||
|
||||
To deactivate the digest email, navigate to :menuselection:`Settings --> Statistics section`.
|
||||
Then, deactivate the :guilabel:`Digest Emails` feature, by un-ticking the checkbox, and clicking
|
||||
To deactivate the digest email, navigate to :menuselection:`Settings --> Emails section`. Then,
|
||||
deactivate the :guilabel:`Digest Emails` feature, by un-ticking the checkbox, and clicking
|
||||
:guilabel:`Save`. See the section on :ref:`digest-emails/deactivate`.
|
||||
|
||||
.. _digest-emails/customize-digest:
|
||||
@@ -39,8 +38,8 @@ Customize default digest email
|
||||
==============================
|
||||
|
||||
To customize the default digest email (*Your Odoo Periodic Digest*), go to :menuselection:`Settings
|
||||
app --> Statistics section --> Digest Email field`. Then, select :guilabel:`Your Odoo Periodic
|
||||
Digest`, and click on the :guilabel:`↗️ (External link)` icon, next to the drop-down menu selection.
|
||||
app --> Emails section --> Digest Email field`. Then, select :guilabel:`Your Odoo Periodic Digest`,
|
||||
and click on the :guilabel:`↗️ (External link)` icon, next to the drop-down menu selection.
|
||||
|
||||
A pop-up window appears, and presents a variety of editable settings, which include:
|
||||
|
||||
@@ -59,8 +58,7 @@ A pop-up window appears, and presents a variety of editable settings, which incl
|
||||
costs to the database subscription are incurred should *Studio* need to be installed. See this
|
||||
section on :ref:`digest-emails/custom-kpi`.
|
||||
|
||||
.. image:: digest_emails/periodic-digest.png
|
||||
:align: center
|
||||
.. image:: digest_emails/periodic-digest-screenshot.png
|
||||
:alt: Customize default Digest Email settings and custom KPIs.
|
||||
|
||||
.. _digest-emails/deactivate:
|
||||
@@ -69,19 +67,16 @@ Deactivate digest email
|
||||
=======================
|
||||
|
||||
To manually deactivate an individual digest email, first navigate to :menuselection:`Settings app
|
||||
--> Statistics section`, and click :guilabel:`Configure Digest Emails`. Then, select the desired
|
||||
digest email from the list that should be deactivated.
|
||||
--> Emails section`, and click :guilabel:`Configure Digest Emails`. Then, select the desired digest
|
||||
email from the list that should be deactivated. Then, click :guilabel:`Deactivate`.
|
||||
|
||||
Next, click :guilabel:`DEACTIVATE FOR EVERYONE` to deactivate the digest email for everyone, or
|
||||
:guilabel:`UNSUBSCRIBE ME` to remove the logged in user from the mailing list. These buttons are
|
||||
located in the top menu, just above the :guilabel:`Digest Name`.
|
||||
|
||||
Manually send digest email
|
||||
==========================
|
||||
|
||||
To manually send a digest email, first navigate to :menuselection:`Settings app --> Statistics
|
||||
section`, and click :guilabel:`Configure Digest Emails`. Then, select the desired digest email, and
|
||||
click :guilabel:`SEND NOW`. This button is located in the top menu, just above the :guilabel:`Digest
|
||||
To manually send a digest email, first navigate to :menuselection:`Settings app --> Emails section`,
|
||||
and click :guilabel:`Configure Digest Emails`. Then, select the desired digest email, and click
|
||||
:guilabel:`SEND NOW`. This button is located in the top menu, just above the :guilabel:`Digest
|
||||
Name`.
|
||||
|
||||
.. _digest-emails/kpis:
|
||||
@@ -92,8 +87,8 @@ KPIs
|
||||
Pre-configured :abbr:`KPIs (key performance indicators)` can be added to the digest email from the
|
||||
:guilabel:`KPIs` tab of the digest email template form.
|
||||
|
||||
First, navigate to :menuselection:`Settings app --> Statistics section`, and click
|
||||
:guilabel:`Configure Digest Emails`.
|
||||
First, navigate to :menuselection:`Settings app --> Emails section`, and click :guilabel:`Configure
|
||||
Digest Emails`.
|
||||
|
||||
Then, select the desired digest email, and open the :guilabel:`KPIs` tab.
|
||||
|
||||
@@ -104,43 +99,46 @@ are added (or deselected), click :guilabel:`Save`.
|
||||
The following :abbr:`KPIs (key performance indicators)` are available in the :guilabel:`KPIs` tab on
|
||||
a digest email template form out-of-box in Odoo:
|
||||
|
||||
.. image:: digest_emails/oob-kpis.png
|
||||
:align: right
|
||||
:alt: KPIs listed in the out-of-box digest email.
|
||||
|
||||
:guilabel:`General`
|
||||
- :guilabel:`Connected Users`
|
||||
- :guilabel:`Messages`
|
||||
|
||||
:guilabel:`CRM`
|
||||
- :guilabel:`New Leads`
|
||||
- :guilabel:`Opportunities Won`
|
||||
|
||||
:guilabel:`Project`
|
||||
- :guilabel:`Open Tasks`
|
||||
|
||||
:guilabel:`Recruitment`
|
||||
- :guilabel:`Employees`
|
||||
|
||||
:guilabel:`CRM`
|
||||
- :guilabel:`New Leads/Opportunities`
|
||||
- :guilabel:`Opportunities Won`
|
||||
|
||||
:guilabel:`Sales`
|
||||
- :guilabel:`All Sales`
|
||||
- :guilabel:`eCommerce Sales`
|
||||
|
||||
:guilabel:`Point of Sale`
|
||||
- :guilabel:`POS Sales`
|
||||
:guilabel:`Helpdesk`
|
||||
- :guilabel:`Tickets Closed`
|
||||
|
||||
:guilabel:`Live Chat`
|
||||
- :guilabel:`% of Happiness`
|
||||
- :guilabel:`Conversations handled`
|
||||
- :guilabel:`Time to answer (sec)`
|
||||
|
||||
:guilabel:`Helpdesk`
|
||||
- :guilabel:`Tickets Closed`
|
||||
:guilabel:`Sales`
|
||||
- :guilabel:`All Sales`
|
||||
- :guilabel:`eCommerce Sales`
|
||||
|
||||
:guilabel:`Sales`
|
||||
- :guilabel:`All Sales`
|
||||
- :guilabel:`eCommerce Sales`
|
||||
|
||||
:guilabel:`Invoicing`
|
||||
- :guilabel:`Revenue`
|
||||
- :guilabel:`Banks and Cash Moves`
|
||||
|
||||
|
||||
:guilabel:`Point of Sale`
|
||||
- :guilabel:`POS Sales`
|
||||
|
||||
:guilabel:`Recruitment`
|
||||
- :guilabel:`Employees`
|
||||
|
||||
:guilabel:`Custom`
|
||||
|
||||
.. _digest-emails/recipients:
|
||||
|
||||
Recipients
|
||||
@@ -149,18 +147,18 @@ Recipients
|
||||
Digest email recipients are added from the :guilabel:`Recipients` tab of the digest email template
|
||||
form.
|
||||
|
||||
To add a recipient, navigate to :menuselection:`Settings app --> Statistics section`, and click
|
||||
To add a recipient, navigate to :menuselection:`Settings app --> Emails section`, and click
|
||||
:guilabel:`Configure Digest Emails`. Then, select the desired digest email, and open the
|
||||
:guilabel:`Recipients` tab.
|
||||
|
||||
To add a recipient, click :guilabel:`Add a line`, and an :guilabel:`Add Recipients` pop-up window
|
||||
To add a recipient, click :guilabel:`Add a line`, and an :guilabel:`Add: Recipients` pop-up window
|
||||
appears, with all available users to add as recipients.
|
||||
|
||||
From the pop-up window, tick the checkbox next to the :guilabel:`Name` of the user(s), and click the
|
||||
:guilabel:`Select` button.
|
||||
|
||||
To remove a user as a recipient, click the :guilabel:`❌ (remove)` icon to the far-right of the user
|
||||
listed in the :guilabel:`Recipients` tab.
|
||||
To remove a user as a recipient, click the :icon:`fa-times` :guilabel:`(cancel)` icon to the
|
||||
far-right of the user listed in the :guilabel:`Recipients` tab.
|
||||
|
||||
Click :guilabel:`Save` to implement the changes.
|
||||
|
||||
@@ -169,9 +167,8 @@ Click :guilabel:`Save` to implement the changes.
|
||||
Create digest emails
|
||||
====================
|
||||
|
||||
To create a new digest email, navigate to :menuselection:`Settings app --> Statistics section`, and
|
||||
click :guilabel:`Configure Digest Emails`. Then, click :guilabel:`Create` to create a new digest
|
||||
email.
|
||||
To create a new digest email, navigate to :menuselection:`Settings app --> Emails section`, and
|
||||
click :guilabel:`Configure Digest Emails`. Then, click :guilabel:`New` to create a new digest email.
|
||||
|
||||
A separate page, with a blank digest email template appears, and presents a variety of editable
|
||||
settings, including:
|
||||
@@ -186,12 +183,11 @@ settings, including:
|
||||
- :guilabel:`Recipients` tab: add/remove users who receive the digest emails. See the section on
|
||||
:ref:`digest-emails/recipients`.
|
||||
|
||||
From there, give the digest email a :guilabel:`Digest Name`, specify :guilabel:`Periodicity`,
|
||||
choose the desired :abbr:`KPIs (key performance indicators)`, and add :guilabel:`Recipients`, as
|
||||
needed.
|
||||
From there, give the digest email a :guilabel:`Digest Name`, specify :guilabel:`Periodicity`, choose
|
||||
the desired :abbr:`KPIs (key performance indicators)`, and add :guilabel:`Recipients`, as needed.
|
||||
|
||||
After clicking :guilabel:`Save`, the new custom digest email is available as a selection in the
|
||||
:guilabel:`Digest Email` field, located in the :menuselection:`Settings app --> Statistics section`.
|
||||
:guilabel:`Digest Email` field, located in the :menuselection:`Settings app --> Emails section`.
|
||||
|
||||
.. _digest-emails/custom-kpi:
|
||||
|
||||
@@ -220,11 +216,6 @@ In order to create additional fields, create two fields on the digest object:
|
||||
<https://github.com/odoo/odoo/blob/15.0/addons/digest/models/digest.py>`_ for the `digest.py`
|
||||
file, which guides the programmer in the coding of the computed field.
|
||||
|
||||
.. seealso::
|
||||
Users can also click the :guilabel:`Recipients` tab, and then the vertical three-dot
|
||||
:guilabel:`(kebab)` menu to edit this view. Either click :guilabel:`EDIT LIST VIEW` or
|
||||
:guilabel:`EDIT FORM VIEW` to modify this tab.
|
||||
|
||||
Computed values reference table
|
||||
-------------------------------
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 34 KiB |
@@ -9,4 +9,3 @@ Integrations
|
||||
integrations/geolocation
|
||||
integrations/google_translate
|
||||
integrations/cloud_storage
|
||||
integrations/barcodelookup
|
||||
|
||||
@@ -17,6 +17,11 @@ To start using an IoT box:
|
||||
Devices can also be connected after the IoT box is added to the network and/or connected to the
|
||||
database; however, a reboot of the IoT box might be required.
|
||||
|
||||
.. important::
|
||||
Never make the IoT box accessible from the public Internet.
|
||||
IoT systems are designed to provide your database with access to devices on your local network.
|
||||
Exposing them to the public Internet would create a **security risk**.
|
||||
|
||||
.. _iot/iot_box/network:
|
||||
|
||||
Network connection
|
||||
|
||||
@@ -27,6 +27,11 @@ The following prerequisites must be met before setting up and using the Windows
|
||||
- It is also possible to create a Windows Virtual Machine on a MacOS/Linux computer. However,
|
||||
this option is not supported by Odoo, and no troubleshooting assistance will be provided.
|
||||
|
||||
.. important::
|
||||
Never make the Windows virtual IoT accessible from the public Internet.
|
||||
IoT systems are designed to provide your database with access to devices on your local network.
|
||||
Exposing them to the public Internet would create a **security risk**.
|
||||
|
||||
.. _iot/windows-iot/installation:
|
||||
|
||||
Installation
|
||||
|
||||
@@ -15,6 +15,14 @@ The states included in this localization are:
|
||||
- Alabama (AL)
|
||||
- Washington (WA)
|
||||
- Nevada (NV)
|
||||
- Vermont (VT)
|
||||
- Illinois (IL)
|
||||
- Virginia (VA)
|
||||
- Washington, D.C (DC)
|
||||
- Arizona (AZ)
|
||||
- Idaho (ID)
|
||||
- Oregon (OR)
|
||||
- North Carolina (NC)
|
||||
|
||||
.. note::
|
||||
Federal taxes (Income, :abbr:`FICA (Federal Insurance Contributions Act)`, and Unemployment) for
|
||||
|
||||
@@ -11,6 +11,7 @@ Setup
|
||||
setup/device_troubleshooting
|
||||
setup/hardware
|
||||
setup/software
|
||||
setup/barcodelookup
|
||||
setup/serial_numbers_lots
|
||||
setup/operation_types
|
||||
setup/rfid
|
||||
|
||||
@@ -44,9 +44,8 @@ To enable automatic barcode look up, go to :menuselection:`Inventory app --> Con
|
||||
Settings` and scroll down to the :guilabel:`Barcode` section to tick the box for :guilabel:`Stock
|
||||
Barcode Database`.
|
||||
|
||||
.. note::
|
||||
Databases hosted on **Odoo.sh** or **on-premise**, require :ref:`configuring an API key
|
||||
<barcodelookup/configuration>`.
|
||||
.. seealso::
|
||||
:doc:`Barcode Lookup <barcodelookup>`
|
||||
|
||||
.. _inventory/barcode/set-barcodes:
|
||||
|
||||
|
||||
@@ -5,8 +5,82 @@ FEFO removal
|
||||
The *First Expired, First Out* (FEFO) removal strategy targets products for removal based on their
|
||||
assigned removal dates.
|
||||
|
||||
.. seealso::
|
||||
:doc:`About removal strategies <../removal_strategies>`
|
||||
.. _inventory/warehouses_storage/fefo_enable:
|
||||
|
||||
Enabling the FEFO removal strategy
|
||||
==================================
|
||||
|
||||
Lots and serial numbers differentiate identical products and track information like arrival or
|
||||
expiration dates. To enable this feature, navigate to :menuselection:`Inventory --> Configuration
|
||||
--> Settings`. Under the :guilabel:`Traceability` heading, check the box beside :guilabel:`Lots &
|
||||
Serial Numbers`. After :guilabel:`Lots & Serial Numbers` is enabled, the :guilabel:`Expiration Date`
|
||||
feature appears. Enable it to track expiration dates, best-before dates, removal dates, and alert
|
||||
dates.
|
||||
|
||||
.. image:: fefo/enable-features.png
|
||||
:alt: Enable Lots & Serial Numbers and Expiration Dates in the Inventory settings.
|
||||
|
||||
Enable tracking by lots or serial numbers
|
||||
-----------------------------------------
|
||||
|
||||
Next, ensure the intended product is tracked by lots or serial numbers by navigating to the product
|
||||
form through :menuselection:`Inventory --> Products --> Products` and selecting the desired product.
|
||||
On the product form, open the :guilabel:`General Information` tab and select the check box next to
|
||||
the :guilabel:`Track Inventory` field, then select either :guilabel:`By Unique Serial Number` or
|
||||
:guilabel:`By Lots`.
|
||||
|
||||
.. image:: fefo/track-by-lots.png
|
||||
:alt: Enable tracking by lot.
|
||||
|
||||
Setting dates
|
||||
-------------
|
||||
|
||||
Next, set the :guilabel:`Expiration Date`, :guilabel:`Best Before Date`, :guilabel:`Removal Date`,
|
||||
and :guilabel:`Alert Date` settings for the product. In the :guilabel:`Inventory` tab of the product
|
||||
form, under the :guilabel:`Traceability` heading, select the :guilabel:`Expiration Date` check box.
|
||||
The :guilabel:`Dates` heading appears. See :ref:`Removal date
|
||||
<inventory/warehouses_storage/removal-date>` for more information.
|
||||
|
||||
Assigning lots and serial numbers
|
||||
---------------------------------
|
||||
|
||||
After enabling the features, assign lot or serial numbers to products using an :doc:`inventory
|
||||
adjustment <../../warehouses_storage/inventory_management/count_products>` or during :ref:`product
|
||||
reception <inventory/product_management/assign-lots>`.
|
||||
|
||||
Setting removal strategies
|
||||
--------------------------
|
||||
|
||||
After lot or serial numbers have been assigned, set the removal strategy on the storage location or
|
||||
product category.
|
||||
|
||||
.. image:: fefo/location-categories.png
|
||||
:alt: Find the Locations or Categories from the Configuration menu.
|
||||
|
||||
On the location
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
Open :menuselection:`Inventory app --> Configuration --> Locations`. Select the desired location. On
|
||||
the location form, under the :guilabel:`Logistics` heading, select :guilabel:`First Expiry First Out
|
||||
(FEFO)` from the list of removal strategies.
|
||||
|
||||
.. image:: fefo/set-on-location.png
|
||||
:alt: Set First Expiry First Out as the location removal strategy.
|
||||
|
||||
On the product category
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Configure removal strategies on product categories by going to :menuselection:`Inventory app -->
|
||||
Configuration --> Categories` and selecting the intended product category. Next, in the
|
||||
:guilabel:`Force Removal Strategy` field, specify :guilabel:`First Expiry First Out (FEFO)`.
|
||||
|
||||
.. image:: fefo/set-on-category.png
|
||||
:alt: Set First Expiry First Out as the product category removal strategy.
|
||||
|
||||
.. important::
|
||||
When there are different removal strategies applied on both the location and product category for
|
||||
a product, the value set on the :guilabel:`Force Removal Strategy` field set on a product
|
||||
category form is applied as top priority.
|
||||
|
||||
.. _inventory/warehouses_storage/removal-date:
|
||||
|
||||
@@ -34,9 +108,6 @@ number of days specified in the :guilabel:`Expiration Date` field of the product
|
||||
The removal date takes this expiration date, and subtracts the number of days specified in the
|
||||
:guilabel:`Removal Date` field of the product form.
|
||||
|
||||
.. seealso::
|
||||
:doc:`Expiration dates <../../product_management/product_tracking/expiration_dates>`
|
||||
|
||||
.. example::
|
||||
In the :guilabel:`Inventory` tab of the product, `Egg`, the following :guilabel:`Dates` are set
|
||||
by the user:
|
||||
@@ -45,7 +116,6 @@ The removal date takes this expiration date, and subtracts the number of days sp
|
||||
- :guilabel:`Removal Date`: `15` days before expiration date
|
||||
|
||||
.. image:: fefo/user-set-date.png
|
||||
:align: center
|
||||
:alt: Display expiration and removal dates set on the product form.
|
||||
|
||||
A shipment of Eggs arrive at the warehouse on January 1st. So, the expiration date of the Eggs is
|
||||
@@ -54,16 +124,20 @@ The removal date takes this expiration date, and subtracts the number of days sp
|
||||
|
||||
.. _inventory/warehouses_storage/exp-date:
|
||||
|
||||
To view the expiration dates of items in stock, navigate to the product form, and click the
|
||||
:guilabel:`On Hand` smart button.
|
||||
|
||||
Next, click the additional options icon, located on the far-right, and select the columns:
|
||||
:guilabel:`Expiration Date` and :guilabel:`Removal Date`.
|
||||
To view the expiration dates of items in stock, go to :menuselection:`Inventory app --> Products -->
|
||||
Lots / Serial Numbers`. By default, this report is grouped by location. If necessary, remove that
|
||||
grouping in the search bar and group by product. Expand the product to show its lots. Next, click
|
||||
the :icon:`oi-settings-adjust` :guilabel:`(settings adjust)` icon, located on the far-right, and
|
||||
select the columns: :guilabel:`Expiration Date` and :guilabel:`Removal Date`.
|
||||
|
||||
.. image:: fefo/removal-date.png
|
||||
:align: center
|
||||
:alt: Show expiration dates from the inventory adjustments model accessed from the *On Hand*
|
||||
smart button from the product form.
|
||||
:alt: Show expiration dates from the Lots / Serial Numbers list.
|
||||
|
||||
Alternatively, view these dates by clicking the :guilabel:`Lot/Serial Numbers` smart button on the
|
||||
product form.
|
||||
|
||||
.. image:: fefo/removal-date-lots-serial-numbers.png
|
||||
:alt: Show expiration dates from the Lots/Serial Numbers list on the product form.
|
||||
|
||||
Workflow
|
||||
========
|
||||
@@ -72,15 +146,10 @@ Using the :abbr:`FEFO (First Expired, First Out)` removal strategy ensures that
|
||||
nearest removal date are picked first.
|
||||
|
||||
To understand how this removal strategy works, consider the following example below about the
|
||||
product, `Carton of eggs`, which is a box containing twelve eggs.
|
||||
product, `Carton of Eggs`, which is a box containing twelve eggs.
|
||||
|
||||
The product is tracked :guilabel:`By Lots`, and the product category's :guilabel:`Force Removal
|
||||
Strategy` is set to :guilabel:`First Expired, First Out (FEFO)`.
|
||||
|
||||
.. seealso::
|
||||
- :ref:`Set up force removal strategy <inventory/warehouses_storage/removal-config>`
|
||||
- :ref:`Enable lots tracking <inventory/warehouses_storage/lots-setup>`
|
||||
- `Odoo Tutorials: Perishable Products <https://www.odoo.com/slides/slide/5324/share>`_
|
||||
Strategy` is set to :guilabel:`First Expiry First Out (FEFO)`.
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
@@ -95,32 +164,38 @@ Strategy` is set to :guilabel:`First Expired, First Out (FEFO)`.
|
||||
- 2
|
||||
- 1
|
||||
* - Expiration date
|
||||
- April 4
|
||||
- April 10
|
||||
- April 15
|
||||
- January 8, 2026
|
||||
- January 15, 2026
|
||||
- January 22, 2026
|
||||
* - :ref:`Removal date <inventory/warehouses_storage/exp-date>`
|
||||
- February 26
|
||||
- March 4
|
||||
- March 9
|
||||
- December 24, 2025
|
||||
- December 31, 2025
|
||||
- January 7, 2026
|
||||
|
||||
To see the removal strategy in action, go to the :menuselection:`Sales app` and create a new
|
||||
quotation.
|
||||
|
||||
Clicking :guilabel:`Confirm` creates a delivery order for today, December 29th, and the lot numbers
|
||||
Clicking :guilabel:`Confirm` creates a delivery order for today, December 9th, and the lot numbers
|
||||
with the soonest expiration dates are reserved, using the :abbr:`FEFO (First Expired, First Out)`
|
||||
removal strategy.
|
||||
|
||||
To view the detailed pickings, click the :guilabel:`⦙≣ (bulleted list)` icon, located on the
|
||||
far-right of the Carton of egg's product line, in the :guilabel:`Operations` tab of the delivery
|
||||
order. Doing so opens the :guilabel:`Open: Stock move` pop-up window.
|
||||
To view the detailed pickings, click the :guilabel:`Details` link, located on the far-right of the
|
||||
Carton of Eggs' product line, in the :guilabel:`Operations` tab of the delivery order. Doing so
|
||||
opens the :guilabel:`Detailed Operations` pop-up window.
|
||||
|
||||
In the :guilabel:`Open: Stock move` pop-up window, the :guilabel:`Pick from` field displays where
|
||||
In the :guilabel:`Detailed Operations` pop-up window, the :guilabel:`Pick From` field displays where
|
||||
the quantities to fulfill the :guilabel:`Demand` are picked from.
|
||||
|
||||
Since the order demanded six Cartons of eggs, using the :abbr:`FEFO (First Expired, First Out)`
|
||||
removal strategy, all five Cartons from `LOT1`, with the removal date of February 26th, are picked.
|
||||
The remaining Carton is selected from `LOT2`, which has a removal date of March 4th.
|
||||
Since the order demanded six Cartons of Eggs, using the :abbr:`FEFO (First Expired, First Out)`
|
||||
removal strategy, all five Cartons from `LOT1`, with the removal date of December 24, are picked.
|
||||
The remaining Carton is selected from `LOT2`, which has a removal date of December 31.
|
||||
|
||||
.. image:: fefo/eggs-picking.png
|
||||
:align: center
|
||||
:alt: The stock moves window that shows the lots to be removed using FEFO.
|
||||
:alt: The detailed operations window that shows the lots to be removed using FEFO.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`Removal strategies <../removal_strategies>`
|
||||
- :ref:`Set up force removal strategy <inventory/warehouses_storage/removal-config>`
|
||||
- :doc:`Expiration dates <../../product_management/product_tracking/expiration_dates>`
|
||||
- :ref:`Enable lots tracking <inventory/warehouses_storage/lots-setup>`
|
||||
- `Odoo Tutorials: Perishable Products <https://www.odoo.com/slides/slide/5324/share>`_
|
||||
|
||||
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 12 KiB |
@@ -3,25 +3,84 @@ FIFO removal
|
||||
============
|
||||
|
||||
The *First In, First Out* (FIFO) removal strategy selects products with the earliest arrival dates.
|
||||
This method is useful for companies selling products that have short demand cycles, like clothes,
|
||||
for example. By using :abbr:`FIFO (First In, First Out)`, companies can prevent prolonged stock
|
||||
retention of specific styles.
|
||||
|
||||
.. seealso::
|
||||
:doc:`About removal strategies <../removal_strategies>`
|
||||
This method is useful for companies selling products that have short demand cycles, like clothes.
|
||||
By using :abbr:`FIFO (First In, First Out)`, companies can prevent prolonged stock retention of
|
||||
specific styles.
|
||||
|
||||
.. example::
|
||||
Various quantities of the product, `T-shirt`, tracked by lot numbers, arrive on August 1st and
|
||||
August 25th. For an order made on September 1st, the :abbr:`FIFO (First In, First Out)` removal
|
||||
strategy prioritizes lots that have been in stock the longest. So, products received on August
|
||||
1st are selected first for picking.
|
||||
Different shipments of t-shirts, tracked by lot numbers, arrive in a business's warehouse between
|
||||
August 1st and August 25th. When a customer makes an order on September 1st, the :abbr:`FIFO
|
||||
(First In, First Out)` removal strategy prioritizes lots that have been in stock the longest. So,
|
||||
products received on August 1st are selected first for picking.
|
||||
|
||||
.. image:: fifo/fifo-example.png
|
||||
:align: center
|
||||
:alt: Illustration of FIFO selecting the oldest products in stock.
|
||||
|
||||
.. seealso::
|
||||
:ref:`Lot/serial number setup details <inventory/warehouses_storage/lots-setup>`
|
||||
.. _inventory/warehouses_storage/fifo_enable:
|
||||
|
||||
Enabling the FIFO removal strategy
|
||||
==================================
|
||||
|
||||
Lots and serial numbers differentiate identical products and track information like arrival or
|
||||
expiration dates. To enable this feature, navigate to :menuselection:`Inventory --> Configuration
|
||||
--> Settings`. Under the :guilabel:`Traceability` section, check the box beside :guilabel:`Lots &
|
||||
Serial Numbers`.
|
||||
|
||||
.. image:: fifo/enable-lots-serial-numbers.png
|
||||
:alt: Enable Lots & Serial Numbers in the Inventory settings.
|
||||
|
||||
Enable tracking by lots or serial numbers
|
||||
-----------------------------------------
|
||||
|
||||
Next, ensure the intended product is tracked by lots or serial numbers by navigating to the product
|
||||
form through :menuselection:`Inventory --> Products --> Products` and selecting the desired product.
|
||||
On the product form, open the :guilabel:`General Information` tab and select the check box next to
|
||||
the :guilabel:`Track Inventory` field, then select either :guilabel:`By Unique Serial Number` or
|
||||
:guilabel:`By Lots`.
|
||||
|
||||
.. image:: fifo/track-by-serial-number.png
|
||||
:alt: Enable tracking by serial number.
|
||||
|
||||
Assigning lots and serial numbers
|
||||
---------------------------------
|
||||
|
||||
After enabling the features, assign lot or serial numbers to products using an :doc:`inventory
|
||||
adjustment <../../warehouses_storage/inventory_management/count_products>` or :ref:`during
|
||||
reception <inventory/product_management/assign-lots>`.
|
||||
|
||||
Setting removal strategies
|
||||
--------------------------
|
||||
|
||||
After lot or serial numbers have been assigned, set the removal strategy on the product category or
|
||||
storage location.
|
||||
|
||||
.. image:: fifo/location-categories.png
|
||||
:alt: Find the Locations or Categories from the Configuration menu.
|
||||
|
||||
On the location
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
Open :menuselection:`Inventory app --> Configuration --> Locations`. Select the desired location. On
|
||||
the location form, under the :guilabel:`Logistics` heading, select :guilabel:`First In First Out
|
||||
(FIFO)` from the list of removal strategies.
|
||||
|
||||
.. image:: fifo/fifo-on-location.png
|
||||
:alt: Set First In First Out as the location removal strategy.
|
||||
|
||||
On the product category
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Configure removal strategies on product categories by going to :menuselection:`Inventory app -->
|
||||
Configuration --> Categories` and selecting the intended product category. Next, in the
|
||||
:guilabel:`Force Removal Strategy` field, specify :guilabel:`First In First Out (FIFO)`.
|
||||
|
||||
.. image:: fifo/fifo-on-category.png
|
||||
:alt: Set First In First Out as the product category removal strategy.
|
||||
|
||||
.. important::
|
||||
When there are different removal strategies applied on both the location and product category for
|
||||
a product, the value set on the :guilabel:`Force Removal Strategy` field set on a product
|
||||
category form is applied as top priority.
|
||||
|
||||
.. _inventory/warehouses_storage/arrival_date:
|
||||
|
||||
@@ -29,18 +88,19 @@ Arrival date
|
||||
============
|
||||
|
||||
To see the product lot or serial number that arrived in inventory first, navigate to
|
||||
:menuselection:`Inventory app --> Products --> Lots/Serial Numbers`.
|
||||
:menuselection:`Inventory app --> Products --> Lots/Serial Numbers`. By default, this list is
|
||||
grouped by location. If necessary, remove that grouping and group by product instead.
|
||||
|
||||
Then, select the :guilabel:`▶️ (right-pointing arrow)` icon on the left of a product line, in order
|
||||
to reveal a list of the product's lots or serial numbers that are in stock. The :guilabel:`Created
|
||||
On` field shows the lot/serial number creation date, which is, essentially, the arrival date.
|
||||
Then, select the :icon:`fa-caret-right` :guilabel:`(right-pointing arrow)` icon on the left of a
|
||||
product line, in order to reveal a list of the product's lots or serial numbers that are in stock.
|
||||
The :guilabel:`Created on` field shows the lot/serial number creation date, which the system
|
||||
considers to be the arrival date.
|
||||
|
||||
.. example::
|
||||
Serial number `00000000500` of the product, `Cabinet with Doors`, arrived on December 29th, as
|
||||
displayed in the :guilabel:`Created On` field.
|
||||
Serial number `0000000000500` of the product, `Cabinet with Doors`, arrived on December 9th, as
|
||||
displayed in the :guilabel:`Created on` field.
|
||||
|
||||
.. image:: fifo/created-on.png
|
||||
:align: center
|
||||
:alt: Display arrival date of a lot for an item.
|
||||
|
||||
Workflow
|
||||
@@ -55,10 +115,6 @@ the :guilabel:`Force Removal Strategy`.
|
||||
The white shirts are tracked :guilabel:`By Lots` in the :guilabel:`Inventory` tab of the product
|
||||
form.
|
||||
|
||||
.. seealso::
|
||||
- :ref:`Set up force removal strategy <inventory/warehouses_storage/removal-config>`
|
||||
- :ref:`Enable lots tracking <inventory/warehouses_storage/lots-setup>`
|
||||
|
||||
The following table represents the on-hand stock and lot number details of white shirts.
|
||||
|
||||
.. list-table::
|
||||
@@ -84,14 +140,19 @@ for six white shirts by navigating to the :menuselection:`Sales app` and creatin
|
||||
After clicking :guilabel:`Confirm` on the sales order, a delivery order with the oldest lot numbers
|
||||
for shirts are reserved, using the :abbr:`FIFO (First In, First Out)` removal strategy.
|
||||
|
||||
To view the detailed pickings, click the :guilabel:`⦙≣ (bulleted list)` icon, located on the
|
||||
far-right of the white shirt's product line in the :guilabel:`Operations` tab of the delivery order.
|
||||
Doing so opens the :guilabel:`Open: Stock move` pop-up window.
|
||||
To view the detailed pickings, click the :guilabel:`Details` link, located on the far-right of the
|
||||
white shirt's product line in the :guilabel:`Operations` tab of the delivery order. Doing so opens
|
||||
the :guilabel:`Detailed Operations` pop-up window.
|
||||
|
||||
In the :guilabel:`Open: Stock move` pop-up window, the :guilabel:`Pick from` field displays where
|
||||
In the :guilabel:`Detailed Operations` pop-up window, the :guilabel:`Pick From` field displays where
|
||||
the quantities to fulfill the :guilabel:`Demand` are picked from. Since the order demanded six
|
||||
shirts, all five shirts from `LOT1`, and one shirt from `LOT2`, are selected.
|
||||
|
||||
.. image:: fifo/white-shirt-picking.png
|
||||
:align: center
|
||||
:alt: Two lots being reserved for a sales order with the FIFO strategy.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`Removal strategies <../removal_strategies>`
|
||||
- :ref:`Lot/serial number setup details <inventory/warehouses_storage/lots-setup>`
|
||||
- :ref:`Set up force removal strategy <inventory/warehouses_storage/removal-config>`
|
||||
- :ref:`Enable lots tracking <inventory/warehouses_storage/lots-setup>`
|
||||
|
||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 24 KiB |
@@ -9,23 +9,85 @@ Every time an order is placed for products using the :abbr:`LIFO (Last In, First
|
||||
transfer is created for the lot/serial number that has most recently entered the stock (the **last**
|
||||
lot/serial number that entered the warehouse's inventory).
|
||||
|
||||
.. seealso::
|
||||
:doc:`About removal strategies <../removal_strategies>`
|
||||
|
||||
.. warning::
|
||||
In many countries, the :abbr:`LIFO (Last In, First Out)` removal strategy is banned, since it can
|
||||
potentially result in old, expired, or obsolete products being delivered to customers.
|
||||
|
||||
.. _inventory/warehouses_storage/lifo_enable:
|
||||
|
||||
Enabling the LIFO removal strategy
|
||||
==================================
|
||||
|
||||
Lots and serial numbers differentiate identical products and track information like arrival or
|
||||
expiration dates. To enable this feature, navigate to :menuselection:`Inventory --> Configuration
|
||||
--> Settings`. Under the :guilabel:`Traceability` section, check the box beside :guilabel:`Lots &
|
||||
Serial Numbers` to enable the feature.
|
||||
|
||||
.. image:: lifo/enable-lots-serial-numbers.png
|
||||
:alt: Enable Lots & Serial Numbers in the Inventory settings.
|
||||
|
||||
Enable tracking by lots or serial numbers
|
||||
-----------------------------------------
|
||||
|
||||
Next, ensure the intended product is tracked by lots or serial numbers by navigating to the product
|
||||
form in the :menuselection:`Inventory app --> Products --> Products`, then selecting the desired
|
||||
product. On the product form, open the :guilabel:`General Information` tab, select the checkbox next
|
||||
to the :guilabel:`Track Inventory` field, then choose either :guilabel:`By Unique Serial Number` or
|
||||
:guilabel:`By Lots`.
|
||||
|
||||
.. image:: lifo/track-by-serial-number.png
|
||||
:alt: Enable tracking by serial number.
|
||||
|
||||
Assigning lots and serial numbers
|
||||
---------------------------------
|
||||
|
||||
After enabling the features, assign lot or serial numbers to products using an :doc:`inventory
|
||||
adjustment <../../warehouses_storage/inventory_management/count_products>` or :ref:`during reception
|
||||
<inventory/product_management/assign-lots>`.
|
||||
|
||||
Setting removal strategies
|
||||
--------------------------
|
||||
|
||||
After lots or serial numbers have been assigned, set the removal strategy on the product category or
|
||||
storage location.
|
||||
|
||||
.. image:: lifo/location-categories.png
|
||||
:alt: Find the Locations or Categories from the Configuration menu.
|
||||
|
||||
On the storage location
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Open :menuselection:`Inventory app --> Configuration --> Locations`. Select the desired location. On
|
||||
the location form, under the :guilabel:`Logistics` heading, select :guilabel:`Last In First Out
|
||||
(LIFO)` from the list of removal strategies.
|
||||
|
||||
.. image:: lifo/lifo-on-location.png
|
||||
:alt: Set Last In First Out as the location removal strategy.
|
||||
|
||||
On the product category
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Configure removal strategies on product categories by going to :menuselection:`Inventory app -->
|
||||
Configuration --> Categories` and selecting the intended product category. In the
|
||||
:guilabel:`Logistics` section, specify :guilabel:`Last In First Out (LIFO)` in the :guilabel:`Force
|
||||
Removal Strategy` field.
|
||||
|
||||
.. image:: lifo/lifo-on-category.png
|
||||
:alt: Set Last In First Out as the product category removal strategy.
|
||||
|
||||
.. important::
|
||||
When there are different removal strategies applied on both the location and product category for
|
||||
a product, the value set on the :guilabel:`Force Removal Strategy` field set on a product
|
||||
category form is applied as top priority.
|
||||
|
||||
Workflow
|
||||
========
|
||||
|
||||
Consider the following example, with the product, `Cinder Block`, which is tracked :guilabel:`By
|
||||
Lots` in the :guilabel:`Inventory` tab of the product form. The :guilabel:`Force Removal Strategy`
|
||||
for the cinder block's product category is set to :guilabel:`Last In, First Out (LIFO)`.
|
||||
Lots` in the :guilabel:`General Information` tab of the product form. The :guilabel:`Force Removal
|
||||
Strategy` for the cinder block's product category is set to :guilabel:`Last In, First Out (LIFO)`.
|
||||
|
||||
.. seealso::
|
||||
- :ref:`Set up force removal strategy <inventory/warehouses_storage/removal-config>`
|
||||
- :ref:`Enable lots tracking <inventory/warehouses_storage/lots-setup>`
|
||||
- :ref:`Check arrival date <inventory/warehouses_storage/arrival_date>`
|
||||
|
||||
The following table represents the cinder blocks in stock, and their various lot number details.
|
||||
The following table lists the cinder blocks in stock and their respective lot numbers.
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
@@ -45,21 +107,28 @@ The following table represents the cinder blocks in stock, and their various lot
|
||||
- June 6
|
||||
|
||||
To see the removal strategy in action, create a :ref:`delivery order <inventory/delivery/one-step>`
|
||||
for seven cinder blocks by navigating to the :menuselection:`Sales app` and creating a new
|
||||
quotation.
|
||||
for seven cinder blocks by navigating to the **Sales** app and creating a new quotation.
|
||||
|
||||
:guilabel:`Confirm` the sales order to create a delivery order. Doing so reserves the newest lot
|
||||
numbers are using the :abbr:`LIFO (Last In, First Out)` removal strategy.
|
||||
Click :guilabel:`Confirm` on the sales order form to create a delivery order. Doing so reserves the
|
||||
newest lot numbers using the :abbr:`LIFO (Last In, First Out)` removal strategy.
|
||||
|
||||
To view the detailed pickings, click the :guilabel:`⦙≣ (bulleted list)` icon, located on the
|
||||
far-right of the cinder block's product line in the :guilabel:`Operations` tab of the delivery
|
||||
order. Doing so opens the :guilabel:`Open: Stock move` pop-up window.
|
||||
To view the detailed pickings, click the :guilabel:`Details` link at the far-right of the cinder
|
||||
block's product line in the :guilabel:`Operations` tab of the delivery order.
|
||||
|
||||
In the :guilabel:`Open: Stock move` pop-up window, the :guilabel:`Pick from` field displays where
|
||||
the quantities to fulfill the :guilabel:`Demand` are picked from. Since the order demanded seven
|
||||
cinder blocks, the newest cinder blocks from `LOT3` are selected, using the :abbr:`LIFO (Last In,
|
||||
First Out)` removal strategy.
|
||||
.. image:: lifo/details-link.png
|
||||
:alt: Find the Details link in the Operations tab of the delivery order.
|
||||
|
||||
Clicking the :guilabel:`Details` link opens the :guilabel:`Detailed Operations` pop-up window.
|
||||
|
||||
In the :guilabel:`Detailed Operations` pop-up window, the :guilabel:`Pick From` field shows where
|
||||
the quantities to fulfill the :guilabel:`Demand` are picked. Since the order demanded seven cinder
|
||||
blocks, the newest cinder blocks from `LOT3` are selected using the :abbr:`LIFO (Last In, First
|
||||
Out)` removal strategy.
|
||||
|
||||
.. image:: lifo/cinder-block-picking.png
|
||||
:align: center
|
||||
:alt: The detailed operations shows which lots are being selected for the picking.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`Removal strategies <../removal_strategies>`
|
||||
- :ref:`Enable lots tracking <inventory/warehouses_storage/lots-setup>`
|
||||
- :ref:`Check arrival date <inventory/warehouses_storage/arrival_date>`
|
||||
|
||||
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 11 KiB |
@@ -72,6 +72,8 @@ delivery order has been completed.
|
||||
:align: center
|
||||
:alt: The Packages smart button on a delivery order.
|
||||
|
||||
.. _inventory/shipping/backorders:
|
||||
|
||||
Create a backorder for items to be shipped later
|
||||
================================================
|
||||
|
||||
|
||||
@@ -6,20 +6,18 @@ Sendcloud is a shipping service aggregator that facilitates the integration of E
|
||||
carriers with Odoo. Once integrated, users can select shipping carriers on inventory operations in
|
||||
their Odoo database.
|
||||
|
||||
.. seealso::
|
||||
`Sendcloud integration documentation <https://support.sendcloud.com/hc/en-us/articles/
|
||||
360059470491-Odoo-Native-integration>`_
|
||||
|
||||
Setup in Sendcloud
|
||||
==================
|
||||
|
||||
Create an account and activate carriers
|
||||
---------------------------------------
|
||||
|
||||
To get started, go to `Sendcloud's platform <https://sendcloud.com/
|
||||
?utm_source=odoo&utm_medium=partnerships&utm_campaign=partner_integrations_page>`_ to configure the
|
||||
account and generate the connector credentials. Log in with the Sendcloud account, or create a new
|
||||
one if needed.
|
||||
To get started, `create or log in to a Sendcloud account <https://account.sendcloud.com/signup/
|
||||
?utm_source=odoo&utm_medium=partnerships&utm_campaign=partner_integrations_page>`_.
|
||||
|
||||
On the Sendcloud platform, follow the `Sendcloud integration documentation
|
||||
<https://support.sendcloud.com/hc/en-us/articles/360059470491-Odoo-Native-integration>`_ to
|
||||
configure the account and generate the connector credentials.
|
||||
|
||||
.. note::
|
||||
For new account creation, Sendcloud will ask for a :abbr:`VAT (Value-Added Tax Identification)`
|
||||
|
||||
@@ -37,11 +37,26 @@ designates one or more resources that can be used in combination to handled a bi
|
||||
*Linked resources* are only used when using the :ref:`auto-assign <appointments/configure>`
|
||||
:guilabel:`Assignment Method`.
|
||||
|
||||
Lastly, add a :guilabel:`Description` for this resource.
|
||||
Lastly, add a :guilabel:`Description` for this resource. The contents of the :guilabel:`Description`
|
||||
tab are visible to customers when booking an appointment online.
|
||||
|
||||
.. note::
|
||||
The contents of the :guilabel:`Description` tab are visible to customers when booking an
|
||||
appointment online.
|
||||
Resource capacity
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
When booking an appointment based on resource availability, the website only displays capacity up to
|
||||
`12`. This occurs even if the resource has a higher capacity. To avoid this, a new *System
|
||||
Parameter* needs to be added to the database.
|
||||
|
||||
First, ensure that :ref:`developer mode <developer-mode>` is enabled. Then, navigate to the
|
||||
:menuselection:`Settings app --> Technical --> Parameters --> System Parameters`. Click
|
||||
:guilabel:`New` to add a new parameter.
|
||||
|
||||
In the :guilabel:`Key` field, enter `appointment.resource_max_capacity_allowed`. In the
|
||||
:guilabel:`Value` field, enter the maximum capacity that should be allowed. Click
|
||||
:icon:`fa-cloud-upload` :guilabel:`(Save manually)` when finished.
|
||||
|
||||
.. image:: appointments/system-parameter.png
|
||||
:alt: The new system parameter for capacity limits.
|
||||
|
||||
.. _appointments/configure:
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 14 KiB |
@@ -92,6 +92,5 @@ settings <configuration/settings>` and choose the specific categories to display
|
||||
|
||||
configuration/pos_iot
|
||||
configuration/epos_printers
|
||||
configuration/epson_server_direct_print
|
||||
configuration/https
|
||||
configuration/epos_ssc
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
===========================
|
||||
Epson server direct printer
|
||||
===========================
|
||||
|
||||
The Epson Server Direct Print functionality allows for receipt printing from Point of Sale systems.
|
||||
Once enabled, the POS register sends tickets directly to any Epson printer model supporting Server
|
||||
Direct Print.
|
||||
|
||||
.. note::
|
||||
We recommended using the Epson **TM-m30III** model for receipt printing. However, all the
|
||||
following models are compatible:
|
||||
|
||||
- TM-H6000V
|
||||
- TM-T88VI
|
||||
- TM-T88VI-iHUB
|
||||
- TM-T88VII
|
||||
- TM-m30II-NT
|
||||
- TM-m30II-S
|
||||
- TM-m30II-SL
|
||||
- TM-m30II-H
|
||||
- TM-m30III
|
||||
- TM-m30III-H
|
||||
- TM-m50
|
||||
- TM-m50II
|
||||
|
||||
These printers don't require connecting to an :doc:`IoT system
|
||||
</applications/general/iot/connect>` or configuring an SSL certificate.
|
||||
|
||||
.. _epson-direct/pos-configuration:
|
||||
|
||||
Point of Sale configuration
|
||||
===========================
|
||||
|
||||
To configure the printer in Point of Sale, follow these steps:
|
||||
|
||||
#. :ref:`Access the POS settings <configuration/settings>`.
|
||||
#. Scroll down to the :guilabel:`Point of Sale` section and enable the :guilabel:`Epson Server
|
||||
Direct Printer` setting.
|
||||
#. Optionally, select :guilabel:`Cashdrawer` if using a cash drawer connected to the printer.
|
||||
#. Click the :icon:`fa-clipboard` :guilabel:`Copy URL` and :icon:`fa-clipboard` :guilabel:`Copy ID`
|
||||
clipboard buttons to copy the URL and ID for the :ref:`printer configuration
|
||||
<epson-direct/printer-configuration>`.
|
||||
|
||||
.. image:: epson_server_direct_print/pos-config.png
|
||||
:alt: setting to enable the Server Direct Print feature
|
||||
|
||||
.. note::
|
||||
When the printer connects to a network, it automatically prints a receipt with an IP address.
|
||||
|
||||
.. _epson-direct/printer-configuration:
|
||||
|
||||
Printer configuration
|
||||
=====================
|
||||
|
||||
To configure the printer, follow the next steps:
|
||||
|
||||
#. Connect the printer to the Internet and find the IP address on the automatically-printed receipt.
|
||||
#. Open an Internet browser, enter the printer's IP address in the search bar, and press `Enter`.
|
||||
#. On the printer homepage, click :guilabel:`Advanced Settings`, then :guilabel:`Administrator
|
||||
Login`.
|
||||
#. Enter the printer's password.
|
||||
#. Go to :menuselection:`TM-i Settings --> Services --> Server Direct Print`.
|
||||
#. Set the :guilabel:`Server Direct Print` field to :guilabel:`Enable`.
|
||||
#. In the :guilabel:`URL` field, paste the printer setup URL from the :ref:`POS configuration
|
||||
<epson-direct/pos-configuration>`.
|
||||
#. In the :guilabel:`Interval` section, set the value to :guilabel:`5`.
|
||||
#. In the :guilabel:`ID` field, paste the printer setup ID from the :ref:`POS configuration
|
||||
<epson-direct/pos-configuration>`.
|
||||
#. Click :guilabel:`Apply & Restart`.
|
||||
|
||||
.. image:: epson_server_direct_print/printer-configuration.png
|
||||
:alt: configuration in the printer settings
|
||||
|
||||
.. tip::
|
||||
- The same printer can be used for multiple POS configurations.
|
||||
- Setting the :guilabel:`Interval` field to :guilabel:`5` ensures a balance between printing
|
||||
speed and server load; the printer processes all queued receipts at each interval.
|
||||
- Ensure the printer's :guilabel:`Device ID` is set to `local_printer` in the :guilabel:`Device
|
||||
Admin` section.
|
||||
- Update the printer firmware before enabling the print confirmations.
|
||||
- Find the printer's password on the back of the device next to the :icon:`fa-lock`
|
||||
(:guilabel:`lock`) icon.
|
||||
|
||||
.. seealso::
|
||||
:doc:`epos_printers`
|
||||
@@ -10,6 +10,10 @@ customer transactions through several `physical terminals
|
||||
- The Odoo Pine Labs module is only available for Indian companies.
|
||||
- Pine Labs terminals accept credit/debit cards (Visa, MasterCard, and RuPay) and UPI QR codes
|
||||
by swiping, scanning, or tapping.
|
||||
- When an Odoo database is hosted outside India, Pine Labs requires a proxy to operate, as its
|
||||
services only accept traffic from Indian IP addresses. A proxy ensures the connection is
|
||||
routed through India for better integration. To activate a proxy on an Odoo Online or Odoo.sh
|
||||
database, `reach out to Odoo support <https://www.odoo.com/help>`_.
|
||||
|
||||
.. _pos/pine-labs/credentials:
|
||||
|
||||
|
||||
@@ -139,5 +139,6 @@ Odoo always uses two rules to compute the price of a product when a rental order
|
||||
|
||||
.. toctree::
|
||||
rental/products
|
||||
rental/service_products
|
||||
rental/manage_deposits
|
||||
|
||||
|
||||
369
content/applications/sales/rental/service_products.rst
Normal file
@@ -0,0 +1,369 @@
|
||||
=======================
|
||||
Service rental products
|
||||
=======================
|
||||
|
||||
The **Rental** app is a comprehensive tool that enables users to manage the scheduling, pricing, and
|
||||
inventory for both physical goods (products) and non-physical goods (services) within a single
|
||||
platform.
|
||||
|
||||
This flexibility allows for combining products and services like bike rentals with guided tours, or
|
||||
booking a studio with a photographer.
|
||||
|
||||
This document covers how to configure a rental service to automatically sync with staff shifts,
|
||||
track time sheet hours, and set up and link project tasks based on a rental order.
|
||||
|
||||
Settings
|
||||
========
|
||||
|
||||
To configure default settings on rental products, navigate to :menuselection:`Rental app -->
|
||||
Configuration --> Settings`.
|
||||
|
||||
.. image:: service_products/rental-settings.png
|
||||
:alt: Sample of Rental app configuration settings.
|
||||
|
||||
In the :guilabel:`Rental` section, under the :guilabel:`Default Delay Costs` subsection, fill in the
|
||||
:guilabel:`Apply after` field.
|
||||
|
||||
.. note::
|
||||
For finer control, configure the costs of late returns for the :guilabel:`Per Hour` and
|
||||
:guilabel:`Per Day` fields at the product level. If the defaults apply to all products, leave the
|
||||
:guilabel:`Product` field blank.
|
||||
|
||||
In the :guilabel:`Default Padding Time` section, fill in the :guilabel:`Padding` field.
|
||||
|
||||
Next, enable :guilabel:`Rental Transfers`. In the :guilabel:`Rent Online` section, fill in the
|
||||
:guilabel:`Minimal Rental Duration` field and designate :guilabel:`Unavailability days`. Click
|
||||
:guilabel:`Save` to apply the changes.
|
||||
|
||||
App integration configuration
|
||||
=============================
|
||||
|
||||
The following apps are essential for workflow efficiency and automation when creating a service
|
||||
product and rental order:
|
||||
|
||||
- **Sales** app: Enables the use of online payments and utilizes quotation templates within the
|
||||
**Rental** app.
|
||||
- **Sign** app: Allows for the upload and customization of different rental and service agreements.
|
||||
These documents are used to facilitate the :guilabel:`Request Signature` feature.
|
||||
- **Project** and **Planning** apps: Integrate with the Rental app to automatically match purchased
|
||||
products and services with employees based on availability.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../sales/sales_quotations/quote_template`
|
||||
- :doc:`../sales/sales_quotations/get_paid_to_validate`
|
||||
- :doc:`../../services/project/project_management`
|
||||
- :doc:`../../services/planning`
|
||||
- :doc:`../../productivity/sign`
|
||||
|
||||
Rental services
|
||||
===============
|
||||
|
||||
To view all products that can be rented in the database, navigate to :menuselection:`Rentals app -->
|
||||
Products`. By default, the :guilabel:`Rental` filter appears in the search bar, and the view is
|
||||
Kanban. Remove the filter, then click the search bar. From the preset filters, select
|
||||
:guilabel:`Services`. All the configured services appear.
|
||||
|
||||
Each Kanban card displays the name and rental price of the service.
|
||||
|
||||
.. _rental/service_products/service:
|
||||
|
||||
Create a new service product
|
||||
============================
|
||||
|
||||
.. important::
|
||||
|
||||
The **Project** and the **Sales** apps must be installed for following options to be available:
|
||||
|
||||
- :guilabel:`Create on Order`
|
||||
- :guilabel:`Project Template`
|
||||
- :guilabel:`Invoicing Policy`
|
||||
- :guilabel:`Project & Task`
|
||||
|
||||
Ticking the :guilabel:`Sales` checkbox displays the :guilabel:`Create on Order` and
|
||||
:guilabel:`Invoicing Policy`.
|
||||
|
||||
To set up a new rental service, go to the :menuselection:`Rental app --> Products` and then click
|
||||
:guilabel:`New`. In the new product window, the :guilabel:`Rental` checkbox is already ticked by
|
||||
default.
|
||||
|
||||
Tick the :guilabel:`Sales` checkbox. Select the :guilabel:`Product Type` as a :guilabel:`Service`.
|
||||
In the :guilabel:`Create on Order` drop-down menu, select :guilabel:`Project & Task`. In the
|
||||
:guilabel:`Invoicing Policy` drop-down menu, select :guilabel:`Based on Timesheets`.
|
||||
|
||||
Tick the :guilabel:`Plan Services` checkbox and either create a new role or select a pre-existing
|
||||
one. To create a new role, type in the name of the role in the blank field and click
|
||||
:guilabel:`Create and edit` that appears.
|
||||
|
||||
.. image:: service_products/service-product.png
|
||||
:alt: Sample of a configured service product in the Rental app.
|
||||
|
||||
In the :guilabel:`Create Planning Role` pop-up window, enter the role's name. Select an option for
|
||||
the :guilabel:`Services` and :guilabel:`Resources`, and click :guilabel:`Save`.
|
||||
|
||||
.. image:: service_products/create-planning-role-window.png
|
||||
:alt: Sample of the Create Planning Role window for a service product in the Rental app.
|
||||
|
||||
Configure rental price
|
||||
----------------------
|
||||
|
||||
Click the :guilabel:`Rental prices` tab and in the :guilabel:`Pricing` section, click :guilabel:`Add
|
||||
a price` to enter a new rental rate. Choose a *pricing period* (:dfn:`the unit of duration of the
|
||||
rental`) in the :guilabel:`Period` column, or create a new pricing period by typing in the name and
|
||||
clicking Create and edit.
|
||||
|
||||
.. tip::
|
||||
Customize rental rate time periods by navigating to :menuselection:`Rental app --> Configuration
|
||||
--> Rental periods`.
|
||||
|
||||
.. image:: service_products/new-rental-period.png
|
||||
:alt: Sample of a Create Period pop up window in the Rental app.
|
||||
|
||||
Next, enter the :guilabel:`Price` for that specific :guilabel:`Period`. To apply the configured
|
||||
rental rate to an existing pricelist, click in the :guilabel:`Pricelist` column and select the
|
||||
desired list from the drop-down menu.
|
||||
|
||||
In the :guilabel:`Reservations` section, fill in the :guilabel:`Hourly Fine`, :guilabel:`Daily
|
||||
Fine`, and the :guilabel:`Reserve product` time. These values are automatically populated from the
|
||||
:guilabel:`Default Delay Costs` section, provided they have been configured in the
|
||||
:menuselection:`Rental app --> Configuration --> Settings`.
|
||||
|
||||
Click the :icon:`fa-cloud-upload` :guilabel:`(Save manually)` icon near the top to save.
|
||||
|
||||
.. example::
|
||||
A photography studio rents out its photographers on an hourly and daily basis. They want to add a
|
||||
new four hour package for $750.
|
||||
|
||||
All reservations require 24-hour notice to reserve a photographer, but they do not charge a fine
|
||||
if the reservations go over the agreed time. Instead, they default to their hourly fee.
|
||||
|
||||
Create a new pricing period by navigating to :menuselection:`Rental app --> Configuration -->
|
||||
Rental periods`. Click :guilabel:`New` and configure the period for four hours.
|
||||
|
||||
Navigate to the :guilabel:`Photographer` service product and in the :guilabel:`Rental prices`
|
||||
tab, add the four hour period set at $750. Manually save to apply changes.
|
||||
|
||||
.. image:: service_products/example-4hrs-rental-period.png
|
||||
:alt: Sample of the Rental prices tab of service product in the Rental app.
|
||||
|
||||
Create a rental order with a service product
|
||||
============================================
|
||||
|
||||
In Odoo, a rental order is the same as a sales order. When creating orders in the **Rental** app
|
||||
they are referred to as rental orders.
|
||||
|
||||
Navigate to the **Rental** app which opens the Rental Orders dashboard. Click :guilabel:`New` to
|
||||
open a new rental order form.
|
||||
|
||||
Enter the :guilabel:`Customer` field, and select a :guilabel:`Quotation Template`, if applicable.
|
||||
|
||||
Next, set the desired rental duration in the :guilabel:`Rental period` field. To adjust the rental
|
||||
duration, click the first date in the :guilabel:`Rental period` field, and select the range of dates
|
||||
and times to represent the rental duration from the pop-up calendar form that appears.
|
||||
|
||||
.. image:: service_products/rental-period-field-popup.png
|
||||
:alt: Sample of the rental period field calendar pop-up window in the Rental app.
|
||||
|
||||
Once complete, click :guilabel:`Apply` in the calendar pop-up form. Following that, the pop-up form
|
||||
disappears, and the designated rental time period is represented in the :guilabel:`Duration` field.
|
||||
|
||||
Next, add a rental service in the :guilabel:`Order Lines` tab, by clicking :guilabel:`Add a product`
|
||||
and selecting the desired rental service to add to the form. Enter the desired amount in the
|
||||
:guilabel:`Quantity` column.
|
||||
|
||||
.. note::
|
||||
If a rental product is added before the Rental period field has been properly configured, the
|
||||
user can still adjust the Rental period field accordingly. Select the desired range of dates to
|
||||
represent the duration of the rental, then click Update Rental Prices in the Duration field.
|
||||
|
||||
.. image:: service_products/rental-update-rental-prices.png
|
||||
:alt: Sample of the Duration field with the Update Rental Prices option in the Rental app.
|
||||
|
||||
Doing so reveals a Confirmation pop-up window. If everything is correct, click Ok, and Odoo
|
||||
recalculates the rental price accordingly.
|
||||
|
||||
.. image:: service_products/rental-order-form.png
|
||||
:alt: Sample of a rental order for a service product in the Rental app.
|
||||
|
||||
Once all information has been entered correctly on the rental order form, click :guilabel:`Send` to
|
||||
email the quotation to the customer. When the customer approves the quotation, click
|
||||
:guilabel:`Confirm`. A banner displays on the rental order stating its current status.
|
||||
|
||||
Customer signature
|
||||
==================
|
||||
|
||||
Odoo enables electronic signature requests for customer service agreements and any other documents
|
||||
that require signatures. Service agreements detail the business relationship and mutual duties.
|
||||
These agreements protect both the provider and the customer by creating clear, enforceable
|
||||
guidelines.
|
||||
|
||||
If signatures are required, go to the **Rental** app and from the default :guilabel:`Rental Orders`
|
||||
dashboard, select the desired rental order. Click the :icon:`fa-cog` :guilabel:`(Actions)` icon, and
|
||||
click :guilabel:`Request Signature`.
|
||||
|
||||
.. image:: service_products/request-signature.png
|
||||
:alt: The Action drop-down menu for requesting a signature in the Rental app.
|
||||
|
||||
A :guilabel:`New Signature Request` pop-up window displays. Select the desired document from the
|
||||
:guilabel:`Template` drop-down menu.
|
||||
|
||||
.. image:: service_products/new-signature-request.png
|
||||
:alt: Sample of the New Signature Request pop-up window in the Rental app.
|
||||
|
||||
Doing so reveals a :guilabel:`New Signature Request` pop-up window. Upon confirming the information
|
||||
in the :guilabel:`New Signature Request` pop-up form, click :guilabel:`Send` to initiate the signing
|
||||
process.
|
||||
|
||||
.. image:: service_products/new-signature-request-message.png
|
||||
:alt: Sample of the New Signature Request message in the Rental app.
|
||||
|
||||
A link to the signature request will appear in the chatter of the rental order. The document is
|
||||
accessible to the customer via the customer portal or email.
|
||||
|
||||
.. note::
|
||||
Requesting an electronic signature can be done at any stage of the order. This feature requires
|
||||
the **Sign** app. Typically, rental or service agreements are signed **after the rental order is
|
||||
confirmed** to establish the responsibilities and terms for the parties involved.
|
||||
|
||||
.. important::
|
||||
The :guilabel:`Request Signature` feature only allows the customer to sign the document through
|
||||
their email or customer portal. The customer cannot sign the document through the user's **Sign**
|
||||
app.
|
||||
|
||||
Signing a document from an email link
|
||||
-------------------------------------
|
||||
|
||||
When a customer clicks :guilabel:`Sign document`, a separate page is then revealed, showcasing the
|
||||
document to be signed. The customer begins the process by clicking :guilabel:`Click` to start.
|
||||
|
||||
The app guides the signer to the required signature locations and allows them to create electronic
|
||||
signatures to complete the form.
|
||||
|
||||
.. image:: service_products/adopt-signature-popup.png
|
||||
:alt: Sample of a customer signature with the Auto option chosen.
|
||||
|
||||
The *Adopt your signature* pop-up window that appears in the Odoo Rental application. Once the
|
||||
document has been signed and completed, click :guilabel:`Validate & Send Completed Document` at the
|
||||
bottom of the document.
|
||||
|
||||
Odoo presents the option to download the signed document for record-keeping purposes, if necessary.
|
||||
|
||||
.. image:: service_products/validate-send-doc-button.png
|
||||
:alt: Sample of a signed document with the Validate & Send Completed Document button.
|
||||
|
||||
.. seealso::
|
||||
`Odoo Tutorials: Sign <https://www.odoo.com/slides/sign-61>`_.
|
||||
|
||||
Entering time for the rental order
|
||||
==================================
|
||||
|
||||
.. important::
|
||||
For the appropriate smart buttons to display, the **Project**, **Timesheet**, and **Planning**
|
||||
apps are needed. The selected service product on the rental order must be :ref:`properly
|
||||
configured <rental/service_products/service>` to integrate with the recommended apps.
|
||||
|
||||
Navigate to the rental orders by :menuselection:`Rental app --> Orders --> Orders` and select the
|
||||
desired rental order. At the top of the rental order form, the following smart buttons appear:
|
||||
|
||||
- :icon:`fa-puzzle-piece` :guilabel:`Tasks`: Linked to the **Projects** app and shows any projects
|
||||
or tasks related to the rental order.
|
||||
- :icon:`fa-clock-o` :guilabel:`Recorded`: Linked to the **Timesheets** app and shows how many hours
|
||||
are related to the rental order.
|
||||
- :icon:`fa-tasks` :guilabel:`Planned`: Linked to the **Planning** app and shows how many shifts are
|
||||
related to the rental order.
|
||||
|
||||
Click the :icon:`fa-puzzle-piece` :guilabel:`Tasks` smart button to view a Kanban view of all the
|
||||
associated tasks that were automatically created when confirming the rental order. Click the desired
|
||||
task, then select the :guilabel:`Timesheets` tab.
|
||||
|
||||
.. image:: service_products/rental-order-task-card.png
|
||||
:alt: Sample of a project task card for the rental order in the Rental app.
|
||||
|
||||
Click :guilabel:`Add a line` to enter the number of hours worked on the task manually. Click on the
|
||||
:icon:`fa-dollar` :guilabel:`Sales Order` smart button to return to the rental order.
|
||||
|
||||
.. image:: service_products/rental-task-timesheets-tab.png
|
||||
:alt: Sample of a task Timesheet tab for a rental order in the Rental app.
|
||||
|
||||
.. note::
|
||||
Once time is added to the :guilabel:`Timesheets` tab of a task, the status of the rental order
|
||||
is automatically changed to :guilabel:`Picked-up` and the :guilabel:`Return` button appears.
|
||||
|
||||
Create an invoice
|
||||
=================
|
||||
|
||||
Go to the desired invoice by navigating to the :menuselection:`Rental` app and, on the
|
||||
:guilabel:`Rental Orders` dashboard, click :guilabel:`To Invoice` in the :guilabel:`INVOICE STATUS`
|
||||
section to view all rental orders that require invoices to be sent.
|
||||
|
||||
.. image:: service_products/invoice-status-section.png
|
||||
:alt: Sample of the INVOICE STATUS section in the Rental app.
|
||||
|
||||
Click on the desired rental order and click :guilabel:`Create Invoice`. Select :guilabel:`Regular
|
||||
invoice` from the :guilabel:`Create invoice(s)` window and click :guilabel:`Create Draft`.
|
||||
|
||||
.. image:: service_products/create-invoices.png
|
||||
:alt: Sample of Create invoices window in the Rental app.
|
||||
|
||||
If all the details are correct, click :guilabel:`Confirm`. Click :guilabel:`Send` to email the
|
||||
invoice to the customer or :guilabel:`Print` and then click :guilabel:`Pay` if the customer is in
|
||||
person.
|
||||
|
||||
In the :guilabel:`Pay` pop-up window, select a :guilabel:`Journal` and click :guilabel:`Create
|
||||
Payment`.
|
||||
|
||||
.. image:: service_products/pay-popup.png
|
||||
:alt: Sample of the Pay pop-up window in the Rental app.
|
||||
|
||||
Click on the :icon:`fa-bars` :guilabel:`Payments` smart button that appears on the top of the rental
|
||||
order. Click :guilabel:`Validate` on the :guilabel:`Payment` page.
|
||||
|
||||
.. image:: service_products/payment-validate.png
|
||||
:alt: Sample of the Payment page in the Rental app.
|
||||
|
||||
Use the breadcrumbs to return to the rental order.
|
||||
|
||||
Pickup products
|
||||
===============
|
||||
|
||||
When time is entered on the :guilabel:`Timesheets` tab of an associated task, the rental order
|
||||
status automatically changes to :guilabel:`Picked-up`. This happens even if time is entered before
|
||||
the physical product ordered with the service is picked up.
|
||||
|
||||
If a product is rented alongside a service, it is advised to pick it up before entering time on the
|
||||
associated task. The :guilabel:`Pickup` button is still available on the rental order if time is
|
||||
entered before picking up the product.
|
||||
|
||||
When a customer picks up the product, navigate to the appropriate rental order, click
|
||||
:guilabel:`Pickup`, and then click :guilabel:`Validate` in the :guilabel:`Validate a pickup` pop-up
|
||||
form that appears.
|
||||
|
||||
.. image:: service_products/pickup-popup.png
|
||||
:alt: Sample of a service product pick up pop-up window in the Rental.
|
||||
|
||||
Doing so places a :guilabel:`Picked-up` status banner on the rental order.
|
||||
|
||||
Return products
|
||||
===============
|
||||
|
||||
Regardless if there is a product rented along with a service, the service or product must be
|
||||
returned on the rental order.
|
||||
|
||||
When a customer returns the products or when the service has been completed, navigate to the
|
||||
appropriate rental order and click :guilabel:`Return`. Validate the return by clicking
|
||||
:guilabel:`Validate` in the :guilabel:`Validate a return` pop-up form that appears.
|
||||
|
||||
.. image:: service_products/validate-a-return-window.png
|
||||
:alt: Sample of returning a service product in the Rental app.
|
||||
|
||||
Doing so places a :guilabel:`Returned` status banner on the rental order.
|
||||
|
||||
.. example::
|
||||
The photography studio had a customer who wanted to rent one of their photographers and banner
|
||||
decorations for a home photo shoot. The booking was for two hours.
|
||||
|
||||
On the :guilabel:`Validate a return` form the rental order, the banner line item matches number
|
||||
of banners picked up and the photographer line item matches the number of hours submitted on the
|
||||
:guilabel:`Timesheets` tab on the related task.
|
||||
|
||||
.. image:: service_products/return-form-example-product-service.png
|
||||
:alt: Sample of a Validate a return form with a rental product and service listed.
|
||||
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 5.4 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
BIN
content/applications/sales/rental/service_products/pay-popup.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 36 KiB |
@@ -1,8 +1,12 @@
|
||||
================================================
|
||||
Invoice based on delivered or ordered quantities
|
||||
================================================
|
||||
==================
|
||||
Invoicing policies
|
||||
==================
|
||||
|
||||
Different business policies might require different options for invoicing:
|
||||
Depending on business needs, it may be advantageous to choose whether to invoice customers based on
|
||||
the goods and services that they order or when those goods and services are delivered to them. To
|
||||
allow businesses maximum flexibility to best meet their needs, Odoo offers two invoicing policies
|
||||
that can be enabled in the **Sales** app: :ref:`Invoice what is ordered <invoice-on-order>` and
|
||||
:ref:`Invoice what is delivered <invoice-on-delivery>`.
|
||||
|
||||
- The *Invoice what is ordered* rule is used as the default mode in Odoo **Sales**, which means
|
||||
customers are invoiced once the sales order is confirmed.
|
||||
@@ -12,76 +16,116 @@ Different business policies might require different options for invoicing:
|
||||
to invoice the quantity actually delivered. When the delivery order is validated, Odoo will
|
||||
automatically decrease the on-hand quantity in the inventory.
|
||||
|
||||
Being able to have different invoicing options provides more flexibility.
|
||||
To configure an invoicing policy, go to :menuselection:`Sales app --> Configuration --> Settings`,
|
||||
and under the :guilabel:`Invoicing` heading, select an :guilabel:`Invoicing Policy` option:
|
||||
:guilabel:`Invoice what is ordered` or :guilabel:`Invoice what is delivered`.
|
||||
|
||||
Invoicing policy features
|
||||
=========================
|
||||
|
||||
To activate the necessary invoicing policy features, go to :menuselection:`Sales app -->
|
||||
Configuration --> Settings`, and under the :guilabel:`Invoicing` heading, select an
|
||||
:guilabel:`Invoicing Policy` rule: :guilabel:`Invoice what is ordered` or :guilabel:`Invoice what is
|
||||
delivered`.
|
||||
Activating an invoicing policy option automatically applies the chosen option to all newly created
|
||||
products. Existing products **must** have their invoicing policy manually updated on their product
|
||||
forms.
|
||||
|
||||
.. image:: invoicing_policy/invoicing-policy-setting.png
|
||||
:align: center
|
||||
:alt: Choosing an invoicing policy on Odoo Sales.
|
||||
:alt: Choosing an invoicing policy in the Sales app.
|
||||
|
||||
.. important::
|
||||
If the :guilabel:`Invoice what is delivered` rule is chosen, it is **not** possible to activate
|
||||
If the :guilabel:`Invoice what is delivered` option is chosen, it is **not** possible to activate
|
||||
the :guilabel:`Automatic Invoice` feature, which automatically generates invoices when an online
|
||||
payment is confirmed. Regular draft invoices can only be created once the delivery order has been
|
||||
processed and validated.
|
||||
|
||||
Invoicing policy on product form
|
||||
================================
|
||||
Changing the invoicing policy for existing products
|
||||
---------------------------------------------------
|
||||
|
||||
On any product page, via the :menuselection:`Sales app --> Products --> Products dashboard`, locate
|
||||
the :guilabel:`Invoicing Policy` option located under the :guilabel:`General Information` tab. It
|
||||
can be changed manually using the drop-down menu.
|
||||
After the invoicing policy has been configured in *Settings*, navigate to a product's form through
|
||||
:menuselection:`Sales app --> Products --> Products` and choosing a product. Locate the
|
||||
:guilabel:`Invoicing Policy` option located under the :guilabel:`General Information` tab. Use the
|
||||
drop-down menu to change the policy.
|
||||
|
||||
.. image:: invoicing_policy/invoicing-policy-general-info-tab.png
|
||||
:align: center
|
||||
:alt: How to change your invoicing policy on a product form on Odoo Sales.
|
||||
:alt: How to change invoicing policy on a product form in the **Sales** app.
|
||||
|
||||
Impact on sales flow
|
||||
====================
|
||||
.. _invoice-on-order:
|
||||
|
||||
In Odoo *Sales*, the basic sales flow starts with the creation of a quotation. Then, that quotation
|
||||
is sent to a customer. Next, it needs to be confirmed, which turns the quotation into a sales order.
|
||||
This, in turn, creates an invoice.
|
||||
Invoicing what is ordered
|
||||
=========================
|
||||
|
||||
The following is a breakdown of how invoicing policy rules impact the aforementioned sales flow:
|
||||
The *Invoice what is ordered* option is used as the default mode in the **Sales** app, which means
|
||||
customers are invoiced once a quotation has been sent to the customer and confirmed. The creation of
|
||||
a quotation in turn leads to the creation and confirmation of a sales order. An invoice can then be
|
||||
created as soon as the sales order is confirmed.
|
||||
|
||||
- :guilabel:`Invoice what is ordered`: No impact on the basic sales flow. An invoice is created as
|
||||
soon as a sale is confirmed.
|
||||
- :guilabel:`Invoice what is delivered`: Minor impact on sales flow, because the delivered quantity
|
||||
needs to be manually entered on the sales order. Or, the *Inventory* app can be installed and used
|
||||
to confirm the delivered quantity before creating an invoice with the *Sales* app.
|
||||
This invoicing policy has no impact on the basic Odoo sales flow.
|
||||
|
||||
Invoice ordered quantity workflow
|
||||
---------------------------------
|
||||
|
||||
Confirm that the product's invoicing policy is set to :guilabel:`Ordered quantities` in the product
|
||||
form. :ref:`Create a quotation and sales order <sales/create-quotation>` as normal. After the sales
|
||||
order has been confirmed, create an invoice by clicking the :guilabel:`Create Invoice` button on the
|
||||
sales order form. Choose the type of invoice to be sent, click :guilabel:`Create Draft Invoice`,
|
||||
confirm the invoice when ready, and proceed with the payment flow as normal.
|
||||
|
||||
.. example::
|
||||
A independent artisan with a small business sells handmade jewelery nationwide online. Because
|
||||
they have direct control over their inventory levels and ship with 3rd party carriers, they
|
||||
invoice their customers after a sales order has been confirmed.
|
||||
|
||||
The artisan receives an order for a necklace. They send their customer a quotation, confirm it,
|
||||
and create a sales order. After the sales order has been confirmed, an invoice can be created and
|
||||
sent to the customer for payment without any additional steps be taken. The invoice gets paid,
|
||||
the necklace is shipped and delivered, and the transaction is complete.
|
||||
|
||||
.. _invoice-on-delivery:
|
||||
|
||||
Invoicing what is delivered
|
||||
===========================
|
||||
|
||||
The *Invoice what is delivered* option invoices customers as different amounts of the ordered goods
|
||||
are delivered. This option is often used for businesses that sell large quantities of physical goods
|
||||
in each sales order, but may not always be able to completely fulfill a given order all at once. In
|
||||
these cases, the ordered quantity may differ slightly from the delivered quantity based on product
|
||||
availability. Once a quotation is confirmed, and the status changes from :guilabel:`Quotation sent`
|
||||
to :guilabel:`Sales order`, Odoo automatically adds both the delivered and invoiced quantities to
|
||||
the invoice and sales order. Both partial and complete deliveries are tracked. :ref:`Backorders
|
||||
<inventory/shipping/backorders>` can be created for partial orders that will be completed at a later
|
||||
time.
|
||||
|
||||
This invoicing policy has a minor impact on the sales flow because the delivered quantity of a
|
||||
product needs to be manually entered on the sales order.
|
||||
|
||||
.. image:: invoicing_policy/invoicing-policy-order-lines.png
|
||||
:alt: How to see delivered and invoiced quantities on Odoo Sales.
|
||||
|
||||
Invoice delivered quantity workflow
|
||||
-----------------------------------
|
||||
|
||||
Confirm that the product's invoicing policy is set to :guilabel:`Delivered quantities` in the
|
||||
product form. :ref:`Create a quotation and sales order <sales/create-quotation>` as normal. After
|
||||
the sales order has been confirmed, the product must be delivered before an invoice can be created.
|
||||
|
||||
Once the product has been shipped and delivery has been confirmed, click the :guilabel:`Delivery`
|
||||
smart button on the sales order screen and click :guilabel:`Validate` to validate the delivery
|
||||
order. Once at least a partial delivery has been confirmed, return to the sales order form. The
|
||||
:guilabel:`Create Invoice` button is now purple to indicate that an invoice can be created and
|
||||
confirmed, and that it is possible to proceed with the payment flow as normal.
|
||||
|
||||
.. warning::
|
||||
If a user attempts to create an invoice without validating the delivered quantity, the following
|
||||
error message appears: :guilabel:`There is no invoiceable line. If a product has a Delivered
|
||||
quantities invoicing policy, please make sure that a quantity has been delivered.`
|
||||
If a user attempts to create an invoice without validating the delivered quantity, the system
|
||||
returns an error message alerting them to the issue.
|
||||
|
||||
.. image:: invoicing_policy/invoicing-policy-error-message.png
|
||||
:align: center
|
||||
:alt: If Delivered Quantities invoicing policy is chosen, ensure a quantity has been
|
||||
delivered.
|
||||
.. note::
|
||||
Once a quotation is confirmed, and the status changes from :guilabel:`Quotation sent` to
|
||||
:guilabel:`Sales order`, the delivered and invoiced quantities are available to view, directly
|
||||
from the sales order. This is true for both invoicing policy rule options.
|
||||
|
||||
.. image:: invoicing_policy/invoicing-policy-order-lines.png
|
||||
:align: center
|
||||
:alt: How to see your delivered and invoiced quantities on Odoo Sales.
|
||||
|
||||
Odoo automatically adds the quantities to the invoice, both :guilabel:`Delivered` and
|
||||
:guilabel:`Invoiced`, even if it's a partial delivery, when the quotation is confirmed.
|
||||
|
||||
Finally, there are a few different options to create an invoice: :guilabel:`Regular invoice`,
|
||||
:guilabel:`Down payment (percentage)` or :guilabel:`Down payment (fixed amount)`.
|
||||
.. example::
|
||||
A produce distributor using the invoice what is delivered option sells 50 heads of lettuce to a
|
||||
local restaurant. At the time the delivery is made, only 40 heads are available. The distributor
|
||||
delivers the available heads of lettuce and creates an invoice for what was delivered. Later,
|
||||
when more supply comes in, the distributor delivers the remaning 10 heads of lettuce and creates
|
||||
a second invoice to complete the order.
|
||||
|
||||
.. seealso::
|
||||
Be sure to check out the documentation explaining down payment options to learn more:
|
||||
:doc:`/applications/sales/sales/invoicing/down_payment`
|
||||
- :doc:`../sales_quotations/create_quotations`
|
||||
- :doc:`down_payment`
|
||||
- :doc:`../../../inventory_and_mrp/inventory`
|
||||
- :doc:`../../../inventory_and_mrp/inventory/shipping_receiving/setup_configuration/multipack`
|
||||
|
||||
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 16 KiB |
@@ -12,3 +12,4 @@ Products & Prices
|
||||
products_prices/returns
|
||||
products_prices/ewallets_giftcards
|
||||
products_prices/loyalty_discount
|
||||
products_prices/alternative_products
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
====================
|
||||
Alternative products
|
||||
====================
|
||||
|
||||
The use of alternative products is a marketing strategy that involves upselling related products
|
||||
alongside a desired core product. For instance, by configuring alternative products, a customer
|
||||
could be suggested a mechanical keyboard or a wireless keyboard when they visit the eCommerce
|
||||
website page for a standard keyboard.
|
||||
|
||||
.. note::
|
||||
Alternative products are different from accessory and optional products because of where they
|
||||
show up in the customer's shopping experience.
|
||||
|
||||
- Alternative products are suggested at the bottom of an eCommerce product page whenever the
|
||||
product page is viewed. This creates an opportunity for upselling during the shopping process.
|
||||
- Accessory products appear as suggestions when viewing an eCommerce cart. This creates an
|
||||
opportunity for cross-selling during the checkout process.
|
||||
- Optional products are suggested when a core product has been added to a cart or a quotation.
|
||||
This creates an opportunity for cross-selling during the shopping process.
|
||||
|
||||
Configuring alternative products
|
||||
================================
|
||||
|
||||
To add an alternative product to a product form, navigate to :menuselection:`Sales --> Products -->
|
||||
Products` and choose a product. Ensure that the product's :guilabel:`Sales` checkbox is ticked and
|
||||
click the :guilabel:`Sales` tab. In the :guilabel:`Upsell & Cross-sell` section, click the
|
||||
:guilabel:`Alternative Products` drop-down menu to set alternative products. Products are displayed
|
||||
in alphabetical order. If the desired product isn't readily visible, type its name in the field to
|
||||
bring it up, then select it to add it as an alternative product.
|
||||
|
||||
.. figure:: alternative_products/product-form-alternative-products.png
|
||||
:alt: The alternative product field on the product form with multiple entries.
|
||||
|
||||
Entries in the :guilabel:`Alternative Products` field on a product form.
|
||||
|
||||
How alternative products appear to customers
|
||||
============================================
|
||||
|
||||
Although the **Sales** app is used to configure alternative products, customers will only encounter
|
||||
them when visiting a website created with the **eCommerce** app. Alternative products are
|
||||
automatically suggested during the shopping process when a customer visits the webpage for an
|
||||
associated core product. They appear underneath the product listing under the header
|
||||
:guilabel:`Alternative Products`.
|
||||
|
||||
.. figure:: alternative_products/alternative-products-ecommerce.png
|
||||
:alt: Alternative products as they appear on an eCommerce website.
|
||||
|
||||
The alternative products section of an eCommerce product page.
|
||||
|
||||
.. seealso::
|
||||
:doc:`/applications/websites/ecommerce/products/cross_upselling`
|
||||
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 26 KiB |
@@ -66,6 +66,8 @@ To view and/or modify any listed quotation from the :guilabel:`Quotations` dashb
|
||||
desired quotation line from the list, and Odoo reveals the specific form for that selected
|
||||
quotation.
|
||||
|
||||
.. _sales/create-quotation:
|
||||
|
||||
Create quotation
|
||||
================
|
||||
|
||||
|
||||
@@ -2,98 +2,68 @@
|
||||
Optional products
|
||||
=================
|
||||
|
||||
The use of optional products is a marketing strategy that involves the cross-selling of products
|
||||
along with a core product. The aim is to offer useful and related products to customers, which may
|
||||
result in an increased sale.
|
||||
The use of optional products is a marketing strategy that involves the cross-selling of useful and
|
||||
related products alongside a desired core product. For instance, when a business configures optional
|
||||
products in their Odoo database, an eCommerce or Website customer could be suggested a mouse and
|
||||
keyboard or an extended warranty when they add a laptop to their shopping cart.
|
||||
|
||||
For instance, if a customer wants to buy a car, they have the choice to order massaging seats, as
|
||||
well, or ignore the offer and simply buy the car. Presenting the choice to purchase optional
|
||||
products enhances the customer experience.
|
||||
|
||||
Optional products on quotations
|
||||
===============================
|
||||
|
||||
With the Odoo *Sales* application, it is possible to add or modify optional products directly on
|
||||
quotations by navigating to the :guilabel:`Optional Products` tab on a quotation form.
|
||||
|
||||
.. image:: optional_products/optional-products-tab.png
|
||||
:align: center
|
||||
:alt: How to add optional products to your quotations on Odoo Sales.
|
||||
|
||||
To add an optional product(s) to a quotation, click :guilabel:`Add a product` in the
|
||||
:guilabel:`Optional Products` tab of a quotation. Doing so reveals a blank field in the
|
||||
:guilabel:`Product` column.
|
||||
|
||||
When clicked, a drop-down menu with products from the database appear. Select the desired product
|
||||
from the drop-down menu to add it as an optional product to the quotation template.
|
||||
|
||||
.. tip::
|
||||
If the desired product isn't readily visible, type the name of the desired product in the field,
|
||||
and the option appears in the drop-down menu. Then, select that desired product to add it to the
|
||||
quotation.
|
||||
Optional products are automatically suggested during the quotation process whenever an associated
|
||||
core product is added to a quote. They are also suggested in eCommerce interactions when a customer
|
||||
adds an associated core product to their shopping cart.
|
||||
|
||||
.. note::
|
||||
When a product is added, the default :guilabel:`Quantity` is `1`, but that can be edited at any
|
||||
time.
|
||||
Optional products are differentiated from accessory products and alternative products by where
|
||||
they appear in the customer's shopping experience.
|
||||
|
||||
To delete any line item from the :guilabel:`Optional Products` tab, click the :guilabel:`🗑️ (trash
|
||||
can)` icon.
|
||||
- Optional products are suggested when a core product has been added to a cart or a quotation.
|
||||
- Accessory products appear as suggestions when viewing an eCommerce cart.
|
||||
- Alternative products are suggested at the bottom of an eCommerce product page whenever the
|
||||
product page is viewed.
|
||||
|
||||
Click the :guilabel:`Preview` button, located in the upper-left corner of the quotation, to reveal a
|
||||
preview of the quotation customers would receive, via email, along with the optional products they
|
||||
can potentially add to their order, located in the :guilabel:`Options` section.
|
||||
.. figure:: optional_products/optional-products-quotation.png
|
||||
:alt: A screen from the quotation process shows how optional products appear as a pop-up window.
|
||||
|
||||
.. image:: optional_products/optional-products-checkout.png
|
||||
:align: center
|
||||
:alt: Preview your quotations on Odoo Sales.
|
||||
Optional products as they appear during the quotation process.
|
||||
|
||||
Customers are able to add different optional products to an order by clicking the :guilabel:`🛒
|
||||
(shopping cart)` icon, located to the right of the optional product line.
|
||||
.. figure:: optional_products/optional-products-ecommerce.png
|
||||
:alt: An eCommerce shopping cart screen shows how optional products appear in eCommerce websites.
|
||||
|
||||
If a customer selects optional products, these are automatically added to the quotation managed by
|
||||
the salesperson.
|
||||
Optional products as they appear when viewing the shopping cart on an eCommerce website.
|
||||
|
||||
When the customer adds an optional product(s) to an order, the salesperson is instantly notified
|
||||
about the change, along with any other change the customer makes to an order. This allows
|
||||
salespeople to stay up-to-date with everything related to an order in the backend of the *Sales*
|
||||
application.
|
||||
Configuring optional products
|
||||
=============================
|
||||
|
||||
Optional products on quotation templates
|
||||
========================================
|
||||
With the Odoo **Sales** app, it is possible to add optional products directly to product forms. To
|
||||
add an optional product to a product form, navigate to :menuselection:`Sales --> Products -->
|
||||
Products` and choose a product.
|
||||
|
||||
.. note::
|
||||
Be sure to review the :doc:`quote_template` documentation to better understand how quotation
|
||||
templates work before reading the following information.
|
||||
Ensure that the product's :guilabel:`Sales` checkbox is checked and click the :guilabel:`Sales` tab.
|
||||
Under :guilabel:`Upsell & Cross-sell` heading, the :guilabel:`Optional Products` drop-down menu
|
||||
allows for optional products to be set. Products will be displayed in alphabetical order. If the
|
||||
desired product isn't readily visible, type its name in the field to bring it up, then select it to
|
||||
add it as an optional product.
|
||||
|
||||
For quotation templates, just like a typical quotation form, there is also an :guilabel:`Optional
|
||||
Products` tab, wherein related products or services can be added to a quotation template.
|
||||
To delete an optional product from the product form, simply click the :icon:`fa-times`
|
||||
:guilabel:`(Delete)` icon.
|
||||
|
||||
To add optional products to a quotation template, navigate to :menuselection:`Sales app -->
|
||||
Configuration --> Quotation Templates`. Then, either select an existing quotation template to edit,
|
||||
or create a new one by clicking :guilabel:`New`.
|
||||
.. image:: optional_products/optional-products-product-form.png
|
||||
:alt: Where the optional products section appears in product forms in Odoo Sales.
|
||||
|
||||
On the quotation template form, click the :guilabel:`Optional Products` tab. Under the
|
||||
:guilabel:`Optional Products` tab, click :guilabel:`Add a line`, and select the desired product to
|
||||
add as an optional product to the quotation template.
|
||||
Additional products can also be added to a core product by clicking :guilabel:`Search more...`. This
|
||||
opens the :guilabel:`Search: Optional Products` form, which displays all products in the catalog and
|
||||
includes the :guilabel:`New` button to create a new product. Multiple products may be selected as
|
||||
optional products at once when using this form by clicking their checkboxes and then clicking
|
||||
:guilabel:`Select`.
|
||||
|
||||
.. image:: optional_products/optional-products-tab-quotation-template.png
|
||||
:align: center
|
||||
:alt: Preview your quotations on Odoo Sales.
|
||||
.. image:: optional_products/search-optional-products-form.png
|
||||
:alt: The Search: Optional Products form accessed by clicking Search more...
|
||||
|
||||
The products added in the :guilabel:`Optional Products` tab are present in the quotation, by
|
||||
default, whenever that particular quotation template is used. These products can be removed, and
|
||||
additional products can be added, before the quotation is sent to a customer.
|
||||
|
||||
.. tip::
|
||||
It's best to offer optional products that would encourage a customer to add additional items to
|
||||
their order, or entice them to purchase a more expensive version of their initially selected
|
||||
product.
|
||||
|
||||
For example, if a customer purchases a wooden chair, some optional products could be: a warranty
|
||||
on that chair and/or a wooden chair with leather seats.
|
||||
|
||||
.. note::
|
||||
There is no limit to how many optional products can be added to a quotation template.
|
||||
.. important::
|
||||
Prior to Odoo 19.0, optional products were added to quotations on a separate tab in the quotation
|
||||
and quotation template forms. Beginning in 19.0, that tab has been removed from both quotations
|
||||
and quotation templates. If a core product with associated optional products is added to a
|
||||
quotation template, those optional products **will not** be automatically suggested during the
|
||||
quotation process and must instead be manually suggested to customers.
|
||||
|
||||
.. seealso::
|
||||
:doc:`quote_template`
|
||||
|
||||
|
Before Width: | Height: | Size: 6.0 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 23 KiB |