Compare commits

...

46 Commits

Author SHA1 Message Date
jero-odoo b742dd3950 [ADD] Barcode: Processing a transfer
Co-authored-by: Felicia Kuan <feku@odoo.com>
2025-02-12 08:13:38 -05:00
jero-odoo aa5d9911b3 [IMP] Inventory: Adjustments edit
closes odoo/documentation#12034

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2025-02-11 21:14:38 +00:00
mcsi-odoo 5c72ee6f63 [IMP] studio: adding link about accessing studio
Task-3761784

closes odoo/documentation#11999

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Siobhan McGonigle (mcsi) <mcsi@odoo.com>
2025-02-11 15:32:36 +00:00
jero-odoo 123ea24f91 [IMP] Calendar: Outlook calendar configuration
closes odoo/documentation#12021

X-original-commit: f1030c6e9f
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
2025-02-10 20:29:33 +00:00
Paolo Gatti 8495357d6e [IMP] fiscal_localizations: Documentation for l10n_it_riba
Since the feature was released, lots of partners ask for
information/documentation about the RIBA feature.  Add a concise
documentation explaining what users should know.

Ref: odoo/enterprise#74097

task-4497749

closes odoo/documentation#12005

X-original-commit: e8305bad12
Related: odoo/enterprise#78927
Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
Signed-off-by: Paolo Gatti (pgi) <pgi@odoo.com>
2025-02-10 16:24:03 +00:00
afma-odoo 52d8565f02 [IMP] accounting: update payment matching feature
task-3518648

closes odoo/documentation#11923

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-02-10 16:23:53 +00:00
afma-odoo b6e6515fbf [IMP] accounting: Update customer invoices page for 18.0
task-3416326

closes odoo/documentation#11813

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-02-10 14:51:30 +00:00
Zuzanna Luczynska 49b75e3213 [IMP] project: project dashboard minor corrections
closes odoo/documentation#12009

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-02-10 14:51:27 +00:00
Meet Jivani [MEJI] bb69f01e71 [IMP] pos_urban_piper: clarify combo product handling
In this commit:
- Added a note explaining that UrbanPiper does not support combo products.
- Users need to create a new product and add combo items as variants to use them
with UrbanPiper.

task-4546712

closes odoo/documentation#11954

Signed-off-by: Loredana Perazzo (lrpz) <lrpz@odoo.com>
2025-02-10 14:51:12 +00:00
Odoo Translation Bot c7fb228d91 [I18N] Update translation terms from Transifex 2025-02-09 02:41:57 +01:00
Felicious 75f0258d19 [IMP] inventory: CRL - replenishment & visibility days
closes odoo/documentation#11966

X-original-commit: 26f226c51b
Signed-off-by: Felicia Kuan (feku) <feku@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
Co-authored-by: Liz Bender <92882399+benderliz@users.noreply.github.com>
2025-02-08 16:58:49 +00:00
jero-odoo 7e375cfd54 [IMP] Inventory: Adjustments 18.0
closes odoo/documentation#11930

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: larm-odoo <121518652+larm-odoo@users.noreply.github.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
2025-02-08 02:21:02 +00:00
Harsh Modi 853583b0ce [FIX] coding_guidelines: fix the alphabetic orders for the import
In odoo, as we suggest everyone to follow an alphebetic order.

The translator(`_`), ASCII is 95 and `a` ASCII value is 97
which '_' < 'a', the translator should be defined first in the
import before the `api` not at the end of the import

This commits adds an example to import static class `Command`
with a Capital alphabet with a ASCII value of `C` as 67
which will be before than the `_`
'C' < '_' < 'a'

This order of import should be followed while the import

closes odoo/documentation#11990

X-original-commit: c7a6b67a87
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Signed-off-by: Harsh Modi (hamo) <hamo@odoo.com>
2025-02-07 15:28:27 +00:00
Nicolas Viseur (vin) d7c0cdddbf [IMP] l10n_vn: SInvoice documentation
Recently, a new module released to support integration of Odoo with SInvoice to support e-invoicing for Vietnam.

task - 3631616

closes odoo/documentation#11974

X-original-commit: 4b123b8464
Signed-off-by: Anne-Françoise Marcq (afma) <afma@odoo.com>
Signed-off-by: Kim Dohyun (kido) <kido@odoo.com>
2025-02-07 03:58:47 +00:00
benderliz be14393043 [IMP] Inventory: Merged cycle count docs and updated for 17.0
closes odoo/documentation#11731

X-original-commit: 6852e4b980
Signed-off-by: Liz Bender (beli) <benderliz@users.noreply.github.com>
2025-02-06 21:12:24 +00:00
Anita (anko) 6ad97e2fea [IMP] applications/sales: prepare files for future Gelato documentation
task-3935688

closes odoo/documentation#11823

Related: odoo/odoo#193457
Related: odoo/enterprise#77839
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2025-02-06 19:56:54 +00:00
evtf-odoo 27acb59d79 [IMP] accounting/l10n_ar: purchase withholding automation
Add new section Withholding Management
Content based on v18

closes odoo/documentation#11770

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Co-authored-by: Liz Bender (beli) <beli@odoo.com>
Co-authored-by: samueljlieber <sali@odoo.com>
Co-authored-by: dade-odoo <87431108+dade-odoo@users.noreply.github.com>
2025-02-06 17:59:33 +00:00
dikd-odoo a94c8ed498 [IMP] sales: down payment intro
edits from FEKU

SALI edits

remove image

closes odoo/documentation#11943

Signed-off-by: Dina Klarisse Dugar (dikd) <dikd@odoo.com>
2025-02-06 06:30:20 +00:00
jero-odoo b9e82b8c29 [IMP] Calendar: Google integration update
closes odoo/documentation#11963

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: pabr-odoo <pabr@odoo.com>
Co-authored-by: Felicia Kuan <feku@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2025-02-06 06:30:18 +00:00
“Chiara 7d4f6dc77a [ADD] accounting: einvoicing for america
closes odoo/documentation#11765

Signed-off-by: Chiara Prattico (chpr) <chpr@odoo.com>
2025-02-05 11:19:47 +00:00
Merel Geens (mege) 44db5c84b3 [FIX] administration: correct Fedora version
The Odoo 17 and 18 RPM builds target Fedora 38 instead of 36:

16: https://github.com/odoo/odoo/blob/16.0/setup/package.dffedora#L3
17: https://github.com/odoo/odoo/blob/17.0/setup/package.dffedora#L3
18: https://github.com/odoo/odoo/blob/18.0/setup/package.dffedora#L3

Note that both Fedora 36 and 38 are EOL:
https://docs.fedoraproject.org/en-US/releases/eol/

closes odoo/documentation#11950

X-original-commit: 24966a91c8
Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com>
2025-02-03 17:46:26 +00:00
mcsi-odoo a57baa8d09 [IMP] spreadsheet: remove default templates
task-4278043

closes odoo/documentation#11940

X-original-commit: 5cb47dcc92
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Siobhan McGonigle (mcsi) <mcsi@odoo.com>
2025-02-03 11:42:29 +00:00
jero-odoo 968ca03d70 [IMP] inventory: Delivery Methods
closes odoo/documentation#11913

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2025-02-03 10:18:16 +00:00
benderliz 4aca6cd71e [IMP] Inventory: Consignment typo in 16.0
closes odoo/documentation#11894

X-original-commit: 38640aeb0e
Signed-off-by: Liz Bender (beli) <beli@odoo.com>
2025-02-03 10:18:13 +00:00
Odoo Translation Bot 4d3fafe972 [I18N] Update translation terms from Transifex 2025-02-02 02:44:15 +01:00
mcsi-odoo 66022fbb57 [IMP] studio: automated action send whatsapp
task-4442904

closes odoo/documentation#11926

X-original-commit: cafe8b3f4b
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Siobhan McGonigle (mcsi) <mcsi@odoo.com>
2025-01-31 17:51:01 +00:00
Audrey (auva) 7f711c6ef2 [IMP] iot: refactor and update configuration documentation
Restructure and update the iot documentation

closes odoo/documentation#11934

X-original-commit: a6dbcd0a9f
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-01-31 17:50:51 +00:00
Donatienne (dopi) 6bf147384b [IMP] ecommerce: checkout
taskid-4392415

closes odoo/documentation#11635

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-01-31 09:12:40 +00:00
dikd-odoo 2f050805bb [IMP] sales: pricelists tabs
closes odoo/documentation#11918

Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
2025-01-30 23:40:12 +00:00
jero-odoo 00eb919fb4 [IMP] General: Email Server Subdomain Limitation
closes odoo/documentation#11905

Signed-off-by: Zachary Straub (zst) <zst@odoo.com>
2025-01-30 02:09:47 +00:00
Tanya Bouman b8f2514f93 [FIX] mobile: SS0 -> SSO typo
closes odoo/documentation#11825

Signed-off-by: Xavier Platteau (xpl) <xpl@odoo.com>
2025-01-29 16:56:15 +00:00
samueljlieber 68d7b8ccc1 [IMP] sales: update simplified pricelist settings
closes odoo/documentation#11809

X-original-commit: a0c8570226
Signed-off-by: Samuel Lieber (sali) <sali@odoo.com>
Signed-off-by: Dina Klarisse Dugar (dikd) <dikd@odoo.com>
2025-01-29 13:44:02 +00:00
John Holton (hojo) 0fc08e02f8 [ADD] Manufacturing: Lots and serial numbers
closes odoo/documentation#11728

Signed-off-by: John Holton (hojo) <hojo@odoo.com>
2025-01-29 13:43:42 +00:00
Tiffany Chang (tic) 4fc13ed595 [I18N] *: export latest terms
As per usual, leave off developer.pot and contributing.pot since we
don't translate them (not useful, can't really contribute to/dev in
Odoo without knowing English)

closes odoo/documentation#11903

Signed-off-by: Tiffany Chang (tic) <tic@odoo.com>
2025-01-29 07:11:45 +00:00
sjai-odoo eee06ac7c4 [ADD] integration: barcodelookup documentation
Task-4464181

closes odoo/documentation#11774

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-01-29 05:49:18 +00:00
Loredana Perazzo c792d379de [IMP] POS: move configuration in toctree
task-4512527

closes odoo/documentation#11877

X-original-commit: 92b968d337
Signed-off-by: Loredana Perazzo (lrpz) <lrpz@odoo.com>
2025-01-28 15:43:09 +00:00
LoredanaLrpz 989f2faf9a [IMP] pos: resize & scale content (table and screenshots)
task-4521596

closes odoo/documentation#11897

Signed-off-by: Loredana Perazzo (lrpz) <lrpz@odoo.com>
2025-01-28 08:45:13 +00:00
Erwin Zoer a9ff26efdd [FW][FIX] developer/howtos/upgrade_custom_db: fix typo
Changed the word devolopments to developments

closes odoo/documentation#11876

Forward-port-of: odoo/documentation#11864
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2025-01-27 21:04:54 +00:00
mcsi-odoo 6051f2f638 [IMP] accounting: ocr free iap test credits for enterprise users
task-4328876

closes odoo/documentation#11875

X-original-commit: 058e379a40
Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
Signed-off-by: Siobhan McGonigle (mcsi) <mcsi@odoo.com>
2025-01-27 14:39:13 +00:00
Loredana Perazzo 565022703a [ADD] POS: how to configure and use the preparation display
task-3604858

closes odoo/documentation#11853

X-original-commit: 2eb1deaf11
Signed-off-by: Loredana Perazzo (lrpz) <lrpz@odoo.com>
2025-01-27 09:28:05 +00:00
“Chiara 8b1f8e1fc6 [IMP] accounting: italian localization typo
closes odoo/documentation#11844

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-01-27 09:28:02 +00:00
mcsi-odoo f3d8007c29 [IMP] accounting: order of fiscal localizations updated in toc
task-4285498

closes odoo/documentation#11858

Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
2025-01-27 09:27:59 +00:00
sk-nada e241c7a088 [FIX] tutorials/server_framework_101: update link for example of list
previous link was for code that used tree in xml. The tree tag throws Traceback error in 18.0. This commit will provide the correct example with list tag instead of tree tag.

closes odoo/documentation#11865

Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
2025-01-27 07:58:48 +00:00
Odoo Translation Bot 8750d5f859 [I18N] Update translation terms from Transifex 2025-01-26 02:43:37 +01:00
Parish Bracha a541383a1d [IMP] Sales: Quotation Templates update
closes odoo/documentation#11787

Signed-off-by: Parish Bracha (pabr) <pabr@odoo.com>
2025-01-24 22:10:11 +00:00
jero-odoo 60a0d4cdb5 [IMP] Inventory: wave transfers 18
closes odoo/documentation#11761

Signed-off-by: Jessica Rogers (jero) <jero@odoo.com>
Co-authored-by: hojo-odoo <123424465+hojo-odoo@users.noreply.github.com>
Co-authored-by: Sam Lieber (sali) <36018073+samueljlieber@users.noreply.github.com>
2025-01-24 15:41:07 +00:00
476 changed files with 136378 additions and 88249 deletions
+1 -1
View File
@@ -64,4 +64,4 @@ The Odoo mobile apps are available for download on the `Google Play Store
.. important::
The iOS app cannot be updated and will be deprecated at some point in the future.
While the store apps support multi-accounts, they are not compatible with SS0 authentication.
While the store apps support multi-accounts, they are not compatible with SSO authentication.
@@ -132,7 +132,7 @@ be downloaded from the `Odoo download page <https://www.odoo.com/page/download>`
.. group-tab:: Fedora
.. note::
Odoo {CURRENT_MAJOR_VERSION} 'rpm' package supports Fedora 36.
Odoo {CURRENT_MAJOR_VERSION} 'rpm' package supports Fedora 38.
Once downloaded, the package can be installed using the 'dnf' package manager:
@@ -120,6 +120,8 @@ You can edit the currency used to enter the transactions.
.. seealso::
:doc:`get_started/multi_currency`
.. _accounting/bank/account-number:
Account number
--------------
@@ -44,22 +44,31 @@ goods and services. Make sure the following fields are appropriately completed:
upon confirmation.
- :guilabel:`Due Date` or :doc:`payment terms <customer_invoices/payment_terms>`: To specify when
the customer has to pay the invoice.
- :guilabel:`Journal`: Is automatically set and can be changed if needed.
- :doc:`Currency <get_started/multi_currency>`
- :guilabel:`Product`: Click :guilabel:`Add a line` to add a product.
- :guilabel:`Journal`: Automatically set and can be changed if needed.
- :doc:`Currency <get_started/multi_currency>`. If the invoice's currency differs from the
company's currency, the currency exchange rate is automatically displayed.
In the :guilabel:`Invoice Lines` tab:
- :guilabel:`Product`: Click :guilabel:`Add a line`, then search for and select the product.
- :guilabel:`Quantity`
- :guilabel:`Price`
- :doc:`Taxes <taxes>` (if applicable)
To access the product catalog and view all items in an organized display, click :doc:`Catalog
</applications/inventory_and_mrp/inventory/warehouses_storage/inventory_management/product_catalog>`.
When the products and quantities are selected, click :guilabel:`Back to Invoice` to return to the
invoice; the selected catalog items will appear in the invoice lines.
.. tip::
To display the total amount of the invoice in words, go to :menuselection:`Accounting -->
Configuration --> Settings` and activate the :guilabel:`Total amount of invoice in letters`
option.
The :guilabel:`Journal Items` tab displays the accounting entries created.
Additional invoice information such as the :guilabel:`Customer Reference`, :doc:`Fiscal Positions
<taxes/fiscal_positions>`, :doc:`Incoterms <customer_invoices/incoterms>`, and more can be added or
modified in the :guilabel:`Other Info` tab.
The :guilabel:`Journal Items` tab displays the accounting entries created. Additional invoice
information such as the :guilabel:`Customer Reference`, :guilabel:`Payment Reference`, :doc:`Fiscal
Positions <taxes/fiscal_positions>`, :doc:`Incoterms <customer_invoices/incoterms>`, and more can be
added or modified in the :guilabel:`Other Info` tab.
.. note::
Odoo initially creates invoices in :guilabel:`Draft` status. Draft invoices have no accounting
@@ -73,9 +82,9 @@ modified in the :guilabel:`Other Info` tab.
Invoice confirmation
====================
Click :guilabel:`Confirm` when the document is completed. The document's status changes to
Click :guilabel:`Confirm` when the invoice is completed. The invoice's status changes to
:guilabel:`Posted`, and a journal entry is generated based on the invoice configuration. On
confirmation, Odoo assigns each document a unique number from a defined
confirmation, Odoo assigns each invoice a unique number from a defined
:ref:`sequence <accounting/invoice/sequence>`.
.. note::
@@ -89,16 +98,56 @@ confirmation, Odoo assigns each document a unique number from a defined
Invoice sending
===============
To send the invoice to the customer, click :guilabel:`Send & Print`. A :guilabel:`Configure your
document layout` pop-up window will appear if a :ref:`default invoice layout
<studio/pdf-reports/default-layout>` hasn't been customized. Then, select how to send this invoice
to the customer in the :guilabel:`Send` window.
To set a preferred :guilabel:`Invoice sending` method for a customer, go to
:menuselection:`Accounting --> Customers --> Customers` and select the customer. In the
:guilabel:`Accounting` tab of the contact form, select the preferred :guilabel:`Invoice sending`
method in the :guilabel:`Customer Invoices` section.
To send and print multiple invoices, go to :menuselection:`Accounting --> Customers --> Invoices`
and select them. Then click the :icon:`fa-cog` :guilabel:`Actions` menu and select
:guilabel:`Send & Print`. A banner will appear on the selected invoices to indicate they are part of
an ongoing send and print batch. This helps prevent the process from being triggered manually again,
as it may take some time to complete for exceptionally large batches.
.. note::
Sending letters in Odoo requires :doc:`In-App Purchase (IAP) <../../essentials/in_app_purchase>`
credit or tokens.
To send the invoice to the customer, navigate back to the invoice record and follow these steps:
#. Click :guilabel:`Print & Send`.
#. If the :ref:`default invoice layout <studio/pdf-reports/default-layout>` has not been customized
yet, a :guilabel:`Configure your document layout` pop-up window appears. Configure the layout and
click :guilabel:`Continue`.
.. note::
- The document layout can be changed at any time in the general settings.
- To add a QR code for banking app payments to the invoice, enable the :guilabel:`QR Code`
option in the :guilabel:`Configure Your Document Layout` window. To modify this option, go
to :menuselection:`Accounting --> Configuration --> Settings`, scroll down to the
:guilabel:`Customer Payments` section, and enable/disable the :guilabel:`QR Codes` option.
#. In the :guilabel:`Print & Send` window:
- If a preferred :guilabel:`Invoice sending` method was set in the contact form, it is selected
by default. Select another one if needed.
- If no preferred :guilabel:`Invoice sending` method was set in the contact form, select the
method to use for sending the invoice to the customer.
#. Click :guilabel:`Print & Send` if the :guilabel:`by Email` option is selected, or click
:guilabel:`Print`.
.. _accounting/invoice/sending-multiple-invoices:
Sending multiple invoices
-------------------------
To send and print multiple invoices, go to :menuselection:`Accounting --> Customers --> Invoices`,
select them in the :guilabel:`Invoices` list view and click :guilabel:`Print & Send`. The
:guilabel:`Print & Send` window displays the selected invoice sending methods based on the preferred
method set.
A banner is added to the selected invoices to indicate they are part of an ongoing send and print
batch. This helps prevent the process from being triggered manually again, as it may take some time
to complete for exceptionally large batches.
To check all invoices that have not yet been sent, go to :menuselection:`Accounting --> Customers
--> Invoices`. In the :guilabel:`Invoices` list view, click into the search bar and filter on
:guilabel:`Not Sent`.
.. _accounting/invoice/paymentandreconciliation:
@@ -128,11 +177,11 @@ same customer, the actions are performed on the most overdue invoice.
Sequence
========
The sequence that Odoo assigns to each document is a unique number made up of a prefix and a number.
The prefix combines the journal code and the entry date and is used to group entries by period. The
number is unique for each period and is used to identify the entry. The default sequence on customer
invoices is INV/YYYY/number. In some specific cases,
:ref:`resequencing <accounting/invoice/resequencing>` invoices might be necessary.
Odoo assigns each document a unique sequence made up of a prefix and a number. The prefix combines
the journal code and the entry date and groups entries by period. The number is unique for each
period and is used to identify the entry. The default sequence on customer invoices is
INV/YYYY/number. In some specific cases, :ref:`resequencing <accounting/invoice/resequencing>`
invoices might be necessary.
.. _accounting/invoice/resequencing:
@@ -15,10 +15,15 @@ one of the application of EDI.
Odoo supports e-invoicing in many countries. Refer to the country's page for more details:
- :doc:`Argentina <electronic_invoicing/argentina>`
- :doc:`Austria <electronic_invoicing/austria>`
- :doc:`Belgium <electronic_invoicing/belgium>`
- :doc:`Brazil <electronic_invoicing/brazil>`
- :doc:`Chile <electronic_invoicing/chile>`
- :doc:`Colombia <electronic_invoicing/colombia>`
- :doc:`Croatia <electronic_invoicing/croatia>`
- :doc:`Denmark <electronic_invoicing/denmark>`
- :doc:`Ecuador <electronic_invoicing/ecuador>`
- :doc:`Estonia <electronic_invoicing/estonia>`
- :doc:`Finland <electronic_invoicing/finland>`
- :doc:`France <electronic_invoicing/france>`
@@ -29,14 +34,17 @@ Odoo supports e-invoicing in many countries. Refer to the country's page for mor
- :doc:`Latvia <electronic_invoicing/latvia>`
- :doc:`Lithuania <electronic_invoicing/lithuania>`
- :doc:`Luxembourg <electronic_invoicing/luxembourg>`
- :doc:`Mexico <electronic_invoicing/mexico>`
- :doc:`Netherlands <electronic_invoicing/netherlands>`
- :doc:`Norway <electronic_invoicing/norway>`
- :doc:`Peru <electronic_invoicing/peru>`
- :doc:`Poland <electronic_invoicing/poland>`
- :doc:`Portugal <electronic_invoicing/portugal>`
- :doc:`Romania <electronic_invoicing/romania>`
- :doc:`Slovenia <electronic_invoicing/slovenia>`
- :doc:`Spain <electronic_invoicing/spain>`
- :doc:`Spain - Basque Country <electronic_invoicing/basque_country>`
- :doc:`Uruguay <electronic_invoicing/uruguay>`
.. seealso::
:doc:`Fiscal localizations documentation <../../fiscal_localizations>`
@@ -0,0 +1,54 @@
:orphan:
======================================
Odoo electronic invoicing in Argentina
======================================
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Argentina's regulatory standards and compatible with the requirements set
forth by the `Administración Federal de Ingresos Públicos (AFIP) <https://www.afip.gob.ar/>`_.
Legal framework for e-invoicing in Argentina
============================================
In Argentina, e-invoicing is regulated by the :abbr:`AFIP (Administración Federal de Ingresos
Públicos)` and is mandatory for most businesses to ensure tax compliance and transparency. The
primary regulations governing e-invoicing include:
- `General Resolution No. 4290/2018 <https://biblioteca.afip.gob.ar/search/query/norma.aspx?p=t:RAG|n:4290|o:3|a:2018|f:02/08/2018>`_
which establishes the mandatory use of electronic invoices for specific economic activities and
turnover thresholds.
- Fiscal code regulations: Requires electronic invoices for all VAT-registered businesses, including
B2B, :abbr:`B2G (business-to-government)`, and B2C transactions.
- Implementation of :abbr:`CAE (Código de Autorización Electrónico)`: Every electronic invoice must
include a :abbr:`CAE (Código de Autorización Electrónico)` issued by the :abbr:`AFIP
(Administración Federal de Ingresos Públicos)`, ensuring its validity and authenticity.
Compliance with Argentinian e-invoicing regulations
===================================================
Odoo Invoicing simplifies the process of adhering to Argentina's e-invoicing regulations, offering
features designed to ensure compliance:
- **Supported formats**: Odoo supports Argentina's authorized e-invoice formats, including :abbr:`FE
(Factura Electrónica)` with :abbr:`AFIP (Administración Federal de Ingresos Públicos)`-compliant
digital validation, XML with :abbr:`CAE (Código de Autorización Electrónico)` authorization for
real-time integration with :abbr:`AFIP (Administración Federal de Ingresos Públicos)`, and
digitally signed PDF invoices featuring :abbr:`CAE (Código de Autorización Electrónico)` and
QR codes for secure validation.
- **Secure storage and retrieval**: Complying with Argentinas ten-year storage requirement, Odoo
provides tamper-proof archiving and easy retrieval for audits or tax inspections.
- **Automatic VAT calculation and reporting**: Odoo ensures compliance with Argentina's VAT
regulations by automatically calculating VAT, incorporating it into invoices, and adhering to
legal reporting requirements for accurate tax submissions.
.. seealso::
:doc:`Argentinian fiscal localization documentation <../../../fiscal_localizations/argentina>`
.. admonition:: Disclaimer
This page provides a general overview of Argentine e-invoicing laws and how Odoos invoicing
module supports compliance with AFIP regulations and the Fiscal Code. It is not intended as legal
advice. We recommend consulting with a tax advisor or legal professional familiar with
Argentinian e-invoicing regulations to ensure compliance tailored to your specific business
needs.
@@ -0,0 +1,53 @@
:orphan:
===================================
Odoo electronic invoicing in Brazil
===================================
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Brazil's regulatory standards and compatible with the requirements set
forth by the `Secretaria da Fazenda (SEFAZ) <https://www.gov.br/receitafederal/pt-br>`_.
Legal framework for e-invoicing in Brazil
=========================================
In Brazil, e-invoicing is highly regulated and mandatory for most businesses to ensure tax
compliance and transparency. The key regulations governing e-invoicing include:
- :abbr:`NF-e (Nota Fiscal Eletrônica)`: A mandatory e-invoice for goods and services used in B2B
and :abbr:`B2G (business-to-government)` transactions.
- :abbr:`CT-e (Conhecimento de Transporte Eletrônico)`: Specific to freight and logistics services.
- :abbr:`NFS-e (Nota Fiscal de Serviços Eletrônica)`: Issued for service-based transactions, with
implementation varying by municipality.
- Integration with :abbr:`SEFAZ (Secretaria da Fazenda)`: Every electronic invoice must be
authorized by :abbr:`SEFAZ (Secretaria da Fazenda)` and issued with a unique authorization code
(Autorização de Uso).
Compliance with Brazilian e-invoicing regulations
=================================================
Odoo Invoicing simplifies the process of adhering to Brazils complex e-invoicing regulations,
offering features designed to ensure compliance:
- **Supported formats**: Odoo supports Brazil's authorized e-invoice formats, including :abbr:`NF-e
(Nota Fiscal Eletrônica)` for goods and services compliant with :abbr:`SEFAZ (Secretaria da
Fazenda)`, :abbr:`NFS-e (Nota Fiscal de Serviços Eletrônica)` customizable for municipal
requirements, :abbr:`CT-e (Conhecimento de Transporte Eletrônico)` for logistics and
transportation, and digital PDF invoices with :abbr:`SEFAZ (Secretaria da Fazenda)` authorization
codes and QR codes.
- **Secure storage and retrieval**: Complying with Brazil's five-year storage requirement, Odoo
offers tamper-proof archiving for easy retrieval during audits or inspections.
- **Automatic tax calculation and reporting**: Odoo automates tax calculations for ICMS, IPI, and
ISS, ensuring compliance with regional tax rules and generating reports compatible with
:abbr:`SEFAZ (Secretaria da Fazenda)` and municipal requirements.
.. seealso::
:doc:`Brazilian fiscal localization documentation <../../../fiscal_localizations/brazil>`
.. admonition:: Disclaimer
This page provides a general overview of Brazilian e-invoicing laws and how Odoos invoicing
module supports compliance with :abbr:`SEFAZ (Secretaria da Fazenda)` regulations. It is not
intended as legal advice. We recommend consulting with a tax advisor or legal professional
familiar with Brazilian e-invoicing regulations to ensure compliance tailored to your specific
business needs.
@@ -0,0 +1,51 @@
:orphan:
==================================
Odoo electronic invoicing in Chile
==================================
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Chile's regulatory requirements and compatible with standards set by the
`Servicio de Impuestos Internos (SII) <https://homer.sii.cl/>`_.
Legal framework for e-invoicing in Chile
========================================
Chile is a pioneer in mandatory electronic invoicing, with comprehensive regulations to ensure tax
compliance and enhance transparency. Key elements include:
- **Factura Electrónica**: Mandatory for most businesses to issue invoices digitally through the
:abbr:`SII (Servicio de Impuestos Internos)`'s system.
- **Boleta Electrónica**: Required for retail transactions to report sales and tax information.
- **Guía de Despacho Electrónica**: Necessary for tracking the transport of goods.
- **Integration with SII**: All electronic invoices must be validated by the :abbr:`SII (Servicio
de Impuestos Internos)`, assigned a unique Folio authorization code, and reported for tax
purposes.
Compliance with Chilean e-invoicing regulations
===============================================
Odoo Invoicing simplifies adherence to Chile's e-invoicing requirements with features designed to
ensure compliance:
- **Supported formats**: Odoo supports all major Chilean e-invoice formats, including Factura
Electrónica, Boleta Electrónica, and Guía de Despacho Electrónica, ensuring :abbr:`SII (Servicio
de Impuestos Internos)` compatibility with digital validation and Folio assignment.
- **Integration with SII**: Odoo seamlessly connects with :abbr:`SII (Servicio de Impuestos
Internos)`'s systems, automating invoice submission and ensuring real-time validation for
compliant issuance.
- **Secure storage and retrieval**: Complying with Chile's mandatory storage period of six years,
Odoo provides tamper-proof archiving for invoices, enabling easy access for audits or tax
inspections.
- **Automatic tax calculation and reporting**: Odoo automates calculations for VAT (IVA) and other
applicable taxes, ensuring accurate invoicing and adherence to Chile's tax reporting standards.
.. seealso::
:doc:`Chilean fiscal localization documentation <../../../fiscal_localizations/chile>`
.. admonition:: Disclaimer
This page provides a general overview of Chilean e-invoicing laws and how Odoo supports
compliance with :abbr:`SII (Servicio de Impuestos Internos)` regulations. It is not intended as
legal or tax advice. We recommend consulting a tax advisor or legal professional familiar with
Chilean e-invoicing regulations to ensure compliance tailored to your specific business needs.
@@ -0,0 +1,51 @@
:orphan:
=====================================
Odoo electronic invoicing in Colombia
=====================================
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Colombia's regulatory requirements and fully compatible with the
guidelines established by the `Dirección de Impuestos y Aduanas Nacionales (DIAN)
<https://www.dian.gov.co/>`_.
Legal framework for e-invoicing in Colombia
===========================================
Colombia has implemented mandatory e-invoicing for most businesses to enhance tax compliance and
improve transparency. Key elements include:
- **Factura Electrónica**: Mandatory for B2B, B2C, and :abbr:`B2G (business-to-government)`
transactions, requiring compliance with :abbr:`DIAN (Dirección de Impuestos y Aduanas
Nacionales)`'s technical specifications.
- **Integration with DIAN**: All electronic invoices must be submitted to :abbr:`DIAN (Dirección de
Impuestos y Aduanas Nacionales)` for validation, where they are assigned a unique :abbr:`CUFE
(Código Único de Factura Electrónica)` authorization code.
- **Adoption of XML Standards**: Colombian e-invoicing uses XML as the standard format for
electronic invoices, ensuring interoperability and standardized reporting.
Compliance with Colombian e-invoicing regulations
=================================================
Odoo Invoicing simplifies the complexities of e-invoicing compliance in Colombia, offering tailored
features:
- **Supported formats**: Odoo supports Factura Electrónica in :abbr:`DIAN (Dirección de Impuestos y
Aduanas Nacionales)`-compliant XML formats, including legally required :abbr:`CUFE (Código Único
de Factura Electrónica)` codes and additional fields for B2B, B2C, and :abbr:`B2G
(business-to-government)` transactions.
- **Secure storage and retrieval**: In compliance with Colombia's six-year mandatory storage
requirement, Odoo provides tamper-proof invoice archiving, ensuring easy access for audits or
inspections.
- **Automatic tax calculation and reporting**: Odoo automates tax calculations for VAT (IVA) and
other applicable taxes, ensuring accuracy and compliance with DIAN's tax reporting standards.
.. seealso::
:doc:`Colombian fiscal localization documentation <../../../fiscal_localizations/colombia>`
.. admonition:: Disclaimer
This page provides a general overview of Colombian e-invoicing regulations and how Odoo supports
compliance with DIAN requirements. It is not intended as legal or tax advice. We recommend
consulting with a tax advisor or legal professional familiar with Colombian e-invoicing
regulations to ensure compliance tailored to your specific business needs.
@@ -0,0 +1,50 @@
:orphan:
====================================
Odoo electronic invoicing in Ecuador
====================================
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Ecuador's regulatory requirements and fully compatible with the
guidelines established by the `Servicio de Rentas Internas (SRI)
<https://www.sri.gob.ec/web/intersri/home>`_.
Legal framework for e-invoicing in Ecuador
==========================================
Ecuador has implemented mandatory electronic invoicing for most businesses aimed to enhance tax
compliance and transparency. Key elements include:
- **Factura Electrónica**: All businesses must issue electronic invoices in XML format for B2B, B2C,
and :abbr:`B2G (business-to-government)` transactions, ensuring compliance with :abbr:`SRI
(Servicio de Rentas Internas)`'s technical specifications.
- **Transmission Requirements**: E-invoices must be transmitted to the SRI within 24 hours of
issuance.
- **Record Storage**: E-invoices, including the :abbr:`SRI (Servicio de Rentas Internas)`'s
acceptance messages, must be stored for a minimum of seven years.
Compliance with Ecuadorian e-invoicing regulations
==================================================
Odoo Invoicing simplifies compliance with Ecuador's e-invoicing requirements by offering tailored
features:
- **Supported formats**: Odoo supports the Ecuadorian e-invoice format (XML) and ensures
compatibility with the :abbr:`SRI (Servicio de Rentas Internas)`'s system for validation and
authorization, including the necessary digital signature.
- **Secure storage and retrieval**: In compliance with Ecuador's seven-year storage requirement,
Odoo offers tamper-proof archiving so that invoices can be easily accessed during audits or
inspections.
- **Automatic tax calculation and reporting**: Odoo automates tax calculations for VAT (IVA) and
other applicable taxes, ensuring accurate invoicing and adherence to Ecuador's tax reporting
standards.
.. seealso::
:doc:`Ecuadorian fiscal localization documentation <../../../fiscal_localizations/ecuador>`
.. admonition:: Disclaimer
This page provides a general overview of Ecuadorian e-invoicing regulations and how Odoo supports
compliance with SRI requirements. It is not intended as legal or tax advice. We recommend
consulting with a tax advisor or legal professional familiar with Ecuador's e-invoicing
regulations to ensure compliance tailored to your specific business needs.
@@ -0,0 +1,57 @@
:orphan:
===================================
Odoo electronic invoicing in Mexico
===================================
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Mexico's regulatory requirements and fully compatible with the guidelines
established by the :abbr:`SAT (Servicio de Administración Tributaria)`.
Legal framework for e-invoicing in Mexico
=========================================
Mexico has one of the most advanced e-invoicing systems globally, with electronic invoicing
:abbr:`CFDI (Comprobante Fiscal Digital por Internet)` being mandatory for most taxpayers. Key
elements include:
- **CFDI**: A mandatory electronic invoice format for B2B, B2C, and :abbr:`B2G
(business-to-government)` transactions, fully compliant with SAT requirements.
- **Digital tax receipt validation**: All :abbr:`CFDIs (Comprobante Fiscal Digital por Internet)`
must be digitally signed and validated by :abbr:`SAT (Servicio de Administración
Tributaria)`-authorized :abbr:`PACs (authorized certification providers)` before issuance.
- **Complementos**: Specific complements are required for certain transaction types, such as
payroll or foreign trade.
- **XML Format**: The XML format is mandatory, ensuring interoperability and compliance with
:abbr:`SAT (Servicio de Administración Tributaria)`'s technical standards.
Compliance with Mexican e-invoicing regulations
===============================================
Odoo Invoicing simplifies compliance with Mexicos e-invoicing requirements by offering tailored
features:
- **Supported formats**: Odoo supports :abbr:`CFDI (Comprobante Fiscal Digital por Internet)` in
:abbr:`SAT (Servicio de Administración Tributaria)`-compliant XML formats, including all
mandatory fields, digital signatures, and complements for specialized transactions.
- **Integration with PACs**: Odoo integrates with :abbr:`SAT (Servicio de Administración
Tributaria)`-authorized :abbr:`PACs (authorized certification providers)` to automate the
validation, certification, and issuance of :abbr:`CFDIs (Comprobante Fiscal Digital por
Internet)`, ensuring real-time compliance.
- **Secure storage and retrieval**: In compliance with Mexico's five-year mandatory storage
requirement, Odoo provides tamper-proof archiving for easy access to invoices during audits
or inspections.
- **Automatic tax calculation and reporting**: Odoo automates tax calculations for VAT (IVA) and
other applicable taxes, ensuring accuracy and compliance with :abbr:`SAT (Servicio de
Administración Tributaria)`'s tax reporting standards.
.. seealso::
:doc:`Mexican fiscal localization documentation <../../../fiscal_localizations/mexico>`
.. admonition:: Disclaimer
This page provides a general overview of Mexican e-invoicing regulations and how Odoo supports
compliance with :abbr:`SAT (Servicio de Administración Tributaria)` requirements. It is not
intended as legal or tax advice. We recommend consulting with a tax advisor or legal professional
familiar with Mexico's e-invoicing regulations to ensure compliance tailored to your specific
business needs.
@@ -0,0 +1,55 @@
:orphan:
=================================
Odoo electronic invoicing in Peru
=================================
Odoo Invoicing provides secure, efficient, and legally compliant e-invoicing solutions tailored to
meet Perus regulatory requirements and fully compatible with the guidelines established by the
`Superintendencia Nacional de Aduanas y de Administración Tributaria (SUNAT)
<https://www.sunat.gob.pe/>`_.
Legal framework for e-invoicing in Peru
=======================================
Peru has mandated electronic invoicing for most taxpayers to enhance tax compliance, reduce fraud,
and improve transparency. Key elements include:
- **Comprobante de Pago Electrónico (CPE)**: A mandatory electronic document required for B2B, B2C,
and :abbr:`B2G (business-to-government)` transactions, fully compliant with :abbr:`SUNAT
(Superintendencia Nacional de Aduanas y de Administración Tributaria)`'s technical specifications.
- **Integration with SUNAT**: E-invoices must be submitted to :abbr:`SUNAT (Superintendencia
Nacional de Aduanas y de Administración Tributaria)` for validation and authorization. Upon
approval, :abbr:`SUNAT (Superintendencia Nacional de Aduanas y de Administración Tributaria)`
assigns a unique identification code to the invoice.
- **XML Format**: All electronic invoices must be issued in XML format, ensuring standardization and
interoperability.
- **Mandatory adoption timeline**: Electronic invoicing is mandatory for most businesses, with
specific deadlines for smaller entities.
Compliance with Peruvian e-invoicing regulations
================================================
Odoo Invoicing simplifies compliance with Perus e-invoicing requirements by offering tailored
features:
- **Supported formats**: Odoo supports the Peruvian :abbr:`CPE (Comprobante de Pago Electrónico` in
:abbr:`SUNAT (Superintendencia Nacional de Aduanas y de Administración Tributaria)`-compliant XML
formats, including all required fields and authorization codes.
- **Secure storage and retrieval**: In compliance with Peru's five-year mandatory storage
requirement, Odoo offers tamper-proof archiving, ensuring easy access for audits or inspections.
- **Automatic tax calculation and reporting**: Odoo automates tax calculations for :abbr:`IGV
(Impuesto General a las Ventas) and other applicable taxes, ensuring accuracy and compliance
with :abbr:`SUNAT (Superintendencia Nacional de Aduanas y de Administración Tributaria)`'s
reporting standards.
.. seealso::
:doc:`Peruvian fiscal localization documentation <../../../fiscal_localizations/peru>`
.. admonition:: Disclaimer
This page provides a general overview of Peruvian e-invoicing regulations and how Odoo supports
compliance with :abbr:`SUNAT (Superintendencia Nacional de Aduanas y de Administración
Tributaria)` requirements. It is not intended as legal or tax advice. We recommend consulting
with a tax advisor or legal professional familiar with Peru's e-invoicing regulations to ensure
compliance tailored to your specific business needs.
@@ -0,0 +1,57 @@
:orphan:
====================================
Odoo electronic invoicing in Uruguay
====================================
Odoo Invoicing is your trusted partner for safe, efficient, and legally compliant e-invoicing
solutions tailored to meet Uruguay's regulatory requirements and fully compatible with the
guidelines established by the `Dirección General Impositiva (DGI)
<https://www.gub.uy/direccion-general-impositiva/>`_.
Legal framework for e-invoicing in Uruguay
==========================================
Uruguay has mandated electronic invoicing under the :abbr:`CFE (Comprobante Fiscal Electrónico)`
system, which applies to most businesses to promote tax transparency and streamline financial
transactions. Key elements include:
- **Comprobante Fiscal Electrónico**: A mandatory e-invoice format required for B2B, B2C, and
:abbr:`B2G (business-to-government)` transactions, fully compliant with :abbr:`DGI (Dirección
General Impositiva)`'s technical standards.
- **Integration with DGI**: All :abbr:`CFE (Comprobante Fiscal Electrónico)` must be submitted to
the :abbr:`DGI (Dirección General Impositiva)` for validation. Upon approval, the :abbr:`CFE
(Comprobante Fiscal Electrónico)` receives a unique identification code and authorization for
issuance.
- **XML Format**: Uruguay mandates the use of XML as the standard format for e-invoices, ensuring
compatibility and interoperability with various systems.
- **Adoption Timeline**: E-invoicing is mandatory for most businesses, with specific deadlines for
smaller enterprises to transition into the system.
Compliance with Uruguayan e-invoicing regulations
=================================================
Odoo Invoicing simplifies the complexities of compliance with Uruguay's e-invoicing requirements by
offering tailored features:
- **Supported formats**: Odoo supports the :abbr:`CFE (Comprobante Fiscal Electrónico)` format in
:abbr:`DGI (Dirección General Impositiva)`-compliant XML, including all legally required fields,
such as the unique identification code, authorization number, and digital signature. Odoo allows
the automated submission, validation, and issuance through the :abbr:`DGI (Dirección General
Impositiva)`'s e-invoicing platform to ensure compliance in real time.
- **Secure storage and retrieval**: In line with Uruguays mandatory five-year storage requirement,
Odoo provides tamper-proof archiving solutions, ensuring easy access to invoices for audits or
inspections.
- **Automatic tax calculation and reporting**: Odoo automates tax calculations for IVA (Value-Added
Tax) and other applicable taxes, ensuring accuracy and compliance with :abbr:`DGI (Dirección
General Impositiva)`'s reporting standards.
.. seealso::
:doc:`Uruguayan fiscal localization documentation <../../../fiscal_localizations/uruguay>`
.. admonition:: Disclaimer
This page provides a general overview of Uruguayan e-invoicing regulations and how Odoo supports
compliance with DGI requirements. It is not intended as legal or tax advice. We recommend
consulting with a tax advisor or legal professional familiar with Uruguay's e-invoicing
regulations to ensure full compliance tailored to your specific business requirements.
@@ -20,39 +20,110 @@ for use at a later date:
- `Odoo Tutorials: Bank Configuration
<https://www.odoo.com/slides/slide/bank-configuration-6832>`_
.. _accounting/payments/payment-methods:
Payment methods
===============
Several payment methods are available in Odoo to allow different configurations for different types
of payments. Examples of payment methods include manual payments (such as cash), :doc:`checks
<payments/pay_checks>`, and batch payment files (such as :ref:`NACHA
<l10n_us/ach-electronic-transfers>` and :doc:`SEPA <payments/pay_sepa>`). Payment methods can be
configured in the :guilabel:`Incoming Payments` and :guilabel:`Outgoing Payments` tabs of a bank or
cash journal.
.. seealso::
:doc:`../../sales/point_of_sale/payment_methods` for Point of Sale
.. _accounting/payments/preferred-payment-methods:
Preferred payment method
------------------------
A contact's preferred payment method can be set so that when a payment is created for that contact,
the payment method is automatically selected by default. Invoices and bills can be filtered by
:guilabel:`Payment Method` to simplify :ref:`group <accounting/payments/group-payments>` payments.
To set a preferred :guilabel:`Payment Method` for a customer or a vendor, go to
:menuselection:`Accounting --> Customers --> Customers` or :menuselection:`Accounting --> Vendors
--> Vendors` and select the customer or vendor. In the :guilabel:`Sales & Purchase` tab of the
contact form, select the preferred :guilabel:`Payment Method` in the :guilabel:`Sales` section for
invoice payments or for vendor bill payments in the :guilabel:`Purchase` section.
.. tip::
Access a full list of all contacts from the :guilabel:`Customers` or :guilabel:`Vendors` list
view by removing the :guilabel:`Customers` or :guilabel:`Vendors` filter. Alternatively, access
the full contact list through the Contacts app.
.. _accounting/payments/from-invoice-bill:
Registering payment from an invoice or bill
===========================================
When clicking :guilabel:`Register payment` in a customer invoice or vendor bill, it generates a new
journal entry and changes the amount due according to the payment amount. The counterpart is
reflected in an :ref:`outstanding <accounting/bank/outstanding-accounts>` **receipts** or
**payments** account. At this point, the customer invoice or vendor bill is marked as :guilabel:`In
payment`. Then, when the outstanding account is reconciled with a bank transaction line, the invoice
or vendor bill changes to the :guilabel:`Paid` status.
To register a payment for an invoice or a bill, follow these steps:
The :icon:`fa-info-circle` information icon next to the payment line displays more
information about the payment. To access additional information, such as the related journal, click
:guilabel:`View`.
#. Click :guilabel:`Pay` on a customer invoice or vendor bill. In the :guilabel:`Pay` window, select
the :guilabel:`Journal` and the :guilabel:`Payment Date`.
#. If previously set, the contact's preferred :guilabel:`Payment Method` is automatically selected
by default but can be updated if necessary.
#. If using :doc:`payment terms <customer_invoices/payment_terms>`, the :guilabel:`Amount` is
automatically set based on the installment amounts defined by the payment term. To pay the full
amount instead, click :guilabel:`full amount`.
#. If necessary, edit the :guilabel:`Memo`.
#. Click :guilabel:`Create Payment`.
.. image:: payments/information-icon.png
:alt: See detailed information of a payment.
After the payment is registered, the customer invoice or vendor bill is marked as
:guilabel:`In payment`.
.. note::
- The customer invoice or vendor bill must be in the :guilabel:`Posted` status to register the
payment.
- If a payment is unreconciled, it still appears in the books but is no longer linked to the
invoice.
- If a payment is (un)reconciled in a different currency, a journal entry is automatically
created to post the currency exchange gains/losses (reversal) amount.
- If a payment is (un)reconciled and an invoice with cash-basis taxes, a journal entry is
automatically created to post the cash-basis tax (reversal) amount.
.. tabs::
.. tip::
If the main bank account is set as an :ref:`outstanding account
<accounting/bank/outstanding-accounts>`, and the payment is registered in Odoo (not through a
related bank transaction), invoices and bills are directly registered as :guilabel:`Paid`.
.. group-tab:: Without outstanding accounts
If no :ref:`outstanding accounts <accounting/bank/outstanding-accounts>` are configured, no
journal entry is created. To display more information about the payment, click the
:guilabel:`Payments` smart button.
When the invoice or vendor bill is :doc:`reconciled <bank/reconciliation>` with a bank
transaction, its status is updated to :guilabel:`Paid`.
.. note::
- If a bank transaction is reconciled in a different currency, a journal entry is
automatically created to post the currency exchange gains/loss amount.
- When a bank transaction is reconciled with an invoice with cash-basis, a journal entry is
automatically created to post the cash-basis tax amount.
.. group-tab:: Using outstanding accounts
By default, payments in Odoo do not create journal entries, but they can easily be configured
to create journal entries using :ref:`outstanding accounts
<accounting/bank/outstanding-accounts>`.
Registering a payment on a customer invoice or vendor bill generates a new journal entry and
reduces the :guilabel:`Amount Due` based on the payment amount. The counterpart is
reflected in an :ref:`outstanding <accounting/bank/outstanding-accounts>` **receipts** or
**payments** account. At this point, the customer invoice or vendor bill is marked as
:guilabel:`In payment`. Then, when the payment is :doc:`reconciled <bank/reconciliation>` with
a bank transaction, the invoice or vendor bill status changes to :guilabel:`Paid`.
The :icon:`fa-info-circle` information icon next to the payment line displays more
information about the payment. To access additional information, such as the related journal,
click :guilabel:`View`.
.. image:: payments/information-icon.png
:alt: See detailed information of a payment.
.. note::
- Unreconciling a payment unlinks it from the invoice or bill but does not delete the
payment.
- If a payment is (un)reconciled in a different currency, a journal entry is automatically
created to post the currency exchange gains/losses (reversal) amount.
- If a payment is (un)reconciled on an invoice with cash-basis taxes, a journal entry is
automatically created to post the cash-basis tax (reversal) amount.
.. tip::
If the main bank account is set as the outstanding account on the bank journal's payment
method, registering the full payment on an invoice or bill moves the invoice/bill directly
to the :guilabel:`Paid` status without requiring bank reconciliation.
.. _accounting/payments/not-tied:
@@ -60,71 +131,185 @@ Registering payments not tied to an invoice or bill
===================================================
When a new payment is registered via :menuselection:`Customers / Vendors --> Payments`, it is not
directly linked to an invoice or bill. Instead, the account receivable or the account payable is
matched with the **outstanding account** until it is manually matched with its related invoice or
bill.
directly linked to an invoice or bill.
.. tabs::
.. group-tab:: Without outstanding accounts
Payments that are not linked to an invoice or bill should not be registered without using
:ref:`outstanding accounts <accounting/bank/outstanding-accounts>`, as there is no way to
associate the payment with the invoice or bill since no journal entry is created for the
payment. The amount paid or received is not reflected in the accounting and the
:guilabel:`Amount Due` is not updated based on the payment amount.
.. group-tab:: Using outstanding accounts
Instead, the payment's journal entry matches the :guilabel:`outstanding account` with the
account receivable or the account payable until the payment is manually matched with its
related invoice or bill. Then, :doc:`reconciling <bank/reconciliation>` the payment with the
bank transaction completes the payment workflow.
.. _accounting/payments/payments-matching:
Payments matching
-----------------
.. note::
During the :doc:`bank reconciliation <bank/reconciliation>` process, a remaining balance is
identified if the total debits and credits do not match when records are compared with bank
transactions. This balance must either be reconciled later or written off immediately.
.. _accounting/payments/matching-invoices-bills:
Matching invoices and bills with payments
-----------------------------------------
For a single invoice or bill
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A blue banner appears when validating a new invoice/bill and an **outstanding payment** exists for
this specific customer or vendor. To match it with the invoice or bill, click :guilabel:`ADD`
under :guilabel:`Outstanding Credits` or :guilabel:`Outstanding Debits`.
.. tabs::
.. image:: payments/add-option.png
:alt: Shows the ADD option to reconcile an invoice or a bill with a payment.
.. group-tab:: Without outstanding accounts
The invoice or bill is now marked as :guilabel:`In payment` until it is reconciled with its
corresponding bank transaction.
By default, payments in Odoo do not create journal entries. As a result, there is no payment
to match.
.. group-tab:: Using outstanding accounts
A blue banner appears when validating a new invoice/bill and an **outstanding payment** exists
for this specific customer or vendor. To match it with the invoice or bill, click
:guilabel:`Add` under :guilabel:`Outstanding Credits` or :guilabel:`Outstanding Debits`.
.. image:: payments/add-option.png
:alt: Shows the Add option to reconcile an invoice or a bill with a payment.
The invoice or bill is then marked as :guilabel:`In payment` until the payment is
:doc:`reconciled <bank/reconciliation>` with its corresponding :doc:`bank transaction(s)
<bank/transactions>`.
.. _accounting/payments/auto-reconcile-tool:
For multiple invoices or bills
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. tabs::
.. group-tab:: Without outstanding accounts
By default, payments in Odoo do not create journal entries. As a result, there is no payment
to match, but this feature can still be used to match miscellaneous journal items.
.. group-tab:: Using outstanding accounts
The :guilabel:`Payments matching` or :guilabel:`Auto-reconcile` tool allows reconciling
journal items with each other (i.e., payments with customer invoices or vendor bills) either
individually or in batches. Access the :guilabel:`Accounting Dashboard`, click the
:icon:`fa-ellipsis-v` (:guilabel:`ellipsis`) button from the :guilabel:`Customer
Invoices` or :guilabel:`Vendor Bills` journals, and select :guilabel:`Payments Matching`.
Alternatively, go to :menuselection:`Accounting --> Accounting --> Reconcile`.
To manually :guilabel:`Reconcile` journal items, select the individual items from the list
view and click :guilabel:`Reconcile`.
.. _accounting/payments/auto-reconcile-feature:
Auto-Reconcile Feature
**********************
.. tabs::
.. group-tab:: Without outstanding accounts
To use the :guilabel:`Auto-Reconcile` feature, follow these steps:
#. In the :guilabel:`Journal Items to reconcile` list view, click :guilabel:`Auto-Reconcile`
next to the receivable or payable account (or a specific contact's group of journal items
in that account).
#. In the :guilabel:`Reconcile automatically` window, click :guilabel:`Reconcile`.
.. group-tab:: Using outstanding accounts
To use the :guilabel:`Auto-Reconcile` feature, follow these steps:
#. In the :guilabel:`Journal Items to reconcile` list view, click :guilabel:`Auto-Reconcile`
next to the receivable or payable account (or a specific contact's group of journal items
in that account).
#. In the :guilabel:`Reconcile Automatically` window, set the
:guilabel:`Reconcile` field depending on how you want to match journal items:
- :guilabel:`Perfect Match`: Each debit journal item will be matched with
the corresponding credit journal item of the same value.
- :guilabel:`Clear Accounts`: All reconciled journal items will have the same
matching number, as they are selected from the same account.
#. Click :guilabel:`Reconcile`.
Invoices and bills are automatically matched to their corresponding payments and marked as
:guilabel:`In payment` until they are :doc:`reconciled <bank/reconciliation>` with their
corresponding :doc:`bank transactions <bank/transactions>`.
.. _accounting/payments/group-payments:
Group payments
--------------
Registering payments on multiple invoices/credit notes or bills/refunds (group payments)
========================================================================================
Group payments allow combining outgoing and incoming payments from the same contact into a single
payment to simplify the process and improve payment usability. To register a group payment:
To register payments on multiple invoices/credit notes or bills/refunds, follow these steps:
#. Go to :menuselection:`Accounting --> Customers --> Invoices/Credit Notes` or
:menuselection:`Accounting --> Vendors --> Bills/Refunds`.
#. Select the relevant invoices/credit notes or bills/refunds linked to a specific contact.
#. Click the :icon:`fa-cog` (:guilabel:`Action menu`) icon and select :guilabel:`Register Payment`.
#. In the :guilabel:`Register Payment` window, select the :guilabel:`Journal`, the
:guilabel:`Payment Method`, and the :guilabel:`Payment Date`.
#. Enable the :guilabel:`Group Payments` option and click :guilabel:`Create payment`.
#. In the list view, click into the search bar, group by :guilabel:`Payment Method`, select the
relevant invoices/credit notes or bills/refunds and click :guilabel:`Pay`.
#. In the :guilabel:`Pay` window, select the :guilabel:`Journal` and the :guilabel:`Payment Date`.
#. If previously set, the contact's preferred :guilabel:`Payment Method` is automatically selected
by default but can be updated if necessary.
#. If using :doc:`payment terms <customer_invoices/payment_terms>`, the :guilabel:`Amount` is
automatically set based on the installment amounts defined by the payment term. To pay the full
amount instead, click :guilabel:`full amount`.
#. To combine all payments from the same contact into a single payment, enable the :guilabel:`Group
Payments` option, or leave it unchecked to create separate payments.
#. Click :guilabel:`Create payment`.
The invoices or bills are now marked as :guilabel:`In payment` until they are reconciled with the
corresponding bank transactions. The credit notes or refunds are marked as :guilabel:`Paid`.
.. tabs::
.. group-tab:: Without outstanding accounts
The invoices or bills are then marked as :guilabel:`In payment` until they are
:doc:`reconciled <bank/reconciliation>` with the bank transactions.
.. group-tab:: Using outstanding accounts
The invoices or bills are then marked as :guilabel:`In payment` until the bank transactions
are :doc:`reconciled <bank/reconciliation>` with the payments.
.. _accounting/payments/batch-payments:
Batch payments
--------------
Registering a single payment for multiple customers or vendors (batch payments)
===============================================================================
Batch payments allow grouping payments from multiple contacts to ease
:doc:`reconciliation <bank/reconciliation>`. They are also useful when depositing :doc:`checks
<payments/checks>` to the bank or for :doc:`SEPA payments <payments/pay_sepa>`. To do so, go to
:menuselection:`Accounting --> Customers --> Batch Payments` or :menuselection:`Accounting -->
Vendors --> Batch Payments`. In the list view of payments, to group several payments in a
batch, select them and click :menuselection:`Action --> Create Batch Payment`.
Batch payments allow grouping payments from multiple contacts to ease :doc:`reconciliation
<bank/reconciliation>`. They are also useful when depositing :doc:`checks <payments/checks>` to the
bank or for generating bank payment files such as :doc:`SEPA <payments/pay_sepa>` or :ref:`NACHA
<l10n_us/nacha>`. To do so, go to :menuselection:`Accounting --> Customers --> Payments` or
:menuselection:`Accounting --> Vendors --> Payments`. In the payments list view, select the payments
to be grouped in a batch, click :icon:`fa-cog` :guilabel:`Actions`, and select :guilabel:`Create
Batch Payment`.
.. note::
All payments in a batch must have the same :ref:`payment method
<accounting/payments/payment-methods>`.
.. seealso::
- :doc:`payments/batch`
- :doc:`payments/batch_sdd`
- :doc:`payments/batch`
- :doc:`payments/batch_sdd`
.. _accounting/payments/matching:
Payments matching
-----------------
The :guilabel:`Payments matching` tool opens all unreconciled customer invoices or vendor bills and
allows them to be processed individually, matching all payments and invoices in one place. Go to the
:guilabel:`Accounting Dashboard`, click the :icon:`fa-ellipsis-v` (:guilabel:`dropdown menu`)
button from the :guilabel:`Customer Invoices` or :guilabel:`Vendor Bills` journals, and select
:guilabel:`Payments Matching`, or go to :menuselection:`Accounting --> Accounting -->
Reconciliation`.
The :guilabel:`Payments matching` tool opens all unreconciled journal items and allows them to be
processed individually, matching all payments and journal items. Go to the
:guilabel:`Accounting Dashboard`, go to :menuselection:`Accounting --> Accounting --> Reconcile` or
click the :icon:`fa-ellipsis-v` (:guilabel:`ellipsis`) button from the :guilabel:`Customer
Invoices` or :guilabel:`Vendor Bills` journals, and select :guilabel:`Payments Matching`.
.. image:: payments/payments-journal.png
:alt: Payments matching menu in the drop-down menu.
@@ -134,47 +319,56 @@ Reconciliation`.
not match, there is a remaining balance. This either needs to be reconciled at a later date or
written off directly.
.. _accounting/payments/batch-payments-matching:
Batch payments matching
-----------------------
Use the batch reconciliation feature to reconcile several outstanding payments or invoices
simultaneously for a specific customer or vendor. Go to :menuselection:`Accounting --> Reporting -->
Aged Receivable / Aged Payable`. All transactions that have not yet been reconciled for that
contact are visible, and when a customer or vendor is selected, the :guilabel:`Reconcile` option is
displayed.
.. image:: payments/reconcile-option.png
:alt: The batch payment reconcile option.
.. _accounting/payments/partial-payment:
Registering a partial payment
=============================
To register a partial payment, click on :guilabel:`Register Payment` from the related invoice or
bill. In the case of a partial payment (when the :guilabel:`Amount` paid is less than the total
remaining amount on the invoice or the bill), the :guilabel:`Payment Difference` field displays the
outstanding balance. There are two options:
To register a partial payment, click on :guilabel:`Pay` from the related invoice or bill.
- :guilabel:`Keep open`: Keep the invoice or the bill open and mark it with a :guilabel:`Partial`
banner;
- :guilabel:`Mark as fully paid`: Select an account in the :guilabel:`Post Difference In` field and
change the :guilabel:`Label` if needed. A journal entry will be created to balance the accounts
payable or receivable with the selected account.
.. tabs::
.. image:: payments/partial-payment.png
:alt: register a partial payment
.. group-tab:: Without outstanding accounts
In the case of a partial payment (when the :guilabel:`Amount` paid is less than the total
remaining amount on the invoice or the bill), fill in the :guilabel:`Amount` in the
:guilabel:`Pay` window.
.. group-tab:: Using outstanding accounts
In the case of a partial payment (when the :guilabel:`Amount` paid is less than the total
remaining amount on the invoice or the bill), the :guilabel:`Payment Difference` field
displays the outstanding balance. There are two options:
- :guilabel:`Keep open`: Keep the invoice or the bill open and mark it with a
:guilabel:`Partial` banner;
- :guilabel:`Mark as fully paid`: Select an account in the :guilabel:`Post Difference In`
field and change the :guilabel:`Label` if needed. A journal entry will be created to balance
the accounts payable or receivable with the selected account.
.. image:: payments/partial-payment.png
:alt: register a partial payment
.. _accounting/payments/reconciling-payments:
Reconciling payments with bank transactions
===========================================
Once a payment has been registered, the status of the invoice or bill is :guilabel:`In payment`. The
next step is :doc:`reconciling <bank/reconciliation>` it with the related bank transaction line to
finalize the payment workflow and mark the invoice or bill as :guilabel:`Paid`.
.. tabs::
.. group-tab:: Without outstanding accounts
Once a payment has been registered, the status of the invoice or bill is :guilabel:`In
payment`. The next step is :doc:`reconciling <bank/reconciliation>` the related :doc:`bank
transaction <bank/transactions>` line with the invoice or bill to finalize the payment
workflow and mark the invoice or bill as :guilabel:`Paid`.
.. group-tab:: Using outstanding accounts
Once a payment has been registered, the status of the invoice or bill is :guilabel:`In
payment`. The next step is :doc:`reconciling <bank/reconciliation>` the payment with the
related :doc:`bank transaction <bank/transactions>` line to finalize the payment workflow and
mark the invoice or bill as :guilabel:`Paid`.
.. toctree::
:titlesonly:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

@@ -62,7 +62,7 @@ Then, to close the fiscal year:
<accounting/reporting/aged-payable>` reports.
- Audit all accounts, being sure to fully understand all transactions and their nature, making
sure to include loans and fixed assets.
- Optionally, run :ref:`payments matching <accounting/payments/matching>` to validate any open
- Optionally, :ref:`match payments <accounting/payments/auto-reconcile-tool>` to validate any open
vendor bills and customer invoices with their payments. While this step is optional, it could
assist the year-end closing process if all outstanding payments and invoices are reconciled,
potentially finding errors or mistakes in the system.
@@ -37,7 +37,7 @@ appropriately completed:
- :guilabel:`Vendor`: Odoo automatically fills some information based on the vendor's registered
information, previous purchase orders, or bills.
- :guilabel:`Bill Reference`: add the sales order reference provided by the vendor and is used to do
the :ref:`matching <accounting/payments/matching>` when you receive the products.
the :ref:`matching <accounting/payments/payments-matching>` when you receive the products.
- :guilabel:`Auto-Complete`: select a past bill/purchase order to automatically complete the
document. The :guilabel:`Vendor` field should be completed prior to completing this field.
- :guilabel:`Bill Date`: is the issuance date of the document.
@@ -91,9 +91,10 @@ To buy credits, go to :menuselection:`Accounting --> Configuration --> Settings
and click on :guilabel:`Buy credits`, or go to :menuselection:`Settings --> Odoo IAP` and click on
:guilabel:`View My Services`.
.. important::
If you are on Odoo Online and have the Enterprise version, you benefit from free trial credits to
test the feature.
.. note::
Enterprise Odoo users with a valid subscription get free credits to test IAP features before
deciding to purchase more credits for the database. This includes demo/training databases,
educational databases, and one-app-free databases.
.. seealso::
- `Our Privacy Policy <https://iap.odoo.com/privacy#header_6>`_
@@ -187,17 +187,17 @@ Fiscal localization modules are available for the countries listed below.
fiscal_localizations/mexico
fiscal_localizations/netherlands
fiscal_localizations/new_zealand
fiscal_localizations/romania
fiscal_localizations/peru
fiscal_localizations/philippines
fiscal_localizations/romania
fiscal_localizations/saudi_arabia
fiscal_localizations/singapore
fiscal_localizations/spain
fiscal_localizations/switzerland
fiscal_localizations/thailand
fiscal_localizations/vietnam
fiscal_localizations/united_arab_emirates
fiscal_localizations/united_kingdom
fiscal_localizations/united_states
fiscal_localizations/uruguay
fiscal_localizations/vietnam
fiscal_localizations/employment_hero
@@ -11,7 +11,10 @@ Below you can find videos with a general description of the localization, and ho
- `eCommerce - Localización de Argentina <https://www.youtube.com/watch?v=5gUi2WWfRuI>`_.
.. seealso::
`Smart Tutorial - Localización de Argentina <https://www.odoo.com/slides/smart-tutorial-localizacion-de-argentina-130>`_
- `Smart Tutorial - Localización de Argentina
<https://www.odoo.com/slides/smart-tutorial-localizacion-de-argentina-130>`_
- :doc:`Documentation on e-invoicing's legality and compliance in Argentina
<../accounting/customer_invoices/electronic_invoicing/argentina>`
Configuration
=============
@@ -45,6 +48,9 @@ localization:
- `l10n_ar_website_sale`
- (optional) Allows the user to see Identification Type and AFIP Responsibility in the
eCommerce checkout form in order to create electronic invoices.
* - :ref:`Argentina - Payment Withholdings <l10n_ar/payment-withholdings>`
- `l10n_ar_withholding`
- Allows registering withholdings during the payment of an invoice.
.. _argentina/configure-your-company:
@@ -678,6 +684,147 @@ the invoice can then be validated.
:align: center
:alt: Enter the perception amount.
.. _l10n_ar/payment-withholdings:
Withholding management
----------------------
The Argentinean fiscal localization module is already loaded with the necessary withholdings
records, which can be seen by navigating to :menuselection:`Accounting app --> Configuration -->
Taxes` and removing the default :guilabel:`Sale or Purchase` filter. To verify these records, the
**Argentina Payment Withholdings** (`l10n_ar_withholding`) module must be :ref:`installed
<general/install>`:
Journal entries are *not* created when payments are posted unless :ref:`outstanding accounts
<accounting/bank/outstanding-accounts>` are set up. Thus, for this feature to work properly, it is
important to verify that *all* payment methods within the bank journals have an outstanding payment
and receipt account set.
.. image:: argentina/l10n-ar-outstanding-payments.png
:alt: An outstanding payment account must be set.
This configuration is crucial for the proper accounting of withholding transactions with clients
and vendors.
.. note::
In Argentina, withholdings represent the cancellation of a specific portion of the total debt
owed to a supplier or a reduction in the total payment to be collected from a customer.
Therefore, one or multiple withholdings can be recorded for each payment applied to an invoice.
Configuration
~~~~~~~~~~~~~
While Odoo already creates most of the required withholdings inside the :guilabel:`Taxes`
menu, in several cases, it is necessary to apply or modify certain configurations to correctly
calculate the withholding amount on vendor payments. The following withholding types are available:
- :ref:`Earnings <l10n_ar/earnings-withholdings>`
- :ref:`Earnings Scale <l10n_ar/earnings-scale-withholdings>`
- :ref:`IIBB Total Amount <l10n_ar/iib-total-amount-withholdings>`
- :ref:`IIBB Non-Taxable <l10n_ar/iib-nontax-withholdings>`
.. _l10n_ar/earnings-withholdings:
Earnings
********
For :guilabel:`Earnings` withholdings, Odoo already has a record for each regime group, which is
stated under the name of the tax and the AFIP code.
Each of these records are ready to be used. As a good practice, the configuration should be double
checked to make sure the configuration is updated and well-applied. The fields to validate are:
- :guilabel:`Amount`: This is the percentage of the total payment amount which is withheld.
- :guilabel:`Non-Taxable Amount`: Up to this amount, the withholding does not apply.
- :guilabel:`Minimum Withholding`: If the calculated withholding amount is smaller than this value,
the total withholding amount is set to `0.0`.
- :guilabel:`Withholding Sequence`: This field helps to automate the capture of a withholding number
under the payment line. If this field is not set, a number is manually captured while adding a
withholding to a payment.
.. image:: argentina/l10n-ar-earnings.png
:alt: Earnings withholding type.
.. _l10n_ar/earnings-scale-withholdings:
Earnings Scale
**************
In this particular case, a percentage does not need to be set. Instead, this withholding is
calculated based on the value of the :guilabel:`Scale` field.
To view, modify, or create new scales, navigate to :menuselection:`Accounting app --> Configuration
--> Earnings Scale`. By default, the Argentinian localization is preconfigured with two main scales.
However, scales should be created and updated as necessary to suit a business's needs.
.. note::
Earnings scales are cumulative, which means that Odoo keeps track of the different records
created for a bill and automatically calculates the proper withholding amount.
.. _l10n_ar/iib-total-amount-withholdings:
IIBB Total Amount
*****************
In this case, the necessary records related to the applicable province need to be created. The
withholding amount is calculated based on the percentage :guilabel:`Amount` set on the tax
configuration. Since Odoo does not automatically synchronize the percentages applicable to each
province, this information needs to be manually updated.
The recommendation, in this case, is to always duplicate and apply the different configurations for
each record to safeguard any technical configurations that allow the proper calculation and
accounting of the withholding.
.. _l10n_ar/iib-nontax-withholdings:
IIBB Untaxed
************
The configuration of non-taxable gross income withholdings is very similar to that of a :ref:`total
amount withholding <l10n_ar/iib-total-amount-withholdings>`, so the percentage :guilabel:`Amount` in
each of the records needs to be maintained. However, Odoo comes preconfigured with several records
that apply to different provinces. The difference, in this case, is that it is not necessary to
establish a non-taxable amount or minimum withholding for this record type.
Partner withholding assignation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Once the proper configuration is set on each possible withholding for partners, the applicable
withholdings need to be assigned to each contact. To do this, open the :guilabel:`Contacts` app and
select the desired partner. In the :guilabel:`Accounting` tab, find the :guilabel:`Purchase
Withholdings` table.
By using the additional fields :guilabel:`From Date` and :guilabel:`To Date`, the applicability of
multiple withholdings can be automated across different date ranges. The :guilabel:`ref` field
allows you to apply an internal control number to each withholding line, which is just for internal
reference, so it does not affect any transactions and is not visible on them. These fields are
accessible from the :icon:`oi-settings-adjust` :guilabel:`(adjust settings)` menu.
- :guilabel:`From Date`: the start of the withholding date range.
- :guilabel:`To Date`: the end of the withholding date range.
- :guilabel:`ref`: apply an internal control number to each withholding line that is only visible
for internal reference and does not affect any transactions.
Automatic withholding calculation and application per payment
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
By applying new payments to vendor bills, Odoo automatically applies and calculates the proper
withholding into the payment. Based on the record's configuration, it may be necessary to use a
reference number for each withholding line.
More withholdings can be added, or computed withholdings can be edited if necessary.
.. image:: argentina/l10n-ar-payment.png
:alt: Payment with applied withholdings.
.. important::
The total amount of the debt to be canceled is the total amount of the payment. However, Odoo
still captures the net amount (i.e. the amount to be reconciled with the bank), which will be
represented as the payment amount after the withholding application.
.. image:: argentina/l10n-ar-payment-registered.png
:alt: Payment registered form.
Check management
----------------
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

@@ -588,8 +588,8 @@ provide the following information:
- your company's name, address, and legal structure; and
- the Mac address of your IoT Box.
Once your IoT box is certified, :doc:`connect <../../general/iot/config/connect>` it to your
database. To verify that the IoT Box recognizes the FDM, go to the IoT homepage and scroll down the
Once your IoT box is certified, :doc:`connect <../../general/iot/connect>` it to your database. To
verify that the IoT Box recognizes the FDM, go to the IoT homepage and scroll down the
:guilabel:`IOT Device` section, which should display the FDM.
.. image:: belgium/iot-devices.png
@@ -34,6 +34,8 @@ needed.
<https://youtube.com/playlist?list=PL1-aSABtP6ADqexw4YNCbKPmpFggajxlX&si=RgmZR3Jco3223Np4>`_.
- `YouTube playlist - Tutoriais Odoo em Português
<https://youtube.com/playlist?list=PL1-aSABtP6ACGOW2UREePGjHQ2Bgdy-UZ&si=j6tiI36eB7BoKVQB>`_.
- :doc:`Documentation on e-invoicing's legality and compliance in Brazil
<../accounting/customer_invoices/electronic_invoicing/brazil>`
Configuration
=============
@@ -15,6 +15,8 @@ Chile
- `Chilean localization app tour <https://www.youtube.com/watch?v=3qYkgbmBYHw>`_
- `Chilean localization smart tutorial
<https://www.odoo.com/slides/smart-tutorial-localizacion-de-chile-131>`_
- :doc:`Documentation on e-invoicing's legality and compliance in Chile
<../accounting/customer_invoices/electronic_invoicing/chile>`
.. _chile/configuration:
@@ -24,9 +24,11 @@ solution with Odoo:
.. seealso::
- For more information on how to complete the certification process for the |DIAN| module, review
the following `webinar <https://www.youtube.com/watch?v=l0G6iDc7NQA>`_.
the following `webinar <https://www.youtube.com/watch?v=l0G6iDc7NQA>`_
- `Smart Tutorial - Colombian Localization
<https://www.odoo.com/slides/smart-tutorial-localizacion-de-colombia-132>`_.
<https://www.odoo.com/slides/smart-tutorial-localizacion-de-colombia-132>`_
- :doc:`Documentation on e-invoicing's legality and compliance in Colombia
<../accounting/customer_invoices/electronic_invoicing/colombia>`
.. _localization/colombia/configuration:
@@ -17,6 +17,8 @@ each purchase invoice.
.. seealso::
- `App Tour - Localización de Ecuador <https://www.youtube.com/watch?v=BQOXVSDeeK8>`_
- `Smart Tutorial - Localización de Ecuador <https://www.odoo.com/slides/smart-tutorial-localizacion-de-ecuador-170>`_
- :doc:`Documentation on e-invoicing's legality and compliance in Ecuador
<../accounting/customer_invoices/electronic_invoicing/ecuador>`
Glossary
--------
@@ -655,7 +655,7 @@ as follows:
#. Make sure the fiscal printer is set to its default state: printer on, start-up cycle complete,
and no transaction in progress.
#. Type `3333`.
#. Press :guilabel:`Chiave`. The screen displays :guilabel:`Scleta Funzione`.
#. Press :guilabel:`Chiave`. The screen displays :guilabel:`Scelta Funzione`.
#. Type `14`. The screen displays :guilabel:`Apprendimento`.
#. Type `62`. The screen displays :guilabel:`Simulazione`.
#. To turn the :guilabel:`no` into a :guilabel:`si`, press :guilabel:`X`.
@@ -705,3 +705,60 @@ Then, to ensure :doc:`Odoo Point of Sale </applications/sales/point_of_sale>` is
fiscal printer, go to :menuselection:`Point of Sale --> Configuration --> Settings`. In the
:guilabel:`Connected Devices` section, add the IP address in the :guilabel:`Italian Fiscal Printer
IP address` and enable :guilabel:`Use HTTPS`.
Ri.Ba. (Ricevuta Bancaria)
==========================
:abbr:`Ri.Ba. (Ricevuta Bancaria)` is a payment method widely used in Italy where vendors request
payments through their bank, which forwards the request to the customer's own bank and takes
responsibility for the collection. This enables payment automation and reduces risks for the vendor.
The vendor generally uploads a fixed-format text file with the list of payments to the bank's web
portal.
.. note::
- Ri.Ba. are exclusively for **domestic payments** in Italy. For recurring international
payments, please use `SEPA Direct Debt (SDD) <../accounting/payments/batch_sdd>`_
Configuration
-------------
#. Check that the `l10n_it_riba` module is :ref:`installed <general/install>`.
#. Go to :menuselection:`Settings --> Users & Companies --> Companies` and select the company that
will use Ri.Ba.
#. Fill out the required :guilabel:`SIA Code`.
.. image:: italy/sia-code.png
:alt: The company's SIA code
.. note::
The :guilabel:`SIA Code` identifies businesses within the Italian banking network and is used
to receive money through specific payment methods. It consists of one letter and four digits
(e.g., T1234) and can usually be found on the bank's portal or obtained by contacting the bank.
#. Ensure the Company's bank account has an Italian IBAN.
.. seealso::
How to configure :doc:`Bank Accounts <../accounting/bank>`
Accept Ri.Ba. for your invoices
-------------------------------
Payments of type :abbr:`Ri.Ba. (Ricevuta Bancaria)` can be registered from the :guilabel:`Invoices`
(:menuselection:`Accounting --> Customers --> Invoices`).
.. important::
Make sure that your invoice involves a Partner that has a bank account with an Italian IBAN.
Then, all Payments must be grouped in a **Batch Payment**.
.. seealso::
- :doc:`Batch Payments <../accounting/payments>`
- :doc:`Create a Batch Payment <../accounting/payments/batch>`
Once you press the :guilabel:`Validate` button for the Batch Payment, the :abbr:`Ri.Ba. (Ricevuta
Bancaria)` file is generated and attached to the Batch Payment, so you can download it and upload it
through your bank's web portal.
.. image:: italy/riba-attachment.png
:alt: The Ri.Ba. file attached
Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@@ -36,6 +36,10 @@ enables foreign trade, and the creation of delivery guides).
In order to electronically sign any documents in Odoo, ensure the *Sign* application is
installed.
.. seealso::
:doc:`Documentation on e-invoicing's legality and compliance in Mexico
<../accounting/customer_invoices/electronic_invoicing/mexico>`
Configuration
=============
@@ -81,6 +81,8 @@ Peruvian localization.
- `App Tour - Localización de Peru <https://youtu.be/Ic3mGovkf8Y>`_
- `Smart Tutorial - Localización de Peru (videos for workflows and configurations)
<https://www.odoo.com/slides/smart-tutorial-localizacion-de-peru-133>`_
- :doc:`Documentation on e-invoicing's legality and compliance in Peru
<../accounting/customer_invoices/electronic_invoicing/peru>`
Configuration
=============
@@ -921,7 +923,7 @@ Configuration
After configuring the Peruvian :ref:`electronic invoicing <peru-accounting-settings>` flow, complete
the following configurations for the **eCommerce** flow:
- :ref:`Client account registration <checkout-sign>`;
- :ref:`Client account registration <ecommerce/checkout/policy>`;
- :ref:`Automatic invoice <handling/legal>`;
- :doc:`../../websites/ecommerce/products`: Set the :guilabel:`Invoicing Policy` to
:guilabel:`Ordered quantities` and define the desired :guilabel:`Customer taxes`.
@@ -25,6 +25,10 @@ The supported documents are:
The localization requires an Uruware account, which enables users to generate electronic documents
within Odoo.
.. seealso::
:doc:`Documentation on e-invoicing's legality and compliance in Uruguay
<../accounting/customer_invoices/electronic_invoicing/uruguay>`
Glossary
--------
@@ -2,55 +2,271 @@
Vietnam
=======
Add Vietnamese QR banking codes to invoices
===========================================
.. _SInvoice: https://www.sinvoice.vn/
.. _localizations/vietnam/modules:
Modules
=======
The following modules are installed automatically with the Vietnamese localization:
.. list-table::
:header-rows: 1
* - Name
- Technical name
- Description
* - :guilabel:`Vietnam - Accounting`
- `l10n_vn`
- This module includes the default
:ref:`fiscal localization package <fiscal_localizations/packages>`.
* - :guilabel:`Vietnam - E-invoicing`
- `l10n_vn_edi_viettel`
- This module includes the features required for integration with :ref:`SInvoice
<localizations/vietnam/sinvoice>`.
.. note::
In some cases, such as when upgrading to a version with additional modules, it is possible that
modules may not be installed automatically. Any missing modules can be manually :ref:`installed
<general/install>`.
.. _localizations/vietnam/company:
Company
=======
To use all the features of this fiscal localization, the following fields are required on the
:doc:`company record </applications/general/companies>`:
- :guilabel:`Name`
- :guilabel:`Address`, including the :guilabel:`City`, :guilabel:`State`, :guilabel:`Zip Code`,
and :guilabel:`Country`.
- In the :guilabel:`Street` field, enter the street name, number, and any additional address
information.
- In the :guilabel:`Street 2` field, enter the neighborhood.
- :guilabel:`Tax ID`: tax identification number.
.. _localizations/vietnam/sinvoice:
E-invoicing with SInvoice
=========================
SInvoice_ is an e-invoice service platform provided by Viettel, one of the biggest e-invoice service
providers in Vietnam. Odoo supports integration with SInvoice to submit invoices generated in Odoo.
Configuration
-------------
SInvoice platform
~~~~~~~~~~~~~~~~~
To send electronic invoices to SInvoice, the following must be created on SInvoice_:
- :ref:`SInvoice account <localizations/vietname/sinvoice-registration>`
- :ref:`Invoice template <localizations/vietname/sinvoice-template>`
- :ref:`Invoice symbol <localizations/vietname/sinvoice-symbol>`
- :ref:`Invoice issuance notice <localizations/vietname/sinvoice-notice>`
.. _localizations/vietname/sinvoice-registration:
SInvoice registration
*********************
To create an account, go to SInvoice_ and register for the desired plan. Fill in the form that
opens to be contacted by SInvoice_ to create an account.
Once you have an account, log into SInvoice_ using your :guilabel:`Username` and
:guilabel:`Password`.
.. _localizations/vietname/sinvoice-template:
Invoice template creation
*************************
#. On the left side of the overview page, in the :guilabel:`Release management` menu, click
:guilabel:`Create business information`.
#. In the :guilabel:`Update key information` step, fill in the following fields and other optional
information if needed: :guilabel:`Unit name`, :guilabel:`Address`, :guilabel:`Contact person`,
:guilabel:`Type of representative documents`.
#. Click :guilabel:`Update`.
#. In the :guilabel:`Look up digital certificate` step, click :guilabel:`Add new` to add a digital
certificate.
#. Select the :guilabel:`Branch/Enterprise` and the :guilabel:`Type of digital certificate`, then
fill in the required fields for each type:
- :guilabel:`Supplier`: CloudCA
- :guilabel:`Signer ID`: CloudCA
- :guilabel:`Digital Certificate`: CloudCA
- :guilabel:`How to download file`: HSM
- :guilabel:`File Upload`: HSM, USB-TOKEN
#. Click :guilabel:`Generate key pair` to generate encryption keys for authentication, and
:guilabel:`Save`.
#. In the :guilabel:`Manage invoice templates` step, add a new :guilabel:`Invoice template`.
#. Select the :guilabel:`Invoice type` and fill in the :guilabel:`Invoice template code`,
:guilabel:`Invoice template name`, and other optional information if needed.
#. Click :guilabel:`Update`.
.. seealso::
`SInvoice documentation on electronic invoice template creation
<https://www.sinvoice.vn/2021/02/hdsd-tai-lieu-nghiep-vu-tao-mau-hoa-don-dien-tu.html?debug=1>`_
.. _localizations/vietname/sinvoice-symbol:
Invoice symbol creation
***********************
On the left side of the main screen, in the :guilabel:`Release management` menu, click
:guilabel:`Invoice symbol` and follow these steps:
#. Click :guilabel:`Add new` and select the :guilabel:`Invoice template`.
#. Set the :guilabel:`Status` to :guilabel:`Active` to activate the symbol and fill in the
:guilabel:`Invoice symbol`.
#. Enable :guilabel:`Stop automatic sending to tax authorities` and :guilabel:`Default for built-in
API` based on preference.
#. Click :guilabel:`Save`.
.. _localizations/vietname/sinvoice-notice:
Invoice issuance notice
***********************
On the left side of the main screen, in the :guilabel:`Release management` menu, click
:guilabel:`Create issuance notice` and follow these steps:
#. Click :guilabel:`Add new`, select the :guilabel:`Name of the business unit to issue an e-invoice`
and the :guilabel:`Tax agency name`. Based on the business unit and tax agency selected, the
:guilabel:`Tax code`, :guilabel:`Address`, :guilabel:`Phone number`, and :guilabel:`Separator
used` are automatically filled and uneditable.
#. Click :guilabel:`Select the invoice type for issuance`, and then select and fill in the
following information :
- :guilabel:`Invoice type`: The invoice type on which to declare an issuance notice.
- :guilabel:`Invoice template`: Select from the list of templates available based on the invoice
type.
- :guilabel:`Symbol`: Select from the list of symbols available based on the invoice type.
- :guilabel:`Quantity`: Total number of invoices to issue for the selected type. Based on the
type and template selected, this field is filled in automatically. It can be changed if needed.
- :guilabel:`Start date of use`: The date from which the invoice template, range, and quantity
are used for the issuance notice.
#. Click :guilabel:`Save` and select more invoice types if necessary by repeating the steps above.
Click :guilabel:`Save` to finish drafting the notice.
#. Click :guilabel:`Send to tax authorities` for approval. Once approved, the notice's
:guilabel:`Status` is changed to :guilabel:`Active`.
.. _localizations/vietnam/sinvoice-odoo:
Odoo database
~~~~~~~~~~~~~
Link Odoo to SInvoice
*********************
To connect Odoo with SInvoice, go to :menuselection:`Accounting --> Configuration --> Settings`.
In the :guilabel:`Vietnamese Integration` section, fill in your SInvoice :guilabel:`Username` and
:guilabel:`Password`. Add a :guilabel:`Default symbol` to generate a prefix for the invoice number
managed in SInvoice if needed.
Invoice template
****************
To create SInvoice templates, go to :menuselection:`Accounting --> Configuration --> Templates`.
Click :guilabel:`New` and add a :guilabel:`Template code` and a :guilabel:`Template Invoice Type`.
The :guilabel:`Template code` is the initial sequence of digits in the name assigned by SInvoice.
For example, if the invoice template is `1/001 - Hóa đơn GTGT - ND123`, the :guilabel:`Template
code` is `1/001`. The SInvoice templates in Odoo must match the ones in SInvoice.
To add :guilabel:`Invoice Symbols`, click :guilabel:`Add a new line`.
Sending invoices to SInvoice
----------------------------
Invoices can be sent to SInvoice once they have been confirmed. To do so, follow the
:ref:`invoice sending <accounting/invoice/sending>` steps. In the :guilabel:`Send` popup, enable
:guilabel:`Send to SInvoice` and click :guilabel:`Send & Print`.
Once the invoice has been successfully submitted to SInvoice, the :guilabel:`SInvoice Status` field
in the :guilabel:`SInvoice` tab of the invoice is updated to :guilabel:`Sent`. The
:guilabel:`SInvoice Number`, :guilabel:`Issue Date`, :guilabel:`Secret Code` and :guilabel:`eInvoice
Number` fields are also updated. The same information is available on SInvoice.
Replacement or adjustment invoices
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A replacement invoice is issued to correct an invoice that has **yet to be tax declared**, whereas
an adjustment invoice is issued to correct one that has **already been tax declared**. Follow these
steps to issue a replacement or adjustment invoice:
#. Open the invoice and click :guilabel:`Credit Note`.
#. In the :guilabel:`Credit Note` popup, fill in the following fields:
- :guilabel:`Reason displayed on Credit Note`
- :guilabel:`Adjustment type`
- :guilabel:`Agreement Name`
- :guilabel:`Agreement Date`
- :guilabel:`Journal`
- :guilabel:`Reversal date`
#. Click :guilabel:`Reverse and Create Invoice` to issue a replacement invoice, or
:guilabel:`Reverse` to issue an adjustment invoice.
The :guilabel:`SInvoice Status` in the :guilabel:`SInvoice` invoice tab is updated to
:guilabel:`Replaced` for a replacement invoice or :guilabel:`Adjusted` for an adjustment invoice.
Invoice cancellation
~~~~~~~~~~~~~~~~~~~~
If an invoice needs to be canceled, open the invoice and click :guilabel:`Request Cancel`. In the
:guilabel:`Invoice Cancellation` popup, enter the cancellation :guilabel:`Reason`,
:guilabel:`Agreement Name`, and :guilabel:`Agreement Date`, and click :guilabel:`Request
Cancellation`.
The :guilabel:`SInvoice Status` in the :guilabel:`SInvoice` invoice tab is updated to
:guilabel:`Canceled`.
.. _localizations/vietnam/qrcode:
QR banking codes
================
Vietnamese QR banking is a payment service platform that allows customers to make instant domestic
payments to individuals and merchants in Vietnamese dong via online and mobile banking.
Activate QR codes
-----------------
Configuration
-------------
Go to :menuselection:`Accounting --> Configuration --> Settings`. Under the :guilabel:`Customer
Payments` section, activate the :guilabel:`QR Codes` feature.
To activate QR banking codes, go to :menuselection:`Accounting --> Configuration --> Settings` and
enable :guilabel:`QR Codes` in the :guilabel:`Customer Payments` section.
Vietnamese QR banking bank account configuration
------------------------------------------------
Bank account
~~~~~~~~~~~~
Go to :menuselection:`Contacts --> Configuration --> Bank Accounts` and select the bank account for
which you want to activate Vietnamese QR banking. Set the :guilabel:`Bank Identifier Code` on the
bank. Then set the :guilabel:`Proxy Type` and fill in the :guilabel:`Proxy Value` field depending on
the type you chose.
To activate QR banking for a bank account, go to :menuselection:`Contacts --> Configuration -->
Bank Accounts` and select the bank account. Fill in the :guilabel:`Bank Identifier Code`,
:guilabel:`Proxy Type` (based on the information used to identify the :guilabel:`Merchant Account`,
such as the card number and bank account numbers), and :guilabel:`Proxy Value` fields.
Enable :guilabel:`Include Reference` to include the invoice number in the QR code.
.. important::
- The account holder's country must be set to `Vietnam` on its contact form.
- The account holder's city is mandatory.
- You could also include the invoice number in the QR code by checking the :guilabel:`Include
Reference` checkbox.
.. image:: vietnam/vn-paynow-bank-setting.png
:alt: Vietnamese QR banking bank account configuration
- The account holder's country must be set to `Vietnam`, and their city must be specified on the
contact form.
- The :ref:`account number <accounting/bank/account-number>` and bank must be set on the
:guilabel:`Bank` journal.
.. seealso::
:doc:`../accounting/bank`
Bank journal configuration
--------------------------
Generating QR codes on invoices
-------------------------------
Go to :menuselection:`Accounting --> Configuration --> Journals`, open the bank journal, then fill
out the :guilabel:`Account Number` and :guilabel:`Bank` under the :guilabel:`Journal Entries` tab.
When creating a new invoice, open the :guilabel:`Other Info` tab and select :guilabel:`EMV
Merchant-Presented QR-code` in the :guilabel:`Payment QR-code` field.
.. image:: vietnam/vn-bank-account-journal-setting.png
:alt: Bank Account's journal configuration
Issue invoices with Vietnamese QR banking QR codes
--------------------------------------------------
When creating a new invoice, open the :guilabel:`Other Info` tab and set the :guilabel:`Payment
QR-code` option to *EMV Merchant-Presented QR-code*.
.. image:: vietnam/vn-qr-code-invoice-setting.png
:alt: Select EMV Merchant-Presented QR-code option
Ensure that the :guilabel:`Recipient Bank` is the one you configured, as Odoo uses this field to
generate the Vietnamese QR banking QR code.
.. note::
Ensure the :guilabel:`Recipient Bank` is configured, as Odoo uses this field to generate QR
codes.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

@@ -367,6 +367,8 @@ enable :guilabel:`Allow Express Checkout`.
.. note::
All prices shown on the express checkout payment form always include taxes.
.. _payment_providers/availability:
Availability
============
@@ -17,6 +17,10 @@ emails. The deliverability is optimized for this subdomain as it uses Odoos D
If the database subdomain is `company-name.odoo.com` and all mailing configurations are the
default ones, all emails will be sent from `notifications@company-name.odoo.com`.
.. important::
Only **one** subdomain can be used as a mailing server in Odoo. Subdomains for additional
companies require an external email server with a custom domain.
.. image:: email_servers_outbound/diagram-inbound-mailing-method.png
:alt: Odoos default outbound messages configuration.
@@ -8,3 +8,4 @@ Integrations
integrations/unsplash
integrations/geolocation
integrations/google_translate
integrations/barcodelookup
@@ -0,0 +1,40 @@
:show-content:
==============
Barcode Lookup
==============
`Barcode Lookup <https://www.barcodelookup.com/>`_ allows you to scan (or enter) products' barcodes
(:abbr:`UPC (Universal Product Code)`, :abbr:`EAN (European Article Number)`, or :abbr:`ISBN
(International Standard Book Number)`) to automatically create them in your Odoo database, complete
with product names, descriptions, images, categories, etc.
.. _barcodelookup/configuration:
Configuration
-------------
If your database is hosted on **Odoo Online**, you can use Barcode Lookup without configuration.
If your database is hosted on **Odoo.sh** or **on-premise**, proceed as follows:
#. Visit the `Barcode Lookup website <https://www.barcodelookup.com/api>`_ and click
:guilabel:`Sign Up for the API`.
#. Choose the appropriate plan based on the number of barcodes you need to scan.
#. Fill in the required details and complete the registration process.
#. Copy the API key.
#. In Odoo, open the Settings app, scroll down to the :guilabel:`Integrations` section, and, under
:guilabel:`Barcode Database`, paste the Barcode Lookup :guilabel:`API Key`.
Use
---
To fill in product information using Barcode Lookup, create a new product and fill in the
:guilabel:`Barcode` field. The product's details are then automatically imported from Barcode
Lookup, updating the following fields: :guilabel:`Name`, :guilabel:`Price`, :guilabel:`Description`,
:guilabel:`Tax`, :guilabel:`Image`, :guilabel:`Weight`, :guilabel:`Attributes`, :guilabel:`Product
category`, and :guilabel:`Volume`. You can then modify any field(s) as needed.
.. seealso::
:ref:`Create new products during internal transfers using the Barcode Lookup database
<barcode/setup/barcodelookup>`.
+76 -3
View File
@@ -1,14 +1,87 @@
:nosearch:
:show-content:
:hide-page-toc:
:show-toc:
:nosearch:
========================
Internet of Things (IoT)
========================
Odoo Internet of Things (IoT) allows to connect physical devices such as barcode scanners, receipt
printers, payment terminals, measurement tools, etc. to an Odoo database using an IoT system.
The following IoT systems are supported:
- :doc:`IoT box <iot/iot_box>`: micro-computer, plug-and-play device (i.e., the Odoo IoT program is
pre-installed);
- :doc:`Windows virtual IoT <iot/windows_iot>`: Odoo IoT program for Windows that can be installed
on a Windows computer.
.. note::
- :abbr:`MRP (Material Requirement Planning)` devices, including cameras and measurement tools,
are not compatible with Windows virtual IoT.
- Multiple IoT systems can be used at the same time.
- It is also possible to create a Windows Virtual Machine on a MacOS/Linux computer. However,
this option is not supported by Odoo, and no troubleshooting assistance will be provided.
.. _iot/iot/iot-subscription:
IoT box subscription
====================
An IoT box subscription is required for production use of IoT systems. If you have issues related
to your subscription, contact the database's account manager or Odoo partner for assistance.
.. tip::
If the subscription is linked to an `Odoo.com <https://www.odoo.com>`_ portal user, check the
information on the portal's subscription page.
.. seealso::
- `Odoo's compatible IoT devices <https://www.odoo.com/app/iot-hardware>`_
- `Odoo Tutorials: Internet of Things (IoT) Tutorials
<https://www.odoo.com/slides/internet-of-things-iot-175>`_
- `IoT system FAQ <https://www.odoo.com/app/iot-faq>`_
.. cards::
.. card:: IoT box
:target: iot/iot_box
:large:
Set up an IoT box.
.. card:: Windows virtual IoT
:target: iot/windows_iot
:large:
Set up Windows virtual IoT.
.. card:: IoT system connection to Odoo
:target: iot/connect
Connect the IoT system to your Odoo database and troubleshoot potential connection issues.
.. card:: Devices
:target: iot/devices
Connect devices such as printers, screens, measurement tools, etc., to the IoT system.
.. card:: HTTPS certificate
:target: iot/iot_advanced/https_certificate_iot
Verify your IoT system and database meet the eligibility requirements for HTTPS certificate
generation and address any related issues.
.. card:: IoT system updates
:target: iot/iot_advanced/updating_iot
Update your IoT system's image, core code, and handlers to benefit from the latest IoT fixes
and features or reset the IoT system if needed.
.. toctree::
:titlesonly:
iot/config
iot/iot_box
iot/windows_iot
iot/connect
iot/iot_advanced
iot/devices
@@ -1,17 +0,0 @@
:nosearch:
=============
Configuration
=============
.. toctree::
:titlesonly:
:glob:
config/connect
config/pos
config/https_certificate_iot
config/updating_iot
config/troubleshooting
config/windows_iot
config/ssh_connect
@@ -1,181 +0,0 @@
==========================
Connect an IoT box to Odoo
==========================
An Internet of Things (IoT) box is a micro-computer device that allows for the connection of input
and output devices to an Odoo database. An :abbr:`IoT (Internet of Things)` box subscription is
required in order to use the :abbr:`IoT (Internet of Things)` box with a secured connection. A
computer is also required to set up the :abbr:`IoT (Internet of Things)` box.
.. seealso::
`IoT Box FAQ <https://www.odoo.com/app/iot-faq>`_
Begin the :abbr:`IoT (Internet of Things)` configuration process by :ref:`installing the IoT app
<general/install>` on the Odoo database through the :menuselection:`Apps` application.
.. image:: connect/install-iot-app.png
:align: center
:alt: The Internet of Things (IoT) app on the Odoo database.
Next, after the *IoT app* is installed, navigate to :menuselection:`IoT app --> IoT Boxes`, and then
click on the :guilabel:`Connect` button located in the upper-left corner of the :menuselection:`IoT
Boxes` dashboard.
.. image:: connect/connect-iot.png
:align: center
:alt: Connecting an IoT box to the Odoo database.
There are two recommended ways to connect the :abbr:`IoT (Internet of Things)` box to the database
once the *IoT app* is installed. Follow the steps in either of the next two sections to connect the
:abbr:`IoT (Internet of Things)` box via :ref:`wired ethernet connection <iot_connect/ethernet>` or
via :ref:`WiFi <iot_connect/wifi>`.
.. image:: connect/connect-iot-box.png
:align: center
:alt: Connection steps for a wired connection or WiFi connection.
.. important::
The disk image that the :abbr:`IoT (Internet of Things)` box SD card is formatted with is unique
to the version of the Odoo database that the :abbr:`IoT (Internet of Things)` box is running on.
Ensure that the :abbr:`IoT (Internet of Things)` box is :ref:`flashed <iot/config/flash>` with
the most up-to-date disk image.
.. _iot_connect/ethernet:
Ethernet connection
===================
The following is the process to connect the :abbr:`IoT (Internet of Things)` box via an ethernet
cable to the Odoo database (by way of the ethernet port; RJ-45).
First, connect all wired devices to the :abbr:`IoT (Internet of Things)` box (ethernet, :abbr:`USB
(Universal Serial Bus)` devices, etc.). At minimum, an HDMI screen should be connected. Then, plug
the :abbr:`IoT (Internet of Things)` box into a power source.
Immediately after the unit powers on and boots up, read the *pairing code* from the screen or from
the printout of a receipt printer connected to the :abbr:`IoT (Internet of Things)` box.
.. warning::
By default, the :abbr:`IoT (Internet of Things)` box will display the *pairing code* for a
maximum of 5 minutes after the unit boots up. After 5 minutes, the *pairing code* will disappear
for security purposes and the :abbr:`IoT (Internet of Things)` box will need to be rebooted
manually by unplugging the unit from the power source for ten seconds and re-plugging it back in.
.. note::
If no screen is attached to the :abbr:`IoT (Internet of Things)` box, then the *pairing code* can
be accessed from the :abbr:`IoT (Internet of Things)` box homepage by clicking on the
:guilabel:`POS Display` button. For instructions on how to access the :abbr:`IoT (Internet of
Things)` box homepage visit :ref:`iot_connect/token`.
On the computer, navigate to :menuselection:`IoT app --> IoT Boxes`, and then click on the
:guilabel:`Connect` button located in the upper-left corner of the the :menuselection:`IoT Boxes`
dashboard. Input the *pairing code* in the :guilabel:`Pairing Code` field and click on the
:guilabel:`Pair` button. The database will now link to the :abbr:`IoT (Internet of Things)` box and
it will appear on the :menuselection:`IoT Boxes` page.
.. _iot_connect/wifi:
WiFi connection
===============
The following is the process to connect the :abbr:`IoT (Internet of Things)` box via a WiFi
connection to the Odoo database.
First, ensure there is no ethernet cable plugged into the :abbr:`IoT (Internet of Things)` box.
Then, connect all wired devices to the :abbr:`IoT (Internet of Things)` box (:abbr:`USB (Universal
Serial Bus)` devices, etc.).
After connecting the devices, plug the :abbr:`IoT (Internet of Things)` box into to a power source.
On the computer, navigate to :menuselection:`IoT app --> IoT Boxes`, and then click on the
:guilabel:`Connect` button located in the upper-left corner of the the :menuselection:`IoT Boxes`
dashboard. Then copy the :guilabel:`Token` from the :guilabel:`WiFi connection` section as this will
later be used to link the Odoo database to the :abbr:`IoT (Internet of Things)` box.
Back on the computer, navigate to the available WiFi networks and connect to the :abbr:`IoT
(Internet of Things)` box WiFi network. The WiFi network dispersed by the :abbr:`IoT (Internet of
Things)` box will start with `IoTBox-xxxxxxxxxx`.
.. image:: connect/connect-iot-wifi.png
:align: center
:alt: WiFi networks available on the computer.
Upon connecting to the :abbr:`IoT (Internet of Things)` box WiFi, a browser will automatically
redirect to the :menuselection:`Configure Iot Box` wizard. Name the :abbr:`IoT (Internet of Things)`
box, then paste the previously copied *token* into the :guilabel:`Server Token` field, and then
click on :guilabel:`Next`.
.. image:: connect/server-token.png
:align: center
:alt: Enter the server token into the IoT box.
.. note::
If the :abbr:`IoT (Internet of Things)` box WiFi connection wizard doesn't start, then see the
documentation on :ref:`connecting with a token <iot_connect/token>`.
Now, choose the WiFi network that the :abbr:`IoT (Internet of Things)` box will connect with (enter
the password if there is one) and click on :guilabel:`Connect`. Wait a few seconds and the browser
will redirect to the :abbr:`IoT (Internet of Things)` box homepage. The computer may need to be
manually re-connected back to the original WiFi connection, if this does not happen automatically.
.. image:: connect/configure-wifi-network-iot.png
:align: center
:alt: Configuring the WiFi for the IoT box.
After completing each step, the :abbr:`IoT (Internet of Things)` box should appear when navigating
to :menuselection:`IoT app --> IoT Boxes` on the Odoo database.
.. image:: connect/iot-box-connected.png
:align: center
:alt: The IoT box has been successfully configured on the Odoo database.
.. important::
The :abbr:`IoT (Internet of Things)` box may need to be manually rebooted upon successfully
connecting via WiFi for the box to appear in the *IoT app* on the Odoo database. To do so, simply
unplug the device and plug it back into the power source after ten seconds.
.. _iot_connect/token:
Manually connecting the IoT box using the token
===============================================
A manual connection of the :abbr:`IoT (Internet of Things)` box to the :abbr:`IoT (Internet of
Things)` app can be made using the *token*, from a computer. The *token* can be found by navigating
to :menuselection:`IoT app --> IoT Boxes` and clicking on :guilabel:`Connect`.
Under the :guilabel:`WiFi Connection` section of the :guilabel:`Connect an IoT Box` page that
appears, click :guilabel:`Copy` to the right of the :guilabel:`Token`. This token will be entered
into the :abbr:`IoT (Internet of Things)` box homepage.
Access the :abbr:`IoT (Internet of Things)` box homepage by entering the :abbr:`IP (Internet
Protocol)` address of the :abbr:`IoT (Internet of Things)` box into a browser window from a computer
on the same network as the :abbr:`IoT (Internet of Things)` box (preferably by ethernet connection).
.. note::
The :abbr:`IP (Internet Protocol)` address can be accessed by the router admin console that the
:abbr:`IoT (Internet of Things)` box is connected to, or by connecting a receipt printer to the
:abbr:`IoT (Internet of Things)` box. A receipt will print out with the :abbr:`IoT (Internet of
Things)` box's :abbr:`IP (Internet Protocol)` address on it.
On the :abbr:`IoT (Internet of Things)` box homepage, enter the *token* under the :guilabel:`Server`
section by clicking on :guilabel:`Configure`. Then, paste the *token* into the :guilabel:`Server
Token` field and click :guilabel:`Connect`. The :abbr:`IoT (Internet of Things)` box will then link
to the Odoo database.
.. _iot/connect_schema:
IoT box schema
==============
Raspberry Pi 4
--------------
.. figure:: connect/iot-box-schema.png
The Odoo IoT box (Raspberry Pi 4) schema with labels.
Raspberry Pi 3
--------------
.. figure:: connect/iox-box-schema-3.png
The Odoo IoT box (Raspberry Pi 3) schema with labels.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

@@ -1,258 +0,0 @@
.. _iot/https_certificate_iot:
=======================
HTTPS certificate (IoT)
=======================
What is HTTPS?
==============
*Hypertext Transfer Protocol Secure* (HTTPS) is the secure version of *Hypertext Transfer Protocol*
(HTTP), which is the primary protocol used to send data back and forth between a web browser and a
website. :abbr:`HTTPS (Hypertext Transfer Protocol Secure)` is encrypted in order to increase the
security of data transfer.
:abbr:`HTTPS (Hypertext Transfer Protocol Secure)` uses an encryption protocol to encrypt
communications. The protocol is called *Transport Layer Security* (TLS), although formerly it was
known as *Secure Sockets Layer* (SSL).
:abbr:`HTTPS (Hypertext Transfer Protocol Secure)` occurs based upon the transmission of :abbr:`TLS
(Transport Layer Security)`/:abbr:`SSL (Secure Sockets Layer)` certificates, which verify that a
particular provider is who they say they are.
.. note::
In this documentation and throughout Odoo the term "HTTPS certificate" will be used to define the
fact that the :abbr:`SSL (Secure Sockets Layer)` certificate is valid and allows a :abbr:`HTTPS
(Hypertext Transfer Protocol Secure)` connection.
Why is it needed?
-----------------
In order to communicate with certain network devices (in particular for payment terminals), the
usage of :abbr:`HTTPS (Hypertext Transfer Protocol Secure)` is mandatory. If the :abbr:`HTTPS
(Hypertext Transfer Protocol Secure)` certificate isn't valid, some devices won't be able to
interact with the :abbr:`IoT (Internet of Things)` Box.
How to obtain a Hypertext Transfer Protocol Secure (HTTPS) certificate
======================================================================
The generation of the :abbr:`HTTPS (Hypertext Transfer Protocol Secure)` certificate is automatic.
The :abbr:`IoT (Internet of Things)` Box will send a specific request to `<https://www.odoo.com>`_
which will send back the :abbr:`HTTPS (Hypertext Transfer Protocol Secure)` certificate if the
:abbr:`IoT (Internet of Things)` box and database are eligible.
.. _iot/iot-eligibility:
Internet of Things (IoT) eligibility
------------------------------------
#. The database should be a **production** instance. The database instance should not be a copy, a
duplicate, a staging, or a development environment.
#. The Odoo subscription must:
- Have an :guilabel:`IoT Box Subscription` line.
- :guilabel:`Status` must be :guilabel:`In Progress`.
If the subscription is linked to a `<https://www.odoo.com>`_ portal user check the information
on the portal subscription page.
.. figure:: https_certificate_iot/sub-example-in-progress.png
:align: center
:alt: Odoo.com portal subscriptions filtered by "in progress".
In this case, both subscriptions are considered "in progress" as the :guilabel:`Filter By\:
In Progress` was used.
.. note::
If the subscription is in question, contact the database's Account Manager or Partner
regarding the matter.
Troubleshooting Hypertext Transfer Protocol Secure (HTTPS) certificate errors
=============================================================================
If anything goes wrong during the process of the "HTTPS certificate" generation or reception, a
specific error will code be given on the :abbr:`IoT (Internet of Things)` box home page.
.. tip::
Accessing the :abbr:`IoT (Internet of Things)` box homepage will check for the presence of the
"HTTPS certificate" and will attempt its generation if it is missing. As such, if there is an
error on the :abbr:`IoT (Internet of Things)` box home page, refresh the :abbr:`IoT (Internet of
Things)` home page to see if the error disappears.
`ERR_IOT_HTTPS_CHECK_NO_SERVER`
-------------------------------
Reason:
The configuration regarding the server is missing. In other words, the Odoo instance is not
connected with the IoT box.
Solution:
Ensure that the server is configured.
.. seealso::
:doc:`/applications/general/iot/config/connect`
`ERR_IOT_HTTPS_CHECK_CERT_READ_EXCEPTION`
-----------------------------------------
Reason:
An unhandled error happened when trying to read the existing :abbr:`HTTPS (Hypertext Transfer
Protocol Secure)` certificate.
Solution:
Ensure that the :abbr:`HTTPS (Hypertext Transfer Protocol Secure)` certificate file is readable.
`ERR_IOT_HTTPS_LOAD_NO_CREDENTIAL`
----------------------------------
Reason:
The contract and/or database :abbr:`UUID (Universal Unique Identifier)` is missing.
Solution:
Ensure that both values are configured as intended. To modify them, go to the :abbr:`IoT
(Internet of Things)` box home page, and navigate to :guilabel:`Credential`.
`ERR_IOT_HTTPS_LOAD_REQUEST_EXCEPTION`
--------------------------------------
Reason:
An unexpected error happened when the :abbr:`IoT (Internet of Things)` box tried to reach
`<https://www.odoo.com>`_. The causes are likely due to the network
infrastructure/configuration:
- The :abbr:`IoT (Internet of Things)` box does not have access to internet.
- The network does not allow the :abbr:`IoT (Internet of Things)` box to communicate with
`<https://www.odoo.com>`_. This may be due to network devices preventing the communication
(firewalls, etc.) or the network configuration (:abbr:`VPN (Virtual Private Network)`,
etc.).
.. note::
More information regarding the error that occurred can be found in the full request
exception details, which are in the :abbr:`IoT (Internet of Things)` box logs.
Solution:
.. warning::
Consult with your system or network administrator should this issue arise. This error code
depends on the network infrastructure and goes beyond Odoo support's service scope.
`ERR_IOT_HTTPS_LOAD_REQUEST_STATUS`
-----------------------------------
Reason:
The IoT-box was able to reach `<https://www.odoo.com>`_ but received an unusual
`HTTP response (status codes)
<https://developer.mozilla.org/en-US/docs/Web/HTTP/Status>`_.
This error code will also give the HTTP response status codes. For example, if the error reads
`ERR_IOT_HTTPS_LOAD_REQUEST_STATUS 404` it means that the page returned a 404 error, which is
the "Page Not Found" code.
Solution:
Check if `<https://www.odoo.com>`_ is down using a web browser, as it's possible that it is down
due to maintenance.
- If `<https://www.odoo.com>`_ is down due to maintenance, unfortunately there is nothing that
can be done but instead wait for it to recover.
- If `<https://www.odoo.com>`_ is not down due to maintenance, open a `support ticket
<https://www.odoo.com/help>`_ on the matter. Ensure that the 3 digits status code next to the
code error is included in the support ticket.
`ERR_IOT_HTTPS_LOAD_REQUEST_NO_RESULT`
--------------------------------------
Reason:
The :abbr:`IoT (Internet of Things)` box was able to reach `<https://www.odoo.com>`_ but it
refused to deliver the :abbr:`HTTPS (Hypertext Transfer Protocol Secure)` certificate.
Solution:
Ensure that the :abbr:`IoT (Internet of Things)` box and database are eligible for a
certificate: :ref:`Internet of Things (IoT) eligibility <iot/iot-eligibility>`.
How to ensure that the HTTPS certificate is correct
===================================================
If the certificate has been applied successfully, a new :abbr:`HTTPS (Hypertext Transfer Protocol
Secure)` :abbr:`URL (Uniform Resource Locator)` for the :abbr:`IoT (Internet of Things)` box ending
with `.odoo-iot.com` will appear on the Odoo database, inside of the :menuselection:`IoT`
application on that specific device's form.
.. image:: https_certificate_iot/odoo-new-domain.png
:align: center
:alt: Odoo IoT app IoT box with .odoo-iot.com domain.
When navigating to the :abbr:`URL (Uniform Resource Locator)` in a browser a secured :abbr:`HTTPS
(Hypertext Transfer Protocol Secure)` connection will be established.
.. figure:: https_certificate_iot/secured-connection.png
:align: center
:alt: Example of valid SSL certificate details on the browser.
Padlock in Chrome on Windows 10 attesting the fact that the connection is secured in :abbr:`HTTPS
(Hypertext Transfer Protocol Secure)`.
The IoT-box homepage will now display an `OK` status next to `HTTPS certificate`. The
drop-down menu icon, when clicked, will reveal information regarding the certificate.
.. image:: https_certificate_iot/status-ok.png
:align: center
:alt: IoT box homepage with HTTPS certificate OK status.
Domain Name System (DNS) issue
==============================
If the :abbr:`IoT (Internet of Things)` box can be accessed from its :abbr:`IP (Intrernet Protocol)`
address but not the Odoo assigned domain: `.odoo-iot.com`; then the :abbr:`IoT (Internet of Things)`
box is likely running into a :abbr:`DNS (Domain Name System)` issue. On some browsers, it will give
an error code mentioning :abbr:`DNS (Domain Name System)` (like `DNS_PROBE_FINISHED_NXDOMAIN`).
These :abbr:`DNS (Domain Name System)` issues may appear as the following in different browsers:
.. tabs::
.. tab:: Chrome
.. figure:: https_certificate_iot/dns-chrome.png
:align: center
:alt: DNS issue on Chrome browser on Windows 10.
DNS issue on Chrome browser on Windows 10.
.. tab:: Firefox
.. figure:: https_certificate_iot/dns-firefox.png
:align: center
:alt: DNS issue on Firefox browser on Windows 10.
DNS issue on Firefox browser on Windows 10.
.. tab:: Edge
.. figure:: https_certificate_iot/dns-edge.png
:align: center
:alt: DNS issue on Edge browser on Windows 10.
DNS issue on Edge browser on Windows 10.
Domain Name System (DNS) issue solution
---------------------------------------
#. Should the router allow the :abbr:`DNS (Domain Name System)` to be manually changed, change the
DNS to use `Google DNS <https://developers.google.com/speed/public-dns>`_.
#. If your router doesn't allow for this, then a change will need to be made on the :abbr:`DNS
(Domain Name System)` settings of each of the devices using `Google DNS
<https://developers.google.com/speed/public-dns>`_. This will need to occur on **every** device
that plans to interact with the :abbr:`IoT (Internet of Things)` box (e.g. computer, tablet or
phone). The individual device configuration processes can be found on the website of the
device's manufacturer.
.. note::
Other :abbr:`IoT (Internet of Things)` devices such as payment terminals likely won't need
their :abbr:`DNS (Domain Name System)` settings changed as they are already configured with
custom :abbr:`DNS (Domain Name System)`.
.. warning::
Consult with your system or network administrator should this issue arise. This error code
depends on the network infrastructure, and it goes beyond Odoo support's service scope.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

@@ -1,67 +0,0 @@
=========================
Use an IoT box with a PoS
=========================
Prerequisites
=============
Before starting, make sure the following equipment is available:
- An :abbr:`IoT (Internet of Things)` box, with its power adapter.
- A computer or tablet with an up-to-date web browser.
- Odoo Online or an Odoo instance with the *Point of Sale* and *IoT* applications installed.
- A local network set up with :abbr:`DHCP (Dynamic Host Configuration Protocol)` (this is the
default setting).
- An RJ45 Ethernet Cable (optional, but preferred over WiFi, which is already built in).
- Any of the supported hardware (receipt printer, barcode scanner, cash drawer, payment terminal,
scale, customer display, etc.). The list of supported hardware can be found on the `POS Hardware
page <https://www.odoo.com/page/point-of-sale-hardware>`_.
Setup
=====
.. figure:: pos/pos-connections.png
A suggested configuration for a point of sale system.
To connect hardware to the :abbr:`PoS (Point of Sale)`, the first step is to connect an :abbr:`IoT
(Internet of Things)` box to the database. To do this, follow these instructions: :doc:`Connect an
Internet of Things (IoT) box to the Odoo database <connect>`.
Then, connect the peripheral devices to the :abbr:`IoT (Internet of Things)` box.
.. list-table::
:header-rows: 1
:stub-columns: 1
* - Device Name
- Instructions
* - Printer
- Connect a supported receipt printer to a :abbr:`USB (Universal Serial Bus)` port or
to the network, and power it on. Refer to
:doc:`/applications/sales/point_of_sale/restaurant/kitchen_printing`.
* - Cash drawer
- The cash drawer should be connected to the printer with an RJ25 cable.
* - Barcode scanner
- In order for the barcode scanner to be compatible it must end barcodes with an `ENTER`
character (keycode 28). This is most likely the default configuration of the barcode scanner.
* - Scale
- Connect the scale and power it on. Refer to
:doc:`../devices/scale`.
* - Customer display
- Connect a screen to the :abbr:`IoT (Internet of Things)` box to display the :abbr:`PoS (Point
of Sale)` order. Refer to :doc:`../devices/screen`.
* - Payment terminal
- The connection process depends on the terminal. Refer to the :doc:`payment terminals
documentation </applications/sales/point_of_sale/payment_methods>`.
Once this is completed, connect the :abbr:`IoT (Internet of Things)` box to the :menuselection:`PoS`
application. To do this, go to :menuselection:`Point of Sale --> Configuration --> PoS`, tick the
:guilabel:`IoT Box` option, and select the devices to be used in this :abbr:`PoS (Point of Sale)`.
:guilabel:`Save` the the changes.
.. image:: pos/iot-connected-devices.png
:align: center
:alt: Configuring the connected devices in the POS application.
Once set up is done, a new :abbr:`PoS (Point of Sale)` session can be launched.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

@@ -1,46 +0,0 @@
==========================
Connect an IoT box via SSH
==========================
.. |iot| replace:: :abbr:`IoT (Internet of Things)`
.. |SSH| replace:: :abbr:`SSH (secure shell protocol)`
To provide an |SSH| connection to an Internet of Things (IoT) box, a password needs to be generated.
.. warning::
This feature should **only** be utilized with trusted parties, as it provides administrative
access to the |iot| box, which can create security issues.
Managing an |SSH| connection is **not** covered under the standard scope of Odoo support. Visit
the `Odoo Support <https://www.odoo.com/help>`_ page for additional information about what is
covered.
First, navigate to the :menuselection:`IoT app --> IoT Boxes`. Click on the IP address of the
appropriate |iot| box.
.. note::
If the desired |iot| box does not appear, see :doc:`troubleshooting` for additional steps.
At the bottom of the |iot| box pop-up window, click :guilabel:`Remote Debug`. This opens the
:guilabel:`Remote Debugging` pop-up window.
.. image:: ssh_connect/ssh-generate-password.png
:align: center
:alt: The Remote Debugging password generation window.
Click :guilabel:`Generate password`.
.. warning::
After the password has been generated from the :guilabel:`Remote Debugging` pop-up window, the
information **must** be recorded immediately. Once this window is closed, there is no current
method for looking up this information.
Enter the :guilabel:`Authentication Token` provided by the user attempting to connect to the |iot|
box.
Click :guilabel:`Enable Remote Debugging`.
.. seealso::
- :doc:`connect`
- :doc:`troubleshooting`
- :doc:`updating_iot`
Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

@@ -1,645 +0,0 @@
===============
Troubleshooting
===============
IoT box connection
==================
Unable to locate the pairing code to connect the IoT box
--------------------------------------------------------
The pairing code should be printed on receipt printers connected to the :abbr:`IoT (Internet of
Things)` box and should also be displayed on connected monitors.
The pairing code does not show under the following circumstances:
- The :abbr:`IoT (Internet of Things)` box is already connected to an Odoo database.
- The :abbr:`IoT (Internet of Things)` box is not connected to the Internet.
- The code is only valid for 5 minutes after the :abbr:`IoT (Internet of Things)` box has started.
It is automatically removed from connected displays when this time has expired.
- The version of the :abbr:`IoT (Internet of Things)` box image is too old. If the :abbr:`IoT
(Internet of Things)` box image is from an earlier version, then the SD card of the :abbr:`IoT
(Internet of Things)` box needs to be re-flashed to update the image (see :ref:`Flashing the SD
Card <iot/config/flash>`).
If none of the cases listed above correct the issue, then make sure the :abbr:`IoT (Internet of
Things)` box has correctly started, by checking that a fixed green LED is showing next to the power
port.
IoT box is connected but it is not showing in the database
----------------------------------------------------------
When an :abbr:`IoT (Internet of Things)` box connects to a database, it may restart. If so, it can
take up to five minutes before appearing in the database. If the :abbr:`IoT (Internet of Things)`
box is still not showing after five minutes, make sure that the :abbr:`IoT (Internet of Things)` box
can reach the database and that the server does not use a multi-database environment.
To access the database from the :abbr:`IoT (Internet of Things)` box, open a browser and type in the
database address.
The IoT box is connected to the Odoo database, but cannot be reached
--------------------------------------------------------------------
Make sure that the :abbr:`IoT (Internet of Things)` box and the computer running the browser are
located on the same network, as the :abbr:`IoT (Internet of Things)` box cannot be reached from
outside the local network.
The HTTPS certificate does not generate
---------------------------------------
In order to generate a :abbr:`HTTPS (Hypertext Transfer Protocol Secure)` certificate, an IoT box
subscription is required for the :abbr:`IoT (Internet of Things)` box. Connecting the :abbr:`IoT
(Internet of Things)` box prior to configuring an :abbr:`IoT (Internet of Things)` subscription for
the database and :abbr:`IoT (Internet of Things)` box with the Account Manager will result in an
unsecured connection.
In addition, a firewall can also prevent the :abbr:`HTTPS (Hypertext Transfer Protocol Secure)`
certificate from generating correctly. In this case, deactivate the firewall until the certificate
is successfully generated. It should also be noted that certain devices, such as a router that has
a built-in firewall, can prevent the :abbr:`HTTPS (Hypertext Transfer Protocol Secure)` certificate
from generating.
.. seealso::
:doc:`HTTPS certificate (IoT) <https_certificate_iot>`
Printer
=======
The printer is not detected
---------------------------
If a printer does not appear in the devices list, go to the :abbr:`IoT (Internet of Things)` box
homepage and make sure that it is listed under :guilabel:`Printers`.
.. image:: troubleshooting/printer-status.png
:align: center
:alt: The IoT box Home Page landing page.
If the printer is not present on the :abbr:`IoT (Internet of Things)` box homepage, click
:guilabel:`Printers Server`, go to the :guilabel:`Administration` tab and click on :guilabel:`Add
Printer`. If the printer is not present in the list, it is likely not connected properly.
The printer outputs random text
-------------------------------
For most printers, the correct driver should be automatically detected and selected. However, in
some cases, the automatic detection mechanism might not be enough, and if no driver is found, the
printer might print random characters.
The solution is to manually select the corresponding driver. On the :abbr:`IoT (Internet of Things)`
box homepage, click on :guilabel:`Printers Server`, go to the :guilabel:`Printers` tab and select
the printer in the list. In the :guilabel:`Administration` drop-down menu, click on
:guilabel:`Modify Printer`. Follow the steps and select the *make* and *model* corresponding to the
printer.
.. image:: troubleshooting/modify-printer.png
:align: center
:alt: Edit the printer connected to the IoT box.
.. note::
Epson receipt printers and Zebra label printers do not need a driver to work. Make sure that no
driver is selected for those printers.
The printer is detected but is not recognized correctly
-------------------------------------------------------
If the printer is not recognized correctly by Odoo and the :abbr:`IoT (Internet of Things)` box, go
to the form view of the device (:menuselection:`IoT App --> Devices -->Printer Device`) and change
the subtype. The three options available are: :guilabel:`Receipt Printer`, :guilabel:`Label
Printer`, and :guilabel:`Office Printer`.
.. image:: troubleshooting/sub-type.png
:align: center
:alt: Sub-type selection in a printer IoT device.
Epson configuration special case
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Most Epson printers support printing receipts in Odoo :abbr:`POS (Point of Sale)` using the `GS v 0`
command. However, the following Epson printer models do not support this command:
- TM-U220
- TM-U230
- TM-P60
- TMP-P60II
Bypass this issue by configuring the printer to use the `ESC *` command instead.
Process to force ESC * command
******************************
Epson printer compatibility
^^^^^^^^^^^^^^^^^^^^^^^^^^^
The first step is to check whether the printer is incompatible with `GS v 0` command.
.. seealso::
- `Epson GS v 0 documentation <https://reference.epson-biz.com/modules/ref_escpos/index.php?
content_id=94>`_ for `GS v 0` compatible printers.
- `Epson ESC * documentation <https://reference.epson-biz.com/modules/ref_escpos/index.php
?content_id=88>`_ for `ESC *` compatible printers.
If the printer is not compatible with the `ESC *` command then the following process is not
possible. Should the printer be compatible to use the `ESC *` command to print, follow this process
to configure the printer with the :abbr:`IoT (Internet of Things)` box.
IoT box configuration for ESC *
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
To configure the :abbr:`IoT (Internet of Things)` box to use the `ESC *` command to print, go to the
:abbr:`IoT (Internet of Things)` box homepage by navigating to :menuselection:`IoT app --> IoT
Boxes`. Then click on the :guilabel:`IP address` and this will direct to the :abbr:`IoT (Internet of
Things)` box homepage.
**Choosing the printer**
Now click on the :guilabel:`Printers server` button. This will redirect the browser to the *CUPS*
page. Next, go to :menuselection:`Administration --> Printers --> Add Printer`, choose the printer
that should be modified, and then click :guilabel:`Continue`.
.. tip::
If the name of the printer is still uncertain, take the following steps:
#. Take note of the listed printers on the *CUPS* page.
#. Turn the printer off and refresh the page.
#. Now compare the difference with the first list to see which printer disappeared.
#. Turn the printer back on and refresh the page again.
#. Double-check the list again to see if the printer re-appears.
#. The printer that disappeared and reappears again on the listed printers is the name of the
printer in question.
.. note::
This can be :guilabel:`Unknown` under :guilabel:`Local printers`.
**CUPS naming convention**
`CUPS` will prompt the administrator for three pieces of information: the :guilabel:`Name`,
:guilabel:`Description` and the :guilabel:`Location`. The last two pieces of information do not need
to be specific, however, the :guilabel:`Name` should follow a particular convention to work with the
`ESC *` command.
The :guilabel:`Name` should match this convention:
`<printer_name>__IMC_<param_1>_<param_2>_..._<param_n>__`
A breakdown of the naming convention:
- `printer_name`: This is the printer name. It can be any character as long as it does not contain
`_`, `/`, `#`, or ` ` (space character).
- `IMC`: This stands for *Image Mode Column* (the simplified name for `ESC *`).
- `param_1`: This stands for the specific parameter:
- `SCALE<X>`: Scale of the picture (with the same aspect ratio). `X` should be an integer
describing the scale percentage that should be used.
.. example::
`100` is the original size, `50` is half the size, `200` is twice the size.
- `LDV`: *Low Density Vertical* (will be set to *High Density Vertical* if not specified).
- `LDH`: *Low Density Horizontal* (will be set to *High Density Horizontal* if not specified).
.. note::
*Density* parameters might need to be configured in a particular way depending on the printer
model.
.. seealso::
Visit `Epson's ESC * documentation
<https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=88>`_ and click on the
printer model printer in the table above to see if the printer should set these parameters.
.. example::
The following are examples of proper and improper name formatting:
Proper name formatting:
- `EPSONTMm30II__IMC__`
- `EPSON_TM_U220__IMC_LDV_LDH_SCALE80__`
Improper name formatting (this will not prevent printing, but the result might not have the
expected printed output):
- `EPSON TMm 30II` -> The name cannot have spaces.
- `EPSONTMm30II` -> The name itself is correct, but it will not use `ESC *`.
- `EPSONTMm30II__IMC` -> This name is missing the end `__`.
- `EPSONTMm30II__IMC_XDV__` -> The parameter `XDV` does not match any existing parameters.
- `EPSONTMm30II__IMC_SCALE__` -> The parameter `SCALE` is missing the scale value.
**Finish adding a printer**
After setting the name of the printer with the appropriate naming convention, click
:guilabel:`Continue`. Next, set the :guilabel:`Make` value to :guilabel:`Raw` and for the
:guilabel:`Model` value, set this to :guilabel:`Raw Queue (en)`.
After completing these steps, click :guilabel:`Add Printer`. If everything was done correctly, the
page should redirect to the *Banners* page.
At this point the printer should have been created, now the :abbr:`IoT (Internet of Things)` box
just needs to detect it and then sync to Odoo's server (this could take a few minutes).
**Adding the printer to Odoo PoS**
Once the printer is visible on the Odoo database, do not forget to choose it in the :abbr:`PoS
(Point of Sale)`configuration as the :abbr:`IoT (Internet of Things)` printer. Navigate to
:menuselection:`Pos App --> Settings --> Connected Devices --> IoT Box --> Receipt Printer -->
Save`.
.. note::
If the printer was set up incorrectly (it is still printing random text or the printed receipt is
too big or small), then it cannot be modified via the printer name with *CUPS*. Instead, the
above process can be repeated to set up another printer from scratch to create one with modified
parameters.
**Example setup of the Epson TM-U220B printer using ESC**
.. spoiler::
Click this text to reveal the example
The following is an example of the troubleshooting process for a TM-U220B printer model using the
`ESC *` command. The receipt pictured below is an example of a receipt that is printing correctly
due to proper formatting (in theory):
.. image:: troubleshooting/receipt-example.png
:align: center
:alt: Properly formatted receipt picture from a demo database.
Trying to print this receipt right-away prior to the proper formatting will not work as the
TM-U220B printer model does not support `GS v 0`. Instead random characters will print:
.. image:: troubleshooting/receipt-print-random-letters.png
:align: center
:alt: Printer paper with seemingly random characters.
To properly configure formatting for the Epson TM-U220B printer model take the following steps.
After consulting Epson's website for compatibility for both of the commands: `GS v 0
<https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=94>`_ and `ESC *
<https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=88>`_, it can be seen
that indeed the TM-U220B is not compatible with `GS v 0`, but is compatible with `ESC *`.
.. image:: troubleshooting/epson-compatibility-compare.png
:align: center
:alt: Epson compatibility evaluation from Epson website.
When adding the printer, *CUPS* will ask which printer should be added:
.. image:: troubleshooting/add-printer.png
:align: center
:alt: Administration menu, add printer selection.
In this case, the printer is connected via :abbr:`USB (Universal Serial Bus)` so it won' be part
of the :guilabel:`Discovered Network Printers`. Instead it is likely part of the
:guilabel:`Unknown` selection under :guilabel:`Local Printers`. By unplugging the printer's
:abbr:`USB (Universal Serial Bus)` cable from the :abbr:`IoT (Internet of Things)` box and
refreshing the page, the :guilabel:`Unknown` printer disappears. By plugging it back in, the
printer reappears, so it can be said that this is the printer in question.
For the naming convention, since it needs to print using the `ESC *` command, it is imperative to
add `__IMC`. Reference the printer model on `Epson's ESC * site
<https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=88>`_ to find out more
about the *density* parameters.
.. image:: troubleshooting/epson-tm-u220-specification.png
:align: center
:alt: Epson TM-U220 specifications on manufacturer's website.
For this particular model, TM-U220, `m` should be equal to 0 or 1. While referencing the
:guilabel:`Description` below the pink box in the above picture, the `m` values could be 0, 1, 32
or 33. So in this printers case, the `m` value can NOT be 32 or 33 (otherwise there will be
random characters printed).
The table includes the numeric values: 32 and 33, they both occur if the :guilabel:`Number of
bits for vertical data` is set to 24. This means that is a *High Vertical Density*. In the case
of configuring the Epson TM-U220, the *Low Vertical Density* will need to be forced, as this
printer model does not support *High Vertical Density* for this command `ESC *`.
To add a *Low Vertical Density*, add the `LDV` parameter to the naming convention.
.. image:: troubleshooting/add-printer-filled.png
:align: center
:alt: Add a *Low Vertical Density* (the `LDV` parameter) to the naming convention.
Click :guilabel:`Continue` to proceed. Next, set the :guilabel:`Make` value to :guilabel:`Raw`
and for the :guilabel:`Model` value, set this to :guilabel:`Raw Queue (en)`.
.. image:: troubleshooting/add-printer-add.png
:align: center
:alt: Epson TM-U220 specifications on manufacturers website.
However, when trying to print with the naming convention: `EpsonTMU220B__IMC_LDV__`, it prints
the receipt, but it is too big and outside the margin. To resolve this, add a new printer (and
naming convention) with the `SCALE<X>` parameter to adapt to our receipt size.
Here are some examples:
.. list-table::
:header-rows: 1
* - Printer Naming Convention
- `EpsonTMU220B__IMC_LDV__`
- `EpsonTMU220B__IMC_LDV_SCALE75__`
- `EpsonTMU220B__IMC_LDV_LDH__`
- `EpsonTMU220B__IMC_LDV_LDH_SCALE35__`
* - .. image:: troubleshooting/receipt-example.png
:align: center
:alt: Receipt example format.
- .. image:: troubleshooting/tm-u220-ldv.png
:align: center
:alt: Receipt format using naming convention: EpsonTMU220B__IMC_LDV__.
- .. image:: troubleshooting/tm-u220-ldv-scale75.png
:align: center
:alt: Receipt format using naming convention: EpsonTMU220B__IMC_LDV_SCALE75__.
- .. image:: troubleshooting/tm-u220-ldv-hdv.png
:align: center
:alt: Receipt format using naming convention: EpsonTMU220B__IMC_LDV_LDH__.
- .. image:: troubleshooting/tm-u220-ldv-hdv-scale35.png
:align: center
:alt: Receipt format using naming convention: EpsonTMU220B__IMC_LDV_LDH_SCALE35__.
DYMO LabelWriter print issue
----------------------------
The DYMO LabelWriter has a known issue in printing with the :abbr:`IoT (Internet of Things)` box.
The OpenPrinting CUPS server installs the printer using :guilabel:`Local RAW Printer` drivers. In
order to print anything, the correct :guilabel:`Make and Model` needs to be set, so the correct
driver is referenced when using the device.
Additionally, a new printer needs to be added to reduce a print delay that occurs after updating the
driver.
.. important::
The DYMO LabelWriter 450 DUO printer is the recommended DYMO printer for use with Odoo and the
:abbr:`IoT (Internet of Things)` box. It **must** already be connected to, and recognized on, the
:abbr:`IoT (Internet of Things)` box.
The DYMO LabelWriter 450 DUO printer contains two printers in one: a label printer and a tape
printer. Choosing the correct model (either DYMO LabelWriter 450 DUO Label (en) or DYMO
LabelWriter 450 DUO Tape (en)) is crucial when configuring the following processes.
To keep things consistent, both of the following processes detail the configuration for the DYMO
LabelWriter 450 DUO Label (en) model. Change the model when needed.
.. _troubleshooting/dymo/update_drivers:
DYMO LabelWriter not printing
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In the case where the DYMO LabelWriter is not printing anything, a new driver needs to be installed.
First, open the OpenPrinting CUPS console by clicking :menuselection:`Printers server` at the bottom
of the :abbr:`IoT (Internet of Things)` box homepage. Next, click on :menuselection:`Printers` in
the top menu. Click into the printer in question, and select :guilabel:`Maintenance` in the first
drop-down menu. Then, select :guilabel:`Modify Printer` in the second drop-down menu.
.. image:: troubleshooting/main-modify.png
:align: center
:alt: Modify the make and model of the DYMO LabelWriter. Maintenance and Modify drop-down menus
highlighted.
Next, select the specific network connection/printer that the modification should be made on. Click
:guilabel:`Continue`.
.. image:: troubleshooting/modify-select-printer.png
:align: center
:alt: Printer selection screen with Continue highlighted.
On the next page, click :guilabel:`Continue` to proceed to set the :guilabel:`Make` of the printer.
.. image:: troubleshooting/modify-printer-dymo.png
:align: center
:alt: Printer modification screen with Continue highlighted.
Under :guilabel:`Make` select :guilabel:`DYMO` from the menu. Click on :guilabel:`Continue` to set
the :guilabel:`Model`.
.. image:: troubleshooting/setting-make.png
:align: center
:alt: Setting the make page, with DYMO and continue highlighted.
On the following page, set the :guilabel:`Model` to :guilabel:`DYMO LabelWriter 450 DUO Label (en)`
(or whichever DYMO printer model is being used). Click on :guilabel:`Modify Printer` to complete
setting the new driver, a confirmation page will appear.
.. image:: troubleshooting/setting-model.png
:align: center
:alt: Setting the printer model page with DYMO LabelWriter 450 DUO Label (en) highlighted.
After being redirected to a confirmation page, acknowledging a successful update, click on the
:menuselection:`Printers` button in the top menu.
All the printers installed on the OpenPrinting CUPS server appear, including the newly updated:
:guilabel:`DYMO LabelWriter 450 DUO Label` (or whichever DYMO printer model is being used). Click
into the printer that was just updated.
To print a test label, click on the :guilabel:`Maintenance` drop-down menu to the left of the
:guilabel:`Administration` drop-down menu, and select :guilabel:`Print Test Page`. The test label
will print out with a ten-second delay if the driver update was successful.
.. image:: troubleshooting/print-test.png
:align: center
:alt: Printing a test page from the administration drop-down menu in the OpenPrinting CUPs
server.
To reduce this delay a new printer will need to be added, follow the process below.
DYMO LabelWriter print delay
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To resolve the delay issue after modifying the driver, the printer **must** be reinstalled. To
reinstall the printer, open the OpenPrinting CUPS administration page by clicking
:menuselection:`Printers server`, at the bottom of the :abbr:`IoT (Internet of Things)` box
homepage. Then, click on :menuselection:`Administration` in the top menu, then click :guilabel:`Add
a Printer`.
.. tip::
If the DYMO LabelWriter 450 DUO printer is not printing at all, or is not recognizable (has a RAW
driver type), then update the drivers on the device. See
:ref:`troubleshooting/dymo/update_drivers`.
.. image:: troubleshooting/add-printer-dymo.png
:align: center
:alt: Add a printer button highlighted on the Printer CUPS management page.
On the next screen, in the :guilabel:`Local Printers` section, select the :guilabel:`DYMO
LabelWriter 450 DUO Label (DYMO LabelWriter 450 DUO Label)` (or whichever DYMO printer model is
being used) pre-installed printer. Click :guilabel:`Continue`.
.. image:: troubleshooting/local-printer.png
:align: center
:alt: Add a printer screen on OpenPrinting CUPS with DYMO LabelWriter 450 DUO Label highlighted.
On the following screen, modify the :guilabel:`Name` to something recognizable, as the original
printer will still be present. Click :guilabel:`Continue` to be taken to the next screen.
.. image:: troubleshooting/rename-printer.png
:align: center
:alt: Rename printer page in the 'Add a Printer' flow, with the name field highlighted.
Next, choose the :guilabel:`Model`. Select :guilabel:`DYMO LabelWriter 450 DUO Label (en)` (or
whichever DYMO printer model is being used), and finally, click :guilabel:`Add Printer` to complete
the installation.
.. image:: troubleshooting/choose-printer.png
:align: center
:alt: Choose model screen on the OpenPrinting CUPS console with model and add a printer
highlighted.
After being redirected to a confirmation page, acknowledging a successful installation, click on the
:menuselection:`Printers` button in the top menu.
All the printers installed on the OpenPrinting CUPS server appear, including the newly installed:
:guilabel:`DYMO LabelWriter 450 DUO Label` (or whichever DYMO printer model is being used). Click
into the printer that was just installed.
.. image:: troubleshooting/printer-page.png
:align: center
:alt: Printer page with newly installed printer highlighted.
To print a test label, click on the :guilabel:`Maintenance` drop-down menu to the left of the
:guilabel:`Administration` drop-down menu, and select :guilabel:`Print Test Page`. The test label
should print out immediately (one-to-two seconds delay).
.. image:: troubleshooting/print-test.png
:align: center
:alt: Printing a test page from the administration drop-down menu in the OpenPrinting CUPs
server.
The Zebra printer does not print anything
-----------------------------------------
Zebra printers are quite sensitive to the format of the Zebra Programming Language (ZPL) code that
is printed. If nothing comes out of the printer or blank labels are printed, try changing the format
of the report that is sent to the printer by accessing :menuselection:`Settings --> Technical -->
User Interface --> Views` in :ref:`developer mode <developer-mode>` and look for the corresponding
template.
.. seealso::
Check out Zebra's instructions on printing :abbr:`ZPL (Zebra Programming Language)` files `here
<https://supportcommunity.zebra.com/s/article/Print-a-zpl-file-using-the-Generic-Text-Printer>`_.
Barcode scanner
===============
The characters read by the barcode scanner do not match the barcode
-------------------------------------------------------------------
By default, most barcode scanners are configured in the US QWERTY format. If the barcode scanner
uses a different layout, go to the form view of the device (:menuselection:`IoT App --> Devices -->
Barcode Device`) and select the correct format.
Nothing happens when a barcode is scanned
-----------------------------------------
Make sure that the correct device is selected in the :menuselection:`Point of Sale` configuration
and that the barcode is configured to send an `ENTER` character (keycode 28) at the end of every
barcode. To do so, navigate to :menuselection:`PoS app --> 3-Dot Menu on the PoS --> IoT Box section
--> Edit`.
The barcode scanner is detected as a keyboard
---------------------------------------------
.. important::
Some barcode scanners do not advertise themselves as barcode scanners but as a USB keyboard
instead, and will not be recognized by the :abbr:`IoT (Internet of Things)` box.
The device type can be manually changed by going to its form view (:menuselection:`IoT App -->
Devices --> Barcode Device`) and activating the :guilabel:`Is scanner` option.
.. image:: troubleshooting/barcode-scanner-settings.png
:align: center
:alt: Modifying the form view of the barcode scanner.
Barcode scanner processes barcode characters individually
---------------------------------------------------------
When accessing the mobile version of Odoo from a mobile device, or tablet, paired with a barcode
scanner, via the :abbr:`IoT (Internet of Things)` box, the scanner may process each barcode
character as an individual scan. In this case, the *Keyboard Layout* option **must** be filled out
with the appropriate language of the barcode scanner on the *Barcode Scanner* form page.
.. tip::
Access the barcode scanner form page by navigating to :menuselection:`IoT App --> Devices -->
Barcode Scanner`.
.. image:: troubleshooting/keyboard-layout.png
:align: center
:alt: Barcode scanner form page, with keyboard layout option highlighted.
The :guilabel:`Keyboard Layout` is language based, and the options available vary, depending on the
device and the language of the database. For example: :guilabel:`English (UK)`, :guilabel:`English
(US)`, etc.
Cash drawer
===========
The cash drawer does not open
-----------------------------
The cash drawer should be connected to the printer and the :guilabel:`Cash drawer` checkbox should
be ticked in the :abbr:`PoS (Point of Sale)` configuration. To do so, navigate to
:menuselection:`POS app --> 3-Dot Menu on the POS --> IoT Box section --> Edit --> Receipt Printer
--> Cashdrawer checkbox`.
Scale
=====
Scales play a crucial role in the checkout process, especially for products sold by weight, rather
than fixed pricing.
Set up Ariva S scales
---------------------
Odoo has determined that a specific setting in Ariva S series scales (manufactured by
Mettler-Toledo, LLC.) needs modification, and a dedicated Mettler :abbr:`USB (Universal Serial
Bus)`-to-proprietary RJ45 cable is required for the scale to function with Odoo's :abbr:`IoT
(Internet of Things)` box.
To correctly configure the scale for recognition by the :abbr:`IoT (Internet of Things)` box, follow
this setup process for the Ariva S series scales.
.. important::
It is crucial to use the official Mettler :abbr:`USB (Universal Serial Bus)`-to-RJ45 cable during
this process.
Cable
~~~~~
The Mettler part number is 72256236 - :abbr:`USB (Universal Serial Bus)`-to-:abbr:`POS (Point of
Sale)` cable. Contact Mettler, or a partner, to purchase an authentic cable. Note that **no other**
cable outside of this Mettler cable works for this configuration. Using a serial-only cable attached
to a serial-to-:abbr:`USB (Universal Serial Bus)` adapter is **not** effective.
.. image:: troubleshooting/cable-mettler.png
:align: center
:alt: Authentic Mettler USB to POS cable, part number 72256236.
Setup
~~~~~
Refer to Mettler's Setup Guide for Ariva S series scales during the following configuration: `Ariva
Checkout Scale User's Guide <https://www.mt.com/dam/RET_DOCS/Ariv.pdf>`_.
To begin, go to page 17 in the above manual for *Setup*. This guide lists potential settings for the
Ariva S series scales.
Follow the instructions, along with the following process, to set the scale to setup mode. First,
hold the **>T<** button for eight seconds, or until :guilabel:`CONF` appears.
Next, press **>T<** until :guilabel:`GRP 3` appears, then press **>0<** to confirm.
Under :guilabel:`3.1`, ensure the setting is set to :guilabel:`1` (USB Virtual COM ports). Press
**>T<** to cycle through the options under group 3.1.
Once :guilabel:`3.1` is set to :guilabel:`1`, press **>0<** to confirm the selection. Continue to
press **>0<** until :guilabel:`GRP 4` appears.
Now, press **>T<** until :guilabel:`EXIT` appears.
.. important::
Do **not** make any other changes unless otherwise needed.
Once :guilabel:`EXIT` appears, press **>0<**. Following this, press **>0<** again to
:guilabel:`SAVE`. Now the scale restarts.
Finally, restart the :abbr:`IoT (Internet of Things)` box to recognize the changes made on the
scale's configuration. After restarting, the scale appears as `Toledo 8217`, as opposed to the
previous display, where it appeared as `Adam Equipment Serial`.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

@@ -1,230 +0,0 @@
==============
Updating (IoT)
==============
Due to the complexity of the :abbr:`IoT (Internet of Things)` box, and virtual Windows :abbr:`IoT
(Internet of Things)` box, the term 'updating' can mean several different things.
The actual drivers can be updated, the core code on the :abbr:`IoT (Internet of Things)` box can be
updated, or a new image can be flashed (using a physical :abbr:`IoT (Internet of Things)` box).
This document explores the various ways to update :abbr:`IoT (Internet of Things)` boxes to ensure
smooth operation of :abbr:`IoT (Internet of Things)` box processes and devices.
.. _iot/config/flash:
Flashing the SD card on IoT box
===============================
.. important::
This update does **not** apply to the Windows :abbr:`IoT (Internet of Things)` box (Odoo 16 and
higher).
To update the Windows :abbr:`IoT (Internet of Things)`, first, uninstall the previous version of
the Odoo Windows program, and then reinstall it using the most up-to-date installation package.
To begin the installation, navigate to the Odoo 16 (or higher) installation package for
Enterprise or Community - Windows edition, at `Odoo's download page
<https://odoo.com/download>`_.
In some circumstances, the :abbr:`IoT (Internet of Things)` box's micro SD Card may need to be
re-flashed with *Etcher* software to benefit from Odoo's latest :abbr:`IoT (Internet of Things)`
image update. This means the Odoo :abbr:`IoT (Internet of Things)` box software may need to be
updated in instances of a new :abbr:`IoT (Internet of Things)` box, or when a handler's update, or
an update from the :abbr:`IoT (Internet of Things)` box home page, does not resolve issues.
.. note::
- It is often necessary to re-flash the :abbr:`IoT (Internet of Things)` box's image after
upgrading the Odoo database to a new version.
- A computer with a micro SD card reader/adapter is **required** to re-flash the micro SD card.
First, begin by downloading `Etcher <https://www.balena.io/etcher#download-etcher>`_. It is a free,
open-source utility, used for burning image files onto drives. After the download completes, install
and launch the program on the computer.
Then, download the latest :abbr:`IoT (Internet of Things)` image from `nightly
<http://nightly.odoo.com/master/iotbox>`_, which will be labeled as `iotbox-latest.zip`. This
particular image is compatible with *all* supported versions of Odoo.
After this step is complete, insert the :abbr:`IoT (Internet of Things)` box's micro SD card into
the computer or reader. Open *Etcher*, and select :guilabel:`Flash from file`, then find and select
the `iotbox-latest.zip` image and extract it. Next, select the drive the image should be burned to.
Lastly, click :guilabel:`Flash`, and wait for the process to finish.
.. image:: updating_iot/etcher-app.png
:align: center
:alt: Balena's Etcher software dashboard.
.. tip::
Balena's *Etcher* software also allows for the administrator to flash the :abbr:`SD (Secure
Digital)` card from a :abbr:`URL (Uniform Resource Locator)`. To flash from a :abbr:`URL (Uniform
Resource Locator)`, simply click :guilabel:`Flash from URL`, instead of :guilabel:`Flash from
file`.
Then, enter the following: `http://nightly.odoo.com/master/iotbox/iotbox-latest.zip`.
.. image:: updating_iot/url-flash.png
:align: center
:alt: A view of Balena's Etcher software, with the flash from URL option highlighted.
.. note::
An alternative software for flashing the micro SD card is `Raspberry Pi Imager
<https://www.raspberrypi.com/software/>`_.
Windows IoT update
==================
Windows virtual :abbr:`IoT (Internet of Things)` box may occasionally need an update to work
properly.
The following processes cover the :ref:`uninstallation <iot/config/uninstall-windows-iot>` and
:ref:`re-installation <iot/config/re-install-windows-iot>` of the Windows virtual :abbr:`IoT
(Internet of Things)` box.
.. _iot/config/uninstall-windows-iot:
Uninstalling Windows IoT
------------------------
Prior to upgrading the Windows virtual :abbr:`IoT (Internet of Things)` box, the previous version
should be uninstalled first.
.. important::
Before uninstalling a previous version of the Windows virtual :abbr:`IoT (Internet of Things)`
box, ensure that there is a newer version of Windows virtual :abbr:`IoT (Internet of Things)` box
available, compared to the version currently installed. To do so, navigate to the `Odoo Nightly
builds <https://nightly.odoo.com/>`_ page.
On the :guilabel:`Odoo Nightly builds` page, navigate to :menuselection:`Builds (stable version)
--> windows/` to view the date next to the :file:`odoo_(version).latest.exe` file; where
*(version)* is equal to the version of Odoo (e.g. 16.0, 17.0). The latest version of the Windows
virtual :abbr:`IoT (Internet of Things)` box can be downloaded by selecting this file, or it is
always available at the `Odoo Download <https://odoo.com/download/>`_ page.
Uninstalling the Windows virtual :abbr:`IoT (Internet of Things)` box is done through the Windows
program manager.
On any version of Windows, search for `program` to open the :menuselection:`Programs --> Programs
and Features` section of the :guilabel:`Control Panel`. Then, select :guilabel:`Uninstall or change
a program`. Next, search for `Odoo`, and click the :guilabel:`... (three dot)` menu on the
:guilabel:`Odoo.exe` program to uninstall.
Confirm the uninstallation, and follow the steps to uninstall through the Odoo uninstall wizard.
.. _iot/config/re-install-windows-iot:
Download and re-install
-----------------------
The latest version of the Windows virtual :abbr:`IoT (Internet of Things)` box can be downloaded
from the `Odoo Nightly builds <https://nightly.odoo.com/>`_ page or it is always available at the
`Odoo Download <https://odoo.com/download/>`_ page.
To download from the :guilabel:`Odoo Nightly builds` page, navigate to :menuselection:`Builds
(stable version) --> windows/` to and select the :file:`odoo_(version).latest.exe` file; where
*(version)* is equal to the version of Odoo (e.g. 16.0, 17.0).
To download from the :guilabel:`Odoo Download` page, find the section for the version of Odoo (e.g.
16.0, 17.0), and select the :guilabel:`Download` button for :guilabel:`Windows`.
Next, install and setup the downloaded Odoo :file:`.exe` file. After the instructions screen, click
:guilabel:`Next` to start the installation, and agree to the :abbr:`TOS (Terms of Service)`.
During the next step of the re-installation, select :guilabel:`Odoo IoT` from the :guilabel:`Select
the type of install` drop-down menu.
.. example::
For reference, the following should be installed:
- :guilabel:`Odoo server`
- :guilabel:`Odoo IoT`
- :guilabel:`Nginx WebServer`
- :guilabel:`Ghostscript interpreter`
Ensure there is enough space on the computer for the installation, then click :guilabel:`Next`.
Set the destination and complete the installation
-------------------------------------------------
To complete the re-installation, select the :guilabel:`Destination Folder`, and click
:guilabel:`Install`.
.. warning::
Choosing `C:\\odoo` as the install location allows for the *Nginx* server to start. Odoo's
Windows virtual :abbr:`IoT (Internet of Things)` box software should **not** be installed inside
any of the Windows user's directories. Doing so does **not** allow for *Nginx* to initialize.
The installation may take a few minutes. When complete, click :guilabel:`Next` to continue.
Then, ensure that the :guilabel:`Start Odoo` box is checked, and click :guilabel:`Finish`. After
installation, the Odoo server runs, and automatically opens `http://localhost:8069` on a web
browser. The webpage should display the :abbr:`IoT (Internet of Things)` box homepage.
.. tip::
A :ref:`restart <iot/restart_windows_iot>` of the Windows IoT program may be necessary if the web
browser does not display anything.
.. _iot/config/homepage-upgrade:
Update from the IoT box home page
=================================
In the background, the :abbr:`IoT (Internet of Things)` box uses a version of Odoo code to run and
connect to the Odoo database. This code may need to be updated in order for the :abbr:`IoT (Internet
of Things)` box to operate effectively. This operation should be completed on a routine basis, to
ensure the :abbr:`IoT (Internet of Things)` system, and its processes, stay up-to-date.
Go to the :abbr:`IoT (Internet of Things)` box home page by navigating to :menuselection:`IoT app
--> IoT Boxes`, and clicking on the :guilabel:`IP address` of the :abbr:`IoT (Internet of Things)`
box. Then, click on :guilabel:`Update` (next to the version number).
If a new version of the :abbr:`IoT (Internet of Things)` box image is available, an
:guilabel:`Upgrade to _xx.xx_` button appears at the bottom of the page. Click this button to
upgrade the unit, at which point the :abbr:`IoT (Internet of Things)` box flashes itself to the
newer version. All of the previous configurations are then saved.
.. important::
This process can take more than 30 minutes. Do **not** turn off, or unplug, the :abbr:`IoT
(Internet of Things)` box, as it would leave it in an inconsistent state. This means the
:abbr:`IoT (Internet of Things)` box needs to be :ref:`re-flashed <iot/config/flash>` with a new
image.
.. image:: updating_iot/flash-upgrade.png
:align: center
:alt: IoT box software upgrade in the IoT Box Home Page.
Handler (driver) update
=======================
There may be some instances where drivers or interfaces need to be updated for individual devices
(e.g. scales, measurement tools, etc.). The IoT handler's (drivers and interfaces) code can be
modified by syncing them with the configured server handler's code.
This can be helpful in instances where :abbr:`IoT (Internet of Things)` devices (e.g. scales,
measurement tools, etc.) are not working properly with the :abbr:`IoT (Internet of Things)` box.
For both the Windows :abbr:`IoT (Internet of Things)` (Odoo 16 and higher) and physical :abbr:`IoT
(Internet of Things)` box, this process can be performed manually from the :abbr:`IoT (Internet of
Things)` box home page. Go to the :abbr:`IoT (Internet of Things)` box home page by navigating to
:menuselection:`IoT app --> IoT Boxes`, and clicking on the :guilabel:`IP address` of the :abbr:`IoT
(Internet of Things)` box.
Next, click :guilabel:`Handlers list`, and then select :guilabel:`Load Handlers` at the bottom of
the page.
.. image:: updating_iot/load-handlers.png
:align: center
:alt: Handlers list on an IoT box with the load handlers button highlighted.
.. important::
Handler's code is fetched from the configured server, and it needs to be up-to-date to have the
latest fixes and patches.
.. note::
A handler update is also performed automatically each time the :abbr:`IoT (Internet of Things)`
box is restarted. The only exception to this process is if the *Automatic drivers update* is
unchecked in the form view of the :abbr:`IoT (Internet of Things)` box on the Odoo server. This
setting can be reached by going to :menuselection:`IoT App --> Select the IoT box --> Automatic
drivers update`.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

@@ -1,314 +0,0 @@
========================
Connect Windows IoT Odoo
========================
A Virtual IoT box is a computer program that needs to be downloaded and installed on a Windows
computer. This requires a Windows operating system with an Odoo 16 or later database.
The Windows virtual :abbr:`IoT (Internet of Things)` box works the same way as a physical :abbr:`IoT
(Internet of Things)` box, with the ability to run most of the same devices. All :abbr:`POS (Point
of Sale)` devices work with it, such as a scale or printer. Payment terminals will also work, but it
should be noted that :abbr:`MRP (Material Requirement Planning)` devices are not compatible. *These
include cameras or measurement tools.*
Pre-requisites
==============
The following items will be needed to complete the Windows :abbr:`IoT (Internet of Things)`
installation.
- Odoo 16 database or any version above.
- :abbr:`IoT (Internet of Things)` compatible devices (except those mentioned above). Refer to:
`Odoo's compatible IoT devices <https://www.odoo.com/app/iot-hardware>`_.
- Device drivers for Windows.
.. note::
Odoo recommends using an updated, recent version of Windows (Windows 10/11) as some older
operating systems can cause the Windows virtual :abbr:`IoT (Internet of Things)` to not work.
- Windows computer (laptop, desktop, or server).
- Odoo :abbr:`IoT (Internet of Things)` subscription. Refer to: :ref:`iot/iot-eligibility`.
Connect the Windows virtual IoT box to an Odoo database
=======================================================
The Windows virtual IoT box is simple to setup in just a few easy steps. Follow this process when
installing the Windows virtual IoT software for the first time.
Download and initial installation
---------------------------------
To begin the installation, navigate to the Odoo 16 or higher installation package for Community -
Windows edition at `Odoo's download page <https://odoo.com/download>`_. Next, install and setup the
Odoo :file:`.exe` file. After the instructions screen, click :guilabel:`Next` to start the
installation and agree to the :abbr:`TOS (Terms of Service)`.
During the next step of the installation, select :guilabel:`Odoo IoT` from the :guilabel:`Select the
type of install` drop-down menu.
.. example::
For reference, the following should be installed:
- **Odoo server**
- **Odoo IoT**
- **Nginx WebServer**
- **Ghostscript interpreter**
Ensure there is enough space on the computer for the installation and click :guilabel:`Next`.
Setting the destination and completing the installation
-------------------------------------------------------
To complete the installation, select the :guilabel:`Destination Folder` and click
:guilabel:`Install`.
.. tip::
Choosing ``C:\odoo`` as the install location will allow for the Nginx server to start. If the
folder doesn't exist, then create it. Otherwise the installation files will be spread throughout
the hard drive.
.. warning::
Odoo's Windows virtual IoT software should not be installed inside any of the Window's User's
directories. Doing so will not allow for Nginx to initialize.
The installation may take a few minutes. When complete, click :guilabel:`Next` to continue.
Ensure that the :guilabel:`Start Odoo` box is checked and click :guilabel:`Finish`. After
installation, the Odoo server will run and automatically open `http://localhost:8069` on a web
browser. The webpage should display the :abbr:`IoT (Internet of Things)` box homepage.
.. seealso::
A restart of the Windows IoT program may be necessary should the web browser not display
anything. :ref:`iot/restart_windows_iot`
Connecting devices
------------------
Next, connect the :abbr:`IoT (Internet of Things)` devices to the Windows computer. Windows should
automatically detect the device because the driver is pre-installed on the computer. If not, search
for and install the Windows driver for the device.
.. important::
Most devices connect to the Windows Machine for Windows IoT automatically through Windows
Plug-N-Play (PnP). However, if Windows does not automatically recognize the device after
connecting, then the administrator may need to install the corresponding drivers manually.
Devices automatically recognized:
- Regular ink/toner based printers
- Receipt printers (Epson/Star)
- Barcode scanners
- Measurement devices (although some configuration of the measurement device settings is
required) See this documentation: :doc:`../devices/measurement_tool`
Devices not automatically recognized (requires manual driver download):
- Label printers (Zebra)
- Scales
Reference the manufacturer's website for the equipment in question. Then, download the drivers
and install them on the Windows machine. Reconnect the device in question and Windows will find
the device.
Following connecting devices to the computer, refresh the :abbr:`IoT (Internet of Things)` box
homepage and verify the device is seen. If not, reload the handlers through the :abbr:`IoT (Internet
of Things)` box homepage.
Finally, connect Windows :abbr:`IoT (Internet of Things)` to a database using existing instructions
(manually using the Token).
.. seealso::
:doc:`/applications/general/iot/config/connect`
Now the installation is complete, the devices connected to :abbr:`IoT (Internet of Things)` can be
used to complete processes/actions.
Troubleshooting
===============
.. _iot/restart_windows_iot:
Restart Windows IoT box
-----------------------
In some instances a manual restart of the physical :abbr:`IoT (Internet of Things)` box can resolve
the issue of an :abbr:`IoT (Internet of Things)` box not showing up on the database. For the Windows
virtual :abbr:`IoT (Internet of Things)` box a manual restart of the Odoo server can resolve
database connection issues.
To restart the virtual Windows IoT server:
#. Type `Services` into the Windows :guilabel:`Search Bar`.
#. Select the :menuselection:`Services` App and scroll down to the :guilabel:`Odoo` service.
#. Right click on :guilabel:`Odoo` and select :guilabel:`Start` or :guilabel:`Restart`. This action
will manually restart the Odoo IoT server.
Firewalls
---------
Firewalls keep devices safe and secure. Sometimes they can block connections that should be made
though. The Windows virtual :abbr:`IoT (Internet of Things)` box software may not be reachable to
the :abbr:`LAN (Local Area Network)` due to a firewall preventing the connection. Consult your local
IT support team to make exceptions (network discovery) in the :abbr:`OS (Operating System)` or
firewall program. Windows has their own firewall as do other virus protection programs.
.. example::
A client might encounter a time when they are able to reach the homepage of the :abbr:`IoT
(Internet of Things)` box, yet they cannot access it from another computer/mobile device/tablet
on the same network.
Making an exception on Windows Defender
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
It is possible to allow other devices to access the Windows virtual :abbr:`IoT (Internet of Things)`
box while keeping the firewall on. This is done by creating a rule on *Windows Defender* and
allowing communication through port `8069`. The following process describes the steps to take in
order to make this exception.
Create a rule in Windows Defender
*********************************
First, open the *Windows Firewall* by navigating to the :menuselection:`Start Menu` and typing in
`Firewall`. Then, open the :menuselection:`Windows Defender Firewall` program. In the left-hand
menu, navigate to :guilabel:`Advanced Settings`.
Once :guilabel:`Advanced Settings` have been selected, click :guilabel:`Inbound Rules` in the
left-hand menu. Then, in the right-hand menu column (under :guilabel:`Inbound Rules`), click on
:guilabel:`New Rule` to create a new rule.
Configure new rule
******************
On the :menuselection:`Rule Type` screen, select :guilabel:`Port`. Then click :guilabel:`Next`. From
the :menuselection:`Protocol and Ports` page leave the rule application to :guilabel:`TCP`. Then,
select :guilabel:`Specific Local Ports` for the :guilabel:`ports` option. In the text box, type in
`8069, 443`. Finally, click :guilabel:`Next` to continue to the next step.
On the :menuselection:`Actions` page, select :guilabel:`Allow the connection` and click
:guilabel:`Next`. The following page on the :menuselection:`Rule Configuration` wizard is the
:guilabel:`Profile` page. On this page, select whichever connection type applies to the network the
Windows machine is operating on. Ideally, select :guilabel:`Private` only connections. The *Private*
connection type is the most secure connection while allowing the selected port to communicate. Click
:guilabel:`Next` to continue.
Finally, assign a new, unique name to the rule. For example, this name can be `Odoo`. Optionally,
add a brief description in the :guilabel:`Description` field. Click :guilabel:`Finish` to complete
the :guilabel:`Rule Configuration` wizard. Now, the new rule is active and devices can connect to
the Windows virtual :abbr:`IoT (Internet of Things)` box.
.. _iot/windows/wordline:
Worldline exception
~~~~~~~~~~~~~~~~~~~
*Worldline* is a payment terminal that can be connected to Odoo's *PoS* (point of sale) system. It
allows for a comprehensive and fluid payment experience for customers. Worldline is available in
Belgium, the Netherlands, and Luxembourg.
When using the Windows IoT server to connect the Worldline payment terminal, it is necessary to
create an exception in the Windows firewall so that a connection can be made between the Odoo
database/:abbr:`IoT (Internet of Things)` box and Worldline.
.. seealso::
:doc:`../../../sales/point_of_sale/payment_methods/terminals/worldline`
To create the exception, first, open the *Windows Defender Firewall* app on the Windows machine.
This can be accomplished by typing `windows defender` in the :guilabel:`Search` bar.
Next, click :guilabel:`Advanced settings` in the left menu.
.. image:: windows_iot/advanced-settings.png
:align: center
:alt: Advanced settings option highlighted in the left pane of the Windows Defender Firewall app.
In the left menu, choose :guilabel:`Inbound Rules`.
.. image:: windows_iot/inbound-rules.png
:align: center
:alt: Windows Defender left window pane with inbound rules menu item highlighted.
After selecting :guilabel:`Inbound Rules`, select :guilabel:`New Rule` in the far right menu.
.. image:: windows_iot/new-rule.png
:align: center
:alt: New rule dropdown shown with new rule option highlighted.
Then, for the :guilabel:`Rule Type`, select the radio button for :guilabel:`Port`. Click
:guilabel:`Next` to continue to the rest of the configuration.
.. image:: windows_iot/radio-port.png
:align: center
:alt: Rule Type window open, with the radio button next to port highlighted.
On the :guilabel:`Protocols and Ports` page, choose the radio button for :guilabel:`TCP`, under
:guilabel:`Does this rule apply to TCP or UDP?`.
Next, under :guilabel:`Does this rule apply to all local ports or specific ports?`, select the radio
button for :guilabel:`Specific local ports`. Then, enter `9050`, and click :guilabel:`Next` to
continue.
.. image:: windows_iot/protocol-port.png
:align: center
:alt: Protocol/port configuration window with TCP, specific port (9050) and Next highlighted.
The next screen is the :guilabel:`Action` page. Under :guilabel:`What action should be taken when a
connection matches the specified conditions?`, choose the radio button for :guilabel:`Allow the
connection`. Then, click :guilabel:`Next` to continue.
A :guilabel:`Profile` page appears. Under :guilabel:`When does this rule apply?`, leave the three
boxes checked for: :guilabel:`Domain`, :guilabel:`Private`, and :guilabel:`Public`. Click
:guilabel:`Next` to continue to the naming convention page.
On the :guilabel:`Name` page, enter `Odoo Worldline`, under the :guilabel:`Name` field. Enter a
:guilabel:`Description (optional)`. Finally, once ready, click :guilabel:`Finish`.
The final :guilabel:`Inbound rule` should appear as follows:
.. list-table::
:header-rows: 1
:stub-columns: 1
* -
- Odoo Worldline
* - Profile
- All
* - Enabled
- Yes
* - Action
- Allow
* - Override
- No
* - Program
- Any
* - Local Address
- Any
* - Remote Address
- Any
* - Protocol
- TCP
* - Local Port
- 9050
* - Remote Port
- Any
* - Authorized Users
- Any
* - Authorized Computers
- Any
* - Authorized Local Principals
- Any
* - Local User Owner
- Any
* - PolicyAppld
- None
* - Application Package
- Any
Uninstalling Windows IoT
------------------------
Uninstalling the Windows virtual :abbr:`IoT (Internet of Things)` box is done through the Windows
program manager. Using any Windows version, search for `program`. Then, select :guilabel:`Add or
Remove Programs` located in the control panel. Search for `Odoo` and click the :guilabel:`three dot
menu` to uninstall.
Confirm the un-installation and follow the steps to uninstall through the Odoo uninstall guide.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,148 @@
=============================
IoT system connection to Odoo
=============================
Prerequisites
=============
To connect the IoT system to an Odoo database, the following prerequisites must be met:
- The Internet of Things (IoT) app must be :ref:`installed <general/install>`.
- The IoT system must be connected to the network.
- The computer connecting to Odoo must be on the same network as the IoT system.
.. note::
It is recommended to connect the IoT system to a **production** instance, as other types of
environments may cause issues (e.g., with :ref:`HTTPS certificate generation
<iot/https_certificate_iot/iot-eligibility>`).
.. seealso::
- :doc:`iot_box`
- :doc:`windows_iot`
Connection
==========
The IoT system can be connected to the Odoo database using a :ref:`pairing code
<iot/connect/pairing-code>` or a :ref:`connection token <iot/connect/token>`.
.. _iot/connect/pairing-code:
Connection using a pairing code
-------------------------------
.. note::
- The pairing code is displayed for up to 5 minutes after the IoT system starts. If the code is
no longer visible, reboot the IoT box or :ref:`restart the Windows virtual IoT service
<iot/windows_iot/restart>` to display the pairing code again. Alternatively, connect the IoT
system to the database using a :ref:`connection token <iot/connect/token>`.
- The pairing code is not displayed if the IoT system is already connected to a database (e.g.,
a test database).
#. Retrieve the IoT's system pairing code:
.. tabs::
.. group-tab:: IoT box
Connect the IoT box to an external monitor or printer. If the IoT box was already plugged
prior to this, reboot it by unplugging it for a few seconds and replugging it.
- External monitor: The pairing code should be displayed on the screen a few minutes after
rebooting the IoT box.
- Printer: The pairing code should be printed automatically.
.. tip::
If no external monitor or printer is connected to the IoT box, access the :ref:`IoT
box's homepage <iot/iot-box/homepage>`; the code is displayed in the :guilabel:`Pairing
Code` section.
.. group-tab:: Windows virtual IoT
On the computer with the Windows virtual IoT installed, open the IoT system's homepage
in a web browser by navigating to the URL `http://localhost:8069`. Then, scroll to the
:guilabel:`Pairing Code` section.
#. In Odoo, open the IoT app and click :guilabel:`Connect`.
#. In the :guilabel:`Connect an IoT Box` popup that opens, enter the :guilabel:`Pairing code`.
#. Click :guilabel:`Pair`.
.. _iot/connect/token:
Connection using a connection token
-----------------------------------
#. In Odoo, open the IoT app and click :guilabel:`Connect`.
#. In the :guilabel:`Connect an IoT Box` popup that opens, copy the :guilabel:`Token`.
#. Access the :ref:`IoT box's <iot/iot-box/homepage>` or :ref:`Windows virtual IoT's
<iot/windows-iot/homepage>` homepage.
#. In the :guilabel:`Odoo database connected` section, click :guilabel:`Configure`.
#. Paste the token into the :guilabel:`Server Token` field and click :guilabel:`Connect`.
.. _iot/connect/IoT-form:
IoT system form
===============
Once the IoT system is connected to the Odoo database, it is displayed as a card in the IoT app.
Click the IP address on the card to access the :ref:`IoT box's <iot/windows-iot/homepage>` or
:ref:`Windows virtual IoT's <iot/iot-box/homepage>` homepage. Click the card to access the
list of :doc:`devices <devices>` connected to the IoT system.
.. tip::
:ref:`Enable the developer mode <developer-mode>` to access the IoT system's
:guilabel:`Technical Information`, such as its :guilabel:`Identifier`, :guilabel:`Domain
address`, and :guilabel:`Image version`.
.. note::
By default, drivers are automatically :ref:`udpated <iot_updating_iot/handlers>` every time the
IoT system is restarted. To disable automatic updates, uncheck the :guilabel:`Automatic drivers
update` option.
.. _iot/connect/troubleshooting:
Troubleshooting
===============
The pairing code does not appear or does not work
-------------------------------------------------
The :ref:`pairing code <iot/connect/pairing-code>` might not be displayed or printed under the
following circumstances:
- The IoT system is not connected to the Internet.
- The IoT system is already connected to an Odoo database.
- The :ref:`pairing code <iot/connect/pairing-code>` display time has expired. Reboot the IoT box
or :ref:`restart the Windows virtual IoT service <iot/windows_iot/restart>` to display the pairing
code again.
- The IoT system's image version is too old and needs to be :ref:`updated
<iot/updating_iot/image-code>`.
The IoT system is connected but does not appear in the database
---------------------------------------------------------------
The IoT system might take a few minutes to restart when it connects to a database. If it still does
not appear after a few minutes:
- Verify that the IoT system can reach the database and the server does not use a multi-database
environment.
- Reboot the IoT box or :ref:`restart the Windows virtual IoT service <iot/windows_iot/restart>`.
The IoT box is connected to the Odoo database but cannot be reached
-------------------------------------------------------------------
Verify that the IoT system and the computer running the Odoo database are connected to the same
network.
The Windows virtual IoT's homepage cannot be accessed from another device
-------------------------------------------------------------------------
Check the :ref:`iot/windows-iot/firewall`.
The IoT system is disconnected from the database after an Odoo upgrade
----------------------------------------------------------------------
:ref:`Update the IoT system's image <iot/updating_iot/image-code>` by flashing the IoT box's card or
:ref:`uninstalling the Windows virtual IoT program <iot/windows_iot/uninstall>` and
:ref:`reinstalling <iot/windows-iot/installation>` the latest package for Windows **matching your
database's version**.
+6 -5
View File
@@ -6,6 +6,12 @@
Devices
=======
.. seealso::
- :doc:`Connect a Worldline payment terminal
<../../sales/point_of_sale/payment_methods/terminals/worldline>`
- :doc:`Connect an Ingenico payment terminal
<../../sales/point_of_sale/payment_methods/terminals/ingenico>`
.. toctree::
:titlesonly:
:glob:
@@ -16,8 +22,3 @@ Devices
devices/footswitch
devices/printer
devices/scale
.. seealso::
- :doc:`Worldline payment terminal
<../../sales/point_of_sale/payment_methods/terminals/worldline>`
- :doc:`Ingenico payment terminal <../../sales/point_of_sale/payment_methods/terminals/ingenico>`
Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 13 KiB

@@ -28,7 +28,7 @@ Connect with bluetooth
Activate the Bluetooth functionality on the device (see the device manual for further explanation),
and the :abbr:`IoT (Internet of Things)` box automatically connects to the device.
.. image:: measurement_tool/measurement-tool.jpeg
.. image:: measurement_tool/measurement-tool.png
:align: center
:alt: Bluetooth indicator on measurement tool.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

@@ -2,105 +2,88 @@
Connect a printer
=================
.. |iot| replace:: :abbr:`IoT (Internet of Things)`
.. |usb| replace:: :abbr:`USB (Universal Serial Bus)`
Printer installation can be done in a few easy steps. The printer can be used to print receipts,
labels, orders, or even reports from the different Odoo apps. In addition, printer actions can be
assigned as an *action on a trigger* during the manufacturing process, or added onto a quality
control point or a quality check.
.. warning::
The **only** way to connect a printer directly to an Odoo database is through the use of an |iot|
box.
Without an |iot| box, printing can still occur, but it is managed through the printer itself,
which is not the recommended process.
The **only** way to connect a printer directly to an Odoo database is through the use of an IoT
system. Without an IoT system, printing can still occur, but it is managed through the printer
itself, which is not the recommended process.
Connection
==========
The |iot| box supports printers connected through |usb|, network connection, or Bluetooth.
IoT systems support printers connected through USB, network connection, or Bluetooth.
`Supported printers <https://www.odoo.com/page/iot-hardware>`__ are detected automatically, and
appear in the :guilabel:`Devices` list of the *IoT* app.
appear in the :guilabel:`Devices` list of the IoT app.
.. image:: printer/printer-detected.png
:align: center
:alt: The printer as it would appear in the IoT app devices list.
.. note::
Printers can take up to two minutes to appear in the *IoT* app :guilabel:`Devices` list.
Printers can take up to two minutes to appear in the IoT app :guilabel:`Devices` list.
Link printer
============
Link a printer
==============
Link printer to work orders
---------------------------
Link work orders to a printer
-----------------------------
*Work Orders* can be linked to printers, via a quality control point, to print labels for
Work orders can be linked to printers, via a quality control point, to print labels for
manufactured products.
In the *Quality app*, a device can be set up on a quality control point. To do that, go to the
:menuselection:`Quality app --> Quality Control --> Control Points`, and open the desired control
point to which the printer will be linked.
In the :doc:`Quality app </applications/inventory_and_mrp/quality>`, a device can be set up on a
quality control point. To do so, go to the :menuselection:`Quality --> Quality Control --> Control
Points`, and open the desired control point.
.. important::
A *Manufacturing Operation* and *Work Order Operation* need to be attached to a quality control
A manufacturing operation and work order operation need to be attached to a quality control
point before the :guilabel:`Type` field allows for the :guilabel:`Print Label` option to be
selected.
From here, edit the control point, by selecting the :guilabel:`Type` field, and selecting
:guilabel:`Print Label` from the drop-down menu of options. Doing so reveals a field called
:guilabel:`Device`, where the attached *device* can be selected. :guilabel:`Save` the changes, if
required.
.. image:: printer/printer-controlpoint.png
:align: center
:alt: This is the quality control point setup.
From here, edit the control point by selecting the :guilabel:`Type` field, and selecting
:guilabel:`Print Label` from the dropdown menu of options. Doing so reveals the :guilabel:`Device`
field, where the attached device can be selected.
The printer can now be used with the selected quality control point. When the quality control point
is reached during the manufacturing process, the database presents the option to print labels for a
specific product.
.. image:: printer/printer-prompt.png
:align: center
.. tip::
Quality control points can also be accessed by navigating to :menuselection:`IoT App -->
Devices`, then select the device. There is a :guilabel:`Quality Control Points` tab, where they
can be added with the device.
Quality control points can also be accessed by navigating to :menuselection:`IoT -->
Devices`, then selecting the device. Go to the :guilabel:`Quality Control Points` tab to add them
to the device.
.. note::
On a quality check detail form, the :guilabel:`Type` of check can also be specified to
:guilabel:`Print Label`. To create :doc:`new quality checks
<../../../inventory_and_mrp/quality/quality_management/quality_checks>`, navigate to
:menuselection:`Quality app --> Quality Control --> Quality Checks --> New`.
On a :doc:`quality check form
</applications/inventory_and_mrp/quality/quality_management/quality_checks>`, the
:guilabel:`Type` of check can also be set to :guilabel:`Print Label`.
.. seealso::
- :doc:`../../../inventory_and_mrp/quality/quality_management/quality_control_points`
- :doc:`../../../inventory_and_mrp/quality/quality_management/quality_alerts`
- :doc:`/applications/inventory_and_mrp/quality/quality_management/quality_control_points`
- :doc:`/applications/inventory_and_mrp/quality/quality_management/quality_alerts`
.. _iot/link-printer:
Link printer to reports
-----------------------
Link reports to a printer
-------------------------
It is possible to link report types to a specific printer. In the *IoT* app, go to the
:guilabel:`Devices` menu, and select the desired printer to be configured.
It is possible to link report types to a specific printer. To do so:
From here, go to the :guilabel:`Printer Reports` tab, and click :guilabel:`Add a line`. In the
window that appears, check all the types of :guilabel:`Reports` that should be linked to this
printer.
#. Go to :menuselection:`IoT --> Devices` and select the desired printer.
#. Go to the :guilabel:`Printer Reports` tab and click :guilabel:`Add a line`.
#. In the pop-up that opens, select the types of reports to be linked to the printer and click
:guilabel:`Select`.
.. image:: printer/printer-reports.png
:align: center
:alt: The list of reports assigned to a printer in the IoT app.
.. tip::
Reports can also be configured in the *Technical* menu of the *Settings* app, while in
:ref:`debug mode <developer-mode>`. To do that, navigate to :menuselection:`Settings App -->
Technical --> Actions: Reports`. From here, select the desired report from the list. Then, an
:guilabel:`IoT Device` can be set on the report.
Reports can also be configured by :ref:`enabling the developer mode <developer-mode>` and going
to :menuselection:`Settings --> Technical --> Reports`. Select the desired report from the list
and set an :guilabel:`IoT Device`.
The first time a linked report is selected to print, a :guilabel:`Select Printers` pop-up window
appears. Tick the checkbox next to the correct printer for the report, and click :guilabel:`Print`.
@@ -114,9 +97,9 @@ a user can have different devices saved in their cache for different reports, ba
they use to access Odoo. It also means different users can have a report automatically printed from
different printers, based on their preferences.
To unlink a report from a printer, navigate to :menuselection:`IoT app --> Clear Selected Devices`.
This generates a list of reports that are linked to a printer on the current device. Click the
:guilabel:`Unlink` button next to each report to remove the link.
To unlink a report from a printer, navigate to :menuselection:`IoT --> Configuration --> Reset
Linked Printers`. This generates a list of reports that are linked to a printer on the current
device. Click the :guilabel:`Unlink` button next to each report to remove the link.
.. important::
This step **only** prevents the report from automatically printing to the listed printer from
@@ -124,8 +107,390 @@ This generates a list of reports that are linked to a printer on the current dev
the :guilabel:`Printer Reports` tab.
.. image:: printer/clear-reports.png
:align: center
:alt: A list of reports currently linked to a printer in the IoT app.
.. seealso::
:doc:`POS Order Printing <../../../sales/point_of_sale/restaurant/kitchen_printing>`
Potential issues
================
The printer is not detected
---------------------------
If a printer does not appear in the devices list, go to the :ref:`IoT box's <iot/iot-box/homepage>`
or :ref:`Windows virtual IoT's <iot/windows-iot/homepage>` homepage, click :guilabel:`Show` in
the :guilabel:`Devices` section, and make sure the printer is listed.
If the printer does not appear on the IoT system's homepage, click :guilabel:`Printer Server`, then
:guilabel:`Administration`, and :guilabel:`Add Printer`. If the printer is not in the list, it is
likely not connected properly.
The printer outputs random text
-------------------------------
For most printers, the correct driver should be automatically detected and selected. However, in
some cases, the automatic detection mechanism might not be enough, and if no driver is found, the
printer might print random characters.
The solution is to manually select the corresponding driver. On the IoT system's homepage, click
:guilabel:`Printer Server`, then :guilabel:`Printers`, and select the printer in the list.
In the :guilabel:`Administration` dropdown menu, click :guilabel:`Modify Printer`. Follow the steps
and select the printer's *make* and *model*.
.. image:: printer/modify-printer.png
:scale: 75%
:alt: Edit the printer connected to the IoT system.
.. note::
Epson receipt printers and Zebra label printers do not need a driver to work. Make sure that no
driver is selected for those printers.
The printer is detected but is not recognized correctly
-------------------------------------------------------
If Odoo and the IoT system do not recognize the printer correctly, go to :menuselection:`IoT
--> Devices`, click the device's card to access its form, and set the :guilabel:`Subtype` field to
the appropriate option: :guilabel:`Receipt Printer`, :guilabel:`Label Printer`, or :guilabel:`Office
Printer`.
Epson configuration special case
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Most Epson printers support printing receipts in Odoo Point of Sale using the `GS v 0` command.
However, the following Epson printer models do not support this command:
- TM-U220
- TM-U230
- TM-P60
- TMP-P60II
To bypass this issue, you can configure the printer to use the `ESC *` command.
First, review Epson's website for compatibility for both the `GS v 0
<https://download4.epson.biz/sec_pubs/pos/reference_en/escpos/gs_lv_0.html>`_ and `ESC *
<https://download4.epson.biz/sec_pubs/pos/reference_en/escpos/esc_asterisk.html>`_ commands.
If the printer is incompatible with `GS v 0` but supports `ESC *`, configure the IoT system to use
the `ESC *` command as follows:
#. Access the :ref:`IoT box's <iot/iot-box/homepage>` or :ref:`Windows virtual IoT's
<iot/windows-iot/homepage>` homepage.
#. Click the :guilabel:`Printer server` button, then click :guilabel:`Administration` on the CUPS
page.
#. Click :guilabel:`Add Printer` in the :guilabel:`Printers` section, select the printer, and click
:guilabel:`Continue`.
.. tip::
If the printer's name is still uncertain, take the following steps:
#. Take note of the listed printers on the CUPS page.
#. Turn the printer off and refresh the page.
#. Compare the difference with the first list to see which printer disappeared.
#. Turn the printer back on and refresh the page again.
#. Double-check the list again to see if the printer re-appears.
#. The printer that disappeared and reappears again on the listed printers is the name of the
printer in question. It can be :guilabel:`Unknown` under :guilabel:`Local printers`.
#. On the :guilabel:`Add Printer` page, specify the printer's :guilabel:`Name` using the following
convention: `<printer_name>__IMC_<param_1>_<param_2>_..._<param_n>__`, where:
- `printer_name` is the printer's name. It can contain any character except `_`, `/`, `#`, or ` `
(space character).
- `IMC`: This stands for *Image Mode Column* (the simplified name for `ESC *`).
- `param_1`: This stands for the specific parameter:
- `SCALE<X>`: Scale of the picture (with the same aspect ratio). `X` should be an integer
describing the scale percentage that should be used. For example, `100` is the original size,
`50` is half the size, and `200` is twice the size.
- `LDV`: *Low Density Vertical* (will be set to *High Density Vertical* if not specified).
- `LDH`: *Low Density Horizontal* (will be set to *High Density Horizontal* if not specified).
.. note::
- *Density* parameters might need to be configured in a particular way, depending on the
printer model.
- Refer to `Epson's ESC * documentation <https://download4.epson.biz/sec_pubs/pos/reference_en/escpos/esc_asterisk.html>`_
to determine if the printer requires these parameters to be set.
.. example::
The following are examples of proper and improper name formatting:
Proper name formatting:
- `EPSONTMm30II__IMC__`
- `EPSON_TM_U220__IMC_LDV_LDH_SCALE80__`
Improper name formatting (this will not prevent printing, but the result might not have the
expected printed output):
- `EPSON TMm 30II`: The name cannot contain spaces.
- `EPSONTMm30II`: The name itself is correct, but it will not use `ESC *`.
- `EPSONTMm30II__IMC`: This name is missing the end `__`.
- `EPSONTMm30II__IMC_XDV__`: The parameter `XDV` does not match any existing parameters.
- `EPSONTMm30II__IMC_SCALE__`: The parameter `SCALE` is missing the scale value.
#. Once the printer's name has been defined using the appropriate naming convention, click
:guilabel:`Continue`.
#. Set the :guilabel:`Make` value to :guilabel:`Raw` and the :guilabel:`Model` value to
:guilabel:`Raw Queue (en)`.
#. Click :guilabel:`Add Printer`. If everything was done correctly, the page should redirect to the
:guilabel:`Banners` page.
#. Wait a few minutes for the IoT system to detect the printer and sync to Odoo's server.
#. :ref:`Access the POS settings <configuration/settings>` and select your POS, or click the
vertical ellipsis button (:guilabel:`⋮`) on a POS card and click :guilabel:`Edit`. Scroll down
to the :guilabel:`Connected Devices` section, enable :guilabel:`IoT Box`, and select the printer
in the :guilabel:`Receipt Printer` field. Click :guilabel:`Save`.
.. note::
If the printer was set up incorrectly (e.g., it continues to print random text, or the printed
receipt is too large or too small), it cannot be modified via the printer's name in CUPS.
Instead, configure a new printer from scratch with modified parameters, following the steps
above.
.. spoiler::
Example
The following is an example of the troubleshooting process for a TM-U220B printer model using the
`ESC *` command. The receipt pictured below is an example of a receipt that is printing correctly
due to proper formatting (in theory):
.. image:: printer/receipt-example.png
:scale: 60%
:alt: Properly formatted receipt picture from a demo database.
Printing this receipt immediately without proper formatting will not work, as the TM-U220B
printer model does not support the `GS v 0` command. Instead, random characters will be printed:
.. image:: printer/receipt-print-random-letters.png
:scale: 60%
:alt: Printer paper with seemingly random characters.
To properly configure formatting for the Epson TM-U220B printer model, follow these steps:
#. After checking Epson's website for compatibility with both the `GS v 0
<https://download4.epson.biz/sec_pubs/pos/reference_en/escpos/gs_lv_0.html>`_ and `ESC *
<https://download4.epson.biz/sec_pubs/pos/reference_en/escpos/esc_asterisk.html>`_ commands,
the TM-U220B printer is indeed incompatible with `GS v 0` but supports `ESC *`.
.. image:: printer/epson-compatibility-compare.png
:alt: Epson compatibility evaluation from Epson website.
#. When adding the printer, CUPS displays the list of available printers:
.. image:: printer/add-printer.png
:scale: 75%
:alt: Administration menu, add printer selection.
In this case, the printer is connected via USB, so it is not part of the
:guilabel:`Discovered Network Printers`. Instead, it is likely part of the :guilabel:`Unknown`
selection under :guilabel:`Local Printers`. By unplugging the printer's USB cable from the IoT
system and refreshing the page, the :guilabel:`Unknown` printer disappears. By plugging it
back in, the printer reappears.
#. For the naming convention, since the printer must print using the `ESC *` command, it is
imperative to add `__IMC`.
.. image:: printer/epson-tm-u220-specification.png
:alt: Epson TM-U220 specifications on manufacturer's website.
For this particular model (TM-U220) `m` should be equal to 0 or 1. While referencing the
:guilabel:`Description` table on `Epson's ESC * website
<https://download4.epson.biz/sec_pubs/pos/reference_en/escpos/esc_asterisk.html>`_, the `m`
values could be 0, 1, 32, or 33. So, in this case, the `m` value **cannot** be 32 or 33
(otherwise, random characters will be printed).
The table includes the numeric values 32 and 33; they both occur if the :guilabel:`Number of
bits for vertical data` is set to 24, i.e. it has a *High Vertical Density*. In the case of
configuring the Epson TM-U220, the *Low Vertical Density* will need to be forced, as
this printer model does not support *High Vertical Density* for this command `ESC *`.
To add a *Low Vertical Density*, add the `LDV` parameter to the naming convention.
.. image:: printer/add-printer-filled.png
:alt: Add a *Low Vertical Density* (the `LDV` parameter) to the naming convention.
#. Click :guilabel:`Continue` to proceed. Next, set the :guilabel:`Make` value to :guilabel:`Raw`
and the :guilabel:`Model` value to :guilabel:`Raw Queue (en)`.
.. image:: printer/add-printer-add.png
:alt: Epson TM-U220 specifications on manufacturers website.
However, when trying to print with the naming convention `EpsonTMU220B__IMC_LDV__`, the
receipt is printed, but it is too large and outside the margin. To resolve this, add a new
printer (and naming convention) with the `SCALE<X>` parameter to adapt to the receipt's size.
Here are some examples:
.. list-table::
:header-rows: 1
* - Printer Naming Convention
- `EpsonTMU220B__IMC_LDV__`
- `EpsonTMU220B__IMC_LDV_SCALE75__`
- `EpsonTMU220B__IMC_LDV_LDH__`
- `EpsonTMU220B__IMC_LDV_LDH_SCALE35__`
* - .. image:: printer/receipt-example.png
:alt: Receipt example format.
- .. image:: printer/tm-u220-ldv.png
:alt: Receipt format using naming convention: EpsonTMU220B__IMC_LDV__.
- .. image:: printer/tm-u220-ldv-scale75.png
:alt: Receipt format using naming convention: EpsonTMU220B__IMC_LDV_SCALE75__.
- .. image:: printer/tm-u220-ldv-hdv.png
:alt: Receipt format using naming convention: EpsonTMU220B__IMC_LDV_LDH__.
- .. image:: printer/tm-u220-ldv-hdv-scale35.png
:alt: Receipt format using naming convention: EpsonTMU220B__IMC_LDV_LDH_SCALE35__.
DYMO LabelWriter print issue
----------------------------
The DYMO LabelWriter has a known issue in printing with IoT systems. The OpenPrinting CUPS server
installs the printer using :guilabel:`Local RAW Printer` drivers. In order to print anything, the
correct :guilabel:`Make and Model` needs to be set to reference the correct driver when using the
device.
Additionally, a new printer needs to be added to reduce the print delay that occurs after updating
the driver.
.. important::
The DYMO LabelWriter 450 DUO printer is the recommended DYMO printer for use with Odoo and IoT
systems. This device combines two printers: a label printer and a tape printer. When configuring
the following processes, it is essential to select the correct model (either DYMO LabelWriter 450
DUO Label (en) or DYMO LabelWriter 450 DUO Tape (en)). For consistency, the following processes
outline configuration steps for the DYMO LabelWriter 450 DUO Label (en) model. Adjust the model
selections as needed.
.. _printer/dymo/update_drivers:
DYMO LabelWriter not printing
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If the DYMO LabelWriter fails to print, install a new driver:
#. Access the IoT system's homepage and click :menuselection:`Printer server` to open the
OpenPrinting CUPS console.
#. Click :menuselection:`Printers` in the top menu, then click the printer in the list.
#. Select :guilabel:`Maintenance` in the first dropdown menu.
#. Select :guilabel:`Modify Printer` in the second dropdown menu.
.. image:: printer/main-modify.png
:alt: Modify the make and model of the DYMO LabelWriter. Maintenance and Modify dropdown
menus highlighted.
#. Select the specific network connection/printer on which the modification should be made and
click :guilabel:`Continue`.
#. On the next page, click :guilabel:`Continue`, then select :guilabel:`DYMO` from the
:guilabel:`Make` dropdown list.
#. Click on :guilabel:`Continue` and set the :guilabel:`Model` to :guilabel:`DYMO LabelWriter 450
DUO Label (en)` (or whichever DYMO printer model is being used).
#. Click :guilabel:`Modify Printer` to set the new driver; a confirmation page appears.
#. Click :menuselection:`Printers` in the top menu; all printers installed on the OpenPrinting CUPS
server appear, including the newly updated :guilabel:`DYMO LabelWriter 450 DUO Label` (or
whichever DYMO printer model is being used).
#. Click the newly updated printer, then click the :guilabel:`Maintenance` dropdown menu and
select :guilabel:`Print Test Page` to print a test label. The test label is printed after a few
seconds if the driver update was successful.
To reduce this delay, add a new printer using the steps below.
DYMO LabelWriter print delay
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. tip::
If the DYMO LabelWriter 450 DUO printer is not printing at all, or is not recognized (i.e., it
has a :guilabel:`RAW` driver type), then :ref:`update the drivers on the device
<printer/dymo/update_drivers>`.
To resolve the delay issue after modifying the driver, reinstall the printer:
#. Access the IoT system's homepage and click :menuselection:`Printer server` to open the
OpenPrinting CUPS console.
#. Click :menuselection:`Administration` in the top menu, then click :guilabel:`Add a Printer`.
#. On the next page, in the :guilabel:`Local Printers` section, select :guilabel:`DYMO
LabelWriter 450 DUO Label (DYMO LabelWriter 450 DUO Label)` (or whichever DYMO printer model is
being used) pre-installed printer. Click :guilabel:`Continue`.
.. image:: printer/local-printer.png
:alt: Add a printer screen on OpenPrinting CUPS with DYMO LabelWriter 450 DUO Label
highlighted.
#. On the following screen, update the :guilabel:`Name` to something easily identifiable, as the
original printer will remain in the list. Then, click :guilabel:`Continue`.
.. image:: printer/rename-printer.png
:alt: Rename printer page in the 'Add a Printer' flow, with the name field highlighted.
#. Set the :guilabel:`Model` field to :guilabel:`DYMO LabelWriter 450 DUO Label (en)` (or
whichever DYMO printer model is being used), then click :guilabel:`Add Printer` to complete
the installation.
.. image:: printer/choose-printer.png
:alt: Choose model screen on the OpenPrinting CUPS console with model and add a printer
highlighted.
#. Click :menuselection:`Printers` in the top menu and click the newly installed printer
:guilabel:`DYMO LabelWriter 450 DUO Label` (or whichever DYMO printer model is being used) from
in the list.
.. image:: printer/printer-page.png
:alt: Printer page with newly installed printer highlighted.
#. Click the :guilabel:`Maintenance` dropdown list and select :guilabel:`Print Test Page` to print
a test label. The test label should print out immediately, or after one or two seconds.
The Zebra printer does not print anything
-----------------------------------------
Zebra printers are quite sensitive to the format of the printed Zebra Programming Language (ZPL)
code. If nothing comes out of the printer or blank labels are printed, try changing the format
of the report sent to the printer. To do so, activate the :ref:`developer mode <developer-mode>`, go
to :menuselection:`Settings --> Technical --> User Interface --> Views`, and search for the
corresponding template.
.. seealso::
`Zebra's instructions on printing ZPL files
<https://supportcommunity.zebra.com/s/article/Print-a-zpl-file-using-the-Generic-Text-Printer>`_
Barcode scanner issues
======================
The characters read by the barcode scanner do not match the barcode
-------------------------------------------------------------------
By default, most barcode scanners are configured in the US QWERTY format. If the barcode scanner
uses a different layout, go to :menuselection:`IoT --> Devices` and click the barcode device's card.
Then, select the correct language in the :guilabel:`Keyboard Layout` field.
.. note::
The :guilabel:`Keyboard Layout` is language-specific, with available options varying based on
the device and the language of the database (e.g., :guilabel:`English (UK)`, :guilabel:`English
(US)`, etc.).
Nothing happens when a barcode is scanned
-----------------------------------------
Make sure the correct device is selected in the :doc:`Point of Sale settings
</applications/sales/point_of_sale/configuration/pos_iot>` (when applicable) and the barcode is
configured to send an `ENTER` character (keycode 28) at the end of every barcode.
The barcode scanner is detected as a keyboard
---------------------------------------------
.. important::
Some barcode scanners are identified as USB keyboards rather than barcode scanners and are not
recognized by IoT systems.
To change the device type manually, go to :menuselection:`IoT --> Devices` and click the barcode
device's card. Then, enable :guilabel:`Is scanner`.
The barcode scanner processes barcode characters individually
-------------------------------------------------------------
When accessing the mobile version of Odoo from a mobile device or tablet paired with a barcode
scanner via the IoT system, the scanner might interpret each character in a barcode as a separate
scan. To resolve this, go to :menuselection:`IoT --> Devices` and click the barcode device's
card. Then, select the correct language in the :guilabel:`Keyboard Layout` field.
.. note::
The :guilabel:`Keyboard Layout` is language-specific, with available options varying based on
the device and the language of the database (e.g., :guilabel:`English (UK)`, :guilabel:`English
(US)`, etc.).

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

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