Compare commits
18 Commits
18.0
...
15.0-js-co
Author | SHA1 | Date | |
---|---|---|---|
![]() |
1fca236842 | ||
![]() |
a8c58815f3 | ||
![]() |
a4aa310b85 | ||
![]() |
4331177bb6 | ||
![]() |
debe8cb393 | ||
![]() |
3a2bbc028b | ||
![]() |
b28e34b357 | ||
![]() |
c107d76086 | ||
![]() |
b118669860 | ||
![]() |
3218d318fe | ||
![]() |
bb3996b936 | ||
![]() |
b3845ae0d8 | ||
![]() |
85410bd8dc | ||
![]() |
248135a48e | ||
![]() |
6833379ad3 | ||
![]() |
00046cb690 | ||
![]() |
ac40d2008c | ||
![]() |
5cef86f181 |
2
Makefile
@ -24,7 +24,7 @@ SOURCE_DIR = content
|
||||
|
||||
HTML_BUILD_DIR = $(BUILD_DIR)/html
|
||||
ifdef VERSIONS
|
||||
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/master
|
||||
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/15.0
|
||||
endif
|
||||
ifneq ($(CURRENT_LANG),en)
|
||||
HTML_BUILD_DIR := $(HTML_BUILD_DIR)/$(CURRENT_LANG)
|
||||
|
14
README.md
@ -4,11 +4,11 @@
|
||||
|
||||
### Requirements
|
||||
|
||||
- [Git](https://www.odoo.com/documentation/master/contributing/documentation.html#install-git)
|
||||
- [Python 3.6, 3.7, or 3.8](https://www.odoo.com/documentation/master/contributing/documentation.html#python)
|
||||
- Python dependencies listed in the file [`requirements.txt`](https://github.com/odoo/documentation/tree/master/requirements.txt).
|
||||
- [Make](https://www.odoo.com/documentation/master/contributing/documentation.html#make)
|
||||
- A local copy of the [odoo/odoo repository in master](https://github.com/odoo/odoo/tree/master) (Optional)
|
||||
- [Git](https://www.odoo.com/documentation/15.0/contributing/documentation.html#install-git)
|
||||
- [Python 3.6, 3.7, or 3.8](https://www.odoo.com/documentation/15.0/contributing/documentation.html#python)
|
||||
- Python dependencies listed in the file [`requirements.txt`](https://github.com/odoo/documentation/tree/15.0/requirements.txt).
|
||||
- [Make](https://www.odoo.com/documentation/15.0/contributing/documentation.html#make)
|
||||
- A local copy of the [odoo/odoo repository in 15.0](https://github.com/odoo/odoo/tree/15.0) (Optional)
|
||||
|
||||
### Instructions
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
|
||||
2. Open the file `documentation/_build/html/index.html` in your web browser to display the render.
|
||||
|
||||
3. See [this guide](https://www.odoo.com/documentation/master/contributing/documentation.html#preview-your-changes)
|
||||
3. See [this guide](https://www.odoo.com/documentation/15.0/contributing/documentation.html#preview-your-changes)
|
||||
for more detailed instructions.
|
||||
|
||||
Optional: to fully build the developer documentation with inline docstrings for documented Python
|
||||
@ -34,7 +34,7 @@ be shown.
|
||||
## Contribute to the documentation
|
||||
|
||||
For contributions to the content of the documentation, please refer to the
|
||||
[Introduction Guide](https://www.odoo.com/documentation/master/contributing/documentation.html).
|
||||
[Introduction Guide](https://www.odoo.com/documentation/15.0/contributing/documentation.html).
|
||||
|
||||
To **report a content issue**, **request new content** or **ask a question**, use the
|
||||
[repository's issue tracker](https://github.com/odoo/documentation-user/issues) as usual.
|
||||
|
13
conf.py
@ -19,7 +19,7 @@ copyright = 'Odoo S.A.'
|
||||
# `version` if the version info for the project being documented, acts as replacement for |version|,
|
||||
# also used in various other places throughout the built documents.
|
||||
# `release` is the full version, including alpha/beta/rc tags. Acts as replacement for |release|.
|
||||
version = release = 'master'
|
||||
version = release = '15.0'
|
||||
|
||||
# The minimal Sphinx version required to build the documentation.
|
||||
needs_sphinx = '3.0.0'
|
||||
@ -70,19 +70,20 @@ if not odoo_dir.is_dir():
|
||||
f"Could not find Odoo sources directory at {odoo_dir.absolute()}.\n"
|
||||
f"The 'Developer' documentation will be built but autodoc directives will be skipped.\n"
|
||||
f"In order to fully build the 'Developer' documentation, clone the repository with "
|
||||
f"`git clone https://github.com/odoo/odoo` or create a symbolink link."
|
||||
f"`git clone https://github.com/odoo/odoo` or create a symbolic link."
|
||||
)
|
||||
else:
|
||||
sys.path.insert(0, str(odoo_dir.absolute()))
|
||||
from odoo import release as odoo_release # Don't collide with Sphinx's 'release' config option
|
||||
odoo_version = odoo_release.version if 'alpha' not in odoo_release.version else 'master'
|
||||
odoo_version = odoo_release.version.replace('~', '-') \
|
||||
if 'alpha' not in odoo_release.version else 'master'
|
||||
if release != odoo_version:
|
||||
_logger.warning(
|
||||
f"Found Odoo sources directory but with version '{odoo_version}' incompatible with "
|
||||
f"documentation version '{version}'.\n"
|
||||
f"The 'Developer' documentation will be built but autodoc directives will be skipped.\n"
|
||||
f"In order to fully build the 'Developer' documentation, checkout the matching branch"
|
||||
f" with `cd odoo && git checkout {version}`."
|
||||
f"In order to fully build the 'Developer' documentation, checkout the matching branch "
|
||||
f"with `cd odoo && git checkout {version}`."
|
||||
)
|
||||
else:
|
||||
_logger.info(f"Found Odoo sources directory matching documentation version {release}.")
|
||||
@ -290,7 +291,7 @@ def _generate_alternate_urls(app, pagename, templatename, context, doctree):
|
||||
for _alternate_version in sorted(_alternate_versions, reverse=True)
|
||||
if _alternate_version != version and (
|
||||
_alternate_version != 'master' or pagename.startswith('developer')
|
||||
)
|
||||
) and not _alternate_version.startswith('saas')
|
||||
]
|
||||
|
||||
def _localize():
|
||||
|
@ -128,7 +128,7 @@ There are two possibilities:
|
||||
#. Via the interface of our `website form <https://upgrade.odoo.com>`_
|
||||
#. | For technically-advanced users and partners, via the following command line (to be used on the
|
||||
machine where your database is hosted):
|
||||
| ``python <(curl -s beta.upgrade.odoo.com/upgrade) test -d <your db name> -t 14.0``
|
||||
| ``python <(curl -s https://upgrade.odoo.com/upgrade) test -d <your db name> -t 14.0``
|
||||
|
||||
What does it do?
|
||||
~~~~~~~~~~~~~~~~
|
||||
@ -190,8 +190,8 @@ Test guidance
|
||||
|
||||
Every business and organization has its own operational needs and will have to test its specific
|
||||
Odoo instance respectively. However, we recommend you look at `the test scenario
|
||||
<https://drive.google.com/open?id=1Lm4JqbsHBirB1wMi14UChoz_YHLjx5ec>`_ we created, a high-level idea
|
||||
of what you should test and look out for.
|
||||
<https://docs.google.com/document/d/1ypNs7JKPOsjNbKpdiKFH7Al6g6whZ9jr7f7duAQ5E1w/>`_ we created, a
|
||||
high-level idea of what you should test and look out for.
|
||||
|
||||
.. todo:: change link "test scenario" once the related doc is published
|
||||
|
||||
|
@ -20,37 +20,37 @@ This matrix shows the support status of every version.
|
||||
|
||||
**Major releases are in bold type.**
|
||||
|
||||
+--------------------+-------------+----------+--------------+----------------+----------------------------------------------+
|
||||
| | Odoo Online | Odoo.sh | On-Premise | Release date | |
|
||||
+====================+=============+==========+==============+================+==============================================+
|
||||
| **Odoo 14.0** | |green| | |green| | |green| | October 2020 | |
|
||||
+--------------------+-------------+----------+--------------+----------------+----------------------------------------------+
|
||||
| Odoo 13.saas~4 | |green| | N/A | N/A | August 2019 | |
|
||||
+--------------------+-------------+----------+--------------+----------------+----------------------------------------------+
|
||||
| **Odoo 13.0** | |green| | |green| | |green| | October 2019 | |
|
||||
+--------------------+-------------+----------+--------------+----------------+----------------------------------------------+
|
||||
| Odoo 12.saas~3 | |green| | N/A | N/A | August 2019 | |
|
||||
+--------------------+-------------+----------+--------------+----------------+----------------------------------------------+
|
||||
| **Odoo 12.0** | |green| | |green| | |green| | October 2018 | *End-of-support is planned for October 2021* |
|
||||
+--------------------+-------------+----------+--------------+----------------+----------------------------------------------+
|
||||
| Odoo 11.saas~3 | |orange| | N/A | N/A | April 2018 | |
|
||||
+--------------------+-------------+----------+--------------+----------------+----------------------------------------------+
|
||||
| **Odoo 11.0** | |orange| | |orange| | |red| | October 2017 | |
|
||||
+--------------------+-------------+----------+--------------+----------------+----------------------------------------------+
|
||||
| Odoo 10.saas~15 | |orange| | N/A | N/A | March 2017 | |
|
||||
+--------------------+-------------+----------+--------------+----------------+----------------------------------------------+
|
||||
| Odoo 10.saas~14 | |orange| | N/A | N/A | January 2017 | |
|
||||
+--------------------+-------------+----------+--------------+----------------+----------------------------------------------+
|
||||
| **Odoo 10.0** | |orange| | |orange| | |red| | October 2016 | |
|
||||
+--------------------+-------------+----------+--------------+----------------+----------------------------------------------+
|
||||
| Odoo 9.saas~11 | |orange| | N/A | N/A | May 2016 | |
|
||||
+--------------------+-------------+----------+--------------+----------------+----------------------------------------------+
|
||||
| **Odoo 9.0** | |orange| | N/A | |red| | October 2015 | |
|
||||
+--------------------+-------------+----------+--------------+----------------+----------------------------------------------+
|
||||
| Odoo 8.saas~6 | |orange| | N/A | N/A | February 2015 | |
|
||||
+--------------------+-------------+----------+--------------+----------------+----------------------------------------------+
|
||||
| **Odoo 8.0** | |orange| | N/A | |red| | September 2014 | |
|
||||
+--------------------+-------------+----------+--------------+----------------+----------------------------------------------+
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| | Odoo Online | Odoo.sh | On-Premise | Release date | End of support |
|
||||
+=================+=============+==========+=============+================+========================+
|
||||
| **Odoo 15.0** | |green| | |green| | |green| | October 2021 | October 2024 (planned) |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| **Odoo 14.0** | |green| | |green| | |green| | October 2020 | October 2023 (planned) |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| **Odoo 13.0** | |green| | |green| | |green| | October 2019 | October 2022 (planned) |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| Odoo 12.saas~3 | |orange| | N/A | N/A | August 2019 | |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| **Odoo 12.0** | |orange| | |orange| | |red| | October 2018 | October 2021 |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| Odoo 11.saas~3 | |orange| | N/A | N/A | April 2018 | |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| **Odoo 11.0** | |orange| | |orange| | |red| | October 2017 | October 2020 |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| Odoo 10.saas~15 | |orange| | N/A | N/A | March 2017 | |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| Odoo 10.saas~14 | |orange| | N/A | N/A | January 2017 | |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| **Odoo 10.0** | |orange| | |orange| | |red| | October 2016 | October 2019 |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| Odoo 9.saas~11 | |orange| | N/A | N/A | May 2016 | |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| **Odoo 9.0** | |orange| | N/A | |red| | October 2015 | October 2018 |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| Odoo 8.saas~6 | |orange| | N/A | N/A | February 2015 | |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
| **Odoo 8.0** | |orange| | N/A | |red| | September 2014 | October 2017 |
|
||||
+-----------------+-------------+----------+-------------+----------------+------------------------+
|
||||
|
||||
|
||||
.. note::
|
||||
@ -66,6 +66,9 @@ This matrix shows the support status of every version.
|
||||
🏁 Future version, not released yet
|
||||
|
||||
|
||||
.. This is an awful way to display colored circles but "Large Green Circle Emoji" was only released
|
||||
in 2019 (see https://unicode-table.com/en/1F7E2/). Let's wait a few more years...
|
||||
|
||||
.. |green| image:: data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMzIuMTkgMjMyLjE5Ij48Y2lyY2xlIGN4PSIxMTYuMDkiIGN5PSIxMTYuMDkiIHI9IjExNi4wOSIgc3R5bGU9ImZpbGw6IzAwYTcwMCIvPjwvc3ZnPg==
|
||||
:width: 15
|
||||
|
||||
|
@ -19,7 +19,7 @@ requires the next modules:
|
||||
contains the default setup for: chart of accounts, taxes,
|
||||
retentions, identification document types
|
||||
#. **l10n_co_edi**: This module includes all the extra fields that are
|
||||
required for the Integration with Carvajal T&S and generate the
|
||||
required for the Integration with Carvajal and generate the
|
||||
electronic invoice, based on the DIAN legal requirements.
|
||||
|
||||
|
||||
@ -43,12 +43,12 @@ filter and search for "Colombia". Then click on *Install* for the first two modu
|
||||
:align: center
|
||||
|
||||
|
||||
Configure credentials for Carvajal T&S web service
|
||||
--------------------------------------------------
|
||||
Configure credentials for Carvajal web service
|
||||
----------------------------------------------
|
||||
|
||||
Once that the modules are installed, in order to be able to connect
|
||||
with Carvajal T&S Web Service, it's necessary to configure the user
|
||||
and credentials, this information will be provided by Carvajal T&S.
|
||||
with Carvajal Web Service, it's necessary to configure the user
|
||||
and credentials, this information will be provided by Carvajal.
|
||||
|
||||
Go to :menuselection:`Accounting --> Configuration --> Settings` and
|
||||
look for the *Colombian Electronic Invoice* section.
|
||||
@ -56,12 +56,20 @@ look for the *Colombian Electronic Invoice* section.
|
||||
.. image:: media/colombia03.png
|
||||
:align: center
|
||||
|
||||
Using the Testing mode it is possible to connect with a Carvajal T&S
|
||||
Using the Testing mode it is possible to connect with a Carvajal
|
||||
testing environment. This allows users to test the complete workflow
|
||||
and integration with the CEN Financiero portal, which is accessible
|
||||
here: https://cenfinancierolab.cen.biz
|
||||
here:
|
||||
|
||||
Once that Odoo and Carvajal T&S is fully configured and ready for
|
||||
CTS (Carvajal T&S)
|
||||
https://cenflab.cen.biz/site/
|
||||
|
||||
CSC (Carvajal Servicios de Comunicación)
|
||||
https://web-stage.facturacarvajal.com/
|
||||
|
||||
CSC is the default for new databases.
|
||||
|
||||
Once that Odoo and Carvajal are fully configured and ready for
|
||||
production the testing environment can be disabled.
|
||||
|
||||
|
||||
|
@ -18,7 +18,7 @@ requiere los siguientes Módulos:
|
||||
- Tipos de Documentos de Identificación
|
||||
|
||||
#. **l10n_co_edi**: Este módulo incluye todos los campos adicionales que son
|
||||
requeridos para la Integración entre Carvajal T&S y la generación de la
|
||||
requeridos para la Integración entre Carvajal y la generación de la
|
||||
Factura Electrónica, basado en los requisitos legales de la DIAN.
|
||||
|
||||
|
||||
@ -42,12 +42,12 @@ Instalar a los primeros dos módulos:
|
||||
:align: center
|
||||
|
||||
|
||||
Configuración de las credenciales del Servicio Web de Carvajal T&S
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Configuración de las credenciales del Servicio Web de Carvajal
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
| Una vez que los módulos están instalados, para poderte conectar con el
|
||||
Servicio Web de Carvajal T&S, es necesario configurar el Usuario y las
|
||||
Credenciales. Esta información será provista por Carvajal T&S.
|
||||
Servicio Web de Carvajal, es necesario configurar el Usuario y las
|
||||
Credenciales. Esta información será provista por Carvajal.
|
||||
| Ve a :menuselection:`Facturación --> Configuración --> Configuración` y busca la sección
|
||||
**Facturación Electrónica Colombiana**
|
||||
|
||||
@ -55,14 +55,21 @@ Configuración de las credenciales del Servicio Web de Carvajal T&S
|
||||
:align: center
|
||||
|
||||
La funcionalidad de pruebas le permite conectarse e interactuar con el
|
||||
ambiente piloto de Carvajal T&S, esto permite a los usuarios probar el
|
||||
ambiente piloto de Carvajal, esto permite a los usuarios probar el
|
||||
flujo completo y la integración con el Portal Financiero CEN, al cual
|
||||
se accede a través de la siguiente liga: `Cenfinanciero <https://cenfinancierolab.cen.biz>`_.
|
||||
se accede a través de la siguiente liga:
|
||||
|
||||
CTS (Carvajal T&S)
|
||||
https://cenflab.cen.biz/site/
|
||||
|
||||
CSC (Carvajal Servicios de Comunicación)
|
||||
https://web-stage.facturacarvajal.com/
|
||||
|
||||
CSC es el predeterminado para nuevas bases de datos.
|
||||
|
||||
Una vez que el ambiente de producción está listo en Odoo y en Carvajal
|
||||
T&S el ambiente de pruebas debe ser deshabilitado para poder enviar la
|
||||
información al ambiente de producción de Carvajal, para el cual es
|
||||
utilizada la siguiente URL: `Cenfinanciero <https://cenfinancierolab.cen.biz>`_.
|
||||
el ambiente de pruebas debe ser deshabilitado para poder enviar la
|
||||
información al ambiente de producción de Carvajal.
|
||||
|
||||
|
||||
Configuración de Información para PDF
|
||||
|
@ -100,5 +100,5 @@ The synchronization is a two-way process, meaning that events are reconciled in
|
||||
to manage a specific instance of Microsoft cloud services for your internal and external users.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../../../sales/crm/optimize/outlook_extension`
|
||||
- :doc:`../../../productivity/mail_plugins/outlook`
|
||||
- :doc:`../google/google_calendar_credentials`
|
@ -1,19 +1,25 @@
|
||||
:show-content:
|
||||
|
||||
================================================
|
||||
Payment Acquirers (Credit Cards, Online Payment)
|
||||
================================================
|
||||
=================================================
|
||||
Payment acquirers (credit cards, online payments)
|
||||
=================================================
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
payment_acquirers/wire_transfer
|
||||
payment_acquirers/adyen
|
||||
payment_acquirers/alipay
|
||||
payment_acquirers/authorize
|
||||
payment_acquirers/buckaroo
|
||||
payment_acquirers/mollie
|
||||
payment_acquirers/ogone
|
||||
payment_acquirers/paypal
|
||||
payment_acquirers/sips
|
||||
payment_acquirers/stripe
|
||||
|
||||
Odoo embeds several **payment acquirers** that allow your customers to pay on their *Customer
|
||||
Portals* or your *eCommerce website*. They can pay Sales Orders, invoices, or subscriptions with
|
||||
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**.
|
||||
|
||||
Offering several payment methods increases the chances of getting paid in time, or even immediately,
|
||||
@ -28,13 +34,13 @@ trust.
|
||||
Odoo apps delegate the handling of sensitive information to the certified payment acquirer so
|
||||
that you don't ever have to worry about PCI compliance.
|
||||
|
||||
This means that no sensitive information (such as credit card numbers or credentials) 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 acquirers' systems.
|
||||
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 acquirers' systems.
|
||||
|
||||
.. _payment_acquirers/acquirers:
|
||||
|
||||
Payment Acquirers
|
||||
Payment acquirers
|
||||
=================
|
||||
|
||||
From an accounting perspective, we can distinguish two types of payment acquirers: the payments that
|
||||
@ -43,7 +49,7 @@ acquirers that are third-party services and require you to follow another accoun
|
||||
|
||||
.. _payment_acquirers/bank_payments:
|
||||
|
||||
Bank Payments
|
||||
Bank payments
|
||||
-------------
|
||||
|
||||
- | :doc:`Wire Transfer <payment_acquirers/wire_transfer>`
|
||||
@ -51,43 +57,58 @@ Bank Payments
|
||||
approve the payment manually once you have received it on your bank account.
|
||||
- | SEPA Direct Debit
|
||||
| Your customers can sign a SEPA Direct Debit mandate online and get their bank account charged
|
||||
directly. :doc:`Click here <../finance/accounting/receivables/customer_payments/batch_sdd>` for more
|
||||
information about this payment method.
|
||||
directly. :doc:`Click here <../finance/accounting/receivables/customer_payments/batch_sdd>` for
|
||||
more information about this payment method.
|
||||
|
||||
.. _payment_acquirers/online_providers:
|
||||
|
||||
Online Payment Providers
|
||||
Online payment providers
|
||||
------------------------
|
||||
|
||||
+-------------------------------------+----------------------+-----------+------------+-----------------+
|
||||
| | Redirection to | Payment | Save Cards | Capture Amount |
|
||||
| | the acquirer website | from Odoo | | Manually |
|
||||
+=====================================+======================+===========+============+=================+
|
||||
| Adyen | ✔ | | | |
|
||||
+-------------------------------------+----------------------+-----------+------------+-----------------+
|
||||
| Alipay | ✔ | | | |
|
||||
+-------------------------------------+----------------------+-----------+------------+-----------------+
|
||||
| :doc:`Authorize.Net | ✔ | ✔ | ✔ | ✔ |
|
||||
| <payment_acquirers/authorize>` | | | | |
|
||||
+-------------------------------------+----------------------+-----------+------------+-----------------+
|
||||
| Buckaroo | ✔ | | | |
|
||||
+-------------------------------------+----------------------+-----------+------------+-----------------+
|
||||
| Ingenico | ✔ | ✔ | ✔ | |
|
||||
+-------------------------------------+----------------------+-----------+------------+-----------------+
|
||||
| :doc:`PayPal | ✔ | | | |
|
||||
| <payment_acquirers/paypal>` | | | | |
|
||||
+-------------------------------------+----------------------+-----------+------------+-----------------+
|
||||
| PayUMoney | ✔ | | | |
|
||||
+-------------------------------------+----------------------+-----------+------------+-----------------+
|
||||
| SIPS | ✔ | | | |
|
||||
+-------------------------------------+----------------------+-----------+------------+-----------------+
|
||||
| Stripe | ✔ | ✔ | ✔ | |
|
||||
+-------------------------------------+----------------------+-----------+------------+-----------------+
|
||||
+-------------------------------+----------------------+------------+-----------------+-----------+
|
||||
| | Payment flow | Save cards | Capture amount | Refund |
|
||||
| | | | manually | from Odoo |
|
||||
+===============================+======================+============+=================+===========+
|
||||
| :doc:`Adyen | Payment from Odoo | |V| | | |V| |
|
||||
| <payment_acquirers/adyen>` | | | | |
|
||||
+-------------------------------+----------------------+------------+-----------------+-----------+
|
||||
| :doc:`Alipay | Redirection to the | | | |
|
||||
| <payment_acquirers/alipay>` | acquirer website | | | |
|
||||
+-------------------------------+----------------------+------------+-----------------+-----------+
|
||||
| :doc:`Authorize.Net | Payment from Odoo | |V| | |V| | |
|
||||
| <payment_acquirers/authorize>`| | | | |
|
||||
+-------------------------------+----------------------+------------+-----------------+-----------+
|
||||
| :doc:`Buckaroo | Redirection to the | | | |
|
||||
| <payment_acquirers/buckaroo>` | acquirer website | | | |
|
||||
+-------------------------------+----------------------+------------+-----------------+-----------+
|
||||
| :doc:`Mollie | Redirection to the | | | |
|
||||
| <payment_acquirers/mollie>` | acquirer website | | | |
|
||||
+-------------------------------+----------------------+------------+-----------------+-----------+
|
||||
| :doc:`Ogone | Redirection to the | |V| | | |
|
||||
| <payment_acquirers/ogone>` | acquirer website | | | |
|
||||
+-------------------------------+----------------------+------------+-----------------+-----------+
|
||||
| :doc:`PayPal | Redirection to the | | | |
|
||||
| <payment_acquirers/paypal>` | acquirer website | | | |
|
||||
+-------------------------------+----------------------+------------+-----------------+-----------+
|
||||
| PayU Latam | Redirection to the | | | |
|
||||
| | acquirer website | | | |
|
||||
+-------------------------------+----------------------+------------+-----------------+-----------+
|
||||
| PayUMoney | Redirection to the | | | |
|
||||
| | acquirer website | | | |
|
||||
+-------------------------------+----------------------+------------+-----------------+-----------+
|
||||
| :doc:`SIPS | Redirection to the | | | |
|
||||
| <payment_acquirers/sips>` | acquirer website | | | |
|
||||
+-------------------------------+----------------------+------------+-----------------+-----------+
|
||||
| :doc:`Stripe | Redirection to the | |V| | | |
|
||||
| <payment_acquirers/stripe>` | acquirer website | | | |
|
||||
+-------------------------------+----------------------+------------+-----------------+-----------+
|
||||
|
||||
.. |V| replace:: ✔
|
||||
|
||||
.. note::
|
||||
Some of these Online Payment Providers can also be added as :doc:`Bank Accounts
|
||||
<../finance/accounting/bank/setup/bank_accounts>`, but this is **not** the same process as adding them
|
||||
as Payment Acquirers. Payment Acquirers allow customers to pay online, and Bank Accounts are
|
||||
Some of these online payment providers can also be added as :doc:`bank accounts
|
||||
<../finance/accounting/bank/setup/bank_accounts>`, but this is **not** the same process as adding
|
||||
them as payment acquirers. Payment acquirers 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.
|
||||
|
||||
@ -96,15 +117,15 @@ Online Payment Providers
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Some of the features described in this section are available only with some Payment Acquirers. Refer
|
||||
Some of the features described in this section are available only with some payment acquirers. Refer
|
||||
to :ref:`the table above <payment_acquirers/online_providers>` for more details.
|
||||
|
||||
.. _payment_acquirers/add_new:
|
||||
|
||||
Add a new Payment Acquirer
|
||||
Add a new payment acquirer
|
||||
--------------------------
|
||||
|
||||
To add a new Payment acquirer and make it available to your customers, go to
|
||||
To add a new payment acquirer and make it available to your customers, go to
|
||||
:menuselection:`Accounting --> Configuration --> Payment Acquirers`, look for your payment acquirer,
|
||||
install the related module, and activate it. To do so, open the payment acquirer and change its
|
||||
state from *Disabled* to *Enabled*.
|
||||
@ -124,11 +145,11 @@ state from *Disabled* to *Enabled*.
|
||||
Credentials tab
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
If not done yet, go to the **Online Payment Provider**'s 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 Acquirer and get the confirmation of the *payment authentication*.
|
||||
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 acquirer.
|
||||
|
||||
The form in this section is specific to the Payment Acquirer you are configuring. Please refer to
|
||||
The form in this section is specific to the payment acquirer you are configuring. Please refer to
|
||||
the related documentation for more information.
|
||||
|
||||
.. _payment_acquirers/configuration_tab:
|
||||
@ -136,66 +157,66 @@ the related documentation for more information.
|
||||
Configuration tab
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
You can change the Payment Acquirer front-end appearance by modifying its name under the **Displayed
|
||||
as** field and which credit card icons to display under the **Supported Payment Icons** field.
|
||||
You can change the payment acquirer's front-end appearance by modifying its name under the
|
||||
**Displayed as** field and which credit card icons to display under the **Supported Payment Icons**
|
||||
field.
|
||||
|
||||
.. _payment_acquirers/save_cards:
|
||||
|
||||
Save and reuse Credit Cards
|
||||
Save and reuse credit cards
|
||||
***************************
|
||||
|
||||
With the **Save Cards** feature, Odoo can store **Payment Tokens** in your database, which can be
|
||||
used for subsequent payments, without having to reenter the payment details. This is particularly
|
||||
useful for subscriptions' recurring payments.
|
||||
useful for the eCommerce conversion rate and subscriptions' recurring payments.
|
||||
|
||||
.. _payment_acquirers/capture_amount:
|
||||
|
||||
Place a hold on a card
|
||||
**********************
|
||||
|
||||
If the **Capture Amount Manually** field is enabled, the funds are reserved for a few days on the
|
||||
customer's card, but not charged yet. You must then go to the related Sales Order and manually
|
||||
If you wish to manually capture an amount instead of having an immediate capture, you can enable the
|
||||
manual capture. Capturing payments manually has many advantages:
|
||||
|
||||
- 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 credit card fees in the event of overselling or cancelled orders.
|
||||
|
||||
The **Capture Amount Manually** field is under the **Configuration** tab. If enabled, the funds are
|
||||
reserved for a few days on the customer's card, but not charged yet. Please refer to your acquirer's
|
||||
documentation for the exact reservation duration.
|
||||
|
||||
.. image:: payment_acquirers/media/capture_manually.png
|
||||
:align: center
|
||||
:alt: Configuration tab on Odoo
|
||||
|
||||
To capture the payment, you must then go to the related sales order or invoice and manually
|
||||
*capture* the funds before its automatic cancellation, or *void the transaction* to unlock the funds
|
||||
from the customer's card.
|
||||
|
||||
.. _payment_acquirers/payment_flow:
|
||||
|
||||
Payment Flow
|
||||
************
|
||||
|
||||
Choose in the **Payment Flow** field if to redirect the user to the payment acquirer's portal to
|
||||
authenticate the payment, or if to stay on the current page and authenticate the payment from Odoo.
|
||||
.. image:: payment_acquirers/media/capture.png
|
||||
:align: center
|
||||
:alt: Hold the credit card payment until you capture or revoke it on Odoo
|
||||
|
||||
.. note::
|
||||
Some features are available only if you select *Redirection to the acquirer website*.
|
||||
Odoo may not yet support the manual capture for all acquirers, but some acquirers allow managing
|
||||
the capture from their interfaces.
|
||||
|
||||
.. _payment_acquirers/countries:
|
||||
|
||||
Countries
|
||||
*********
|
||||
|
||||
Restrict the use of the Payment Acquirer to a selection of countries. Leave this field blank to make
|
||||
the Payment Acquirer available to all countries.
|
||||
Restrict the use of the payment acquirer to a selection of countries. Leave this field blank to make
|
||||
the payment acquirer available to all countries.
|
||||
|
||||
.. _payment_acquirers/journal:
|
||||
|
||||
Payment Journal
|
||||
Payment journal
|
||||
***************
|
||||
|
||||
The **Payment Journal** selected for your Payment Acquirer must be a *Bank* journal.
|
||||
|
||||
.. important::
|
||||
In many cases, Odoo automatically creates a new **Journal** and a new **Account** when you
|
||||
activate a new Payment Acquirer. Both of them are preset to work out-of-the-box, but we strongly
|
||||
recommend you to make sure these fields are correctly set according to your accounting needs, and
|
||||
adapt them if necessary.
|
||||
|
||||
.. _payment_acquirers/messages:
|
||||
|
||||
Messages tab
|
||||
~~~~~~~~~~~~
|
||||
|
||||
Change here the messages displayed by Odoo after a payment's confirmation or failure.
|
||||
The **Payment journal** selected for your payment acquirer must be a *Bank* journal.
|
||||
|
||||
.. _payment_acquirers/accounting:
|
||||
|
||||
@ -207,33 +228,30 @@ reconciliation workflows. However, payments recorded with **Online Payment Provi
|
||||
to consider how you want to record your payments' journal entries. We recommend you to ask your
|
||||
accountant for advice.
|
||||
|
||||
Odoo default method is to record the payments on a *Current Assets Account*, on a dedicated *Bank
|
||||
Journal*, once the *Payment Authentication* is confirmed. At some point, you transfer the funds from
|
||||
the *Payment Acquirer* to your *Bank Account*.
|
||||
You need to select a *Payment Journal* on your acquirer configuration to record the payments,
|
||||
on a **Outstanding Account**. The Journal's **type** must be *Bank Journal*.
|
||||
|
||||
Here are the requirements for this to work:
|
||||
You can use a single journal for many payment methods. And for each payment method, you can either:
|
||||
|
||||
- Bank Journal
|
||||
- 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.
|
||||
|
||||
- The Journal's **type** must be *Bank Journal*.
|
||||
- Select the right **Default Debit Account** and **Default Credit Account**.
|
||||
- | Under the *Advanced Settings* tab, make sure that **Posting** is set as *Post At Payment
|
||||
Validation*.
|
||||
| This implies that the Journal Entry is recorded directly when your Odoo database receives the
|
||||
confirmation of the *Payment Authentication* from the Online Payment Provider.
|
||||
.. image:: payment_acquirers/media/bank_journal.png
|
||||
:align: center
|
||||
:alt: A bank journal in the "Incoming Payments Tab".
|
||||
|
||||
- Current Asset Account
|
||||
|
||||
- The Account's **type** is *Current Assets*
|
||||
- The Account must **Allow Reconciliation**
|
||||
|
||||
.. note::
|
||||
In many cases, Odoo automatically creates a new **Journal** and a new **Current Asset Account**
|
||||
when you activate a new Payment Acquirer. You can modify them if necessary.
|
||||
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.
|
||||
|
||||
.. seealso::
|
||||
|
||||
- :doc:`../finance/accounting/receivables/customer_payments/recording`
|
||||
- :doc:`payment_acquirers/wire_transfer`
|
||||
- :doc:`payment_acquirers/adyen`
|
||||
- :doc:`payment_acquirers/alipay`
|
||||
- :doc:`payment_acquirers/authorize`
|
||||
- :doc:`payment_acquirers/paypal`
|
||||
- :doc:`payment_acquirers/buckaroo`
|
||||
- :doc:`payment_acquirers/mollie`
|
||||
- :doc:`payment_acquirers/ogone`
|
||||
- :doc:`payment_acquirers/paypal`
|
||||
- :doc:`payment_acquirers/sips`
|
||||
- :doc:`payment_acquirers/stripe`
|
||||
- :doc:`../websites/ecommerce/shopper_experience/payment_acquirer`
|
||||
|
103
content/applications/general/payment_acquirers/adyen.rst
Normal file
@ -0,0 +1,103 @@
|
||||
=====
|
||||
Adyen
|
||||
=====
|
||||
|
||||
`Adyen <https://www.adyen.com/>`_ is a Dutch-based company that offers several online payment
|
||||
possibilities.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
.. seealso::
|
||||
- :ref:`payment_acquirers/add_new`
|
||||
|
||||
Credentials tab
|
||||
---------------
|
||||
|
||||
Odoo needs your **API Credentials** to connect with your Adyen account, which comprise:
|
||||
|
||||
- **Merchant Account**: The code of the merchant account to use with Adyen.
|
||||
- :ref:`API Key <adyen/api_and_client_keys>`: The API key of the webservice user.
|
||||
- :ref:`Client Key <adyen/api_and_client_keys>`: The client key of the webservice user.
|
||||
- :ref:`HMAC Key <adyen/hmac_key>`: The HMAC key of the webhook.
|
||||
- :ref:`Checkout API URL <adyen/urls>`: The base URL for the Checkout API endpoints.
|
||||
- :ref:`Recurring API URL <adyen/urls>`: The base URL for the Recurring API endpoints.
|
||||
|
||||
You can copy your credentials from your Adyen account, and paste them in the related fields under
|
||||
the **Credentials** tab.
|
||||
|
||||
.. important::
|
||||
If you are trying Adyen as a test, with a *test account*, change the **State** to *Test Mode*. We
|
||||
recommend doing this on a test Odoo database, rather than on your main database.
|
||||
|
||||
.. _adyen/api_and_client_keys:
|
||||
|
||||
API Key and Client Key
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In order to retrieve the API Key and the Client Key, log into your Adyen account, go to
|
||||
:menuselection:`Developers --> API Credentials`.
|
||||
- If you already have an API user, open it.
|
||||
- If you don't have an API user yet, click on **Create new credential**.
|
||||
Go to :menuselection:`Authentication` and get or generate your **API Key** and **Client Key**. Be
|
||||
careful to copy your API key as you'll not be allowed to get it later without generating a new one.
|
||||
|
||||
This is also the place where you'll :ref:`allow payments to be made from your website
|
||||
<adyen/allowed_origins>`.
|
||||
|
||||
.. _adyen/hmac_key:
|
||||
|
||||
HMAC key
|
||||
~~~~~~~~
|
||||
|
||||
In order to retrieve the HMAC Key, you'll need to configure a `Standard Notification` webhook. For
|
||||
this, log into your Adyen account then go to :menuselection:`Developers --> Webhooks --> Add webhook
|
||||
--> Add Standard notification`.
|
||||
|
||||
.. image:: media/adyen_add_webhook.png
|
||||
:align: center
|
||||
:alt: Configure a webhook.
|
||||
|
||||
There, in :menuselection:`Transport --> URL`, enter your server address followed by
|
||||
`/payment/adyen/notification`.
|
||||
|
||||
.. image:: media/adyen_webhook_url.png
|
||||
:align: center
|
||||
:alt: Enter the notification URL.
|
||||
|
||||
Then continue in :menuselection:`Additional Settings --> HMAC Key --> Generate new HMAC key`. Be
|
||||
careful to copy it as you'll not be allowed to get it later without generating a new one.
|
||||
|
||||
You have to save the webhook to finalize its creation.
|
||||
|
||||
.. _adyen/urls:
|
||||
|
||||
URLs
|
||||
~~~~
|
||||
|
||||
To retrieve the URLs, log into your Adyen account, go to :menuselection:`Developers --> API URLs`.
|
||||
Pick one of the URLs listed next to **Recurring** as your **Recurring API URL** and one of the URLs
|
||||
listed next to **Checkout API** as your **Checkout API URL**.
|
||||
|
||||
.. image:: media/adyen_api_urls.png
|
||||
:align: center
|
||||
:alt: Get the links for the different API.
|
||||
|
||||
Adyen Account
|
||||
-------------
|
||||
|
||||
.. _adyen/allowed_origins:
|
||||
|
||||
Allow payments from a specific origin
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To allow payment originated from your website, follow the steps in :ref:`adyen/api_and_client_keys`
|
||||
to navigate to your API user and go to :menuselection:`Allowed Origins`, then add the URLs from
|
||||
where payments will be made (the URLs of the servers hosting your Odoo instances).
|
||||
|
||||
.. image:: media/adyen_allowed_origins.png
|
||||
:align: center
|
||||
:alt: Allows payments originated from a specific domain.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../payment_acquirers`
|
36
content/applications/general/payment_acquirers/alipay.rst
Normal file
@ -0,0 +1,36 @@
|
||||
======
|
||||
Alipay
|
||||
======
|
||||
|
||||
`Alipay <https://www.alipay.com/>`_ is an online payments platform established in China by Alibaba
|
||||
Group.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
.. seealso::
|
||||
- :ref:`payment_acquirers/add_new`
|
||||
|
||||
Credentials tab
|
||||
---------------
|
||||
|
||||
Odoo needs your **API Credentials** to connect with your Alipay account, which comprise:
|
||||
|
||||
- **Account**: Depending on where you are situated
|
||||
- `Express Checkout` if your are a Chinese Merchant.
|
||||
- `Cross-border` if you are not.
|
||||
- **Alipay Seller Email**: Your public Alipay partner email (for express checkout only).
|
||||
- **Merchant Partner ID**: The public partner ID solely used to identify the account with Alipay.
|
||||
- **MD5 Signature Key**: The signature key.
|
||||
|
||||
You can copy your credentials from your Alipay account, and paste them in the related fields under
|
||||
the **Credentials** tab.
|
||||
|
||||
To retrieve them, log into your Alipay account, they are on the front page.
|
||||
|
||||
.. important::
|
||||
If you are trying Alipay as a test, in the *sandbox*, change the **State** to *Test Mode*. We
|
||||
recommend doing this on a test Odoo database, rather than on your main database.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../payment_acquirers`
|
@ -2,116 +2,46 @@
|
||||
Authorize.Net
|
||||
=============
|
||||
|
||||
`Authorize.Net <https://www.authorize.net>`__ is a United States-based online payment solution
|
||||
`Authorize.Net <https://www.authorize.net>`_ is a United States-based online payment solution
|
||||
provider, allowing businesses to accept **credit cards**.
|
||||
|
||||
.. image:: media/authorize-net.png
|
||||
:align: center
|
||||
:alt: Authorize.Net logo
|
||||
Configuration
|
||||
=============
|
||||
|
||||
This Payment Acquirer offers additional options that are not available for other :doc:`Payment
|
||||
Acquirers <../payment_acquirers>`, such as the ability to process your customer's payment after
|
||||
delivery.
|
||||
.. seealso::
|
||||
- :ref:`payment_acquirers/add_new`
|
||||
|
||||
Authorize.Net account
|
||||
=====================
|
||||
|
||||
If not done yet, choose a plan and `Sign Up for an Authorize.Net account
|
||||
<https://www.authorize.net/sign-up.html>`__.
|
||||
Credentials tab
|
||||
---------------
|
||||
|
||||
Odoo needs your **API Credentials & Keys** to connect with your Authorize.Net account, which
|
||||
comprise:
|
||||
|
||||
- API Login ID
|
||||
- Transaction Key
|
||||
- Signature Key
|
||||
- **API Login ID**: The ID solely used to identify the account with Authorize.Net.
|
||||
- **API Transaction Key**
|
||||
- **API Signature Key**
|
||||
- **API Client Key**
|
||||
|
||||
To retrieve them, log into your Authorize.Net account, go to :menuselection:`Account --> Security
|
||||
Settings --> General Security Settings --> API Credentials & Keys`, and generate your **Transaction
|
||||
Key** and **Signature Key**.
|
||||
|
||||
.. image:: media/authorize-api-keys.png
|
||||
:align: center
|
||||
:alt: Generate your Transaction Key and Signature Key on your Authorize.Net account
|
||||
|
||||
.. seealso::
|
||||
|
||||
- `Authorize.Net: Getting Started Guide
|
||||
<https://support.authorize.net/s/article/Authorize-Net-Getting-Started-Guide>`__
|
||||
|
||||
Payment Acquirer Configuration
|
||||
==============================
|
||||
|
||||
To configure Authorize.Net as Payment Acquirer in Odoo, go to :menuselection:`Accounting -->
|
||||
Configuration --> Payment Acquirers`, open **Authorize.Net**, and change the **State** to *Enabled*.
|
||||
Don't forget to click on *Save* once you've set everything up.
|
||||
|
||||
.. note::
|
||||
Please refer to the :doc:`Payment Acquirers documentation <../payment_acquirers>` to read how to
|
||||
configure this payment acquirer.
|
||||
|
||||
Credentials
|
||||
-----------
|
||||
|
||||
Copy your credentials from your Authorize.Net account (API Login Id, API Transaction Key, and API
|
||||
Signature Key), paste them in the related fields under the **Credentials** tab, then click on
|
||||
**Generate Client Key**.
|
||||
|
||||
.. note::
|
||||
The **API Client Key** is necessary only if you select *Payment from Odoo* option as
|
||||
:ref:`Payment Flow <payment_acquirers/payment_flow>`.
|
||||
To retrieve them, log into your Authorize.Net account, go to :menuselection:`Account --> Settings
|
||||
--> Security Settings --> API Credentials & Keys`, generate your **Transaction Key** and
|
||||
**Signature Key**, and paste them on the related fields in Odoo. Then, click on **Generate Client
|
||||
Key**.
|
||||
|
||||
.. important::
|
||||
If you are trying Authorize.Net as a test, with a *sandbox account*, change the **State** to
|
||||
*Test Mode*. We recommend doing this on a test Odoo database, rather than on your main database.
|
||||
|
||||
Payment Flow
|
||||
------------
|
||||
Configuration tab
|
||||
-----------------
|
||||
|
||||
The **Payment Flow** lets you decide if to redirect the user to the payment acquirer's portal to
|
||||
authenticate the payment, or if to stay on the current page and authenticate the payment from Odoo.
|
||||
This field is under the **Configuration** tab.
|
||||
Place a hold on a card
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If you select *Redirection to the acquirer website*, make sure you add a **Default Receipt URL** and
|
||||
a **Default Relay Response URL** to your Authorize.net account.
|
||||
|
||||
To do so, log into your Authorize.Net account, go to :menuselection:`Account --> Transaction Format
|
||||
Settings --> Transaction Response Settings --> Response/Receipt URLs`, and set the default links:
|
||||
|
||||
- | Default Receipt URL:
|
||||
| *https://[yourcompany.odoo.com]*/**payment/authorize/return**
|
||||
- | Default Relay Response URL:
|
||||
| *https://[yourcompany.odoo.com]*/**shop/confirmation**
|
||||
|
||||
.. note::
|
||||
| Failing to complete this step results in the following error:
|
||||
| *The referrer, relay response or receipt link URL is invalid.*
|
||||
|
||||
Capture the payment after the delivery
|
||||
--------------------------------------
|
||||
|
||||
The **Capture Amount Manually** field is under the **Configuration** tab. If enabled, the funds are
|
||||
reserved for 30 days on the customer's card, but not charged yet.
|
||||
|
||||
.. image:: media/authorize-configuration.png
|
||||
:align: center
|
||||
:alt: Authorize.Net Configuration tab on Odoo
|
||||
|
||||
To capture the payment, go to the related Sales Order and click on *Capture Transaction*. If the
|
||||
order is canceled, you can click on *Void Transaction* to unlock the funds from the customer's card.
|
||||
|
||||
.. image:: media/authorize-capture.png
|
||||
:align: center
|
||||
:alt: Hold the credit card payment until you capture or revoke it on Odoo
|
||||
With Authorize.net, you can enable the :ref:`manual capture <payment_acquirers/capture_amount>`. If
|
||||
enabled, the funds are reserved for 30 days on the customer's card, but not charged yet.
|
||||
|
||||
.. warning::
|
||||
After **30 days**, the transaction is **voided automatically** by Authorize.net.
|
||||
|
||||
.. note::
|
||||
With other payment acquirers, you can manage the capture in their own interfaces, not from Odoo.
|
||||
|
||||
.. seealso::
|
||||
- `Authorize.Net: Getting Started Guide
|
||||
<https://support.authorize.net/s/article/Authorize-Net-Getting-Started-Guide>`__
|
||||
- :doc:`../payment_acquirers`
|
||||
- :doc:`../../websites/ecommerce/shopper_experience/payment_acquirer`
|
||||
|
47
content/applications/general/payment_acquirers/buckaroo.rst
Normal file
@ -0,0 +1,47 @@
|
||||
========
|
||||
Buckaroo
|
||||
========
|
||||
|
||||
`Buckaroo <https://www.buckaroo.eu/>`_ is a Dutch-based company that offers several online payment
|
||||
possibilities.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
.. seealso::
|
||||
- :ref:`payment_acquirers/add_new`
|
||||
|
||||
Credentials tab
|
||||
---------------
|
||||
|
||||
Odoo needs your **API Credentials** to connect with your Buckaroo account, which comprise:
|
||||
|
||||
- :ref:`Website Key <buckaroo/website_key>`: The key solely used to identify the website with
|
||||
Buckaroo.
|
||||
- :ref:`Secret Key <buckaroo/secret_key>`: The secret key you entered on Buckaroo.
|
||||
|
||||
You can copy your credentials from your Buckaroo account, and paste them in the related fields under
|
||||
the **Credentials** tab.
|
||||
|
||||
.. _buckaroo/website_key:
|
||||
|
||||
Website Key
|
||||
~~~~~~~~~~~
|
||||
|
||||
In order to retrieve the Website Key, log into your Buckaroo account, go to
|
||||
:menuselection:`Configuration --> Templates --> Your Website`.
|
||||
|
||||
.. _buckaroo/secret_key:
|
||||
|
||||
Secret Key
|
||||
~~~~~~~~~~
|
||||
|
||||
In order to retrieve the Website Key, log into your Buckaroo account, go to
|
||||
:menuselection:`Configuration --> Security --> Secret Key`.
|
||||
|
||||
.. important::
|
||||
If you are trying Buckaroo in a test account, change the **State** to *Test Mode*. We
|
||||
recommend doing this on a test Odoo database, rather than on your main database.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../payment_acquirers`
|
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 6.5 KiB |
After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 6.3 KiB |
Before Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 4.0 KiB |
31
content/applications/general/payment_acquirers/mollie.rst
Normal file
@ -0,0 +1,31 @@
|
||||
======
|
||||
Mollie
|
||||
======
|
||||
|
||||
`Mollie <https://www.mollie.com/>`_ is an online payments platform established in the Netherlands.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
.. seealso::
|
||||
- :ref:`payment_acquirers/add_new`
|
||||
|
||||
Credentials tab
|
||||
---------------
|
||||
|
||||
Odoo needs your **API Credentials** to connect with your Mollie account, which comprise:
|
||||
|
||||
- **API Key**: The test or live API Key depending on the configuration of the acquirer.
|
||||
|
||||
You can copy your credentials from your Mollie account, and paste them in the related fields under
|
||||
the **Credentials** tab.
|
||||
|
||||
To retrieve your API key, log into your Mollie account, go to
|
||||
:menuselection:`Developers --> API keys`, and copy your Test or Live **API Key**.
|
||||
|
||||
.. important::
|
||||
If you are trying Mollie as a test, with the Test API key, change the **State** to *Test Mode*.
|
||||
We recommend doing this on a test Odoo database, rather than on your main database.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../payment_acquirers`
|
69
content/applications/general/payment_acquirers/ogone.rst
Normal file
@ -0,0 +1,69 @@
|
||||
=====
|
||||
Ogone
|
||||
=====
|
||||
|
||||
`Ogone <https://www.ingenico.com/>`_, also known as **Ingenico Payment Services** is a France-based
|
||||
company that provides the technology involved in secure electronic transactions.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
.. seealso::
|
||||
- :ref:`payment_acquirers/add_new`
|
||||
|
||||
Credentials tab
|
||||
---------------
|
||||
|
||||
Odoo needs your **API Credentials** to connect with your Ogone account, which comprise:
|
||||
|
||||
- **PSPID**: The ID solely used to identify the account with Ogone. You chose it when you opened
|
||||
your account.
|
||||
- :ref:`API User ID <ogone/api_user>`: The ID solely used to identify the user with Ogone.
|
||||
- :ref:`API User Password <ogone/api_user>`: Value used to identify the user with Ogone.
|
||||
- :ref:`SHA Key IN <ogone/sha_key_in>`: Key used in the signature Odoo send to Ogone.
|
||||
- :ref:`SHA Key OUT <ogone/sha_key_out>`: Key used in the signature Ogone send to Odoo.
|
||||
|
||||
You can copy your credentials from your Ogone account, and paste them in the related fields under
|
||||
the **Credentials** tab.
|
||||
|
||||
.. _ogone/api_user:
|
||||
|
||||
API User ID and Password
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If you already created a user and have both its ID and password, just copy them. You can also
|
||||
generate a new password from :menuselection:`Configuration --> Users --> Your chosen user --> change
|
||||
password`.
|
||||
|
||||
If you don't have a user, create one by going to :menuselection:`Configuration --> Users -->
|
||||
New User`. Set your **User ID** to get your **password** when you save your new user.
|
||||
|
||||
.. image:: media/ogone_new_user.png
|
||||
:align: center
|
||||
:alt: Get your password when you save the new user.
|
||||
|
||||
.. _ogone/sha_key_in:
|
||||
|
||||
SHA Key IN
|
||||
~~~~~~~~~~
|
||||
|
||||
In order to retrieve the SHA Key IN, log into your ogone account, go to
|
||||
:menuselection:`Configuration --> Technical Information --> Data and origin verification -->
|
||||
Checks for e-Commerce & Alias Gateway`, and retrieve **SHA Key IN**.
|
||||
|
||||
.. _ogone/sha_key_out:
|
||||
|
||||
SHA Key OUT
|
||||
~~~~~~~~~~~
|
||||
|
||||
In order to retrieve the API Key and the Client Key, log into your ogone account, go to
|
||||
:menuselection:`Configuration --> Technical Information --> Transaction feedback --> All transaction
|
||||
submission modes`, and get or generate your **API Key** and **Client Key**. Be careful to copy your
|
||||
API key as you'll not be allowed to get it later without generating a new one.
|
||||
|
||||
.. important::
|
||||
If you are trying Ogone as a test, with the Test Account, change the **State** to *Test Mode*. We
|
||||
recommend doing this on a test Odoo database, rather than on your main database.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../payment_acquirers`
|
@ -1,185 +1,123 @@
|
||||
=============================
|
||||
Configure your Paypal account
|
||||
=============================
|
||||
======
|
||||
Paypal
|
||||
======
|
||||
|
||||
Paypal is available and popular worldwide. It doesn’t charge any
|
||||
subscription fee and creating an account is very easy. That’s why we
|
||||
definitely recommend it for starters in Odoo. It works as a seamless
|
||||
flow where the customer is routed to Paypal website to register the
|
||||
payment.
|
||||
|
||||
Paypal account
|
||||
==============
|
||||
|
||||
A business account is needed to get paid with Paypal. Create a
|
||||
`Paypal Business Account <https://www.paypal.com/us/merchantsignup/
|
||||
applicationChecklist?signupType=CREATE_NEW_ACCOUNT&productIntentId=wp_standard>`_
|
||||
or upgrade your Personal account to a Business account. Go to the Paypal
|
||||
settings and click on *Upgrade to a Business account*.
|
||||
Then follow the few configuration steps.
|
||||
|
||||
|
||||
Settings in Paypal
|
||||
==================
|
||||
|
||||
| First, let’s see how to set up your Paypal account in order to build a
|
||||
seamless customer experience with Odoo.
|
||||
| Log in and open the settings. Go to :menuselection:`Products & Services -->
|
||||
Website payments` and click **Update** on **Website preferences**.
|
||||
|
||||
.. image:: media/paypal01.png
|
||||
:align: center
|
||||
|
||||
Auto Return
|
||||
-----------
|
||||
|
||||
*Auto Return* automatically redirects your customers to Odoo once the
|
||||
payment is processed. Check *Auto Return* and enter your domain name
|
||||
with the suffix ``/shop/confirmation`` as *Return URL*
|
||||
(e.g. ``https://yourcompany.odoo.com/shop/confirmation``).
|
||||
|
||||
This URL is requested in Paypal but not used in practice as Odoo
|
||||
transmits it at each transaction. Don’t worry if you manage several
|
||||
sales channels or Odoo databases.
|
||||
|
||||
.. image:: media/paypal02.png
|
||||
:align: center
|
||||
|
||||
Payment Data Transfer (PDT)
|
||||
---------------------------
|
||||
|
||||
*Payment Data Transfer* delivers the payment confirmation to Odoo as
|
||||
soon as it is processed. Without it, Odoo cannot end the sales flow.
|
||||
This setting must be activated as well. When saving, an *Identity
|
||||
Token* is generated. You will be later requested to enter it in Odoo.
|
||||
|
||||
.. image:: media/paypal03.png
|
||||
:align: center
|
||||
|
||||
Paypal Account Optional
|
||||
|
||||
We advise you to not prompt customers to log in with a Paypal account
|
||||
when they get to pay. Let them pay with debit/credit cards as well, or you might lose some deals. Make sure this setting is turned on.
|
||||
|
||||
.. image:: media/paypal04.png
|
||||
:align: center
|
||||
|
||||
Instant Payment Notification (IPN)
|
||||
----------------------------------
|
||||
|
||||
PDT sends order confirmations once and only once. As a result, your site
|
||||
must be running when it happens; otherwise, it will never receive the
|
||||
message. That’s why we advise to activate the *Instant Payment
|
||||
Notification* (IPN) on top. With IPN, delivery of order confirmations
|
||||
is virtually guaranteed since IPN resends a confirmation until your site acknowledges receipt.
|
||||
|
||||
| To activate IPN, get back to *Website payments* menu and click
|
||||
*Update* in *Instant Payment Notification*.
|
||||
| The *Notification URL* to set is your domain name +
|
||||
“payment/paypal/ipn” (e.g. ``https://yourcompany.odoo.com/payment/paypal/ipn``).
|
||||
|
||||
.. image:: media/paypal05.png
|
||||
:align: center
|
||||
|
||||
Payment Messages Format
|
||||
-----------------------
|
||||
|
||||
If you use accented characters (or anything else than basic Latin characters)
|
||||
for your customer names, addresses... you MUST configure the encoding format of
|
||||
the payment request sent by Odoo to Paypal.
|
||||
|
||||
.. danger::
|
||||
|
||||
If you don't configure this setting, some transactions fail without notice.
|
||||
|
||||
To do so, open:
|
||||
|
||||
* `this page for a test account <https://sandbox.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-language-encoding>`__
|
||||
|
||||
* `this page for a production account <https://www.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-language-encoding>`__
|
||||
|
||||
Then, click *More Options* and set the two default encoding formats as **UTF-8**.
|
||||
|
||||
.. image:: media/paypal07.png
|
||||
:align: center
|
||||
|
||||
.. image:: media/paypal08.png
|
||||
:align: center
|
||||
|
||||
Your Paypal account is ready!
|
||||
|
||||
.. tip::
|
||||
If you want your customers to pay without creating a Paypal account,
|
||||
*Paypal Account Optional* needs to be turned on.
|
||||
|
||||
.. image:: media/paypal_account_optional.png
|
||||
|
||||
.. tip::
|
||||
For Encrypted Website Payments & EWP_SETTINGS error,
|
||||
please check the `Paypal documentation <https://developer.paypal.com/docs/
|
||||
classic/paypal-payments-standard/integration-guide/encryptedwebpayments/
|
||||
#encrypted-website-payments-ewp>`_.
|
||||
`Paypal <https://www.paypal.com/>`_ is available and popular worldwide. It doesn't charge any
|
||||
subscription fee and creating an account is very easy. That's why we definitely recommend it for
|
||||
starters in Odoo. It works as a seamless flow where the customer is routed to Paypal website to
|
||||
register the payment.
|
||||
|
||||
Settings in Odoo
|
||||
================
|
||||
|
||||
Activation
|
||||
----------
|
||||
.. seealso::
|
||||
- :ref:`payment_acquirers/add_new`
|
||||
|
||||
Activate *Paypal* from the config bar of Sales, Invoicing and
|
||||
eCommerce apps, or from the configuration menu of *Payment Acquirers*.
|
||||
Credentials tab
|
||||
---------------
|
||||
|
||||
Credentials
|
||||
-----------
|
||||
Odoo needs your **API Credentials** to connect with your PayPal account, which comprise:
|
||||
|
||||
Odoo requires three Paypal credentials:
|
||||
- **Email ID**: your login email address in Paypal.
|
||||
- **Merchant ID**: the code of the merchant account used to identify your Paypal account.
|
||||
- **Use IPN**: either you want to use Instant Payment Notification. Already checked, you don't have
|
||||
to change it.
|
||||
|
||||
- *Email ID* is your login email address in Paypal.
|
||||
- *Merchant ID* can be found in the settings of your Paypal account, in
|
||||
:menuselection:`Account Settings --> Business information`.
|
||||
- *Paypal PDT Token* is given in *Website payments* configuration as explained here above.
|
||||
You can copy your credentials from your Paypal account, and paste them in the related fields under
|
||||
the **Credentials** tab.
|
||||
|
||||
.. image:: media/paypal09.png
|
||||
:align: center
|
||||
To retrieve them, log into your Paypal account, and go to :menuselection:`Your account menu -->
|
||||
Account settings --> Business Profile --> Business Information`
|
||||
|
||||
Transaction fees
|
||||
----------------
|
||||
.. important::
|
||||
If you are trying Paypal as a test, with a *sandbox account*, change the **State** to *Test
|
||||
Mode*. We recommend doing this on a test Odoo database, rather than on your main database.
|
||||
|
||||
Configuration tab
|
||||
-----------------
|
||||
|
||||
You can charge extra fees to your customers for paying with Paypal;
|
||||
This to cover the transaction fees Paypal charges you. Once redirected to Paypal, your customer sees an extra applied to the order amount.
|
||||
This to cover the transaction fees Paypal charges you. Once redirected to Paypal, your customer sees
|
||||
an extra applied to the order amount.
|
||||
|
||||
To activate this, go to the Configuration tab of Paypal configuration in
|
||||
Odoo and check *Add Extra Fees*.
|
||||
To activate this, go to the Configuration tab of Paypal configuration in Odoo and check *Add Extra
|
||||
Fees*.
|
||||
|
||||
.. image:: media/paypal10.png
|
||||
:align: center
|
||||
|
||||
You can refer to `Paypal Fees <https://www.paypal.com/webapps/mpp/paypal-fees>`__ to set up
|
||||
fees.
|
||||
You can refer to `Paypal Fees <https://www.paypal.com/webapps/mpp/paypal-fees>`_ to set up fees.
|
||||
|
||||
.. note::
|
||||
`Traders in the EU <https://europa.eu/youreurope/citizens/consumers/shopping/pricing-payments/
|
||||
index_en.htm>`_ are not allowed to charge extra fees for paying with credit cards.
|
||||
|
||||
Go live!
|
||||
========
|
||||
Settings in Paypal
|
||||
==================
|
||||
|
||||
Your configuration is ready to roll. Make sure *Production* mode is
|
||||
on. Then publish the payment method by clicking the *Published* button right next to it.
|
||||
First, let’s see how to set up your Paypal account in order to build a seamless customer experience
|
||||
with Odoo.
|
||||
|
||||
.. image:: media/paypal11.png
|
||||
:align: center
|
||||
Log in and open the settings. Go to :menuselection:`Your account menu --> Account settings -->
|
||||
Product & Services --> Website payments` and click **Update** on **Website preferences**.
|
||||
|
||||
.. image:: media/paypal12.png
|
||||
:align: Center
|
||||
Auto Return
|
||||
-----------
|
||||
|
||||
Paypal is now available in your payment form available in eCommerce,
|
||||
Sales and Invoicing apps. Customers are redirected to Paypal website
|
||||
when hitting *Pay Now*. They get back to a confirmation page in Odoo
|
||||
once the payment is processed.
|
||||
*Auto Return* automatically redirects your customers to Odoo once the payment is processed. Check
|
||||
*Auto Return* and enter your domain name with the suffix ``/shop/confirmation`` as *Return URL*
|
||||
(e.g. `https://yourcompany.odoo.com/shop/confirmation`).
|
||||
|
||||
.. image:: media/paypal13.png
|
||||
:align: center
|
||||
This URL is requested in Paypal but not used in practice as Odoo transmits it at each transaction.
|
||||
Don’t worry if you manage several sales channels or Odoo databases.
|
||||
|
||||
Payment Data Transfer (PDT)
|
||||
---------------------------
|
||||
|
||||
*Payment Data Transfer* delivers the payment confirmation to Odoo as soon as it is processed.
|
||||
Without it, Odoo cannot end the sales flow. This setting must be activated as well. When saving, an
|
||||
*Identity Token* is generated. You will be later requested to enter it in Odoo.
|
||||
|
||||
Paypal Account Optional
|
||||
-----------------------
|
||||
|
||||
We advise you to not prompt customers to log in with a Paypal account when they get to pay. Let them
|
||||
pay with debit/credit cards as well, or you might lose some deals. Make sure this setting is turned
|
||||
on.
|
||||
|
||||
Instant Payment Notification (IPN)
|
||||
----------------------------------
|
||||
|
||||
PDT sends order confirmations once and only once. As a result, your site must be running when it
|
||||
happens; otherwise, it will never receive the message. That’s why we advise to activate the *Instant
|
||||
Payment Notification* (IPN) on top. With IPN, delivery of order confirmations is virtually
|
||||
guaranteed since IPN resends a confirmation until your site acknowledges receipt.
|
||||
|
||||
| To activate IPN, get back to *Website payments* menu and click *Update* in *Instant Payment
|
||||
Notification*.
|
||||
| The *Notification URL* to set is your domain name + “payment/paypal/ipn” (e.g.
|
||||
`https://yourcompany.odoo.com/payment/paypal/ipn`).
|
||||
|
||||
Payment Messages Format
|
||||
-----------------------
|
||||
|
||||
If you use accented characters (or anything else than basic Latin characters) for your customer
|
||||
names, addresses... you MUST configure the encoding format of the payment request sent by Odoo to
|
||||
Paypal.
|
||||
|
||||
.. danger::
|
||||
If you don't configure this setting, some transactions fail without notice.
|
||||
|
||||
To do so, open:
|
||||
|
||||
- `this page for a test account <https://sandbox.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-language-encoding>`_
|
||||
- `this page for a production account <https://www.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-language-encoding>`_
|
||||
|
||||
Then, click *More Options* and set the two default encoding formats as **UTF-8**.
|
||||
|
||||
Your Paypal account is ready!
|
||||
|
||||
.. tip::
|
||||
For Encrypted Website Payments & EWP_SETTINGS error, please check the `Paypal documentation
|
||||
<https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/
|
||||
encryptedwebpayments#encrypted-website-payments-ewp>`_.
|
||||
|
||||
Test environment
|
||||
================
|
||||
@ -195,13 +133,10 @@ This will create two sandbox accounts:
|
||||
- A default personal account (to use as shopper, e.g. `pp.merch01-buyer@example.com <mailto:pp.merch01-buyer@example.com>`__).
|
||||
|
||||
Log in to Paypal Sandbox with the merchant account and follow the same configuration instructions.
|
||||
Enter your sandbox credentials in Odoo and make sure Paypal is still
|
||||
set on *Test Environment*. Also, make sure the automatic invoicing
|
||||
is not activated in your eCommerce settings, to not generate invoices
|
||||
when a fictitious transaction is completed.
|
||||
Enter your sandbox credentials in Odoo and make sure Paypal is still set on *Test Mode*. We
|
||||
recommend doing this on a test Odoo database, rather than on your main database.
|
||||
|
||||
Run a test transaction from Odoo using the sandbox personal account.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../payment_acquirers`
|
||||
- :doc:`../../websites/ecommerce/shopper_experience/payment_acquirer`
|
||||
|
32
content/applications/general/payment_acquirers/sips.rst
Normal file
@ -0,0 +1,32 @@
|
||||
====
|
||||
SIPS
|
||||
====
|
||||
|
||||
`SIPS <https://sips.worldline.com/>`_ is an online payments solution from the multinational
|
||||
Worldline.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
.. seealso::
|
||||
- :ref:`payment_acquirers/add_new`
|
||||
|
||||
Credentials tab
|
||||
---------------
|
||||
|
||||
Odoo needs your **API Credentials** to connect with your SIPS account, which comprise:
|
||||
|
||||
- **Merchant ID**: The ID solely used to identify the merchant account with SIPS.
|
||||
- **Secret Key**: The key to sign the merchant account with SIPS.
|
||||
- **Secret Key Version**: The version of the key, pre-filled.
|
||||
- **Interface Version**: Pre-filled, don't change it.
|
||||
|
||||
You can copy your credentials from your SIPS environment info documentation, in the section
|
||||
**PROD**, and paste them in the related fields under the **Credentials** tab.
|
||||
|
||||
.. important::
|
||||
If you are trying SIPS as a test, with the *TEST* credentials, change the **State** to *Test
|
||||
Mode*. We recommend doing this on a test Odoo database, rather than on your main database.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../payment_acquirers`
|
@ -2,31 +2,48 @@
|
||||
Stripe
|
||||
======
|
||||
|
||||
`Stripe <https://stripe.com/>`_ is a United States-based online payment solution
|
||||
provider, allowing businesses to accept **credit cards** and other payment methods.
|
||||
`Stripe <https://stripe.com/>`_ is a United States-based online payment solution provider, allowing
|
||||
businesses to accept **credit cards** and other payment methods.
|
||||
|
||||
Enable Local Payment Methods
|
||||
============================
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Local payment methods are payment methods that are only available for certain merchants
|
||||
and customers countries and currencies.
|
||||
.. seealso::
|
||||
- :ref:`payment_acquirers/add_new`
|
||||
|
||||
The Stripe connector in Odoo supports the following local payment methods:
|
||||
Credentials tab
|
||||
---------------
|
||||
|
||||
- Bancontact
|
||||
- EPS
|
||||
- Giropay
|
||||
- iDeal:
|
||||
- Przelewy24 (P24)
|
||||
Odoo needs your **API Credentials** to connect with your Stripe account, which comprise:
|
||||
|
||||
To enable specific Local Payment Methods with Stripe, list them as supported payment icons.
|
||||
To do so, go to :menuselection:`Payment Acquirers --> Stripe --> Configuration` and add the desired payment methods in
|
||||
the **Supported Payment Icons** field. If the desired payment method is already listed, you don't have anything to do.
|
||||
- Publishable Key: The key solely used to identify the account with Stripe.
|
||||
- Secret Key: The key to sign the merchant account with Stripe.
|
||||
- Webhook Signing Secret: If a webhook is enabled on your Stripe account
|
||||
(:menuselection:`Developers --> webhooks`), this signing secret must be set to authenticate the
|
||||
messages sent from Stripe to Odoo.
|
||||
|
||||
To retrieve the publishable and secret keys, log into your Stripe dashboard and go to
|
||||
:menuselection:`Developers --> API Keys --> Standard Keys`
|
||||
|
||||
.. important::
|
||||
If you are trying Stripe as a test, in the **test mode**, change the **State** to *Test
|
||||
Mode*. We recommend doing this on a test Odoo database, rather than on your main database.
|
||||
|
||||
Enable local payment methods
|
||||
****************************
|
||||
|
||||
Local payment methods are payment methods that are only available for certain merchants and
|
||||
customers countries and currencies.
|
||||
|
||||
To enable specific local payment methods with Stripe, list them as supported payment icons. To do
|
||||
so, go to :menuselection:`Payment Acquirers --> Stripe --> Configuration` and add the desired
|
||||
payment methods in the **Supported Payment Icons** field. If the desired payment method is already
|
||||
listed, you don't have anything to do. If a payment icon record doesn't exist in the database, its
|
||||
related payment method is considered enabled with Stripe.
|
||||
|
||||
.. image:: media/stripe_enable_local_payment_method.png
|
||||
:align: center
|
||||
:alt: Select and add icons of payment methods you want to enable
|
||||
:alt: Select and add icons of the payment methods you want to enable
|
||||
|
||||
.. note::
|
||||
If a payment method icon doesn't exist at all in the database, the corresponding local payment method is always offered
|
||||
to customers.
|
||||
.. seealso::
|
||||
- :doc:`../payment_acquirers`
|
||||
|
@ -2,41 +2,38 @@
|
||||
How to get paid with wire transfers
|
||||
=======================================
|
||||
|
||||
**Wire Transfer** is the default payment method available.
|
||||
The aim is providing your customers with your bank details
|
||||
so they can pay on their own.
|
||||
This is very easy to start with but slow and inefficient process-wise.
|
||||
Opt for payment acquirers as soon as you can!
|
||||
|
||||
**Wire Transfer** is the default payment method available. The aim is providing your customers with
|
||||
your bank details so they can pay on their own. This is very easy to start with but slow and
|
||||
inefficient process-wise. Opt for payment acquirers as soon as you can!
|
||||
|
||||
How to provide customers with payment instructions
|
||||
==================================================
|
||||
|
||||
Put your payment instructions in the **Thanks Message** of your payment method.
|
||||
|
||||
.. image:: media/payment_instructions.png
|
||||
:align: center
|
||||
:align: center
|
||||
|
||||
They will appear to the customers when they place an order.
|
||||
|
||||
.. image:: media/payment_customer_instructions.png
|
||||
:align: center
|
||||
|
||||
:align: center
|
||||
|
||||
How to manage an order once you get paid
|
||||
========================================
|
||||
|
||||
Whenever a customer pays by wire transfer, the order stays in an
|
||||
intermediary stage **Quotation Sent** (i.e. unpaid order).
|
||||
When you get paid,
|
||||
you confirm the order manually to launch the delivery.
|
||||
|
||||
Whenever a customer pays by wire transfer, the order stays in an intermediary stage **Quotation
|
||||
Sent** (i.e. unpaid order). When you get paid, you confirm the order manually to launch the
|
||||
delivery.
|
||||
|
||||
How to create other manual payment methods
|
||||
==========================================
|
||||
|
||||
If you manage a B2B business, you can create other manually-processed
|
||||
payment methods like paying by check.
|
||||
To do so, just rename *Wire Transfer* or duplicate it.
|
||||
If you manage a B2B business, you can create other manually-processed payment methods like paying by
|
||||
check. To do so, just rename *Wire Transfer* or duplicate it.
|
||||
|
||||
.. image:: media/payment_check.png
|
||||
:align: center
|
||||
:align: center
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../payment_acquirers`
|
@ -9,4 +9,5 @@ Productivity
|
||||
|
||||
productivity/discuss
|
||||
productivity/iot
|
||||
productivity/mail_plugins
|
||||
productivity/studio
|
||||
|
57
content/applications/productivity/mail_plugins.rst
Normal file
@ -0,0 +1,57 @@
|
||||
:show-content:
|
||||
|
||||
============
|
||||
Mail Plugins
|
||||
============
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
mail_plugins/outlook
|
||||
mail_plugins/gmail
|
||||
|
||||
Mail Plugins are connectors that bridge your mailbox with your Odoo database. With them, you can
|
||||
interact with your Odoo database directly from your mailbox by:
|
||||
|
||||
- Creating leads and centralizing prospects' emails into the CRM app.
|
||||
- Generating tasks in any Odoo project.
|
||||
- Creating tickets in the Helpdesk app.
|
||||
- Searching and storing insights on your contacts.
|
||||
|
||||
Mail Plugins are available for :doc:`Outlook <mail_plugins/outlook>` and :doc:`Gmail
|
||||
<mail_plugins/gmail>`.
|
||||
|
||||
.. _mail_plugins/pricing:
|
||||
|
||||
Pricing
|
||||
=======
|
||||
|
||||
Mail Plugins are **free** to install and use.
|
||||
|
||||
However, they can provide **Lead Enrichment**, which is part of a paid service known as **Lead
|
||||
Generation**.
|
||||
|
||||
Mail plugins allow you to test Lead Enrichment for free, whether you connect the plugins to a
|
||||
database or not. After a while, the plugins ask you to buy :doc:`../general/in_app_purchase`
|
||||
credits if you would like to keep using this service.
|
||||
|
||||
.. _mail_plugins/lead-generation:
|
||||
|
||||
Lead Generation IAP service
|
||||
---------------------------
|
||||
|
||||
Lead Enrichment uses the *Lead Generation IAP service*. Each request consumes one *Lead Generation
|
||||
credit*.
|
||||
|
||||
To buy credits, go to :menuselection:`Settings --> CRM --> Lead Enrichment --> Buy credits` and
|
||||
select a package.
|
||||
|
||||
.. note::
|
||||
- If you are out of credits, the only information populated when clicking on the suggested
|
||||
company is its website link and logo.
|
||||
- Check out the `Lead Generation IAP service Privacy Policy
|
||||
<https://iap.odoo.com/privacy#header_3>`_.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../general/in_app_purchase`
|
||||
- `Odoo Tutorials: Lead Enrichment <https://www.odoo.com/r/p73>`_
|
95
content/applications/productivity/mail_plugins/gmail.rst
Normal file
@ -0,0 +1,95 @@
|
||||
============
|
||||
Gmail Plugin
|
||||
============
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
The Gmail :doc:`Mail Plugin <../mail_plugins>` needs to be configured both on Odoo and Gmail.
|
||||
|
||||
.. _mail-plugin/gmail/enable-mail-plugin:
|
||||
|
||||
Enable Mail Plugin
|
||||
------------------
|
||||
|
||||
First, you need to enable the *Mail Plugin* feature in your database. Go to :menuselection:`Settings
|
||||
--> General Settings --> Integrations`, enable *Mail Plugin*, and *Save* the configuration.
|
||||
|
||||
.. _mail-plugin/gmail/install-plugin:
|
||||
|
||||
Install the Gmail Plugin
|
||||
------------------------
|
||||
|
||||
#. Open the `Gmail Plugin Apps Script project
|
||||
<https://script.google.com/d/1n7cxtaR4fGXKcP0RwinNQmL8S4FhVqpo-ZZ_cUAhYuuDpZAP_CnHE_7q/edit>`_.
|
||||
|
||||
#. Verify you are logged in using the Google account you want to install the plugin on.
|
||||
|
||||
#. Click on *Publish* then *Deploy from manifest...*
|
||||
|
||||
.. image:: gmail/deploy-from-manifest.png
|
||||
:align: center
|
||||
:alt: Deploying from manifest the Gmail Plugin from the Apps Script project
|
||||
|
||||
.. important::
|
||||
Make sure you are using the legacy editor; otherwise the *Deploy from manifest* functionality
|
||||
may not be available.
|
||||
|
||||
.. image:: gmail/legacy-editor.png
|
||||
:align: center
|
||||
:alt: Using the legacy editor in the Gmail Plugin Apps Script project
|
||||
|
||||
#. Click on *Install add-on*. A "Deployment installed" notification should appear. You can then
|
||||
click on *Close*.
|
||||
|
||||
.. image:: gmail/install-add-on.png
|
||||
:align: center
|
||||
:alt: Installing the Gmail Plugin from the Apps Script project
|
||||
|
||||
.. _mail-plugin/gmail/configure-mailbox:
|
||||
|
||||
Configure your Gmail mailbox
|
||||
----------------------------
|
||||
|
||||
#. Open any email in your Gmail mailbox. On the right-side panel, click on the Odoo icon and then
|
||||
*Authorize Access*.
|
||||
|
||||
.. image:: gmail/authorize-access.png
|
||||
:align: center
|
||||
:alt: Authorizing access to the Gmail Plugin
|
||||
|
||||
#. Choose the right Google account.
|
||||
|
||||
.. image:: gmail/choose-account.png
|
||||
:align: center
|
||||
:alt: Choosing your Google account
|
||||
|
||||
#. Allow the Gmail Plugin to access some of your data.
|
||||
|
||||
.. image:: gmail/allow-permissions.png
|
||||
:align: center
|
||||
:alt: Allowing the Gmail Plugin to access Google data
|
||||
|
||||
#. The right-side panel can now display **Company Insights**. At the bottom, click on *Login*.
|
||||
|
||||
.. image:: gmail/panel-login.png
|
||||
:align: center
|
||||
:alt: Logging in your Odoo database
|
||||
|
||||
.. note::
|
||||
Only a limited amount of *Company Insights* (*Lead Enrichment*) requests are available as a
|
||||
trial. This feature requires :ref:`prepaid credits <mail_plugins/pricing>`.
|
||||
|
||||
#. Enter your Odoo database URL and click on *Login*.
|
||||
|
||||
.. image:: gmail/database-url.png
|
||||
:align: center
|
||||
:alt: Entering your Odoo database URL
|
||||
|
||||
#. If you aren't logged into your database, enter your credentials.
|
||||
|
||||
#. Click on *Allow* to let the Gmail Plugin connect to your database.
|
||||
|
||||
.. image:: gmail/odoo-permission.png
|
||||
:align: center
|
||||
:alt: Allowing the Gmail Plugin to connect to a database
|
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 9.6 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 9.6 KiB |
After Width: | Height: | Size: 7.3 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 8.5 KiB |
After Width: | Height: | Size: 5.5 KiB |
122
content/applications/productivity/mail_plugins/outlook.rst
Normal file
@ -0,0 +1,122 @@
|
||||
==============
|
||||
Outlook Plugin
|
||||
==============
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
The Outlook :doc:`Mail Plugin <../mail_plugins>` needs to be configured both on Odoo and Outlook.
|
||||
|
||||
.. _mail-plugin/outlook/enable-mail-plugin:
|
||||
|
||||
Enable Mail Plugin
|
||||
------------------
|
||||
|
||||
First, you need to enable the *Mail Plugin* feature in your database. Go to :menuselection:`Settings
|
||||
--> General Settings --> Integrations`, enable *Mail Plugin*, and *Save* the configuration.
|
||||
|
||||
.. _mail-plugin/outlook/install-plugin:
|
||||
|
||||
Install the Outlook Plugin
|
||||
--------------------------
|
||||
|
||||
#. Open your Outlook mailbox and select any email.
|
||||
|
||||
#. Click on the *More actions* button and select *Get Add-ins*.
|
||||
|
||||
.. image:: outlook/more-actions.png
|
||||
:align: center
|
||||
:alt: More actions button in Outlook
|
||||
|
||||
#. Select the *My add-ins* tab.
|
||||
|
||||
.. image:: outlook/my-add-ins.png
|
||||
:align: center
|
||||
:alt: My add-ins in Outlook
|
||||
|
||||
#. Under *Custom add-ins*, click on *+ Add a custom add-in*, and then on *Add from URL...*
|
||||
|
||||
.. image:: outlook/custom-add-ins.png
|
||||
:align: center
|
||||
:alt: Custom add-ins in Outlook
|
||||
|
||||
#. Enter the following URL `https://download.odoo.com/plugins/v15/outlook/manifest.xml` and press
|
||||
*OK*.
|
||||
|
||||
.. image:: outlook/enter-add-in-url.png
|
||||
:align: center
|
||||
:alt: Entering the add-in URL in Outlook
|
||||
|
||||
#. Read the warning and click on *Install*.
|
||||
|
||||
.. image:: outlook/add-in-warning.png
|
||||
:align: center
|
||||
:alt: Custom add-in installation warning in Outlook
|
||||
|
||||
.. _mail-plugin/outlook/connect-database:
|
||||
|
||||
Connect your database
|
||||
---------------------
|
||||
|
||||
#. Open any email in your Outlook mailbox, click on the *More actions* button, and select *Odoo for
|
||||
Outlook*.
|
||||
|
||||
.. image:: outlook/odoo-for-outlook.png
|
||||
:align: center
|
||||
:alt: Odoo for Outlook add-in button
|
||||
|
||||
#. The right-side panel can now display **Company Insights**. At the bottom, click on *Login*.
|
||||
|
||||
.. image:: outlook/panel-login.png
|
||||
:align: center
|
||||
:alt: Logging in your Odoo database
|
||||
|
||||
.. note::
|
||||
Only a limited amount of *Company Insights* (*Lead Enrichment*) requests are available as a
|
||||
trial. This feature requires :ref:`prepaid credits <mail_plugins/pricing>`.
|
||||
|
||||
#. Enter your Odoo database URL and click on *Login*.
|
||||
|
||||
.. image:: outlook/enter-database-url.png
|
||||
:align: center
|
||||
:alt: Entering your Odoo database URL
|
||||
|
||||
#. Click on *Allow* to open the pop-up window.
|
||||
|
||||
.. image:: outlook/new-window-warning.png
|
||||
:align: center
|
||||
:alt: New window pop-up warning
|
||||
|
||||
#. If you aren't logged into your database, enter your credentials.
|
||||
|
||||
#. Click on *Allow* to let the Outlook Plugin connect to your database.
|
||||
|
||||
.. image:: outlook/odoo-permission.png
|
||||
:align: center
|
||||
:alt: Allowing the Outlook Plugin to connect to a database
|
||||
|
||||
.. _mail-plugin/outlook/add-shortcut:
|
||||
|
||||
Add a shortcut to the plugin
|
||||
----------------------------
|
||||
|
||||
By default, the Outlook Plugin can be opened from the *More actions* menu. However, to save
|
||||
time, it's possible to add it next to the other default actions.
|
||||
|
||||
#. In your Outlook mailbox, click on *Settings*, then on *View all Outlook settings*.
|
||||
|
||||
.. image:: outlook/all-outlook-settings.png
|
||||
:align: center
|
||||
:alt: Viewing all Outlook settings
|
||||
|
||||
#. Select *Customize actions* under *Mail*, click on *Odoo for Outlook*, and then *Save*.
|
||||
|
||||
.. image:: outlook/customize-actions.png
|
||||
:align: center
|
||||
:alt: Odoo for Outlook customized action
|
||||
|
||||
#. Open any email; the shortcut should be displayed.
|
||||
|
||||
.. image:: outlook/odoo-outlook-shortcut.png
|
||||
:align: center
|
||||
:alt: Odoo for Outlook customized action
|
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 7.3 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 5.1 KiB |
After Width: | Height: | Size: 6.4 KiB |
@ -8,5 +8,4 @@ Optimize your Day-to-Day work
|
||||
:titlesonly:
|
||||
|
||||
optimize/partner_autocomplete
|
||||
optimize/outlook_extension
|
||||
optimize/gamification
|
||||
|
Before Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 29 KiB |
@ -1,175 +0,0 @@
|
||||
=================
|
||||
Outlook Extension
|
||||
=================
|
||||
|
||||
The **Odoo CRM Extension** is a connector that bridges your Outlook mailbox with your Odoo database.
|
||||
This extension allows you to:
|
||||
|
||||
- Create leads from emails sent to your mailbox.
|
||||
- Centralize Prospects' emails into a CRM.
|
||||
- Search and store insights on your contacts.
|
||||
|
||||
.. image:: media/outlook-extension-overview.png
|
||||
:align: center
|
||||
:alt: Overview of the Outlook Extension in Outlook
|
||||
|
||||
.. note::
|
||||
This extension is compatible with the Web version of Outlook as well as the desktop apps.
|
||||
|
||||
.. important::
|
||||
The Outlook Extension uses *Partner Autocomplete IAP credits* to search and store insights on
|
||||
your contacts. See the :ref:`Pricing section <outlook_extension/pricing>` below for more
|
||||
information.
|
||||
|
||||
.. _outlook_extension/configuration:
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
The Outlook Extension requires to be configured both in Odoo and in Outlook.
|
||||
|
||||
.. _outlook_extension/enable-feature:
|
||||
|
||||
Enable the feature on your database
|
||||
-----------------------------------
|
||||
|
||||
To enable this feature on your Odoo database, go to :menuselection:`CRM --> Configuration --> Lead
|
||||
Generation`, enable **Outlook CRM Extension**, and click on *Save*.
|
||||
|
||||
.. _outlook_extension/add-in-installation:
|
||||
|
||||
Install the add-in on Outlook
|
||||
-----------------------------
|
||||
|
||||
You can install the Outlook Extension as a **Custom Add-in**. To do so, follow these steps:
|
||||
|
||||
.. important::
|
||||
| URL of the **Odoo for Outlook** add-in's manifest file:
|
||||
| ``https://download.odoo.com/plugins/outlook/manifest.xml``
|
||||
|
||||
.. todo:: add copy button when the feature is added to the doc
|
||||
|
||||
#. Connect to your Outlook mailbox, open any email, and click on the *More actions* button,
|
||||
displayed as three little dots.
|
||||
|
||||
.. image:: media/outlook-extension-more-actions.png
|
||||
:align: center
|
||||
:alt: The button "More actions" in Outlook
|
||||
|
||||
#. Click on *Get add-ins*.
|
||||
|
||||
.. image:: media/outlook-extension-get-add-ins.png
|
||||
:align: center
|
||||
:alt: List of actions in Outlook, including the installation of new add-ins
|
||||
|
||||
#. In the new window, select the tab named *My add-ins*, click on *+ Add a custom add-in*, and then
|
||||
on *Add from URL...*
|
||||
|
||||
.. image:: media/outlook-extension-custom-add-ins.png
|
||||
:align: center
|
||||
:alt: Installation of a custom add-in in Outlook
|
||||
|
||||
#. | Outlook prompts you to **enter the URL of the add-in's manifest file**. To do so, copy the
|
||||
following URL, paste it in the box, and click on *OK*.
|
||||
| ``https://download.odoo.com/plugins/outlook/manifest.xml``
|
||||
|
||||
.. image:: media/outlook-extension-add-in-url.png
|
||||
:align: center
|
||||
:alt: Getting a custom add-in in Outlook by providing the manifest file's URL
|
||||
|
||||
#. Outlook warns you that Microsoft hasn’t verified the add-in. Click on *Install* to complete the
|
||||
installation.
|
||||
|
||||
.. note::
|
||||
The *Odoo for Outlook* add-in is not listed yet on Outlook's add-ins list. This is why it is
|
||||
currently necessary to install it as a *custom add-in*.
|
||||
|
||||
.. _outlook_extension/connection:
|
||||
|
||||
Add a shortcut to open the extension
|
||||
------------------------------------
|
||||
|
||||
By default, you can open the **Odoo for Outlook** extension from the *More actions* menu. This
|
||||
section explains how to move the launcher next to the other default actions.
|
||||
|
||||
.. image:: media/outlook-extension-default-actions.png
|
||||
:align: center
|
||||
:alt: Odoo for Outlook extension as a default action in the mailbox
|
||||
|
||||
#. In your Outlook mailbox, click on *Settings*, then on *View all Outlook settings*.
|
||||
#. Go to :menuselection:`Settings --> Mail --> Customize actions --> Message surface`, select
|
||||
*Odoo for Outlook*, and click on *Save*.
|
||||
|
||||
.. image:: media/outlook-extension-customize-actions.png
|
||||
:align: center
|
||||
:alt: add Odoo for Outlook extension as a default action in the message surface
|
||||
|
||||
|
||||
Connect to your database
|
||||
------------------------
|
||||
|
||||
#. Open **Odoo for Outlook** from any email. This opens the extension as a panel on the right side of
|
||||
your screen.
|
||||
#. Click on *login* at the bottom of the extension.
|
||||
#. Insert your database's URL then click on *Login*.
|
||||
|
||||
.. image:: media/outlook-extension-database-url.png
|
||||
:align: center
|
||||
:alt: Connection to an Odoo database from the Outlook extension
|
||||
|
||||
#. Log into your database by entering your credentials. Skip this step if you are already logged in
|
||||
with this browser.
|
||||
#. A message asks you if you want to let Outlook access your Odoo database. Click on *Allow* to
|
||||
complete the connection.
|
||||
|
||||
.. important::
|
||||
Make sure first to :ref:`enable the feature on your database
|
||||
<outlook_extension/enable-feature>`. Failing to do so would result in an *error 404 message*.
|
||||
|
||||
.. note::
|
||||
The extension displays some information, even if you do not connect it to any Odoo database.
|
||||
Note that only a limited amount of contact enrichment requests are available as a trial, as this
|
||||
feature requires prepaid credits. See the :ref:`Pricing section <outlook_extension/pricing>`
|
||||
below for more information.
|
||||
|
||||
.. _outlook_extension/pricing:
|
||||
|
||||
Pricing
|
||||
=======
|
||||
|
||||
The extension is **free** and doesn't require any purchase to be installed and used.
|
||||
|
||||
However, this extension provides you with *Lead Enrichment* in the **Company Insights** section.
|
||||
This service is part of a paid service known as **Lead Generation**.
|
||||
|
||||
The extension allows you to test this service for free, whether you connect the extension to a
|
||||
database or not. After a while, the extension asks you to buy credits to keep using this additional
|
||||
service.
|
||||
|
||||
.. image:: media/outlook-extension-credits-message.png
|
||||
:align: center
|
||||
:alt: "Could not auto-complete the company: not enough credits!" warning message in the Outlook
|
||||
extension
|
||||
|
||||
.. tip::
|
||||
You can buy more *Lead Generation* credits to keep using this service or disregard this message
|
||||
and keep using the extension for free without *Lead Enrichment*.
|
||||
|
||||
In-App Purchase
|
||||
---------------
|
||||
|
||||
| *Lead Generation* is an *In-App Purchase (IAP)* service, which requires prepaid credits to be
|
||||
used. Each request consumes one credit.
|
||||
| To buy credits, go to :menuselection:`Settings --> Contacts --> Partner Autocomplete or Odoo IAP -->
|
||||
View My Services` and select a package.
|
||||
|
||||
.. note::
|
||||
- If you run out of credits, the only information populated when clicking on the suggested
|
||||
company is the website link and logo.
|
||||
- If you are on Odoo Online (SAAS) and have the Enterprise version, you benefit from free
|
||||
trial credits to test the feature.
|
||||
- Learn about our *Privacy Policy* `here <https://iap.odoo.com/privacy#header_2>`_.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../../../general/in_app_purchase`
|
||||
- `Odoo Tutorials: Lead Enrichment <https://www.odoo.com/r/p73>`_
|
@ -12,7 +12,7 @@ keep the churn under control and have reporting on the main KPIs: MRR, ARR, rete
|
||||
upselling, etc.
|
||||
|
||||
.. seealso::
|
||||
- `Odoo Tutorials: Subscriptions <https://www.odoo.com/slides/subscription-28>`_
|
||||
- `Odoo Tutorials: Subscriptions <https://www.odoo.com/slides/subscription-20>`_
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
@ -70,12 +70,8 @@ Use the GitHub interface
|
||||
#. Verify that you are browsing the documentation in the version that you intend to change. The
|
||||
version can be selected from the dropdown in the top menu.
|
||||
|
||||
.. image:: documentation/version-selector.png
|
||||
|
||||
#. Head over to the page that you want to change and click on the **Edit on GitHub** button in the
|
||||
bottom of the left menu.
|
||||
|
||||
.. image:: documentation/edit-on-github.png
|
||||
top right corner of the page.
|
||||
|
||||
#. If you do not have edit rights on the repository (`odoo/documentation
|
||||
<https://github.com/odoo/documentation>`_), you need to fork it by clicking on the appropriate
|
||||
@ -224,7 +220,7 @@ Python comes with its own package manager: `pip
|
||||
a single command.
|
||||
|
||||
#. Download and install the recommended release (`see README file
|
||||
<https://github.com/odoo/documentation/tree/master/README.md>`_) of **Python 3** on your machine.
|
||||
<https://github.com/odoo/documentation/tree/15.0/README.md>`_) of **Python 3** on your machine.
|
||||
#. Make sure to have **pip** installed on your machine (on Windows, you can install pip alongside
|
||||
Python).
|
||||
#. Execute the following commands in a terminal to verify that both installations finished
|
||||
|
Before Width: | Height: | Size: 2.1 KiB |
@ -36,8 +36,8 @@ A reference to the rendered :file:`prices.html` and :file:`variants.html` could
|
||||
|
||||
#. Absolute:
|
||||
|
||||
- ``https://odoo.com/documentation/master/applications/sales/sales/products_prices/prices.html``
|
||||
- ``https://odoo.com/documentation/master/applications/sales/sales/products_prices/products/variants.html``
|
||||
- ``https://odoo.com/documentation/15.0/applications/sales/sales/products_prices/prices.html``
|
||||
- ``https://odoo.com/documentation/15.0/applications/sales/sales/products_prices/products/variants.html``
|
||||
|
||||
#. Relative:
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB |
@ -29,6 +29,12 @@ on your background.
|
||||
|
||||
For reference this is the official `Python tutorial`_.
|
||||
|
||||
.. note::
|
||||
Since version 15.0, Odoo is actively transitioning to using its own in-house developed `OWL
|
||||
framework <https://odoo.github.io/owl/>`_ as part of its presentation tier. The legacy JavaScript
|
||||
framework is still supported but will be depreciated over time. This will be discussed further in
|
||||
advanced topics.
|
||||
|
||||
Odoo modules
|
||||
============
|
||||
|
||||
|
@ -337,6 +337,18 @@ For Python, we use PEP8 with these options ignored:
|
||||
|
||||
For JavaScript, we use ESLint and you can find a `configuration file example here`_.
|
||||
|
||||
If you do not know how to set up a linter:
|
||||
|
||||
- `Here is an explanation of how to set up a Python linter in VSCode <https://code.visualstudio.com/docs/python/linting>`_. There are multiple
|
||||
linter options you are free to choose from, but `Flake8 <https://pypi.org/project/flake8/>`_ is a popular choice.
|
||||
- To setup ESLint in VSCode, you must download the `ESLint extension`_ and follow its instructions
|
||||
for installing ESLint. Don't forget to create and set up the `.eslintrc` file to follow the
|
||||
configuration file mentioned above.
|
||||
- Another useful VSCode plugin is `Trailing Spaces`_ to quickly notice trailing spaces while
|
||||
you're working.
|
||||
|
||||
.. _Trailing Spaces: https://marketplace.visualstudio.com/items?itemName=shardulm94.trailing-spaces
|
||||
.. _ESLint extension: https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint
|
||||
.. _configuration file example here: https://github.com/odoo/odoo/wiki/Javascript-coding-guidelines#use-a-linter
|
||||
.. _VSCode: https://code.visualstudio.com/
|
||||
.. _VSCodium: https://vscodium.com/
|
||||
|
@ -71,6 +71,12 @@ The decorator :func:`~odoo.api.model` is necessary for the :meth:`~odoo.models.M
|
||||
method because the content of the recordset ``self`` is not relevant in the context of creation,
|
||||
but it is not necessary for the other CRUD methods.
|
||||
|
||||
It is also important to note that even though we can directly override the
|
||||
:meth:`~odoo.models.Model.unlink` method, you will almost always want to write a new method with
|
||||
the decorator :func:`~odoo.api.ondelete` instead. Methods marked with this decorator will be
|
||||
called during :meth:`~odoo.models.Model.unlink` and avoids some issues that can occur during
|
||||
uninstalling the model's module when :meth:`~odoo.models.Model.unlink` is directly overridden.
|
||||
|
||||
In Python 3, ``super()`` is equivalent to ``super(TestModel, self)``. The latter may be necessary
|
||||
when you need to call the parent method with a modified recordset.
|
||||
|
||||
@ -85,8 +91,8 @@ when you need to call the parent method with a modified recordset.
|
||||
|
||||
- Prevent deletion of a property if its state is not 'New' or 'Canceled'
|
||||
|
||||
Tip: override :meth:`~odoo.models.Model.unlink` and remember that ``self`` can be a recordset
|
||||
with more than one record.
|
||||
Tip: create a new method with the :func:`~odoo.api.ondelete` decorator and remember that
|
||||
``self`` can be a recordset with more than one record.
|
||||
|
||||
- At offer creation, set the property state to 'Offer Received'. Also raise an error if the user
|
||||
tries to create an offer with a lower amount than an existing offer.
|
||||
|
@ -133,24 +133,24 @@ information:
|
||||
Moreover, an invoice line needs to be linked to an invoice. The easiest and most efficient way
|
||||
to link a line to an invoice is to include all lines at invoice creation. To do this, the
|
||||
``invoice_line_ids`` field is included in the ``account.move`` creation, which is a
|
||||
:class:`~odoo.fields.One2many`. One2many and Many2many use special 'commands' described in
|
||||
:ref:`reference/orm/models/crud`. This format is a list of triplets executed sequentially, where
|
||||
each triplet is a command to execute on the set of records. Here is a simple example to include
|
||||
a One2many field ``line_ids`` at creation of a ``test.model``::
|
||||
:class:`~odoo.fields.One2many`. One2many and Many2many use special 'commands' which have been
|
||||
made human readable with the :class:`~odoo.fields.Command` namespace. This namespace represents
|
||||
a triplet command to execute on a set of records. The triplet was originally the only option to
|
||||
do these commands, but it is now standard to use the namespace instead. The format is to place
|
||||
them in a list which is executed sequentially. Here is a simple example to include a One2many
|
||||
field ``line_ids`` at creation of a ``test.model``::
|
||||
|
||||
from odoo import Command
|
||||
|
||||
def inherited_action(self):
|
||||
self.env["test.model"].create(
|
||||
{
|
||||
"name": "Test",
|
||||
"line_ids": [
|
||||
(
|
||||
0,
|
||||
0,
|
||||
{
|
||||
"field_1": "value_1",
|
||||
"field_2": "value_2",
|
||||
},
|
||||
)
|
||||
Command.create({
|
||||
"field_1": "value_1",
|
||||
"field_2": "value_2",
|
||||
})
|
||||
],
|
||||
}
|
||||
)
|
||||
|
@ -18,9 +18,9 @@ to improve the quality of the Odoo Apps code.
|
||||
|
||||
.. exercise:: Polish your code.
|
||||
|
||||
Refactor your code to respect the coding guidelines. Don't forget to respect the module
|
||||
structure, the variable names, the method name convention, the model attribute order and the
|
||||
xml ids.
|
||||
Refactor your code to respect the coding guidelines. Don't forget to run your linter and
|
||||
respect the module structure, the variable names, the method name convention, the model
|
||||
attribute order and the xml ids.
|
||||
|
||||
Your first Pull Request (PR)
|
||||
============================
|
||||
|
@ -10,8 +10,9 @@ Advanced B: ACL and Record Rules
|
||||
<howto/rdtraining>`.
|
||||
|
||||
To follow the exercise, it is recommended that you fetch the branch
|
||||
14.0-core from the repository XXX, it
|
||||
contains a version of the module created during the core training we can use
|
||||
15.0-core from the
|
||||
`technical training solutions <https://github.com/odoo/technical-training-solutions/tree/15.0-core>`__ repository.
|
||||
It contains a version of the module created during the core training we can use
|
||||
as a starting point.
|
||||
|
||||
So far we have mostly concerned ourselves with implementing useful features.
|
||||
@ -33,7 +34,7 @@ However:
|
||||
* Real-estate agents don't need or get to decide what property types or tags are
|
||||
*available*.
|
||||
* Real-estate agents can have *exclusive* properties, we do not want one agent
|
||||
to be able to manage another's exclusivities.
|
||||
to be able to manage another's exclusives.
|
||||
* All real-estate agents should be able to confirm the sale of a property they
|
||||
can manage, but we do not want them to be able to validate or mark as paid
|
||||
any invoice in the system.
|
||||
@ -44,7 +45,7 @@ However:
|
||||
|
||||
Because it's easier for users to disable unnecessary security rules than it
|
||||
is to create them from nothing, it's better to err on the side of caution
|
||||
and limiting access: users can relax that access if necessary or convenient.
|
||||
and limit access: users can relax that access if necessary or convenient.
|
||||
|
||||
Groups
|
||||
======
|
||||
@ -223,7 +224,7 @@ individual records:
|
||||
<field name="name">A description of the rule's role</field>
|
||||
<field name="model_id" ref="model_to_manage"/>
|
||||
<field name="perm_read" eval="False"/>
|
||||
<field name="groups" eval="[(4, ref('base.group_user'))]"/>
|
||||
<field name="groups" eval="[Command.link(ref('base.group_user'))]"/>
|
||||
<field name="domain_force">[
|
||||
'|', ('user_id', '=', user.id),
|
||||
('user_id', '=', False)
|
||||
@ -294,7 +295,7 @@ do so.
|
||||
There are two main ways to bypass existing security checks in Odoo, either
|
||||
wilfully or as a side-effect:
|
||||
|
||||
* The ``sudo()`` method will create a new recorset in "sudo mode", this ignores
|
||||
* The ``sudo()`` method will create a new recordset in "sudo mode", this ignores
|
||||
all access rules and access rights (although hard-coded group and user checks
|
||||
may still apply).
|
||||
* Performing raw SQL queries will bypass access rules and access rights as a
|
||||
@ -366,9 +367,9 @@ Explicit security checks can be performed by:
|
||||
specific models or records.
|
||||
* Checking that the current user has specific groups hard-coded to allow or deny
|
||||
an operation (``self.env.user.has_group``).
|
||||
* Calling the ``check_access_rights(operation)`` method on a recorset, this
|
||||
* Calling the ``check_access_rights(operation)`` method on a recordset, this
|
||||
verifies whether the current user has access to the model itself.
|
||||
* Calling ``check_access_rule(operations)`` on a non-empty recorset, this
|
||||
* Calling ``check_access_rule(operations)`` on a non-empty recordset, this
|
||||
verifies that the current user is allowed to perform the operation on *every*
|
||||
record of the set.
|
||||
|
||||
@ -380,7 +381,7 @@ Explicit security checks can be performed by:
|
||||
|
||||
Before creating the invoice, use ``check_access_rights`` and
|
||||
``check_access_rule`` to ensure that the current user can update properties
|
||||
in general, and this specific property in particular.
|
||||
in general as well as the specific property the invoice is for.
|
||||
|
||||
Re-run the bypass script, check that the error occurs before the print.
|
||||
|
||||
@ -393,7 +394,7 @@ Multi-company security
|
||||
|
||||
:ref:`reference/howtos/company` for an overview of multi-company facilities
|
||||
in general, and :ref:`multi-company security rules <howto/company/security>`
|
||||
this in particular.
|
||||
in particular.
|
||||
|
||||
Documentation on rules in general can, again, be found at
|
||||
:ref:`reference/security/rules`.
|
||||
@ -403,15 +404,15 @@ Multi-company security
|
||||
At the end of this section, agents should only have access to properties
|
||||
of their agency (or agencies).
|
||||
|
||||
For one reason or an other we might need to manage our real-estate business
|
||||
as multiple companies e.g. we might have largely autonomous agencies, or a
|
||||
For one reason or another we might need to manage our real-estate business
|
||||
as multiple companies e.g. we might have largely autonomous agencies, a
|
||||
franchise setup, or multiple brands (possibly from having acquired other
|
||||
real-estate businesses) which remain legally or financially separate from one
|
||||
another.
|
||||
|
||||
Odoo can be used to manage multiple companies inside the same system, however
|
||||
the actual handling is up to individual modules: Odoo itself provides the tools
|
||||
to manage the issue like company-dependent fields and *multi-company rules*,
|
||||
to manage the issue of company-dependent fields and *multi-company rules*,
|
||||
which is what we're going to concern ourselves with.
|
||||
|
||||
We want different agencies to be "siloed" from one another, with properties
|
||||
@ -447,7 +448,7 @@ associated with *one* of the companies the user has access to:
|
||||
|
||||
Multi-company rules are usually :ref:`global <reference/security/rules/global>`,
|
||||
otherwise there is a high risk that additional rules would allow bypassing
|
||||
the muti-company rules.
|
||||
the multi-company rules.
|
||||
|
||||
.. exercise::
|
||||
|
||||
@ -472,7 +473,7 @@ Visibility != security
|
||||
.. admonition:: **Goal**
|
||||
|
||||
At the end of this section, real-estate agents should not see the Settings
|
||||
menu of the rea-estate application, but should still be able to set the
|
||||
menu of the real-estate application, but should still be able to set the
|
||||
property type or tags.
|
||||
|
||||
Specific Odoo models can be associated directly with groups (or companies, or
|
||||
@ -480,7 +481,7 @@ users). It is important to figure out whether this association is a *security*
|
||||
or a *visibility* feature before using it:
|
||||
|
||||
* *Visibility* features mean a user can still access the model or record
|
||||
otherwise, either through an other part of the interface or by :doc:`perform
|
||||
otherwise, either through another part of the interface or by :doc:`performing
|
||||
operations remotely using RPC <../../misc/api/odoo>`, things might just not be
|
||||
visible in the web interface in some contexts.
|
||||
* *Security* features mean a user can not access records, fields or operations.
|
||||
@ -507,10 +508,10 @@ Here are some examples:
|
||||
|
||||
.. exercise::
|
||||
|
||||
Real Estate agents can not add property types or tags, and can see their
|
||||
Real Estate agents can not add property types or tags, but can see their
|
||||
options from the Property form view when creating it.
|
||||
|
||||
The Settings menu just adds noise to their interface, it should only be
|
||||
The Settings menu just adds noise to their interface, make it only
|
||||
visible to managers.
|
||||
|
||||
Despite not having access to the Property Types and Property Tags menus anymore,
|
||||
|
@ -6,7 +6,8 @@ Advanced C: Master and Demo Data
|
||||
|
||||
.. tip:: This tutorial assumes you followed the Core Training.
|
||||
|
||||
To do the exercise, fetch the branch 14.0-core from the repository XXX.
|
||||
To do the exercise, fetch the branch 15.0-core from the
|
||||
`technical training solutions <https://github.com/odoo/technical-training-solutions/tree/15.0-core>`__ repository.
|
||||
It contains a basic module we will use as a starting point
|
||||
|
||||
Data Types
|
||||
@ -23,23 +24,23 @@ We already met technical data previously since we have defined
|
||||
:ref:`security rules<howto/rdtraining/N_security>`, :ref:`views<reference/views>` and
|
||||
:ref:`actions<reference/actions>`. Those are one kind of master data.
|
||||
|
||||
On top of technical data, business data can be defined: countries, currencies, units of measure but
|
||||
also complete country localization (legal reports, tax definitions, chart of account), and much
|
||||
On top of technical data, business data can be defined, e.g. countries, currencies, units of measure,
|
||||
as well as complete country localization (legal reports, tax definitions, chart of account), and much
|
||||
more...
|
||||
|
||||
Demo Data
|
||||
---------
|
||||
|
||||
Next to master data which are requirements for the modules to work properly, we also like having
|
||||
data for demonstration purpose setups:
|
||||
In additional to master data, which are requirements for a module to work properly, we also like
|
||||
having data for demonstration purposes:
|
||||
|
||||
* Help the sales representatives to make their demos quickly.
|
||||
* Have a set of working data for developers to test the new features and see what it looks like
|
||||
with something they might not have created without it.
|
||||
* Help the sales representatives make their demos quickly.
|
||||
* Have a set of working data for developers to test new features and see how these new features look
|
||||
with data they might not have added themselves.
|
||||
* Test that the data is loaded correctly, without raising an error.
|
||||
* Be ready to use most of the features quickly when creating a new database.
|
||||
* Setup most of the features to be used quickly when creating a new database.
|
||||
|
||||
Demo data is automatically loaded when you start the server if you didn't say explicitly you don't
|
||||
Demo data is automatically loaded when you start the server if you don't explicitly say you don't
|
||||
want it. This can be done in the database manager or with the command line.
|
||||
|
||||
.. code-block:: console
|
||||
@ -70,15 +71,15 @@ Manifest
|
||||
**Reference**: the documentation related to this topic can be found in
|
||||
:ref:`Module Manifests<reference/module/manifest>`.
|
||||
|
||||
The data is declared either in CSV either in XML.
|
||||
Data is declared either in CSV or in XML.
|
||||
Each file containing data must be added in the manifest for them to be loaded.
|
||||
|
||||
The keys to use in the manifest to add new data are ``data`` for the master data and ``demo`` for
|
||||
the demo data. Both values should be a list of strings representing the relative path to the files
|
||||
the demo data. Both values should be a list of strings representing the relative paths to the files
|
||||
declaring the data.
|
||||
|
||||
Usually, the demo data is set in a ``demo`` folder, the views and actions are put in a ``views``
|
||||
folder, the security related data is put in a ``security`` folder, and the other data is set in a
|
||||
Usually, demo data is in a ``demo`` folder, views and actions are in a ``views``
|
||||
folder, security related data is in a ``security`` folder, and other data is in a
|
||||
``data`` folder.
|
||||
|
||||
If your work tree looks like this:
|
||||
@ -129,7 +130,7 @@ CSV
|
||||
:ref:`CSV data files<reference/data/csvdatafiles>`.
|
||||
|
||||
The easiest way to declare simple data is by using the CSV format. This is however limited in terms
|
||||
of features: use it for long lists of simple models, but prefer XML in the other cases.
|
||||
of features: use it for long lists of simple models, but prefer XML otherwise.
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
@ -153,7 +154,7 @@ XML
|
||||
**Reference**: the documentation related to this topic can be found in
|
||||
:ref:`Data Files<reference/data>`.
|
||||
|
||||
When the data to create is a bit more complex it can be useful, or even needed, to do it in XML.
|
||||
When the data to create is more complex it can be useful, or even necessary, to do it in XML.
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
@ -243,7 +244,7 @@ works too if you are in the module declaring it).
|
||||
Deco Addict Big Villa 1500001 14
|
||||
============== ========= ======= ========
|
||||
|
||||
.. exercise:: Both properties should be Residential properties.
|
||||
.. exercise:: Ensure both of your demo properties are created with their Property Type set to Residential.
|
||||
|
||||
``eval``
|
||||
~~~~~~~~
|
||||
@ -279,13 +280,13 @@ Sometimes, you need to call the ORM to do a ``search``. This is not feasible wit
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
In this code snippet, it is needed because the master data actually depends on the localization
|
||||
In this code snippet, it is needed because the master data depends on the localization
|
||||
installed.
|
||||
|
||||
``function``
|
||||
~~~~~~~~~~~~
|
||||
|
||||
You might also need to execute python code when loading the data.
|
||||
You might also need to execute python code when loading data.
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
@ -303,36 +304,29 @@ Add X2many fields
|
||||
-----------------
|
||||
|
||||
**Reference**: the documentation related to this topic can be found in
|
||||
:ref:`Common ORM methods<reference/orm/models/crud>`.
|
||||
:class:`~odoo.fields.Command`.
|
||||
|
||||
If you need to add related data in a One2many or a Many2many field, you can do so by using the
|
||||
common ORM methods.
|
||||
:class:`~odoo.fields.Command` methods.
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
<odoo>
|
||||
<record id="id1" model="tutorial.example">
|
||||
<field name="related_ids" eval="[
|
||||
(0, 0, {
|
||||
Command.create({
|
||||
'name': 'My name',
|
||||
}),
|
||||
(0, 0, {
|
||||
Command.create({
|
||||
'name': 'Your name',
|
||||
}),
|
||||
(4, ref('model.xml_id')),
|
||||
Command.link(ref('model.xml_id')),
|
||||
]"/>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
id,parent_id:id,name
|
||||
"child1","module.parent","Name1"
|
||||
"child2","module.parent","Name2"
|
||||
"child3","module.parent","Name3"
|
||||
|
||||
.. exercise:: Create one new Property, but this time with some offers created directly inside the
|
||||
One2many field linking to the Offers.
|
||||
One2many field linked to the Offers.
|
||||
|
||||
Accessing the data
|
||||
==================
|
||||
|
@ -6,7 +6,8 @@ Advanced E: Python Unit Tests
|
||||
|
||||
.. tip:: This tutorial assumes you followed the Core Training.
|
||||
|
||||
To do the exercise, fetch the branch 14.0-core from the repository XXX.
|
||||
To do the exercise, fetch the branch 15.0-core from the
|
||||
`technical training solutions <https://github.com/odoo/technical-training-solutions/tree/15.0-core>`__ repository.
|
||||
It contains a basic module we will use as a starting point
|
||||
|
||||
**Reference**:
|
||||
@ -15,11 +16,11 @@ Advanced E: Python Unit Tests
|
||||
|
||||
Writing tests is a necessity for multiple reasons. Here is a non exhaustive list:
|
||||
|
||||
* Ensure it will not be broken in the future
|
||||
* Ensure code will not be broken in the future
|
||||
* Define the scope of your code
|
||||
* Give examples of use cases
|
||||
* It is one way to technically document the code
|
||||
* Help you develop by defining your goal before working towards it
|
||||
* Help your coding by defining your goal before working towards it
|
||||
|
||||
Running Tests
|
||||
=============
|
||||
@ -79,7 +80,7 @@ Integration Bots
|
||||
================
|
||||
|
||||
.. note:: This section is only for Odoo employees and people that are contributing to
|
||||
`github.com/odoo`. We highly recommend having your own CI if it is not the case.
|
||||
`github.com/odoo`. We highly recommend having your own CI otherwise.
|
||||
|
||||
When a test is written, it is important to make sure it always passes when modifications are
|
||||
applied to the source code. To automate this task, we use a development practice called
|
||||
@ -100,7 +101,7 @@ GitHub.
|
||||
|
||||
You can see the state of a commit/branch by filtering on the runbot dashboard.
|
||||
|
||||
A **bundle** is created for each branch. A bundle consists of a configuration and contains the
|
||||
A **bundle** is created for each branch. A bundle consists of a configuration and
|
||||
batches.
|
||||
|
||||
A **batch** is a set of builds, depending on the parameters of the bundle.
|
||||
@ -116,17 +117,17 @@ process. Generally it is used to split the post install tests in 4 parallel inst
|
||||
A sub-build is green if all the tests are passing and there are no errors/warnings logged.
|
||||
|
||||
.. note::
|
||||
* All tests are run whatever the modifications done. Correcting a typo in an error message or
|
||||
refactoring a whole module triggers the same tests. It will install all the modules. This means
|
||||
something might not work if Runbot green but your changes depend on something you don't depend
|
||||
on.
|
||||
* All tests are run regardless of the modifications done. Correcting a typo in an error message or
|
||||
refactoring a whole module triggers the same tests. All modules will be installed as well. This means
|
||||
something might not work even if the Runbot is green, i.e. your changes depend on a module that the
|
||||
module the changes are in doesn't depend on.
|
||||
* The localization modules (i.e. country-specific modules) are not installed on Runbot (except
|
||||
the generic one), some modules with external dependencies can be excluded also.
|
||||
* There is a nightly build running additional tests, like module operations, localization, single
|
||||
the generic one). Some modules with external dependencies can also be excluded.
|
||||
* There is a nightly build running additional tests: module operations, localization, single
|
||||
module installs, multi-builds for nondeterministic bugs, etc.
|
||||
These are not kept in the standard CI to shorten the time of execution.
|
||||
|
||||
You can also login on a build built by Runbot. There are 3 users usable: `admin`, `demo` and
|
||||
You can also login to a build built by Runbot. There are 3 users usable: `admin`, `demo` and
|
||||
`portal`. The password is the same as the login. This is useful to quickly test things on different
|
||||
versions without having to build it locally. The full logs are also available; these are used for
|
||||
monitoring.
|
||||
@ -138,9 +139,9 @@ You will most likely have to gain a little bit more experience before having the
|
||||
robodoo, but here are a few remarks anyways.
|
||||
|
||||
Robodoo is the guy spamming the CI status as tags on your PRs, but he is also the guy that kindly
|
||||
integrates your commits on the main repositories.
|
||||
integrates your commits into the main repositories.
|
||||
|
||||
When the last batch is green, the reviewer can ask robodoo to merge your PR (actually it is more
|
||||
When the last batch is green, the reviewer can ask robodoo to merge your PR (it is more
|
||||
a `rebase` than a `merge`). It will then go to the mergebot.
|
||||
|
||||
Mergebot
|
||||
@ -166,8 +167,8 @@ your branch on the target and rerun the tests locally.
|
||||
Modules
|
||||
=======
|
||||
|
||||
Because Odoo is modular, the tests need to be modular also. This means the modules are defined in
|
||||
the module that adds the functionality you add; and that tests cannot depend on functionality
|
||||
Because Odoo is modular, the tests need to be also modular. This means tests are defined in
|
||||
the module that adds the functionality you are adding in and tests cannot depend on functionality
|
||||
coming from modules your module doesn't depend on.
|
||||
|
||||
**Reference**: the documentation related to this topic can be found in
|
||||
@ -175,25 +176,25 @@ coming from modules your module doesn't depend on.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from odoo.tests.common import SavepointCase
|
||||
from odoo.tests.common import TransactionCase
|
||||
from odoo.tests import tagged
|
||||
|
||||
# The CI will run these tests after all the modules are installed,
|
||||
# not right after installing the one defining it.
|
||||
@tagged('post_install', '-at_install') # add `post_install` and remove `at_install`
|
||||
class PostInstallTestCase(SavepointCase):
|
||||
class PostInstallTestCase(TransactionCase):
|
||||
def test_01(self):
|
||||
...
|
||||
|
||||
@tagged('at_install') # this is the default
|
||||
class AtInstallTestCase(SavepointCase):
|
||||
class AtInstallTestCase(TransactionCase):
|
||||
def test_01(self):
|
||||
...
|
||||
|
||||
|
||||
If the behavior you want to test can be changed by the installation of another module, you need to
|
||||
ensure that the tag `at_install` is set; otherwise you can use the tag `post_install` to speed up
|
||||
the CI, and ensure it is not changed if it shouldn't.
|
||||
the CI and ensure it is not changed if it shouldn't.
|
||||
|
||||
Writing a test
|
||||
==============
|
||||
@ -233,27 +234,22 @@ import the test folder/module in the ``__init__.py`` of the module.
|
||||
├── __init__.py
|
||||
└── __manifest__.py
|
||||
|
||||
.. note:: Some older tests are extending ``odoo.tests.common.TransactionCase``, but they are less
|
||||
scalable. The difference is that the setup is done per test method and not per test class.
|
||||
The data changed are rollbacked between each test in `SavepointCase` to have the same behavior as
|
||||
in `TransactionCase`.
|
||||
|
||||
All the tests should extend ``odoo.tests.common.SavepointCase``. You usually define a
|
||||
``setUpClass``, and the tests. After doing the `setUpClass`, you have an `env` available on the
|
||||
All the tests should extend ``odoo.tests.common.TransactionCase``. You usually define a
|
||||
``setUpClass`` and the tests. After writing the `setUpClass`, you have an `env` available in the
|
||||
class and can start interacting with the ORM.
|
||||
|
||||
These test classes are built on top of the ``unittest`` python module.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from odoo.tests.common import SavepointCase
|
||||
from odoo.tests.common import TransactionCase
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.tests import tagged
|
||||
|
||||
# The CI will run these tests after all the modules are installed,
|
||||
# not right after installing the one defining it.
|
||||
@tagged('post_install', '-at_install')
|
||||
class EstateTestCase(SavepointCase):
|
||||
class EstateTestCase(TransactionCase):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
@ -285,12 +281,18 @@ These test classes are built on top of the ``unittest`` python module.
|
||||
with self.assertRaises(UserError):
|
||||
self.properties.forbidden_action_on_sold_property()
|
||||
|
||||
.. note:: For more readability, split your tests into multiple files depending on the scope of the
|
||||
tests. You can also have a Common class that most of the tests should inherit from; that common
|
||||
.. note:: For better readability, split your tests into multiple files depending on the scope of the
|
||||
tests. You can also have a Common class that most of the tests should inherit from; this common
|
||||
class can define the whole set up for the module. For instance in
|
||||
`account <https://github.com/odoo/odoo/blob/14.0/addons/account/tests/common.py>`__.
|
||||
|
||||
.. exercise:: Ensure no one can create an offer for a sold Property, and create a test for it.
|
||||
.. exercise:: Update the code so no one can:
|
||||
|
||||
- Create an offer for a sold property
|
||||
- Sell a property with no accepted offers on it
|
||||
|
||||
and create tests for both of these cases. Additionally check that selling a property that can
|
||||
be sold is correctly marked as sold after selling it.
|
||||
|
||||
|
||||
.. exercise:: Someone keeps breaking the reset of Garden Area and Orientation when you uncheck the
|
||||
|
@ -10,8 +10,9 @@ Advanced J: PDF Reports
|
||||
and have installed :ref:`wkhtmltopdf <howto/rdtraining/02_setup/install-wkhtmltopdf>`.
|
||||
|
||||
To follow the exercise, it is recommended that you fetch the branch
|
||||
14.0-core from the repository XXX, it
|
||||
contains a version of the module created during the core training we can use
|
||||
15.0-core from the
|
||||
`technical training solutions <https://github.com/odoo/technical-training-solutions/tree/15.0-core>`__ repository.
|
||||
It contains a version of the module created during the core training we can use
|
||||
as a starting point.
|
||||
|
||||
We were previously :ref:`introduced to QWeb <howto/rdtraining/15_qwebintro>`
|
||||
@ -95,9 +96,9 @@ If you don't have a set of data like this already, you can either:
|
||||
* Complete :ref:`howto/rdtraining/C_data` (if you haven't done so already) and add the extra
|
||||
cases to your demo data (you may need to create a new database to load in the demo data).
|
||||
* Manually create the data in your database.
|
||||
* Copy this `data file <https://github.com/odoo/technical-training-solutions/blob/14.0-J_reports/estate/data/estate_demo.xml>`__
|
||||
* Copy this `data file <https://github.com/odoo/technical-training-solutions/blob/15.0-J_reports/estate/data/estate_demo.xml>`__
|
||||
into a new directory (data) in your estate module and copy
|
||||
`these lines <https://github.com/odoo/technical-training-solutions/blob/14.0-J_reports/estate/__manifest__.py#L21-L23>`__
|
||||
`these lines <https://github.com/odoo/technical-training-solutions/blob/15.0-J_reports/estate/__manifest__.py#L21-L23>`__
|
||||
into your __manifest__.py file (you may need to create a new database to load in the demo data).
|
||||
|
||||
Before continuing, click through your data in your database and make sure your data is as expected.
|
||||
|
@ -10,8 +10,9 @@ Advanced K: Dashboards
|
||||
access to Odoo Enterprise features.
|
||||
|
||||
To follow the exercise, it is recommended that you fetch the branch
|
||||
14.0-core from the repository XXX, it
|
||||
contains a version of the module created during the core training we can use
|
||||
15.0-core from the
|
||||
`technical training solutions <https://github.com/odoo/technical-training-solutions/tree/15.0-core>`__ repository.
|
||||
It contains a version of the module created during the core training we can use
|
||||
as a starting point.
|
||||
|
||||
The term "Dashboard" is used in Odoo for objects that display data, but involves different
|
||||
@ -118,9 +119,9 @@ If you don't have a set of data like this already, you can either:
|
||||
* Complete :ref:`howto/rdtraining/C_data` (if you haven't done so already) and add the extra
|
||||
cases to your demo data (you may need to create a new database to load in the demo data).
|
||||
* Manually create the data in your database.
|
||||
* Copy this `data file <https://github.com/odoo/technical-training-solutions/blob/14.0-K_dashboard/estate/data/estate_demo.xml>`__
|
||||
* Copy this `data file <https://github.com/odoo/technical-training-solutions/blob/15.0-K_dashboard/estate/data/estate_demo.xml>`__
|
||||
into a new directory called ``data`` in your estate module and copy
|
||||
`these lines <https://github.com/odoo/technical-training-solutions/blob/14.0-K_dashboard/estate/__manifest__.py#L21-L23>`__
|
||||
`these lines <https://github.com/odoo/technical-training-solutions/blob/15.0-K_dashboard/estate/__manifest__.py#L21-L23>`__
|
||||
into your __manifest__.py file (you may need to create a new database to load in the demo data).
|
||||
|
||||
Click through your database data and make sure it is what you expect. Of course you can add the
|
||||
@ -208,7 +209,7 @@ no xml id is provided for a graph or pivot view then the default view will be us
|
||||
The cohort view will not work in the dashboard without a specific xml id. If you have already
|
||||
created some of these views then you are welcome to add them to your dashboard! Sample graph and
|
||||
pivot views are included in the
|
||||
`solution code <https://github.com/odoo/technical-training-solutions/blob/14.0-K_dashboard/estate/views/estate_property_views.xml#L169-L191>`__
|
||||
`solution code <https://github.com/odoo/technical-training-solutions/blob/15.0-K_dashboard/estate/views/estate_property_views.xml#L169-L191>`__
|
||||
that you are welcome to use as well.
|
||||
|
||||
.. exercise:: Add subviews.
|
||||
@ -319,7 +320,7 @@ View
|
||||
Now that we have our model, we can make its dashboard view. There is no difference to how its made
|
||||
except that its file is located in the ``report`` folder. Since it is a new model not linked to
|
||||
any other model, we will also have to add a new menuitem to view our dashboard. Typically SQL views
|
||||
are added under a first level menu called ``Reporting` (because it's a report, surprise!). Do you
|
||||
are added under a first level menu called *Reporting* (because it's a report, surprise!). Do you
|
||||
remember how to add a ``menuitem``? If not, revisit :ref:`howto/rdtraining/06_firstui`) again.
|
||||
|
||||
.. exercise:: Create report view.
|
||||
@ -352,3 +353,17 @@ from this report.
|
||||
|
||||
**Tip 2** If you have a field that you do not want as a measure (i.e. in your pivot or
|
||||
graph views), then you can add ``store=False`` to it and it will not show.
|
||||
|
||||
**Tip 3** If you have a SQL View that depends on context then instead of overriding
|
||||
``BaseModel.init()`` set the ``_table_query`` property::
|
||||
|
||||
@property
|
||||
def _table_query(self):
|
||||
return 'SELECT %s FROM %s' % (self._select(), self._from())
|
||||
|
||||
The *select* and *from* methods remain the same.
|
||||
|
||||
`Here is an example <https://github.com/odoo/odoo/blob/14.0/addons/account/report/account_invoice_report.py>`__
|
||||
of a report that depends on the currently selected companies (in a multi-company environment) context to
|
||||
determine the currency exchange rates to use for accurately displaying amounts when the selected companies
|
||||
have different currencies.
|
@ -611,7 +611,7 @@ Method decorators
|
||||
=================
|
||||
|
||||
.. automodule:: odoo.api
|
||||
:members: depends, depends_context, constrains, onchange, returns, autovacuum, model, model_create_multi
|
||||
:members: depends, depends_context, constrains, onchange, returns, autovacuum, model, model_create_multi, ondelete
|
||||
|
||||
.. .. currentmodule:: odoo.api
|
||||
|
||||
|
@ -7,6 +7,12 @@ Javascript Modules
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
javascript/hooks
|
||||
javascript/registries
|
||||
javascript/services
|
||||
|
||||
javascript/command_palette
|
||||
|
||||
javascript/javascript_cheatsheet
|
||||
javascript/javascript_reference
|
||||
javascript/mobile
|
||||
|
301
content/developer/reference/javascript/command_palette.rst
Normal file
@ -0,0 +1,301 @@
|
||||
=========================
|
||||
Command & Command Palette
|
||||
=========================
|
||||
|
||||
Overview
|
||||
========
|
||||
|
||||
A command is a link between an action (piece of code) and a possible hotkey.
|
||||
It can be registered and then called when its hotkey is pressed.
|
||||
Commands also appear in the Command Palette, a convenient tool to quickly access and trigger things in Odoo.
|
||||
Commands without hotkey can only be triggered with the Command Palette.
|
||||
|
||||
Command
|
||||
=======
|
||||
|
||||
A command is defined as:
|
||||
|
||||
.. code-block:: ts
|
||||
|
||||
type Command = {
|
||||
name: string,
|
||||
action: () => (void | CommandConfiguration),
|
||||
category?: string,
|
||||
hotkey?: string
|
||||
}
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
// example of a command
|
||||
const sayHelloCommand = {
|
||||
"Say Hello Command",
|
||||
() => console.log("hello"),
|
||||
"useless category",
|
||||
"ctrl-h"
|
||||
};
|
||||
|
||||
The most important part of the command is the action, which is a function to execute when the command
|
||||
is triggered. If the action doesn't return anything, the command palette will close after the execution.
|
||||
If it returns a ``CommandPaletteConfig``, it updates the palette content based on this config. More on that
|
||||
later.
|
||||
|
||||
Command Palette
|
||||
===============
|
||||
|
||||
Commands also appear in the Command Palette.
|
||||
Commands without hotkey can only be triggered with the Command Palette.
|
||||
|
||||
.. image:: images/command_palette.png
|
||||
:align: center
|
||||
:alt: the command palette
|
||||
|
||||
Fundamentally, the Command Palette exposes a list of command items. A simple component that
|
||||
holds a command.
|
||||
|
||||
It can be opened by pressing the hotkey ``Control+K``.
|
||||
|
||||
By default, it displays:
|
||||
|
||||
* the commands you registered in the dedicated service
|
||||
* any visible elements in the ``ui.activeElement`` that are accessible through a ``[data-hotkey]`` attribute
|
||||
|
||||
.. _command Service:
|
||||
|
||||
Command Service
|
||||
===============
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
|
||||
* - Technical name
|
||||
- Dependencies
|
||||
* - ``command``
|
||||
- ``dialog`` , ``hotkey`` , ``ui``
|
||||
|
||||
The ``command`` service offers a way to register new commands.
|
||||
|
||||
API
|
||||
---
|
||||
|
||||
.. code-block:: ts
|
||||
|
||||
add(name: string, action: () => void, options: Object?): () => void;
|
||||
|
||||
Register a command to the command palette. It returns a cleanup function that can be called to
|
||||
unregister the command.
|
||||
|
||||
+-----------------------+------------------------------+---------------------------------------------------------+
|
||||
| key | type | description |
|
||||
+=======================+==============================+=========================================================+
|
||||
| name | ``string`` | Command name |
|
||||
+-----------------------+------------------------------+---------------------------------------------------------+
|
||||
| action | ``Function`` | Action to execute on command triggering |
|
||||
+-----------------------+------------------------------+---------------------------------------------------------+
|
||||
| options.category | ``string?`` | Define the category of the command |
|
||||
+-----------------------+------------------------------+---------------------------------------------------------+
|
||||
| options.hokey | ``string?`` | Hotkey to trigger the command |
|
||||
+-----------------------+------------------------------+---------------------------------------------------------+
|
||||
| options.activeElement | ``HtmlElement?`` | HTMLElement from which commands and hotkey are fetched |
|
||||
+-----------------------+------------------------------+---------------------------------------------------------+
|
||||
| options.global | ``boolean?`` | Ignore the active element and make it always accessible |
|
||||
+-----------------------+------------------------------+---------------------------------------------------------+
|
||||
|
||||
.. note::
|
||||
|
||||
A command is scoped to a DOM element. This is why there is this idea of activeElement.
|
||||
|
||||
|
||||
.. code-block:: ts
|
||||
|
||||
getCommands(activeElement): Command[]
|
||||
|
||||
Get all the commands scoped to the activeElement.
|
||||
|
||||
+----------------+---------------+---------------------------------------------------------+
|
||||
| key | type | description |
|
||||
+================+===============+=========================================================+
|
||||
| activeElement | HtmlElement | HTMLElement from which commands are scoped and fetched |
|
||||
+----------------+---------------+---------------------------------------------------------+
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
const commandService = useService("command");
|
||||
const commandCleanUp = commandService.add({ "My Command 1", () => { /* do stuff */ } });
|
||||
commandCleanUp(); // If you want to unregister it
|
||||
|
||||
.. code-block:: ts
|
||||
|
||||
openPalette(config: Object): void
|
||||
|
||||
Opens a command palette with the given configuration. See Later.
|
||||
|
||||
+-----------------------------------+------------------------------+-----------------------------------------------------------------+
|
||||
| key | type | description |
|
||||
+===================================+==============================+=================================================================+
|
||||
| config.providers | ``() => (void | config)`` | Command item providers |
|
||||
+-----------------------------------+------------------------------+-----------------------------------------------------------------+
|
||||
| config.placeholder | ``string?`` | Search placeholder |
|
||||
+-----------------------------------+------------------------------+-----------------------------------------------------------------+
|
||||
| config.namespace | ``string?`` | Add a starting namespace in the search |
|
||||
+-----------------------------------+------------------------------+-----------------------------------------------------------------+
|
||||
| config.categoriesByNamespace | ``{[namespace]: string[]}?`` | Map between the namespaces and the categories |
|
||||
+-----------------------------------+------------------------------+-----------------------------------------------------------------+
|
||||
| config.emptyMessageByNamespace | ``{[namespace]: string}?`` | Map between the namespaces and their message for empty content |
|
||||
+-----------------------------------+------------------------------+-----------------------------------------------------------------+
|
||||
| config.footerTemplate | ``string?`` | Owl template identifier for the footer |
|
||||
+-----------------------------------+------------------------------+-----------------------------------------------------------------+
|
||||
|
||||
.. _useCommand hook:
|
||||
|
||||
Hook: useCommand
|
||||
================
|
||||
|
||||
A hook that ensures your registration exists only when your component is mounted by registering it
|
||||
and unregistering it at the right lifecycle time.
|
||||
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
As long as you only need to add commands to the default command palette and you're inside an Owl Component,
|
||||
you should use this.
|
||||
|
||||
If you wish to add more complex behavior like namespace symbols or actions opening other palettes, you should go
|
||||
to the advanced section.
|
||||
|
||||
API
|
||||
---
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
useCommand(command: Command): void
|
||||
|
||||
Register a command.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
class MyComponent extends Component {
|
||||
setup() {
|
||||
useCommand({
|
||||
name: "My Command 1",
|
||||
action: () => {
|
||||
// code when command 1 is executed
|
||||
}
|
||||
});
|
||||
useCommand({
|
||||
name: "My Super Command",
|
||||
hotkey: "shift-home",
|
||||
action: () => {
|
||||
// code when super command is executed
|
||||
// note that the super command can also get executed with the hotkey "shift-home"
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
.. _commandCategory Registry:
|
||||
|
||||
Registry: Command Category
|
||||
==========================
|
||||
|
||||
The ``command_categories`` gathers the command categories.
|
||||
|
||||
The keys in this registry can be used in two differents ways in order to organize the command palette:
|
||||
|
||||
*
|
||||
when registering a new command: ``useCommand({ category: "key", ... })``.
|
||||
|
||||
*
|
||||
applied as an attribute in the document: ``[data-command-category="key"]``.
|
||||
N.B.: if an element should appear in the command palette
|
||||
(e.g. it has a ``[data-hotkey]`` attribute), the closest parent (including itself)
|
||||
having a ``[data-command-category]`` will provide the category key to seek for in the registry.
|
||||
|
||||
API
|
||||
---
|
||||
!! does it still exist ? !!
|
||||
!! there seem to be a namespace !!
|
||||
|
||||
|
||||
Usage
|
||||
------
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
import { registry } from "@web/core/registry";
|
||||
registry.category("command_categories").add("new_category")
|
||||
registry.category("command_categories").add("another_new_category", { label: "Name of the category" })
|
||||
|
||||
Available Categories
|
||||
--------------------
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
|
||||
* - Key
|
||||
- Sequence
|
||||
- Description
|
||||
* - ``main``
|
||||
- 10
|
||||
- Main Commands
|
||||
* - ``app``
|
||||
- 20
|
||||
- Current App Commands
|
||||
* - ``actions``
|
||||
- 30
|
||||
- More Actions
|
||||
* - ``navbar``
|
||||
- 40
|
||||
- NavBar
|
||||
* - ``default``
|
||||
- 100
|
||||
- Other commands
|
||||
|
||||
.. note::
|
||||
The sequence is a registry option, to define an order.
|
||||
|
||||
.. _commandProvider Registry:
|
||||
|
||||
Registry: Command Provider
|
||||
==========================
|
||||
|
||||
API
|
||||
---
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
.. _commandEmptyList Registry:
|
||||
|
||||
Registry: Command Empty List
|
||||
============================
|
||||
|
||||
API
|
||||
---
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
Advanced Topics
|
||||
===============
|
||||
|
||||
The Command Palette therefore requires a configuration to be opened. However, there exists a default configuration.
|
||||
This `default` palette can be opened by . The ``CommandPaletteConfig`` part is left for
|
||||
the advanced section.
|
||||
|
||||
A ``CommandPaletteConfig`` is defined as
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
type CommandPaletteConfig = {
|
||||
categoriesByNamespace?: {[namespace]: string[]};
|
||||
namespace?: string;
|
||||
emptyMessageByNamespace?: {[namespace]: string};
|
||||
footerTemplate?: string;
|
||||
placeholder?: string;
|
||||
providers: Provider[];
|
||||
}
|
||||
|
6
content/developer/reference/javascript/hooks.rst
Normal file
@ -0,0 +1,6 @@
|
||||
Hooks
|
||||
=====
|
||||
|
||||
What is a hook ?
|
||||
|
||||
:ref:`useCommand<useCommand hook>`
|