Compare commits
16 Commits
master-x_a
...
master-ama
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
70e1dac884 |
[REM] sale_amazon: update not necessary anymore
task-2694222 |
||
|
|
4837aa7eef |
[ADD] accounting/l10n: new egyptian localization and einvoicing section
task-id 2858349
closes odoo/documentation#2148
X-original-commit:
|
||
|
|
75368f52e8 |
[IMP] accounting: add note about bank sync not available for trial db
Added a note to specify that bank synchronization is not available on trial databases
closes odoo/documentation#2138
X-original-commit:
|
||
|
|
646fc412d0 |
[FIX] homepage: fix the link to the external API page
The page was moved from odoo.rst to external_api.rst with commit |
||
|
|
235bcf85f2 |
[IMP] maintain: add note in hosting changes (on-premise to online)
task-id 2869953
closes odoo/documentation#2129
X-original-commit:
|
||
|
|
e8e75d4175 |
[IMP] payment_acquirers: explain the different additional features
task-2862636
closes odoo/documentation#2121
X-original-commit:
|
||
|
|
869d8d1961 |
[IMP] general/payment_acquirers: authorize support refund from odoo
Add 'x' to make evident that Authorize.net supports refunds directly from odoo. Task - 2712287 Task (on payment) - 2678757 closes odoo/documentation#2091 Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com> |
||
|
|
0f2b82cb37 |
[IMP] install/deploy: serve static file/attachment
Odoo is compatible with X-Sendfile (apache) and X-Accel (nginx). They are web server extension that can be used by the web application (Odoo) to delegate serving local files to the web server (apache/nginx). We use those extension to stream attachments. The documentation now explains what is X-Sendfile/X-Accel and how to configure each web server. Along those changes, the few sentences about serving static files have been reworded and now include various configuration examples. closes odoo/documentation#2083 Task: 2801675 Related: odoo/odoo#88134 Related: odoo/enterprise#26191 Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com> |
||
|
|
121be6a81e |
[ADD] payment_acquirers: add configuration steps for Flutterwave
task-2759117 closes odoo/documentation#1939 Related: odoo/odoo#85514 Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com> |
||
|
|
978e4b3bac |
[FIX] conf: dynamic LaTeX releasename
closes odoo/documentation#2116
X-original-commit:
|
||
|
|
e9943acebe |
[IMP] amazon: migrate to SPAPI
Starting July 2022, Amazon WMS API is deprecated and we need to use the Selling Partners API.
This brings changes in the authentication flow that are explained.
task-2466636
closes odoo/documentation#2107
X-original-commit:
|
||
|
|
e7aac2eed3 |
[IMP] payment: update SIX screenshots
closes odoo/documentation#2101
X-original-commit:
|
||
|
|
8ffc93b3c1 |
[IMP] helpdesk: update flow and images for reinvoicing time
closes odoo/documentation#2097
X-original-commit:
|
||
|
|
3da237343f |
[IMP] developer: new API for flush() and invalidate()
closes odoo/documentation#1909 Signed-off-by: Raphael Collet <rco@odoo.com> |
||
|
|
a0a4a2da98 |
[FW][IMP] calendar: update Google Calendar sync screenshots
Task ID: 2685658 closes odoo/documentation#2090 Forward-port-of: odoo/documentation#1982 Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com> |
||
|
|
f93aeec22f |
[IMP] payment_acquirers/stripe: support refund
Add a check to indicate that Stripe supports refunds. closes odoo/documentation#2086 Related: odoo/odoo#92235 Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com> |
2
conf.py
|
|
@@ -252,7 +252,7 @@ latex_elements = {
|
|||
'tableofcontents': '', # no TOC
|
||||
|
||||
# Output manually in latex docs
|
||||
'releasename': '14.0',
|
||||
'releasename': release,
|
||||
}
|
||||
|
||||
latex_additional_files = ['static/latex/odoo.sty']
|
||||
|
|
|
|||
|
|
@@ -11,8 +11,6 @@ Depending on the platforms, you have to do it by yourself or contact our support
|
|||
From on-premises to Odoo Online
|
||||
===============================
|
||||
|
||||
.. warning:: Odoo Online is not compatible with **non-standard apps**.
|
||||
|
||||
1. Create a :ref:`duplicate <duplicate_premise>` of your database: in this duplicate, uninstall all the **non-standard apps**.
|
||||
2. Grab a "dump with filestore" of your database by using the Database Manager.
|
||||
3. **If you have time constraints, contact us earlier to schedule the transfer.**
|
||||
|
|
@@ -20,6 +18,11 @@ From on-premises to Odoo Online
|
|||
5. We will make sure your database is compatible and upload it to our cloud. In case of technical issues, we will get in touch with you.
|
||||
6. It's done!
|
||||
|
||||
.. important::
|
||||
- Odoo Online is not compatible with **non-standard apps**.
|
||||
- The database you are moving to Odoo Online must be in a :doc:`supported version
|
||||
<supported_versions>`.
|
||||
|
||||
From on-premises to Odoo.sh
|
||||
===========================
|
||||
|
||||
|
|
|
|||
|
|
@@ -21,6 +21,9 @@ To connect to the banks, Odoo uses multiple web-services:
|
|||
- **Salt Edge**: Europe (:doc:`more information <saltedge>`)
|
||||
- **Ponto**: Europe (:doc:`more information <ponto>`)
|
||||
|
||||
.. important::
|
||||
- Bank synchronization is not available for trial databases.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
|
|
|
|||
|
|
@@ -12,6 +12,7 @@ Localizations
|
|||
localizations/chile
|
||||
localizations/colombia
|
||||
localizations/colombia_ES
|
||||
localizations/egypt
|
||||
localizations/france
|
||||
localizations/germany
|
||||
localizations/indonesia
|
||||
|
|
|
|||
|
|
@@ -0,0 +1,241 @@
|
|||
=====
|
||||
Egypt
|
||||
=====
|
||||
|
||||
.. _egypt/installation:
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
:ref:`Install <general/install>` the following modules to get all the features of the Egyptian
|
||||
localization:
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
|
||||
* - Name
|
||||
- Technical name
|
||||
- Description
|
||||
* - :guilabel:`Egypt - Accounting`
|
||||
- ``l10n_eg``
|
||||
- Default :doc:`fiscal localization package <../overview/fiscal_localization_packages>`
|
||||
* - :guilabel:`Egyptian E-invoice Integration`
|
||||
- ``l10n_eg_edi_eta``
|
||||
- :ref:`Egyptian Tax Authority (ETA) e-invoicing integration <egypt/e-invoicing>`
|
||||
|
||||
.. _egypt/e-invoicing:
|
||||
|
||||
Egyptian e-invoicing
|
||||
====================
|
||||
|
||||
Odoo is compliant with the **Egyptian Tax Authority (ETA) e-invoicing** requirements.
|
||||
|
||||
.. important::
|
||||
Egyptian e-invoicing is available from Odoo 15.0. If needed, :doc:`upgrade
|
||||
</administration/upgrade>` your database.
|
||||
|
||||
.. seealso::
|
||||
- `Video: Egypt E-invoicing <https://www.youtube.com/watch?v=NXuBPLR4pVw>`_
|
||||
- :doc:`/administration/upgrade`
|
||||
|
||||
.. _egypt/e-invoicing-eta-portal:
|
||||
|
||||
Register Odoo on your ETA portal
|
||||
--------------------------------
|
||||
|
||||
You must register your Odoo ERP system on your ETA portal to get your API credentials. You need
|
||||
these codes to :ref:`configure your Odoo Accounting app <egypt/e-invoicing-configuration>`.
|
||||
|
||||
Access your company profile on the ETA portal by clicking on :guilabel:`View Taxpayer Profile`.
|
||||
|
||||
.. image:: egypt/taxpayer-profile.png
|
||||
:align: center
|
||||
:alt: Clicking on "View Taxpayer Profile" on an ETA invoicing portal
|
||||
|
||||
Next, go to the :guilabel:`Representatives` section and then click on :guilabel:`Register ERP`.
|
||||
Fill out the :guilabel:`ERP Name` (e.g., ``Odoo``) and leave the other fields empty.
|
||||
|
||||
.. image:: egypt/add-erp-system.png
|
||||
:align: center
|
||||
:alt: Filling out of the form to register an ERP system on the ETA portal.
|
||||
|
||||
Once successfully registered, the website displays your API credentials:
|
||||
|
||||
- Client ID
|
||||
- Client Secret 1
|
||||
- Client Secret 2
|
||||
|
||||
.. note::
|
||||
- ETA should give you a username and a password to access their online portal.
|
||||
- Ask ETA to provide you with preproduction portal access as well.
|
||||
- These codes are confidential and should be stored safely.
|
||||
|
||||
.. _egypt/e-invoicing-configuration:
|
||||
|
||||
Configuration on Odoo
|
||||
---------------------
|
||||
|
||||
To connect your Odoo database to your ETA portal account, go to :menuselection:`Accounting -->
|
||||
Configuration --> Settings --> ETA E-Invoicing Settings`, and set the :guilabel:`ETA Client ID` and
|
||||
:guilabel:`ETA Secret` that you retrieved when you :ref:`registered Odoo on your ETA portal
|
||||
<egypt/e-invoicing-eta-portal>`. Set an invoicing threshold if needed.
|
||||
|
||||
.. image:: egypt/eta-api-integration.png
|
||||
:align: center
|
||||
:alt: Configuration of the ETA E-Invoicing credentials in Odoo Accounting
|
||||
|
||||
.. important::
|
||||
- **Test on your preproduction portal** before starting to issue real invoices on the production
|
||||
ETA portal.
|
||||
- **Credentials** for preproduction and production environments are different. Make sure to
|
||||
update them on Odoo when you move from one environment to another.
|
||||
- If not done yet, fill out your company details with your company's full address, country, and
|
||||
Tax ID.
|
||||
|
||||
.. _egypt/e-invoicing-eta-codes:
|
||||
|
||||
ETA codes
|
||||
~~~~~~~~~
|
||||
|
||||
E-invoicing works with a set of codes provided by the ETA. You can use the `ETA documentation
|
||||
<https://sdk.preprod.invoicing.eta.gov.eg/codes/>`_ to code your business attributes.
|
||||
|
||||
Most of these codes are handled automatically by Odoo, provided that your :ref:`branches
|
||||
<egypt/e-invoicing-branches>`, :ref:`customers <egypt/e-invoicing-customers>`, and :ref:`products
|
||||
<egypt/e-invoicing-products>` are correctly configured.
|
||||
|
||||
- Company Information:
|
||||
|
||||
- Company Tax ID
|
||||
- | Branch ID
|
||||
| If you have only one branch, use ``0`` as the branch code.
|
||||
- Activity type Code
|
||||
|
||||
- Other Information:
|
||||
|
||||
- | Product Codes
|
||||
| Your company's products should be coded and matched with their **GS1** or **EGS** codes.
|
||||
- | Tax Codes
|
||||
| Most of the taxes codes are already configured on Odoo in the :guilabel:`ETA Code (Egypt)`
|
||||
field. We advise you to make sure these codes match your company's taxes.
|
||||
|
||||
.. seealso::
|
||||
- `Egyptian eInvoicing & eReceipt SDK - Code Tables
|
||||
<https://sdk.preprod.invoicing.eta.gov.eg/codes/>`_
|
||||
- :doc:`../../taxation/taxes/taxes`
|
||||
|
||||
.. _egypt/e-invoicing-branches:
|
||||
|
||||
Branches
|
||||
~~~~~~~~
|
||||
|
||||
Create a contact and a journal for each branch of your company and configure its ETA settings.
|
||||
|
||||
To do so, go to :menuselection:`Accounting --> Configuration --> Journals`, then click on
|
||||
:guilabel:`Create`.
|
||||
|
||||
Name the journal according to your company's branch and set the :guilabel:`Type` as
|
||||
:guilabel:`Sales`. Next, open the :menuselection:`Advanced Settings` tab and fill out the
|
||||
:guilabel:`Egyptian ETA settings` section:
|
||||
|
||||
- In the :guilabel:`Branch` field, select the branch's contact or create it.
|
||||
- Set the :guilabel:`ETA Activity Code`.
|
||||
- Set the :guilabel:`ETA Branch ID` (use ``0`` if you have one branch only).
|
||||
|
||||
.. image:: egypt/branch-journal.png
|
||||
:align: center
|
||||
:alt: Sales journal configuration of an Egyptian company's branch
|
||||
|
||||
.. important::
|
||||
The contact selected in the :guilabel:`Branch` field must be set as a :guilabel:`Company`
|
||||
(**not** as an :guilabel:`Individual`), and the :guilabel:`Address` and :guilabel:`Tax ID` fields
|
||||
must be filled out.
|
||||
|
||||
.. _egypt/e-invoicing-customers:
|
||||
|
||||
Customers
|
||||
~~~~~~~~~
|
||||
|
||||
Make sure your customers' contact forms are correctly filled out so your e-invoices are valid:
|
||||
|
||||
- contact type: :guilabel:`Individual`: or :guilabel:`Company`:
|
||||
- :guilabel:`Country`:
|
||||
- :guilabel:`Tax ID`: Tax ID or Company registry for companies. National ID for individuals.
|
||||
|
||||
.. note::
|
||||
You can edit your customers' contact forms by going to :menuselection:`Accounting --> Customers
|
||||
--> Customers`.
|
||||
|
||||
.. _egypt/e-invoicing-products:
|
||||
|
||||
Products
|
||||
~~~~~~~~
|
||||
|
||||
Make sure your products are correctly configured so your e-invoices are valid:
|
||||
|
||||
- :guilabel:`Product Type`: storable products, consumables, or services.
|
||||
- :guilabel:`Unit of Measure`: if you also use Odoo Inventory and have enabled :doc:`Units of
|
||||
Measure </applications/inventory_and_mrp/inventory/management/products/uom>`.
|
||||
- :guilabel:`Barcode`: **GS1** or **EGS** barcode
|
||||
- :guilabel:`ETA Item code` (under the :menuselection:`Accounting` tab): if the barcode doesn't
|
||||
match your ETA item code.
|
||||
|
||||
.. note::
|
||||
You can edit your products by going to :menuselection:`Accounting --> Customers --> Products`.
|
||||
|
||||
.. _egypt/e-invoicing-usb-authentication:
|
||||
|
||||
USB authentication
|
||||
------------------
|
||||
|
||||
Each person who needs to electronically sign invoices needs a specific USB key to authenticate and
|
||||
send invoices to the ETA portal through an ERP.
|
||||
|
||||
.. note::
|
||||
You can contact the :abbr:`ETA (Egyptian Tax Authority)` or `Egypt Trust
|
||||
<https://www.egypttrust.com/>`_ to get these USB keys.
|
||||
|
||||
.. _egypt/e-invoicing-local-proxy:
|
||||
|
||||
Install Odoo as a local proxy on your computer
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
An Odoo local server works as a bridge between your computer and your Odoo database hosted online.
|
||||
|
||||
Download the Odoo Community installer from the page https://www.odoo.com/page/download and start the
|
||||
installation on your computer.
|
||||
|
||||
Select :guilabel:`Local Proxy Mode` as the type of install.
|
||||
|
||||
.. image:: egypt/install-odoo-local-proxy.png
|
||||
:align: center
|
||||
:alt: Selection of "Local Proxy Mode" during the installation of Odoo Community.
|
||||
|
||||
.. note::
|
||||
This installation of Odoo only works as a server and does not install any Odoo apps on your
|
||||
computer.
|
||||
|
||||
Once the installation is complete, the installer displays your **access token** for the Odoo Local
|
||||
Proxy. Copy the token and save it in a safe place for later use.
|
||||
|
||||
.. seealso::
|
||||
- `Odoo: Download Odoo <https://www.odoo.com/page/download>`_
|
||||
- :doc:`/administration/install/install`
|
||||
|
||||
.. _egypt/e-invoicing-usb-configuration:
|
||||
|
||||
Configure the USB key
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Once the local proxy server is installed on your computer, you can link it with your Odoo database.
|
||||
|
||||
#. Go to :menuselection:`Accounting --> Configurations --> Thumb Drive` and click on
|
||||
:guilabel:`Create`.
|
||||
#. Input a :guilabel:`Company` name, the :guilabel:`ETA USB Pin` given to you by your USB key
|
||||
provider, and the :guilabel:`Access Token` provided at the end of the :ref:`local proxy
|
||||
installation <egypt/e-invoicing-local-proxy>`, then click on :guilabel:`Save`.
|
||||
#. Click on :guilabel:`Get certificate`.
|
||||
|
||||
.. image:: egypt/thumb-drive.png
|
||||
:align: center
|
||||
:alt: Creating a new thumb drive for the e-invoicing of an egyptian company.
|
||||
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
|
@@ -12,6 +12,7 @@ Payment acquirers (credit cards, online payments)
|
|||
payment_acquirers/alipay
|
||||
payment_acquirers/authorize
|
||||
payment_acquirers/buckaroo
|
||||
payment_acquirers/flutterwave
|
||||
payment_acquirers/mollie
|
||||
payment_acquirers/ogone
|
||||
payment_acquirers/paypal
|
||||
|
|
@@ -52,43 +53,76 @@ the payments that go directly on the bank account and follow the usual reconcili
|
|||
Online payment acquirers
|
||||
------------------------
|
||||
|
||||
+-------------------------------+----------------------+------------+-----------------+-----------+
|
||||
| | Payment flow | Save cards | Capture amount | Refund |
|
||||
| | | | manually | from Odoo |
|
||||
+===============================+======================+============+=================+===========+
|
||||
| :doc:`Adyen | Payment from Odoo | |V| | |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| | |V| | |
|
||||
| <payment_acquirers/stripe>` | acquirer website | | | |
|
||||
+-------------------------------+----------------------+------------+-----------------+-----------+
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:stub-columns: 1
|
||||
:widths: auto
|
||||
|
||||
* -
|
||||
- Payment flow
|
||||
- :ref:`Save cards for later <payment_acquirers/features/tokenization>`
|
||||
- :ref:`Manual capture <payment_acquirers/features/manual_capture>`
|
||||
- :ref:`Refunds <payment_acquirers/features/refund>`
|
||||
* - :doc:`Adyen <payment_acquirers/adyen>`
|
||||
- Payment from Odoo
|
||||
- |V|
|
||||
- Full only
|
||||
- Full and partial
|
||||
* - :doc:`Alipay <payment_acquirers/alipay>`
|
||||
- Payment from the acquirer website
|
||||
-
|
||||
-
|
||||
-
|
||||
* - :doc:`Authorize.Net <payment_acquirers/authorize>`
|
||||
- Payment from Odoo
|
||||
- |V|
|
||||
- Full only
|
||||
- Full only
|
||||
* - :doc:`Buckaroo <payment_acquirers/buckaroo>`
|
||||
- Payment from the acquirer website
|
||||
-
|
||||
-
|
||||
-
|
||||
* - :doc:`Flutterwave <payment_acquirers/flutterwave>`
|
||||
- Payment from the acquirer website
|
||||
- |V|
|
||||
-
|
||||
-
|
||||
* - :doc:`Mollie <payment_acquirers/mollie>`
|
||||
- Payment from the acquirer website
|
||||
-
|
||||
-
|
||||
-
|
||||
* - :doc:`Ogone <payment_acquirers/ogone>`
|
||||
- Payment from the acquirer website
|
||||
- |V|
|
||||
-
|
||||
-
|
||||
* - :doc:`PayPal <payment_acquirers/paypal>`
|
||||
- Payment from the acquirer website
|
||||
-
|
||||
-
|
||||
-
|
||||
* - PayU Latam
|
||||
- Payment from the acquirer website
|
||||
-
|
||||
-
|
||||
-
|
||||
* - PayUMoney
|
||||
- Payment from the acquirer website
|
||||
-
|
||||
-
|
||||
-
|
||||
* - :doc:`SIPS <payment_acquirers/sips>`
|
||||
- Payment from the acquirer website
|
||||
-
|
||||
-
|
||||
-
|
||||
* - :doc:`Stripe <payment_acquirers/stripe>`
|
||||
- Payment from the acquirer website
|
||||
- |V|
|
||||
- Full only
|
||||
- Full and partial
|
||||
|
||||
.. |V| replace:: ✔
|
||||
|
||||
|
|
@@ -112,6 +146,87 @@ Bank payments
|
|||
directly. :doc:`Click here <../finance/accounting/receivables/customer_payments/batch_sdd>` for
|
||||
more information about this payment method.
|
||||
|
||||
.. _payment_acquirers/features:
|
||||
|
||||
Additional features
|
||||
===================
|
||||
|
||||
Some payment acquirers support additional features for the payment flow. Refer to the :ref:`table
|
||||
above <payment_acquirers/online_acquirers>` to check if your payment acquirer supports these
|
||||
features.
|
||||
|
||||
.. _payment_acquirers/features/tokenization:
|
||||
|
||||
Save cards for later
|
||||
--------------------
|
||||
|
||||
If your payment acquirer supports this feature, customers can choose to save their card details as a
|
||||
**payment token** in Odoo. When they do, they will not have to enter their card details again when
|
||||
making a subsequent payment. This is particularly useful for the eCommerce conversion rate and for
|
||||
subscriptions that use recurring payments.
|
||||
|
||||
Enable this feature by navigating to the :guilabel:`Configuration` tab from your payment acquirer
|
||||
and by ticking the :guilabel:`Allow Saving Payment Methods` checkbox.
|
||||
|
||||
.. note::
|
||||
You remain fully PCI-compliant when you enable this feature because Odoo does not store the card
|
||||
details directly. Instead, it creates a payment token that only holds a reference to the card
|
||||
details stored on the payment acquirer's server.
|
||||
|
||||
.. _payment_acquirers/features/manual_capture:
|
||||
|
||||
Manual capture
|
||||
--------------
|
||||
|
||||
If your payment acquirer supports this feature, you can authorize and capture payments in two steps
|
||||
instead of one. When you authorize a payment, the funds are reserved on the customer's payment
|
||||
method but they are not immediately charged. The charge is only made when you manually capture the
|
||||
payment later on. You can also void the authorization to release the reserved funds; this is
|
||||
equivalent to a regular cancellation. Capturing payments manually can prove itself useful in many
|
||||
situations:
|
||||
|
||||
- Receive the payment confirmation and wait until the order is shipped to capture the payment.
|
||||
- Review and verify that orders are legitimate before the payment is completed and the fulfillment
|
||||
process starts.
|
||||
- Avoid potentially high processing fees for cancelled payments: payment acquirers will not charge
|
||||
you for voiding an authorization.
|
||||
- Hold a security deposit to return later, minus any deductions (e.g., after a damage).
|
||||
|
||||
Enable this feature by navigating to the :guilabel:`Configuration` tab from your payment acquirer
|
||||
and by ticking the :guilabel:`Capture Amount Manually` checkbox.
|
||||
|
||||
To capture the payment after it was authorized, go to the related sales order or invoice and click
|
||||
on the :guilabel:`CAPTURE TRANSACTION` button. To release the funds, click on the :guilabel:`VOID
|
||||
TRANSACTION` button.
|
||||
|
||||
.. note::
|
||||
- Some payment acquirers support capturing only part of the authorized amount. The remaining
|
||||
amount can then be either captured or voided. These acquirers have the value **Full and
|
||||
partial** in the :ref:`table above <payment_acquirers/online_acquirers>`. The acquirers that
|
||||
only support capturing or voiding the full amount have the value **Full only**.
|
||||
- The funds are likely not reserved forever. After a certain time, they may be automatically
|
||||
released back to the customer's payment method. Refer to your payment acquirer's documentation
|
||||
for the exact reservation duration.
|
||||
- Odoo does not support this feature for all payment acquirers but some allow the manual capture
|
||||
from their website interface.
|
||||
|
||||
.. _payment_acquirers/features/refund:
|
||||
|
||||
Refunds
|
||||
-------
|
||||
|
||||
If your payment acquirer supports this feature, you can refund payments directly from Odoo. It does
|
||||
not need to be enabled first. To refund a customer payment, navigate to it and click on the
|
||||
:guilabel:`REFUND` button.
|
||||
|
||||
.. note::
|
||||
- Some payment acquirers support refunding only part of the amount. The remaining amount can then
|
||||
optionally be refunded too. These acquirers have the value **Full and partial** in the
|
||||
:ref:`table above <payment_acquirers/online_acquirers>`. The acquirers that only support
|
||||
refunding the full amount have the value **Full only**.
|
||||
- Odoo does not support this feature for all payment acquirers but some allow to refund payments
|
||||
from their website interface.
|
||||
|
||||
.. _payment_acquirers/configuration:
|
||||
|
||||
Configuration
|
||||
|
|
@@ -162,48 +277,6 @@ You can change the payment acquirer's front-end appearance by modifying its name
|
|||
**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
|
||||
***************************
|
||||
|
||||
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 the eCommerce conversion rate and subscriptions' recurring payments.
|
||||
|
||||
.. _payment_acquirers/capture_amount:
|
||||
|
||||
Place a hold on a card
|
||||
**********************
|
||||
|
||||
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/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.
|
||||
|
||||
.. image:: payment_acquirers/capture.png
|
||||
:align: center
|
||||
:alt: Hold the credit card payment until you capture or revoke it on Odoo
|
||||
|
||||
.. note::
|
||||
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
|
||||
|
|
|
|||
|
|
@@ -105,7 +105,7 @@ Place a hold on a card
|
|||
Adyen allows you to capture an amount manually instead of having an immediate capture.
|
||||
|
||||
To set it up, enable the **Capture Amount Manually** option on Odoo, as explained in the
|
||||
:ref:`payment acquirers documentation <payment_acquirers/capture_amount>`.
|
||||
:ref:`payment acquirers documentation <payment_acquirers/features/manual_capture>`.
|
||||
|
||||
Then, open your Adyen Merchant Account, go to :menuselection:`Account --> Settings`, and set the
|
||||
**Capture Delay** to **manual**.
|
||||
|
|
|
|||
|
|
@@ -42,8 +42,9 @@ Configuration tab
|
|||
Place a hold on a card
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
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.
|
||||
With Authorize.net, you can enable the :ref:`manual capture
|
||||
<payment_acquirers/features/manual_capture>`. 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.
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
|
@@ -0,0 +1,41 @@
|
|||
===========
|
||||
Flutterwave
|
||||
===========
|
||||
|
||||
`Flutterwave <https://flutterwave.com/>`_ is an online payments provider established in Nigeria and
|
||||
covering several African countries and payment methods.
|
||||
|
||||
.. _payment_acquirers/flutterwave/configure_dashboard:
|
||||
|
||||
Configuration on Flutterwave Dashboard
|
||||
======================================
|
||||
|
||||
#. Log into `Flutterwave Dashboard <https://dashboard.flutterwave.com/>`_ and go to
|
||||
:menuselection:`Settings --> API`. Copy the values of the :guilabel:`Public Key` and
|
||||
:guilabel:`Secret Key` fields and save them for later.
|
||||
#. | Go to :menuselection:`Settings --> Webhooks` and enter your Odoo database URL followed by
|
||||
`/payment/flutterwave/webhook` in the :guilabel:`URL` text field.
|
||||
| For example: `https://yourcompany.odoo.com/payment/flutterwave/webhook`.
|
||||
#. Fill the :guilabel:`Secret hash` with a password that you generate and save its value for later.
|
||||
#. Make sure all the remaining checkboxes are ticked.
|
||||
#. Click on **Save** to finalize the configuration.
|
||||
|
||||
.. _payment_acquirers/flutterwave/configure_odoo:
|
||||
|
||||
Configuration on Odoo
|
||||
=====================
|
||||
|
||||
#. :ref:`Navigate to the payment acquirer Flutterwave <payment_acquirers/add_new>` and change its
|
||||
state to :guilabel:`Enabled`.
|
||||
#. In the :guilabel:`Credentials` tab, fill the :guilabel:`Public Key`, :guilabel:`Secret Key`, and
|
||||
:guilabel:`Webhook Secret` with the values you saved at the step
|
||||
:ref:`payment_acquirers/flutterwave/configure_dashboard`.
|
||||
#. Configure the rest of the options to your liking.
|
||||
|
||||
.. important::
|
||||
If you choose to allow saving payment methods, it is recommended to only enable card payments
|
||||
from Flutterwave dashboard, as only cards can be saved as payment tokens. To do so, go to your
|
||||
Flutterwave Dashboard and then to :menuselection:`Settings --> Account Settings`.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`../payment_acquirers`
|
||||
|
|
@@ -126,7 +126,7 @@ feature earmarks an amount on the customer's account for a determined period of
|
|||
the payment method used.
|
||||
|
||||
To set it up, enable the :guilabel:`Capture Amount Manually` option on Odoo, as explained in the
|
||||
:ref:`payment acquirers documentation <payment_acquirers/capture_amount>`.
|
||||
:ref:`payment acquirers documentation <payment_acquirers/features/manual_capture>`.
|
||||
|
||||
.. warning::
|
||||
When the manual capture feature is activated, your customers are not able to proceed with any
|
||||
|
|
|
|||
|
|
@@ -2,89 +2,130 @@
|
|||
Synchronize Google Calendar with Odoo
|
||||
=====================================
|
||||
|
||||
Odoo is perfectly integrated with Google Calendar so that you
|
||||
can see & manage your meetings from both platforms
|
||||
(updates go through both directions).
|
||||
Synchronize Google Calendar with Odoo to see and manage meetings from both platforms (updates go
|
||||
in both directions). This integration helps organize your schedule so you never miss a meeting.
|
||||
|
||||
Setup in Google
|
||||
===============
|
||||
- Go to `Google APIs platform <https://console.developers.google.com>`__
|
||||
to generate Google Calendar API credentials. Log in with your Google account.
|
||||
|
||||
- Go to the API & Services page.
|
||||
Enable Google Calendar API
|
||||
--------------------------
|
||||
|
||||
.. image:: google_calendar_credentials/google_calendar_credentials00.png
|
||||
:align: center
|
||||
Begin by creating a new Google API project and enabling the Google Calendar API. Then, go to the
|
||||
`Google API Console <https://console.developers.google.com>`_ and log into your Google account.
|
||||
|
||||
- Search for *Google Calendar API* and select it.
|
||||
.. note::
|
||||
If this is your first time visiting this page, Google will prompt you to enter a country and
|
||||
agree to the Terms of Service. Select a country from the drop-down list and agree to the
|
||||
:abbr:`ToS (Terms of Service)`.
|
||||
|
||||
.. image:: google_calendar_credentials/google_calendar_credentials01.png
|
||||
:align: center
|
||||
Next, click :guilabel:`Select a project` and select or create an API project to store credentials.
|
||||
|
||||
.. image:: google_calendar_credentials/google_calendar_credentials02.png
|
||||
:align: center
|
||||
.. image:: google_calendar_credentials/new-api-project.png
|
||||
:align: center
|
||||
:alt: Create a new API project to store credentials.
|
||||
|
||||
- Enable the API.
|
||||
.. tip::
|
||||
Give the API Project a clear name like "Odoo Sync" so you can easily find it.
|
||||
|
||||
.. image:: google_calendar_credentials/google_calendar_credentials03.png
|
||||
:align: center
|
||||
Then, open the API Project and click :guilabel:`Enable APIs and Services`.
|
||||
|
||||
- Select or create an API project to store the credentials if not yet done
|
||||
before. Give it an explicit name (e.g. Odoo Sync).
|
||||
.. image:: google_calendar_credentials/enable-apis-services.png
|
||||
:align: center
|
||||
:alt: Enable APIs and Services on the API Project.
|
||||
|
||||
- Create credentials.
|
||||
After that, search for *Google Calendar API* using the search bar and select :guilabel:`Google
|
||||
Calendar API` from the search results. Click :guilabel:`Enable`.
|
||||
|
||||
.. image:: google_calendar_credentials/google_calendar_credentials04.png
|
||||
:align: center
|
||||
.. image:: google_calendar_credentials/enable-google-cal-api.png
|
||||
:align: center
|
||||
:alt: Enable the Google Calendar API.
|
||||
|
||||
- Select *Web browser (Javascript)*
|
||||
as calling source and *User data* as kind of data.
|
||||
Create credentials
|
||||
------------------
|
||||
|
||||
.. image:: google_calendar_credentials/google_calendar_credentials05.png
|
||||
:align: center
|
||||
Now that you have created your API project and enabled the Google Calendar API, you need to create
|
||||
credentials. Begin by clicking :guilabel:`Create Credentials`. Google will then guide you through
|
||||
four steps to create your API credentials.
|
||||
|
||||
- Then you can create a Client ID.
|
||||
Enter the name of the application (e.g. Odoo Calendar) and the allowed pages on
|
||||
which you will be redirected. The *Authorized JavaScript origin* is your
|
||||
Odoo's instance URL. The *Authorized redirect URI* is your Odoo's instance
|
||||
URL followed by '/google_account/authentication'.
|
||||
- In the first step, :guilabel:`Credential Type`, select the :guilabel:`Google Calendar API` and
|
||||
:guilabel:`User Data` options. Then, click :guilabel:`Next`.
|
||||
|
||||
.. image:: google_calendar_credentials/google_calendar_credentials06.png
|
||||
:align: center
|
||||
.. image:: google_calendar_credentials/credential-type.png
|
||||
:align: center
|
||||
:alt: Select Google Calendar API and User Data for the Credential Type.
|
||||
|
||||
- Go through the Consent Screen step by entering a product name
|
||||
(e.g. Odoo Calendar). Feel free to check the customizations options
|
||||
but this is not mandatory. The Consent Screen will only show up when you
|
||||
enter the Client ID in Odoo for the first time.
|
||||
- In the second step, :guilabel:`OAuth Consent Screen`, type *Odoo* in the :guilabel:`App name`
|
||||
field, select your email address for the :guilabel:`User support email` field, and type your email
|
||||
address for the :guilabel:`Developer contact information` section. Then, click :guilabel:`Save
|
||||
and Continue`.
|
||||
|
||||
- Finally you are provided with your **Client ID**. Go to *Credentials* to
|
||||
get the **Client Secret** as well. Both of them are required in Odoo.
|
||||
- Skip the third step, :guilabel:`Scopes`, by clicking :guilabel:`Save and Continue`.
|
||||
|
||||
.. image:: google_calendar_credentials/google_calendar_credentials07.png
|
||||
:align: center
|
||||
- In the last step, :guilabel:`OAuth Client ID`, select :guilabel:`Website application` for the
|
||||
:guilabel:`Application Type` field and type *My Odoo Database* for the :guilabel:`Name`.
|
||||
|
||||
- Under the :guilabel:`Authorized JavaScript Origins` section, click :guilabel:`+ Add URI` and
|
||||
type your company's Odoo URL address.
|
||||
|
||||
- Under the :guilabel:`Authorized redirect URIs` section, click :guilabel:`+ Add URI` and type
|
||||
your company's Odoo URL address followed by */google_account/authentication*. Finally, click
|
||||
:guilabel:`Create` and :guilabel:`Done`.
|
||||
|
||||
.. image:: google_calendar_credentials/uri.png
|
||||
:align: center
|
||||
:alt: Add the authorized JavaScript origins and the authorized redirect URIs.
|
||||
|
||||
After successfully creating a new API project, enabling the Google Calendar API, and generating the
|
||||
Google Calendar API credentials, you should now have a Client ID and Client Secret.
|
||||
|
||||
Client ID & Client Secret
|
||||
-------------------------
|
||||
|
||||
The **Client ID** and the **Client Secret** are both needed to connect Google Calendar to Odoo. Find
|
||||
the Client ID and the Client Secret by opening the Google Cloud Platform navigation menu and going
|
||||
to :menuselection:`API & Services --> Credentials --> OAuth 2.0 Client IDs`.
|
||||
|
||||
Next, locate the credentials you just created for the Google Calendar API. Then, click on
|
||||
:guilabel:`Edit OAuth Client` (the pencil icon). The page will redirect to the edit page, where you
|
||||
can view the Client ID and the Client Secret.
|
||||
|
||||
.. image:: google_calendar_credentials/edit-oauth-2.png
|
||||
:align: center
|
||||
:alt: Click Edit OAuth Client to view the credential details.
|
||||
|
||||
Setup in Odoo
|
||||
=============
|
||||
|
||||
- Install the **Google Calendar** App from the *Apps* menu or by checking
|
||||
the option in :menuselection:`Settings --> General Settings`.
|
||||
Once the Client ID and the Client Secret are located, open the Odoo database and go to
|
||||
:menuselection:`Settings --> General Settings --> Integrations --> Google Calendar`. Check the box
|
||||
next to :guilabel:`Google Calendar`.
|
||||
|
||||
.. image:: google_calendar_credentials/google_calendar_credentials08.png
|
||||
:align: center
|
||||
.. image:: google_calendar_credentials/settings-google-cal.png
|
||||
:align: center
|
||||
:alt: The Google Calendar checkbox in General Settings.
|
||||
|
||||
- Go to :menuselection:`Settings --> General Settings` and enter your
|
||||
**Client ID** and **Client Secret** in Google Calendar option.
|
||||
Next, copy and paste the Client ID and the Client Secret from the Google Calender API Credentials
|
||||
page into their respective fields below the :guilabel:`Google Calendar` checkbox. Then, click
|
||||
:guilabel:`Save`.
|
||||
|
||||
.. image:: google_calendar_credentials/google_calendar_credentials09.png
|
||||
:align: center
|
||||
Finally, open the Calendar module in Odoo and click on the :guilabel:`Google` sync button to sync
|
||||
Google Calendar with Odoo.
|
||||
|
||||
- The setup is now ready. Open your Odoo Calendar and sync with Google.
|
||||
The first time you do it you are redirected to Google to authorize
|
||||
the connection. Once back in Odoo, click the sync button again.
|
||||
You can click it whenever you want to synchronize your calendar.
|
||||
.. image:: google_calendar_credentials/sync-google.png
|
||||
:align: center
|
||||
:alt: Click the Google sync button in Odoo Calendar to sync Google Calendar with Odoo.
|
||||
|
||||
.. image:: google_calendar_credentials/google_calendar_credentials10.png
|
||||
:align: center
|
||||
.. note::
|
||||
The first time you sync your Google Calendar with Odoo, the page will redirect to your Google
|
||||
Account. Click :guilabel:`OK` and :guilabel:`Allow` to authorize Odoo to access Google Calendar.
|
||||
|
||||
As of now you no longer have excuses to miss a meeting!
|
||||
.. image:: google_calendar_credentials/trust-odoo.png
|
||||
:align: center
|
||||
:alt: Give Odoo permission to access Google Calendar.
|
||||
|
||||
Now, Odoo Calendar is successfully synced with Google Calendar!
|
||||
|
||||
.. image:: google_calendar_credentials/successful-sync.png
|
||||
:align: center
|
||||
:alt: Successfully sync between Odoo and Google Calendar.
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
|
@@ -1,15 +1,14 @@
|
|||
====================================================
|
||||
Connect a SIX Payment Terminal to your PoS
|
||||
====================================================
|
||||
=========================================
|
||||
Connect a SIX Payment Terminal to the PoS
|
||||
=========================================
|
||||
|
||||
Connecting a SIX payment terminal allows you to offer a fluid
|
||||
payment flow to your customers and ease the work of your cashiers.
|
||||
Connecting a SIX payment terminal allows you to offer a fluid payment flow to your customers and
|
||||
ease the work of your cashiers.
|
||||
|
||||
.. warning::
|
||||
Even though Worldline has recently acquired SIX Payment Services and both
|
||||
companies use Yomani payment terminals, the firmware they run is different.
|
||||
Terminals received from Worldline are therefore not compatible with this
|
||||
integration.
|
||||
Even though Worldline has recently acquired SIX Payment Services and both companies use Yomani
|
||||
payment terminals, the firmware they run is different. Terminals received from Worldline are
|
||||
therefore not compatible with this integration.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
|
@@ -17,38 +16,40 @@ Configuration
|
|||
Configure the Payment Method
|
||||
----------------------------
|
||||
|
||||
First, make sure that the POS Six module is installed. For this, go to *Apps*,
|
||||
remove the "Apps" filter and search for "POS Six".
|
||||
First, make sure that the :guilabel:`POS Six` module is installed. For this, go to
|
||||
:guilabel:`Apps`, remove the :guilabel:`Apps` filter, and search for *POS Six*.
|
||||
|
||||
.. image:: six/six_01.png
|
||||
:align: center
|
||||
.. image:: six/pos-six-module.png
|
||||
:align: center
|
||||
:alt: The POS Six module.
|
||||
|
||||
Back in :menuselection:`Point of Sale --> Configuration --> Payment Methods`, create a new payment
|
||||
method for SIX, select the appropriate journal, select *SIX* in the **Use a Payment Terminal**
|
||||
field, then enter your payment terminal IP address.
|
||||
Back in :menuselection:`Point of Sale --> Configuration --> Payment Methods`, click
|
||||
:guilabel:`Create` to create a new payment method for SIX, select the payment terminal option
|
||||
:guilabel:`SIX`, and enter the payment terminal IP address.
|
||||
|
||||
.. note::
|
||||
The journal's type must be *bank* to select a payment terminal.
|
||||
.. image:: six/new-payment-method.png
|
||||
:align: center
|
||||
:alt: Create a new payment method for the SIX payment terminal.
|
||||
|
||||
Pay with a Payment Terminal
|
||||
===========================
|
||||
|
||||
In your PoS interface, at the moment of the payment, select a payment
|
||||
method using a payment terminal. Verify that the amount in the tendered
|
||||
column is the one that has to be sent to the payment terminal and click
|
||||
on *Send*. If you want to cancel the payment request, click on cancel.
|
||||
In the :abbr:`PoS (Point of Sale)` interface, at the moment of the payment, select a payment method
|
||||
using a payment terminal. Verify that the amount in the tendered column is the one that has to be
|
||||
sent to the payment terminal and click on :guilabel:`Send`. To cancel the payment request, click on
|
||||
:guilabel:`Cancel`.
|
||||
|
||||
.. image:: six/six_06.png
|
||||
:align: center
|
||||
.. image:: six/pos-send-payment.png
|
||||
:align: center
|
||||
:alt: The PoS interface.
|
||||
|
||||
When the payment is done, the status will change to *Payment
|
||||
Successful*. You can always reverse the last transaction by clicking on
|
||||
*Reverse*.
|
||||
When the payment is done, the status will change to :guilabel:`Payment Successful`. If needed,
|
||||
reverse the last transaction by clicking on :guilabel:`Reverse`.
|
||||
|
||||
.. image:: six/six_07.png
|
||||
:align: center
|
||||
.. image:: six/pos-reverse-payment.png
|
||||
:align: center
|
||||
:alt: The Reverse button on the PoS interface.
|
||||
|
||||
If there is any issue with the payment terminal, you can still force the
|
||||
payment using the *Force Done*. This will allow you to validate the
|
||||
order in Odoo even if the connection between the terminal and Odoo
|
||||
encounters issues.
|
||||
If there is any issue with the payment terminal, you can still force the payment using the
|
||||
:guilabel:`Force Done` button. This will allow you to validate the order in Odoo even if there are
|
||||
connection issues between the payment terminal and Odoo.
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
|
@@ -2,71 +2,27 @@
|
|||
Configure Amazon Connector in Odoo
|
||||
==================================
|
||||
|
||||
Generate an Authorization Token in Seller Central
|
||||
=================================================
|
||||
|
||||
.. _amazon/generate_auth_token:
|
||||
|
||||
The Amazon Connector uses an Authorization Token that allows Odoo to fetch data from your Amazon
|
||||
Seller Central account. This token can be obtained directly through Seller Central in a few clicks
|
||||
and needs to be set up in your Odoo database configuration.
|
||||
|
||||
Connect to your Seller Central account for the marketplace you initially signed
|
||||
up (e.g. if you created your account on Amazon Germany, go to `Amazon Seller
|
||||
Central for Germany <https://sellercentral.amazon.de>`_) with an administrator account.
|
||||
|
||||
.. note::
|
||||
You might need to use the *main* (or first) administrator account and not one
|
||||
added subsequently.
|
||||
|
||||
In the main menu, select :menuselection:`Apps & Services --> Manage Your Apps`;
|
||||
in the page that displays, click on the ``Authorize new developper`` button:
|
||||
|
||||
.. image:: setup/seller_central_apps.png
|
||||
:align: center
|
||||
|
||||
Fill in the form depending on your Marketplace:
|
||||
|
||||
.. image:: setup/seller_central_form.png
|
||||
:align: center
|
||||
|
||||
If your seller account is registered in the **North America** region, use these values:
|
||||
|
||||
- Developer's Name: ``Odoo S.A.``
|
||||
- Developer ID: ``586127723692``
|
||||
|
||||
For the **Europe** region, use these values:
|
||||
|
||||
- Developer's Name: ``Odoo S.A.``
|
||||
- Developer ID: ``579095187166``
|
||||
|
||||
Amazon will then inform you that by submitting the form, you are giving access
|
||||
to your Seller Central Information to Odoo S.A.
|
||||
|
||||
.. note::
|
||||
Odoo S.A. is unable to access your Amazon account's information without the
|
||||
Authorization Token which is stored in your Odoo database - we do not store
|
||||
these tokens on our platform directly and are therefore unable to access
|
||||
your account's information outside of the Amazon Connector normal flows.
|
||||
|
||||
Register your Amazon account in Odoo
|
||||
====================================
|
||||
|
||||
.. _amazon/setup:
|
||||
|
||||
To register your seller account in Odoo, navigate to :menuselection:`Sales --> Configuration
|
||||
--> Settings --> Connectors --> Amazon Sync --> Amazon Accounts` and click on **CREATE**.
|
||||
--> Settings --> Connectors --> Amazon Sync --> Amazon Accounts` and click on :guilabel:`CREATE`.
|
||||
|
||||
The **Seller ID** can be found in Seller Central under the link **Your Merchant Token** on the
|
||||
**Seller Account Information** page. The **Authorization Token** is the one you generated in the
|
||||
:ref:`previous step <amazon/generate_auth_token>`.
|
||||
#. Choose a meaningful name for your account (e.g. `Europe`), and select your :guilabel:`Sign-up
|
||||
Marketplace`. This is the original sign-up marketplace of your seller account (e.g. if you
|
||||
created your account on Amazon Germany, your sign-up marketplace will be `amazon.de`)
|
||||
|
||||
Upon saving, your credentials are checked. In case of issues, an error will be displayed - the
|
||||
information cannot be saved until your credentials are recognized by Amazon.
|
||||
#. Upon saving, a button to :guilabel:`link with Amazon` appears. Click on it to be redirected to
|
||||
the Amazon login page, or directly to the consent page if you are already logged in. There,
|
||||
confirm that you want Amazon to give Odoo access to your account and related data.
|
||||
|
||||
#. Amazon redirects you to Odoo, with your account registered.
|
||||
|
||||
Once the account is registered, the marketplaces available to this account are synchronized and
|
||||
listed under the **Marketplaces** tab. If you wish, you can remove some items from the list of
|
||||
synchronized marketplaces to disable their synchronization.
|
||||
listed under the :guilabel:`Marketplaces` tab. If you wish, you can remove some items from the list
|
||||
of synchronized marketplaces to disable their synchronization.
|
||||
|
||||
Match database products in Amazon
|
||||
=================================
|
||||
|
|
@@ -119,36 +75,39 @@ the subtotals between Seller Central and Odoo.
|
|||
Add an unsupported marketplace
|
||||
==============================
|
||||
|
||||
Some Amazon Marketplaces, such as Amazon Brazil, are not officially supported by Odoo but might be
|
||||
compatible with your seller account. These marketplaces can be added manually should you wish to use
|
||||
them. See :ref:`here <amazon/supported-marketplaces>` for the exhaustive list of natively supported
|
||||
marketplaces.
|
||||
Some Amazon Marketplaces, such as Amazon Brazil, are not created by default as they are not
|
||||
officially supported by Odoo but might be compatible with your seller account. These marketplaces
|
||||
can be added manually should you wish to use them. See :ref:`here <amazon/supported-marketplaces>`
|
||||
for the exhaustive list of natively supported marketplaces.
|
||||
|
||||
.. tip::
|
||||
To find out if a marketplace is eventually compatible, check the `Amazon Documentation
|
||||
<https://docs.developer.amazonservices.com/en_US/dev_guide/DG_Endpoints.html>`_. The marketplace
|
||||
<https://developer-docs.amazon.com/amazon-shipping/docs/seller-central-urls>`_. The marketplace
|
||||
must belong to the same region as that of your seller account.
|
||||
|
||||
To add a new marketplace, you must first activate the :ref:`developer mode <developer-mode>`.
|
||||
To add a new marketplace, activate the :ref:`developer mode <developer-mode>`.
|
||||
|
||||
Once that is done, go to :menuselection:`Sales --> Configuration --> Settings --> Connectors -->
|
||||
Amazon Sync --> Amazon Marketplaces`.
|
||||
|
||||
From there, you can create a new marketplace record. You will need the Marketplace ID and Endpoint
|
||||
for your marketplace as described in the `Amazon Documentation
|
||||
<https://docs.developer.amazonservices.com/en_US/dev_guide/DG_Endpoints.html>`_.
|
||||
From there, create a new marketplace record. Enter the Marketplace ID and select the Amazon Region
|
||||
for your marketplace as described in the `Amazon Documentation for marketplace IDs
|
||||
<https://developer-docs.amazon.com/amazon-shipping/docs/marketplace-ids>`_, and the Seller Central
|
||||
URL as described in the `Amazon Documentation for seller central URLs
|
||||
<https://developer-docs.amazon.com/amazon-shipping/docs/seller-central-urls>`_.
|
||||
|
||||
Set the name of the record to ``Amazon.<domain>`` to easily retrieve it (for instance:
|
||||
``Amazon.se``). The **Code**, **Domain** and **API Identifier** fields should respectively hold
|
||||
the *Country Code*, *Amazon MWS Endpoint* and *MarketplaceId* values from the Amazon Documentation.
|
||||
Set the name of the record to ``Amazon.<country code>`` to easily retrieve it (e.g.: ``Amazon.se``).
|
||||
The :guilabel:`API Identifier`, the :guilabel:`Region` and the :guilabel:`Seller Central URL` fields
|
||||
should respectively hold the *MarketplaceId*, the selected Amazon region and the *Seller Central
|
||||
URL* values from the Amazon Documentation.
|
||||
|
||||
Once the marketplace is saved, you should then update the Amazon Account configuration by going to
|
||||
Once the marketplace is saved, update the Amazon Account configuration by going to
|
||||
:menuselection:`Sales --> Configuration --> Settings --> Connectors --> Amazon Sync -->
|
||||
Amazon Accounts`, open the account on which you wish to use the new marketplace, go to the
|
||||
**Marketplaces** tab and click on **Update available marketplaces** (an animation should confirm the
|
||||
success of the operation). Newly added marketplaces are automatically added to the list of
|
||||
synchronized marketplaces. If the new marketplace is not added to the list, it means that it is
|
||||
either incompatible or unavailable for your seller account.
|
||||
Amazon Accounts`. Open the account on which you wish to use the new marketplace, go to the
|
||||
:guilabel:`Marketplaces` tab and click on :guilabel:`Update available marketplaces` (an animation
|
||||
should confirm the success of the operation). Newly added marketplaces are automatically added to
|
||||
the list of synchronized marketplaces. If the new marketplace is not added to the list, it means
|
||||
that it is either incompatible or unavailable for your seller account.
|
||||
|
||||
.. important::
|
||||
As manually added marketplaces are not officially supported by Odoo, there is no guarantee that
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
|
@@ -2,35 +2,82 @@
|
|||
Invoice Time Spent on Tickets (Postpaid Support Services)
|
||||
=========================================================
|
||||
|
||||
Directly pull the billable time you have tracked on your helpdesk tickets into sales orders and
|
||||
invoices through a project task. It gives you more control over what you charge your client, and it
|
||||
is more efficient.
|
||||
The :guilabel:`Timesheet on Ticket` integration provides more control and transparency over how
|
||||
clients are charged, and what they're specifically billed for.
|
||||
|
||||
In Odoo, Project managers can connect Helpdesk tickets to Project tasks. As the Helpdesk agent
|
||||
works on the ticket, they can use the ticket itself or the Project task to record timesheets.
|
||||
|
||||
Thanks to the :guilabel:`Timesheet on Ticket` integration, timesheets will always be consistent and
|
||||
up-to-date on both records. Once a ticket is solved, the client can be billed for the time spent on
|
||||
the ticket. Odoo will pull from either the task or the ticket timesheet to accurately bill the
|
||||
client.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
| Go to :menuselection:`Helpdesk --> Configuration --> Helpdesk team --> Edit` and enable the options
|
||||
*Timesheet on Ticket* and *Time Reinvoicing*.
|
||||
| Under *Timesheet on Ticket*, choose the *Project* to which tickets (and timesheets) will be
|
||||
linked by default. Open its *External link* to enable the feature *Bill from tasks*.
|
||||
To turn on the :guilabel:`Timesheet on Ticket` feature, go to :menuselection:`Helpdesk -->
|
||||
Configuration --> Helpdesk Teams`, select a Helpdesk team, and then, click :guilabel:`Edit`. Next,
|
||||
enable the options :guilabel:`Timesheet on Ticket` and :guilabel:`Time Reinvoicing`.
|
||||
|
||||
.. image:: reinvoice_from_project/reinvoice_time1.png
|
||||
In the :guilabel:`Timesheet on Ticket` drop-down option, choose the Project to which tickets (and
|
||||
timesheets) will be linked by default. Then, open the Project's external link to edit its settings
|
||||
and enable the :guilabel:`Billable` option. Finally, save both the Project and the Helpdesk team's
|
||||
settings to apply these features.
|
||||
|
||||
.. image:: reinvoice_from_project/project-billable.png
|
||||
:align: center
|
||||
:alt: Bill from Tasks in Odoo Helpdesk
|
||||
:alt: Billable feature in Project settings.
|
||||
|
||||
Create a sales order and an invoice
|
||||
====================================
|
||||
Create a sales order
|
||||
====================
|
||||
|
||||
Now, once you have recorded the time you spent on the helpdesk ticket, under the *Timesheets* tab,
|
||||
access the task clicking on its name.
|
||||
After a ticket comes into the pipeline, go to :menuselection:`Sales --> Create`. Then, add the
|
||||
customer from the ticket to the new quotation. In the :guilabel:`Order Lines` tab, add the
|
||||
:guilabel:`Service on Timesheet` product. Finally, click :guilabel:`Confirm` to turn the quotation
|
||||
into a sales order.
|
||||
|
||||
.. image:: reinvoice_from_project/reinvoice_time2.png
|
||||
.. tip::
|
||||
Remember the sales order name for later to link the Helpdesk ticket to the correct sales order.
|
||||
|
||||
.. image:: reinvoice_from_project/service-on-timesheet.png
|
||||
:align: center
|
||||
:alt: Sales Order from a task in Odoo Helpdesk
|
||||
:alt: Add Service on Timesheet product to the SO.
|
||||
|
||||
*Create Sales Order* and proceed to create the invoice.
|
||||
Record a timesheet
|
||||
==================
|
||||
|
||||
.. image:: reinvoice_from_project/reinvoice_time3.png
|
||||
To record a timesheet, jump back to the Helpdesk ticket by going to the Helpdesk dashboard and
|
||||
clicking :guilabel:`Tickets` on the team's card (or by going to the Projects dashboard and clicking
|
||||
:guilabel:`Tickets` on the project card). Then, click :guilabel:`Edit` and use the
|
||||
:guilabel:`Timesheets` tab to record the time spent on the ticket.
|
||||
|
||||
.. image:: reinvoice_from_project/record-timesheet-ticket.png
|
||||
:align: center
|
||||
:height: 300
|
||||
:alt: Sales Order from a task in Odoo Helpdesk
|
||||
:alt: Record time spent on a ticket.
|
||||
|
||||
Link the Helpdesk ticket to the SO
|
||||
==================================
|
||||
|
||||
To link the :abbr:`SO (Sales Order)` to the ticket, start on the ticket form, click
|
||||
:guilabel:`Edit`, and then, click the :guilabel:`Sales Order Item` field. Next, select the
|
||||
:abbr:`SO (Sales Order)` that was created earlier from the drop-down menu. Lastly, click
|
||||
:guilabel:`Save` to connect the ticket and the :abbr:`SO (Sales Order)`.
|
||||
|
||||
.. image:: reinvoice_from_project/link-so-ticket.png
|
||||
:align: center
|
||||
:alt: Link the SO item to the ticket.
|
||||
|
||||
Create the invoice
|
||||
==================
|
||||
|
||||
When the Helpdesk ticket is completed and the client is ready to be billed for time, begin by
|
||||
clicking the :guilabel:`Sales Order` smart button on the ticket form to navigate to the :abbr:`SO
|
||||
(Sales Order)`. The :guilabel:`Delivered` column should match the number of hours recorded on the
|
||||
ticket's timesheet. After checking and filling out the relevant information, click :guilabel:`Create
|
||||
Invoice` to bill the client for the time spent on the ticket. Odoo will automatically generate an
|
||||
invoice to send to the client and the Helpdesk ticket can officially be closed.
|
||||
|
||||
.. seealso::
|
||||
- :doc:`invoice_time`
|
||||
- :doc:`/applications/inventory_and_mrp/inventory/management/products/uom`
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
|
@@ -59,4 +59,4 @@ payment from the related Sales Order.
|
|||
|
||||
.. seealso::
|
||||
- :doc:`../../../finance/payment_acquirers`
|
||||
- :ref:`Payment Acquirers: Place a hold on a card <payment_acquirers/capture_amount>`
|
||||
- :ref:`Payment Acquirers: Place a hold on a card <payment_acquirers/features/manual_capture>`
|
||||
|
|
|
|||
|
|
@@ -723,22 +723,100 @@ joins) or for performance reasons::
|
|||
|
||||
self.env.cr.execute("some_sql", params)
|
||||
|
||||
.. warning::
|
||||
Executing raw SQL bypasses the ORM and, by consequent, Odoo security rules.
|
||||
Please make sure your queries are sanitized when using user input and prefer using
|
||||
ORM utilities if you don't really need to use SQL queries.
|
||||
|
||||
One important thing to know about models is that they don't necessarily perform
|
||||
database updates right away. Indeed, for performance reasons, the framework
|
||||
delays the recomputation of fields after modifying records. And some database
|
||||
updates are delayed, too. Therefore, before querying the database, one has to
|
||||
make sure that it contains the relevant data for the query. This operation is
|
||||
called *flushing* and performs the expected database updates.
|
||||
|
||||
.. example::
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# make sure that 'partner_id' is up-to-date in database
|
||||
self.env['model'].flush_model(['partner_id'])
|
||||
|
||||
self.env.cr.execute("SELECT id FROM model WHERE partner_id IN %s", [ids])
|
||||
ids = [row[0] for row in self.env.cr.fetchall()]
|
||||
|
||||
Before every SQL query, one has to flush the data needed for that query. There
|
||||
are three levels for flushing, each with its own API. One can flush either
|
||||
everything, all the records of a model, or some specific records. Because
|
||||
delaying updates improves performance in general, we recommend to be *specific*
|
||||
when flushing.
|
||||
|
||||
.. automethod:: odoo.api.Environment.flush_all
|
||||
|
||||
.. automethod:: Model.flush_model
|
||||
|
||||
.. automethod:: Model.flush_recordset
|
||||
|
||||
Because models use the same cursor and the :class:`~odoo.api.Environment`
|
||||
holds various caches, these caches must be invalidated when *altering* the
|
||||
database in raw SQL, or further uses of models may become incoherent. It is
|
||||
necessary to clear caches when using ``CREATE``, ``UPDATE`` or ``DELETE`` in
|
||||
SQL, but not ``SELECT`` (which simply reads the database).
|
||||
|
||||
.. note::
|
||||
Clearing caches can be performed using the
|
||||
:meth:`~odoo.models.Model.invalidate_cache` method.
|
||||
.. example::
|
||||
|
||||
.. automethod:: Model.invalidate_cache
|
||||
.. code-block:: python
|
||||
|
||||
.. warning::
|
||||
Executing raw SQL bypasses the ORM, and by consequent, Odoo security rules.
|
||||
Please make sure your queries are sanitized when using user input and prefer using
|
||||
ORM utilities if you don't really need to use SQL queries.
|
||||
# make sure 'state' is up-to-date in database
|
||||
self.env['model'].flush_model(['state'])
|
||||
|
||||
self.env.cr.execute("UPDATE model SET state=%s WHERE state=%s", ['new', 'old'])
|
||||
|
||||
# invalidate 'state' from the cache
|
||||
self.env['model'].invalidate_model(['state'])
|
||||
|
||||
Just like flushing, one can invalidate either the whole cache, the cache of all
|
||||
the records of a model, or the cache of specific records. One can even
|
||||
invalidate specific fields on some records or all records of a model. As the
|
||||
cache improves performance in general, we recommend to be *specific* when
|
||||
invalidating.
|
||||
|
||||
.. automethod:: odoo.api.Environment.invalidate_all
|
||||
|
||||
.. automethod:: Model.invalidate_model
|
||||
|
||||
.. automethod:: Model.invalidate_recordset
|
||||
|
||||
The methods above keep the caches and the database consistent with each other.
|
||||
However, if computed field dependencies have been modified in the database, one
|
||||
has to inform the models for the computed fields to be recomputed. The only
|
||||
thing the framework needs to know is *what* fields have changed on *which*
|
||||
records.
|
||||
|
||||
.. example::
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# make sure 'state' is up-to-date in database
|
||||
self.env['model'].flush_model(['state'])
|
||||
|
||||
# use the RETURNING clause to retrieve which rows have changed
|
||||
self.env.cr.execute("UPDATE model SET state=%s WHERE state=%s RETURNING id", ['new', 'old'])
|
||||
ids = [row[0] for row in self.env.cr.fetchall()]
|
||||
|
||||
# invalidate the cache, and notify the update to the framework
|
||||
records = self.env['model'].browse(ids)
|
||||
records.invalidate_recordset(['state'])
|
||||
records.modified(['state'])
|
||||
|
||||
One has to figure out which records have been modified. There are many ways to
|
||||
do this, possibly involving extra SQL queries. In the example above, we take
|
||||
advantage of the ``RETURNING`` clause of PostgreSQL to retrieve the information
|
||||
without an extra query. After making the cache consistent by invalidation,
|
||||
invoke the method ``modified`` on the modified records with the fields that
|
||||
have been updated.
|
||||
|
||||
.. automethod:: Model.modified
|
||||
|
||||
|
||||
.. _reference/orm/models/crud:
|
||||
|
|
@@ -763,8 +841,6 @@ Create/update
|
|||
|
||||
.. automethod:: Model.write
|
||||
|
||||
.. automethod:: Model.flush
|
||||
|
||||
Search/Read
|
||||
-----------
|
||||
|
||||
|
|
|
|||
|
|
@@ -4,6 +4,15 @@
|
|||
Changelog
|
||||
=========
|
||||
|
||||
Odoo Online version 15.4
|
||||
========================
|
||||
|
||||
- New API for flushing to the database and invalidating the cache with
|
||||
`#87527 <https://github.com/odoo/odoo/pull/87527>`_.
|
||||
New methods have been added to `odoo.models.Model` and `odoo.api.Environment`,
|
||||
and are less confusing about what is actually done in each case.
|
||||
See the section :ref:`SQL Execution <reference/orm/sql>`.
|
||||
|
||||
Odoo Online version 15.2
|
||||
========================
|
||||
|
||||
|
|
|
|||
|
|
@@ -86,7 +86,7 @@
|
|||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{{ pathto('developer/misc/api/odoo') }}" class="stretched-link">
|
||||
<a href="{{ pathto('developer/misc/api/external_api') }}" class="stretched-link">
|
||||
{{ _("External API") }}
|
||||
</a>
|
||||
</li>
|
||||
|
|
|
|||