Compare commits
1 Commits
master-def
...
master-no-
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
d39b6a3562 |
[IMP] Accounting: Reports: Document the new cross_report syntax for forced date scope
task-5243334 |
|
|
@@ -2,6 +2,9 @@
|
|||
Export and import data
|
||||
======================
|
||||
|
||||
.. |list| replace:: :icon:`oi-view-list` :guilabel:`(list)` icon
|
||||
.. |actions| replace:: :icon:`fa-cog` :guilabel:`Actions`
|
||||
|
||||
In Odoo, it is sometimes necessary to export or import data for running reports, or for data
|
||||
modification. This document covers the export and import of data into and out of Odoo.
|
||||
|
||||
|
|
@@ -16,20 +19,19 @@ Export data from Odoo
|
|||
=====================
|
||||
|
||||
When working with a database, it is sometimes necessary to export data in a distinct file. Doing so
|
||||
can aid in reporting on activities, although, Odoo provides a precise reporting tool with each
|
||||
available application.
|
||||
can aid in reporting on activities, although, Odoo provides a precise and easy reporting tool with
|
||||
each available application.
|
||||
|
||||
With Odoo, the values can be exported from any field in any record. To do so, activate the list view
|
||||
:icon:`fa-list` :guilabel:`(List)` icon, on the items that need to be exported, and then select the
|
||||
records that should be exported. To select a record, tick the checkbox next to the corresponding
|
||||
record. Finally, click the :guilabel:`Action` button, and select :icon:`fa-upload`
|
||||
:guilabel:`Export`.
|
||||
(|list|), on the items that need to be exported, then select the records that should be exported. To
|
||||
select a record, tick the checkbox next to the corresponding record. Finally, click on |actions|,
|
||||
then :guilabel:`Export`.
|
||||
|
||||
.. image:: export_import_data/list-view-export.png
|
||||
:alt: View of the different things to enable/click to export data.
|
||||
|
||||
When clicking on :icon:`fa-upload` :guilabel:`Export`, a :guilabel:`Export Data` pop-over window
|
||||
appears, with several options for the data to export:
|
||||
When clicking on :guilabel:`Export`, an :guilabel:`Export Data` pop-over window appears, with
|
||||
several options for the data to export:
|
||||
|
||||
.. image:: export_import_data/export-data-overview.png
|
||||
:alt: Overview of options to consider when exporting data in Odoo.
|
||||
|
|
@@ -37,27 +39,27 @@ appears, with several options for the data to export:
|
|||
#. With the :guilabel:`I want to update data (import-compatable export)` option ticked, the system
|
||||
only shows the fields that can be imported. This is helpful in the case where the :ref:`existing
|
||||
records need to be updated <essentials/update-data>`. This works like a filter. Leaving the box
|
||||
unticked, gives many more field options because it shows all the fields, not only the ones that
|
||||
unticked, gives many more field options because it shows all the fields, not just the ones that
|
||||
can be imported.
|
||||
#. When exporting, there is the option to export in two formats: `.csv` and `.xls`. With `.csv`,
|
||||
items are separated by a comma, while `.xls` holds information about all the worksheets in a
|
||||
file, including both content and formatting.
|
||||
#. These are the items that can be exported. Use the :icon:`fa-chevron-right` :guilabel:`(Show
|
||||
sub-fields)` icon to display more sub-field options. Use the :guilabel:`Search` bar to find
|
||||
specific fields. To use the :guilabel:`Search` option more efficiently, click on all the
|
||||
:icon:`fa-chevron-right` :guilabel:`(Show sub-fields)` icon to display all fields.
|
||||
#. The :icon:`fa-plus` :guilabel:`(Select field)` icon button is present to add fields to the
|
||||
:guilabel:`Fields to export` list.
|
||||
#. The :icon:`fa-sort` :guilabel:`(Sort)` icon to the left of the selected fields can be used to
|
||||
move the fields up and down, to change the order in which they are displayed in the exported
|
||||
file. Drag-and-drop using the :icon:`fa-sort` :guilabel:`(Sort)` icon.
|
||||
#. The :icon:`fa-trash` :guilabel:`(Remove field)` icon is used to remove fields. Click the
|
||||
:icon:`fa-trash` :guilabel:`(Remove field)` icon to remove the field.
|
||||
#. These are the items that can be exported. Use the :guilabel:`> (right arrow)` icon to display
|
||||
more sub-field options. Use the :guilabel:`Search` bar to find specific fields. To use the
|
||||
:guilabel:`Search` option more efficiently, click on all the :guilabel:`> (right arrows)` to
|
||||
display all fields.
|
||||
#. The :guilabel:`+ (plus sign)` icon button is present to add fields to the :guilabel:`Fields to
|
||||
export` list.
|
||||
#. The :guilabel:`↕️ (up-down arrow)` to the left of the selected fields can be used to move the
|
||||
fields up and down, to change the order in which they are displayed in the exported file.
|
||||
Drag-and-drop using the :guilabel:`↕️ (up-down arrow)` icon.
|
||||
#. The :guilabel:`🗑️ (trash can)` icon is used to remove fields. Click on the :guilabel:`🗑️ (trash
|
||||
can)` icon to remove the field.
|
||||
#. For recurring reports, it is helpful to save export presets. Select all the needed fields, and
|
||||
click on the template drop-down menu. Once there, click on :guilabel:`New template`, and give a
|
||||
unique name to the export template. Click the :icon:`fa-floppy-o` :guilabel:`(floppy drive)` icon
|
||||
to save the configuration. The next time the same list needs to be exported, select the related
|
||||
template that was previously saved from the drop-down menu.
|
||||
unique name to the export just created. Click the :guilabel:`💾 (floppy drive)` icon to save the
|
||||
configuration. The next time the same list needs to be exported, select the related template that
|
||||
was previously saved from the drop-down menu.
|
||||
|
||||
.. tip::
|
||||
It is helpful to know the field's external identifier. For example, :guilabel:`Related Company`
|
||||
|
|
@@ -100,19 +102,18 @@ Data can be imported on any Odoo business object using either Excel (`.xlsx`) or
|
|||
(Comma-separated Values)` (`.csv`) formats. This includes: contacts, products, bank statements,
|
||||
journal entries, and orders.
|
||||
|
||||
Open the view of the object to which the data should be imported/populated, click on :icon:`fa-cog`
|
||||
:guilabel:`(Action)` icon, and in the drop-down menu select :icon:`fa-upload` :guilabel:`(Import
|
||||
records)`.
|
||||
Open the view of the object to which the data should be imported/populated, click the :icon:`fa-cog`
|
||||
(:guilabel:`gear`) icon and select :guilabel:`Import records`.
|
||||
|
||||
.. image:: export_import_data/import-button.png
|
||||
:alt: Action menu revealed with the import records option highlighted.
|
||||
|
||||
Click :icon:`fa-upload`:guilabel:`Import Template for Customers` at the center of the page to
|
||||
download a :ref:`template <essentials/export_import_data/adapt-a-template>` and populate it with the
|
||||
company's own data. Such templates can be imported in one click since the data mapping is already
|
||||
preconfigured.
|
||||
Click :icon:`fa-download`:guilabel:`Import Template for Customers` at the center of the page to
|
||||
download a :ref:`template <essentials/export_import_data/adapt-a-template>` and populate it with
|
||||
the company's own data. Such templates can be imported in one click since the data mapping is
|
||||
already preconfigured.
|
||||
|
||||
To upload the downloaded template or an existing file, follow the next steps:
|
||||
To upload the downloaded template or your own file, follow the next steps:
|
||||
|
||||
#. Click :guilabel:`Upload Data File` and select the desired file.
|
||||
#. Adjust the :guilabel:`Formatting` options as needed (for CSV files only).
|
||||
|
|
@@ -151,15 +152,15 @@ Once the template is downloaded, proceed to follow these steps:
|
|||
fit any field within Odoo. However, new columns can be mapped manually when the import is tested.
|
||||
Search the drop-down menu for the corresponding field.
|
||||
|
||||
.. image:: export_import_data/field-list.png
|
||||
.. image:: export_import_data/field_list.png
|
||||
:alt: Drop-down menu expanded in the initial import screen on Odoo.
|
||||
|
||||
Then, use this field's label in the import file to ensure future imports are successful.
|
||||
|
||||
.. tip::
|
||||
Another useful way to find out the proper column names to import is to export a sample file using
|
||||
the fields to be imported. This way, if there is not a sample import template, the names are
|
||||
accurate.
|
||||
Another useful way to find out the proper column names to import is to export a sample file
|
||||
using the fields that should be imported. This way, if there is not a sample import template,
|
||||
the names are accurate.
|
||||
|
||||
|
||||
.. _essentials/external-id:
|
||||
|
|
@@ -167,8 +168,8 @@ Once the template is downloaded, proceed to follow these steps:
|
|||
Import from another application
|
||||
-------------------------------
|
||||
|
||||
The :guilabel:`External ID` (ID) is a unique identifier for a line item. It is possible to use an
|
||||
:guilabel:`External ID` (ID) from previous software to facilitate the transition to Odoo.
|
||||
The :guilabel:`External ID` (ID) is a unique identifier for the line item. Feel free to use one
|
||||
from previous software to facilitate the transition to Odoo.
|
||||
|
||||
Setting an ID is not mandatory when importing, but it helps in many cases:
|
||||
|
||||
|
|
@@ -200,7 +201,7 @@ the column may be mapped to a field that is not proposed by default.
|
|||
If this happens, check the :guilabel:`Show fields of relation fields (advanced) option`, then a
|
||||
complete list of fields becomes available for each column.
|
||||
|
||||
.. image:: export_import_data/field-list.png
|
||||
.. image:: export_import_data/field_list.png
|
||||
:alt: Searching for the field to match the tax column.
|
||||
|
||||
Change data import format
|
||||
|
|
@@ -223,7 +224,7 @@ the preferred format using *ISO 8601* to define the format.
|
|||
.. important::
|
||||
*ISO 8601* is an international standard, covering the worldwide exchange, along with the
|
||||
communication of date and time-related data. For example, the date format should be `YYYY-MM-DD`.
|
||||
In the case of July 24th 1981, it should be written as `1981-07-24`.
|
||||
So, in the case of July 24th 1981, it should be written as `1981-07-24`.
|
||||
|
||||
.. tip::
|
||||
When importing Excel files (`.xls`, `.xlsx`), consider using *date cells* to store dates. This
|
||||
|
|
@@ -370,7 +371,7 @@ The tags should be separated by a comma, without any spacing. For example, if a
|
|||
linked to both tags: `Manufacturer` and `Retailer` then 'Manufacturer,Retailer' needs to be encoded
|
||||
in the same column of the :abbr:`CSV (Comma-separated Values)` file.
|
||||
|
||||
- :download:`CSV file for Manufacturer, Retailer <export_import_data/m2m-customers-tags.csv>`
|
||||
- :download:`CSV file for Manufacturer, Retailer <export_import_data/m2m_customers_tags.csv>`
|
||||
|
||||
Import one2many relationships
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
|
@@ -380,34 +381,33 @@ reserved in the :abbr:`CSV (Comma-separated Values)` file for each order line. T
|
|||
is imported on the same row as the information relative to order. Any additional lines need an
|
||||
additional row that does not have any information in the fields relative to the order.
|
||||
|
||||
.. example::
|
||||
A company imports quotations using a :abbr:`CSV (Comma-separated Values)` file, based on demo
|
||||
data:
|
||||
As an example, here is a :abbr:`CSV (Comma-separated Values)` file of some quotations that can be
|
||||
imported, based on demo data:
|
||||
|
||||
- :download:`File for some quotations <export_import_data/o2m-quotations-order-lines.csv>`
|
||||
- :download:`File for some Quotations
|
||||
<export_import_data/purchase.order_functional_error_line_cant_adpat.csv>`
|
||||
|
||||
A company imports purchase orders with their respective purchase order lines using a :abbr:`CSV
|
||||
(Comma-separated Values)` file:
|
||||
The following :abbr:`CSV (Comma-separated Values)` file shows how to import purchase orders with
|
||||
their respective purchase order lines:
|
||||
|
||||
- :download:`Purchase orders with their respective purchase order lines
|
||||
<export_import_data/o2m-purchase-order-lines.csv>`
|
||||
- :download:`Purchase orders with their respective purchase order lines
|
||||
<export_import_data/o2m_purchase_order_lines.csv>`
|
||||
|
||||
A company imports customers and their respective contacts using a :abbr:`CSV (Comma-separated
|
||||
Values)` file:
|
||||
|
||||
- :download:`Customers and their respective contacts
|
||||
<export_import_data/o2m-customers-contacts.csv>`
|
||||
The following :abbr:`CSV (Comma-separated Values)` file shows how to import customers and their
|
||||
respective contacts:
|
||||
|
||||
- :download:`Customers and their respective contacts
|
||||
<export_import_data/o2m_customers_contacts.csv>`
|
||||
|
||||
Import image files
|
||||
------------------
|
||||
|
||||
To import image files along with the :ref:`uploaded <essentials/export_import_data/get-started>` CSV
|
||||
or Excel file, follow the next steps:
|
||||
To import image files along with the :ref:`uploaded <essentials/export_import_data/get-started>`
|
||||
CSV or Excel file, follow the next steps:
|
||||
|
||||
#. Add the image file names to the relevant :guilabel:`Image` column in the data file.
|
||||
#. :ref:`Upload the data file <essentials/export_import_data/get-started>` or reload it by clicking
|
||||
:guilabel:`Load Data File`.
|
||||
#. :ref:`Upload the data file <essentials/export_import_data/get-started>` or reload it by
|
||||
clicking :guilabel:`Load Data File`.
|
||||
#. Click :guilabel:`Upload your files` under the :guilabel:`Files to import` section.
|
||||
#. Select the relevant image files. The number of files selected appears next to the button.
|
||||
#. Click :guilabel:`Test` to verify that all data is valid.
|
||||
|
|
@@ -416,16 +416,15 @@ or Excel file, follow the next steps:
|
|||
imported without any image.
|
||||
|
||||
.. note::
|
||||
|
||||
- The :guilabel:`Files to import` section is enabled if the product template has an
|
||||
- The :guilabel:`Files to import` section is enabled if your product template has an
|
||||
:guilabel:`Image` column with all fields populated.
|
||||
- The image file names in the data file must correspond to the uploaded image files.
|
||||
- When importing a large number of images, specify the maximum batch size in megabytes and set a
|
||||
delay to prevent the system from becoming overloaded. To do so, :doc:`enable the developer mode
|
||||
<../general/developer_mode>` and fill in the :guilabel:`Max size per batch` and the
|
||||
:guilabel:`Delay after each batch` fields in the :guilabel:`Files to import` section. By
|
||||
default, the delay meets the RPC/API call limit defined in the `Odoo Cloud - Acceptable Use
|
||||
Policy <https://www.odoo.com/acceptable-use>`_.
|
||||
- When importing a large number of images, you can specify the maximum batch size in megabytes
|
||||
and set a delay to prevent the system from becoming overloaded. To do so, :doc:`enable the
|
||||
developer mode <../general/developer_mode>` and fill in the :guilabel:`Max size per
|
||||
batch` and the :guilabel:`Delay after each batch` fields in the :guilabel:`Files to import`
|
||||
section. By default, the delay meets the RPC/API call limit defined in the `Odoo Cloud -
|
||||
Acceptable Use Policy <https://www.odoo.com/acceptable-use>`_.
|
||||
|
||||
Import records several times
|
||||
----------------------------
|
||||
|
|
@@ -444,8 +443,8 @@ Value not provided for a specific field
|
|||
---------------------------------------
|
||||
|
||||
If all fields are not set in the CSV file, Odoo assigns the default value for every non-defined
|
||||
field. However, if fields are set with empty values in the :abbr:`CSV (Comma-separated Values)`
|
||||
file, Odoo sets the empty value in the field, instead of assigning the default value.
|
||||
field. But, if fields are set with empty values in the :abbr:`CSV (Comma-separated Values)` file,
|
||||
Odoo sets the empty value in the field, instead of assigning the default value.
|
||||
|
||||
Export/import different tables from an SQL application to Odoo
|
||||
--------------------------------------------------------------
|
||||
|
|
@@ -506,8 +505,8 @@ the original database).
|
|||
|
||||
The two files produced are ready to be imported in Odoo without any modifications. After having
|
||||
imported these two :abbr:`CSV (Comma-separated Values)` files, there are four contacts and three
|
||||
companies (the first two contacts are linked to the first company). Keep in mind to first import the
|
||||
companies, and then the people.
|
||||
companies (the first two contacts are linked to the first company). Keep in mind to first import
|
||||
the companies, and then the people.
|
||||
|
||||
.. _essentials/update-data:
|
||||
|
||||
|
|
@@ -520,10 +519,10 @@ Existing data can be updated in bulk through a data import, as long as the :ref:
|
|||
Prepare data export
|
||||
-------------------
|
||||
|
||||
To update data through an import, first navigate to the data to be updated, and select the
|
||||
:icon:`oi-view-list` :guilabel:`(List)` icon to activate list view. On the far-left side of the
|
||||
list, tick the checkbox for any record to be updated. Then, click :guilabel:`Actions` button, and
|
||||
select :icon:`fa-upload` :guilabel:`Export` from the drop-down menu.
|
||||
To update data through an import, first navigate to the data to be updated, and select the |list| to
|
||||
activate list view. On the far-left side of the list, tick the checkbox for any record to be
|
||||
updated. Then, click |actions|, and select :icon:`fa-upload` :guilabel:`Export` from the drop-down
|
||||
menu.
|
||||
|
||||
On the resulting :guilabel:`Export Data` pop-up window, tick the checkbox labeled, :guilabel:`I want
|
||||
to update data (import-compatible export)`. This automatically includes the *External ID* in the
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
|
@@ -1,6 +0,0 @@
|
|||
Activities,Company,Customer,Order Date,Order Reference,Pricelist,Order Lines/Product Template,Order Lines/Quantity,Order Lines/Unit Price,Order Lines/Discount (%),Order Lines/Taxes
|
||||
Answer questions,My Company (San Francisco),Ready Mat,2025-12-01 10:37:22,S00003,Public Pricelist (USD),Virtual Interior Design,10,30.75,0,Tax 10%
|
||||
,,,,,,[FURN_7777] Office Chair,1,70,0,Tax 10%
|
||||
,,,,,,Deposit,5,150,0,
|
||||
,My Company (San Francisco),Ready Mat,2025-11-01 11:37:00,S00002,Public Pricelist (USD),Virtual Interior Design,24,75,0,Tax 10%
|
||||
,,,,,,Virtual Home Staging,30,38.25,0,Tax 10%
|
||||
|
|
|
@@ -0,0 +1,6 @@
|
|||
"Order Reference","Supplier","Destination","Pricelist","Order Lines / Product","Order Lines / Quantity"
|
||||
"PO000020","ASUSTeK","Stock","Default Purchase Pricelist","ADPT",20
|
||||
,,,,"CARD",30
|
||||
,,,,"C-Case",40
|
||||
"PO000021","Axelor","Stock","Default Purchase Pricelist","CD",5
|
||||
,,,,"CPUa8",15
|
||||
|
|
|
@@ -5,85 +5,159 @@ Adyen
|
|||
`Adyen <https://www.adyen.com/>`_ is a Dutch company that offers several online payment
|
||||
possibilities.
|
||||
|
||||
.. note::
|
||||
Adyen only works with customers processing **more than 10 million annually** or invoicing a
|
||||
**minimum of 1000 transactions per month**.
|
||||
|
||||
.. _payment_providers/adyen/configure_dashboard:
|
||||
|
||||
Adyen configuration
|
||||
===================
|
||||
|
||||
#. Create an Adyen account if necessary and log into your Adyen Customer Area.
|
||||
|
||||
.. tip::
|
||||
Log into your **Test account** to try the integration without charging customers.
|
||||
Switch to your **Live account** once you are ready to accept payments.
|
||||
|
||||
#. `Contact the Adyen support team <https://docs.adyen.com/platforms/quickstart-guide/support#contact-adyen-support>`_
|
||||
to enable the **Multiple partial capture** feature.
|
||||
#. In the Adyen Customer Area, go to :menuselection:`Developers --> API credentials` and click the
|
||||
relevant API credential user name in the list or click :guilabel:`Create new credential` to
|
||||
create a new one.
|
||||
#. In the :guilabel:`Server settings` section, click :guilabel:`Generate API key`, then click the
|
||||
:icon:`fa-copy` (:guilabel:`Copy API key`) icon and save the value for the
|
||||
:ref:`payment_providers/adyen/configure_odoo` step.
|
||||
#. In the :guilabel:`Client settings` section, click :guilabel:`Generate client key`, then
|
||||
click the :icon:`fa-copy` (:guilabel:`Copy API key`) icon and save the value for
|
||||
the :ref:`payment_providers/adyen/configure_odoo` step.
|
||||
#. Enter your Odoo website URL in the :guilabel:`Add allowed origins` field, then click
|
||||
:guilabel:`Add`.
|
||||
#. Click :guilabel:`Save changes` at the bottom of the page.
|
||||
#. Go to :menuselection:`Developers --> Webhooks` in the left menu and click :guilabel:`Create new
|
||||
webhook`.
|
||||
#. In the :guilabel:`Create new webhook` popup, click :guilabel:`Add` on to the :guilabel:`Standard
|
||||
webhook` line.
|
||||
#. On the :guilabel:`Webhook generation` form, in the :guilabel:`Server configuration` section,
|
||||
enter your Odoo database :guilabel:`URL` followed by `/payment/adyen/notification`.
|
||||
#. In the :guilabel:`Security` section, click :guilabel:`Generate` under :guilabel:`HMAC`, then
|
||||
click the :icon:`fa-copy` (:guilabel:`Copy HMAC to the clipboard`) icon and save the value for
|
||||
the :ref:`payment_providers/adyen/configure_odoo` step.
|
||||
#. Click :guilabel:`Save configuration` at the bottom of the page.
|
||||
#. Go to :menuselection:`Developers --> API URLs`, then copy the :guilabel:`Prefix` and save it for
|
||||
the :ref:`payment_providers/adyen/configure_odoo` step.
|
||||
|
||||
.. _payment_providers/adyen/configure_odoo:
|
||||
|
||||
Odoo configuration
|
||||
==================
|
||||
|
||||
#. :ref:`Navigate to the Adyen payment provider<payment_providers/add_new>`.
|
||||
#. Fill in the :guilabel:`Merchant account`, :guilabel:`API Key`, :guilabel:`Client Key`,
|
||||
:guilabel:`HMAC Key`, and :guilabel:`API URL Prefix` fields with the values saved at the
|
||||
:ref:`Adyen configuration step <payment_providers/adyen/configure_dashboard>`.
|
||||
#. Configure the remaining options as needed.
|
||||
#. Set the :guilabel:`State` field to :guilabel:`Enabled`.
|
||||
|
||||
.. tip::
|
||||
If you want to :ref:`test Adyen without affecting live transactions
|
||||
<payment_providers/test-mode>`, use your **Test account** credentials, enter
|
||||
`https://checkout-test.adyen.com` in the :guilabel:`API URL Prefix` field, and set the
|
||||
:guilabel:`State` field to :guilabel:`Test Mode`.
|
||||
|
||||
Manual capture
|
||||
==============
|
||||
|
||||
To enable :ref:`manual capture <payment_providers/manual_capture>` for Adyen payments, follow
|
||||
these steps:
|
||||
|
||||
#. :ref:`Navigate to the Adyen payment provider <payment_providers/add_new>`.
|
||||
#. Go to the :guilabel:`Configuration` tab and enable :guilabel:`Capture Amount Manually`.
|
||||
#. Log in to your Adyen Customer Area, then go to :menuselection:`Settings` and click
|
||||
:guilabel:`Company` in the :guilabel:`Account management` section.
|
||||
#. In the :guilabel:`General` section, click the :icon:`fa-pencil` (:guilabel:`Edit property`)
|
||||
icon next to the :guilabel:`Capture Delay` field.
|
||||
#. In the popup, set the :guilabel:`Capture delay` field to :guilabel:`Manual` and click
|
||||
:guilabel:`Save`.
|
||||
.. seealso::
|
||||
- :ref:`payment_providers/add_new`
|
||||
- :doc:`../payment_providers`
|
||||
|
||||
.. note::
|
||||
- If the transaction is not captured within 7 days, the customer is entitled to revoke it.
|
||||
- You can :ref:`manually capture <payment_providers/manual_capture>` and :ref:`refund
|
||||
<payment_providers/refunds>` payments directly from your Adyen Customer Area.
|
||||
Adyen works only with customers processing **more** than **10 million annually** or invoicing a
|
||||
**minimum** of **1.000** transactions **per month**.
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
.. seealso::
|
||||
:ref:`payment_providers/add_new`
|
||||
|
||||
First, reach Adyen support to enable :guilabel:`multiple partial capture` for you.
|
||||
|
||||
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 an Adyen *test account*, head to
|
||||
:menuselection:`Accounting --> Configuration --> Payment Providers`. There, click on
|
||||
:guilabel:`Adyen`, enable :guilabel:`Test Mode` and enter your credentials in the
|
||||
:guilabel:`Credentials` tab.
|
||||
|
||||
.. _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:`Server settings --> Authentification` and copy or generate your **API Key**.
|
||||
Be careful to copy your API key as you'll not be allowed to get it later without generating a new
|
||||
one.
|
||||
|
||||
Now, head to :menuselection:`Client settings --> Authentification` and cody or generate your
|
||||
**Client Key**. This is also the place where you can :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:: adyen/adyen-add-webhook.png
|
||||
:align: center
|
||||
:alt: Configure a webhook.
|
||||
|
||||
There, in :menuselection:`General --> Server configuration --> URL`, enter your server address
|
||||
followed by `/payment/adyen/notification`.
|
||||
|
||||
.. image:: adyen/adyen-webhook-url.png
|
||||
:align: center
|
||||
:alt: Enter the notification URL.
|
||||
|
||||
Then enter :menuselection:`Security --> HMAC Key --> Generate`. Be careful to copy the key as you
|
||||
will not be allowed to do it later without generating a new one.
|
||||
|
||||
.. image:: adyen/adyen-hmac-key.png
|
||||
:align: center
|
||||
:alt: Generate a HMAC key and save it.
|
||||
|
||||
You have to save the webhook to finalize its creation.
|
||||
|
||||
.. _adyen/urls:
|
||||
|
||||
API URLs
|
||||
~~~~~~~~
|
||||
|
||||
All Adyen API URLs include a customer area-specific prefix generated by Adyen. To configure the
|
||||
URLs, proceed as follows:
|
||||
|
||||
#. Log into your Adyen account, then go to :menuselection:`Developers --> API URLs`.
|
||||
#. Copy the :guilabel:`Prefix` for your live Customer area (i.e., **data center**) and save it for
|
||||
later.
|
||||
|
||||
.. image:: adyen/adyen-api-urls.png
|
||||
:alt: Copy the prefix for the Adyen APIs
|
||||
|
||||
#. In Odoo, :ref:`navigate to the payment provider Adyen <payment_providers/add_new>`.
|
||||
#. In the :guilabel:`Checkout API URL` field, enter the following URL and replace `yourprefix` with
|
||||
the prefix you previously saved:
|
||||
`https://yourprefix-checkout-live.adyenpayments.com/checkout`
|
||||
#. In the :guilabel:`Recurring API URL` field, enter the following URL and replace `yourprefix` with
|
||||
the prefix you previously saved:
|
||||
`https://yourprefix-pal-live.adyenpayments.com/pal/servlet/Recurring`.
|
||||
|
||||
.. note::
|
||||
If you are trying Adyen as a test, you can use the following URLs instead:
|
||||
|
||||
- :guilabel:`Checkout API URL`: `https://checkout-test.adyen.com`
|
||||
- :guilabel:`Recurring API URL`: `https://pal-test.adyen.com/pal/servlet/Recurring`
|
||||
|
||||
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:`Add allowed origins`, then add the URLs from
|
||||
where payments will be made (the URLs of the servers hosting your Odoo instances).
|
||||
|
||||
.. image:: adyen/adyen-allowed-origins.png
|
||||
:align: center
|
||||
:alt: Allows payments originated from a specific domain.
|
||||
|
||||
Place a hold on a card
|
||||
----------------------
|
||||
|
||||
Adyen allows you to capture an amount manually instead of having an immediate capture.
|
||||
|
||||
To set it up, enable the **Capture Amount Manually** option on Odoo, as explained in the
|
||||
:ref:`payment providers documentation <payment_providers/manual_capture>`.
|
||||
|
||||
Then, open your Adyen Merchant Account, go to :menuselection:`Account --> Settings`, and set the
|
||||
**Capture Delay** to **manual**.
|
||||
|
||||
.. image:: adyen/adyen_capture_delay.png
|
||||
:align: center
|
||||
:alt: Capture Delay settings in Adyen
|
||||
|
||||
.. caution::
|
||||
- If you configure Odoo to capture amounts manually, make sure to set the **Capture Delay** to
|
||||
**manual** on Adyen. Otherwise, the transaction will be blocked in the authorized state in
|
||||
Odoo.
|
||||
|
||||
.. note::
|
||||
- After **7 days**, if the transaction has not been captured yet, the customer has the right to
|
||||
**revoke** it.
|
||||
|
||||
.. seealso::
|
||||
:doc:`../payment_providers`
|
||||
|
|
|
|||
|
|
@@ -4,31 +4,28 @@ Iyzico
|
|||
|
||||
`Iyzico <https://www.iyzico.com/>`_ is an online payment provider covering Turkey.
|
||||
|
||||
.. _payment_providers/iyzico/configure-dashboard:
|
||||
.. _payment_providers/iyzico/configure_dashboard:
|
||||
|
||||
Configuration on the Iyzico Dashboard
|
||||
=====================================
|
||||
|
||||
#. Log into the `Iyzico Dashboard <https://merchant.iyzipay.com>`_.
|
||||
#. Navigate to :menuselection:`Settings --> Merchant Settings`.
|
||||
#. Copy the values of the :guilabel:`API Key` and :guilabel:`Secret Key` fields and save them for
|
||||
the :ref:`payment_providers/iyzico/configure-odoo` step.
|
||||
#. On the same :guilabel:`Merchant Settings` page, enable :guilabel:`Merchant Notifications`.
|
||||
#. Navigate to :menuselection:`Settings --> Merchant Settings` and copy the values of the
|
||||
:guilabel:`API Key` and :guilabel:`Secret Key` fields and save them for later.
|
||||
#. In the same Merchant Settings page, Find and enable :guilabel:`Merchant Notifications` section.
|
||||
#. | Enter your Odoo database URL followed by `/payment/iyzico/webhook` in the
|
||||
:guilabel:`Merchant Notification Url` field.
|
||||
| For example: `https://example.odoo.com/payment/iyzico/webhook`.
|
||||
#. Click :guilabel:`Save`.
|
||||
|
||||
.. _payment_providers/iyzico/configure-odoo:
|
||||
Configuration on Odoo
|
||||
=====================
|
||||
|
||||
Odoo configuration
|
||||
==================
|
||||
|
||||
#. :ref:`Navigate to the payment provider Iyzico <payment_providers/add_new>`.
|
||||
#. In the :guilabel:`Credentials` tab, fill the :guilabel:`API Key` and :guilabel:`Secret Key`
|
||||
fields with the values you saved at the step :ref:`payment_providers/iyzico/configure-dashboard`.
|
||||
#. Configure the remaining options as needed.
|
||||
#. Set the :guilabel:`State` field to :guilabel:`Enabled`.
|
||||
#. :ref:`Navigate to the payment provider Iyzico <payment_providers/add_new>` and change its
|
||||
state to :guilabel:`Enabled`.
|
||||
#. In the :guilabel:`Credentials` tab, fill the :guilabel:`API Key`, and :guilabel:`Secret Key`, with
|
||||
the values you saved at the step :ref:`payment_providers/iyzico/configure_dashboard`.
|
||||
#. Configure the rest of the options to your liking.
|
||||
|
||||
.. seealso::
|
||||
:doc:`../payment_providers`
|
||||
|
|
|
|||
|
|
@@ -4,30 +4,28 @@ Mollie
|
|||
|
||||
`Mollie <https://www.mollie.com/>`_ is an online payments platform established in the Netherlands.
|
||||
|
||||
.. _payment_providers/mollie/configure_dashboard:
|
||||
|
||||
Mollie configuration
|
||||
====================
|
||||
|
||||
#. `Create a Mollie account
|
||||
<https://my.mollie.com/dashboard/signup>`_ if necessary
|
||||
and log in to the `Mollie Dashboard <https://my.mollie.com/dashboard/login>`_.
|
||||
#. Go to :menuselection:`Payments` in the top menu, then click :guilabel:`API keys`.
|
||||
#. :guilabel:`Copy` the :guilabel:`Live API Key` (or the :guilabel:`Test API Key` if you
|
||||
wish to test the integration without affecting live transactions) and save it for the
|
||||
:ref:`payment_providers/mollie/configure_odoo` step.
|
||||
|
||||
.. _payment_providers/mollie/configure_odoo:
|
||||
|
||||
Odoo configuration
|
||||
==================
|
||||
|
||||
#. :ref:`Navigate to the payment provider Mollie <payment_providers/add_new>`
|
||||
#. Fill in the :guilabel:`API Key` with the value :ref:`previously saved
|
||||
<payment_providers/mollie/configure_dashboard>`.
|
||||
#. Configure the remaining options as needed.
|
||||
#. Set the :guilabel:`State` field to :guilabel:`Enabled` (or :guilabel:`Test Mode` if you
|
||||
want to :ref:`test the integration without affecting live transactions <payment_providers/test-mode>`).
|
||||
Configuration
|
||||
=============
|
||||
|
||||
.. seealso::
|
||||
:doc:`../payment_providers`
|
||||
- :ref:`payment_providers/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 provider.
|
||||
|
||||
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_providers`
|
||||
|
|
|
|||
|
|
@@ -66,10 +66,7 @@ Stripe configuration
|
|||
#. Go to `the API keys page on Stripe <https://dashboard.stripe.com/account/apikeys>`_, or log into
|
||||
your Stripe dashboard and go to :menuselection:`Developers --> API Keys`.
|
||||
#. In the :guilabel:`Standard keys` section, copy the :guilabel:`Publishable key` and the
|
||||
:guilabel:`Secret key` and save them for the :ref:`payment_providers/stripe/odoo-configuration`
|
||||
step.
|
||||
|
||||
.. _payment_providers/stripe/odoo-configuration:
|
||||
:guilabel:`Secret key` and save them for later.
|
||||
|
||||
Odoo configuration
|
||||
------------------
|
||||
|
|
|
|||
|
|
@@ -201,15 +201,6 @@ Redirections
|
|||
If the database is hosted on **Odoo Online** or **Odoo.sh**, using redirections is recommended. They
|
||||
allow messages to be received without delay in the database.
|
||||
|
||||
.. warning::
|
||||
When configuring email redirections with Microsoft 365 (Exchange Online), be aware that certain
|
||||
technical limitations may affect your setup. Some users have reported that Microsoft 365 does not
|
||||
support true redirection and only allows forwarding, which may not behave as needed for Odoo's
|
||||
email routing.
|
||||
|
||||
For more information on Microsoft Exchange configuration, visit `Microsoft Learn
|
||||
<https://learn.microsoft.com/en-us/exchange/exchange-online>`_.
|
||||
|
||||
It is mandatory to redirect the catchall and bounce address to the Odoo subdomain of the database.
|
||||
Every other alias used must be redirected as well.
|
||||
|
||||
|
|
|
|||
|
|
@@ -18,6 +18,9 @@ and used throughout the inventory process.
|
|||
.. seealso::
|
||||
Set up :doc:`../setup/rfid`
|
||||
|
||||
.. important::
|
||||
If using Odoo 18, |GS1|'s Encoder/Decoder tool **must** be used to retrieve EPCs.
|
||||
|
||||
.. _barcode/operations/retrieve_epcs_gs1:
|
||||
|
||||
Retrieving EPCs from GS1
|
||||
|
|
@@ -34,30 +37,6 @@ To retrieve an EPC to encode on a tag, use `GS1's EPC Encoder/Decoder tool
|
|||
.. image:: retrieve_epcs/retrieve-from-gs1.png
|
||||
:alt: Complete the fields of the EPC Encoder/Decoder tool.
|
||||
|
||||
.. _barcode/operations/retrieve_epcs_odoo:
|
||||
|
||||
Generating EPCs in Odoo
|
||||
=======================
|
||||
|
||||
Generate EPCs for tracked products directly in Odoo. Products should be tracked by serial number,
|
||||
but this is not a requirement. A GTIN-14-compatible
|
||||
|
||||
To retrieve the EPCs for a receipt of products:
|
||||
|
||||
#. On the receipt, click the :icon:`fa-list` :guilabel:`Detailed Operations` button next to the
|
||||
:guilabel:`Quantity` field. The :guilabel:`Detailed Operations` box opens.
|
||||
#. From here, specify or generate serial numbers for the products. Be sure to save the serial
|
||||
numbers.
|
||||
#. :guilabel:`Validate` the receipt.
|
||||
#. Click the :guilabel:`Moves` smart button. Select all received items, then click the
|
||||
:icon:`fa-cog` :guilabel:`Actions` button, then select :guilabel:`Export`.
|
||||
#. On the :guilabel:`Export Data` screen, select :guilabel:`Electronic Product Code` from the list
|
||||
of available fields, then click :guilabel:`Export`. The file downloads to the device. All of the
|
||||
EPCs for the receipt are included in that file.
|
||||
|
||||
.. note::
|
||||
EPCs can be exported from any :guilabel:`Moves` list, not just receipts.
|
||||
|
||||
.. _barcode/operations/write_epcs:
|
||||
|
||||
Writing EPCs to RFID tags
|
||||
|
|
|
|||
|
|
@@ -3,11 +3,13 @@ Landed costs
|
|||
============
|
||||
|
||||
.. |RfQ| replace:: :abbr:`RfQ (Request for Quotation)`
|
||||
.. |RfQs| replace:: :abbr:`RfQs (Requests for Quotation)`
|
||||
.. |PO| replace:: :abbr:`PO (Purchase Order)`
|
||||
.. |FIFO| replace:: :abbr:`FIFO (First In First Out)`
|
||||
.. |AVCO| replace:: :abbr:`AVCO (Average Costing)`
|
||||
|
||||
When shipping products to customers, the landed cost is the total price of a product or shipment,
|
||||
including all expenses associated with shipping the product.
|
||||
|
||||
In Odoo, the *Landed Costs* feature is used to take additional costs into account when calculating
|
||||
the valuation of a product. This includes the cost of shipment, insurance, customs duties, taxes,
|
||||
and other fees.
|
||||
|
|
@@ -35,16 +37,15 @@ Create landed cost product
|
|||
==========================
|
||||
|
||||
For charges that are consistently added as landed costs, a landed cost product can be created in
|
||||
Odoo. This way, a landed cost product can be quickly added to a request for quotation (|RfQ|) or a
|
||||
vendor bill as an invoice line, instead of having to be manually entered every time a new vendor
|
||||
bill is created.
|
||||
Odoo. This way, a landed cost product can be quickly added to a vendor bill as an invoice line,
|
||||
instead of having to be manually entered every time a new vendor bill is created.
|
||||
|
||||
To do this, create a new product by going to :menuselection:`Inventory app --> Products -->
|
||||
Products`, and clicking :guilabel:`New`.
|
||||
|
||||
Assign a name to the landed cost product in the :guilabel:`Product Name` field (i.e. `International
|
||||
Shipping`). In the :guilabel:`Product Type` field, select :guilabel:`Service` as the
|
||||
:guilabel:`Product Type`.
|
||||
Shipping`). In the :guilabel:`Product Type` field, click the drop-down menu, and select
|
||||
:guilabel:`Service` as the :guilabel:`Product Type`.
|
||||
|
||||
.. important::
|
||||
Landed cost products **must** have their :guilabel:`Product Type` set to :guilabel:`Service`.
|
||||
|
|
@@ -64,8 +65,7 @@ appears below it, prompting a selection. Clicking that drop-down menu reveals th
|
|||
.. image:: landed_costs/integrating-landed-costs-landed-cost-product.png
|
||||
:alt: Is a Landed Cost checkbox and Default Split Method on service type product form.
|
||||
|
||||
When creating new |RfQs|, this product can be added as an invoice line as a landed cost. This
|
||||
product can also be added to vendor bills that are in the draft state.
|
||||
When creating new vendor bills, this product can be added as an invoice line as a landed cost.
|
||||
|
||||
.. important::
|
||||
To apply a landed cost on a vendor bill, products in the original |PO| **must** belong to a
|
||||
|
|
@@ -74,12 +74,12 @@ product can also be added to vendor bills that are in the draft state.
|
|||
Create purchase order
|
||||
=====================
|
||||
|
||||
Navigate to :menuselection:`Purchase app --> New` to create a new |RfQ|. In the :guilabel:`Vendor`
|
||||
field, add a vendor to order products from. Then, click :guilabel:`Add a product`, under the
|
||||
:guilabel:`Products` tab, to add products to the |RfQ|.
|
||||
Navigate to :menuselection:`Purchase app --> New` to create a new request for quotation (RfQ). In
|
||||
the :guilabel:`Vendor` field, add a vendor to order products from. Then, click :guilabel:`Add a
|
||||
product`, under the :guilabel:`Products` tab, to add products to the |RfQ|.
|
||||
|
||||
Once ready, click :guilabel:`Confirm Order` to confirm the order. Then, click :guilabel:`Receive`
|
||||
once the products have been received, followed by :guilabel:`Validate`.
|
||||
Once ready, click :guilabel:`Confirm Order` to confirm the order. Then, click :guilabel:`Receive
|
||||
Products` once the products have been received, followed by :guilabel:`Validate`.
|
||||
|
||||
Create vendor bill
|
||||
------------------
|
||||
|
|
@@ -88,16 +88,15 @@ Once the vendor fulfills the |PO| and sends a bill, a vendor bill can be created
|
|||
Odoo.
|
||||
|
||||
Navigate to the :menuselection:`Purchase app`, and click into the |PO| for which a vendor bill
|
||||
should be created. Then, upload the bill or click the :guilabel:`Bill Matching` smart button to
|
||||
match with an existing bill. This opens a new :guilabel:`Vendor Bill` in the :guilabel:`Draft`
|
||||
stage.
|
||||
should be created. Then, click :guilabel:`Create Bill`. This opens a new :guilabel:`Vendor Bill` in
|
||||
the :guilabel:`Draft` stage.
|
||||
|
||||
In the :guilabel:`Bill Date` field, click the line to open a calendar popover menu, and select the
|
||||
date on which this draft bill should be billed.
|
||||
|
||||
Click :guilabel:`Add a line`. Add the landed cost product to the vendor bill.
|
||||
|
||||
Click the :icon:`fa-cloud-upload` :guilabel:`(Save)` icon to manually save and update the
|
||||
Then, under the :guilabel:`Invoice Lines` tab, click :guilabel:`Add a line`, and click the drop-down
|
||||
menu in the :guilabel:`Product` column to select the previously-created landed cost product. Click
|
||||
the :icon:`fa-cloud-upload` :guilabel:`(cloud with arrow)` icon to manually save and update the
|
||||
draft bill.
|
||||
|
||||
.. image:: landed_costs/integrating-landed-costs-checkboxes.png
|
||||
|
|
@@ -115,13 +114,14 @@ Additionally, at the top of the form, a :guilabel:`Create Landed Costs` button a
|
|||
Add landed cost
|
||||
===============
|
||||
|
||||
Click :guilabel:`Create Landed Costs` at the top of the vendor bill.
|
||||
Once a landed cost is added to the vendor bill, click :guilabel:`Create Landed Costs` at the top of
|
||||
the vendor bill.
|
||||
|
||||
Doing so automatically creates a landed cost record, with a set landed cost pre-filled in the
|
||||
product line in the :guilabel:`Additional Costs` tab.
|
||||
|
||||
From the :guilabel:`Landed Cost` form, click the :guilabel:`Transfers` drop-down menu, and select
|
||||
which transfer the landed cost belongs to. Only validated transfers can be selected.
|
||||
which transfer the landed cost belongs to.
|
||||
|
||||
.. image:: landed_costs/integrating-landed-costs-transfers-menu.png
|
||||
:alt: Landed cost form with selected receipt transfer.
|
||||
|
|
@@ -136,17 +136,28 @@ After setting the picking from the :guilabel:`Transfers` drop-down menu, click :
|
|||
|
||||
Click the :guilabel:`Valuation Adjustments` tab to see the impact of the landed costs. The
|
||||
:guilabel:`Original Value` column lists the original price of the |PO|, the :guilabel:`Additional
|
||||
Landed Cost` column displays the landed cost, and the :guilabel:`New Value` column displays the sum
|
||||
of the two, for the total cost of the |PO|.
|
||||
Landed Cost` column displays the landed cost, and the :guilabel:`New Value` displays the sum of the
|
||||
two, for the total cost of the |PO|.
|
||||
|
||||
Once ready, click :guilabel:`Validate` to post the landed cost entry to the accounting journal.
|
||||
|
||||
This causes a :guilabel:`Valuation` smart button to appear at the top of the form. Click the
|
||||
:guilabel:`Valuation` smart button to open a :guilabel:`Stock Valuation` page, with the product's
|
||||
updated valuation listed.
|
||||
|
||||
.. note::
|
||||
Each journal entry created for a landed cost on a vendor bill can be viewed in the
|
||||
:menuselection:`Accounting` app.
|
||||
For a :guilabel:`Valuation` smart button to appear upon validation, the product's
|
||||
:guilabel:`Product Type` **must** be set to :guilabel:`Storable`.
|
||||
|
||||
To view the valuation of *every* product, including landed costs, navigate to
|
||||
:menuselection:`Inventory app --> Reporting --> Valuation`.
|
||||
|
||||
.. note::
|
||||
Each journal entry created for a landed cost on a vendor bill can be viewed in the *Accounting*
|
||||
app.
|
||||
|
||||
To locate these journal entries, navigate to :menuselection:`Accounting app --> Accounting -->
|
||||
Journal Entries`, and locate the correct entry, by number (e.g. `STJ/2025/XXXXX`).
|
||||
Journal Entries`, and locate the correct entry, by number (i.e. `PBNK1/2024/XXXXX`).
|
||||
|
||||
Click into the journal entry to view the :guilabel:`Journal Items`, and other information about
|
||||
the entry.
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 70 KiB |
|
|
@@ -4,11 +4,6 @@
|
|||
Delivery methods
|
||||
================
|
||||
|
||||
In Odoo, *delivery methods* make it possible to calculate shipping costs directly on sales orders
|
||||
and e-commerce carts, providing customers and sales teams with accurate shipping fee information.
|
||||
This transparency helps close sales by showing customers the exact cost for each shipping carrier or
|
||||
delivery timeframe.
|
||||
|
||||
When activated in Odoo, the *Delivery Methods* setting adds the option of calculating the cost of
|
||||
shipping on sales orders and e-commerce shopping carts.
|
||||
|
||||
|
|
@@ -23,11 +18,11 @@ are calculated based on the carrier's pricing information.
|
|||
Configuration
|
||||
=============
|
||||
|
||||
To calculate shipping on sales orders and e-commerce, the **Delivery Costs** module must be
|
||||
installed. To do so, navigate to the :menuselection:`Apps` application from the main Odoo dashboard.
|
||||
To calculate shipping on sales orders and e-commerce, the *Delivery Costs* module must be installed.
|
||||
To do so, navigate to the :menuselection:`Apps` application from the main Odoo dashboard.
|
||||
|
||||
Then, remove the :guilabel:`Apps` filter, and type in `Delivery Costs` in the search bar. After
|
||||
finding the :guilabel:`Delivery Costs` module, click :guilabel:`Install` to install it.
|
||||
Then, remove the :guilabel:`Apps` filter, and type in `Delivery Costs` in the :guilabel:`Search...`
|
||||
bar. After finding the :guilabel:`Delivery Costs` module, click :guilabel:`Activate` to install it.
|
||||
|
||||
.. image:: setup_configuration/install-module.png
|
||||
:alt: Install the Delivery Costs module.
|
||||
|
|
@@ -37,34 +32,27 @@ finding the :guilabel:`Delivery Costs` module, click :guilabel:`Install` to inst
|
|||
Add shipping
|
||||
============
|
||||
|
||||
Shipping methods are added to sales orders in the form of delivery products, which appear as
|
||||
Shipping methods can be added to sales orders in the form of delivery products, which appear as
|
||||
individual line items. First, navigate to the desired sales order by going to :menuselection:`Sales
|
||||
app --> Orders --> Orders`.
|
||||
|
||||
Open the desired sales order, then click the :guilabel:`Add shipping` button. The :guilabel:`Add a
|
||||
shipping method` pop-up window opens. Then, using the drop-down menu, select an available shipping
|
||||
method.
|
||||
On the sales order, click the :guilabel:`Add shipping` button, which opens the :guilabel:`Add a
|
||||
shipping method` pop-up window. Then, choose a :guilabel:`Shipping Method` from the list.
|
||||
|
||||
The :guilabel:`Total Order Weight` is pre-filled based on product weights (that are defined in the
|
||||
:ref:`Inventory <inventory/product_management/manufacture>` tab for each product form). Edit the
|
||||
field to specify the exact weight, and then click :guilabel:`Add` to add the shipping method.
|
||||
:guilabel:`Inventory` tab for each product form). Edit the field to specify the exact weight, and
|
||||
then click :guilabel:`Add` to add the shipping method.
|
||||
|
||||
.. important::
|
||||
.. note::
|
||||
The amount defined in :guilabel:`Total Order Weight` overwrites the total product weights defined
|
||||
on the product form.
|
||||
|
||||
.. note::
|
||||
Some connected shipping methods require obtaining rates from the carrier. In this situation,
|
||||
click the :icon:`oi-arrow-right` :guilabel:`Get rate` button, and the shipping costs are
|
||||
automatically updated from the carrier. These rates cannot be modified.
|
||||
|
||||
The shipping cost is added as a line item in the :guilabel:`Order Lines` tab as the
|
||||
:guilabel:`Delivery Product` detailed on the shipping method form.
|
||||
The shipping cost is added to the *sales order line* as the :guilabel:`Delivery Product` detailed on
|
||||
the shipping method form.
|
||||
|
||||
.. example::
|
||||
A customer purchased a left-sided desk with storage and requested the item be delivered by hand.
|
||||
This delivery method is defined as `Furniture Delivery (Manual)` and has a cost of `$200`. The
|
||||
sales order contains two line items: one for the desk, and another for the delivery method.
|
||||
`Furniture Delivery`, a delivery product with a fixed rate of `$200`, is added to sales order
|
||||
`S00088`.
|
||||
|
||||
.. image:: setup_configuration/delivery-product.png
|
||||
:alt: Show delivery order on the sales order line.
|
||||
|
|
@@ -73,9 +61,7 @@ Delivery order
|
|||
--------------
|
||||
|
||||
The shipping method added to the sales order is linked to the shipping carrier details on the
|
||||
delivery order. After confirming the order, a :icon:`fa-truck` :guilabel:`Delivery` smart button
|
||||
appears at the top of the page. Click the :icon:`fa-truck` :guilabel:`Delivery` smart button to open
|
||||
the warehouse delivery form. To add or change the delivery method on the delivery itself, open the
|
||||
delivery order. To add or change the delivery method on the delivery itself, go to the
|
||||
:guilabel:`Additional Info` tab and modify the :guilabel:`Carrier` field.
|
||||
|
||||
.. image:: setup_configuration/delivery-order.png
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 4.6 KiB |
|
|
@@ -33,9 +33,9 @@ a form to provide details about the shipping provider, including:
|
|||
|
||||
- :guilabel:`Delivery Method` (*Required field*): the name of the delivery method (e.g. `flat-rate
|
||||
shipping`, `same day delivery`, etc.).
|
||||
- :guilabel:`Website`: configure shipping methods for an **eCommerce** page. Select the applicable
|
||||
website from the drop-down menu, or leave it blank to apply the method to all web pages. This
|
||||
field only appears when the **eCommerce** app is enabled.
|
||||
- :guilabel:`Website`: configure :doc:`delivery methods for an ecommerce
|
||||
</applications/websites/ecommerce/shipping>`. Select the applicable website from the drop-down
|
||||
menu, or leave it blank to apply the method to all web pages.
|
||||
- :guilabel:`Provider` (*Required field*): choose the delivery service, like FedEx, if using a
|
||||
:ref:`third-party carrier <inventory/shipping/third_party>`. Ensure the integration with the
|
||||
shipping carrier is properly installed and select the provider from the drop-down menu. For more
|
||||
|
|
@@ -46,12 +46,10 @@ a form to provide details about the shipping provider, including:
|
|||
<payment_providers/inperson_payments/cash_on_delivery>` payment method when selecting this
|
||||
delivery option on the ecommerce website.
|
||||
- :guilabel:`Company`: If the shipping method should apply to a specific company, select it from the
|
||||
drop-down menu. Leave the field blank to apply the method to all companies. This field only
|
||||
appears in multi-company databases.
|
||||
drop-down menu. Leave the field blank to apply the method to all companies.
|
||||
- :guilabel:`Routes`: select the applicable routes to define different delivery methods, such as
|
||||
standard or express shipping, based on varying lead times. This field only appears when you have
|
||||
enabled multi-step routes in your inventory configuration settings. For more information, refer to
|
||||
the :ref:`Set routes on shipping method <inventory/shipping_receiving/shipping-route>` section.
|
||||
standard or express shipping, based on varying lead times. For more information, jump to the
|
||||
:ref:`Set routes on shipping method <inventory/shipping_receiving/shipping-route>` section.
|
||||
- :guilabel:`Delivery Product` (*Required field*): the product listed on the :ref:`sales order line
|
||||
<inventory/shipping/sales-order>` as the delivery charge.
|
||||
- :guilabel:`Free if order amount is above`: checking this box enables free shipping if the customer
|
||||
|
|
@@ -60,17 +58,6 @@ a form to provide details about the shipping provider, including:
|
|||
delivery. When a custom carrier is added in a delivery order, the tracking button is enabled, and
|
||||
the link directs to the tracking portal with that URL.
|
||||
|
||||
.. example::
|
||||
To set up `$200` flate-rate shipping, fill in the following fields:
|
||||
|
||||
- :guilabel:`Delivery Method`: `Furniture Delivery (Manual)`
|
||||
- :guilabel:`Provider`: :guilabel:`Fixed Price`
|
||||
- :guilabel:`Fixed Price`: `200`
|
||||
- :guilabel:`Delivery Product`: :guilabel:`Furniture Delivery (manual)`
|
||||
|
||||
.. image:: new_delivery_method/sample-delivery-method.png
|
||||
:alt: Set up a delivery method with a fixed price of 200.
|
||||
|
||||
.. _inventory/shipping_receiving/availability:
|
||||
|
||||
Use the :guilabel:`Availability` tab to define conditions for the delivery method based on the
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 22 KiB |
|
|
@@ -14,25 +14,39 @@ vendor. Vendor bills record payables as they arrive from vendors, and can includ
|
|||
the goods and/or services purchased, sales taxes, freight and delivery charges, and more.
|
||||
|
||||
In Odoo, a vendor bill can be created at different points in the purchasing process, depending on
|
||||
the *bill control* policy selected on the product's settings.
|
||||
the *bill control* policy chosen in the *Purchase* app's settings.
|
||||
|
||||
Bill control policies
|
||||
=====================
|
||||
|
||||
To configure a product's bill control policy, navigate to :menuselection:`Purchase app --> Products
|
||||
Products`, and click on the desired product to open it. Then, click on the :guilabel:`Purchase` tab.
|
||||
Under the *Vendor Bills* section, the *Control Policy* field lists two policy options:
|
||||
To configure the default bill control policy, navigate to :menuselection:`Purchase app -->
|
||||
Configuration --> Settings`, and scroll to the :guilabel:`Invoicing` section.
|
||||
|
||||
- :guilabel:`On ordered quantities`: creates a vendor bill as soon as a purchase order is confirmed.
|
||||
The :guilabel:`Bill Control` feature lists two policy options: :guilabel:`Ordered quantities` and
|
||||
:guilabel:`Received quantities`.
|
||||
|
||||
The policy selected acts as the default for any new product created. Each policy acts as follows:
|
||||
|
||||
- :guilabel:`Ordered quantities`: creates a vendor bill as soon as a purchase order is confirmed.
|
||||
The products and quantities in the purchase order are used to generate a draft bill.
|
||||
- :guilabel:`On received quantities`: a bill is only created **after** all (or part) of the total
|
||||
order has been received. The products and quantities received are used to generate a draft bill.
|
||||
- :guilabel:`Received quantities`: a bill is only created **after** all (or part) of the total order
|
||||
has been received. The products and quantities received are used to generate a draft bill.
|
||||
|
||||
.. image:: manage/manage-configuration-settings.png
|
||||
:alt: Bill control policies on a product record.
|
||||
:align: center
|
||||
:alt: Bill control policies in purchase app settings.
|
||||
|
||||
Once a policy is selected, click :guilabel:`Save` to save the changes.
|
||||
|
||||
.. tip::
|
||||
If a product needs a different control policy than the one set in the *Purchase* app settings,
|
||||
that product's control policy can be overridden by going to the :guilabel:`Purchase` tab on a
|
||||
product form, and selecting the desired policy in the :guilabel:`Control Policy` field.
|
||||
|
||||
.. image:: manage/manage-product-form.png
|
||||
:align: center
|
||||
:alt: Control policy field on product form.
|
||||
|
||||
3-way matching
|
||||
--------------
|
||||
|
||||
|
|
@@ -48,6 +62,105 @@ Tick the checkbox next to :guilabel:`3-way matching`, and click :guilabel:`Save`
|
|||
The :guilabel:`3-way matching` feature is **only** intended to work with the :guilabel:`Bill
|
||||
Control` policy set to :guilabel:`Received quantities`.
|
||||
|
||||
Create and manage vendor bills on receipts
|
||||
==========================================
|
||||
|
||||
When products are received into a company's warehouse, receipts are created. Once the company
|
||||
processes the received quantities, they can choose to create a vendor bill directly from the
|
||||
warehouse receipt form.
|
||||
|
||||
Depending on the bill control policy chosen in the settings, vendor bill creation is completed at
|
||||
different steps of the procurement process.
|
||||
|
||||
Ordered quantities
|
||||
------------------
|
||||
|
||||
To create and manage vendor bills for receipts with the *Bill Control* policy set to *Ordered
|
||||
Quantities*, first navigate to the :menuselection:`Purchase app`, and click :guilabel:`New` from the
|
||||
:guilabel:`Requests for Quotation` dashboard.
|
||||
|
||||
Doing so opens a new :guilabel:`Request for Quotation` (RfQ) form. On the blank |RfQ| form, add a
|
||||
:guilabel:`Vendor`, and click :guilabel:`Add a line` under the :guilabel:`Product` tab to add
|
||||
products to the order.
|
||||
|
||||
On the product line, select a product from the drop-down menu in the :guilabel:`Product` field, and
|
||||
enter the quantity to order in the :guilabel:`Quantity` field.
|
||||
|
||||
Once ready, click :guilabel:`Confirm Order` to confirm the |RfQ| into a |PO|.
|
||||
|
||||
Then, click :guilabel:`Create Bill` to create a vendor bill. This opens a :guilabel:`Vendor Bill`
|
||||
form in the :guilabel:`Draft` state. From here, add a billing date in the :guilabel:`Bill Date`
|
||||
field.
|
||||
|
||||
Once ready, confirm the bill by clicking :guilabel:`Confirm` on the :guilabel:`Vendor Bill` page.
|
||||
|
||||
.. tip::
|
||||
Since the bill control policy is set to *Ordered quantities*, the draft bill can be confirmed as
|
||||
soon as it is created, before any products have been received.
|
||||
|
||||
Once a payment has been received, click :guilabel:`Register Payment` at the top of the bill to
|
||||
record it.
|
||||
|
||||
Doing so causes a :guilabel:`Register Payment` pop-up window to appear, wherein a payment
|
||||
:guilabel:`Journal` can be chosen, and a :guilabel:`Payment Method` selected.
|
||||
|
||||
Additionally, the bill :guilabel:`Amount`, :guilabel:`Payment Date`, and :guilabel:`Memo`
|
||||
(:dfn:`Reference Number`) can be edited from this pop-up window, if necessary.
|
||||
|
||||
Once ready, click :guilabel:`Create Payment` to finish creating the :guilabel:`Vendor Bill`. Doing
|
||||
so displays a green :guilabel:`Paid` banner on the |RfQ| form.
|
||||
|
||||
.. image:: manage/manage-draft-vendor-bill.png
|
||||
:align: center
|
||||
:alt: Vendor bill form for ordered quantities control policy.
|
||||
|
||||
Received quantities
|
||||
-------------------
|
||||
|
||||
To create and manage vendor bills for receipts with the bill control policy set to *Received
|
||||
quantities*, first navigate to the :menuselection:`Purchase` app, and click :guilabel:`New`.
|
||||
|
||||
Doing so opens a new |RfQ| form. On the blank |RfQ| form, add a :guilabel:`Vendor`, and click
|
||||
:guilabel:`Add a line` under the :guilabel:`Product` tab to add products to the order.
|
||||
|
||||
On the product line, select a product from the drop-down menu in the :guilabel:`Product` field, and
|
||||
enter the quantity to order in the :guilabel:`Quantity` field.
|
||||
|
||||
Once ready, click :guilabel:`Confirm Order` to confirm the |RfQ| into a |PO|.
|
||||
|
||||
.. important::
|
||||
When using the *Received quantities* control policy, clicking :guilabel:`Create Bill` before any
|
||||
products are received causes an :guilabel:`Invalid Operation` pop-up window to appear.
|
||||
|
||||
Odoo requires at least partial quantities of the items included in the |PO| to be received in
|
||||
order to create a vendor bill.
|
||||
|
||||
.. image:: manage/manage-user-error-popup.png
|
||||
:align: center
|
||||
:alt: User error pop-up for received quantities control policy.
|
||||
|
||||
On the |PO|, click the :guilabel:`Receipt` smart button to view the warehouse receipt form.
|
||||
|
||||
From here, click :guilabel:`Validate` to register the :guilabel:`Done` (received) quantities.
|
||||
|
||||
Then, navigate back to the |PO|, via the breadcrumb, and click :guilabel:`Create Bill`.
|
||||
|
||||
This opens a :guilabel:`Vendor Bill` form in the :guilabel:`Draft` state. From here, add a billing
|
||||
date in the :guilabel:`Bill Date` field. Once ready, confirm the bill by clicking
|
||||
:guilabel:`Confirm` at the top of the draft.
|
||||
|
||||
Once a payment has been received, click :guilabel:`Register Payment` at the top of the bill to
|
||||
record it.
|
||||
|
||||
Doing so causes a :guilabel:`Register Payment` pop-up window to appear, wherein a payment
|
||||
:guilabel:`Journal` can be chosen, and a :guilabel:`Payment Method` selected.
|
||||
|
||||
Additionally, the bill :guilabel:`Amount`, :guilabel:`Payment Date`, and :guilabel:`Memo`
|
||||
(:dfn:`Reference Number`) can be edited from this pop-up window, if necessary.
|
||||
|
||||
Once ready, click :guilabel:`Create Payment` to finish creating the :guilabel:`Vendor Bill`. Doing
|
||||
so displays a green :guilabel:`Paid` banner on the |RfQ| form.
|
||||
|
||||
Manage vendor bills in Accounting
|
||||
=================================
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
|
@@ -45,7 +45,7 @@ Instructions often include:
|
|||
|
||||
- A purpose, or what the topic covers
|
||||
- Rules or constraints for the agent to follow when assigned this topic
|
||||
- Step-by-step workflows for how to complete a specific action
|
||||
- Step-by-step workflows for how to complete a specfic action
|
||||
- Technical details needed to complete any actions
|
||||
|
||||
Agent structure
|
||||
|
|
@@ -58,18 +58,15 @@ Topics
|
|||
|
||||
*Topics* are a collection of instructions and :ref:`tools <ai/tools>` that define how an agent
|
||||
behaves within a specific context. Essentially, the topics define what an agent can do within the
|
||||
database. Topics guide conversations, telling the agent what it can do, how it can do it, and when
|
||||
it should do it.
|
||||
database.
|
||||
|
||||
.. important::
|
||||
If an agent is not assigned any Topics, it is only able to provide information, not complete
|
||||
tasks or make changes to the database.
|
||||
|
||||
Within each topic includes a detailed prompt, which provides the agent with more in-depth
|
||||
instructions on how to perform the tasks associated with that topic, define the boundaries of its
|
||||
behavior, and determine how it should interpret user intent. These prompts ensure that the agent
|
||||
follows a consistent reasoning pattern and uses the appropriate tools to generate accurate,
|
||||
context-aware responses.
|
||||
Topics guide conversations, telling the agent what it can do, how it can do it, and when it should
|
||||
do it. Within each topic includes a detailed prompt, which provides the agent with more in-depth
|
||||
instructions on how to perform the
|
||||
|
||||
The following topics are preconfigured in the **AI** app:
|
||||
|
||||
|
|
|
|||
|
|
@@ -6,8 +6,8 @@ Payment methods
|
|||
|
||||
Configure a payment method with Odoo Point of Sale to provide customers with various payment
|
||||
options, including cash, card payments through a :ref:`configured payment terminal
|
||||
<pos/terminals/configuration>`, :doc:`online payments <../../finance/payment_providers>`, or
|
||||
:doc:`customer accounts <payment_methods/customer_credit>`.
|
||||
<pos/terminals/configuration>`, :doc:`online payments </applications/finance/payment_providers>`,
|
||||
or :doc:`customer accounts <payment_methods/customer_credit>`.
|
||||
|
||||
To create a payment method, go to :menuselection:`Point of Sale --> Configuration --> Payment
|
||||
Methods`, click :guilabel:`New`, and follow the next steps:
|
||||
|
|
@@ -16,12 +16,12 @@ Methods`, click :guilabel:`New`, and follow the next steps:
|
|||
#. Enable the following options if needed:
|
||||
|
||||
- :guilabel:`Online Payment`: To link the payment method to a :doc:`payment provider
|
||||
<../../finance/payment_providers>` and enable online payments, select a provider in
|
||||
</applications/finance/payment_providers>` and enable online payments, select a provider in
|
||||
the :guilabel:`Allowed Providers` field or click :icon:`fa-arrow-right` :guilabel:`Payment
|
||||
Providers` to install one.
|
||||
- :guilabel:`Identify Customer`: Force the selection of a customer during the payment.
|
||||
#. Select the preferred :doc:`Journal <../../finance/accounting/get_started/journals>` to record all
|
||||
transactions.
|
||||
#. Select the preferred :doc:`Journal </applications/finance/accounting/get_started/journals>` to
|
||||
record all transactions.
|
||||
#. Select the appropriate :guilabel:`Point of Sale` to enable the payment method.
|
||||
#. Set the :guilabel:`Integration` field to one of the following options:
|
||||
|
||||
|
|
@@ -30,17 +30,16 @@ Methods`, click :guilabel:`New`, and follow the next steps:
|
|||
payments.
|
||||
- :guilabel:`Bank App (QR Code)`: Add at least one :ref:`bank account
|
||||
<accounting/journals/bank>` to the journal to enable :doc:`QR code payments
|
||||
<payment_methods/qr_code_payment>` with a bank app. Select a :guilabel:`QR Code Format` in the
|
||||
form.
|
||||
- :guilabel:`Cash Machine (Glory)`: Connect a :doc:`Glory <payment_methods/cash_machines/glory>`
|
||||
:doc:`cash machine <payment_methods/cash_machines>` to automate the point of sale's cash
|
||||
transactions.
|
||||
</applications/sales/point_of_sale/payment_methods/qr_code_payment>` with a bank app. Select a
|
||||
:guilabel:`QR Code Format` in the form.
|
||||
- :guilabel:`Cash Machine (Glory)`: Connect a **Glory** cash machine to automate the point of
|
||||
sale's cash transactions.
|
||||
#. Save.
|
||||
|
||||
.. note::
|
||||
- The :guilabel:`Delivery Payment` option links a payment method to online orders placed through
|
||||
:doc:`Urban Piper <online_food_delivery>`. Select the appropriate :guilabel:`Delivery Provider`
|
||||
to associate with the payment method.
|
||||
:doc:`Urban Piper </applications/sales/point_of_sale/online_food_delivery>`. Select the
|
||||
appropriate :guilabel:`Delivery Provider` to associate with the payment method.
|
||||
- If the Accounting app is installed, use the :guilabel:`Intermediary Account` field, if needed,
|
||||
to record transactions for this payment method in a specific receivable account for
|
||||
better traceability. Leave the field empty to use the company's default :ref:`receivable
|
||||
|
|
@@ -56,12 +55,10 @@ Methods`, click :guilabel:`New`, and follow the next steps:
|
|||
.. seealso::
|
||||
- `Payment methods (video tutorial) <https://www.youtube.com/watch?v=eHr4tS8Wmss>`_
|
||||
- :doc:`payment_methods/terminals`
|
||||
- :doc:`payment_methods/cash_machines`
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
payment_methods/cash_machines
|
||||
payment_methods/customer_credit
|
||||
payment_methods/qr_code_payment
|
||||
payment_methods/terminals
|
||||
|
|
|
|||
|
|
@@ -1,39 +0,0 @@
|
|||
:show-content:
|
||||
|
||||
=============
|
||||
Cash machines
|
||||
=============
|
||||
|
||||
Connecting and integrating a cash machine with a :ref:`POS system <pos/session-start>` enables
|
||||
automation of cash transactions, cash counting, and change return.
|
||||
|
||||
.. _pos/cash_machines/configuration:
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Configure the cash machine itself before setting it up in Odoo. Currently, Odoo supports :doc:`Glory
|
||||
<cash_machines/glory>` cash machines. Once the cash machine is fully set up:
|
||||
|
||||
#. Create the associated :doc:`payment method <../payment_methods>`.
|
||||
#. Select the POS in the :guilabel:`Point of Sale` field.
|
||||
|
||||
.. _pos/terminals/cash-machine-use:
|
||||
|
||||
Use
|
||||
===
|
||||
|
||||
To process a :ref:`payment <pos/sell>` with a :ref:`configured cash machine
|
||||
<pos/cash_machines/configuration>`, select the machine's :doc:`payment method <../payment_methods>`
|
||||
on the **payment screen**, then follow the instructions on the machine.
|
||||
|
||||
Once the transaction is successful, the payment is automatically validated in Point of Sale.
|
||||
|
||||
.. note::
|
||||
- Connection issues between Odoo and the cash machine result in transaction cancellation.
|
||||
- To cancel the payment request, click :guilabel:`Cancel`.
|
||||
|
||||
.. toctree::
|
||||
:titlesonly:
|
||||
|
||||
cash_machines/glory
|
||||
|
|
@@ -1,130 +0,0 @@
|
|||
=====
|
||||
Glory
|
||||
=====
|
||||
|
||||
**Glory** :doc:`cash machines <../cash_machines>` enable the automation of cash transactions.
|
||||
|
||||
.. note::
|
||||
- The integration with the Glory cash machine only supports basic functions, such as cash
|
||||
transactions and cash count checks.
|
||||
- Tasks like filling and emptying the machine must be performed directly through the cash machine
|
||||
interface.
|
||||
|
||||
.. _pos/glory/configuration:
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Cash machine settings
|
||||
---------------------
|
||||
|
||||
#. Power on the cash machine, which briefly displays its IP address at the bottom of the screen.
|
||||
Note it down for later.
|
||||
|
||||
.. note::
|
||||
The IP address should be formatted as `###.###.#.##` (e.g., `192.168.0.25`).
|
||||
|
||||
#. Navigate to the cash machine's homepage by entering its IP address as the URL in `HTTPS` (e.g.,
|
||||
`https://192.168.0.25`), and log in with your Glory credentials.
|
||||
#. As long as the certificate is not imported, a warning page appears when trying to access the
|
||||
machine's homepage. Bypass it by clicking :guilabel:`Advanced` and then :guilabel:`Proceed to
|
||||
[IP address] (unsafe)`.
|
||||
#. From the Glory homepage, go to :guilabel:`Host Configuration` and ensure the :guilabel:`Network`
|
||||
setting is set to :guilabel:`MANUAL`, meaning the IP address is static.
|
||||
#. Then, navigate to :guilabel:`SSL Configuration` and scroll down to the :guilabel:`HTTPS Server
|
||||
Setting` section.
|
||||
|
||||
#. In parallel, open the terminal and verify that *OpenSSL* is installed. Type `openssl` and
|
||||
press enter. If installed, this command displays a `help` menu listing all available OpenSSL
|
||||
commands. If nothing happens, `install it <https://openssl-library.org/source/>`_.
|
||||
#. Then, paste the following command and press `Enter` to generate and download the certificate
|
||||
and private key. Ensure that you replace the demo IP address with the cash machine’s actual IP
|
||||
address.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 3650 -nodes -subj "/CN=192.168.0.25" -addext "subjectAltName = IP:192.168.0.25"
|
||||
|
||||
.. important::
|
||||
The self-signed SSL certificate and key pair must use the same static IP address as the
|
||||
cash machine.
|
||||
|
||||
#. Once the files are generated, from the :guilabel:`HTTPS Server Setting` section, upload
|
||||
`cert.pem` as the :guilabel:`Certificate` and `key.pem` as the :guilabel:`Private Key`.
|
||||
#. Go to :guilabel:`WebApp Configuration` and ensure the :guilabel:`Interface` setting from the
|
||||
:guilabel:`A: Nodejs Setting` section is set to :guilabel:`Enable`.
|
||||
#. Then, adjust the following settings depending on the POS setup:
|
||||
|
||||
- If **multiple POS** are connected to the same cash machine, go to :guilabel:`App
|
||||
Configuration`, scroll down to the :guilabel:`SOAP IF Setting`, and ensure :guilabel:`Session
|
||||
mode` and :guilabel:`Occupy mode` are both set to :guilabel:`Enable`.
|
||||
- If **a dedicated user** has been set up on the cash machine for Odoo, go to :guilabel:`App
|
||||
Configuration`, scroll down to the :guilabel:`SOAP IF Setting` section, and :guilabel:`Enable`
|
||||
the :guilabel:`User check` setting.
|
||||
#. Restart the cash machine to apply the new settings.
|
||||
|
||||
.. note::
|
||||
As this setup is complex and may involve advanced knowledge of Glory hardware, it is advisable to
|
||||
consult the Glory integration partner for configuration if there is any uncertainty.
|
||||
|
||||
Import self-signed certificates
|
||||
-------------------------------
|
||||
|
||||
For a long-term solution, the generated certificates must be imported into the device running the
|
||||
POS. The import process is heavily dependent on the :abbr:`OS (Operating System)` and the browser.
|
||||
|
||||
.. tabs::
|
||||
|
||||
.. tab:: Windows OS
|
||||
|
||||
Windows manages certificates, which means that self-signed certificates must be imported
|
||||
from the certification files rather than the browser. To do so,
|
||||
|
||||
#. Open the Windows File Explorer and locate the downloaded certification files.
|
||||
#. Right-click on the certification files and select :guilabel:`Install Certificate`.
|
||||
#. Specify the certificate location and select the installation scope: either the
|
||||
:guilabel:`Current User` only or all users (:guilabel:`Local Machine`). Then, click
|
||||
:guilabel:`Next`.
|
||||
#. On the `Certificate Store` screen, tick :guilabel:`Place all certificates in the following
|
||||
store`, click :guilabel:`Browse...`, and select :guilabel:`Trusted Root Certification
|
||||
Authorities`.
|
||||
#. Click :guilabel:`Finish` and accept the pop-up security window.
|
||||
#. Restart the computer to make sure that the changes are applied.
|
||||
|
||||
.. tab:: Linux OS
|
||||
|
||||
When using **Google Chrome**,
|
||||
|
||||
#. Open the web browser.
|
||||
#. Navigate to :menuselection:`Settings --> Privacy and security --> Security --> Manage
|
||||
certificates`.
|
||||
#. Go to the :guilabel:`Authorities` tab, click :guilabel:`Import`, and select the exported
|
||||
certification files.
|
||||
#. Accept all warnings and click :guilabel:`ok`.
|
||||
#. Restart the web browser.
|
||||
|
||||
When using **Mozilla Firefox**,
|
||||
|
||||
#. Open the web browser.
|
||||
#. Navigate to :menuselection:`Settings --> Privacy & Security --> Security --> View
|
||||
Certificates... --> Import`.
|
||||
#. Select the exported certification files.
|
||||
#. Tick the checkboxes and validate.
|
||||
#. Restart the web browser.
|
||||
|
||||
Payment method
|
||||
--------------
|
||||
|
||||
#. :ref:`Install <general/install>` the POS Glory Cash Machines module.
|
||||
#. :doc:`Associate a cash payment method <../../payment_methods>`:
|
||||
|
||||
- Go to :menuselection:`Point of Sale --> Configuration --> Payment Methods`. Create a new
|
||||
:guilabel:`Cash` payment method or update an existing payment method.
|
||||
- Select the associated POS in the :guilabel:`Point of Sale` field.
|
||||
- Select :guilabel:`Cash Machine (Glory)` in the :guilabel:`Integration` field.
|
||||
- Fill in the :guilabel:`Cash Machine IP` field with the IP address of the cash machine.
|
||||
- If the cash machine was configured to use :guilabel:`User check` in the previous section, fill
|
||||
in the :guilabel:`Cash Machine Username` and :guilabel:`Cash Machine Password`.
|
||||
|
||||
.. seealso::
|
||||
:doc:`../../payment_methods`
|
||||
|
|
@@ -31,6 +31,23 @@ designate :guilabel:`Unavailability` days.
|
|||
|
||||
Click **Save** to apply the changes.
|
||||
|
||||
Multi-location management and transfers
|
||||
=======================================
|
||||
|
||||
Tracking the location of high-value physical products is essential. The **Rental** app helps by
|
||||
facilitating rental transfers and creating stock deliveries and receipts for all rental orders.
|
||||
|
||||
For multi-location management and rental item transfer tracking, go to the :menuselection:`Inventory
|
||||
app --> Configuration --> Settings` and in the :guilabel:`Warehouse` section, enable
|
||||
:guilabel:`Storage Locations`. Click **Save** to apply the changes.
|
||||
|
||||
Next, navigate to :menuselection:`Inventory app --> Configuration --> Locations`. Click
|
||||
:guilabel:`New` to configure a new internal location.
|
||||
|
||||
In the new location page, enter the :guilabel:`Location Name` and ensure that the :guilabel:`Parent
|
||||
Location` field is :guilabel:`WH`. Click the :icon:`fa-cloud-upload` :guilabel:`(Save manually)`
|
||||
icon near the top to save.
|
||||
|
||||
Rental products
|
||||
===============
|
||||
|
||||
|
|
@@ -222,53 +239,6 @@ for record-keeping purposes, if necessary.
|
|||
.. seealso::
|
||||
`Odoo Tutorials: Sign <https://www.odoo.com/slides/sign-61>`_
|
||||
|
||||
Multi-location management and transfers
|
||||
=======================================
|
||||
|
||||
Tracking the location of high-value physical products between locations is essential. The **Rental**
|
||||
app helps with the *Rental Transfers* feature. Activating rental transfers means the system treats
|
||||
rental movements similarly to sales, requiring a receipt and a delivery order every time a physical
|
||||
product is rented or returned.
|
||||
|
||||
For multi-location management and rental item transfer tracking, navigate to the
|
||||
:menuselection:`Rental app > Configuration > Settings` and in the :guilabel:`Rental` section, tick
|
||||
the :guilabel:`Rental Transfers` checkbox.
|
||||
|
||||
.. image:: products/rental-transfers-checkbox.png
|
||||
:alt: Sample of the Rental settings with the Rental Transfers enabled.
|
||||
|
||||
.. note::
|
||||
The **Inventory** app automatically creates an internal default location once the *Rental
|
||||
Transfers* feature is enabled. Odoo uses the new default location, :guilabel:`Customer/Rental`,
|
||||
to track products during the rental period (moving them from :guilabel:`Stock` to
|
||||
:guilabel:`Customer/Rental` upon rental, and back upon return). Do not modify to avoid corrupting
|
||||
inventory tracking.
|
||||
|
||||
Next, go to the :menuselection:`Inventory app --> Configuration --> Settings` and in the
|
||||
:guilabel:`Warehouse` section, tick the :guilabel:`Storage Locations` checkbox. Click
|
||||
:guilabel:`Save` to apply the changes.
|
||||
|
||||
To configure new locations, navigate to :menuselection:`Inventory app --> Configuration -->
|
||||
Locations`. Click :guilabel:`New` to configure a new internal location.
|
||||
|
||||
On the new location page, enter the :guilabel:`Location Name` and ensure the :guilabel:`Parent
|
||||
Location` field is set to :guilabel:`WH`. Click the :icon:`fa-cloud-upload` :guilabel:`Save
|
||||
manually` icon near the top to save.
|
||||
|
||||
.. example::
|
||||
A bike rental business has two store locations within the same city. Both locations allow for
|
||||
pick-up and drop-off of their bikes. The company wants to track its bikes accurately at each
|
||||
location.
|
||||
|
||||
Ensure the **Rental** and **Inventory** apps are configured by enabling :guilabel:`Rental
|
||||
Transfers` in the **Rental app** and :guilabel:`Storage Locations` in the **Inventory** app.
|
||||
|
||||
Next, go to the :menuselection:`Inventory app > Configuration > Locations`. Create a new location
|
||||
for each storefront.
|
||||
|
||||
.. image:: products/configured-locations.png
|
||||
:alt: Sample of internal inventory locations that represent different rental store locations.
|
||||
|
||||
Pickup products
|
||||
===============
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 8.7 KiB |
|
|
@@ -2,7 +2,10 @@
|
|||
Down payments
|
||||
=============
|
||||
|
||||
A down payment is an initial up-front payment made during the confirmation of a sales transaction.
|
||||
A down payment is an initial, up-front payment made during the confirmation of a sales transaction.
|
||||
Down payments reduce the risk for both parties (the seller and the buyer) as they indicate a mutual
|
||||
commitment to complete the sales transaction.
|
||||
|
||||
With a down payment, the buyer pays a portion of the total amount owed while agreeing to pay the
|
||||
remaining amount at a later date. In turn, the seller provides goods or services to the buyer upon
|
||||
or after accepting the down payment, trusting that the remaining amount will be paid later on.
|
||||
|
|
@@ -13,16 +16,17 @@ transaction.
|
|||
Create invoices
|
||||
===============
|
||||
|
||||
When a sales order is confirmed, the option to create an invoice becomes available via the
|
||||
When a sales order is confirmed, the option to create an invoice becomes available, via the
|
||||
:guilabel:`Create Invoice` button. When clicked, a :guilabel:`Create invoice(s)` pop-up appears.
|
||||
|
||||
.. image:: down_payment/create-invoices-popup-form.png
|
||||
:alt: Create invoice(s) pop-up form that appears in Odoo Sales.
|
||||
:align: center
|
||||
:alt: Create invoices pop-up form that appears in Odoo Sales.
|
||||
|
||||
.. note::
|
||||
Invoices are automatically created as drafts so they can be reviewed before validation.
|
||||
Invoices are automatically created as drafts, so they can be reviewed before validation.
|
||||
|
||||
On the :guilabel:`Create invoice(s)` pop-up, there are 3 options to choose from in the
|
||||
On the :guilabel:`Create invoices` pop-up, there are 3 options to choose from in the
|
||||
:guilabel:`Create Invoice` field:
|
||||
|
||||
- :guilabel:`Regular invoice`
|
||||
|
|
@@ -37,195 +41,247 @@ On the :guilabel:`Create invoice(s)` pop-up window, the down payment options are
|
|||
- :guilabel:`Down payment (percentage)`
|
||||
- :guilabel:`Down payment (fixed amount)`
|
||||
|
||||
Select a down payment option and set the desired payment, either as a percentage or a fixed amount,
|
||||
in the :guilabel:`Down Payment Amount` field.
|
||||
Select the desired down payment option, then designate the desired amount, either as a percentage or
|
||||
a fixed amount, in the :guilabel:`Down Payment Amount` field.
|
||||
|
||||
Once all fields are filled in, click the :guilabel:`Create Draft` button. Upon clicking this button,
|
||||
Odoo reveals the :guilabel:`Customer Invoice Draft`.
|
||||
|
||||
.. important::
|
||||
If an :guilabel:`Invalid Operation` error appears, double-check that the :doc:`invoicing policy
|
||||
<invoicing_policy>` is configured correctly. In some cases, for example, the invoicing policy is
|
||||
configured to require delivery before sending an invoice.
|
||||
If an :guilabel:`Invalid Operation` error appears, double-check that the
|
||||
:doc:`invoicing policy <invoicing_policy>` is configured correctly. In some cases, for example,
|
||||
the invoicing policy is configured to require delivery before invoicing.
|
||||
|
||||
In the :guilabel:`Invoice Lines` tab of the :guilabel:`Customer Invoice Draft`, the down payment
|
||||
that was just configured in the :guilabel:`Create invoice(s)` pop-up form appears under a new
|
||||
:guilabel:`Down Payments` section.
|
||||
that was just configured in the :guilabel:`Create invoices` pop-up form appears as a
|
||||
:guilabel:`Product`.
|
||||
|
||||
.. _sales/invoicing/50-percent-down-payments:
|
||||
|
||||
Example: requesting a 50% down payment
|
||||
======================================
|
||||
Example: request 50% down payment
|
||||
=================================
|
||||
|
||||
.. note::
|
||||
The following example involves a 50% amount down payment on a (:guilabel:`Cabinet with Doors`)
|
||||
with :guilabel:`Ordered quantities` as the :guilabel:`Invoicing Policy`.
|
||||
The following example involves a 50% amount down payment on a product (:guilabel:`Cabinet with
|
||||
Doors`) with :guilabel:`Ordered quantities` as the :guilabel:`Invoicing Policy`.
|
||||
|
||||
.. image:: down_payment/cabinet-product-details.png
|
||||
:align: center
|
||||
:alt: Cabinet with doors product form showcasing various details and fields.
|
||||
|
||||
Navigate to :menuselection:`Sales app --> New`, and add a :guilabel:`Customer` to the quotation.
|
||||
.. seealso::
|
||||
:doc:`invoicing_policy`
|
||||
|
||||
First, navigate to :menuselection:`Sales app --> New`, and add a :guilabel:`Customer` to the
|
||||
quotation.
|
||||
|
||||
Then, click :guilabel:`Add a product` in the :guilabel:`Order Lines` tab, and select the
|
||||
:guilabel:`Cabinet with Doors` product. When the order is confirmed (via the :guilabel:`Confirm`
|
||||
button), the quotation turns into a sales order. Once this occurs, create and view the invoice by
|
||||
clicking :guilabel:`Create Invoice`.
|
||||
:guilabel:`Cabinet with Doors` product.
|
||||
|
||||
When the order is confirmed (via the :guilabel:`Confirm` button), the quotation turns into a sales
|
||||
order. Once this occurs, create and view the invoice by clicking :guilabel:`Create Invoice`.
|
||||
|
||||
.. image:: down_payment/cabinet-sales-orders-confirmed.png
|
||||
:align: center
|
||||
:alt: Cabinet with doors sales order that's been confirmed in the Odoo Sales application.
|
||||
|
||||
Next, on the :guilabel:`Create invoice(s)` pop-up window that appears, select :guilabel:`Down
|
||||
payment (percentage)`, and type `50` in the :guilabel:`Down Payment` field.
|
||||
Next, on the :guilabel:`Create invoices` pop-up window that appears, select :guilabel:`Down payment
|
||||
(percentage)`, and type `50` in the :guilabel:`Down Payment Amount` field.
|
||||
|
||||
.. note::
|
||||
The :guilabel:`Income Account` attached to the :guilabel:`Down payment` can be changed. For more
|
||||
information, check out the documentation on :ref:`income account modification on down payments
|
||||
<sales/invoicing/income-account-modification>`. A :guilabel:`Down payment Account` can also be
|
||||
set on a product category. If set, this account is prioritized for future down payments.
|
||||
The :guilabel:`Income Account` attached to the :guilabel:`Down payment` product can be changed.
|
||||
|
||||
For more information, check out the documentation on :ref:`income account modification on down
|
||||
payments <sales/invoicing/income-account-modification>`.
|
||||
|
||||
A :guilabel:`Down payment Account` can also be set on a product category. If set, this account is
|
||||
prioritized.
|
||||
|
||||
Lastly, click :guilabel:`Create Draft Invoice` to create and view the invoice draft.
|
||||
|
||||
Clicking :guilabel:`Create Draft Invoice` reveals the draft invoice, which includes the down
|
||||
payment as a :guilabel:`Product` in the :guilabel:`Invoice Lines` tab.
|
||||
|
||||
Lastly, click :guilabel:`Create Draft Invoice` to create and view the invoice draft, which includes
|
||||
the down payment under the :guilabel:`Down Payments` section of the :guilabel:`Invoice Lines` tab.
|
||||
From there, the invoice can be confirmed and posted by clicking :guilabel:`Confirm`. Confirming the
|
||||
invoice changes the status from :guilabel:`Draft` to :guilabel:`Posted`. It also reveals a new
|
||||
series of buttons at the top of the page.
|
||||
|
||||
.. image:: down_payment/draft-invoice-sample.png
|
||||
:align: center
|
||||
:alt: A sample draft invoice with down payment mentioned in Odoo Sales.
|
||||
|
||||
From those buttons, the payment can be registered by clicking :guilabel:`Pay`. Doing so reveals a
|
||||
:guilabel:`Pay` pop-up form, which is auto-populated with the necessary information. Confirm the
|
||||
information provided is correct, and make any necessary adjustments. When ready, click the
|
||||
:guilabel:`Create Payment` button.
|
||||
From those buttons, the payment can be registered by clicking :guilabel:`Register Payment`.
|
||||
|
||||
.. image:: down_payment/register-payment-button.png
|
||||
:align: center
|
||||
:alt: Showcase of the Register Payment button on a confirmed customer invoice.
|
||||
|
||||
Doing so reveals a :guilabel:`Register Payment` pop-up form, which is auto-populated with the
|
||||
necessary information. Confirm the information provided is correct, and make any necessary
|
||||
adjustments. When ready, click the :guilabel:`Create Payment` button.
|
||||
|
||||
.. image:: down_payment/register-payment-pop-up-window.png
|
||||
:alt: Showcase of the Pay pop-up window with create payment button.
|
||||
:align: center
|
||||
:alt: Showcase of the Register Payment pop-up window with create payment button.
|
||||
|
||||
After clicking :guilabel:`Create Payment`, Odoo reveals the customer invoice, now with a green
|
||||
:guilabel:`In Payment` or :guilabel:`Paid` banner in the upper-right corner, depending on how the
|
||||
database has configured and if manual confirmation of payments is required.
|
||||
:guilabel:`In Payment` banner in the upper-right corner.
|
||||
|
||||
.. image:: down_payment/customer-invoice-green-payment-banner.png
|
||||
:alt: Customer Invoice with a green Paid banner located in the upper-right corner.
|
||||
:align: center
|
||||
:alt: Customer Invoice with a green In Payment banner located in the upper-right corner.
|
||||
|
||||
On the sales order, a new :guilabel:`Down Payments` section is present in the :guilabel:`Order
|
||||
Lines` tab, along with the down payment that was just invoiced and posted. When the customer wants
|
||||
to pay the remaining amount of the order, another invoice must be created.
|
||||
Now, when the customer wants to pay the remaining amount of the order, another invoice must be
|
||||
created. To do that, return to the sales order, via the breadcrumb links.
|
||||
|
||||
Back on the sales order, a new :guilabel:`Down Payments` section is present in the :guilabel:`Order
|
||||
Lines` tab, along with the down payment that was just invoiced and posted.
|
||||
|
||||
.. image:: down_payment/down-payments-section-order-lines.png
|
||||
:align: center
|
||||
:alt: The down payments section in the order lines tab of a sales order.
|
||||
|
||||
Next, click the :guilabel:`Create Invoice` button. On the :guilabel:`Create invoice(s)` pop-up
|
||||
window that appears, there is a new field: :guilabel:`Already invoiced` and :guilabel:`Amount to
|
||||
invoice`.
|
||||
Next, click the :guilabel:`Create Invoice` button.
|
||||
|
||||
On the :guilabel:`Create invoices` pop-up window that appears, there are two new fields:
|
||||
:guilabel:`Already invoiced` and :guilabel:`Amount to invoice`.
|
||||
|
||||
.. image:: down_payment/create-invoices-pop-up-already-invoiced.png
|
||||
:alt: The deduct down payment option on the Create invoice(s) pop up in Odoo Sales.
|
||||
:align: center
|
||||
:alt: The deduct down payment option on the create invoices pop up in Odoo Sales.
|
||||
|
||||
If the remaining amount is ready to be paid, select the :guilabel:`Regular Invoice` option. Odoo
|
||||
will create an invoice for the exact amount needed to complete the total payment, as indicated in
|
||||
the :guilabel:`Amount to invoice` field.
|
||||
|
||||
Once ready, click :guilabel:`Create Draft Invoice`. Doing so reveals another :guilabel:`Customer
|
||||
Invoice Draft` page, listing all the invoices for that specific sales order in the
|
||||
:guilabel:`Invoice Lines` tab. Each invoice line item displays all the necessary information related
|
||||
to each invoice.
|
||||
Once ready, click :guilabel:`Create Draft Invoice`.
|
||||
|
||||
To complete the flow, click :guilabel:`Confirm` to change the status of the invoice from
|
||||
:guilabel:`Draft` to :guilabel:`Posted`. Then, click :guilabel:`Pay`. The :guilabel:`Pay` form
|
||||
appears, with all fields auto-populated with the necessary information, including the remaining
|
||||
amount left to be paid on the order.
|
||||
Doing so reveals another :guilabel:`Customer Invoice Draft` page, listing *all* the invoices for
|
||||
that specific sales order in the :guilabel:`Invoice Lines` tab. Each invoice line item displays all
|
||||
the necessary information related to each invoice.
|
||||
|
||||
To complete the flow, click :guilabel:`Confirm`, which changes the status of the invoice from
|
||||
:guilabel:`Draft` to :guilabel:`Posted`. Then, click :guilabel:`Register Payment`.
|
||||
|
||||
Once again, the :guilabel:`Register Payment` appears, with all fields auto-populated with the
|
||||
necessary information, including the remaining amount left to be paid on the order.
|
||||
|
||||
.. image:: down_payment/second-register-payment-popup.png
|
||||
:alt: The second Pay pop-up form in Odoo sales.
|
||||
:align: center
|
||||
:alt: The second register payment pop-up form in Odoo sales.
|
||||
|
||||
After confirming that information, click :guilabel:`Create Payment`. Doing so reveals the final
|
||||
:guilabel:`Customer Invoice` with a green :guilabel:`In Payment` or :guilabel:`Paid` banner in the
|
||||
upper-right corner, depending on how the database has configured and if manual confirmation of
|
||||
payments is required. Upon returning to the sales order, both down payments are present in the
|
||||
:guilabel:`Order Lines` tab.
|
||||
:guilabel:`Customer Invoice` with a green :guilabel:`In Payment` banner in the upper-right corner.
|
||||
Also, both down payments are present in the :guilabel:`Invoice Lines` tab.
|
||||
|
||||
.. image:: down_payment/final-sales-order.png
|
||||
:alt: The second down payment invoice with Paid banner in Odoo Sales.
|
||||
.. image:: down_payment/second-down-payment-in-payment-invoice.png
|
||||
:align: center
|
||||
:alt: The second down payment invoice with in payment banner in Odoo Sales.
|
||||
|
||||
At this point, the flow is now complete. This flow is also possible with the :guilabel:`Fixed
|
||||
amount` down payment option.
|
||||
At this point, the flow is now complete.
|
||||
|
||||
.. note::
|
||||
This flow is also possible with the :guilabel:`Fixed amount` down payment option.
|
||||
|
||||
.. important::
|
||||
If a down payment is used with a product that has a :guilabel:`Delivered quantities` invoicing
|
||||
policy, and the cost of the product exceeds the 50% down payment, a regular invoice is created.
|
||||
However, for products that cost less than the 50% down payment, the down payments will not be
|
||||
able to be deducted when it comes time to invoice the customer. This is because the product(s)
|
||||
would have to be delivered *before* creating the final invoice due to Odoo not allowing negative
|
||||
totals for invoices. If nothing has been delivered, a :guilabel:`Credit Note` is created, which
|
||||
cancels the draft invoice that was created after the down payment.
|
||||
policy, and the cost of the product *exceeds* the 50% down payment (as in most cases), a regular
|
||||
invoice is created.
|
||||
|
||||
To utilize the :guilabel:`Credit Note` option, the **Inventory** application must be installed in
|
||||
However, for products that cost *less* than the 50% down payment, the down payments will **not**
|
||||
be able to be deducted when it comes time to invoice the customer.
|
||||
|
||||
This is because the product(s) would have to be delivered *before* creating the final invoice due
|
||||
to Odoo not allowing negative totals for invoices.
|
||||
|
||||
If nothing has been delivered, a :guilabel:`Credit Note` is created, which cancels the draft
|
||||
invoice that was created after the down payment.
|
||||
|
||||
To utilize the :guilabel:`Credit Note` option, the *Inventory* application must be installed, in
|
||||
order to confirm the delivery. Otherwise, the delivered quantity can be entered manually directly
|
||||
on the sales order.
|
||||
|
||||
.. _sales/invoicing/100-percent-down-payments:
|
||||
|
||||
Example: requesting a 100% down payment
|
||||
=======================================
|
||||
Example: request 100% down payment
|
||||
==================================
|
||||
|
||||
Requesting a 100% down payment is similar to requesting a :ref:`50% down payment
|
||||
<sales/invoicing/50-percent-down-payments>`, but with fewer steps.
|
||||
The process of requesting a 100% down payment is similar to the process of setting up a :ref:`50%
|
||||
down payment <sales/invoicing/50-percent-down-payments>`, but with fewer steps.
|
||||
|
||||
.. note::
|
||||
A 100% down payment is not the same as a full payment of the sales order. A sales order paid
|
||||
through the regular invoice process will not allow any additional invoices to be generated and
|
||||
will not display the :guilabel:`Create Invoice` button on the Sales Order. Instead, following
|
||||
this example will cause the :guilabel:`Create Invoice` button to be displayed on the Sales Order.
|
||||
This is because the system expects another invoice to be created after the down payment to
|
||||
A 100% down payment is **not** the same as a full payment of the sales order.
|
||||
|
||||
A sales order paid through the regular invoice process will not allow any additional invoices to
|
||||
be generated, and **will not** display the *Create Invoice* button on the Sales Order.
|
||||
|
||||
Following this example **will** cause the *Create Invoice* button to be displayed on the Sales
|
||||
Order. This is because Odoo expects another invoice to be created after the down payment to
|
||||
complete payment of the sales order.
|
||||
|
||||
The *Solar Panel Installation* product is being used in this example.
|
||||
|
||||
To configure a 100% down payment, navigate to :menuselection:`Sales app --> New` and add a
|
||||
:guilabel:`Customer` to the quote. Next, click :guilabel:`Add a product` in the :guilabel:`Order
|
||||
Lines` tab, and select the `Solar Panel Installation` product. Upon clicking the :guilabel:`Confirm`
|
||||
button, the quotation turns into a sales order. At that point, an invoice can now be created by
|
||||
clicking :guilabel:`Create Invoice` in the top-left corner. On the :guilabel:`Create invoice(s)`
|
||||
pop-up window that appears, select :guilabel:`Down payment (percentage)`, and type `100` in the
|
||||
:guilabel:`Down Payment` field.
|
||||
To configure a 100% down payment, begin by navigating to :menuselection:`Sales app --> New`, and add
|
||||
a :guilabel:`Customer` to the quote.
|
||||
|
||||
Next, click :guilabel:`Add a product` in the :guilabel:`Order Lines` tab, and select the
|
||||
`Solar Panel Installation` product.
|
||||
|
||||
Upon clicking the :guilabel:`Confirm` button, the quotation turns into a sales order. At that point,
|
||||
an invoice can now be created by clicking :guilabel:`Create Invoice` in the top-left corner.
|
||||
|
||||
On the :guilabel:`Create invoices` pop-up window that appears, select :guilabel:`Down payment
|
||||
(percentage)`, and type `100` in the :guilabel:`Down Payment Amount` field.
|
||||
|
||||
.. image:: down_payment/100p-down-payment-percentage.png
|
||||
:align: center
|
||||
:alt: The Down payment (percentage) option selected with 100% set as the Down Payment.
|
||||
|
||||
Next, click :guilabel:`Create Draft Invoice` to create an invoice draft. This will also bring the
|
||||
draft invoice into view, which includes the :guilabel:`Down payment` under the :guilabel:`Down
|
||||
Payments` section of the :guilabel:`Invoice Lines` tab. The invoice can now be confirmed and posted
|
||||
by clicking :guilabel:`Confirm`. Confirming the invoice changes the status from :guilabel:`Draft` to
|
||||
:guilabel:`Posted`. It also reveals a new series of buttons at the top of the page.
|
||||
draft invoice into view, which includes the :guilabel:`Down payment` as a :guilabel:`Product` in the
|
||||
:guilabel:`Invoice Lines` tab.
|
||||
|
||||
The invoice can now be confirmed and posted by clicking :guilabel:`Confirm`. Confirming the invoice
|
||||
changes the status from :guilabel:`Draft` to :guilabel:`Posted`. It also reveals a new series of
|
||||
buttons at the top of the page.
|
||||
|
||||
The payment can be registered by clicking the :guilabel:`Register Payment` button.
|
||||
|
||||
Doing so reveals a :guilabel:`Register Payment` pop-up form, which is auto-populated with the
|
||||
necessary information. Confirm the information provided is correct and make any necessary
|
||||
adjustments. When ready, click the :guilabel:`Create Payment` button.
|
||||
|
||||
The payment can be registered by clicking the :guilabel:`Pay` button. This brings up the
|
||||
:guilabel:`Pay` pop-up form, which is auto-populated with the necessary information. When ready,
|
||||
click the :guilabel:`Create Payment` button.
|
||||
|
||||
After clicking :guilabel:`Create Payment`, Odoo reveals the customer invoice, now with a green
|
||||
:guilabel:`In Payment` or :guilabel:`Paid` banner in the upper-right corner, depending on how the
|
||||
database has configured and if manual confirmation of payments is required. The process is now
|
||||
complete, and the 100% down payment has been successfully applied.
|
||||
:guilabel:`In Payment` banner in the upper-right corner.
|
||||
|
||||
.. image:: down_payment/100p-invoice.png
|
||||
:align: center
|
||||
:alt: Customer Invoice with a green In Payment banner located in the upper-right corner.
|
||||
|
||||
The process is now complete, and the 100% down payment has been successfully applied.
|
||||
|
||||
.. _sales/invoicing/income-account-modification:
|
||||
|
||||
Income account modification on down payments
|
||||
============================================
|
||||
|
||||
.. important::
|
||||
To change or adjust the income account attached to down payments, the **Accounting** app must be
|
||||
installed. With the **Accounting** app installed, the :guilabel:`Accounting` column becomes
|
||||
available on the draft invoice.
|
||||
To change or adjust the income account attached to the :guilabel:`Down Payment` product page, the
|
||||
*Accounting* app **must** be installed.
|
||||
|
||||
Navigate to the invoice to be modified by going to :menuselection:`Sales app --> Orders --> Orders`.
|
||||
Open an order, then click the :guilabel:`Invoices` smart button. Open an invoice, click the
|
||||
drop-down arrow on the entry in the :guilabel:`Account` column and click :guilabel:`Search more...`
|
||||
to bring up the :guilabel:`Search: Account` form. In this form, a different account can be chosen
|
||||
from the list of pre-existing accounts. A new account can also be created by clicking the
|
||||
:guilabel:`New` button.
|
||||
Navigate to the :guilabel:`Products` page (:menuselection:`Sales app --> Products --> Products`),
|
||||
search for the `Down Payment` product in the search bar, and select it to reveal the product detail
|
||||
page.
|
||||
|
||||
With the *Accounting* app installed, the :guilabel:`Accounting` tab becomes available on the product
|
||||
page.
|
||||
|
||||
In the :guilabel:`Accounting` tab, the income account can be changed in the :guilabel:`Income
|
||||
Account` field, located in the :guilabel:`Receivables` section.
|
||||
|
||||
.. image:: down_payment/income-account.png
|
||||
:alt: The Search:Account form with existing accounts displayed and a button to create a new
|
||||
account.
|
||||
:align: center
|
||||
:alt: How to modify the income account link to down payments.
|
||||
|
||||
.. seealso::
|
||||
:doc:`invoicing_policy`
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 7.3 KiB |
|
|
@@ -1,62 +1,16 @@
|
|||
:nosearch:
|
||||
:show-content:
|
||||
:hide-page-toc:
|
||||
:show-toc:
|
||||
|
||||
=========
|
||||
eCommerce
|
||||
=========
|
||||
|
||||
Build and run your open-source online store with Odoo eCommerce. Create your products, customize the
|
||||
ordering and checkout process, configure delivery methods, handle sales and delivery orders, create
|
||||
customer accounts, and monitor your performance.
|
||||
Run a modern open-source online store with Odoo eCommerce. Learn how to sell online, promote
|
||||
products and increase your average cart sizes.
|
||||
|
||||
.. cards::
|
||||
|
||||
.. card:: Products
|
||||
:target: ecommerce/products
|
||||
:large:
|
||||
|
||||
Configure your product pages, adjust the shop page layout, set up the pricing, and define
|
||||
suggestions for optional and accessory products.
|
||||
|
||||
.. card:: Ordering and checkout
|
||||
:target: ecommerce/checkout
|
||||
:large:
|
||||
|
||||
Customize the ordering and checkout process with the website editor to fit your business needs.
|
||||
|
||||
.. card:: Delivery
|
||||
:target: ecommerce/shipping
|
||||
:large:
|
||||
|
||||
Enable and configure delivery methods to provide your customers with one or multiple options
|
||||
upon checkout.
|
||||
|
||||
.. card:: Order handling
|
||||
:target: ecommerce/order_handling
|
||||
:large:
|
||||
|
||||
Handle all business documents related to your eCommerce orders: sales orders, delivery orders,
|
||||
invoices, and legal requirements.
|
||||
|
||||
.. card:: Customer accounts
|
||||
:target: ecommerce/customer_accounts
|
||||
:large:
|
||||
|
||||
Define your customers' login process and grant portal access to all
|
||||
users or a select group.
|
||||
|
||||
.. card:: Performance management
|
||||
:target: ecommerce/performance
|
||||
|
||||
Analyze sales data to evaluate your eCommerce performance.
|
||||
|
||||
.. card:: Google Merchant Center
|
||||
:target: ecommerce/google_merchant_center
|
||||
|
||||
Manage and submit your product data to Google with Google Merchant Center.
|
||||
|
||||
.. note::
|
||||
.. important::
|
||||
Odoo offers a :ref:`free custom domain name <domain-name/register>` to all Odoo Online databases
|
||||
for one year. Visitors can then access your website with an address such as `www.example.com`
|
||||
rather than the default `example.odoo.com`.
|
||||
|
|
|
|||
|
|
@@ -803,10 +803,9 @@ In a similar way, you can add more complex
|
|||
|
||||
A Python constraint is defined as a method decorated with
|
||||
:func:`~odoo.api.constrains`, and invoked on a recordset. The decorator
|
||||
specifies which fields are involved in the constraint. The constraint is
|
||||
automatically evaluated at the end of transaction when any of these fields
|
||||
are modified. The method is expected to raise an exception if its invariant
|
||||
is not satisfied::
|
||||
specifies which fields are involved in the constraint, so that the constraint is
|
||||
automatically evaluated when one of them is modified. The method is expected to
|
||||
raise an exception if its invariant is not satisfied::
|
||||
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
|
|
|||
|
|
@@ -86,7 +86,7 @@ to make more complex checks which require Python code. In this case we need a Py
|
|||
A Python constraint is defined as a method decorated with
|
||||
:func:`~odoo.api.constrains` and is invoked on a recordset. The decorator
|
||||
specifies which fields are involved in the constraint. The constraint is automatically evaluated
|
||||
at the end of transaction when any of these fields are modified. The method is expected to
|
||||
when any of these fields are modified . The method is expected to
|
||||
raise an exception if its invariant is not satisfied::
|
||||
|
||||
from odoo.exceptions import ValidationError
|
||||
|
|
|
|||