Compare commits

...

43 Commits

Author SHA1 Message Date
Michaël Mattiello
ba773cb6c8 [IMP] web: update javascript odoo modules
This commit adapts the javascript modules section with the last
update https://github.com/odoo/odoo/pull/142858 and some outdated
features.
2024-02-06 09:05:14 +01:00
Felicious
603518a6c5 [REF] inventory: move removal strats into own folder
closes odoo/documentation#7617

X-original-commit: 81509af376
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: Jonathan <jcs@odoo.com>
2024-02-03 12:25:16 +00:00
tiku-odoo
7519600559 [IMP] Productivity IoT Windows Add Admonition Block
closes odoo/documentation#7615

X-original-commit: c1ba4c61ae
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2024-02-03 12:25:11 +00:00
tiku-odoo
5a512bbdcf [IMP] Misc Auth LDAP Typo Edits
closes odoo/documentation#7590

X-original-commit: 03678233c5
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Timothy Kukulka (tiku) <tiku@odoo.com>
2024-01-30 16:21:51 +00:00
John Holton (hojo)
9e75bca747 [IMP] Quality: Take a Picture check Shop Floor
closes odoo/documentation#7573

X-original-commit: 93b47e7896
Signed-off-by: John Holton (hojo) <hojo@odoo.com>
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2024-01-30 09:18:04 +00:00
Donatienne (dopi)
7c3abb5af5 [IMP] accounting: reconciliation models update
task-3377307

closes odoo/documentation#7514

X-original-commit: e5a19771c1
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Donatienne Pirlot (dopi) <dopi@odoo.com>
2024-01-30 09:18:00 +00:00
John Holton (hojo)
89cfd364dc [IMP] Quality: Instructions check Shop Floor
closes odoo/documentation#7557

X-original-commit: 58365b78c4
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: Felicious <feku@odoo.com>
Co-authored-by: ksc-odoo <ksc@odoo.com>
Co-authored-by: StraubCreative <zst@odoo.com>
2024-01-29 20:00:14 +00:00
MaxKeilOdoo
8d9d0c90ed [IMP] misc: IAP grammar updates and new image
closes odoo/documentation#7554

X-original-commit: 07333c0061
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Co-authored-by: larm-odoo <121518652+larm-odoo@users.noreply.github.com>
Co-authored-by: tiku-odoo <tiku@odoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: StraubCreative <zst@odoo.com>
2024-01-29 20:00:14 +00:00
Lara Martini (larm)
cce9456f93 [ADD] Time Off: new documentation needed
closes odoo/documentation#7537

X-original-commit: a838df1660
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2024-01-29 20:00:11 +00:00
Augusto Perez
1febb15453 [ADD] Upgrade documentation: Upgrade scripts and Util package
closes odoo/documentation#7550

X-original-commit: 16a209c750
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2024-01-26 09:56:30 +00:00
John Holton (hojo)
832628a8c7 [IMP] MRP: Update Manufacturing step docs for Shop Floor
closes odoo/documentation#7500

X-original-commit: 71a9b4efac
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2024-01-26 07:30:48 +00:00
Donatienne (dopi)
b84e81d3a1 [IMP] elearning: set prerequisite courses
taskid-3433600

closes odoo/documentation#7542

X-original-commit: 2d4a3cc883
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Donatienne Pirlot (dopi) <dopi@odoo.com>
2024-01-25 14:56:28 +00:00
nni-odoo
4f098945d7 [ADD] localizations: indonesia qris
Adding QRIS documentation from the following PR https://github.com/odoo/odoo/pull/146926

closes odoo/documentation#7477

Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2024-01-25 13:11:23 +00:00
“Audrey
86fac322d3 [IMP] payment_providers: payment methods + restructure doc page
task-3570280

closes odoo/documentation#7527

X-original-commit: 67894e33f6
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2024-01-25 05:49:20 +00:00
Julien Alardot (jual)
958fa599e1 [FIX] reference/user_interface: filter element name is mandatory
The filter element attribute 'name' is now required since
odoo/odoo/commit/4ddc3231

closes odoo/documentation#7523

X-original-commit: cbe72a69bb
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Julien Alardot (jual) <jual@odoo.com>
2024-01-24 10:52:51 +00:00
“Audrey
0604fb56f9 [IMP] Studio: new report editor
task-3553091

closes odoo/documentation#7518

X-original-commit: cf389c1c3e
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2024-01-24 09:20:37 +00:00
Loredana Perazzo
3fe09dd653 [IMP] pos: note about products loading
task-3095675

closes odoo/documentation#7509

X-original-commit: 5ec37fbb7f
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Loredana Perazzo (lrpz) <lrpz@odoo.com>
2024-01-23 16:03:41 +00:00
tiku-odoo
06eaf3a0c7 [IMP]Productivity WhatsApp Enterprise Edit
closes odoo/documentation#7502

X-original-commit: 474d0b7b94
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Timothy Kukulka (tiku) <tiku@odoo.com>
2024-01-23 14:35:31 +00:00
Antoine Vandevenne (anv)
14c0438764 [IMP] reference/user_interface: reformat and clarify views reference
In particular, the following changes are made:
- Use the `class` and `attribute` admonitions along with custom
  attributes to define classes, views' root attributes, views'
  components, and attribute values. This allows re-using the responsive
  design that was made for reference lists, and getting rid of the
  previous implementation that relied on class attributes, which were not
  intended for this usage and reduce readability while hindering further
  contributions due to a lack of flexibility (no admonitions,
  sub-attributes...)
- Use definition lists to define view types to allow for clearer and
  longer descriptions.
- Rewrite and restructure the explanations when there is a lack clarity.
- Extract duplicated content to included RST files.
- Display SVG images into dedicated admonitions.
- Fix RST and English mistakes.
- Rename `view_architecture` to `view_architectures`, as it lists all
  existing architectures and doesn't describe "the architecture of a
  view".
- Replace underscores with hyphens in image file names to improve SEO.

task-3458320

closes odoo/documentation#5237

closes odoo/documentation#7497

X-original-commit: a17eaf4c6f
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2024-01-23 10:51:24 +00:00
tiku-odoo
db3db3c727 [IMP] IoT Printer doc edits
closes odoo/documentation#7496

X-original-commit: bfe57fdbdd
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2024-01-23 10:51:20 +00:00
Donatienne (dopi)
1be6f341dd [IMP] Website: menus
Update screenshots to reflect V17

closes odoo/documentation#7400

X-original-commit: 7e45e144a6
Signed-off-by: Donatienne Pirlot (dopi) <dopi@odoo.com>
2024-01-23 10:51:14 +00:00
Loredana Perazzo
39541bb745 [ADD] POS: page to setup and use product combos
Task-3604850

closes odoo/documentation#7485

X-original-commit: 539435d14d
Signed-off-by: Loredana Perazzo (lrpz) <lrpz@odoo.com>
2024-01-23 09:08:09 +00:00
tiku-odoo
157c1e18ea [RMV]Sales: remove snyc menu line ebay connector
closes odoo/documentation#7471

X-original-commit: 9db684fe86
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Timothy Kukulka (tiku) <tiku@odoo.com>
2024-01-22 19:21:43 +00:00
nni-odoo
ab5c9feb40 [ADD] payment_providers: Xendit
Documentation for Xendit payment provider

taskid-2946329

closes odoo/documentation#7475

X-original-commit: 05637af163
Signed-off-by: Nigel Nicholas (nni) <nni@odoo.com>
2024-01-22 02:56:57 +00:00
Martin Trigaux (mat)
6c3385cf90 [I18N] *: export 16.0 translations
closes odoo/documentation#7473

X-original-commit: aecf49d6c8
Signed-off-by: Martin Trigaux (mat) <mat@odoo.com>
2024-01-21 08:58:23 +00:00
KC (ksc)
b53427ddde [IMP] subscriptions: update renewals doc
closes odoo/documentation#7433

X-original-commit: 6a7bc2d449
Signed-off-by: Kevin Scannell (ksc) <ksc@odoo.com>
2024-01-20 01:18:24 +00:00
tiku-odoo
e6dbd3d9e4 [IMP] Microsoft Azure Email Phrasing update
closes odoo/documentation#7462

X-original-commit: d902bbbc19
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Timothy Kukulka (tiku) <tiku@odoo.com>
2024-01-19 21:38:05 +00:00
tiku-odoo
646bfe2e2c [RMV]VOIP:Scrub Asterisk Docs
closes odoo/documentation#7445

X-original-commit: 055e332ef3
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Timothy Kukulka (tiku) <tiku@odoo.com>
2024-01-19 15:05:16 +00:00
Felicious
e620f27378 [ADD] inventory: least packages removal strategy
closes odoo/documentation#7417

X-original-commit: bc6c92d786
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: hojo-odoo <123424465+hojo-odoo@users.noreply.github.com>
2024-01-18 03:28:49 +00:00
Brandon Seltenrich (BRSE)
f10c8d4ad2 [IMP] barcode: update adjustments doc
closes odoo/documentation#7424

X-original-commit: a7af9a59ff
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2024-01-17 07:54:25 +00:00
Christophe Monniez
b4cab2a3db [FIX] requirements: fix sphinxcontrib versions
It seems that the latest version if sphinx contrib libs needs sphinx 5.0.

closes odoo/documentation#7413

X-original-commit: 38bd71fa13
Signed-off-by: Christophe Monniez (moc) <moc@odoo.com>
2024-01-16 19:28:39 +00:00
Ricardo Gomes Rodrigues
999c8db465 [IMP] l10n: Codabox for Belgium
Add Codabox Belgium documentation following the introduction of the
module introduced in https://github.com/odoo/enterprise/pull/47607

task-id 3592955

closes odoo/documentation#7405

X-original-commit: 4895a3b55c
Signed-off-by: Ricardo Gomes Rodrigues (rigr) <rigr@odoo.com>
2024-01-16 17:58:53 +00:00
Felicious
6ec9eb1fcc [ADD] inventory: lifo removal strategy
closes odoo/documentation#7373

X-original-commit: fd598899c2
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: hojo-odoo <123424465+hojo-odoo@users.noreply.github.com>
2024-01-16 16:40:25 +00:00
Donatienne (dopi)
baab56946f [IMP] sign: tags, signing orders, reminders, expiration dates
task-3609727

New features are available in v17:
Modify tags on signed documents.
Send automatic email reminders to people who have yet to sign a document after a set delay.
Signing order available as soon as you have more than one signer
Setting expiration dates on signature requests.

closes odoo/documentation#7275

X-original-commit: 054801995e
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Donatienne Pirlot (dopi) <dopi@odoo.com>
2024-01-16 16:40:23 +00:00
aliya
73499c595e [IMP] accounting: peppol
In 17.0 we have introduced some additional features in Peppol:
- switching between the demo mode/test mode/live
- better UI that allows fetch peppol message status, new documents, etc from the accounting dashboard
- peppol ready filter to filter customer invoices that are ready to be sent via peppol

part of:
task-3614809

closes odoo/documentation#7402

X-original-commit: 47300c10bf
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Aliya Tastemirova (alta) <alta@odoo.com>
2024-01-16 10:03:50 +00:00
“Chiara
2c1277d0f7 [IMP] accounting: internal transfers
taskid-3663508

closes odoo/documentation#7401

X-original-commit: 9223318b05
Signed-off-by: Tom Aarab (toaa) <toaa@odoo.com>
2024-01-16 10:03:49 +00:00
Felicious
fc98af5814 [ADD] inventory: closest locations removal strat
closes odoo/documentation#7367

X-original-commit: a926fbf998
Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: ksc-odoo <73958186+ksc-odoo@users.noreply.github.com>
Co-authored-by: hojo-odoo <123424465+hojo-odoo@users.noreply.github.com>
2024-01-16 03:09:35 +00:00
Olivier Dony
d0b7363de5 [IMP] conf: special case alt lang links for legal terms
Legal terms live under specific URL as their translations are not
managed in the same manner.

Layout is like this:
  /terms/enterprise.html (EN)
  /terms/i18n/enterprise_fr.html (FR)

This commit adapts the generation of alternative languages links for each
"legal terms page", so that it targets the correct i18n link, or goes
back to the canonical EN one, depending on the target language.

closes odoo/documentation#7382

closes odoo/documentation#7384

closes odoo/documentation#7387

Signed-off-by: Olivier Dony (odo) <odo@odoo.com>
2024-01-15 22:56:16 +01:00
Olivier Dony
65f1e3ce0a [CHG] legal: make Spanish partnership contract official
Removed the "not legally binding" warning, as Odoo now has official
establishments in countries when Spanish contracts are mandatory and
need to be binding. More careful reviews of the Spanish translations
will be necessary from now on.

Part-of: odoo/documentation#7387
2024-01-15 22:56:16 +01:00
Olivier Dony
a48ebe55bf [IMP] legal: update spanish Enterprise contract to v10a
Including spellchecking and proper emphasis of some important terms, and
the disambiguation of "Extra Covered Modules" and "Bug"

Removed the "not legally binding" warning, as Odoo now has official
establishments in countries when Spanish contracts are mandatory and
need to be binding. More careful reviews of the Spanish translations
will be necessary from now on.

Part-of: odoo/documentation#7387
2024-01-15 22:56:16 +01:00
Jonathan Castillo (jcs)
3d28850a40 [FIX] redirects: redirection loop on install.rst
closes odoo/documentation#7392

X-original-commit: f4bad01680
Signed-off-by: Jonathan Castillo (jcs) <jcs@odoo.com>
2024-01-15 13:04:21 +00:00
Donatienne (dopi)
83a68e4b9b [MOV] geo ip installation: move page to install
Page moved from Websites to Install section

taskid-3512515

X-original-commit: a9004e844f
Part-of: odoo/documentation#7392
2024-01-15 13:04:21 +00:00
Rémy Voet (ryv)
be60243eff [IMP] orm: update changelog for the new flush strategy
closes odoo/documentation#7194

Related: odoo/upgrade#5469
Related: odoo/odoo#144747
Related: odoo/enterprise#53380
Signed-off-by: Rémy Voet (ryv) <ryv@odoo.com>
2024-01-15 13:04:08 +00:00
288 changed files with 19805 additions and 9465 deletions

16
conf.py
View File

@@ -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 ""}' \

View File

@@ -47,3 +47,4 @@ functionalities, including functional support, upgrades, and hosting. `Pricing
install/deploy
install/cdn
install/email_gateway
install/geo_ip

View File

@@ -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:

View File

@@ -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`

View File

@@ -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.

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@@ -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 countrys 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 countrys 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**
-

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -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*.

View File

@@ -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
====================

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -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`

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -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**.

View File

@@ -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.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -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`

View 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`

View File

@@ -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/>`_

View File

@@ -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.

View File

@@ -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 its 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`.

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -7,6 +7,5 @@ VoIP (Voice over Internet Protocol)
.. toctree::
:titlesonly:
voip/asterisk
voip/onsip
voip/axivox

View File

@@ -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 xs 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.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

View File

@@ -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.

View File

@@ -10,5 +10,6 @@ Human resources
hr/employees
hr/fleet
hr/payroll
hr/time_off
hr/recruitment
hr/referrals

View File

@@ -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
--------------------

View File

@@ -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
-----------------

View 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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -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 dont 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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

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