Compare commits
43 Commits
master-met
...
master-odo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ba773cb6c8 | ||
|
|
603518a6c5 | ||
|
|
7519600559 | ||
|
|
5a512bbdcf | ||
|
|
9e75bca747 | ||
|
|
7c3abb5af5 | ||
|
|
89cfd364dc | ||
|
|
8d9d0c90ed | ||
|
|
cce9456f93 | ||
|
|
1febb15453 | ||
|
|
832628a8c7 | ||
|
|
b84e81d3a1 | ||
|
|
4f098945d7 | ||
|
|
86fac322d3 | ||
|
|
958fa599e1 | ||
|
|
0604fb56f9 | ||
|
|
3fe09dd653 | ||
|
|
06eaf3a0c7 | ||
|
|
14c0438764 | ||
|
|
db3db3c727 | ||
|
|
1be6f341dd | ||
|
|
39541bb745 | ||
|
|
157c1e18ea | ||
|
|
ab5c9feb40 | ||
|
|
6c3385cf90 | ||
|
|
b53427ddde | ||
|
|
e6dbd3d9e4 | ||
|
|
646bfe2e2c | ||
|
|
e620f27378 | ||
|
|
f10c8d4ad2 | ||
|
|
b4cab2a3db | ||
|
|
999c8db465 | ||
|
|
6ec9eb1fcc | ||
|
|
baab56946f | ||
|
|
73499c595e | ||
|
|
2c1277d0f7 | ||
|
|
fc98af5814 | ||
|
|
d0b7363de5 | ||
|
|
65f1e3ce0a | ||
|
|
a48ebe55bf | ||
|
|
3d28850a40 | ||
|
|
83a68e4b9b | ||
|
|
be60243eff |
16
conf.py
@@ -478,8 +478,24 @@ def _generate_alternate_urls(app, pagename, templatename, context, doctree):
|
||||
_version = _version or app.config.version
|
||||
_lang = _lang or app.config.language or 'en'
|
||||
_canonical_page = f'{pagename}.html'
|
||||
|
||||
# legal translations have different URLs schemes as they are not managed on transifex
|
||||
# e.g. FR translation of /terms/enterprise => /fr/terms/enterprise_fr
|
||||
if pagename.startswith('legal/terms/'):
|
||||
if _lang in legal_translations and not pagename.endswith(f"_{_lang}"):
|
||||
# remove language code for current translation, set target one
|
||||
_page = re.sub("_[a-z]{2}$", "", pagename)
|
||||
if 'terms/i18n' not in _page:
|
||||
_page = _page.replace("/terms/", "/terms/i18n/")
|
||||
_canonical_page = f'{_page}_{_lang}.html'
|
||||
elif _lang == 'en' and pagename.endswith(tuple(f"_{l}" for l in legal_translations)):
|
||||
# remove language code for current translation, link to original EN one
|
||||
_page = re.sub("_[a-z]{2}$", "", pagename)
|
||||
_canonical_page = f'{_page.replace("/i18n/", "/")}.html'
|
||||
|
||||
if app.config.is_remote_build:
|
||||
_canonical_page = _canonical_page.replace('index.html', '')
|
||||
|
||||
return f'{_root}' \
|
||||
f'{f"/{_version}" if app.config.versions else ""}' \
|
||||
f'{f"/{_lang}" if _lang != "en" else ""}' \
|
||||
|
||||
@@ -47,3 +47,4 @@ functionalities, including functional support, upgrades, and hosting. `Pricing
|
||||
install/deploy
|
||||
install/cdn
|
||||
install/email_gateway
|
||||
install/geo_ip
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
==========================================
|
||||
Geo IP Installation (On-Premises Database)
|
||||
==========================================
|
||||
======
|
||||
Geo IP
|
||||
======
|
||||
|
||||
.. note::
|
||||
This documentation only applies to On-premise databases.
|
||||
|
||||
Installation
|
||||
============
|
||||
@@ -32,8 +35,8 @@ Installation
|
||||
.. seealso::
|
||||
- :doc:`CLI documentation </developer/reference/cli>`.
|
||||
|
||||
Test GeoIP Geolocation In Odoo Website
|
||||
======================================
|
||||
Test GeoIP geolocation in your Odoo website
|
||||
===========================================
|
||||
|
||||
Edit a web page to include some geo-ip information such as the country name of the current
|
||||
request IP address. To do so:
|
||||
@@ -52,7 +52,7 @@ able to read (IMAP) and send (SMTP) emails in the Microsoft 365 setup. First, cl
|
||||
Add a Permission` button and select :guilabel:`Microsoft Graph` under :guilabel:`Commonly Used
|
||||
Microsoft APIs`. After, select the :guilabel:`Delegated Permissions` option.
|
||||
|
||||
In the search bar, search for the following :guilabel:`Deregulated permissions` and click
|
||||
In the search bar, search for the following :guilabel:`Delegated permissions` and click
|
||||
:guilabel:`Add permissions` for each one:
|
||||
|
||||
- :guilabel:`SMTP.Send`
|
||||
|
||||
@@ -53,7 +53,7 @@ Resulting entry
|
||||
The resulting entry section on the top right displays the selected bank transaction matched with
|
||||
the counterpart entries and includes any remaining debits or credits. In this section, you can
|
||||
validate the reconciliation or mark it as :guilabel:`To Check`. Any :ref:`reconciliation model
|
||||
buttons <reconciliation_models_button>` are also available in the resulting entry section.
|
||||
buttons <reconciliation/button>` are also available in the resulting entry section.
|
||||
|
||||
Reconcile transactions
|
||||
======================
|
||||
@@ -62,13 +62,13 @@ Transactions can be matched automatically with the use of :doc:`reconciliation m
|
||||
<reconciliation_models>`, or they can be matched with :ref:`existing entries
|
||||
<reconciliation/existing-entries>`, :ref:`batch payments <reconciliation/batch-payments>`,
|
||||
:ref:`manual operations <reconciliation/manual-operations>`, and :ref:`reconciliation model buttons
|
||||
<reconciliation_models_button>`.
|
||||
<reconciliation/button>`.
|
||||
|
||||
#. Select a transaction among unmatched bank transactions.
|
||||
#. Define the counterpart. There are several options for defining a counterpart, including
|
||||
:ref:`matching existing entries <reconciliation/existing-entries>`, :ref:`manual operations
|
||||
<reconciliation/manual-operations>`, :ref:`batch payments <reconciliation/batch-payments>`, and
|
||||
:ref:`reconciliation model buttons <reconciliation_models_button>`.
|
||||
:ref:`reconciliation model buttons <reconciliation/button>`.
|
||||
#. If the resulting entry is not fully balanced, balance it by adding another existing counterpart
|
||||
entry or writing it off with a :ref:`manual operation <reconciliation/manual-operations>`.
|
||||
#. Click the :guilabel:`Validate` button to confirm the reconciliation and move to the next
|
||||
@@ -90,8 +90,8 @@ Match existing entries
|
||||
----------------------
|
||||
|
||||
This tab contains matching entries Odoo automatically pre-selects according to the reconciliation
|
||||
models. The entry order is based on :ref:`reconciliation models <reconciliation_models_suggestion>`,
|
||||
with suggested entries appearing first.
|
||||
models. The entry order is based on :doc:`reconciliation models <reconciliation_models>`, with
|
||||
suggested entries appearing first.
|
||||
|
||||
.. tip::
|
||||
The search bar within the :guilabel:`Match Existing Entries` tab allows you to search for
|
||||
@@ -130,10 +130,11 @@ of the relevant optional fields.
|
||||
.. image:: reconciliation/fully-paid.png
|
||||
:alt: Click on fully paid to manually set an invoice as entirely paid.
|
||||
|
||||
.. _reconciliation/button:
|
||||
|
||||
Reconciliation model buttons
|
||||
----------------------------
|
||||
|
||||
Use a :ref:`reconciliation model button <reconciliation_models_button>` for manual operations that
|
||||
are frequently used. These custom buttons allow you to quickly reconcile bank transactions manually
|
||||
and can also be used in combination with existing entries.
|
||||
Use a :doc:`reconciliation model <reconciliation_models>` button for manual operations that are
|
||||
frequently used. These custom buttons allow you to quickly reconcile bank transactions manually and
|
||||
can also be used in combination with existing entries.
|
||||
|
||||
@@ -1,129 +1,123 @@
|
||||
=====================
|
||||
Reconciliation Models
|
||||
Reconciliation models
|
||||
=====================
|
||||
|
||||
Once the bank statements are correctly imported, it is essential to *reconcile* the records properly
|
||||
and ensure all *Journal Entries* are balanced and in agreement. To ease and speed up the
|
||||
reconciliation process, you can configure **Reconciliation Models**, which are particularly useful
|
||||
with recurrent entries such as bank fees.
|
||||
Reconciliation models are used to automate the :doc:`bank reconciliation <reconciliation>` process,
|
||||
which is especially handy when dealing with recurring entries like bank fees. Reconciliation models
|
||||
can also be helpful in handling :doc:`cash discounts <../customer_invoices/cash_discounts>`.
|
||||
|
||||
.. todo:: Add a link to the Reconciliation process in the paragraph above, once the doc will have
|
||||
been updated.
|
||||
|
||||
.. note::
|
||||
Reconciliation Models are also useful to handle *Cash Discounts*. Please refer to
|
||||
:doc:`this documentation <../customer_invoices/cash_discounts>` for more
|
||||
information.
|
||||
|
||||
.. _reconciliation_models_types:
|
||||
|
||||
Types of Reconciliation Models
|
||||
==============================
|
||||
|
||||
There are three types of Reconciliation Models:
|
||||
|
||||
#. :ref:`Write-off Button <reconciliation_models_button>`
|
||||
#. :ref:`Suggestion of counterpart values <reconciliation_models_suggestion>`
|
||||
#. :ref:`Match existing invoices/bills <reconciliation_models_match>`
|
||||
|
||||
.. _reconciliation_models_button:
|
||||
|
||||
Manually create a write-off on clicked button
|
||||
---------------------------------------------
|
||||
|
||||
When you are reconciling an entry with an *Open Balance*, you can use the buttons available under
|
||||
the *Manual Operations* tab to pre-fill all the values automatically, before validating the
|
||||
reconciliation. Each button is a different Reconciliation Model.
|
||||
|
||||
.. image:: reconciliation_models/reconciliation_models_button.png
|
||||
:align: center
|
||||
:alt: Example of a Reconciliation Model with a write-off button in Odoo Accounting
|
||||
|
||||
.. _reconciliation_models_suggestion:
|
||||
|
||||
Suggest counterpart values
|
||||
--------------------------
|
||||
|
||||
This type of Reconciliation Model suggests immediately counterpart values that only need to be
|
||||
validated. This automation is based on a set of rules defined in the reconciliation model.
|
||||
|
||||
.. image:: reconciliation_models/reconciliation_models_suggestion.png
|
||||
:align: center
|
||||
:alt: Example of a Reconciliation Model that suggests counterpart values in Odoo Accounting
|
||||
|
||||
.. _reconciliation_models_match:
|
||||
|
||||
Match existing invoices/bills
|
||||
-----------------------------
|
||||
|
||||
This type of Reconciliation Model automatically selects the right Customer Invoice or Vendor Bill
|
||||
that matches the payment. All that is left to do is to validate the entry. This automation is based
|
||||
on a set of rules defined in the reconciliation model.
|
||||
|
||||
.. image:: reconciliation_models/reconciliation_models_match.png
|
||||
:align: center
|
||||
:alt: Example of a Reconciliation Model that matches existing invoices and bills automatically
|
||||
in Odoo Accounting
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
To manage or create new **Reconciliation Models**, go to :menuselection:`Accounting -->
|
||||
Reconciliation --> Reconciliation Models`. Alternatively, you can also open this menu from the
|
||||
Accounting Overview, by going to your Bank Journal card, clicking on the three little dots, and then
|
||||
on *Reconciliation Models*.
|
||||
|
||||
.. image:: reconciliation_models/reconciliation_models_overview.png
|
||||
:align: center
|
||||
:alt: Open the Reconciliation Model menu from the overview dashboard in Odoo Accounting
|
||||
|
||||
.. important::
|
||||
The first entry, named *Invoices Matching Rule*, is the one responsible for the current matching
|
||||
of invoices and bills. Therefore, it is advised to leave it at the top of the list and not to
|
||||
delete it.
|
||||
|
||||
Open the model you want to modify, or click on *Create* to create a new one, then fill out the form.
|
||||
|
||||
Type
|
||||
----
|
||||
|
||||
See :ref:`above <reconciliation_models_types>` for an explanation about the different types of
|
||||
Reconciliation Models.
|
||||
|
||||
.. note::
|
||||
If the *Documents* application is installed on your database, an additional **Activity type**
|
||||
field appears when *To check* is ticked. Selecting the value *Reconciliation request* implies
|
||||
that, whenever you use this model, a *Request Document* window pops up to request a document from
|
||||
a user.
|
||||
|
||||
Conditions on Bank Statement Line
|
||||
---------------------------------
|
||||
|
||||
Define here all the conditions that are required for a Reconciliation Model to be applied.
|
||||
|
||||
.. important::
|
||||
If a record matches with several Reconciliation Models, the first one in the *sequence* of models
|
||||
will be applied. The sequence is simply the order of the models in the *list view*. They can be
|
||||
rearranged by dragging-and-dropping the handle next to the name.
|
||||
|
||||
.. image:: reconciliation_models/reconciliation_models_conditions.png
|
||||
:align: center
|
||||
:alt: Conditions for the Reconciliation Model to be applied in Odoo Accounting
|
||||
|
||||
Counterpart Values
|
||||
------------------
|
||||
|
||||
This section comprises the values that are applied by the Reconciliation Model.
|
||||
|
||||
If the value to reconcile needs to be written-off in two separate accounts, click on *Add a second
|
||||
line*.
|
||||
|
||||
.. image:: reconciliation_models/reconciliation_models_counterparts.png
|
||||
:align: center
|
||||
:alt: Counterparts values of a Reconciliation Model in Odoo Accounting
|
||||
Each model is created based on a :ref:`model type <models/type>` and :guilabel:`bank transaction
|
||||
conditions`.
|
||||
|
||||
.. seealso::
|
||||
|
||||
- :doc:`reconciliation`
|
||||
- :doc:`bank_synchronization`
|
||||
- :doc:`../customer_invoices/cash_discounts`
|
||||
- `Odoo Tutorials: Reconciliation models <https://www.odoo.com/slides/slide/reconciliation-models-1841?fullscreen=1>`_
|
||||
|
||||
.. _models/type:
|
||||
|
||||
Reconciliation model types
|
||||
==========================
|
||||
|
||||
The reconciliation models are available by going to :menuselection:`Accounting --> Configuration
|
||||
--> Banks: Reconciliation Models`. For each reconciliation model, a :guilabel:`Type` must be set.
|
||||
Three types of models exist:
|
||||
|
||||
- :guilabel:`Button to generate counterpart entry`: a button is created in the resulting entry
|
||||
section of the bank reconciliation view. If clicked, this button generates a counterpart entry to
|
||||
reconcile with the active transaction based on the rules set in the model. The rules specified in
|
||||
the model determine the counterpart entry's account(s), amount(s), label(s), and analytic
|
||||
distribution;
|
||||
- :guilabel:`Rule to suggest counterpart entry`: used for recurring transactions to match the
|
||||
transaction to a new entry based on conditions that must match the information on the transaction;
|
||||
- :guilabel:`Rule to match invoices/bills`: used for recurring transactions to match the transaction
|
||||
to existing invoices, bills, or payments based on conditions that must match the information on
|
||||
the transaction.
|
||||
|
||||
Default reconciliation models
|
||||
=============================
|
||||
|
||||
In Odoo, different models are available by default depending on the company's fiscal localization.
|
||||
These can be updated if needed. Users can also create their own reconciliation models by clicking
|
||||
:guilabel:`New`.
|
||||
|
||||
.. important::
|
||||
If a record matches with several reconciliation models, the first one in the *sequence* of models
|
||||
is applied. You can rearrange the order by dragging and dropping the handle next to the name.
|
||||
|
||||
.. image:: reconciliation_models/list-view.png
|
||||
:alt: Rearrange the sequence of models in the list view.
|
||||
|
||||
Invoices/Bills perfect match
|
||||
----------------------------
|
||||
|
||||
This model should be at the top of the *sequence* of models, as it enables Odoo to suggest matching
|
||||
existing invoices or bills with a bank transaction based on set conditions.
|
||||
|
||||
.. image:: reconciliation_models/invoices-bills-perfect-match.png
|
||||
:alt: Set rules to trigger the reconciliation.
|
||||
|
||||
Odoo automatically reconciles the payment when the :guilabel:`Auto-validate` option is selected, and
|
||||
the model conditions are perfectly met. In this case, it expects to find on the bank statement's
|
||||
line the invoice/payment's reference (as :guilabel:`Label` is selected) and the partner's name
|
||||
(as :guilabel:`Partner is set` is selected) to suggest the correct counterpart entry and reconcile
|
||||
the payment automatically.
|
||||
|
||||
Invoices/Bills partial match if underpaid
|
||||
-----------------------------------------
|
||||
|
||||
This model suggests a customer invoice or vendor bill that partially matches the payment when the
|
||||
amount received is slightly lower than the invoice amount, for example in the case of
|
||||
**cash discounts**. The difference is reconciled with the account indicated in the
|
||||
:guilabel:`counterpart entries` tab.
|
||||
|
||||
The reconciliation model :guilabel:`Type` is :guilabel:`Rule to match invoices/bills`, and the
|
||||
:guilabel:`Payment tolerance` should be set.
|
||||
|
||||
.. image:: reconciliation_models/partial-match.png
|
||||
:alt: Set rules to trigger the reconciliation.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Payment tolerance` is only applicable to lower payments. It is disregarded when an
|
||||
overpayment is received.
|
||||
|
||||
.. seealso::
|
||||
:doc:`../customer_invoices/cash_discounts`
|
||||
|
||||
Line with bank fees
|
||||
-------------------
|
||||
|
||||
This model suggests a counterpart entry according to the rules set in the model. In this case, the
|
||||
reconciliation model :guilabel:`Type` is :guilabel:`Rule to suggest counterpart entry`, and the
|
||||
:guilabel:`Label` can be used for example, to identify the information referring to the
|
||||
:guilabel:`Bank fees` in the label of the transaction.
|
||||
|
||||
.. image:: reconciliation_models/bank-fees.png
|
||||
:alt: Set rules to trigger the reconciliation.
|
||||
|
||||
.. note::
|
||||
`Regular expressions <https://regexone.com/>`_, often abbreviated as **Regex**, can be used in
|
||||
Odoo in various ways to search, validate, and manipulate data within the system. Regex can be
|
||||
powerful but also complex, so it's essential to use it judiciously and with a good understanding
|
||||
of the patterns you're working with.
|
||||
|
||||
To use regular expressions in your reconciliation models, set the :guilabel:`Transaction Type`
|
||||
to :guilabel:`Match Regex` and add your expression. Odoo automatically retrieves the
|
||||
transactions that match your Regex expression and the conditions specified in your model.
|
||||
|
||||
.. image:: reconciliation_models/regex.png
|
||||
:alt: Using Regex in Odoo
|
||||
|
||||
Partner mapping
|
||||
===============
|
||||
|
||||
Partner mapping allows you to establish rules for automatically matching transactions to the correct
|
||||
partner account, saving time and reducing the risk of errors that can occur during manual
|
||||
reconciliation. For example, you can create a partner mapping rule for incoming payments with
|
||||
specific reference numbers or keywords in the transaction description. When an incoming payment
|
||||
meets these criteria, Odoo automatically maps it to the corresponding customer's account.
|
||||
|
||||
To create a partner mapping rule, go to the :guilabel:`Partner Mapping` tab and enter the
|
||||
:guilabel:`Find Text in Label`, :guilabel:`Find Text in Notes`, and :guilabel:`Partner`.
|
||||
|
||||
.. image:: reconciliation_models/partner-mapping.png
|
||||
:alt: defining partner mapping
|
||||
|
||||
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 9.8 KiB |
|
Before Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
@@ -124,8 +124,14 @@ If not done yet, :ref:`install <general/install>` the :guilabel:`Peppol` module
|
||||
Registration
|
||||
------------
|
||||
|
||||
Go to :menuselection:`Accounting --> Configuration --> Settings`, tick the :guilabel:`Use PEPPOL
|
||||
Invoicing` checkbox, and fill in the following information:
|
||||
Go to :menuselection:`Accounting --> Configuration --> Settings`. If you do not have the
|
||||
Peppol module installed, first tick the :guilabel:`Enable PEPPOL` checkbox and then **manually
|
||||
save**.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-install.png
|
||||
:alt: Peppol module installation
|
||||
|
||||
Fill in the following information:
|
||||
|
||||
- :guilabel:`Peppol EAS`. This is the Peppol Electronic Address Scheme and usually depends on your
|
||||
company's country. Odoo often prefills this with the most commonly used EAS code in your country.
|
||||
@@ -145,14 +151,21 @@ previous provider.
|
||||
.. image:: electronic_invoicing/peppol-settings.png
|
||||
:alt: Configuration for peppol
|
||||
|
||||
Finally, click on :guilabel:`Validate registration`.
|
||||
Finally, click :guilabel:`Validate registration`. If you want to explore or demo Peppol, you can
|
||||
choose to register in :guilabel:`Demo` mode. Otherwise, select :guilabel:`Live`.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-demo-mode.png
|
||||
:alt: Peppol demo mode selection
|
||||
|
||||
.. note::
|
||||
When testing Peppol, the system parameter `account_peppol.edi.mode` can be changed to `test`.
|
||||
Then, the registration occurs on the test server.
|
||||
Then, a radio button appears with the option to register on the test server.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-system-parameter.png
|
||||
:alt: Peppol test mode
|
||||
:alt: Peppol test mode parameter
|
||||
|
||||
.. image:: electronic_invoicing/peppol-test-mode-settings.png
|
||||
:alt: Peppol test mode selection
|
||||
|
||||
Now, you can request a verification code to be sent to you by clicking :guilabel:`Verify phone
|
||||
number`.
|
||||
@@ -205,6 +218,10 @@ is set to Valid.
|
||||
While Odoo prefills both the EAS code and the Endpoint number based on the information available
|
||||
for a contact, it is better to confirm these details directly with the contact.
|
||||
|
||||
It is possible to verify the Peppol participant status of several customers at once.
|
||||
To do so, go to :menuselection:`Accounting --> Customers --> Customers` and switch to the list view.
|
||||
Select the customers you want to verify and then click :menuselection:`Actions --> Verify Peppol`.
|
||||
|
||||
Send invoices
|
||||
-------------
|
||||
|
||||
@@ -216,6 +233,13 @@ invoice form. To queue multiple invoices, select them in the list view and click
|
||||
.. image:: electronic_invoicing/peppol-send-print.png
|
||||
:alt: Send peppol invoice
|
||||
|
||||
Posted invoices that can be sent via Peppol are marked as :guilabel:`Peppol Ready`.
|
||||
To display them, use the :guilabel:`Peppol Ready` filter or access the Accounting dashboard and
|
||||
click :guilabel:`Peppol ready invoices` on the corresponding sales journal.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-ready-invoices.png
|
||||
:alt: Filter Peppol ready invoices
|
||||
|
||||
Once the invoices are sent via Peppol, the status is changed to :guilabel:`Processing`. The
|
||||
status is changed to `Done` after they have been successfully delivered to the contact's Access
|
||||
Point.
|
||||
@@ -228,6 +252,13 @@ Point.
|
||||
it displayed by selecting it from the optional columns, accessible from the top right corner of
|
||||
the Invoices list view.
|
||||
|
||||
A cron runs regularly to check the status of these invoices. It is possible to check the status
|
||||
before the cron runs by clicking :guilabel:`Fetch Peppol invoice status` in the corresponding
|
||||
sales journal on the Accounting dashboard.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-fetch-message-status.png
|
||||
:alt: Fetch invoice Peppol status
|
||||
|
||||
Receive vendor bills
|
||||
--------------------
|
||||
|
||||
@@ -237,3 +268,10 @@ drafts.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-receive-bills.png
|
||||
:alt: peppol receive bills
|
||||
|
||||
If you want to retrieve incoming Peppol documents before the cron runs, you can do so from the
|
||||
Accounting dashboard on the main Peppol purchase journal that you set up in the settings. Just click
|
||||
:guilabel:`Fetch from Peppol`.
|
||||
|
||||
.. image:: electronic_invoicing/peppol-fetch-bills.png
|
||||
:alt: Fetch bills from Peppol
|
||||
|
||||
|
Before Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
@@ -2,146 +2,72 @@
|
||||
Internal transfers
|
||||
==================
|
||||
|
||||
In Odoo, internal money transfers can be made in a few clicks. You need at least either two bank
|
||||
accounts, two cash journals, or one bank account and one cash journal.
|
||||
Internal money transfers can be handled in Odoo. At least two bank accounts are needed to make
|
||||
internal transfers.
|
||||
|
||||
.. seealso::
|
||||
:doc:`How to add an additional bank account <../bank>`
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
An internal transfer account is automatically created on your database based on your company's
|
||||
localization and depending on your country’s legislation. If needed, the default :guilabel:`Internal
|
||||
transfer account` can be modified by going to :menuselection:`Accounting app --> Configuration -->
|
||||
Settings` and then under the :guilabel:`Default Accounts` section.
|
||||
|
||||
.. note::
|
||||
At least two bank accounts are needed to make internal transfers. Refer to
|
||||
:doc:`Bank and cash accounts section <../bank>` to see how to add an additional bank
|
||||
account to your database.
|
||||
localization and depending on your country’s legislation. To modify the default :guilabel:`Internal
|
||||
transfer account`, go to :menuselection:`Accounting --> Configuration --> Settings` and scroll down
|
||||
to the :guilabel:`Default Accounts` section.
|
||||
|
||||
Register an internal transfer from one bank to another
|
||||
======================================================
|
||||
|
||||
Let's say you have two bank accounts registered on your database and you want to transfer 1,000 USD
|
||||
from Bank A to Bank B.
|
||||
If you want to transfer money from one bank to another, access the Accounting Dashboard, click the
|
||||
drop-down selection button (:guilabel:`⋮`) on the bank from which you want to make the transfer,
|
||||
then click :guilabel:`Payments`. Select or create a payment, tick the :guilabel:`Internal Transfer`
|
||||
checkbox, and select a :guilabel:`Destination Journal` before you :guilabel:`Confirm` the internal
|
||||
transfer.
|
||||
|
||||
Log an internal transfer
|
||||
------------------------
|
||||
The money is now booked in the transfer account and another payment is automatically created in the
|
||||
destination journal.
|
||||
|
||||
From the Accounting Dashboard, click on the drop-down selection button (:guilabel:`⋮`) on one of
|
||||
your banks. In the :guilabel:`New` column click on :guilabel:`Internal Transfer` and enter the
|
||||
information related to the transfer.
|
||||
.. example::
|
||||
|
||||
.. image:: internal_transfers/internal_transfer.png
|
||||
:align: center
|
||||
:alt: Fill in the information related to your internal transfer
|
||||
- Bank journal (Bank A)
|
||||
|
||||
.. note::
|
||||
Fill in the :guilabel:`Memo` field for automatic reconciliation.
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:stub-columns: 1
|
||||
|
||||
:guilabel:`Save` and :guilabel:`Confirm` to register your internal transfer. The money is now booked
|
||||
in the transfer account and another payment is **automatically** created in the destination journal
|
||||
(Bank B).
|
||||
* - **Account**
|
||||
- **Debit**
|
||||
- **Credit**
|
||||
* - Outstanding Payments account
|
||||
-
|
||||
- $1,000
|
||||
* - **Internal transfer account**
|
||||
- **$1,000**
|
||||
-
|
||||
|
||||
Bank journal (Bank A)
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
- Bank journal (Bank B)
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:stub-columns: 1
|
||||
|
||||
* - **Account**
|
||||
- **Debit**
|
||||
- **Credit**
|
||||
* - Outstanding Payments account
|
||||
-
|
||||
- $1,000
|
||||
* - **Internal transfer account**
|
||||
- **$1,000**
|
||||
-
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:stub-columns: 1
|
||||
|
||||
Automated booking - Bank journal (BANK B)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
* - **Account**
|
||||
- **Debit**
|
||||
- **Credit**
|
||||
* - Outstanding Receipts account
|
||||
- $1,000
|
||||
-
|
||||
* - **Internal transfer account**
|
||||
-
|
||||
- **$1,000**
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:stub-columns: 1
|
||||
There is **one outstanding payment** and **one outstanding receipt** pending in your two bank
|
||||
account journals because the bank statement confirming the sending and receiving of the money
|
||||
has not been booked yet.
|
||||
|
||||
* - **Account**
|
||||
- **Debit**
|
||||
- **Credit**
|
||||
* - Outstanding Receipts account
|
||||
- $1,000
|
||||
-
|
||||
* - **Internal transfer account**
|
||||
-
|
||||
- **$1,000**
|
||||
|
||||
.. note::
|
||||
There are one outstanding payment and one outstanding receipt pending in your two bank account
|
||||
journals, because the bank statement confirming the sending and receiving of the money has not
|
||||
been booked yet.
|
||||
|
||||
.. image:: internal_transfers/outstanding-payments-receipts.png
|
||||
:align: center
|
||||
:alt: Outstanding Payments/Receipts pending bank statement booking
|
||||
|
||||
.. _interbank/import-and-reconcile:
|
||||
|
||||
Manage and reconcile bank statements
|
||||
------------------------------------
|
||||
|
||||
The next step is to book the bank statements to finalize the transaction by creating,
|
||||
:doc:`importing <../bank/transactions>`, or :doc:`synchronizing <../bank/bank_synchronization>` your
|
||||
:guilabel:`Transactions lines`. Fill in the :guilabel:`Ending balance` and click on the
|
||||
:guilabel:`Reconcile` button.
|
||||
|
||||
.. image:: internal_transfers/transactions-line.png
|
||||
:align: center
|
||||
:alt: Transaction lines to be filled in prior to reconciliation
|
||||
Once this is done, you can book and reconcile your bank statement lines as usual.
|
||||
|
||||
.. seealso::
|
||||
:doc:`../bank/reconciliation`
|
||||
|
||||
In the next window, choose counterparts for the payment - in this example, the outstanding payment
|
||||
account - then click :guilabel:`Validate`.
|
||||
|
||||
.. image:: internal_transfers/bank-reconciliation.png
|
||||
:align: center
|
||||
:alt: Reconcile your payment
|
||||
|
||||
Bank journal entry
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:stub-columns: 1
|
||||
|
||||
* - **Account**
|
||||
- **Debit**
|
||||
- **Credit**
|
||||
* - Outstanding Payment
|
||||
- $1,000
|
||||
-
|
||||
* - Bank Account (BANK A)
|
||||
-
|
||||
- **$1,000**
|
||||
|
||||
The same steps must be repeated once you receive the bank statement related to Bank B. Book and
|
||||
reconcile your bank statement lines.
|
||||
|
||||
Bank journal entry
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:stub-columns: 1
|
||||
|
||||
* - **Account**
|
||||
- **Debit**
|
||||
- **Credit**
|
||||
* - Outstanding Receipt
|
||||
-
|
||||
- $1,000
|
||||
* - Bank Account (BANK B)
|
||||
- **$1,000**
|
||||
-
|
||||
|
||||
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 26 KiB |
@@ -20,11 +20,11 @@ method, making the payment process much easier.
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Make sure your :ref:`Payment Providers are correctly configured <payment_providers/configuration>`.
|
||||
Make sure your :doc:`payment providers are correctly configured <../../payment_providers>`.
|
||||
|
||||
.. note::
|
||||
By default, ":doc:`Wire Transfer </applications/finance/payment_providers/wire_transfer>`" is the only
|
||||
Payment Provider activated, but you still have to fill out the payment details.
|
||||
By default, ":doc:`Wire Transfer </applications/finance/payment_providers/wire_transfer>`" is the
|
||||
only payment provider activated, but you still have to fill out the payment details.
|
||||
|
||||
To activate the Invoice Online Payment, go to :menuselection:`Accounting --> Configuration -->
|
||||
Settings --> Customer Payments`, enable **Invoice Online Payment**, and click on *Save*.
|
||||
|
||||
@@ -242,6 +242,206 @@ journal.
|
||||
|
||||
.. _belgium/einvoicing:
|
||||
|
||||
CodaBox
|
||||
-------
|
||||
|
||||
**CodaBox** is a service that allows Belgian accounting firms accessing their clients' bank
|
||||
information and statements. Odoo provides a way to import such statements automatically.
|
||||
|
||||
.. note::
|
||||
As an accounting firm, you must manage your clients on separate databases and configure them
|
||||
individually to avoid mixing up their data.
|
||||
|
||||
Configuration
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
The configuration must be done on each client database. In the following
|
||||
instructions, we will refer to your client's company as *Company* and to your
|
||||
accounting firm as *Accounting Firm*.
|
||||
|
||||
You must first :ref:`Install <general/install>` :guilabel:`CodaBox` to start.
|
||||
|
||||
.. important::
|
||||
Make sure the company settings are correctly configured, i.e., the country is set to
|
||||
:guilabel:`Belgium`, the :guilabel:`Tax ID` and :guilabel:`Accounting Firm` fields are filled,
|
||||
as well as the :guilabel:`Tax ID` of the accounting firm (unless it is the same as the
|
||||
company's :guilabel:`Tax ID`).
|
||||
|
||||
Configure the Journals
|
||||
**********************
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: For CODA files
|
||||
|
||||
#. :doc:`Create a new bank journal <../accounting/bank>`.
|
||||
#. Set the right IBAN in the :guilabel:`Account Number` field.
|
||||
#. Select :guilabel:`CodaBox synchronisation` as the :guilabel:`Bank Feed`.
|
||||
|
||||
.. image:: belgium/codabox_configuration_coda_journal.png
|
||||
:align: center
|
||||
:alt: Configuration of a CODA journal.
|
||||
|
||||
.. tab:: For SODA files
|
||||
|
||||
#. Create a new miscellaneous journal.
|
||||
#. Go to :menuselection:`Accounting --> Configuration --> Accounting: CodaBox`.
|
||||
#. Select the journal you just created in the SODA journal field.
|
||||
|
||||
.. image:: belgium/codabox_configuration_soda_setting.png
|
||||
:align: center
|
||||
:alt: Configuration of a SODA journal.
|
||||
|
||||
.. _belgium/codabox-configuration-connection:
|
||||
|
||||
Configure the Connection
|
||||
************************
|
||||
|
||||
First, you must select which users can access the **CodaBox** connection settings. To do so, go to
|
||||
:menuselection:`Settings --> Users & Companies --> Groups`, and search for the group
|
||||
:guilabel:`Allow to show and modify the CodaBox Connection Settings`. Add the users you want
|
||||
to this group. By default, only the :guilabel:`Administrator` is part of this group.
|
||||
|
||||
Then, to configure the connection itself, go to
|
||||
:menuselection:`Accounting --> Configuration --> Accounting: CodaBox`.
|
||||
|
||||
The procedure differs depending on whether **CodaBox** is
|
||||
being setup for a first client or an additional one.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: First connection
|
||||
|
||||
#. Click on :guilabel:`Connect`, where you are redirected to
|
||||
the **CodaBox** platform, here validate the connection.
|
||||
#. Once redirected back to Odoo, the :guilabel:`Status` should be set to
|
||||
:guilabel:`Connected` and a new field :guilabel:`Access Token` should appear
|
||||
with a unique value generated by Odoo.
|
||||
|
||||
.. image:: belgium/codabox_configuration_connection_ok.png
|
||||
:align: center
|
||||
:alt: Configured connection.
|
||||
|
||||
.. note::
|
||||
This Odoo :guilabel:`Access Token` will be used to create new connections
|
||||
for other clients without having to validate the connection again.
|
||||
|
||||
.. tab:: Following connection
|
||||
|
||||
#. Copy the :guilabel:`Access Token` from a previous connection.
|
||||
#. Click on :guilabel:`Connect`.
|
||||
|
||||
The **CodaBox** connection linked to the :guilabel:`Access Token` should still exist,
|
||||
therefore there is no need to validate the connection again. A new and different
|
||||
:guilabel:`Access Token` is generated by Odoo, and the :guilabel:`Status` should be set to
|
||||
:guilabel:`Connected`.
|
||||
|
||||
.. note::
|
||||
By having a different :guilabel:`Access Token` for each client, you can
|
||||
easily revoke the access of a client to your CodaBox account without
|
||||
affecting the other clients. One client cannot interfere with another.
|
||||
|
||||
Synchronisation
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
Once the connection is established, Odoo can be synchronized with CodaBox.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: For CODA files
|
||||
|
||||
CODA files are automatically imported from CodaBox every 12 hours. You do
|
||||
not have to do anything. However, if you wish, it can also be done manually,
|
||||
by clicking on :guilabel:`Fetch CODA's` in the Accounting Dashboard.
|
||||
|
||||
.. image:: belgium/codabox_dashboard_coda.png
|
||||
:align: center
|
||||
:alt: Manually fetch CODA's.
|
||||
|
||||
.. tab:: For SODA files
|
||||
|
||||
SODA files are automatically imported from CodaBox once a day as draft. You do
|
||||
not have to do anything. However, if you wish, it can also be done manually,
|
||||
by clicking on :guilabel:`Fetch SODA's` in the Accounting Dashboard.
|
||||
|
||||
By default, if an account in the SODA is not mapped to an account in Odoo, the Suspense
|
||||
Account (499000) is used and a note is left in the created journal entry.
|
||||
|
||||
.. image:: belgium/codabox_dashboard_soda.png
|
||||
:align: center
|
||||
:alt: Manually fetch SODA's.
|
||||
|
||||
.. note::
|
||||
You can access the mapping between the SODA accounts and the Odoo accounts by clicking
|
||||
on the :guilabel:`SODA Mapping` button in
|
||||
:menuselection:`Accounting --> Configuration --> Accounting: CodaBox`.
|
||||
|
||||
.. note::
|
||||
The connection between Odoo and CodaBox can be revoked by using the
|
||||
:guilabel:`Revoke` button in the CodaBox settings, which will revoke
|
||||
the link on Odoo's side only.
|
||||
|
||||
If you have multiple connections, you will still be able to use the
|
||||
Access Token of one of them to easily reconnect Odoo and CodaBox for
|
||||
another client.
|
||||
|
||||
However, if you have only one (remaining) connection, you will not be able
|
||||
to use its Access Token to create new connections. In that case, you will
|
||||
have to revoke the connection from the CodaBox platform too,
|
||||
and then recreate a new one following the steps in the
|
||||
:ref:`first connection <belgium/codabox-configuration-connection>` section.
|
||||
|
||||
Potential issues
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
CodaBox is not configured. Please check your configuration.
|
||||
Either the Company VAT of the Accounting Firm VAT is not set.
|
||||
|
||||
It seems that the fiduciary VAT number you provided is not valid. Please check your configuration.
|
||||
Either the Company VAT of the Accounting Firm VAT is in the wrong format.
|
||||
|
||||
It seems that the fiduciary VAT number you provided does not exist in CodaBox. Please check your configuration.
|
||||
The Accounting Firm VAT number you provided is not registered in CodaBox.
|
||||
|
||||
Error while connecting to the IAP server. Please contact Odoo support.
|
||||
It seems that Odoo's IAP server is down or unreachable. Please contact
|
||||
Odoo support.
|
||||
|
||||
It seems that your CodaBox connection is not valid anymore. Please check your configuration.
|
||||
It seems that you have either revoked the access of Odoo to your CodaBox account, or that
|
||||
you have not completed the configuration process. In this case, you must click on the
|
||||
:guilabel:`Revoke connection` button in the settings, and follow again the steps in
|
||||
the :ref:`first connection <belgium/codabox-configuration-connection>` section.
|
||||
|
||||
A previous CodaBox registration already exists. Paste the access token from a previous connection here. Odoo will generate a new one, exclusive to this database.
|
||||
It seems that you have already your Accounting Firm with Odoo, but that the Access Token
|
||||
is either not filled or wrong. You should follow the steps in the
|
||||
:ref:`following connection <belgium/codabox-configuration-connection>` tab section.
|
||||
|
||||
If you have lost your Access Token, you have to go on the CodaBox platform,
|
||||
and revoke the access of Odoo to your CodaBox account. Then, you will have to follow
|
||||
the steps in the :ref:`first connection <belgium/codabox-configuration-connection>` section.
|
||||
|
||||
The provided access token is not valid for this fiduciary. Please check your configuration. If you have lost your access token, please contact Odoo support.
|
||||
Same as above.
|
||||
|
||||
It seems that no connection linked to your database/VAT number exists. Please check your configuration.
|
||||
You may obtain this error when revoking or trying to fetch files from CodaBox if
|
||||
the pair (Accounting Firm VAT, Company VAT) is not registered yet. This may happen if
|
||||
you have changed the company VAT after the connection was established for instance.
|
||||
For security reasons, you have to recreate a connection for this company VAT by following the
|
||||
steps in the :ref:`first connection <belgium/codabox-configuration-connection>` section.
|
||||
|
||||
No files were found. Please check your configuration.
|
||||
This may occur if the company VAT has changed after the connection was established.
|
||||
In that case, you must click on the :guilabel:`Revoke connection` button in the settings,
|
||||
and recreate the connection.
|
||||
|
||||
It seems you have already created a connection to CodaBox with this fiduciary. To create a new connection, you must first revoke the old one on myCodaBox portal.
|
||||
You must go on the CodaBox platform, and revoke the access of Odoo to your CodaBox account.
|
||||
Then, you will have to follow the steps in the
|
||||
:ref:`first connection <belgium/codabox-configuration-connection>` section.
|
||||
|
||||
Electronic invoicing
|
||||
====================
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
@@ -126,3 +126,59 @@ Correct an invoice that has been posted but not downloaded yet: Reset e-Faktur
|
||||
|
||||
.. image:: indonesia/indonesia-e-faktur-reset.png
|
||||
:align: center
|
||||
|
||||
.. _localization_indonesia/qris-qr:
|
||||
|
||||
QRIS QR code on invoices
|
||||
========================
|
||||
|
||||
`QRIS <https://qris.online/homepage/>`_ is a digital payment system that allows customers to make
|
||||
payments by scanning the QR code from their preferred e-wallet.
|
||||
|
||||
.. important::
|
||||
According to the `QRIS API documentation <https://qris.online/api-doc/create-invoice.php>`_,
|
||||
QRIS expires after 30 minutes. Due to this restriction, the QR code is not included in reports
|
||||
sent to customers and is only available on the customer portal.
|
||||
|
||||
Activate QR codes
|
||||
-----------------
|
||||
|
||||
Go to :menuselection:`Accounting --> Configuration --> Settings`. Under the :guilabel:`Customer
|
||||
Payments` section, activate the :guilabel:`QR Codes` feature.
|
||||
|
||||
QRIS bank account configuration
|
||||
-------------------------------
|
||||
|
||||
Go to :menuselection:`Contacts --> Configuration --> Bank Accounts` and select the bank account for
|
||||
which you want to activate QRIS. Set the :guilabel:`QRIS API Key` and :guilabel:`QRIS Merchant ID`
|
||||
based on the information provided by QRIS.
|
||||
|
||||
.. important::
|
||||
The account holder's country must be set to `Indonesia` on its contact form.
|
||||
|
||||
.. image:: indonesia/qris-setup.png
|
||||
:alt: QRIS bank account configuration
|
||||
|
||||
.. seealso::
|
||||
:doc:`../accounting/bank`
|
||||
|
||||
Bank journal configuration
|
||||
--------------------------
|
||||
|
||||
Go to :menuselection:`Accounting --> Configuration --> Journals`, open the bank journal, then fill
|
||||
out the :guilabel:`Account Number` and :guilabel:`Bank` under the :guilabel:`Journal Entries` tab.
|
||||
|
||||
.. image:: indonesia/journal-bank-config.png
|
||||
:alt: Bank journal configuration
|
||||
|
||||
Issue invoices with QRIS QR codes
|
||||
---------------------------------
|
||||
|
||||
When creating a new invoice, open the :guilabel:`Other Info` tab and set the :guilabel:`Payment
|
||||
QR-code` option to `QRIS`.
|
||||
|
||||
.. image:: indonesia/invoice-qris.png
|
||||
:alt: Select QRIS QR-code option
|
||||
|
||||
Ensure that the :guilabel:`Recipient Bank` is the one you configured, as Odoo uses this field to
|
||||
generate the QRIS QR code.
|
||||
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 10 KiB |
@@ -1,8 +1,8 @@
|
||||
:show-content:
|
||||
|
||||
=================================================
|
||||
Payment providers (credit cards, online payments)
|
||||
=================================================
|
||||
===============
|
||||
Online payments
|
||||
===============
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
@@ -23,35 +23,33 @@ Payment providers (credit cards, online payments)
|
||||
payment_providers/razorpay
|
||||
payment_providers/sips
|
||||
payment_providers/stripe
|
||||
payment_providers/xendit
|
||||
|
||||
Odoo embeds several **payment providers** that allow your customers to pay on their *Customer
|
||||
Portals* or your *eCommerce website*. They can pay sales orders, invoices, or subscriptions with
|
||||
recurring payments with their favorite payment methods such as **Credit Cards**.
|
||||
Odoo embeds several **payment providers** that allow your customers to pay online, on their
|
||||
*customer portals*, or on your *eCommerce website*. They can pay sales orders, invoices, or
|
||||
subscriptions with recurring payments using their favorite payment methods, such as
|
||||
**credit cards**.
|
||||
|
||||
Offering several payment methods increases the chances of getting paid in time, or even immediately,
|
||||
as you make it more convenient for your customers to pay with the payment method they prefer and
|
||||
trust.
|
||||
Each payment provider is linked to a list of supported :ref:`payment methods
|
||||
<payment_providers/payment_methods>` that can be (de)activated based on your needs.
|
||||
|
||||
.. image:: payment_providers/online-payment.png
|
||||
:align: center
|
||||
:alt: Pay online in the customer portal and select which payment provider to use.
|
||||
:alt: Online payment form
|
||||
|
||||
.. note::
|
||||
Odoo apps delegate the handling of sensitive information to the certified payment provider so
|
||||
that you don't ever have to worry about PCI compliance.
|
||||
|
||||
This means that no sensitive information (such as credit card numbers) is stored on Odoo servers
|
||||
or Odoo databases hosted elsewhere. Instead, Odoo apps use a unique reference number to the data
|
||||
stored safely in the payment providers' systems.
|
||||
that you don't ever have to worry about PCI compliance. No sensitive information (such as credit
|
||||
card numbers) is stored on Odoo servers or Odoo databases hosted elsewhere. Instead, Odoo apps
|
||||
use a unique reference number for the data stored safely in the payment providers' systems.
|
||||
|
||||
.. _payment_providers/supported_providers:
|
||||
|
||||
Supported payment providers
|
||||
===========================
|
||||
|
||||
From an accounting perspective, we can distinguish two types of payment providers: the payment
|
||||
providers that are third-party services and require you to follow another accounting workflow, and
|
||||
the payments that go directly on the bank account and follow the usual reconciliation workflow.
|
||||
To access the supported payment providers, go to :menuselection:`Accounting --> Configuration -->
|
||||
Payment Providers`, :menuselection:`Website --> Configuration --> Payment Providers`, or
|
||||
:menuselection:`Sales --> Configuration --> Payment Providers`.
|
||||
|
||||
.. _payment_providers/online_providers:
|
||||
|
||||
@@ -65,10 +63,10 @@ Online payment providers
|
||||
|
||||
* -
|
||||
- Payment flow from
|
||||
- :ref:`Tokenization <payment_providers/features/tokenization>`
|
||||
- :ref:`Manual capture <payment_providers/features/manual_capture>`
|
||||
- :ref:`Refunds <payment_providers/features/refund>`
|
||||
- :ref:`Express checkout <payment_providers/features/express_checkout>`
|
||||
- :ref:`Tokenization <payment_providers/tokenization>`
|
||||
- :ref:`Manual capture <payment_providers/manual_capture>`
|
||||
- :ref:`Refunds <payment_providers/refunds>`
|
||||
- :ref:`Express checkout <payment_providers/express_checkout>`
|
||||
* - :doc:`Adyen <payment_providers/adyen>`
|
||||
- Odoo
|
||||
- |V|
|
||||
@@ -76,13 +74,13 @@ Online payment providers
|
||||
- Full and partial
|
||||
-
|
||||
* - :doc:`Amazon Payment Services <payment_providers/amazon_payment_services>`
|
||||
- The provider website
|
||||
- The provider's website
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
* - :doc:`AsiaPay <payment_providers/asiapay>`
|
||||
- The provider website
|
||||
- The provider's website
|
||||
-
|
||||
-
|
||||
-
|
||||
@@ -94,31 +92,31 @@ Online payment providers
|
||||
- Full only
|
||||
-
|
||||
* - :doc:`Buckaroo <payment_providers/buckaroo>`
|
||||
- The provider website
|
||||
- The provider's website
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
* - :doc:`Flutterwave <payment_providers/flutterwave>`
|
||||
- The provider website
|
||||
- The provider's website
|
||||
- |V|
|
||||
-
|
||||
-
|
||||
-
|
||||
* - :doc:`Mercado Pago <payment_providers/mercado_pago>`
|
||||
- The provider website
|
||||
- The provider's website
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
* - :doc:`Mollie <payment_providers/mollie>`
|
||||
- The provider website
|
||||
- The provider's website
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
* - :doc:`PayPal <payment_providers/paypal>`
|
||||
- The provider website
|
||||
- The provider's website
|
||||
-
|
||||
-
|
||||
-
|
||||
@@ -130,7 +128,7 @@ Online payment providers
|
||||
- Full and partial
|
||||
-
|
||||
* - :doc:`SIPS <payment_providers/sips>`
|
||||
- The provider website
|
||||
- The provider's website
|
||||
-
|
||||
-
|
||||
-
|
||||
@@ -141,21 +139,29 @@ Online payment providers
|
||||
- Full only
|
||||
- Full and partial
|
||||
- |V|
|
||||
* - :doc:`Xendit <payment_providers/xendit>`
|
||||
- The provider's website
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
|
||||
.. |V| replace:: ✔
|
||||
|
||||
.. note::
|
||||
Some of these online payment providers can also be added as :doc:`bank accounts
|
||||
<../finance/accounting/bank>`, but this is **not** the same process as adding
|
||||
them as payment providers. Payment providers allow customers to pay online, and bank accounts are
|
||||
added and configured on your Accounting app to do a bank reconciliation, which is an accounting
|
||||
control process.
|
||||
- Each provider has its own specific configuration flow, depending on which feature is
|
||||
available.
|
||||
- Some of these online payment providers can also be added as :doc:`bank accounts
|
||||
<../finance/accounting/bank>`, but this is **not** the same process as adding them as payment
|
||||
providers. Payment providers allow customers to pay online, and bank accounts are added and
|
||||
configured in the Accounting app to do a :doc:`bank reconciliation
|
||||
<accounting/bank/reconciliation>`.
|
||||
|
||||
.. tip::
|
||||
In addition to the regular payment providers that integrate with an API such as Stripe, PayPal,
|
||||
In addition to the regular payment providers that integrate with an API, such as Stripe, PayPal,
|
||||
or Adyen, Odoo bundles the :doc:`Demo payment provider <payment_providers/demo>`. This payment
|
||||
provider allows you to make demo payments to test business flows involving online payments. No
|
||||
credentials are required as the demo payments are fake.
|
||||
provider allows you to test business flows involving online payments. No credentials are required
|
||||
as the demo payments are dummy payments.
|
||||
|
||||
.. _payment_providers/bank_payments:
|
||||
|
||||
@@ -164,251 +170,267 @@ Bank payments
|
||||
|
||||
- | :doc:`Wire Transfer <payment_providers/wire_transfer>`
|
||||
| When selected, Odoo displays your payment information with a payment reference. You have to
|
||||
approve the payment manually once you have received it on your bank account.
|
||||
approve the payment manually once you have received it in your bank account.
|
||||
- | :doc:`SEPA Direct Debit <../finance/accounting/payments/batch_sdd>`
|
||||
| Your customers can make a bank transfer to register a SEPA Direct Debit mandate and get their
|
||||
bank account charged directly.
|
||||
|
||||
.. _payment_providers/features:
|
||||
.. _payment_providers/add_new:
|
||||
|
||||
Additional features
|
||||
===================
|
||||
Enable a payment provider
|
||||
=========================
|
||||
|
||||
Some payment providers support additional features for the payment flow. Refer to the :ref:`table
|
||||
above <payment_providers/online_providers>` to check if your payment provider supports these
|
||||
To add a new payment provider and make its related payment methods available to your customers,
|
||||
proceed as follows:
|
||||
|
||||
#. Go to the payment provider's website, create an account, and make sure you have the API
|
||||
credentials requested for third-party use. These are necessary for Odoo to communicate with the
|
||||
payment provider.
|
||||
#. In Odoo, navigate to the :guilabel:`Payment providers` by going to :menuselection:`Accounting -->
|
||||
Configuration --> Payment Providers`, :menuselection:`Website --> Configuration --> Payment
|
||||
Providers`, or :menuselection:`Sales --> Configuration --> Payment Providers`.
|
||||
#. Select the provider and configure the :guilabel:`Credentials` tab.
|
||||
#. Set the :guilabel:`State` field to :guilabel:`Enabled`.
|
||||
|
||||
.. note::
|
||||
- The fields available in the :guilabel:`Credentials` tab depend on the payment provider. Refer
|
||||
to the :ref:`related documentation <payment_providers/supported_providers>` for more
|
||||
information.
|
||||
- Once you have enabled the payment provider, it is automatically published on your website.
|
||||
If you wish to unpublish it, click the :guilabel:`Published` button. Customers cannot make
|
||||
payments through an unpublished provider, but they can still manage
|
||||
:dfn:`(delete and assign to a subscription)` their existing tokens linked to such a provider.
|
||||
|
||||
.. _payment_providers/test-mode:
|
||||
|
||||
Test mode
|
||||
---------
|
||||
|
||||
If you wish to try the payment provider as a test, set the :guilabel:`State` field in the payment
|
||||
provider form to :guilabel:`Test mode`, then enter your provider's test/sandbox credentials in the
|
||||
:guilabel:`Credentials` tab.
|
||||
|
||||
.. note::
|
||||
By default, the payment provider remains **unpublished** in test mode so that it's not visible to
|
||||
visitors.
|
||||
|
||||
.. warning::
|
||||
We recommend using the test mode on a duplicate or a test database to avoid potential issues
|
||||
with your invoice numbering.
|
||||
|
||||
.. _payment_providers/payment_methods:
|
||||
|
||||
Payment methods
|
||||
===============
|
||||
|
||||
Each payment provider is related to a list of supported payment methods; the methods listed in the
|
||||
:guilabel:`Payment methods` field in the :guilabel:`Configuration` tab of the payment provider form
|
||||
are the ones that have been activated. To activate or deactivate a payment method for a provider,
|
||||
click :guilabel:`Enable Payment Methods`, then click the toggle button of the related method.
|
||||
|
||||
.. tip::
|
||||
Payment methods are displayed on your website based on their sequence order. To reorder them,
|
||||
click :guilabel:`Enable Payment Methods` in the payment provider form, then, in the
|
||||
:guilabel:`Payment Methods` list, drag and drop the payment methods in the desired order.
|
||||
|
||||
Icons and brands
|
||||
----------------
|
||||
|
||||
The icons displayed next to the payment method on your website are either the icons of the brands
|
||||
activated for the payment method or, if there aren't any, the icons of the payment methods
|
||||
themselves. To modify them, go to :menuselection:`Accounting --> Configuration --> Payment Methods`,
|
||||
:menuselection:`Website --> Configuration --> Payment Methods` or :menuselection:`Sales -->
|
||||
Configuration --> Payment Methods`, then click on the payment method.
|
||||
|
||||
To modify a payment method's icon, hover your mouse over the image in the upper-right corner of the
|
||||
payment method's form and click the pencil icon (:guilabel:`✎`).
|
||||
|
||||
Select the :guilabel:`Brands` tab to view the brands that have been activated for the payment
|
||||
method. The brands and their related icons are displayed based on their sequence order; to reorder
|
||||
them, drag and drop them in the desired order. To modify a brand's icon, select the brand, then,
|
||||
in the popup window that opens, hover the mouse over the image in the upper-right corner and click
|
||||
the pencil icon (:guilabel:`✎`).
|
||||
|
||||
Advanced configuration
|
||||
----------------------
|
||||
|
||||
To configure payment methods further, go to :menuselection:`Accounting --> Configuration --> Payment
|
||||
Methods`, :menuselection:`Website --> Configuration --> Payment Methods` or :menuselection:`Sales
|
||||
--> Configuration --> Payment Methods`. Click on the payment method, then activate the
|
||||
:ref:`developer mode <developer-mode>`. Click the :guilabel:`Configuration` tab to adapt the
|
||||
features.
|
||||
|
||||
.. _payment_providers/features/tokenization:
|
||||
.. danger::
|
||||
- Each payment method is preconfigured in a way that aligns with the payment providers'
|
||||
behavior and their integration with Odoo. Any change to this configuration may result in errors
|
||||
and should be tested on a duplicate or test database first.
|
||||
- Modifications to the payment method's configuration only work to the extent of the method's
|
||||
and provider's capabilities. For example, adding :ref:`countries
|
||||
<payment_providers/currencies_countries>` for a payment method only supported in one country or
|
||||
enabling :ref:`tokenization <payment_providers/tokenization>` for a method linked to a provider
|
||||
that does not support it will not produce the intended results.
|
||||
|
||||
.. _payment_providers/tokenization:
|
||||
|
||||
Tokenization
|
||||
------------
|
||||
============
|
||||
|
||||
If your payment provider supports this feature, customers can choose to save their card for later. A
|
||||
**payment token** is created in Odoo and can be used as a payment method for subsequent payments
|
||||
without having to enter the card details again. This is particularly useful for the eCommerce
|
||||
conversion rate and for subscriptions that use recurring payments.
|
||||
:ref:`If the payment provider supports this feature <payment_providers/online_providers>`, customers
|
||||
can save their payment method details for later. To enable this feature, go to the
|
||||
:guilabel:`Configuration` tab of the selected payment provider and enable :guilabel:`Allow Saving
|
||||
Payment Methods`.
|
||||
|
||||
Enable this feature by navigating to the :guilabel:`Configuration` tab from your payment provider
|
||||
and by ticking the :guilabel:`Allow Saving Payment Methods` checkbox.
|
||||
In this case, a **payment token** is created in Odoo to be used as a payment method for subsequent
|
||||
payments without the customer having to enter their payment method details again. This is
|
||||
particularly useful for the eCommerce conversion rate and subscriptions that use recurring payments.
|
||||
|
||||
.. note::
|
||||
You remain fully PCI-compliant when you enable this feature because Odoo does not store the card
|
||||
details directly. Instead, it creates a payment token that only holds a reference to the card
|
||||
details stored on the payment provider's server.
|
||||
details directly. Instead, it creates a payment token that only references the card details
|
||||
stored on the payment provider's server.
|
||||
|
||||
.. _payment_providers/features/manual_capture:
|
||||
.. _payment_providers/manual_capture:
|
||||
|
||||
Manual capture
|
||||
--------------
|
||||
==============
|
||||
|
||||
If your payment provider supports this feature, you can authorize and capture payments in two steps
|
||||
instead of one. When you authorize a payment, the funds are reserved on the customer's payment
|
||||
method but they are not immediately charged. The charge is only made when you manually capture the
|
||||
payment later on. You can also void the authorization to release the reserved funds; this is
|
||||
equivalent to a regular cancellation. Capturing payments manually can prove itself useful in many
|
||||
situations:
|
||||
:ref:`If the payment provider supports this feature <payment_providers/online_providers>`, you can
|
||||
authorize and capture payments in two steps instead of one. To enable this feature, go to the
|
||||
:guilabel:`Configuration` tab of the selected payment provider and enable :guilabel:`Capture Amount
|
||||
Manually`.
|
||||
|
||||
- Receive the payment confirmation and wait until the order is shipped to capture the payment.
|
||||
- Review and verify that orders are legitimate before the payment is completed and the fulfillment
|
||||
process starts.
|
||||
- Avoid potentially high processing fees for cancelled payments: payment providers will not charge
|
||||
you for voiding an authorization.
|
||||
- Hold a security deposit to return later, minus any deductions (e.g., after a damage).
|
||||
When you authorize a payment, the funds are reserved on the customer's payment method but not
|
||||
immediately charged. They are charged when you manually capture the payment later on. You can also
|
||||
void the authorization to cancel it and release the reserved funds. Capturing payments manually is
|
||||
helpful in many situations:
|
||||
|
||||
Enable this feature by navigating to the :guilabel:`Configuration` tab from your payment provider
|
||||
and by ticking the :guilabel:`Capture Amount Manually` checkbox.
|
||||
- Receive the payment confirmation and wait until the order is shipped to capture the payment.
|
||||
- Review and verify that orders are legitimate before the payment is completed and the fulfillment
|
||||
process starts.
|
||||
- Avoid potentially high refund fees for refunded payments: payment providers will not charge you
|
||||
for voiding an authorization.
|
||||
- Hold a security deposit to return later, minus any deductions (e.g., in case of damages).
|
||||
|
||||
To capture the payment after it was authorized, go to the related sales order or invoice and click
|
||||
on the :guilabel:`CAPTURE TRANSACTION` button. To release the funds, click on the :guilabel:`VOID
|
||||
TRANSACTION` button.
|
||||
|
||||
If your provider supports partial capture, you can select to capture only a **partial amount** of
|
||||
the full amount. The **remaining (uncaptured) amount** can either be voided or partially captured
|
||||
again later.
|
||||
the :guilabel:`Capture Transaction` button. To release the funds, click the :guilabel:`Void
|
||||
Transaction` button.
|
||||
|
||||
.. note::
|
||||
- Some payment providers support capturing only part of the authorized amount. The remaining
|
||||
amount can then be either captured or voided. These providers have the value **Full and
|
||||
partial** in the :ref:`table above <payment_providers/online_providers>`. The providers that
|
||||
only support capturing or voiding the full amount have the value **Full only**.
|
||||
only support capturing or voiding the total amount have the value **Full only**.
|
||||
- The funds are likely not reserved forever. After a certain time, they may be automatically
|
||||
released back to the customer's payment method. Refer to your payment provider's documentation
|
||||
for the exact reservation duration.
|
||||
- Odoo does not support this feature for all payment providers but some allow the manual capture
|
||||
- Odoo does not support this feature for all payment providers, but some allow the manual capture
|
||||
from their website interface.
|
||||
|
||||
.. _payment_providers/features/refund:
|
||||
.. _payment_providers/refunds:
|
||||
|
||||
Refunds
|
||||
-------
|
||||
=======
|
||||
|
||||
If your payment provider supports this feature, you can refund payments directly from Odoo. It does
|
||||
not need to be enabled first. To refund a customer payment, navigate to it and click on the
|
||||
:guilabel:`REFUND` button.
|
||||
not need to be enabled first. To refund a customer payment, navigate to it and click the
|
||||
:guilabel:`Refund` button.
|
||||
|
||||
.. note::
|
||||
- Some payment providers support refunding only part of the amount. The remaining amount can then
|
||||
optionally be refunded too. These providers have the value **Full and partial** in the
|
||||
optionally be refunded, too. These providers have the value **Full and partial** in the
|
||||
:ref:`table above <payment_providers/online_providers>`. The providers that only support
|
||||
refunding the full amount have the value **Full only**.
|
||||
- Odoo does not support this feature for all payment providers but some allow to refund payments
|
||||
refunding the total amount have the value **Full only**.
|
||||
- Odoo does not support this feature for all payment providers, but some allow to refund payments
|
||||
from their website interface.
|
||||
|
||||
.. _payment_providers/features/express_checkout:
|
||||
.. _payment_providers/express_checkout:
|
||||
|
||||
Express checkout
|
||||
----------------
|
||||
================
|
||||
|
||||
If your payment provider supports this feature, customers can use the **Google Pay** and **Apple
|
||||
Pay** buttons to pay their eCommerce orders in one click without filling the contact form. Using one
|
||||
of those buttons, customers go straight from the cart to the confirmation page, stopping by the
|
||||
payment form of Google or Apple to validate the payment.
|
||||
:ref:`If the payment provider supports this feature <payment_providers/online_providers>`, you can
|
||||
allow customers to use the :guilabel:`Google Pay` and :guilabel:`Apple Pay` buttons and pay their
|
||||
eCommerce orders in one click. When they use one of these buttons, customers go straight from the
|
||||
cart to the confirmation page without filling out the contact form. They just have to validate the
|
||||
payment on Google's or Apple's payment form.
|
||||
|
||||
Enable this feature by navigating to the :guilabel:`Configuration` tab from your payment provider
|
||||
and by ticking the :guilabel:`Allow Express Checkout` checkbox.
|
||||
To enable this feature, go to the :guilabel:`Configuration` tab of the selected payment provider and
|
||||
enable :guilabel:`Allow Express Checkout`.
|
||||
|
||||
.. note::
|
||||
All prices shown in the express checkout payment form are always taxes included.
|
||||
All prices shown on the express checkout payment form always include taxes.
|
||||
|
||||
.. _payment_providers/configuration:
|
||||
Availability
|
||||
============
|
||||
|
||||
Configuration
|
||||
=============
|
||||
You can adapt the payment provider's availability by specifying the :guilabel:`Maximum amount`
|
||||
allowed and modifying the :guilabel:`Currencies` and :guilabel:`Countries` in the
|
||||
:guilabel:`Configuration` tab.
|
||||
|
||||
.. _payment_providers/currencies_countries:
|
||||
|
||||
Currencies and countries
|
||||
------------------------
|
||||
|
||||
All payment providers have a different list of available currencies and countries. They serve as a
|
||||
first filter during payment operations, i.e., the payment methods linked to the payment provider are
|
||||
not available for selection if the customer's currency or country is not in the supported list. As
|
||||
there might be errors, updates, and unknowns in the lists of available currencies and countries,
|
||||
adding or removing a payment provider's supported currencies or countries is possible.
|
||||
|
||||
.. note::
|
||||
Each provider has its specific configuration flow, depending on :ref:`which feature is available
|
||||
<payment_providers/online_providers>`.
|
||||
|
||||
.. _payment_providers/add_new:
|
||||
- :ref:`Payment methods <payment_providers/payment_methods>` also have their own list of
|
||||
available currencies and countries that serves as another filter during payment operations.
|
||||
- If the list of supported currencies or countries is empty, it means the list is too long to be
|
||||
displayed, or Odoo does not have information on that payment provider. The payment provider
|
||||
remains available, even though it is possible the payment will be refused at a later stage
|
||||
should the country or currency not be supported.
|
||||
|
||||
Add a new payment provider
|
||||
--------------------------
|
||||
Maximum amount
|
||||
--------------
|
||||
|
||||
To add a new payment provider and make it available to your customers, go to
|
||||
:menuselection:`Accounting --> Configuration --> Payment Providers`, look for your payment provider,
|
||||
install the related module, and activate it. To do so, open the payment provider and change its
|
||||
state from *Disabled* to *Enabled*.
|
||||
|
||||
.. image:: payment_providers/activation.png
|
||||
:align: center
|
||||
:alt: Click on install, then on activate to make the payment provider available on Odoo.
|
||||
|
||||
.. warning::
|
||||
We recommend using the *Test Mode* on a duplicated database or a test database. The Test Mode is
|
||||
meant to be used with your test/sandbox credentials, but Odoo generates Sales Orders and Invoices
|
||||
as usual. It isn't always possible to cancel an invoice, and this could create some issues with
|
||||
your invoices numbering if you were to test your payment providers on your main database.
|
||||
|
||||
.. _payment_providers/credentials_tab:
|
||||
|
||||
Credentials tab
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
If not done yet, go to the online payment provider website, create an account, and make sure to have
|
||||
the credentials required for third-party use. Odoo requires these credentials to communicate with
|
||||
the payment provider.
|
||||
|
||||
The form in this section is specific to the payment provider you are configuring. Please refer to
|
||||
the related documentation for more information.
|
||||
|
||||
.. _payment_providers/configuration_tab:
|
||||
|
||||
Configuration tab
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
You can change the payment provider's front-end appearance by modifying its name under the
|
||||
**Displayed as** field, and the supported credit card icons displayed under the **Supported Payment Methods**
|
||||
field.
|
||||
|
||||
.. _payment_providers/currencies:
|
||||
|
||||
Currencies
|
||||
**********
|
||||
|
||||
All payment providers have a different list of available currencies. They are preconfigured and
|
||||
available in the :guilabel:`Configuration` tab. They serve as a first filter during payment
|
||||
operations, i.e. the payment provider is not displayed as available for payment if the currency is
|
||||
not in the supported list.
|
||||
|
||||
.. tip::
|
||||
As there might be errors, updates, and unknowns in the lists of available currencies, it is
|
||||
possible to add or remove currencies.
|
||||
|
||||
If the list of supported currencies is empty, it either means the list is too long to be displayed,
|
||||
or Odoo does not have information on that payment provider. The payment provider remains available,
|
||||
even though it is possible the payment will be refused at a later stage should the currency not be
|
||||
supported. This field is required if the user needs to select a currency when setting up their
|
||||
payment provider account.
|
||||
|
||||
.. _payment_providers/countries:
|
||||
|
||||
Countries
|
||||
*********
|
||||
|
||||
Restrict the use of the payment provider to a selection of countries. Leave this field blank to make
|
||||
the payment provider available in all countries.
|
||||
|
||||
Maximum Amount
|
||||
**************
|
||||
|
||||
Restrict the maximum amount that can be paid with the selected provider. Leave this field to `0.00`
|
||||
to make the payment provider available regardless of the payment amount.
|
||||
You can restrict the :guilabel:`Maximum Amount` that can be paid with the selected provider. Leave
|
||||
the field to `0.00` to make the payment provider available regardless of the payment amount.
|
||||
|
||||
.. important::
|
||||
This feature is not intended to work on pages which allow the customer to update the payment
|
||||
amount. For example, the **Donation** snippet of the Website app, and the **Checkout** page of
|
||||
the **eCommerce** app when paid delivery methods are enabled.
|
||||
This feature is not intended to work on pages that allow the customer to update the payment
|
||||
amount, e.g., the **Donation** snippet and the **Checkout** page when paid :doc:`shipping methods
|
||||
<../websites/ecommerce/checkout_payment_shipping/shipping>` are enabled.
|
||||
|
||||
.. _payment_providers/journal:
|
||||
|
||||
Payment journal
|
||||
***************
|
||||
===============
|
||||
|
||||
The **Payment journal** selected for your payment provider must be a *Bank* journal.
|
||||
A :doc:`payment journal <accounting/bank>` must be defined for the payment provider to record the
|
||||
payments on an **outstanding account**. By default, the :guilabel:`Bank` journal is added as the
|
||||
payment journal for all payment providers. To modify it, go to the :guilabel:`Configuration` tab of
|
||||
the selected payment provider and select another :guilabel:`Payment journal`.
|
||||
|
||||
.. _payment_providers/publish:
|
||||
|
||||
Publish on the website
|
||||
----------------------
|
||||
|
||||
By default, payment providers are *unpublished*, which means that only internal users can see them
|
||||
on the website. Your customers cannot make payments through an unpublished provider but they can
|
||||
still manage :dfn:`(delete and assign to a subscription)` their already existing tokens linked to
|
||||
such an provider. This conveniently allows you to test an provider while preventing making payments
|
||||
and registering new tokens.
|
||||
|
||||
Click on the :guilabel:`Publish` button located in the top right corner of the provider's form to
|
||||
publish it on the website and make it available to your customers. Click on the
|
||||
:guilabel:`Unpublish` button to unpublish it.
|
||||
|
||||
.. tip::
|
||||
Payment providers are automatically published and unpublished when you respectively change their
|
||||
state to `enabled` and `test`.
|
||||
|
||||
.. _payment_providers/accounting:
|
||||
.. note::
|
||||
- The payment journal must be a :guilabel:`Bank` journal.
|
||||
- The same journal can be used for several payment providers.
|
||||
- Payment journals must only be configured if the :doc:`Invoicing or Accounting app <accounting>`
|
||||
is installed.
|
||||
|
||||
Accounting perspective
|
||||
======================
|
||||
----------------------
|
||||
|
||||
The **Bank Payments** that go directly to one of your bank accounts follow their usual
|
||||
reconciliation workflows. However, payments recorded with **Online Payment Providers** require you
|
||||
to consider how you want to record your payments' journal entries. We recommend you to ask your
|
||||
accountant for advice.
|
||||
From an accounting perspective, there are two types of online payment workflows: the payments that
|
||||
are directly deposited into your bank account and follow the usual :doc:`reconciliation
|
||||
<accounting/bank/reconciliation>` workflow, and those coming from third-party :ref:`online payment
|
||||
providers <payment_providers/online_providers>` and require you to follow another accounting
|
||||
workflow. For these payments, you need to consider how you want to record your payments' journal
|
||||
entries. We recommend you ask your accountant for advice.
|
||||
|
||||
You need to select a *Payment Journal* on your provider configuration to record the payments,
|
||||
on a **Outstanding Account**. The Journal's **type** must be *Bank Journal*.
|
||||
|
||||
You can use a single journal for many payment methods. And for each payment method, you can either:
|
||||
|
||||
- Define an **Accounting Account** to separate these payments from another payment method.
|
||||
- Leave blank to fallback on the default account, which you can see or change in the settings.
|
||||
By default, the :guilabel:`Bank Account` defined for the :ref:`payment journal
|
||||
<payment_providers/journal>` is used, but you can also specify an :ref:`outstanding account
|
||||
<bank/outstanding-accounts>` for each payment provider to separate the provider's payments from
|
||||
other payments.
|
||||
|
||||
.. image:: payment_providers/bank_journal.png
|
||||
:align: center
|
||||
:alt: A bank journal in the "Incoming Payments Tab".
|
||||
|
||||
You can have the same bank account for the whole company, or for some journals only, or a single
|
||||
payment method... What best suit your needs.
|
||||
:alt: Define an outstanding account for a payment provider.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`payment_providers/wire_transfer`
|
||||
@@ -425,4 +447,6 @@ payment method... What best suit your needs.
|
||||
- :doc:`payment_providers/razorpay`
|
||||
- :doc:`payment_providers/sips`
|
||||
- :doc:`payment_providers/stripe`
|
||||
- :doc:`payment_providers/xendit`
|
||||
- :doc:`../websites/ecommerce/checkout_payment_shipping/payments`
|
||||
- :doc:`accounting/bank`
|
||||
|
||||
|
Before Width: | Height: | Size: 24 KiB |
@@ -141,7 +141,7 @@ Place a hold on a card
|
||||
Adyen allows you to capture an amount manually instead of having an immediate capture.
|
||||
|
||||
To set it up, enable the **Capture Amount Manually** option on Odoo, as explained in the
|
||||
:ref:`payment providers documentation <payment_providers/features/manual_capture>`.
|
||||
:ref:`payment providers documentation <payment_providers/manual_capture>`.
|
||||
|
||||
Then, open your Adyen Merchant Account, go to :menuselection:`Account --> Settings`, and set the
|
||||
**Capture Delay** to **manual**.
|
||||
|
||||
@@ -41,7 +41,7 @@ Place a hold on a card
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
With Authorize.Net, you can enable the :ref:`manual capture
|
||||
<payment_providers/features/manual_capture>`. If enabled, the funds are reserved for 30 days on the
|
||||
<payment_providers/manual_capture>`. If enabled, the funds are reserved for 30 days on the
|
||||
customer's card, but not charged yet.
|
||||
|
||||
.. warning::
|
||||
@@ -66,9 +66,6 @@ previously configured Authorize.Net payment provider on Odoo by going to :menuse
|
||||
(:guilabel:`⛭`) and select :guilabel:`Duplicate`. Change the provider's name to differentiate both
|
||||
versions (e.g., `Authorize.net - Banks`).
|
||||
|
||||
Open the :guilabel:`Configuration` tab, set the :guilabel:`Allow Payments From` field to
|
||||
:guilabel:`Bank Account (USA only)`.
|
||||
|
||||
When ready, change the provider's :guilabel:`State` to :guilabel:`Enabled` for a regular account or
|
||||
:guilabel:`Test Mode` for a sandbox account.
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 13 KiB |
@@ -22,7 +22,6 @@ The method to acquire your credentials depends on your hosting type:
|
||||
#. Confirm your email address when Stripe sends you a confirmation email.
|
||||
#. At the end of the process, you are redirected to Odoo. If you submitted all the requested
|
||||
information, you are all set and your payment provider is enabled.
|
||||
#. Your can continue to :ref:`stripe/local-payment-methods`.
|
||||
|
||||
.. tip::
|
||||
To use your own API keys, :ref:`activate the Developer mode <developer-mode>` and
|
||||
@@ -40,7 +39,6 @@ The method to acquire your credentials depends on your hosting type:
|
||||
#. :ref:`Fill in your credentials <stripe/api_keys>`.
|
||||
#. :ref:`Generate a webhook <stripe/webhook>`.
|
||||
#. Enable the payment provider.
|
||||
#. You are all set and can continue to :ref:`stripe/local-payment-methods`.
|
||||
|
||||
.. tip::
|
||||
To connect your Stripe account after the onboarding is already completed, go to
|
||||
@@ -100,34 +98,5 @@ create a webhook either automatically or manually.
|
||||
When you click on **Add endpoint**, your Webhook is configured. You can then click on
|
||||
**reveal** to display your signing secret.
|
||||
|
||||
.. _stripe/local-payment-methods:
|
||||
|
||||
Enable local payment methods
|
||||
============================
|
||||
|
||||
Local payment methods are payment methods that are only available for certain merchants and
|
||||
customers countries and currencies.
|
||||
|
||||
Odoo supports the following local payment methods:
|
||||
|
||||
- Bancontact
|
||||
- EPS
|
||||
- giropay
|
||||
- iDEAL
|
||||
- Przelewy24 (P24)
|
||||
|
||||
To enable some of these local payment methods with Stripe, list them as supported payment icons. To
|
||||
do so, go to :menuselection:`Payment Providers --> Stripe --> Configuration` and add the desired
|
||||
payment methods in the **Supported Payment Icons** field. If the desired payment method is already
|
||||
listed, you do not have anything to do.
|
||||
|
||||
.. image:: stripe/payments-config.png
|
||||
:alt: Select and add icons of the payment methods you want to enable
|
||||
|
||||
.. note::
|
||||
- If a payment method record does not exist in the database and its related local payment method
|
||||
is listed above, it is considered enabled with Stripe.
|
||||
- If a local payment method is not listed above, it is not supported and cannot be enabled.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../payment_providers`
|
||||
|
||||
47
content/applications/finance/payment_providers/xendit.rst
Normal file
@@ -0,0 +1,47 @@
|
||||
======
|
||||
Xendit
|
||||
======
|
||||
|
||||
`Xendit <https://www.xendit.co>`_ is an Indonesian-based payment solution provider that covers
|
||||
several Southeast Asian countries. It allows businesses to accept credit cards as well as several
|
||||
local payment methods.
|
||||
|
||||
.. _payment_providers/xendit/configure_dashboard:
|
||||
|
||||
Configuration on the Xendit Dashboard
|
||||
=====================================
|
||||
|
||||
#. Create a Xendit account if necessary and log in to the `Xendit Dashboard
|
||||
<https://dashboard.xendit.co>`_.
|
||||
#. Check your account mode in the top left corner of the page. Use the :guilabel:`Test Mode` to try
|
||||
the integration without charging your customers. Switch to :guilabel:`Live Mode` once you are
|
||||
ready to accept payments.
|
||||
#. Navigate to :menuselection:`Configuration: Settings` in the left part of the application page.
|
||||
In the :guilabel:`Developers` section, click
|
||||
`API Keys <https://dashboard.xendit.co/settings/developers#api-keys>`_.
|
||||
#. Click :guilabel:`Generate Secret Key`. In the popup box, enter any :guilabel:`API key name`,
|
||||
select :guilabel:`Write` for the :guilabel:`Money-in Products` permission and :guilabel:`None`
|
||||
for all other permissions then click :guilabel:`Generate key`.
|
||||
#. Confirm your password to display your API key. Copy or download the key and **save
|
||||
this information securely for later**. This is the only time the API key can be viewed or
|
||||
downloaded.
|
||||
#. Once completed, scroll down the page to the
|
||||
`Webhooks <https://dashboard.xendit.co/settings/developers#webhooks>`_ section to generate
|
||||
the webhook token.
|
||||
#. Under :guilabel:`Webhook verification token`, click :guilabel:`View Webhook Verification Token`,
|
||||
then confirm your password to display the token. Save it for later.
|
||||
#. In the :guilabel:`Webhook URL` section, enter your Odoo database URL (e.g.,
|
||||
`https://example.odoo.com`) in the field :guilabel:`Invoices paid` and click the
|
||||
:guilabel:`Test and save` button next to it.
|
||||
|
||||
Configuration on Odoo
|
||||
=====================
|
||||
|
||||
#. :ref:`Navigate to the payment provider Xendit <payment_providers/add_new>` and change its state
|
||||
to :guilabel:`Enabled`.
|
||||
#. Fill in the :guilabel:`Secret Key` and :guilabel:`Webhook Token` fields with the
|
||||
information saved at the step :ref:`payment_providers/xendit/configure_dashboard`.
|
||||
#. Configure the rest of the options to your liking.
|
||||
|
||||
.. seealso::
|
||||
:doc:`../payment_providers`
|
||||
@@ -100,6 +100,14 @@ and the status of the signatures.
|
||||
.. image:: sign/signature-status.png
|
||||
:alt: Signature status
|
||||
|
||||
Validity dates and reminders
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
You can set **validity dates** on limited-duration agreement documents or send **automatic email
|
||||
reminders** to obtain signatures on time. From your dashboard, click :guilabel:`Send` on your
|
||||
document. On the new page, go to the :guilabel:`Options` section and fill in the :guilabel:`Valid
|
||||
Until` and :guilabel:`Reminder` fields.
|
||||
|
||||
Templates
|
||||
---------
|
||||
|
||||
@@ -120,9 +128,10 @@ immediately.
|
||||
|
||||
.. tip::
|
||||
You can **create a template from a document that was previously sent**. To do so, go to
|
||||
:menuselection:`Documents --> All Documents`. On the document you want to retrieve, click on
|
||||
⋮, then :guilabel:`Template`. Click on ⋮ again, then :guilabel:`Restore`. Your document now
|
||||
appears on your dashboard next to your other templates.
|
||||
:menuselection:`Documents --> All Documents`. On the document you want to retrieve, click on the
|
||||
the vertical ellipsis (:guilabel:`⋮`), then :guilabel:`Template`. Click on the vertical ellipsis
|
||||
(:guilabel:`⋮`) again, then :guilabel:`Restore`. Your document now appears on your dashboard next
|
||||
to your other templates.
|
||||
|
||||
.. _sign/role:
|
||||
|
||||
@@ -226,8 +235,8 @@ document.
|
||||
Tags
|
||||
====
|
||||
|
||||
Tags can be used to categorize and organize documents, allowing users to search for and filter
|
||||
documents based on specific criteria quickly.
|
||||
Tags can be used to categorize and organize documents, allowing users to quickly search for and
|
||||
filter documents based on specific criteria.
|
||||
|
||||
You can manage tags by going to :menuselection:`Configuration --> Tags`. To create a tag, click
|
||||
:guilabel:`New`. On the new line, add the :guilabel:`Tag Name` and select a :guilabel:`Color Index`
|
||||
@@ -235,23 +244,25 @@ for your tag.
|
||||
|
||||
To apply a tag to a document, use the dropdown list available in your document.
|
||||
|
||||
.. note::
|
||||
You can modify the tags of a signed document by going to :menuselection:`Documents --> All
|
||||
Documents`, clicking the vertical ellipsis (:guilabel:`⋮`) on your document, then
|
||||
:guilabel:`Details`, and modifying your :guilabel:`Tags`.
|
||||
|
||||
Sign order
|
||||
==========
|
||||
|
||||
When a document needs to be signed by different parties, the signing order lets you control the
|
||||
order in which your recipients receive it for signature.
|
||||
|
||||
By going to :menuselection:`Configuration --> Settings`, you can :guilabel:`Enable Signing Order`.
|
||||
After uploading a PDF with at least two signature fields with two different roles and clicking
|
||||
:guilabel:`Send`, toggle the :guilabel:`Specify Signing Order` button and search for the signer's
|
||||
name or email information to add them. You can decide on the signing order by typing **1** or **2**
|
||||
in the first column.
|
||||
|
||||
Each recipient receives the signature request notification only once the previous recipient has
|
||||
completed their action.
|
||||
|
||||
Add at least two :guilabel:`Signature` fields with different roles to your document. Click
|
||||
:guilabel:`Send`, go to the :guilabel:`Options` tab, and tick the :guilabel:`Specify signing order`
|
||||
box.
|
||||
|
||||
Add the signer's :guilabel:`Name or email` information. You can decide on the :guilabel:`Sign Order`
|
||||
by typing :guilabel:`1` or :guilabel:`2` in the :guilabel:`Sign Order` column.
|
||||
|
||||
.. seealso::
|
||||
`Odoo Quick Tips: Sign order [video] <https://www.youtube.com/watch?v=2KUq7RPt1cU/>`_
|
||||
|
||||
|
||||
@@ -2,43 +2,54 @@
|
||||
Sign in with LDAP
|
||||
=================
|
||||
|
||||
- Install the LDAP module in General Settings.
|
||||
- Install the Lightweight Directory Access Protocol (LDAP) module in General Settings.
|
||||
|
||||
- Click on **Create** in Setup your LDAP Server.
|
||||
- Click on **Create** in Setup the :abbr:`LDAP (Lightweight Directory Access Protocol)` Server.
|
||||
|
||||
.. image:: ldap/ldap01.png
|
||||
:align: center
|
||||
:alt: LDAP Authentication checkbox highlighted in the integrations settings on Odoo.
|
||||
|
||||
.. image:: ldap/ldap02.png
|
||||
:align: center
|
||||
:alt: Create highlighted in the LDAP server settings.
|
||||
|
||||
- Choose the company about to use the LDAP.
|
||||
- Choose the company using the LDAP.
|
||||
|
||||
.. image:: ldap/ldap03.png
|
||||
:align: center
|
||||
:alt: Select the company drop-down menu highlighted in LDAP setup.
|
||||
|
||||
- In **Server Information**, enter the IP address of your server and the port it listens to.
|
||||
- In **Server Information**, enter the IP address of the server and the port it listens to.
|
||||
|
||||
- Tick **User TLS** if your server is compatible.
|
||||
- Tick **Use TLS** if the server is compatible.
|
||||
|
||||
.. image:: ldap/ldap04.png
|
||||
:align: center
|
||||
:alt: LDAP server settings highlighted in LDAP server setup on Odoo.
|
||||
|
||||
- In **Login Information**, enter ID and password of the account used to query the server. If left empty, the server will be queried anonymously.
|
||||
- In **Login Information**, enter ID and password of the account used to query the server. If left
|
||||
empty, the server queries anonymously.
|
||||
|
||||
.. image:: ldap/ldap05.png
|
||||
:align: center
|
||||
:alt: Login information highlighted in LDAP server setup on Odoo.
|
||||
|
||||
- In **Process Parameter**, enter the domain name of your LDAP server in LDAP nomenclature (e.g. ``dc=example,dc=com``).
|
||||
- In **Process Parameter**, enter the domain name of the LDAP server in :abbr:`LDAP (Lightweight
|
||||
Directory Access Protocol)` nomenclature (e.g. ``dc=example,dc=com``).
|
||||
|
||||
- In **LDAP filter**, enter ``uid=%s``
|
||||
|
||||
.. image:: ldap/ldap06.png
|
||||
:align: center
|
||||
:alt: Process parameter highlighted in LDAP server setup on Odoo.
|
||||
|
||||
- In **User Information**, tick *Create User* if you want Odoo to create a User profile the first time someone log in with LDAP.
|
||||
- In **User Information**, tick *Create User* if Odoo should create a User profile the first time
|
||||
someone logs in with :abbr:`LDAP (Lightweight Directory Access Protocol)`.
|
||||
|
||||
- In **Template User**, indicate a template for the new profiles created. If left blanked, the admin profile will be used as template.
|
||||
- In **Template User**, indicate a template for the new profiles created. If left blanked, the admin
|
||||
profile will be used as template.
|
||||
|
||||
.. image:: ldap/ldap07.png
|
||||
:align: center
|
||||
:alt: User information highlighted on LDAP server setup on Odoo.
|
||||
|
||||
@@ -1,59 +1,192 @@
|
||||
=====================
|
||||
In-App Purchase (IAP)
|
||||
In-app purchase (IAP)
|
||||
=====================
|
||||
|
||||
In-App Purchases (IAP) gives access to additional services through Odoo. For instance, it allows you
|
||||
to send SMS Text Messages or to send Invoices by post directly from your database.
|
||||
.. |IAP| replace:: :abbr:`IAP (In-app purchases)`
|
||||
|
||||
In-app purchases (IAP) are optional services that enhance Odoo databases. Each service provides its
|
||||
own specific features and functionality. A full list of services is available on the `Odoo IAP
|
||||
Catalog <https://iap.odoo.com/iap/all-in-app-services>`_.
|
||||
|
||||
.. image:: in_app_purchase/iap.png
|
||||
:align: center
|
||||
:alt: The IAP catalog with various services available on IAP.Odoo.com.
|
||||
|
||||
.. example::
|
||||
The :guilabel:`SMS` service sends text messages to contacts directly from the database, and the
|
||||
:guilabel:`Documents Digitization` service digitizes scanned or PDF vendor bills, expenses, and
|
||||
resumes with optical character recognition (OCR) and artificial intelligence (AI).
|
||||
|
||||
|IAP| services do **not** need to be configured or set up before use. Odoo users can simply click on
|
||||
the service in the app to activate it. However, each service requires its own prepaid credits, and
|
||||
when they run out, users **must** :ref:`buy more <iap/buying_credits>` in order to keep using it.
|
||||
|
||||
.. note::
|
||||
Users with an Enterprise version of Odoo Online get free credits to test IAP features.
|
||||
|
||||
.. _in_app_purchase/portal:
|
||||
|
||||
IAP services
|
||||
============
|
||||
|
||||
|IAP| services are provided by Odoo, as well as third-parties, and have a wide range of uses.
|
||||
|
||||
The following |IAP| services are provided by Odoo:
|
||||
|
||||
- :guilabel:`Documents Digitization`: digitizes scanned or PDF vendor bills, expenses, and resumes
|
||||
with OCR and AI.
|
||||
- :guilabel:`Partner Autocomplete`: automatically populates contact records with corporate data.
|
||||
- :guilabel:`SMS`: sends SMS text messages to contacts directly from the database.
|
||||
- :guilabel:`Lead Generation`: generates leads based on a set of criteria, and converts web visitors
|
||||
into quality leads and opportunities.
|
||||
- :guilabel:`Snailmail`: sends customer invoices and follow-up reports by post, worldwide.
|
||||
|
||||
For more information on every service currently available, visit the `Odoo IAP Catalog
|
||||
<https://iap.odoo.com/iap/all-in-app-services>`_.
|
||||
|
||||
Use IAP services
|
||||
----------------
|
||||
|
||||
|IAP| services are automatically integrated with Odoo, and do **not** require users to configure any
|
||||
settings. To use a service, simply interact with it wherever it appears in the database.
|
||||
|
||||
.. example::
|
||||
The following flow focuses on the *SMS* |IAP| service being used from a contact's record.
|
||||
|
||||
This can be done by clicking the :guilabel:`📱 (phone) SMS` icon within the database.
|
||||
|
||||
.. image:: in_app_purchase/sms-icon.png
|
||||
:align: center
|
||||
:alt: The SMS icon on a typical contact information form located within an Odoo database.
|
||||
|
||||
One way to utilize the *SMS* |IAP| service with Odoo is showcased in the following steps:
|
||||
|
||||
#. Navigate to the :menuselection:`Contacts application`, and click on a contact with a mobile
|
||||
phone number entered in either the :guilabel:`Phone` or :guilabel:`Mobile` field of the
|
||||
contact form.
|
||||
#. Hover the mouse over the :guilabel:`Phone` or :guilabel:`Mobile` field, and a :guilabel:`📱
|
||||
(phone) SMS` icon appears to the right.
|
||||
#. Click the :guilabel:`📱 (phone) SMS` icon, and a :guilabel:`Send SMS Text Message` pop-up
|
||||
window appears.
|
||||
#. Type a message in the :guilabel:`Message` field of the :guilabel:`Send SMS Text Message`
|
||||
pop-up window. Then, click the :guilabel:`Send SMS` button. Odoo then sends the message, via
|
||||
SMS, to the contact, and logs what was sent in the *chatter* of the contact's form.
|
||||
|
||||
Upon sending the SMS message, the prepaid credits for the *SMS* |IAP| service are automatically
|
||||
deducted from the existing credits. If there are not enough credits to send the message, Odoo
|
||||
prompts the user to purchase more.
|
||||
|
||||
.. seealso::
|
||||
For more information on how to use various |IAP| services, and for more in-depth instructions
|
||||
related to SMS functionality in Odoo, review the documentation below:
|
||||
|
||||
- :doc:`Lead mining </applications/sales/crm/acquire_leads/lead_mining>`
|
||||
- :doc:`Enrich your contacts base with Partner Autocomplete
|
||||
</applications/sales/crm/optimize/partner_autocomplete>`
|
||||
- :doc:`SMS essentials </applications/marketing/sms_marketing/essentials/sms_essentials>`
|
||||
|
||||
.. _in_app_purchase/credits:
|
||||
|
||||
IAP credits
|
||||
===========
|
||||
|
||||
Every time an |IAP| service is used, the prepaid credits for that service are spent. Odoo prompts
|
||||
the purchase of more credits when there are not enough credits left to continue using a service.
|
||||
Email alerts can also be set up for when :ref:`credits are low <in_app_purchase/low-credits>`.
|
||||
|
||||
Credits are purchased in *Packs* from the `Odoo IAP Catalog
|
||||
<https://iap.odoo.com/iap/all-in-app-services>`_, and pricing is specific to each service.
|
||||
|
||||
.. example::
|
||||
The `SMS service <https://iap.odoo.com/iap/in-app-services/1>`_ has four packs available, in
|
||||
denominations of:
|
||||
|
||||
- :guilabel:`Starter Pack`: 10 credits
|
||||
- :guilabel:`Standard Pack`: 100 credits
|
||||
- :guilabel:`Advanced Pack`: 500 credits
|
||||
- :guilabel:`Expert Pack`: 1,000 credits
|
||||
|
||||
.. image:: in_app_purchase/packs.png
|
||||
:align: center
|
||||
:alt: Four different packs of credits for the SMS IAP service.
|
||||
|
||||
The number of credits consumed depends on the length of the SMS and the country of destination.
|
||||
|
||||
For more information, refer to the :doc:`SMS Pricing and FAQ
|
||||
</applications/marketing/sms_marketing/pricing/pricing_and_faq>` documentation.
|
||||
|
||||
.. _iap/buying_credits:
|
||||
|
||||
Buying Credits
|
||||
==============
|
||||
Buy credits
|
||||
-----------
|
||||
|
||||
Each IAP Service relies on prepaid credits to work and has its own pricing. To consult your current
|
||||
balance or to recharge your account, go to :menuselection:`Settings --> Odoo IAP --> View my
|
||||
Services`.
|
||||
If there are not enough credits to perform a task, the database automatically prompts the purchase
|
||||
of more credits.
|
||||
|
||||
.. image:: in_app_purchase/image1.png
|
||||
:align: center
|
||||
Users can check the current balance of credits for each service, and manually purchase more credits,
|
||||
by navigating to the :menuselection:`Settings app --> Search IAP --> View My Services`.
|
||||
|
||||
.. tip::
|
||||
If you are on Odoo Online and have the Enterprise version, you benefit from free credits to test our
|
||||
IAP features.
|
||||
Doing so reveals an :guilabel:`IAP Account` page, listing the various |IAP| services in the
|
||||
database. From here, click an |IAP| service to open its :guilabel:`Account Information` page, where
|
||||
additional credits can be purchased.
|
||||
|
||||
IAP accounts
|
||||
============
|
||||
Manually buy credits
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Credits to use IAP services are stored on IAP accounts, which are specific to each service.
|
||||
By default, IAP accounts are common to all companies, but can be restricted to specific
|
||||
ones. Activate the :ref:`developer mode <developer-mode>`, then go to :menuselection:`Technical
|
||||
Settings --> IAP Account`.
|
||||
To manually buy credits in Odoo, follow these steps:
|
||||
|
||||
.. image:: in_app_purchase/image2.png
|
||||
:align: center
|
||||
#. Go to the :menuselection:`Settings application`.
|
||||
#. Type `IAP` in the search bar.
|
||||
#. Click :guilabel:`View My Services`.
|
||||
|
||||
.. tip::
|
||||
An IAP account can be disabled by appending `+disabled` to its token.
|
||||
Reverting this change will re-enable the account.
|
||||
.. image:: in_app_purchase/view-services.png
|
||||
:align: center
|
||||
:alt: The Settings app showing the Odoo IAP heading and View My Services button.
|
||||
|
||||
IAP Portal
|
||||
==========
|
||||
#. Doing so reveals an :guilabel:`IAP Account` page, listing the various |IAP| services in the
|
||||
database. From here, click an |IAP| service to open its :guilabel:`Account Information` page,
|
||||
where additional credits can be purchased.
|
||||
#. On the :guilabel:`Account Information` page, click the :guilabel:`Buy Credit` button.
|
||||
|
||||
The IAP Portal is a platform regrouping your IAP Services. It is accessible from
|
||||
:menuselection:`Settings app --> Odoo IAP --> View my Services`. From there, you can view your current
|
||||
balance, recharge your credits and set a reminder when your balance falls below a threshold.
|
||||
.. image:: in_app_purchase/account-info.png
|
||||
:align: center
|
||||
:alt: The Account Information page for an IAP service showing the Buy Credit button.
|
||||
|
||||
.. image:: in_app_purchase/image3.png
|
||||
:align: center
|
||||
#. Doing so loads a :guilabel:`Buy Credits for (IAP Account)` page in a new tab. From here, click
|
||||
:guilabel:`Buy` on the desired pack of credits. Then, follow the prompts to enter payment
|
||||
details, and confirm the order.
|
||||
|
||||
Get notified when credits are low
|
||||
=================================
|
||||
.. image:: in_app_purchase/buy-pack.png
|
||||
:align: center
|
||||
:alt: The SMS service page on IAP.Odoo.com with four packs of credits available for purchase.
|
||||
|
||||
To be notified when it’s time to recharge your credits, you can go to your IAP Portal through
|
||||
:menuselection:`Settings app --> Odoo IAP --> View my Services`, unfold a service and check the
|
||||
Receive threshold warning option. Then, you can provide a minimum amount of credits and email
|
||||
addresses. Now, every time that the limit is reached, an automatic reminder will be sent by
|
||||
email!
|
||||
#. Once the transaction is complete, the credits are available for use in the database.
|
||||
|
||||
.. image:: in_app_purchase/image4.png
|
||||
:align: center
|
||||
.. _in_app_purchase/low-credits:
|
||||
|
||||
Low-credit notification
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
It is possible to be notified when credits are low, in order to avoid running out of credits, while
|
||||
using an |IAP| service. To do that, follow this process:
|
||||
|
||||
#. Go to the :menuselection:`Settings application`.
|
||||
#. Type `IAP` in the search bar.
|
||||
#. Click :guilabel:`View My Services`.
|
||||
#. The available |IAP| accounts appear in a list view on the :guilabel:`IAP Account` page. From
|
||||
here, click on the desired |IAP| account to view that service's :guilabel:`Account Information`
|
||||
page.
|
||||
#. On the :guilabel:`Account Information` page, tick the :guilabel:`Warn Me` box. Doing so reveals
|
||||
two fields on the form: :guilabel:`Threshold` and :guilabel:`Warning Email`.
|
||||
|
||||
.. image:: in_app_purchase/low-credits.png
|
||||
:align: center
|
||||
:alt: Odoo will send an email alert when credits for this service fall below the threshold.
|
||||
|
||||
#. In the :guilabel:`Threshold` field, enter an amount of credits Odoo should use as the minimum
|
||||
threshold for this service.
|
||||
#. In the :guilabel:`Warning Email` field, enter the email address that should receive the
|
||||
notification.
|
||||
|
||||
Odoo sends a low-credit alert to the :guilabel:`Warning Email` when the balance of credits falls
|
||||
below the amount listed as the :guilabel:`Threshold`.
|
||||
|
||||
BIN
content/applications/general/in_app_purchase/account-info.png
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
BIN
content/applications/general/in_app_purchase/buy-pack.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
content/applications/general/in_app_purchase/iap.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 14 KiB |
BIN
content/applications/general/in_app_purchase/low-credits.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
content/applications/general/in_app_purchase/packs.png
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
content/applications/general/in_app_purchase/sms-icon.png
Normal file
|
After Width: | Height: | Size: 9.1 KiB |
BIN
content/applications/general/in_app_purchase/view-services.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
@@ -7,6 +7,5 @@ VoIP (Voice over Internet Protocol)
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
voip/asterisk
|
||||
voip/onsip
|
||||
voip/axivox
|
||||
|
||||
@@ -1,238 +0,0 @@
|
||||
============================================
|
||||
Configure your VoIP Asterisk server for Odoo
|
||||
============================================
|
||||
|
||||
Installing Asterisk server
|
||||
==========================
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
|
||||
Before installing Asterisk you need to install the following dependencies:
|
||||
|
||||
- wget
|
||||
- gcc
|
||||
- g++
|
||||
- ncurses-devel
|
||||
- libxml2-devel
|
||||
- sqlite-devel
|
||||
- libsrtp-devel
|
||||
- libuuid-devel
|
||||
- openssl-devel
|
||||
- pkg-config
|
||||
|
||||
In order to install libsrtp, follow the instructions below:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
cd /usr/local/src/
|
||||
wget http://srtp.sourceforge.net/srtp-1.4.2.tgz
|
||||
tar zxvf srtp-1.4.2.tgz
|
||||
cd /usr/local/src/srtp
|
||||
./configure CFLAGS=-fPIC --prefix=/usr/local/lib
|
||||
make && make install
|
||||
|
||||
You also need to install PJSIP, you can download the source `here
|
||||
<http://www.pjsip.org/download.htm>`_. Once the source directory is extracted:
|
||||
|
||||
- **Change to the pjproject source directory:**
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# cd pjproject
|
||||
|
||||
- **run:**
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# ./configure --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr CFLAGS='-O2 -DNDEBUG'
|
||||
|
||||
- **Build and install pjproject:**
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# make dep
|
||||
# make
|
||||
# make install
|
||||
|
||||
- **Update shared library links:**
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# ldconfig
|
||||
|
||||
- **Verify that pjproject is installed:**
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# ldconfig -p | grep pj
|
||||
|
||||
- **The result should be:**
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
libpjsua.so (libc6,x86-64) => /usr/lib/libpjsua.so
|
||||
libpjsip.so (libc6,x86-64) => /usr/lib/libpjsip.so
|
||||
libpjsip-ua.so (libc6,x86-64) => /usr/lib/libpjsip-ua.so
|
||||
libpjsip-simple.so (libc6,x86-64) => /usr/lib/libpjsip-simple.so
|
||||
libpjnath.so (libc6,x86-64) => /usr/lib/libpjnath.so
|
||||
libpjmedia.so (libc6,x86-64) => /usr/lib/libpjmedia.so
|
||||
libpjmedia-videodev.so (libc6,x86-64) => /usr/lib/libpjmedia-videodev.so
|
||||
libpjmedia-codec.so (libc6,x86-64) => /usr/lib/libpjmedia-codec.so
|
||||
libpjmedia-audiodev.so (libc6,x86-64) => /usr/lib/libpjmedia-audiodev.so
|
||||
libpjlib-util.so (libc6,x86-64) => /usr/lib/libpjlib-util.so
|
||||
libpj.so (libc6,x86-64) => /usr/lib/libpj.so
|
||||
|
||||
Asterisk
|
||||
--------
|
||||
|
||||
- In order to install Asterisk 13.7.0, you can download the source directly `there
|
||||
<http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-13.7.0.tar.gz>`_.
|
||||
|
||||
- Extract Asterisk:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
tar zxvf asterisk*
|
||||
|
||||
- Enter the Asterisk directory:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
cd ./asterisk*
|
||||
|
||||
- Run the Asterisk configure script:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
./configure --with-pjproject --with-ssl --with-srtp
|
||||
|
||||
- Run the Asterisk menuselect tool:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
make menuselect
|
||||
|
||||
- In the menuselect, go to the resources option and ensure that res_srtp is enabled. If there are
|
||||
3 x’s next to res_srtp, there is a problem with the srtp library and you must reinstall it. Save
|
||||
the configuration (press x). You should also see stars in front of the res_pjsip lines.
|
||||
|
||||
- Compile and install Asterisk:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
make && make install
|
||||
|
||||
- If you need the sample configs you can run 'make samples' to install the sample configs. If you
|
||||
need to install the Asterisk startup script you can run 'make config'.
|
||||
|
||||
DTLS Certificates
|
||||
-----------------
|
||||
|
||||
- After you need to setup the DTLS certificates.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
mkdir /etc/asterisk/keys
|
||||
|
||||
- Enter the Asterisk scripts directory:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
cd /asterisk*/contrib/scripts
|
||||
|
||||
- Create the DTLS certificates (replace pbx.mycompany.com with your ip address or dns name, replace
|
||||
My Super Company with your company name):
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
./ast_tls_cert -C pbx.mycompany.com -O "My Super Company" -d /etc/asterisk/keys
|
||||
|
||||
Configure Asterisk server
|
||||
=========================
|
||||
|
||||
For WebRTC, a lot of the settings that are needed MUST be in the peer settings. The global settings
|
||||
do not flow down into the peer settings very well. By default, Asterisk config files are located in
|
||||
/etc/asterisk/. Start by editing http.conf and make sure that the following lines are uncommented:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
;http.conf
|
||||
[general]
|
||||
enabled=yes
|
||||
bindaddr=127.0.0.1 ; Replace this with your IP address
|
||||
bindport=8088 ; Replace this with the port you want to listen on
|
||||
|
||||
Next, edit sip.conf. The WebRTC peer requires encryption, avpf, and icesupport to be enabled. In
|
||||
most cases, directmedia should be disabled. Also under the WebRTC client, the transport needs to be
|
||||
listed as ‘ws’ to allow websocket connections. All of these config lines should be under the peer
|
||||
itself; setting these config lines globally might not work:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
;sip.conf
|
||||
[general]
|
||||
realm=127.0.0.1 ; Replace this with your IP address
|
||||
udpbindaddr=127.0.0.1 ; Replace this with your IP address
|
||||
transport=udp
|
||||
|
||||
[1060] ; This will be WebRTC client
|
||||
type=friend
|
||||
username=1060 ; The Auth user for SIP.js
|
||||
host=dynamic ; Allows any host to register
|
||||
secret=password ; The SIP Password for SIP.js
|
||||
encryption=yes ; Tell Asterisk to use encryption for this peer
|
||||
avpf=yes ; Tell Asterisk to use AVPF for this peer
|
||||
icesupport=yes ; Tell Asterisk to use ICE for this peer
|
||||
context=default ; Tell Asterisk which context to use when this peer is dialing
|
||||
directmedia=no ; Asterisk will relay media for this peer
|
||||
transport=udp,ws ; Asterisk will allow this peer to register on UDP or WebSockets
|
||||
force_avp=yes ; Force Asterisk to use avp. Introduced in Asterisk 11.11
|
||||
dtlsenable=yes ; Tell Asterisk to enable DTLS for this peer
|
||||
dtlsverify=no ; Tell Asterisk to not verify your DTLS certs
|
||||
dtlscertfile=/etc/asterisk/keys/asterisk.pem ; Tell Asterisk where your DTLS cert file is
|
||||
dtlsprivatekey=/etc/asterisk/keys/asterisk.pem ; Tell Asterisk where your DTLS private key is
|
||||
dtlssetup=actpass ; Tell Asterisk to use actpass SDP parameter when setting up DTLS
|
||||
|
||||
In the sip.conf and rtp.conf files you also need to add or uncomment the lines:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
icesupport = true
|
||||
stunaddr = stun.l.google.com:19302
|
||||
|
||||
Lastly, set up extensions.conf:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
;extensions.conf
|
||||
[default]
|
||||
exten => 1060,1,Dial(SIP/1060) ; Dialing 1060 will call the SIP client registered to 1060
|
||||
|
||||
Configure Odoo VOIP
|
||||
===================
|
||||
|
||||
In Odoo, the configuration should be done in the user's preferences.
|
||||
|
||||
|
||||
.. image:: asterisk/voip_config01.png
|
||||
:align: center
|
||||
|
||||
- The SIP Login/Browser's Extension is the number you configured previously in the sip.conf file (in
|
||||
our example: 1060).
|
||||
|
||||
- The SIP Password is the secret you chose in the sip.conf file.
|
||||
|
||||
- The extension of your office's phone is not a required field but it is used if you want to
|
||||
transfer your call from Odoo to an external phone also configured in the sip.conf file.
|
||||
|
||||
|
||||
The configuration should also be done in the General Settings under the "Integrations" section.
|
||||
|
||||
.. image:: onsip/onsip02.png
|
||||
:align: center
|
||||
|
||||
- The PBX Server IP should be the same as the IP you define in the http.conf file.
|
||||
|
||||
- The WebSocket should be: ws://localhost:XXXX/ws where "localhost" needs to be the same as the IP
|
||||
defined previously and "XXXX" needs to be the port defined in the http.conf file.
|
||||
|
Before Width: | Height: | Size: 64 KiB |
@@ -6,8 +6,7 @@ Introduction
|
||||
============
|
||||
|
||||
Odoo VoIP can be set up to work together with `Axivox <https://www.axivox.com/>`_. In that case, an
|
||||
:doc:`Asterisk server <asterisk>` is not necessary as the infrastructure is hosted and managed by
|
||||
Axivox.
|
||||
Asterisk server is not necessary as the infrastructure, as it is hosted and managed by Axivox.
|
||||
|
||||
To use this service, `contact Axivox <https://www.axivox.com/contact/>`_ to open an account. Before
|
||||
doing so, verify that Axivox covers your area and the areas you wish to call.
|
||||
|
||||
@@ -10,5 +10,6 @@ Human resources
|
||||
hr/employees
|
||||
hr/fleet
|
||||
hr/payroll
|
||||
hr/time_off
|
||||
hr/recruitment
|
||||
hr/referrals
|
||||
|
||||
@@ -193,6 +193,8 @@ types needed.
|
||||
:align: center
|
||||
:alt: A skill form for a Math skill type, with all the information entered.
|
||||
|
||||
.. _employees/work-info-tab:
|
||||
|
||||
Work Information tab
|
||||
--------------------
|
||||
|
||||
|
||||
@@ -159,6 +159,8 @@ Reporting section
|
||||
:align: center
|
||||
:alt: New work entry type form with all fields to be filled in.
|
||||
|
||||
.. _payroll/working-times:
|
||||
|
||||
Working schedules
|
||||
-----------------
|
||||
|
||||
|
||||
745
content/applications/hr/time_off.rst
Normal file
@@ -0,0 +1,745 @@
|
||||
========
|
||||
Time Off
|
||||
========
|
||||
|
||||
Odoo's *Time Off* application is a centralized place, where all time off information is housed. The
|
||||
*Time Off* app manages everything related to requests, balances, allocations, approvals, and
|
||||
reports.
|
||||
|
||||
Users can :ref:`request time off <time_off/request-time-off>`, managers can :ref:`approve time off
|
||||
requests <time_off/approve-time-off>`, :ref:`allocate time off <time_off/allocate>` to individuals,
|
||||
teams, or the whole company, :ref:`reports <time_off/reporting>` can be run to see how much time off
|
||||
(and what kinds of time off) are being used, :ref:`accrual plans <time_off/accrual-plans>` can be
|
||||
created, and :ref:`public holidays <time_off/public-holidays>` can be set.
|
||||
|
||||
.. note::
|
||||
Be advised, only users with specific access rights can see all aspects of the *Time Off*
|
||||
application.
|
||||
|
||||
All users can access the :guilabel:`My Time Off` and :guilabel:`Overview` sections of the *Time
|
||||
Off* application. All other sections require specific access rights.
|
||||
|
||||
To better understand how access rights affect the *Time Off* application, refer to the
|
||||
:doc:`/applications/hr/employees/new_employee` document, specifically the section about
|
||||
configuring the work information tab.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
In order to allocate time off to employees, and for employees to request and use their time off, the
|
||||
various time off types must be configured first, then allocated to employees (if allocation is
|
||||
required).
|
||||
|
||||
.. _time_off/time-off-types:
|
||||
|
||||
Time off types
|
||||
--------------
|
||||
|
||||
To view the currently configured time off types, navigate to :menuselection:`Time Off application
|
||||
--> Configuration --> Time Off Types`. The time off types are presented in a list view. The *Time
|
||||
Off* application comes with four types of time off pre-configured: :guilabel:`Paid Time Off`,
|
||||
:guilabel:`Sick Time Off`, :guilabel:`Unpaid`, and :guilabel:`Compensatory Days`. Any of these may
|
||||
be modified to suit the needs of the businesses, or can be used as-is.
|
||||
|
||||
Create time off type
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To create a new time off type, navigate to :menuselection:`Time Off app --> Configuration --> Time
|
||||
Off Types`. From here, click the :guilabel:`Create` button to reveal a blank time off type form.
|
||||
|
||||
Enter the name for the particular type of time off in the blank line at the top of the form, such as
|
||||
`Sick Time` or `Vacation`. Then, enter the following information on the form:
|
||||
|
||||
Time off requests section
|
||||
*************************
|
||||
|
||||
- :guilabel:`Approval`: select what specific kind of approval is required for the time off type. The
|
||||
options are:
|
||||
|
||||
- :guilabel:`No Validation`: no approvals are required when requesting this type of time off. The
|
||||
time off request is automatically approved when requested.
|
||||
- :guilabel:`By Time Off Officer`: only the specified :ref:`Time Off Officer
|
||||
<time_off/time-off-officer>`, set on this form in the :guilabel:`Responsible Time Off Officer`
|
||||
field, is required to approve the time off request. This option is selected by default.
|
||||
- :guilabel:`By Employee's Approver`: only the employee's specified approver for time off, which
|
||||
is set on the *Work Information* tab on the :ref:`employee's form <employees/work-info-tab>`, is
|
||||
required to approve the time off request.
|
||||
- :guilabel:`By Employee's Approver and Time Off Officer`: both the employee's :ref:`specified
|
||||
time off approver<employees/work-info-tab>` and the :ref:`Time Off Officer
|
||||
<time_off/time-off-officer>` are required to approve the time off request.
|
||||
|
||||
.. _`time_off/time-off-officer`:
|
||||
|
||||
- :guilabel:`Responsible Time Off Officer`: select the person responsible for approving requests and
|
||||
allocations for this specific type of time off.
|
||||
- :guilabel:`Take Time Off in`: select the format the time off is requested from the drop-down menu.
|
||||
The options are:
|
||||
|
||||
- :guilabel:`Day`: if time off can only be requested in full day increments (8 hours).
|
||||
- :guilabel:`Half Day`: if time off can only be requested in half day increments (4 hours).
|
||||
- :guilabel:`Hours`: if the time off can be taken in hourly increments.
|
||||
|
||||
- :guilabel:`Deduct Extra Hours`: tick this box if the time off request should factor in any extra
|
||||
time accrued by the employee
|
||||
|
||||
.. example::
|
||||
For example, if an employee worked two (2) extra hours for the week, and requests five (5)
|
||||
hours of time off, the request would be for three (3) hours, since the two (2) additionally
|
||||
worked hours are used first, and deducted from the request.
|
||||
|
||||
- :guilabel:`Allow To Join Supporting Document`: tick this box to allow the employee to attach
|
||||
documents to the time off request. This is useful in situations where documentation is required,
|
||||
such as long-term medical leave.
|
||||
- :guilabel:`Kind of Leave`: select from the drop-down menu the type of leave this time off type is,
|
||||
either :guilabel:`Time Off` or :guilabel:`Other`.
|
||||
- :guilabel:`Company`: if multiple companies are created in the database, and this time off type
|
||||
only applies to one company, select the company from the drop-down menu. If this field is left
|
||||
blank, the time off type applies to all companies in the database.
|
||||
|
||||
Allocation requests section
|
||||
***************************
|
||||
|
||||
- :guilabel:`Requires allocation`: if the time off must be allocated to employees, select
|
||||
:guilabel:`Yes`. If the time off can be requested without time off being previously allocated,
|
||||
select :guilabel:`No Limit`. If :guilabel:`No Limit` is selected, the following options do not
|
||||
appear on the form.
|
||||
- :guilabel:`Employee Requests`: select :guilabel:`Extra Days Requests Allowed` if the employee is
|
||||
able to request more time off than was allocated.
|
||||
|
||||
.. example::
|
||||
For example, if ten (10) days are allocated to the employee for this particular type of time
|
||||
off, and this option is enabled, the employee may submit a request for more than ten (10) days.
|
||||
|
||||
If employees should **not** be able to make requests for more time off than what was allocated,
|
||||
select the :guilabel:`Not Allowed` option.
|
||||
|
||||
- :guilabel:`Approval`: select the type of approval(s) required for the allocation of this
|
||||
particular type of time off.
|
||||
|
||||
- :guilabel:`No validation needed` indicates that no approvals are required.
|
||||
- :guilabel:`Approved by Time Off Officer` indicates the :ref:`Time Off Officer
|
||||
<time_off/time-off-officer>` set on this form must approve the allocation.
|
||||
- :guilabel:`Set by Time Off Officer` indicates that the :ref:`Time Off Officer
|
||||
<time_off/time-off-officer>` set on this form must allocate the time off.
|
||||
|
||||
Payroll section
|
||||
***************
|
||||
|
||||
If the time off type should create :doc:`../hr/payroll/work_entries` in the *Payroll* application,
|
||||
select the :guilabel:`Work Entry Type` from the drop-down list.
|
||||
|
||||
Timesheets section
|
||||
******************
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Timesheets` section only appears if the user is in developer mode. Refer to the
|
||||
:ref:`developer-mode` document for details on how to access the developer mode.
|
||||
|
||||
When an employee takes time off and is also using timesheets, Odoo creates entries in the timesheet
|
||||
for the time off. This section defines how they are entered.
|
||||
|
||||
- :guilabel:`Project`: select the project that the time off type entries appear in.
|
||||
- :guilabel:`Task`: select the task that appears in the timesheet for this time off type. The
|
||||
options are: :guilabel:`Time Off`, :guilabel:`Meeting`, or :guilabel:`Training`.
|
||||
|
||||
Display option section
|
||||
**********************
|
||||
|
||||
- :guilabel:`Color`: select a color to be used in the *Time Off* application dashboard.
|
||||
- :guilabel:`Cover Image`: select an icon to be used in the *Time Off* application dashboard.
|
||||
|
||||
.. note::
|
||||
The only required fields on the time off type form are the name of the :guilabel:`Time Off Type`,
|
||||
the :guilabel:`Approval`, the :guilabel:`Responsible Time Off Officer`, :guilabel:`Take Time Off
|
||||
in`, :guilabel:`Kind of Leave`, and the :guilabel:`Allocation Requests` section.
|
||||
|
||||
.. image:: time_off/time-off-type-form.png
|
||||
:align: center
|
||||
:alt: Time off type form with all the information filled out for sick time off.
|
||||
|
||||
.. _time_off/accrual-plans:
|
||||
|
||||
Accrual plans
|
||||
-------------
|
||||
|
||||
Some time off is earned through an accrual plan, meaning that for every specified amount of time an
|
||||
employee works (hour, day, week, etc), they earn or *accrue* a specified amount of time off.
|
||||
|
||||
.. example::
|
||||
If an employee accrues a vacation day for every week they work, they would earn 0.2 vacation days
|
||||
for each hour they work. At the end of a forty (40) hour work week, they earn a whole vacation
|
||||
day (8 hours).
|
||||
|
||||
Create accrual plan
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To create a new accrual plan, navigate to :menuselection:`Time Off app --> Configuration --> Accrual
|
||||
Plans`. Then, click the :guilabel:`Create` button, which reveals a blank accrual plan form.
|
||||
|
||||
Enter the accrual plan name in the :guilabel:`Name` field. If the accrual plan only applies to a
|
||||
specific time off type, select it from the drop-down menu. If this accrual plan is available for all
|
||||
time off types, leave this field blank.
|
||||
|
||||
Next, select how the :guilabel:`Level Transition` occurs, either :guilabel:`Immediately` or
|
||||
:guilabel:`After this accrual's period`. By default, the first level begins once the time off is
|
||||
approved if the time off is based on an accrual plan. If :guilabel:`Immediately` is selected, then
|
||||
the next level begins according to the time frame set on the level. If :guilabel:`After this
|
||||
accrual's period` is selected, the next level does not begin until the first level is completed
|
||||
according to the rules set on it.
|
||||
|
||||
Rules
|
||||
*****
|
||||
|
||||
Rules must be created in order for the accrual plan to accrue time off.
|
||||
|
||||
To create a new rule, click the :guilabel:`Add A New Level` button right beneath the word `Rules`,
|
||||
and a :guilabel:`Create Level` pop-up form appears.
|
||||
|
||||
Fill out the following fields on the form:
|
||||
|
||||
- :guilabel:`Start after (#) (time period) after allocation date`: enter the number and value of the
|
||||
time period that must pass before the employee starts to accumulate time off. The first value is
|
||||
numerical; enter a number in the first field.
|
||||
|
||||
Then, select the type of time period using the drop-down menu in the second field. The options
|
||||
are: :guilabel:`day(s)`, :guilabel:`month(s)`, or :guilabel:`year(s)`.
|
||||
- :guilabel:`Based on worked time`: tick this box if the accrual of time off is based on the time
|
||||
the employee has worked. If an employee takes time off that is *not* considered a worked day, Odoo
|
||||
will not count that day towards their accrual plan.
|
||||
- :guilabel:`Rate (#) (time)`: enter the rate of time off that is accumulated. The first value is
|
||||
numerical; enter a number in the first field. Whole numbers are not necessary, any decimal value
|
||||
may be entered.
|
||||
|
||||
Next, in the second field, select the type of time accrued using the drop-down menu. The options
|
||||
are either :guilabel:`Days` or :guilabel:`Hours`.
|
||||
- :guilabel:`Frequency (X)`: select how often the employee accrues the time off for this rule using
|
||||
the drop-down menu. The options are :guilabel:`Daily`, :guilabel:`Weekly`, :guilabel:`Twice a
|
||||
month`, :guilabel:`Monthly`, :guilabel:`Twice a year`, or :guilabel:`Yearly`.
|
||||
|
||||
Depending on the selection, more fields appear to specify exactly when the accrual renews.
|
||||
|
||||
.. example::
|
||||
If the employee should accrue one vacation day for every week worked, the :guilabel:`Rate` is set
|
||||
to `1`, and the :guilabel:`Frequency` entry is set to `Frequency (Weekly) on (Friday)`. Only the
|
||||
:guilabel:`Frequency` and :guilabel:`Weekday` fields appear.
|
||||
|
||||
If the employee should accrue ten (10)vacation days each year, and they receive these days every
|
||||
year on the first of January, the :guilabel:`Rate` is set to `10`, and the :guilabel:`Frequency`
|
||||
entry is set to `Frequency (Yearly) on the (1) of (January)`. The :guilabel:`Frequency`,
|
||||
:guilabel:`Date`, and :guilabel:`Month` fields appear.
|
||||
|
||||
- :guilabel:`Limit to`: enter a maximum amount of days the employee can accrue with this plan.
|
||||
- :guilabel:`At the end of the calendar year, unused accruals will be`: select from the drop-down
|
||||
menu how unused time off is handled.
|
||||
|
||||
The options are either :guilabel:`Transferred to the next year`, which rolls over unused time to
|
||||
the next calendar year, or :guilabel:`Lost`, which means any unused time off is gone.
|
||||
|
||||
.. image:: time_off/new-level.png
|
||||
:align: center
|
||||
:alt: A level form with all the data filled out.
|
||||
|
||||
When the form is filled out, click :guilabel:`Save & Close` to save the form and close the pop-up,
|
||||
or :guilabel:`Save & New` to save the form and create a new rule. Add as many levels as desired.
|
||||
|
||||
.. image:: time_off/accrual-plan-form.png
|
||||
:align: center
|
||||
:alt: An accrual form with all the entries filled out.
|
||||
|
||||
.. _time_off/public-holidays:
|
||||
|
||||
Public holidays
|
||||
---------------
|
||||
|
||||
Most countries have public or national holidays, and some companies may have specific days they are
|
||||
closed and/or give extra days as holidays.
|
||||
|
||||
It is important to configure these days in Odoo, so employees are aware of the days they have off,
|
||||
and do not request time off on days that are already set as a public holiday (non-working days).
|
||||
|
||||
Create public holiday
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To create a public holiday, navigate to :menuselection:`Time Off app --> Configuration --> Public
|
||||
Holidays`.
|
||||
|
||||
All currently configured public holidays appear in a list view.
|
||||
|
||||
Click the :guilabel:`Create` button, and a new line appears at the bottom of the list.
|
||||
|
||||
Enter the following information:
|
||||
|
||||
- :guilabel:`Name`: enter the name of the holiday.
|
||||
- :guilabel:`Company`: if in a multi-company database, the current company populates this field by
|
||||
default. It is not possible to edit this field.
|
||||
- :guilabel:`Start Date`: using the date and time picker, select the date and time that the holiday
|
||||
starts. By default, this field is configured for the current date. The start time is set according
|
||||
to the start time for the company (according to the :ref:`working times <payroll/working-times>`).
|
||||
If the user's computer is set to a different time zone, the start time is adjusted according to
|
||||
the difference in the time zone compared to the company's time zone.
|
||||
- :guilabel:`End Date`: using the date and time picker, select the date and time that the holiday
|
||||
ends. By default, this field is configured for the current date, and the time is set to the end
|
||||
time for the company (according to the :ref:`working times <payroll/working-times>`). If the
|
||||
user's computer is set to a different time zone, the start time is adjusted according to the
|
||||
difference in the time zone compared to the company's time zone.
|
||||
|
||||
.. example::
|
||||
A company is located in San Francisco, and the working times are 9:00 AM - 6:00 PM (an eight
|
||||
(8) hour work day with a one (1) hour lunch break). A user is located in New York, and their
|
||||
computer time zone is set to Eastern. When they create a Public Holiday, the start time appears
|
||||
as 12:00 PM - 9:00 PM, since the time zone is accounted for. If a different user is located in
|
||||
Los Angeles, and their computer time zone is set to Pacific, when they create a Public Holiday,
|
||||
the time appears as 9:00 AM - 6:00 PM.
|
||||
|
||||
- :guilabel:`Working Hours`: if the holiday should only apply to employees who have a specific set
|
||||
of working hours, select the working hours from the drop-down menu. If left blank, the holiday
|
||||
applies to all employees.
|
||||
- :guilabel:`Work Entry Type`: if using the *Payroll* application, this field defines how the work
|
||||
entry for the holiday appears. Select the work entry type from the drop-down menu.
|
||||
|
||||
.. image:: time_off/holidays.png
|
||||
:align: center
|
||||
:alt: The list of public holidays in the configuration menu.
|
||||
|
||||
.. _time_off/allocate:
|
||||
|
||||
Overview
|
||||
========
|
||||
|
||||
To view a color-coded schedule of both the user's time off, and/or the team managed by them,
|
||||
navigate to :menuselection:`Time Off app --> Overview`. This presents a calendar with the default
|
||||
filter of :guilabel:`My Team`, in a month view.
|
||||
|
||||
To change the time period displayed, click on either the :guilabel:`Day`, :guilabel:`Week`,
|
||||
:guilabel:`Month`, or :guilabel:`Year` buttons to present the calendar in that corresponding view.
|
||||
|
||||
Each team member is displayed on a line, and any time off they requested, regardless of the status
|
||||
(:guilabel:`Validated` or :guilabel:`To Approve`), appears on the calendar.
|
||||
|
||||
Each employee is color-coded. The employee's color is selected at random and does not correspond to
|
||||
the type of time off they requested.
|
||||
|
||||
The status of the time of is represented by the color of the request either appearing solid
|
||||
(:guilabel:`Validated`) or striped (:guilabel:`To Approve`).
|
||||
|
||||
The number of days or hours requested is written on the request (if there is enough space).
|
||||
|
||||
At the bottom of the calendar, a bar graph shows how many people are projected to be out on any
|
||||
given day. The number on the bar represents the number of employees out for those highlighted days.
|
||||
|
||||
Hover over a time off entry to view the details for the specific time off entry. The total number of
|
||||
hours or days are listed, along with the start and end time of the time off.
|
||||
|
||||
.. image:: time_off/overview.png
|
||||
:align: center
|
||||
:alt: Overview of the user's team, with time off requests shown.
|
||||
|
||||
.. _time_off/reporting:
|
||||
|
||||
Allocate time off
|
||||
=================
|
||||
|
||||
Once time off types and accrual plans have been configured, the next step is to allocate, or give,
|
||||
time off to employees. This section is only visible to users who have either :guilabel:`Time Off
|
||||
Officer` or :guilabel:`Administrator` access rights for the *Time Off* application.
|
||||
|
||||
To create a new allocation, navigate to :menuselection:`Time Off app --> Approvals --> Allocations`.
|
||||
|
||||
This presents a list of all current allocations, including their respective status.
|
||||
|
||||
Click :guilabel:`Create` to allocate time off, and a blank allocation form appears.
|
||||
|
||||
After entering a name for the allocation on the first blank field of the form, enter the following
|
||||
information:
|
||||
|
||||
- :guilabel:`Time Off Type`: using the drop-down menu, select the type of time off that is being
|
||||
allocated to the employees.
|
||||
- :guilabel:`Allocation Type`: select either :guilabel:`Regular Allocation` or :guilabel:`Accrual
|
||||
Allocation`.
|
||||
- :guilabel:`Accrual Plan`: if :guilabel:`Accrual Allocation` is selected for the
|
||||
:guilabel:`Allocation Type`, the :guilabel:`Accrual Plan` field appears. Using the drop-down menu,
|
||||
select the accrual plan with which the allocation is associated. An accrual plan **must** be
|
||||
selected for an :guilabel:`Accrual Allocation`.
|
||||
- :guilabel:`Validity Period/Start Date`: if :guilabel:`Regular Allocation` is selected for the
|
||||
:guilabel:`Allocation Type`, this field is labeled :guilabel:`Validity Period`.
|
||||
|
||||
Using the calendar, select the beginning date for the allocation. If the allocation expires,
|
||||
select the expiration date in the next date field. If the time off does *not* expire, leave the
|
||||
second date field blank.
|
||||
|
||||
If :guilabel:`Accrual Allocation` is selected for the :guilabel:`Allocation Type`, this field is
|
||||
labeled :guilabel:`Start Date`.
|
||||
|
||||
Using the calendar picker, select the start date for the allocation. If the allocation expires,
|
||||
select the expiration date in the :guilabel:`Run until` field. If the time off does *not* expire,
|
||||
leave the :guilabel:`Run until` field blank.
|
||||
- :guilabel:`Duration`: enter the amount of time that is being allocated to the employees. This
|
||||
field displays the time in either :guilabel:`Hours` or :guilabel:`Days`, depending on how the
|
||||
selected :ref:`Time Off Type <time_off/time-off-types>` is configured (in days or hours).
|
||||
- :guilabel:`Mode`: using the drop-down menu, select how the allocation is assigned. This selection
|
||||
determines who receives the time off allocation. The options are :guilabel:`By Employee`,
|
||||
:guilabel:`By Company`, :guilabel:`By Department`, or :guilabel:`By Employee Tag`.
|
||||
|
||||
Depending on what was selected for the :guilabel:`Mode`, this following field is labeled either:
|
||||
:guilabel:`Employees`, :guilabel:`Company`, :guilabel:`Department`, or :guilabel:`Employee Tag`.
|
||||
|
||||
Using the drop-down menu, indicate the specific employees, company, department, or employee tags
|
||||
who are receiving this time off.
|
||||
|
||||
Multiple selections can be made for either :guilabel:`Employees` or :guilabel:`Employee Tag`.
|
||||
|
||||
Only one selection can be made for the :guilabel:`Company` or :guilabel:`Department`.
|
||||
- :guilabel:`Add a reason...`: if any description or note is necessary to explain the time off
|
||||
allocation, enter it in this field at the bottom of the form.
|
||||
|
||||
.. _time_off/request-time-off:
|
||||
|
||||
Request time off
|
||||
================
|
||||
|
||||
Once an employee has been allocated time off, a request to use the time off can be submitted. Time
|
||||
off can be requested in one of two ways, either from the :ref:`dashboard <time_off/dashboard>` or
|
||||
from the :guilabel:`My Time Off` view.
|
||||
|
||||
To access the dashboard, navigate to :menuselection:`Time Off app --> My Time Off --> Dashboard`.
|
||||
This is also the default view for the *Time Off* application.
|
||||
|
||||
To access :guilabel:`My Time Off`, navigate to :menuselection:`Time Off app --> My Time Off --> My
|
||||
Time Off`. This presents a list view of all the time off requests for the employee.
|
||||
|
||||
To create a new request for time off, click either the :guilabel:`New Time Off` button on the main
|
||||
*Time Off* dashboard, or the :guilabel:`Create` button in the :guilabel:`My Time Off` list view.
|
||||
Both buttons open a new time off request form.
|
||||
|
||||
Enter the following information on the form:
|
||||
|
||||
- :guilabel:`Time Off Type`: select the type of time off being requested from the drop-down menu.
|
||||
- :guilabel:`Dates`: enter the dates that the time off will fall under. There are two fields to
|
||||
populate, the :guilabel:`From` and :guilabel:`To` fields. Click on either the :guilabel:`From` or
|
||||
:guilabel:`To` field, and a calendar pop-up appears.
|
||||
|
||||
Click on the start date, then click on the end date. The selected start and end dates appear in
|
||||
deep purple, and the dates between them appear in pale purple (if applicable).
|
||||
|
||||
If the time off requested is for a single day, click on the start date, then click the same date
|
||||
again for the end date.
|
||||
|
||||
When the correct dates are selected/highlighted, click the :guilabel:`Apply` button.
|
||||
|
||||
The dates now populate the :guilabel:`From` and :guilabel:`To` fields.
|
||||
|
||||
- :guilabel:`Half Day`: if the time off request is for a half day, tick this box. When this is
|
||||
selected, the :guilabel:`From` date field disappears, and is replaced with a drop-down menu.
|
||||
Select either :guilabel:`Morning` or :guilabel:`Afternoon` to indicate which half of the day is
|
||||
being requested.
|
||||
- :guilabel:`Custom Hours`: if the time off requested is not a whole or half day, tick this box. A
|
||||
:guilabel:`From` and :guilabel:`To` field appears beneath this option if selected. Using the
|
||||
drop-down menu, select the start and end time for the time off request.
|
||||
|
||||
- :guilabel:`Duration`: this field updates automatically once the :guilabel:`Date` section is
|
||||
completed. If the :guilabel:`Date` section is modified, this section automatically updates to
|
||||
reflect the total time off requested. This field is in either hours or days, depending on the
|
||||
:guilabel:`Date` selections.
|
||||
- :guilabel:`Description`: enter a description for the time off request. This should include any
|
||||
details that managers and approvers may need in order to approve the request.
|
||||
- :guilabel:`Supporting Document`: this field only appears if the :guilabel:`Time Off Type` selected
|
||||
allows for the attachments of documents. Click the :guilabel:`Attach File` button, and a file
|
||||
explorer window appears.
|
||||
|
||||
Navigate to the file(s) to attach, then click the :guilabel:`Open` button. The files then appear
|
||||
on the time off request form. Multiple documents can be attached, if necessary.
|
||||
|
||||
When the form is complete, click the :guilabel:`Save` button to save the information, and submit the
|
||||
request.
|
||||
|
||||
.. image:: time_off/time-off-request.png
|
||||
:align: center
|
||||
:alt: A time off request form filled out for an employee home sick for two days with the flu.
|
||||
|
||||
.. _time_off/request-allocation:
|
||||
|
||||
Request allocation
|
||||
==================
|
||||
|
||||
If an employee has used all their time off, or is going to run out of time off, they can request an
|
||||
allocation for additional time. Allocations can be requested in one of two ways, either from the
|
||||
:ref:`dashboard <time_off/dashboard>` or the :guilabel:`My Allocations` view.
|
||||
|
||||
To access the dashboard, navigate to the :menuselection:`Time Off app --> My Time Off -->
|
||||
Dashboard`. This is also the default view for the *Time Off* application.
|
||||
|
||||
To access :guilabel:`My Allocations`, navigate to the :menuselection:`Time Off app --> My Time Off
|
||||
--> My Allocations`. This presents a list view of all the allocations for the employee.
|
||||
|
||||
To create a new allocation request, click either the :guilabel:`Allocation Request` button on the
|
||||
main *Time Off* dashboard, or the :guilabel:`Create` button in the :guilabel:`My Allocations` list
|
||||
view. Both buttons open a new allocation request form.
|
||||
|
||||
After entering a name for the allocation in the first blank line on the form, enter the following
|
||||
information:
|
||||
|
||||
- :guilabel:`Time Off Type`: select the type of time off being requested for the allocation from the
|
||||
drop-down menu.
|
||||
- :guilabel:`Validity Period`: the current date populates the start date by default. If there is no
|
||||
expiration on the time off type, there is no date populated as the end date. If the time off type
|
||||
has an expiration date, the date automatically populates the end date field once the form is
|
||||
saved.
|
||||
- :guilabel:`Duration`: enter the amount of time being requested. The format (either days or hours)
|
||||
is in the same format as the time off type.
|
||||
- :guilabel:`Add a reason...`: enter a description for the allocation request. This should include
|
||||
any details that managers and approvers may need in order to approve the request.
|
||||
|
||||
When the form is complete, click the :guilabel:`Save` button to save the information, and submit the
|
||||
request.
|
||||
|
||||
.. image:: time_off/allocation-request.png
|
||||
:align: center
|
||||
:alt: An allocation request form filled out for an employee requesting an additional week of
|
||||
sick time.
|
||||
|
||||
Approvals
|
||||
=========
|
||||
|
||||
Most requests for time off and allocations need to go through the approval process, prior to the
|
||||
time off being allocated, and then granted to an employee. Requests either need one or two
|
||||
approvals, depending on how the specific type of time off is configured.
|
||||
|
||||
Only users who can approve allocation and time off requests have the :guilabel:`Approvals` section
|
||||
visible in the *Time Off* application.
|
||||
|
||||
Approve allocations
|
||||
-------------------
|
||||
|
||||
To view allocations that need approval, navigate to :menuselection:`Time Off app --> Approvals -->
|
||||
Allocations`. The only allocations visible on this list are for employees the user has either
|
||||
:guilabel:`Time Off Officer` or :guilabel:`Administrator` access rights for in the *Time Off*
|
||||
application.
|
||||
|
||||
The default filters that are configured to be in place when navigating to the
|
||||
:guilabel:`Allocations` list are :guilabel:`My Team` and :guilabel:`Active Employee`. This *only*
|
||||
presents employees on the user's team (who they manage) and active employees. Inactive users are not
|
||||
shown.
|
||||
|
||||
The left side of the screen has various grouping options to narrow down the presented allocation
|
||||
requests.
|
||||
|
||||
The options are :guilabel:`To Approve`, :guilabel:`To Submit`, :guilabel:`Refused`, and
|
||||
:guilabel:`Approved`.
|
||||
|
||||
To view all allocation requests, click :guilabel:`All`.
|
||||
|
||||
It is also possible to display allocation requests by department. Click on the department to only
|
||||
present allocations for that specific department.
|
||||
|
||||
.. note::
|
||||
The groupings on the left side only present allocation requests that fall under the default
|
||||
filters of :guilabel:`My Team` and :guilabel:`Active Employee`. Only the statuses for allocation
|
||||
requests that fall under those filters are presented on the left side.
|
||||
|
||||
For example, if there are no requests with a status of :guilabel:`To Submit`, that status option
|
||||
does not appear in the left-hand side.
|
||||
|
||||
All departments for the user's employees appear in the list. If there are no allocation requests
|
||||
that fall under that department matching the pre-configured filters, the list is blank.
|
||||
|
||||
It is always possible to remove any of the pre-configured filters, by clicking the :guilabel:`✖️
|
||||
(remove)` icon on the specific filter to remove it.
|
||||
|
||||
The status column displays the status of each request, with the status highlighted in a specific
|
||||
color.
|
||||
|
||||
The :guilabel:`To Approve` requests are highlighted in yellow, :guilabel:`Approved` requests are
|
||||
highlighted in green, :guilabel:`To Submit` (drafts) requests are highlighted in blue, and the
|
||||
:guilabel:`Refused` requests are highlighted in gray.
|
||||
|
||||
To approve an allocation request, click :guilabel:`✔ Validate` at the end of the line, to refuse a
|
||||
request, click :guilabel:`✖️ Refuse`.
|
||||
|
||||
.. image:: time_off/allocations.png
|
||||
:align: center
|
||||
:alt: Allocations with the filter, groupings, and status sections highlighted.
|
||||
|
||||
If more details are needed, click anywhere on the allocation request line (except for :guilabel:`✔
|
||||
Validate` and :guilabel:`✖️ Refuse`) to view the request in detail.
|
||||
|
||||
Depending on the rights of the user, changes can be made on the allocation request form that
|
||||
appears. To modify the request, click the :guilabel:`Edit` button, make any desired changes, then
|
||||
click :guilabel:`Save`.
|
||||
|
||||
It is also possible to approve or refuse the request from this form. Click the :guilabel:`Validate`
|
||||
button to approve, or the :guilabel:`Refuse` button to refuse the request.
|
||||
|
||||
.. _time_off/approve-time-off:
|
||||
|
||||
Approve time off
|
||||
----------------
|
||||
|
||||
To view time off requests that need approval, navigate to :menuselection:`Time Off app --> Approvals
|
||||
--> Time Off`. The only time off requests visible on this list are for employees the user has either
|
||||
:guilabel:`Time Off Officer` or :guilabel:`Administrator` access rights for the *Time Off*
|
||||
application.
|
||||
|
||||
The default filters in the :guilabel:`Time Off` list are :guilabel:`To Approve`, :guilabel:`My
|
||||
Team`, :guilabel:`Active Employee`, and :guilabel:`Active Time Off`. This only presents time off
|
||||
requests that need to be approved for current employees on the user's team, for requests that are
|
||||
active and *not* in a draft mode.
|
||||
|
||||
The left side of the screen has various grouping options to narrow down the presented time off
|
||||
requests. Since only time off requests that need to be approved are shown, the only status options
|
||||
are :guilabel:`All` and :guilabel:`To Approve`.
|
||||
|
||||
To view requests with other statuses, first remove the :guilabel:`To Approve` filter, by clicking
|
||||
the :guilabel:`✖️ (remove)` icon next to the :guilabel:`To Approve` filter to remove it.
|
||||
|
||||
To display time off requests for specific departments, click on the department on the left-hand
|
||||
side. Only requests within the selected department are then presented.
|
||||
|
||||
The status column displays the status of each request, with the status highlighted in a specific
|
||||
color.
|
||||
|
||||
The :guilabel:`To Approve` requests are highlighted in yellow, and are the only ones that appear in
|
||||
the list by default. If the :guilabel:`To Approve` filter is removed, then all statuses appear.
|
||||
:guilabel:`Approved` requests are highlighted in green, :guilabel:`To Submit` (drafts) requests are
|
||||
highlighted in blue, and the :guilabel:`Refused` requests are highlighted in gray.
|
||||
|
||||
To approve a time off request, click :guilabel:`👍 Approve` at the end of the line, to refuse a
|
||||
request, click :guilabel:`✖️ Refuse`.
|
||||
|
||||
.. image:: time_off/time-off-requests.png
|
||||
:align: center
|
||||
:alt: Time off requests with the filter, groupings, and status sections highlighted.
|
||||
|
||||
If more details are needed, click anywhere on the time off request line (except for :guilabel:`👍
|
||||
Approve` and :guilabel:`✖️ Refuse`) to load the time off request form. Depending on the rights of
|
||||
the user, changes can be made.
|
||||
|
||||
To modify the request, click the :guilabel:`Edit` button, make any desired changes, then click
|
||||
:guilabel:`Save`.
|
||||
|
||||
It is also possible to approve or refuse the request from this form. Click the :guilabel:`Approve`
|
||||
button to approve, or the :guilabel:`Refuse` button to refuse the request.
|
||||
|
||||
My time off
|
||||
===========
|
||||
|
||||
The :guilabel:`My Time Off` section of the *Time Off* application contains the time off dashboard,
|
||||
as well as the user's time off requests and allocations.
|
||||
|
||||
.. _time_off/dashboard:
|
||||
|
||||
Dashboard
|
||||
---------
|
||||
|
||||
All users have access to the time off dashboard, which is the default view in the *Time Off*
|
||||
application. The dashboard can also be accessed at any point in the application by navigating to
|
||||
:menuselection:`Time Off app --> My Time Off --> Dashboard`.
|
||||
|
||||
The current year is displayed, and the current day is highlighted in red.
|
||||
|
||||
To change the view, click on the desired button at the top. The options are :guilabel:`Day`,
|
||||
:guilabel:`Week`, :guilabel:`Month`, or :guilabel:`Year` (the default).
|
||||
|
||||
To change the presented dates, click the left and right arrows on either side of the
|
||||
:guilabel:`Today` button. The calendar view adjusts in increments of the presented view.
|
||||
|
||||
For example, if :guilabel:`Week` is selected, the arrows adjust the view by one week.
|
||||
|
||||
To change the view at any point to a view that includes the current date, click the
|
||||
:guilabel:`Today` button.
|
||||
|
||||
Above the calendar view is a summary of the users time off balances. Every time off type that has
|
||||
been allocated appears in its own summary box. Each summary lists the type of time off, the
|
||||
corresponding icon, the current available balance (in hours or days), and an expiration date (if
|
||||
applicable).
|
||||
|
||||
The legend on the right side of the calendar view displays the various time off types, with their
|
||||
corresponding colors. The status of the time off requests are shown as well.
|
||||
|
||||
Time off that has been validated appears in a solid color (in the color specified in the Time Off
|
||||
Types part of the legend). Time off requests that still need to be approved appear with white
|
||||
stripes in the color. Refused time off requests have a colored line through the dates.
|
||||
|
||||
New time off requests can be made from the dashboard. Click the :guilabel:`New Time Off` button at
|
||||
the top of the dashboard, and a new :ref:`time off form <time_off/request-time-off>` appears.
|
||||
|
||||
New allocation requests can also be made from the dashboard. Click the :guilabel:`Allocation
|
||||
Request` button at the top of the dashboard to request more time off, and a new :ref:`allocation
|
||||
form <time_off/request-allocation>` appears.
|
||||
|
||||
.. image:: time_off/dashboard.png
|
||||
:align: center
|
||||
:alt: Time off dashboard view with the legend, time off summaries, and view buttons highlighted.
|
||||
|
||||
My time off
|
||||
-----------
|
||||
|
||||
To view a list of all the user's time off requests, navigate to :menuselection:`Time Off app --> My
|
||||
Time Off --> My Time Off`. Here, all time off requests appear in a list view, both past and
|
||||
present.
|
||||
|
||||
Other than the employee's name, the list includes the following information for each request: the
|
||||
:guilabel:`Time Off Type`, :guilabel:`Description`, :guilabel:`Start Date`, :guilabel:`End Date`,
|
||||
:guilabel:`Duration`, and the :guilabel:`Status`.
|
||||
|
||||
A new time off request can be made from this view. Click the :guilabel:`Create` button to
|
||||
:ref:`request time off <time_off/request-time-off>`.
|
||||
|
||||
My allocations
|
||||
--------------
|
||||
|
||||
To view a list of all the users allocations, navigate to :menuselection:`Time Off app --> My Time
|
||||
Off --> My Allocations`. All allocations and requested allocations appear in a list view.
|
||||
|
||||
The information presented includes: the :guilabel:`Time Off Type`, :guilabel:`Description`,
|
||||
:guilabel:`Duration`, :guilabel:`Allocation Type`, and the :guilabel:`Status`.
|
||||
|
||||
A new allocation request can be made from this view, as well. Click the :guilabel:`Create` button to
|
||||
:ref:`request an allocation <time_off/request-allocation>`.
|
||||
|
||||
Reporting
|
||||
=========
|
||||
|
||||
The reporting feature allows users to view time off for their team, either by employee or type of
|
||||
time off. This allows users to see which employees are taking time off, how much time off they are
|
||||
taking, and what time off types are being used.
|
||||
|
||||
By employee
|
||||
-----------
|
||||
|
||||
To view a report of employee time off requests, navigate to :menuselection:`Time Off app -->
|
||||
Reporting --> by Employee`.
|
||||
|
||||
The default report is a stacked bar chart with the filters of :guilabel:`Active Employee` and
|
||||
:guilabel:`Type` in place.
|
||||
|
||||
Each employee is displayed in their own column, with the bar displaying how many days of each type
|
||||
of time off type they requested.
|
||||
|
||||
The report can be displayed in other ways. Click the various options at the top of the report to
|
||||
view the data differently.
|
||||
|
||||
The graph options are :guilabel:`Bar Chart`, :guilabel:`Line Chart`, or :guilabel:`Pie Chart`. The
|
||||
:guilabel:`Bar Chart` includes an option to present the data :guilabel:`Stacked`. Both the
|
||||
:guilabel:`Bar Chart` and :guilabel:`Line Chart` have options to present the data in either
|
||||
:guilabel:`Descending` or :guilabel:`Ascending` order.
|
||||
|
||||
.. image:: time_off/bar-chart.png
|
||||
:align: center
|
||||
:alt: Report of time off, shown by each employee in a stacked bar chart.
|
||||
|
||||
By type
|
||||
-------
|
||||
|
||||
To view a list of approved time off, organized by time off type, navigate to :menuselection:`Time
|
||||
Off app --> Reporting --> by Type`. This shows each time off type in its own section.
|
||||
|
||||
Click on a time off type to expand the list. Each request is listed, with the following information
|
||||
displayed: the :guilabel:`Employee`, :guilabel:`Number of Days`, :guilabel:`Request Type`,
|
||||
:guilabel:`Start Date`, :guilabel:`End Date`, :guilabel:`Status`, and the :guilabel:`Description`.
|
||||
|
||||
The default filters in place for this report are :guilabel:`Approved Requests`, :guilabel:`Active
|
||||
Employee`, the :guilabel:`Current Year`, and the :guilabel:`Type`.
|
||||
|
||||
.. image:: time_off/type-report.png
|
||||
:align: center
|
||||
:alt: Report of time off by type, with each request detailed in the list.
|
||||
BIN
content/applications/hr/time_off/accrual-plan-form.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
content/applications/hr/time_off/allocation-request.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
content/applications/hr/time_off/allocations.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
content/applications/hr/time_off/bar-chart.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
content/applications/hr/time_off/dashboard.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
content/applications/hr/time_off/holidays.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
content/applications/hr/time_off/new-level.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
content/applications/hr/time_off/overview.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
content/applications/hr/time_off/time-off-request.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
content/applications/hr/time_off/time-off-requests.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
content/applications/hr/time_off/time-off-type-form.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
content/applications/hr/time_off/type-report.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
@@ -1,48 +1,151 @@
|
||||
================================================
|
||||
Process to an Inventory Adjustment with Barcodes
|
||||
================================================
|
||||
=========================================
|
||||
Apply inventory adjustments with barcodes
|
||||
=========================================
|
||||
|
||||
To process an inventory adjustment by using barcodes, you first need to
|
||||
open the *Barcode* app. Then, from the application, click on
|
||||
*Inventory Adjustments*.
|
||||
In a warehouse, the recorded inventory counts in the database might not always match the actual,
|
||||
real inventory counts. In such cases, inventory adjustments can be made to reconcile the
|
||||
differences, and ensure that the recorded counts in the database match the actual counts in the
|
||||
warehouse. In Odoo, the *Barcode* app can be used to make these adjustments.
|
||||
|
||||
.. image:: adjustments/adjustments_01.png
|
||||
:align: center
|
||||
These adjustments can be done in real time using an Odoo-compatible barcode scanner or the Odoo
|
||||
mobile app.
|
||||
|
||||
.. note::
|
||||
If you want to fully work with barcodes, you can download the sheet
|
||||
*Commands for Inventory*.
|
||||
For a list of Odoo-compatible barcode mobile scanners, and other hardware for the *Inventory* and
|
||||
*Barcode* apps, refer to the `Odoo Inventory • Hardware page
|
||||
<https://www.odoo.com/app/inventory-hardware>`_.
|
||||
|
||||
Once you have clicked on *Inventory Adjustments*, Odoo will
|
||||
automatically create one. Note that, if you work with multi-location,
|
||||
you first need to specify in which location the inventory adjustment
|
||||
takes place.
|
||||
.. seealso::
|
||||
:doc:`../../inventory/warehouses_storage/inventory_management/count_products`
|
||||
|
||||
.. image:: adjustments/adjustments_02.png
|
||||
:align: center
|
||||
Enable Barcode app
|
||||
==================
|
||||
|
||||
If you don’t work with multi-location, you will be able to scan the
|
||||
different products you want to include in the inventory adjustment.
|
||||
To use the *Barcode* app to create and apply inventory adjustments, it **must** be installed by
|
||||
enabling the feature from the settings of the *Inventory* app.
|
||||
|
||||
.. image:: adjustments/adjustments_03.png
|
||||
:align: center
|
||||
To do so, go to the :menuselection:`Inventory app --> Configuration --> Settings`. Then, scroll down
|
||||
to the :guilabel:`Barcode` section, and click the checkbox next to the :guilabel:`Barcode Scanner`
|
||||
option.
|
||||
|
||||
.. note::
|
||||
If you have 5 identical articles, scan it 5 times or use the keyboard to
|
||||
set the quantity.
|
||||
Once the checkbox is ticked, click :guilabel:`Save` at the top of the page to save changes.
|
||||
|
||||
Besides using the barcode scanner, you can also manually add a product
|
||||
if necessary. To do so, click on *Add Product* and fill the
|
||||
information in manually.
|
||||
After saving, a new drop-down menu appears under the :guilabel:`Barcode Scanner` option, labeled
|
||||
:guilabel:`Barcode Nomenclature`, where either :guilabel:`Default Nomenclature` or
|
||||
:guilabel:`Default GS1 Nomenclature` can be selected. Each nomenclature option determines how
|
||||
scanners interpret barcodes in Odoo.
|
||||
|
||||
.. image:: adjustments/adjustments_04.png
|
||||
:align: center
|
||||
There is also a :guilabel:`Configure Product Barcodes` internal link arrow, along with a set of
|
||||
:guilabel:`Print` buttons for printing barcode commands and a barcode demo sheet.
|
||||
|
||||
.. image:: adjustments/adjustments_05.png
|
||||
:align: center
|
||||
.. image:: adjustments/adjustments-barcode-setting.png
|
||||
:align: center
|
||||
:alt: Enabled Barcode feature in Inventory app settings.
|
||||
|
||||
When you have scanned all the items of the location, validate the
|
||||
inventory manually or scan the *Validate* barcode.
|
||||
.. seealso::
|
||||
For more information on setting up and configuring the :guilabel:`Barcode` app, refer to the
|
||||
:doc:`Set up your barcode scanner <../setup/hardware>` and :doc:`Activate the Barcodes in Odoo
|
||||
<../setup/software>` docs.
|
||||
|
||||
.. image:: adjustments/adjustments_06.png
|
||||
:align: center
|
||||
Perform an inventory adjustment
|
||||
===============================
|
||||
|
||||
Begin by navigating to the :menuselection:`Barcode app --> Barcode Scanning` dashboard, where
|
||||
different options will be displayed, including :guilabel:`Operations`, :guilabel:`Inventory
|
||||
Adjustments`, and :guilabel:`Batch Transfers`.
|
||||
|
||||
To create and apply inventory adjustments, click on the :guilabel:`Inventory Adjustments` button at
|
||||
the bottom of the screen.
|
||||
|
||||
Doing so navigates to the *Barcode Inventory Client Action* page, labeled as :guilabel:`Inventory
|
||||
Adjustment` in the top header section.
|
||||
|
||||
.. image:: adjustments/adjustments-barcode-scanner.png
|
||||
:align: center
|
||||
:alt: Barcode app start screen with scanner.
|
||||
|
||||
To begin the adjustment, first scan the *source location*, which is the current location in the
|
||||
warehouse of the product whose count should be adjusted. Then, scan the product barcode(s).
|
||||
|
||||
The barcode of a specific product can be scanned multiple times to increase the quantity of that
|
||||
product in the adjustment.
|
||||
|
||||
.. tip::
|
||||
If the warehouse *multi-location* feature is **not** enabled in the database, a source location
|
||||
does not need to be scanned. Instead, simply scan the product barcode to start the inventory
|
||||
adjustment.
|
||||
|
||||
Alternatively, the quantity can be changed by clicking the :guilabel:`✏️ (pencil)` icon on the far
|
||||
right of the product line.
|
||||
|
||||
Doing so opens a separate window with a keypad. Edit the number in the :guilabel:`Quantity` line to
|
||||
change the quantity. Additionally, the :guilabel:`+1` and :guilabel:`-1` buttons can be clicked to
|
||||
add or subtract quantity of the product, and the number keys can be used to add quantity, as well.
|
||||
|
||||
.. example::
|
||||
In the below inventory adjustment, the source location `WH/Stock/Shelf/2` was scanned, assigning
|
||||
the location. Then, the barcode for the product `[FURN_7888] Desk Stand with Screen` was scanned
|
||||
3 times, increasing the units in the adjustment. Additional products can be added to this
|
||||
adjustment by scanning the barcodes for those specific products.
|
||||
|
||||
.. image:: adjustments/adjustments-barcode-inventory-client-action.png
|
||||
:align: center
|
||||
:alt: Barcode Inventory Client Action page with inventory adjustment.
|
||||
|
||||
To complete the inventory adjustment, click the green :guilabel:`✅ Apply` button with the check mark
|
||||
at the bottom of the page.
|
||||
|
||||
Once applied, Odoo navigates back to the :guilabel:`Barcode Scanning` screen. A small green banner
|
||||
appears in the top right corner, confirming validation of the adjustment.
|
||||
|
||||
.. admonition:: Did you know?
|
||||
|
||||
Odoo's *Barcode* application provides demo data with barcodes to explore the features of the app.
|
||||
These can be used for testing purposes, and can be printed from the home screen of the app.
|
||||
|
||||
To access this demo data, navigate to the :menuselection:`Barcode app` and click :guilabel:`stock
|
||||
barcodes sheet` and :guilabel:`commands for Inventory` (bolded and highlighted in blue) in the
|
||||
information pop-up window above the scanner.
|
||||
|
||||
.. image:: adjustments/adjustments-barcode-stock-sheets.png
|
||||
:align: center
|
||||
:alt: Demo data prompt pop-up on Barcode app main screen.
|
||||
|
||||
Manually add products to inventory adjustment
|
||||
=============================================
|
||||
|
||||
When the barcodes for the location or product are not available, Odoo *Barcode* can still be used to
|
||||
perform inventory adjustments.
|
||||
|
||||
To do this, navigate to the :menuselection:`Barcode app --> Barcode Scanning --> Inventory
|
||||
Adjustments`.
|
||||
|
||||
Doing so navigates to the *Barcode Inventory Client Action* page, labeled as :guilabel:`Inventory
|
||||
Adjustment` in the top header section.
|
||||
|
||||
To manually add products to this adjustment, click the white :guilabel:`➕ Add Product` button at the
|
||||
bottom of the screen.
|
||||
|
||||
This navigates to a new, blank page where the desired product, quantity, and source location must be
|
||||
chosen.
|
||||
|
||||
.. image:: adjustments/adjustments-keypad.png
|
||||
:align: center
|
||||
:alt: Keypad to add products on Barcode Inventory Client Action page.
|
||||
|
||||
First, click the :guilabel:`Product` line, and choose the product whose stock count should be
|
||||
adjusted. Then, manually enter the quantity of that product, either by changing the `1` in the
|
||||
:guilabel:`Quantity` line, or by clicking the :guilabel:`+1` and :guilabel:`-1` buttons to add or
|
||||
subtract quantity of the product. The number pad can be used to add quantity, as well.
|
||||
|
||||
Below the number pad is the :guilabel:`location` line, which should read `WH/Stock` by default.
|
||||
Click this line to reveal a drop-down menu of locations to choose from, and choose the
|
||||
:guilabel:`source location` for this inventory adjustment.
|
||||
|
||||
Once ready, click :guilabel:`Confirm` to confirm the changes.
|
||||
|
||||
To apply the inventory adjustment, click the green :guilabel:`✅ Apply` button with the check mark,
|
||||
at the bottom of the page.
|
||||
|
||||
Once applied, Odoo navigates back to the :guilabel:`Barcode Scanning` screen. A small green banner
|
||||
appears in the top right corner, confirming validation of the adjustment.
|
||||
|
||||
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 107 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 107 KiB |
|
After Width: | Height: | Size: 57 KiB |