From 04129065120eb06a41c24a486c3de2b5e30adad7 Mon Sep 17 00:00:00 2001
From: Eric Antones
Date: Mon, 25 Aug 2025 13:17:11 +0200
Subject: [PATCH 01/25] [ADD] connector_woocommerce
---
connector_woocommerce/README.rst | 64 +
connector_woocommerce/__init__.py | 2 +
connector_woocommerce/__manifest__.py | 42 +
connector_woocommerce/components/__init__.py | 8 +
connector_woocommerce/components/adapter.py | 38 +
connector_woocommerce/components/binder.py | 10 +
connector_woocommerce/components/core.py | 12 +
.../components/export_deleter.py | 31 +
.../components/export_mapper.py | 14 +
connector_woocommerce/components/exporter.py | 32 +
.../components/import_mapper.py | 14 +
connector_woocommerce/components/importer.py | 31 +
connector_woocommerce/data/ir_cron.xml | 150 +
connector_woocommerce/data/queue_data.xml | 21 +
.../data/queue_job_function_data.xml | 147 +
connector_woocommerce/i18n/ca.po | 5645 +++++++++++++++++
connector_woocommerce/i18n/es.po | 5645 +++++++++++++++++
connector_woocommerce/models/__init__.py | 14 +
.../models/backend/__init__.py | 5 +
.../models/backend/adapter.py | 15 +
.../models/backend/backend.py | 239 +
.../models/backend/backend_account_tax.py | 35 +
.../models/backend/backend_payment_mode.py | 43 +
.../models/backend/backend_tax_class.py | 34 +
.../models/binding/__init__.py | 1 +
.../models/binding/binding.py | 25 +
connector_woocommerce/models/common/tools.py | 121 +
.../models/ir_attachment/__init__.py | 1 +
.../models/ir_attachment/binding.py | 53 +
.../models/product/__init__.py | 1 +
.../models/product/export_mapper.py | 51 +
.../models/product_attribute/__init__.py | 6 +
.../models/product_attribute/adapter.py | 30 +
.../models/product_attribute/binder.py | 23 +
.../models/product_attribute/binding.py | 47 +
.../models/product_attribute/export_mapper.py | 19 +
.../models/product_attribute/exporter.py | 35 +
.../product_attribute/product_attribute.py | 15 +
.../product_attribute_value/__init__.py | 6 +
.../models/product_attribute_value/adapter.py | 86 +
.../models/product_attribute_value/binder.py | 25 +
.../models/product_attribute_value/binding.py | 53 +
.../product_attribute_value/export_mapper.py | 46 +
.../product_attribute_value/exporter.py | 41 +
.../product_attribute_value.py | 15 +
.../models/product_product/__init__.py | 7 +
.../models/product_product/adapter.py | 90 +
.../models/product_product/binder.py | 27 +
.../models/product_product/binding.py | 51 +
.../models/product_product/export_mapper.py | 165 +
.../models/product_product/exporter.py | 94 +
.../models/product_product/product.py | 46 +
.../product_product/product_pricelist_item.py | 49 +
.../product_public_category/__init__.py | 8 +
.../models/product_public_category/adapter.py | 34 +
.../models/product_public_category/binder.py | 23 +
.../models/product_public_category/binding.py | 45 +
.../product_public_category/export_deleter.py | 35 +
.../product_public_category/export_mapper.py | 54 +
.../product_public_category/exporter.py | 41 +
.../product_public_category/listener.py | 11 +
.../product_public_category.py | 42 +
.../models/product_template/__init__.py | 6 +
.../models/product_template/adapter.py | 105 +
.../models/product_template/binder.py | 27 +
.../models/product_template/binding.py | 57 +
.../models/product_template/export_mapper.py | 295 +
.../models/product_template/exporter.py | 92 +
.../product_template/product_template.py | 144 +
.../models/res_partner/__init__.py | 6 +
.../models/res_partner/adapter.py | 11 +
.../models/res_partner/binder.py | 16 +
.../models/res_partner/binding.py | 38 +
.../models/res_partner/import_mapper.py | 73 +
.../models/res_partner/importer.py | 35 +
.../models/res_partner/res_partner.py | 50 +
.../models/sale_order/__init__.py | 9 +
.../models/sale_order/adapter.py | 142 +
.../models/sale_order/binder.py | 16 +
.../models/sale_order/binding.py | 71 +
.../models/sale_order/export_mapper.py | 22 +
.../models/sale_order/exporter.py | 35 +
.../models/sale_order/import_mapper.py | 119 +
.../models/sale_order/importer.py | 175 +
.../models/sale_order/listener.py | 36 +
.../models/sale_order/sale_order.py | 80 +
.../models/sale_order_line/__init__.py | 4 +
.../models/sale_order_line/binder.py | 38 +
.../models/sale_order_line/binding.py | 60 +
.../models/sale_order_line/import_mapper.py | 108 +
.../models/sale_order_line/sale_order_line.py | 49 +
.../models/stock_picking/__init__.py | 1 +
.../models/stock_picking/stock_picking.py | 38 +
connector_woocommerce/readme/CONTRIBUTORS.rst | 4 +
connector_woocommerce/readme/DESCRIPTION.rst | 1 +
.../security/connector_woocommerce.xml | 13 +
.../security/ir.model.access.csv | 25 +
.../static/description/icon.png | Bin 0 -> 6342 bytes
.../static/description/index.html | 421 ++
.../views/connector_woocommerce_menu.xml | 66 +
.../views/product_attribute.xml | 60 +
.../views/product_attribute_value.xml | 47 +
.../views/product_product.xml | 113 +
.../views/product_public_category.xml | 65 +
.../views/product_template.xml | 60 +
.../views/res_partner_views.xml | 61 +
.../views/sale_order_view.xml | 80 +
.../views/woocommerce_backend_view.xml | 320 +
.../views/woocommerce_product_template.xml | 45 +
.../odoo/addons/connector_woocommerce | 1 +
setup/connector_woocommerce/setup.py | 6 +
111 files changed, 17159 insertions(+)
create mode 100644 connector_woocommerce/README.rst
create mode 100644 connector_woocommerce/__init__.py
create mode 100644 connector_woocommerce/__manifest__.py
create mode 100644 connector_woocommerce/components/__init__.py
create mode 100644 connector_woocommerce/components/adapter.py
create mode 100644 connector_woocommerce/components/binder.py
create mode 100644 connector_woocommerce/components/core.py
create mode 100644 connector_woocommerce/components/export_deleter.py
create mode 100644 connector_woocommerce/components/export_mapper.py
create mode 100644 connector_woocommerce/components/exporter.py
create mode 100644 connector_woocommerce/components/import_mapper.py
create mode 100644 connector_woocommerce/components/importer.py
create mode 100644 connector_woocommerce/data/ir_cron.xml
create mode 100644 connector_woocommerce/data/queue_data.xml
create mode 100644 connector_woocommerce/data/queue_job_function_data.xml
create mode 100644 connector_woocommerce/i18n/ca.po
create mode 100644 connector_woocommerce/i18n/es.po
create mode 100644 connector_woocommerce/models/__init__.py
create mode 100644 connector_woocommerce/models/backend/__init__.py
create mode 100644 connector_woocommerce/models/backend/adapter.py
create mode 100644 connector_woocommerce/models/backend/backend.py
create mode 100644 connector_woocommerce/models/backend/backend_account_tax.py
create mode 100644 connector_woocommerce/models/backend/backend_payment_mode.py
create mode 100644 connector_woocommerce/models/backend/backend_tax_class.py
create mode 100644 connector_woocommerce/models/binding/__init__.py
create mode 100644 connector_woocommerce/models/binding/binding.py
create mode 100644 connector_woocommerce/models/common/tools.py
create mode 100644 connector_woocommerce/models/ir_attachment/__init__.py
create mode 100644 connector_woocommerce/models/ir_attachment/binding.py
create mode 100644 connector_woocommerce/models/product/__init__.py
create mode 100644 connector_woocommerce/models/product/export_mapper.py
create mode 100644 connector_woocommerce/models/product_attribute/__init__.py
create mode 100644 connector_woocommerce/models/product_attribute/adapter.py
create mode 100644 connector_woocommerce/models/product_attribute/binder.py
create mode 100644 connector_woocommerce/models/product_attribute/binding.py
create mode 100644 connector_woocommerce/models/product_attribute/export_mapper.py
create mode 100644 connector_woocommerce/models/product_attribute/exporter.py
create mode 100644 connector_woocommerce/models/product_attribute/product_attribute.py
create mode 100644 connector_woocommerce/models/product_attribute_value/__init__.py
create mode 100644 connector_woocommerce/models/product_attribute_value/adapter.py
create mode 100644 connector_woocommerce/models/product_attribute_value/binder.py
create mode 100644 connector_woocommerce/models/product_attribute_value/binding.py
create mode 100644 connector_woocommerce/models/product_attribute_value/export_mapper.py
create mode 100644 connector_woocommerce/models/product_attribute_value/exporter.py
create mode 100644 connector_woocommerce/models/product_attribute_value/product_attribute_value.py
create mode 100644 connector_woocommerce/models/product_product/__init__.py
create mode 100644 connector_woocommerce/models/product_product/adapter.py
create mode 100644 connector_woocommerce/models/product_product/binder.py
create mode 100644 connector_woocommerce/models/product_product/binding.py
create mode 100644 connector_woocommerce/models/product_product/export_mapper.py
create mode 100644 connector_woocommerce/models/product_product/exporter.py
create mode 100644 connector_woocommerce/models/product_product/product.py
create mode 100644 connector_woocommerce/models/product_product/product_pricelist_item.py
create mode 100644 connector_woocommerce/models/product_public_category/__init__.py
create mode 100644 connector_woocommerce/models/product_public_category/adapter.py
create mode 100644 connector_woocommerce/models/product_public_category/binder.py
create mode 100644 connector_woocommerce/models/product_public_category/binding.py
create mode 100644 connector_woocommerce/models/product_public_category/export_deleter.py
create mode 100644 connector_woocommerce/models/product_public_category/export_mapper.py
create mode 100644 connector_woocommerce/models/product_public_category/exporter.py
create mode 100644 connector_woocommerce/models/product_public_category/listener.py
create mode 100644 connector_woocommerce/models/product_public_category/product_public_category.py
create mode 100644 connector_woocommerce/models/product_template/__init__.py
create mode 100644 connector_woocommerce/models/product_template/adapter.py
create mode 100644 connector_woocommerce/models/product_template/binder.py
create mode 100644 connector_woocommerce/models/product_template/binding.py
create mode 100644 connector_woocommerce/models/product_template/export_mapper.py
create mode 100644 connector_woocommerce/models/product_template/exporter.py
create mode 100644 connector_woocommerce/models/product_template/product_template.py
create mode 100644 connector_woocommerce/models/res_partner/__init__.py
create mode 100644 connector_woocommerce/models/res_partner/adapter.py
create mode 100644 connector_woocommerce/models/res_partner/binder.py
create mode 100644 connector_woocommerce/models/res_partner/binding.py
create mode 100644 connector_woocommerce/models/res_partner/import_mapper.py
create mode 100644 connector_woocommerce/models/res_partner/importer.py
create mode 100644 connector_woocommerce/models/res_partner/res_partner.py
create mode 100644 connector_woocommerce/models/sale_order/__init__.py
create mode 100644 connector_woocommerce/models/sale_order/adapter.py
create mode 100644 connector_woocommerce/models/sale_order/binder.py
create mode 100644 connector_woocommerce/models/sale_order/binding.py
create mode 100644 connector_woocommerce/models/sale_order/export_mapper.py
create mode 100644 connector_woocommerce/models/sale_order/exporter.py
create mode 100644 connector_woocommerce/models/sale_order/import_mapper.py
create mode 100644 connector_woocommerce/models/sale_order/importer.py
create mode 100644 connector_woocommerce/models/sale_order/listener.py
create mode 100644 connector_woocommerce/models/sale_order/sale_order.py
create mode 100644 connector_woocommerce/models/sale_order_line/__init__.py
create mode 100644 connector_woocommerce/models/sale_order_line/binder.py
create mode 100644 connector_woocommerce/models/sale_order_line/binding.py
create mode 100644 connector_woocommerce/models/sale_order_line/import_mapper.py
create mode 100644 connector_woocommerce/models/sale_order_line/sale_order_line.py
create mode 100644 connector_woocommerce/models/stock_picking/__init__.py
create mode 100644 connector_woocommerce/models/stock_picking/stock_picking.py
create mode 100644 connector_woocommerce/readme/CONTRIBUTORS.rst
create mode 100644 connector_woocommerce/readme/DESCRIPTION.rst
create mode 100644 connector_woocommerce/security/connector_woocommerce.xml
create mode 100644 connector_woocommerce/security/ir.model.access.csv
create mode 100644 connector_woocommerce/static/description/icon.png
create mode 100644 connector_woocommerce/static/description/index.html
create mode 100644 connector_woocommerce/views/connector_woocommerce_menu.xml
create mode 100644 connector_woocommerce/views/product_attribute.xml
create mode 100644 connector_woocommerce/views/product_attribute_value.xml
create mode 100644 connector_woocommerce/views/product_product.xml
create mode 100644 connector_woocommerce/views/product_public_category.xml
create mode 100644 connector_woocommerce/views/product_template.xml
create mode 100644 connector_woocommerce/views/res_partner_views.xml
create mode 100644 connector_woocommerce/views/sale_order_view.xml
create mode 100644 connector_woocommerce/views/woocommerce_backend_view.xml
create mode 100644 connector_woocommerce/views/woocommerce_product_template.xml
create mode 120000 setup/connector_woocommerce/odoo/addons/connector_woocommerce
create mode 100644 setup/connector_woocommerce/setup.py
diff --git a/connector_woocommerce/README.rst b/connector_woocommerce/README.rst
new file mode 100644
index 000000000..c7923dbef
--- /dev/null
+++ b/connector_woocommerce/README.rst
@@ -0,0 +1,64 @@
+=====================
+Connector WooCommerce
+=====================
+
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:efb5e8c61863c074f22531f0a6ed6366c9d138be340175ef86002feddcd28e36
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-NuoBiT%2Fodoo--addons-lightgray.png?logo=github
+ :target: https://github.com/NuoBiT/odoo-addons/tree/14.0/connector_woocommerce
+ :alt: NuoBiT/odoo-addons
+
+|badge1| |badge2| |badge3|
+
+Connector WooCommerce
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us to smash it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* NuoBiT Solutions
+* S.L.
+
+Contributors
+~~~~~~~~~~~~
+
+* `NuoBiT `__:
+
+ * Kilian Niubo
+ * Eric Antones
+
+Maintainers
+~~~~~~~~~~~
+
+This module is part of the `NuoBiT/odoo-addons `_ project on GitHub.
+
+You are welcome to contribute.
diff --git a/connector_woocommerce/__init__.py b/connector_woocommerce/__init__.py
new file mode 100644
index 000000000..f24d3e242
--- /dev/null
+++ b/connector_woocommerce/__init__.py
@@ -0,0 +1,2 @@
+from . import components
+from . import models
diff --git a/connector_woocommerce/__manifest__.py b/connector_woocommerce/__manifest__.py
new file mode 100644
index 000000000..d1eaa7dda
--- /dev/null
+++ b/connector_woocommerce/__manifest__.py
@@ -0,0 +1,42 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright NuoBiT Solutions - Eric Antones
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+{
+ "name": "Connector WooCommerce",
+ "version": "14.0.0.1.1",
+ "author": "NuoBiT Solutions, S.L.",
+ "license": "AGPL-3",
+ "category": "Connector",
+ "website": "https://github.com/nuobit/odoo-addons",
+ "external_dependencies": {
+ "python": [
+ "woocommerce",
+ ],
+ },
+ "depends": [
+ "connector_extension_woocommerce",
+ "connector_wordpress",
+ "sale_stock",
+ "website_sale_extra_fields",
+ "website_sale_stock_variant",
+ ],
+ "data": [
+ "data/ir_cron.xml",
+ "data/queue_data.xml",
+ "data/queue_job_function_data.xml",
+ "security/connector_woocommerce.xml",
+ "security/ir.model.access.csv",
+ "views/woocommerce_backend_view.xml",
+ "views/sale_order_view.xml",
+ "views/product_template.xml",
+ "views/woocommerce_product_template.xml",
+ "views/product_attribute.xml",
+ "views/product_attribute_value.xml",
+ "views/product_public_category.xml",
+ "views/product_product.xml",
+ "views/res_partner_views.xml",
+ "views/connector_woocommerce_menu.xml",
+ ],
+ "installable": True,
+}
diff --git a/connector_woocommerce/components/__init__.py b/connector_woocommerce/components/__init__.py
new file mode 100644
index 000000000..53caefad7
--- /dev/null
+++ b/connector_woocommerce/components/__init__.py
@@ -0,0 +1,8 @@
+from . import core
+from . import adapter
+from . import binder
+from . import export_deleter
+from . import exporter
+from . import export_mapper
+from . import importer
+from . import import_mapper
diff --git a/connector_woocommerce/components/adapter.py b/connector_woocommerce/components/adapter.py
new file mode 100644
index 000000000..1dfe6ae09
--- /dev/null
+++ b/connector_woocommerce/components/adapter.py
@@ -0,0 +1,38 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from woocommerce import API as API
+
+from odoo.addons.component.core import AbstractComponent
+
+
+class ConnectorWooCommerceAdapter(AbstractComponent):
+ _name = "connector.woocommerce.adapter"
+ _inherit = [
+ "connector.extension.woocommerce.adapter.crud",
+ "base.woocommerce.connector",
+ ]
+
+ _description = "WooCommerce Adapter (abstract)"
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.wcapi = API(
+ url=self.backend_record.url,
+ consumer_key=self.backend_record.consumer_key,
+ consumer_secret=self.backend_record.consumer_secret,
+ version="wc/v3",
+ verify_ssl=self.backend_record.verify_ssl,
+ timeout=30,
+ )
+
+ def prepare_meta_data(self, data):
+ meta_data = []
+ for field in self._prepare_meta_data_fields():
+ if field in data:
+ meta_data.append({"key": field, "value": data[field]})
+ data.pop(field)
+ return meta_data
+
+ def _prepare_meta_data_fields(self):
+ return []
diff --git a/connector_woocommerce/components/binder.py b/connector_woocommerce/components/binder.py
new file mode 100644
index 000000000..4d72668d4
--- /dev/null
+++ b/connector_woocommerce/components/binder.py
@@ -0,0 +1,10 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo.addons.component.core import AbstractComponent
+
+
+class WooCommerceBinder(AbstractComponent):
+ _name = "woocommerce.binder"
+ _inherit = ["connector.extension.generic.binder", "base.woocommerce.connector"]
+
+ _default_binding_field = "woocommerce_bind_ids"
diff --git a/connector_woocommerce/components/core.py b/connector_woocommerce/components/core.py
new file mode 100644
index 000000000..80afac3e2
--- /dev/null
+++ b/connector_woocommerce/components/core.py
@@ -0,0 +1,12 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import AbstractComponent
+
+
+class BaseWooCommerceConnector(AbstractComponent):
+ _name = "base.woocommerce.connector"
+ _inherit = "base.connector"
+ _collection = "woocommerce.backend"
+
+ _description = "Base WooCommerce Connector Component"
diff --git a/connector_woocommerce/components/export_deleter.py b/connector_woocommerce/components/export_deleter.py
new file mode 100644
index 000000000..9ee23a713
--- /dev/null
+++ b/connector_woocommerce/components/export_deleter.py
@@ -0,0 +1,31 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+import logging
+
+from odoo.addons.component.core import AbstractComponent
+
+_logger = logging.getLogger(__name__)
+
+
+class WooCommerceRecordDirectExportDeleter(AbstractComponent):
+ """Base Deleter for WooCommerce"""
+
+ _name = "woocommerce.record.direct.export.deleter"
+ _inherit = [
+ "connector.extension.record.direct.export.deleter",
+ "base.woocommerce.connector",
+ ]
+
+
+class WooCommerceBatchExportDeleter(AbstractComponent):
+ """The role of a BatchDeleter is to delete for a list of
+ items to delete, then it can either delete them directly or delay
+ the delete of each item separately.
+ """
+
+ _name = "woocommerce.batch.export.deleter"
+ _inherit = [
+ "connector.extension.batch.export.deleter",
+ "base.woocommerce.connector",
+ ]
diff --git a/connector_woocommerce/components/export_mapper.py b/connector_woocommerce/components/export_mapper.py
new file mode 100644
index 000000000..a7d019567
--- /dev/null
+++ b/connector_woocommerce/components/export_mapper.py
@@ -0,0 +1,14 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import AbstractComponent
+
+
+class WooCommerceExportMapper(AbstractComponent):
+ _name = "woocommerce.export.mapper"
+ _inherit = ["connector.extension.export.mapper", "base.woocommerce.connector"]
+
+
+class WooCommerceExportMapChild(AbstractComponent):
+ _name = "woocommerce.map.child.export"
+ _inherit = ["connector.extension.map.child.export", "base.woocommerce.connector"]
diff --git a/connector_woocommerce/components/exporter.py b/connector_woocommerce/components/exporter.py
new file mode 100644
index 000000000..3b9657ff6
--- /dev/null
+++ b/connector_woocommerce/components/exporter.py
@@ -0,0 +1,32 @@
+# Copyright NuoBiT Solutions - Eric Antones
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+import logging
+
+from odoo.addons.component.core import AbstractComponent
+
+_logger = logging.getLogger(__name__)
+
+
+class WooCommerceRecordDirectExporter(AbstractComponent):
+ """Base Exporter for WooCommerce"""
+
+ _name = "woocommerce.record.direct.exporter"
+ _inherit = [
+ "connector.extension.generic.record.direct.exporter",
+ "base.woocommerce.connector",
+ ]
+
+
+class WooCommerceBatchExporter(AbstractComponent):
+ """The role of a BatchExporter is to search for a list of
+ items to export, then it can either export them directly or delay
+ the export of each item separately.
+ """
+
+ _name = "woocommerce.batch.exporter"
+ _inherit = [
+ "connector.extension.generic.batch.exporter",
+ "base.woocommerce.connector",
+ ]
diff --git a/connector_woocommerce/components/import_mapper.py b/connector_woocommerce/components/import_mapper.py
new file mode 100644
index 000000000..44c1f7856
--- /dev/null
+++ b/connector_woocommerce/components/import_mapper.py
@@ -0,0 +1,14 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import AbstractComponent
+
+
+class WooCommerceImportMapper(AbstractComponent):
+ _name = "woocommerce.import.mapper"
+ _inherit = ["connector.extension.import.mapper", "base.woocommerce.connector"]
+
+
+class WooCommerceImportMapChild(AbstractComponent):
+ _name = "woocommerce.map.child.import"
+ _inherit = ["connector.extension.map.child.import", "base.woocommerce.connector"]
diff --git a/connector_woocommerce/components/importer.py b/connector_woocommerce/components/importer.py
new file mode 100644
index 000000000..927648bd8
--- /dev/null
+++ b/connector_woocommerce/components/importer.py
@@ -0,0 +1,31 @@
+# Copyright NuoBiT Solutions - Eric Antones
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+import logging
+
+from odoo.addons.component.core import AbstractComponent
+
+_logger = logging.getLogger(__name__)
+
+
+class WooCommerceDirectImporter(AbstractComponent):
+ """Base importer for WooCommerce"""
+
+ _name = "woocommerce.record.direct.importer"
+ _inherit = [
+ "connector.extension.generic.record.direct.importer",
+ "base.woocommerce.connector",
+ ]
+
+
+class WooCommerceBatchImporter(AbstractComponent):
+ """The role of a BatchImporter is to search for a list of
+ items to import, then it can either import them directly or delay
+ the import of each item separately.
+ """
+
+ _name = "woocommerce.batch.importer"
+ _inherit = [
+ "connector.extension.generic.batch.importer",
+ "base.woocommerce.connector",
+ ]
diff --git a/connector_woocommerce/data/ir_cron.xml b/connector_woocommerce/data/ir_cron.xml
new file mode 100644
index 000000000..6ed9dab55
--- /dev/null
+++ b/connector_woocommerce/data/ir_cron.xml
@@ -0,0 +1,150 @@
+
+
+
+
+ WooCommerce - Export Product Template
+
+
+
+
+ 1
+ days
+ -1
+
+ code
+ model._scheduler_export_product_tmpl()
+
+
+
+ WooCommerce - Export Product Product
+
+
+
+
+ 1
+ days
+ -1
+
+ code
+ model._scheduler_export_products()
+
+
+
+ WooCommerce - Export Sale Orders
+
+
+
+
+ 1
+ days
+ -1
+
+ code
+ model._scheduler_export_sale_orders()
+
+
+
+ WooCommerce - Import Sale Orders
+
+
+
+
+ 1
+ days
+ -1
+
+ code
+ model._scheduler_import_sale_orders()
+
+
+
+ WooCommerce - Export Product Public Category
+
+
+
+
+ 1
+ days
+ -1
+
+ code
+ model._scheduler_export_product_public_category()
+
+
+
+ WooCommerce - Export Product Attribute
+
+
+
+
+ 1
+ days
+ -1
+
+ code
+ model._scheduler_export_product_attribute()
+
+
+
+ WooCommerce - Export Product Product Attribute Value
+
+
+
+
+ 1
+ days
+ -1
+
+ code
+ model._scheduler_export_product_attribute_value()
+
+
+ WooCommerce - Export Product Attachment
+
+
+
+
+ 1
+ days
+ -1
+
+ code
+ model._scheduler_export_product_attachment()
+
+
diff --git a/connector_woocommerce/data/queue_data.xml b/connector_woocommerce/data/queue_data.xml
new file mode 100644
index 000000000..5c3977dd5
--- /dev/null
+++ b/connector_woocommerce/data/queue_data.xml
@@ -0,0 +1,21 @@
+
+
+
+
+ woocommerce_export_record
+
+
+
+ woocommerce_import_batch
+
+
+
+ woocommerce_import_chunk
+
+
+
+ woocommerce_import_record
+
+
+
diff --git a/connector_woocommerce/data/queue_job_function_data.xml b/connector_woocommerce/data/queue_job_function_data.xml
new file mode 100644
index 000000000..7a9c00e39
--- /dev/null
+++ b/connector_woocommerce/data/queue_job_function_data.xml
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+ export_batch
+
+
+
+
+
+ export_record
+
+
+
+
+
+
+ export_record
+
+
+
+
+
+
+ export_record
+
+
+
+
+
+
+ export_record
+
+
+
+
+
+
+ export_record
+
+
+
+
+
+
+ export_record
+
+
+
+
+
+
+ import_batch
+
+
+
+
+
+ import_chunk
+
+
+
+
+
+ import_record
+
+
+
+
diff --git a/connector_woocommerce/i18n/ca.po b/connector_woocommerce/i18n/ca.po
new file mode 100644
index 000000000..a8eed6a27
--- /dev/null
+++ b/connector_woocommerce/i18n/ca.po
@@ -0,0 +1,5645 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * connector_woocommerce
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-08-09 12:55+0000\n"
+"PO-Revision-Date: 2024-08-09 12:55+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__bom_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__bom_count
+msgid "# Bill of Material"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__used_in_bom_count
+msgid "# BoM Where Used"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_num_invoiced
+msgid "# Invoiced in Purchase"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sale_num_invoiced
+msgid "# Invoiced in Sale"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__meeting_count
+msgid "# Meetings"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_variant_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__product_variant_count
+msgid "# Product Variants"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__task_count
+msgid "# Tasks"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__supplier_invoice_count
+msgid "# Vendor Bills"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__used_in_bom_count
+msgid "# of BoM Where is Used"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_attribute__create_variant
+msgid ""
+"- Instantly: All possible variants are created as soon as the attribute and its values are added to a product.\n"
+" - Dynamically: Each variant is created only when its corresponding attributes and values are added to a sales order.\n"
+" - Never: Variants are never created for the attribute.\n"
+" Note: the variants creation mode cannot be changed once the attribute is used on at least one product."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_backend_payment_mode_tax_map_uniq
+msgid ""
+"A binding already exists with the same (backend, woocommerce_payment_mode) "
+"ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_backend_account_tax_tax_map_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_backend_tax_class_tax_map_uniq
+msgid ""
+"A binding already exists with the same (backend, woocommerce_tax_rate_id) "
+"ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_sale_order_line_lol_ext_uniq
+msgid "A binding already exists with the same External (WooCommerce) ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_attribute_external_uniq
+msgid "A binding already exists with the same External (idAttribute) ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_attribute_value_external_uniq
+msgid "A binding already exists with the same External (idAttributevalue) ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_product_external_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_public_category_external_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_template_external_uniq
+msgid "A binding already exists with the same External (idProduct) ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_res_partner_external_uniq
+msgid "A binding already exists with the same External (idResPartner) ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_sale_order_external_uniq
+msgid "A binding already exists with the same External (idSaleOrder) ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_binding_woocommerce_internal_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_attribute_value_woocommerce_internal_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_attribute_woocommerce_internal_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_product_woocommerce_internal_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_public_category_woocommerce_internal_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_template_woocommerce_internal_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_res_partner_woocommerce_internal_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_sale_order_line_woocommerce_internal_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_sale_order_woocommerce_internal_uniq
+msgid "A binding already exists with the same Internal (Odoo) ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__description_sale
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__description_sale
+msgid ""
+"A description of the Product that you want to communicate to your customers."
+" This description will be copied to every Sales Order, Delivery Order and "
+"Customer Invoice/Credit Note"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__variant_description_sale
+msgid ""
+"A description of the product variant that you want to communicate to your "
+"customers.This description will be copied to every Sale Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__type
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__type
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__product_type
+msgid ""
+"A storable product is a product for which you manage stock. The Inventory app has to be installed.\n"
+"A consumable product is a product for which stock is not managed.\n"
+"A service is a non-material product you provide."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__aeat_anonymous_cash_customer
+msgid "AEAT - Anonymous customer"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__aeat_identification_type
+msgid "AEAT Identification type"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__is_abandoned_cart
+msgid "Abandoned Cart"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__access_warning
+msgid "Access warning"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__accessory_product_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__accessory_product_ids
+msgid ""
+"Accessories show up when the customer reviews the cart before payment "
+"(cross-sell strategy)."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__accessory_product_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__accessory_product_ids
+msgid "Accessory Products"
+msgstr "Productes Accesoris"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__qty_delivered_method
+msgid ""
+"According to product configuration, the delivered quantity can be automatically computed by mechanism :\n"
+" - Manual: the quantity is set manually on the line\n"
+" - Analytic From expenses: the quantity is the quantity sum from posted expenses\n"
+" - Timesheet: the quantity is the sum of hours recorded on tasks linked to this sale line\n"
+" - Stock Moves: the quantity comes from confirmed pickings\n"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_account_payable_id
+msgid "Account Payable"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_account_receivable_id
+msgid "Account Receivable"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__account_tax
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__account_tax
+msgid "Account Tax"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_needaction
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_needaction
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_needaction
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_needaction
+msgid "Action Needed"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__active
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__active
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__active
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__active
+msgid "Active"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__active_lang_count
+msgid "Active Lang Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_ids
+msgid "Activities"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_exception_decoration
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_exception_decoration
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_exception_decoration
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_state
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_state
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_state
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_state
+msgid "Activity State"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_type_icon
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_type_icon
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_type_icon
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_type_icon
+msgid "Activity Type Icon"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__additional_info
+msgid "Additional info"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_res_partner__address_hash
+#: model:ir.model.fields,field_description:connector_woocommerce.field_res_users__address_hash
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sage_res_partner__address_hash
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__address_hash
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__woocommerce_address_hash
+msgid "Address Hash"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__type
+msgid "Address Type"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_product_product__inventory_availability
+#: model:ir.model.fields,help:connector_woocommerce.field_product_product__variant_inventory_availability
+#: model:ir.model.fields,help:connector_woocommerce.field_product_template__inventory_availability
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__inventory_availability
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__variant_inventory_availability
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__inventory_availability
+msgid "Adds an inventory availability status on the web product page."
+msgstr ""
+"Afegeix un estat de disponibilitat de inventari a la pĂ gina del producte "
+"web."
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__aeat_identification
+msgid "Aeat Identification"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__alert_time
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__alert_time
+msgid "Alert Time"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__lang
+msgid ""
+"All the emails and documents sent to this contact will be translated in this"
+" language."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_template/adapter.py:0
+#, python-format
+msgid "All variants must belong to the same parent product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__allow_negative_stock
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__allow_negative_stock
+msgid "Allow Negative Stock"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_attribute_value__is_custom
+msgid "Allow users to input custom values for this attribute value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__alternative_product_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__alternative_product_ids
+msgid "Alternative Products"
+msgstr "Productes alternatius"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__amount_undiscounted
+msgid "Amount Before Discount"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__analytic_account_id
+msgid "Analytic Account"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__analytic_tag_ids
+msgid "Analytic Tags"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__analytic_line_ids
+msgid "Analytic lines"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Archived"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__attach_invoice_as_annex
+msgid "Attach Invoice As Annex"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment__attachment_id
+msgid "Attachment"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_attachment_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_attachment_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_attachment_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_attachment_count
+msgid "Attachment Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__attribute_id
+msgid "Attribute"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_product_attribute_value
+msgid "Attribute Value"
+msgstr "Valor de l'atribut"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_attribute_value/adapter.py:0
+#, python-format
+msgid "Attribute id is required to create attribute value on woocommerce."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__auth_number
+msgid "Authorization Number"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__authorized_transaction_ids
+msgid "Authorized Transactions"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__facturae_auto_dates
+msgid "Auto Dates"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__receipt_reminder_email
+msgid ""
+"Automatically send a confirmation email to the vendor X days before the "
+"expected receipt date, asking him to confirm the exact date."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__available_threshold
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__available_threshold
+msgid "Availability Threshold"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__produce_delay
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__produce_delay
+msgid ""
+"Average lead time in days to manufacture this product. In the case of multi-"
+"level BOM, the manufacturing lead times of the components will be added."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__sale_avg_price
+msgid "Avg. Price in Customer Invoices."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__purchase_avg_price
+msgid "Avg. Price in Vendor Bills "
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_avg_price
+msgid "Avg. Purchase Unit Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sale_avg_price
+msgid "Avg. Sale Unit Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__variant_bom_ids
+msgid "BOM Product Variants"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__backend_id
+msgid "Backend"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__backend_id
+msgid "Backend id"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_backend_menu_action
+msgid "Backends"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__bank_account_count
+msgid "Bank"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__bank_ids
+msgid "Banks"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__barcode
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__barcode
+msgid "Barcode"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__barcode_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__barcode_ids
+msgid "Barcodes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__use_time
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__use_time
+msgid "Best Before Time"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__bom_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__bom_ids
+msgid "Bill of Materials"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_binary_attachment_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_binary_attachment_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_binary_attachment_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_binary_attachment_count
+msgid "Binary Attachment Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__is_blacklisted
+msgid "Blacklist"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__mobile_blacklisted
+msgid "Blacklisted Phone Is Mobile"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__phone_blacklisted
+msgid "Blacklisted Phone is Phone"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__bom_line_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__bom_line_ids
+msgid "BoM Components"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__es_libro
+msgid "Book"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_bounce
+msgid "Bounce"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_brand_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__product_brand_id
+msgid "Brand"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid ""
+"By clicking on the buttons,\n"
+" you will initiate the\n"
+" synchronizations\n"
+" with WooCommerce.\n"
+" Note that the import or exports\n"
+" won't be done directly,\n"
+" they will create 'Jobs'\n"
+" executed as soon\n"
+" as possible."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__campaign_id
+msgid "Campaign"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_updatable
+msgid "Can Edit Product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__can_image_1024_be_zoomed
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__can_image_1024_be_zoomed
+msgid "Can Image 1024 be zoomed"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__can_publish
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__can_publish
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__can_publish
+msgid "Can Publish"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__can_image_variant_1024_be_zoomed
+msgid "Can Variant Image 1024 be zoomed"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__can_be_expensed
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__can_be_expensed
+msgid "Can be Expensed"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_ok
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__purchase_ok
+msgid "Can be Purchased"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sale_ok
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sale_ok
+msgid "Can be Sold"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__sale_order__woocommerce_order_state__cancel
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__stock_picking__woocommerce_stock_picking_state__cancel
+msgid "Cancel"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__cart_qty
+msgid "Cart Qty"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__cart_quantity
+msgid "Cart Quantity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__cart_recovery_email_sent
+msgid "Cart recovery email already sent"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_uom_category_id
+msgid "Category"
+msgstr "Categoria"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__website_description
+msgid "Category Description"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__route_from_categ_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__route_from_categ_ids
+msgid "Category Routes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__certifications_count
+msgid "Certifications Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__channel_ids
+msgid "Channels"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Check Connection"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__is_company
+msgid "Check if the contact is a company, otherwise it is a person"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__employee
+msgid "Check this box if this contact is an Employee."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__country_enforce_cities
+msgid ""
+"Check this box to ensure every address created in that country has a 'City' "
+"chosen in the list of the country's cities."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__aeat_anonymous_cash_customer
+msgid "Check this for anonymous cash customer. AEAT communication"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__sii_simplified_invoice
+msgid ""
+"Checking this mark, invoices done to this partner will be sent to SII as "
+"simplified invoices."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__child_id
+msgid "Children Categories"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__chunk_size
+msgid "Chunk Size"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__city
+msgid "City"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__city_id
+msgid "City of Address"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__quality_classification_id
+msgid "Classification"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__client_order_ref_prefix
+msgid "Client Order Reference Prefix"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__html_color
+msgid "Color"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__color
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__color
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__color
+msgid "Color Index"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__combination_indices
+msgid "Combination Indices"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__commercial_partner_id
+msgid "Commercial Entity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__es_registro_mercantil
+msgid "Commercial Registry"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__ref_company_ids
+msgid "Companies that refers to partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__company_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__company_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__company_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__company_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__company_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__company_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__company_id
+msgid "Company"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__certifications_company_count
+msgid "Company Certifications Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__company_name
+msgid "Company Name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__commercial_company_name
+msgid "Company Name Entity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__company_type
+msgid "Company Type"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__partner_gid
+msgid "Company database ID"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__contact_address
+msgid "Complete Address"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__effective_date
+msgid "Completion date of the first delivery order."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_product_attribute_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_product_product_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_product_template_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_res_partner_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_sale_order_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_woocommerce_product_public_category_view_form
+msgid "Connector WooCommerce"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__consumer_key
+msgid "Consumer Key"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__consumer_secret
+msgid "Consumer Secret"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_res_partner
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__child_ids
+msgid "Contact"
+msgstr "Contacte"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__contract_number
+msgid "Contract number"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__contract_ids
+msgid "Contracts"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_method
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__purchase_method
+msgid "Control Policy"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__product_uom_category_id
+msgid ""
+"Conversion between Units of Measure can only occur if they belong to the "
+"same category. The conversion will be made based on the ratios."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__standard_price
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__standard_price
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__purchase_price
+msgid "Cost"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__cost_currency_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__cost_currency_id
+msgid "Cost Currency"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__cost_method
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__cost_method
+msgid "Costing Method"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__payment_token_count
+msgid "Count Payment Token"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__mrp_production_count
+msgid "Count of MO generated"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__message_bounce
+msgid "Counter of the number of bounced emails for this contact"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__country_id
+msgid "Country"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__date_order
+msgid ""
+"Creation date of draft/sent orders,\n"
+"Confirmation date of confirmed orders."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__credit_limit
+msgid "Credit Limit"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__currency_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__currency_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__currency_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__currency_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__currency_id
+msgid "Currency"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/import_mapper.py:0
+#, python-format
+msgid "Currency '%s' is not defined"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__currency_rate
+msgid "Currency Rate"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__qty_available
+msgid ""
+"Current quantity of products.\n"
+"In a context with a single Stock Location, this includes goods stored at this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\n"
+"stored in the Stock Location of the Warehouse of this Shop, or any of its children.\n"
+"Otherwise, this includes goods stored in any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__oxigen_margin_percent
+msgid "Custom %Margin calculated as Margin/Cost"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__custom_message
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__custom_message
+msgid "Custom Message"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__partner_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__order_partner_id
+msgid "Customer"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sale_delay
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sale_delay
+msgid "Customer Lead Time"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_stock_customer
+msgid "Customer Location"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__customer_payment_mode_id
+msgid "Customer Payment Mode"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_payment_term_id
+msgid "Customer Payment Terms"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__access_url
+msgid "Customer Portal URL"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__customer_rank
+msgid "Customer Rank"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__partner_ref
+msgid "Customer Ref"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__client_order_ref
+msgid "Customer Reference"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__taxes_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__taxes_id
+msgid "Customer Taxes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__buyer_ids
+msgid "Customers"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__dn_enabled
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__dn_enabled
+msgid "D/N"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__date
+msgid "Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__signed_on
+msgid "Date of the signature."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__reminder_date_before_receipt
+msgid "Days Before Receipt"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__default_supplierinfo_discount
+msgid "Default Supplier Discount (%)"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__default_supplierinfo_discount2
+msgid "Default Supplier Discount 2 (%)"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__default_supplierinfo_discount3
+msgid "Default Supplier Discount 3 (%)"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_delivery_carrier_id
+msgid "Default delivery method used in sales orders."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__purchase_journal_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sale_journal_id
+msgid "Default journal"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__supplier_taxes_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__supplier_taxes_id
+msgid "Default taxes used when buying the product."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__taxes_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__taxes_id
+msgid "Default taxes used when selling the product."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__uom_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__uom_id
+msgid "Default unit of measure used for all stock operations."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__uom_po_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__uom_po_id
+msgid ""
+"Default unit of measure used for purchase orders. It must be in the same "
+"category as the default unit of measure."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__seller_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__seller_ids
+msgid "Define vendor pricelists."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__trust
+msgid "Degree of trust you have in this debtor"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__qty_delivered_manual
+msgid "Delivered Manually"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__qty_delivered
+msgid "Delivered Quantity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__partner_shipping_id
+msgid "Delivery Address"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__amount_delivery
+msgid "Delivery Amount"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__commitment_date
+msgid "Delivery Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__delivery_message
+msgid "Delivery Message"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_delivery_carrier_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__carrier_id
+msgid "Delivery Method"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__delivery_count
+msgid "Delivery Orders"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__delivery_rating_success
+msgid "Delivery Rating Success"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__delivery_set
+msgid "Delivery Set"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__recompute_delivery_price
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__recompute_delivery_price
+msgid "Delivery cost should be recomputed"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__expected_date
+msgid ""
+"Delivery date you can promise to the customer, computed from the minimum "
+"lead time of the order lines in case of Service products. In case of "
+"shipping, the shipping policy of the order will be taken into account to "
+"either use the minimum or maximum lead time of the order lines."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__sale_delay
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__sale_delay
+msgid ""
+"Delivery lead time, in days. It's the number of days, promised to the "
+"customer, between the confirmation of the sales order and the delivery."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__route_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__route_ids
+msgid ""
+"Depending on the modules installed, this will allow you to define the route "
+"of the product: whether it will be bought, manufactured, replenished on "
+"order, etc."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__name
+msgid "Description"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_description
+msgid "Description for the website"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__description_pickingout
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__description_pickingout
+msgid "Description on Delivery Orders"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__description_picking
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__description_picking
+msgid "Description on Picking"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__description_pickingin
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__description_pickingin
+msgid "Description on Receptions"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__destination
+msgid "Destination"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_attribute__sequence
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_attribute_value__sequence
+msgid "Determine the display order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__website_sequence
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__website_sequence
+msgid "Determine the display order in the Website E-commerce"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order_line__discount
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__discount
+msgid "Discount (%)"
+msgstr "Descompte (%)"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__discount_pricelist_id
+msgid "Discount Pricelist"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attribute__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attribute_value__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_public_category__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_res_partner__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_stock_picking__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_binding__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__display_name
+msgid "Display Name"
+msgstr "Nom a mostrar"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__display_qty_widget
+msgid "Display Qty Widget"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__display_type
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__display_type
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__display_type
+msgid "Display Type"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__visible_project
+msgid "Display project"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__document_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__document_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__quality_document_ids
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.product_product_view_form_easy_inherit_connector_woocommerce
+msgid "Documents"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__woocommerce_backend__use_main_product_image__no
+msgid "Don't use main image"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__sale_order__woocommerce_order_state__done
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__stock_picking__woocommerce_stock_picking_state__done
+msgid "Done"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__is_downpayment
+msgid ""
+"Down payments are made when creating invoices from a sales order. They are "
+"not copied when duplicating a sales order."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#, python-format
+msgid "Duplicated field %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__effective_date
+msgid "Effective Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__partner_share
+msgid ""
+"Either customer (not a user), either shared user. Indicated the current "
+"partner is a customer without access or with a limited access created for "
+"sharing data."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__email
+msgid "Email"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__email_bounced
+msgid "Email Bounced"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__email_score
+msgid "Email Score"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__employee
+msgid "Employee"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__country_enforce_cities
+msgid "Enforce Cities"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__tracking
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__tracking
+msgid "Ensure the traceability of a storable product in your warehouse."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__sale_invoicing_exclude_from_invoicing
+msgid "Exclude from invoicing"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__expected_date
+msgid "Expected Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__expected_margin
+msgid "Expected Margin"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__expected_margin_rate
+msgid "Expected Margin (%)"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sale_expected
+msgid "Expected Sale"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__expected_margin
+msgid "Expected Sale - Normal Cost"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__sales_gap
+msgid "Expected Sale - Turn Over"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__expected_margin_rate
+msgid "Expected margin * 100 / Expected Sale"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__property_account_expense_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__property_account_expense_id
+msgid "Expense Account"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__expense_ids
+msgid "Expenses"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__expense_policy
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__expense_policy
+msgid ""
+"Expenses and vendor bills can be re-invoiced to a customer.With this option,"
+" a validated expense can be re-invoice to a customer at its cost or sales "
+"price."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__validity_date
+msgid "Expiration"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__use_expiration_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__use_expiration_date
+msgid "Expiration Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__expiration_time
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__expiration_time
+msgid "Expiration Time"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Export Product Attribute Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Export Product Attribute Value Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Export Product Public Categories Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Export Product Template Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__export_product_tmpl_since_date
+msgid "Export Product Templates Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__export_product_attribute_value_since_date
+msgid "Export Product attribute values Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__export_product_attribute_since_date
+msgid "Export Product attributes Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__export_product_public_category_since_date
+msgid "Export Product public category Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__export_products_since_date
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Export Products Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__export_sale_orders_since_date
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Export Sale Orders Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Export in background"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_external_objects_menu
+msgid "External Objects"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_external_sale_order_menu
+msgid "External Orders"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_external_partner_menu
+msgid "External Partners"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_external_product_attribute_value_menu
+msgid "External Product Attribute Values"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_external_product_attribute_menu
+msgid "External Product Attributes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_external_product_public_category_menu
+msgid "External Product Public Categories"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_external_product_template_menu
+msgid "External Product Templates"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_external_product_variant_menu
+msgid "External Product product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_template_image_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__product_template_image_ids
+msgid "Extra Product Media"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_variant_image_ids
+msgid "Extra Variant Images"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__facturae
+msgid "Factura electrĂłnica"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__facturae_version
+msgid "Facturae Version"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__failed_message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__failed_message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__failed_message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__failed_message_ids
+msgid "Failed Messages"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__fax
+msgid "Fax"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__phone_sanitized
+msgid ""
+"Field used to store sanitized phone number. Helps speeding up searches and "
+"comparisons."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__carrier_id
+msgid "Fill this field if you plan to invoice the shipping based on picking."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__valid_mandate_id
+msgid "First Valid Mandate"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__firstname
+msgid "First name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_account_position_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__fiscal_position_id
+msgid "Fiscal Position"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__fiscal_position_id
+msgid ""
+"Fiscal positions are used to adapt taxes and accounts for particular "
+"customers or sales orders/invoices.The default value comes from the "
+"customer."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__fix_price
+msgid "Fix Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_follower_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_follower_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_follower_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_follower_ids
+msgid "Followers"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_channel_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_channel_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_channel_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_channel_ids
+msgid "Followers (Channels)"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_partner_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_partner_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_partner_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_partner_ids
+msgid "Followers (Partners)"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__activity_type_icon
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__activity_type_icon
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__activity_type_icon
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__forecast_expected_date
+msgid "Forecast Expected Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__virtual_available
+msgid "Forecast Quantity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__virtual_available
+msgid ""
+"Forecast quantity (computed as Quantity On Hand - Outgoing + Incoming)\n"
+"In a context with a single Stock Location, this includes goods stored in this location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods stored in any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__free_qty
+msgid ""
+"Forecast quantity (computed as Quantity On Hand - reserved quantity)\n"
+"In a context with a single Stock Location, this includes goods stored in this location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods stored in any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__virtual_available
+msgid "Forecasted Quantity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__email_formatted
+msgid "Format email address \"Name \""
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__email_formatted
+msgid "Formatted Email"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__free_qty_today
+msgid "Free Qty Today"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__free_qty
+msgid "Free To Use Quantity "
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__project_id
+msgid "Generated Project"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__purchase_line_ids
+msgid "Generated Purchase Lines"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__task_id
+msgid "Generated Task"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__partner_latitude
+msgid "Geo Latitude"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__partner_longitude
+msgid "Geo Longitude"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__packaging_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__packaging_ids
+msgid "Gives the different ways to package the same product."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_public_category__sequence
+msgid "Gives the sequence order when displaying a list of product categories."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__sequence
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__sequence
+msgid "Gives the sequence order when displaying a product list"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__hs_code
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__hs_code
+msgid "HS Code"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__has_attributes
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__has_attributes
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__has_attributes
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__has_attributes
+msgid "Has Attributes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__show_update_pricelist
+msgid "Has Pricelist Changed"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__has_unreconciled_entries
+msgid "Has Unreconciled Entries"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__show_json_popover
+msgid "Has late picking"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_attribute_value__html_color
+msgid ""
+"Here you can set a specific HTML color index (e.g. #ff0000) to display the "
+"color if the attribute type is 'Color'."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attribute__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attribute_value__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_public_category__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_res_partner__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order_line__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_stock_picking__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_binding__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__id
+msgid "ID"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_exception_icon
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_exception_icon
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_exception_icon
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_exception_icon
+msgid "Icon"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__activity_exception_icon
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__activity_exception_icon
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__activity_exception_icon
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__aeat_identification
+msgid "Identification for AEAT purposes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__message_needaction
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__message_unread
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__message_needaction
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__message_unread
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__message_needaction
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__message_unread
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__message_needaction
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__message_unread
+msgid "If checked, new messages require your attention."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__message_has_error
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__message_has_sms_error
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__message_has_error
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__message_has_sms_error
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__message_has_error
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__message_has_sms_error
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__message_has_error
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__sale_invoicing_grouping_criteria_id
+msgid "If empty, company default (if any) or default will be applied."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__team_id
+msgid ""
+"If set, this Sales Team will be used for sales and assignments related to "
+"this partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__is_blacklisted
+msgid ""
+"If the email address is on the blacklist, the contact won't receive mass "
+"mailing anymore, from any list"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__phone_sanitized_blacklisted
+msgid ""
+"If the sanitized phone number is on the blacklist, the contact won't receive"
+" mass mailing sms anymore, from any list"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__allow_negative_stock
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__allow_negative_stock
+msgid ""
+"If this option is not active on this product nor on its product category and"
+" that this product is a stockable product, then the validation of the "
+"related stock moves will be blocked if the stock level becomes negative with"
+" the stock move."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__service_to_purchase
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__service_to_purchase
+msgid ""
+"If ticked, each time you sell this product through a SO, a RfQ is "
+"automatically created to buy the product. Tip: don't forget to set a vendor "
+"on the product."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__active
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__active
+msgid ""
+"If unchecked, it will allow you to hide the product without removing it."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__pricelist_id
+msgid "If you change the pricelist, only newly added lines will be affected."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__picking_policy
+msgid ""
+"If you deliver all products at once, the delivery order will be scheduled "
+"based on the greatest product lead time. Otherwise, it will be based on the "
+"shortest."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__not_in_mod347
+msgid ""
+"If you mark this field, this partner will not be included in any AEAT 347 "
+"model report, independently from the total amount of its operations."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_1920
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__image_1920
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__image_1920
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__image_1920
+msgid "Image"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_1024
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__image_1024
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__image_1024
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__image_1024
+msgid "Image 1024"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_128
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__image_128
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__image_128
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__image_128
+msgid "Image 128"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_256
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__image_256
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__image_256
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__image_256
+msgid "Image 256"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_512
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__image_512
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__image_512
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__image_512
+msgid "Image 512"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__import_sale_order_since_date
+msgid "Import Sale Order Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Import Sale Orders Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Import in background"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__in_repair_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__in_repair_ids
+msgid "In Repair"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__standard_price
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__standard_price
+msgid ""
+"In Standard Price & AVCO: value of the product (automatically computed in AVCO).\n"
+" In FIFO: value of the next unit that will leave the stock (automatically computed).\n"
+" Used to value the product when the purchase cost is not known (e.g. inventory adjustment).\n"
+" Used to compute margins on sale orders."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__property_account_income_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__property_account_income_id
+msgid "Income Account"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__incoming_qty
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__incoming_qty
+msgid "Incoming"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__incoterm
+msgid "Incoterm"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__mobile_blacklisted
+msgid ""
+"Indicates if a blacklisted sanitized phone number is a mobile number. Helps "
+"distinguish which number is blacklisted when there is both a "
+"mobile and phone field in a model."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__phone_blacklisted
+msgid ""
+"Indicates if a blacklisted sanitized phone number is a phone number. Helps "
+"distinguish which number is blacklisted when there is both a "
+"mobile and phone field in a model."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__industry_id
+msgid "Industry"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__insured_ident_cardnum
+msgid "Insured identity card number"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__insured_name
+msgid "Insured person's name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__default_code
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__default_code
+msgid "Internal Reference"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__barcode
+msgid "International Article Number used for product identification."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__incoterm
+msgid ""
+"International Commercial Terms are a series of predefined commercial terms "
+"used in international transactions."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__inventory_availability
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__variant_inventory_availability
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__inventory_availability
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__inventory_availability
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__variant_inventory_availability
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__inventory_availability
+msgid "Inventory Availability"
+msgstr "Disponibilitat d’inventari"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__property_stock_inventory
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__property_stock_inventory
+msgid "Inventory Location"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__valuation
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__valuation
+msgid "Inventory Valuation"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__invoice_warn
+msgid "Invoice"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__type
+msgid ""
+"Invoice & Delivery addresses are used in sales orders. Private addresses are"
+" only visible by authorized users."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__partner_invoice_id
+msgid "Invoice Address"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__invoice_batch_email_partner_id
+msgid "Invoice Batch Contact"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__invoice_batch_sending_method
+msgid "Invoice Batch Sending method"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__invoice_count
+msgid "Invoice Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__invoice_lines
+msgid "Invoice Lines"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__invoice_state
+msgid "Invoice State"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__invoice_status
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__invoice_status
+msgid "Invoice Status"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__qty_invoiced
+msgid "Invoiced Quantity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__invoice_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__invoice_ids
+msgid "Invoices"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__invoice_policy
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__invoice_policy
+msgid "Invoicing Policy"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_is_follower
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_is_follower
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_is_follower
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_is_follower
+msgid "Is Follower"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__is_mto
+msgid "Is Mto"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__is_product_variant
+msgid "Is Product Variant"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__is_published
+msgid "Is Published"
+msgstr "EstĂ publicat"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order__is_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__is_woocommerce
+msgid "Is Woocommerce"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__is_company
+msgid "Is a Company"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__is_delivery
+msgid "Is a Delivery"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__is_service
+msgid "Is a Service"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__has_configurable_attributes
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__has_configurable_attributes
+msgid "Is a configurable product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__is_downpayment
+msgid "Is a down payment"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__is_product_variant
+msgid "Is a product variant"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__is_custom
+msgid "Is custom value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__is_expense
+msgid "Is expense"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__is_expired
+msgid "Is expired"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__is_expense
+msgid ""
+"Is true if the sales order line comes from an expense or a vendor bills"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__json_popover
+msgid "JSON data for the popover widget"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__function
+msgid "Job Position"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__journal_item_count
+msgid "Journal Items"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__property_account_income_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__property_account_income_id
+msgid ""
+"Keep this field empty to use the default value from the product category."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__property_account_expense_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__property_account_expense_id
+msgid ""
+"Keep this field empty to use the default value from the product category. If"
+" anglo-saxon accounting with automated valuation method is configured, the "
+"expense account on the product category will be used."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#, python-format
+msgid "Key %s already exists"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__language_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__lang
+msgid "Language"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attribute____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attribute_value____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_public_category____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_res_partner____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_stock_picking____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_binding____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line____last_update
+msgid "Last Modified on"
+msgstr "Ăšltima modificaciĂł el "
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__last_website_so_id
+msgid "Last Online Sales Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__lastname
+msgid "Last name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__calendar_last_notif_ack
+msgid "Last notification marked as read from base Calendar"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_binding__sync_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__sync_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__sync_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sync_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__sync_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sync_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sync_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__sync_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__sync_date
+msgid "Last synchronization date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__last_time_entries_checked
+msgid ""
+"Last time the invoices & payments matching was performed for this partner. "
+"It is set either if there's not at least an unreconciled debit and an "
+"unreconciled credit or if you click the \"Done\" button."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__last_time_entries_checked
+msgid "Latest Invoices & Payments Matching Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__customer_lead
+msgid "Lead Time"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__attribute_line_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__pav_attribute_line_ids
+msgid "Lines"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__linked_line_id
+msgid "Linked Order Line"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__list_price
+msgid "List Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__location_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__location_id
+msgid "Location"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__stock_location_ids
+msgid "Locations"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_main_attachment_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_main_attachment_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_main_attachment_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_main_attachment_id
+msgid "Main Attachment"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__barcode
+msgid "Main barcode"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__valuation
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__valuation
+msgid ""
+"Manual: The accounting entries to value the inventory are not posted automatically.\n"
+" Automated: An accounting entry is automatically created to value the inventory when a product enters or leaves the company.\n"
+" "
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__service_type
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__service_type
+msgid ""
+"Manually set quantities on order: Invoice based on the manually entered quantity, without creating an analytic account.\n"
+"Timesheets on contract: Invoice based on the tracked hours on the related timesheet.\n"
+"Create a task and track hours: Create a task on the sales order validation and track the work hours."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__mrp_product_qty
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__mrp_product_qty
+msgid "Manufactured"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__produce_delay
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__produce_delay
+msgid "Manufacturing Lead Time"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Mappings"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__margin
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__margin
+msgid "Margin"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__margin_percent
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__oxigen_margin_percent
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__margin_percent
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__oxigen_margin_percent
+msgid "Margin (%)"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__date_from
+msgid "Margin Date From"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__date_to
+msgid "Margin Date To"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__medium_id
+msgid "Medium"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__meeting_ids
+msgid "Meetings"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_has_error
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_has_error
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_has_error
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_has_error
+msgid "Message Delivery error"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__invoice_warn_msg
+msgid "Message for Invoice"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__purchase_warn_msg
+msgid "Message for Purchase Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_line_warn_msg
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__purchase_line_warn_msg
+msgid "Message for Purchase Order Line"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sale_warn_msg
+msgid "Message for Sales Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sale_line_warn_msg
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sale_line_warn_msg
+msgid "Message for Sales Order Line"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__picking_warn_msg
+msgid "Message for Stock Picking"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_ids
+msgid "Messages"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__qty_delivered_method
+msgid "Method to update delivered qty"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__orderpoint_ids
+msgid "Minimum Stock Rules"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_backend__sync_offset
+msgid ""
+"Minutes to start the synchronization before(negative)/after(positive) the "
+"last one"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__mobile
+msgid "Mobile"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/adapter.py:0
+#, python-format
+msgid "More than one order found with the same id: %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/importer.py:0
+#, python-format
+msgid "More than one product found with sku %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_attribute_value/adapter.py:0
+#, python-format
+msgid "More than one product parent found"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_product/adapter.py:0
+#: code:addons/connector_woocommerce/models/product_template/adapter.py:0
+#, python-format
+msgid "More than one simple product found with the same id: %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#, python-format
+msgid "Multiple values found for '%s'"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__my_activity_date_deadline
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__my_activity_date_deadline
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__my_activity_date_deadline
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__my_activity_date_deadline
+msgid "My Activity Deadline"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__nos_enabled
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__nos_enabled
+msgid "NOS"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__name
+msgid "Name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__name_short
+msgid "Name Short"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__signed_by
+msgid "Name of the person that signed the SO."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_date_deadline
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_date_deadline
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_date_deadline
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_summary
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_summary
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_summary
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_summary
+msgid "Next Activity Summary"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_type_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_type_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_type_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_type_id
+msgid "Next Activity Type"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__normal_cost
+msgid "Normal Cost"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__purchase_gap
+msgid "Normal Cost - Total Cost"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__email_normalized
+msgid "Normalized Email"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#, python-format
+msgid "Not equal operation not supported for non boolean fields"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__not_in_mod347
+msgid "Not included in 347 report"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_public_category/product_public_category.py:0
+#, python-format
+msgid ""
+"Not supported: It's not possible delete a category '%s' with WooCommerce "
+"bindings if it has children with WooCommerce bindings. Delete first the "
+"children %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_public_category/product_public_category.py:0
+#, python-format
+msgid ""
+"Not supported: It's not possible delete more than one category with "
+"WooCommerce bindings at the same time"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__comment
+msgid "Notes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_needaction_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_needaction_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_needaction_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_needaction_counter
+msgid "Number of Actions"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__mandate_count
+msgid "Number of Mandates"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__purchase_order_count
+msgid "Number of Purchase Order Generated"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__repair_count
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__repair_count
+msgid "Number of Repair Orders where the product appears as a Part"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__expiration_time
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__expiration_time
+msgid ""
+"Number of days after the receipt of the products (from the vendor or in "
+"stock after production) after which the goods may become dangerous and must "
+"not be consumed. It will be computed on the lot/serial number."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__alert_time
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__alert_time
+msgid ""
+"Number of days before the Expiration Date after which an alert should be "
+"raised on the lot/serial number. It will be computed on the lot/serial "
+"number."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__removal_time
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__removal_time
+msgid ""
+"Number of days before the Expiration Date after which the goods should be "
+"removed from the stock. It will be computed on the lot/serial number."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__use_time
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__use_time
+msgid ""
+"Number of days before the Expiration Date after which the goods starts "
+"deteriorating, without being dangerous yet. It will be computed on the "
+"lot/serial number."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__customer_lead
+msgid ""
+"Number of days between the order confirmation and the shipping of the "
+"products to the customer"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__reminder_date_before_receipt
+msgid "Number of days to send reminder email before the promised receipt date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_has_error_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_has_error_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_has_error_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_has_error_counter
+msgid "Number of errors"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__purchase_line_count
+msgid "Number of generated purchase items"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__message_needaction_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__message_needaction_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__message_needaction_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__message_has_error_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__message_has_error_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__message_has_error_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__pricelist_item_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__pricelist_item_count
+msgid "Number of price rules"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_backend__page_size
+msgid "Number of records to fetch at a time. Max: 100"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__message_unread_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__message_unread_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__message_unread_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__message_unread_counter
+msgid "Number of unread messages"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__oficina_contable
+msgid "Oficina contable"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__service_tracking
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__service_tracking
+msgid ""
+"On Sales order confirmation, this product can generate a project and/or task. From those, you can track the service you are selling.\n"
+" 'In sale order's project': Will use the sale order's configured project if defined or fallback to creating a new project based on the selected template."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__purchase_method
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__purchase_method
+msgid ""
+"On ordered quantities: Control bills based on ordered quantities.\n"
+"On received quantities: Control bills based on received quantities."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__on_time_rate
+msgid "On-Time Delivery Rate"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__require_payment
+msgid "Online Payment"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__require_signature
+msgid "Online Signature"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__only_services
+msgid "Only Services"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_template/export_mapper.py:0
+#, python-format
+msgid ""
+"Only one tax is allowed per product. Please review taxes in product {%s} %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#, python-format
+msgid "Operator %s not supported"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#, python-format
+msgid "Operator '%(OPERATOR)s' only supports tuples or lists, not %(TYPES)s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__opportunity_ids
+msgid "Opportunities"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__opportunity_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__opportunity_id
+msgid "Opportunity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__sale_order_option_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__sale_order_option_ids
+msgid "Optional Products Lines"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__option_line_ids
+msgid "Options Linked"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__date_order
+msgid "Order Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__date_order_tz
+msgid "Order Date TZ"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__order_line
+msgid "Order Lines"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__website_order_line
+msgid "Order Lines displayed on Website"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__woocommerce_order_line_ids
+msgid "Order Lines in WooCommerce sale orders"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__website_order_line
+msgid ""
+"Order Lines to be displayed on the website. They should not be used for "
+"computation purpose."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__order_id
+msgid "Order Reference"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__state
+msgid "Order Status"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Order Tax"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__odoo_id
+msgid "Order line"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__invoice_policy
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__invoice_policy
+msgid ""
+"Ordered Quantity: Invoice quantities ordered by the customer.\n"
+"Delivered Quantity: Invoice quantities delivered to the customer."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__origin
+msgid "Origin"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Other Info"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__outgoing_qty
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__outgoing_qty
+msgid "Outgoing"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__on_time_rate
+msgid ""
+"Over the past x days; the number of products received on time divided by the"
+" number of ordered products.x is either the System Parameter "
+"purchase_stock.on_time_delivery_days or the default 365"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_packaging
+msgid "Package"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__es_folio
+msgid "Page"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__page_size
+msgid "Page Size"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/backend/backend.py:0
+#, python-format
+msgid "Page size must be less than 100"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_product/adapter.py:0
+#, python-format
+msgid "Params required"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__parent_id
+msgid "Parent Category"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__parent_path
+msgid "Parent Path"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__parent_name
+msgid "Parent name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__parents_and_self
+msgid "Parents And Self"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.act_window,name:connector_woocommerce.woocommerce_partner_action
+msgid "Partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__same_vat_partner_id
+msgid "Partner with same Tax ID"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__debit_limit
+msgid "Payable Limit"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__payment_mode_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__payment_mode_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__payment_mode_id
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Payment Mode"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__reference
+msgid "Payment Ref."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__payment_term_id
+msgid "Payment Terms"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__payment_token_ids
+msgid "Payment Tokens"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/import_mapper.py:0
+#, python-format
+msgid "Payment method '%s' is not defined on backend"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__phone
+msgid "Phone"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__phone_sanitized_blacklisted
+msgid "Phone Blacklisted"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__plan_to_change_car
+msgid "Plan To Change Car"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__plate_number
+msgid "Plate"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_product_product_view_form
+msgid ""
+"Please note that WooCommerce allows only one image per product variant. "
+"Additional images will not be exported to WooCommerce and will be ignored."
+msgstr "Tingui en compte que WooCommerce només permet una imatge per variant de producte. "
+"Les imatges addicionals seran ignorades no s'exportaran a WooCommerce."
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__policy_number
+msgid "Policy number"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__access_url
+msgid "Portal Access URL"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_backend__client_order_ref_prefix
+msgid "Prefix to add to the client order reference"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__price
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__price
+msgid "Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__property_account_creditor_price_difference
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__property_account_creditor_price_difference
+msgid "Price Difference Account"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__price_reduce
+msgid "Price Reduce"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__price_reduce_taxexcl
+msgid "Price Reduce Tax excl"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__price_reduce_taxinc
+msgid "Price Reduce Tax inc"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__list_price
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__lst_price
+msgid "Price at which the product is sold to customers."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__pricelist_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__pricelist_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_product_pricelist
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__pricelist_id
+msgid "Pricelist"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__sale_order__woocommerce_order_state__processing
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__stock_picking__woocommerce_stock_picking_state__processing
+msgid "Processing"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__procurement_group_id
+msgid "Procurement Group"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_product_product
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_variant_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__product_variant_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_id
+msgid "Product"
+msgstr "Producte"
+
+#. module: connector_woocommerce
+#: model:ir.actions.act_window,name:connector_woocommerce.woocommerce_product_attribute_action
+#: model:ir.model,name:connector_woocommerce.model_product_attribute
+msgid "Product Attribute"
+msgstr "Atribut del producte"
+
+#. module: connector_woocommerce
+#: model:ir.actions.act_window,name:connector_woocommerce.woocommerce_product_attribute_value_action
+msgid "Product Attribute Value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__attribute_line_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__attribute_line_ids
+msgid "Product Attributes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__categ_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__categ_id
+msgid "Product Category"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__product_document_attachment_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__product_document_attachment_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_document_attachment_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__product_document_attachment_ids
+msgid "Product Document Attachment"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__product_image_attachment_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__product_image_attachment_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_image_attachment_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__product_image_attachment_ids
+msgid "Product Image Attachment"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__packaging_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__packaging_ids
+msgid "Product Packages"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.act_window,name:connector_woocommerce.woocommerce_product_public_category_action
+msgid "Product Public Category"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_qty
+msgid "Product Qty"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.act_window,name:connector_woocommerce.woocommerce_product_template_action
+#: model:ir.model,name:connector_woocommerce.model_product_template
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_tmpl_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_template_id
+msgid "Product Template"
+msgstr "Plantilla de producte"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__product_tmpl_ids
+msgid "Product Tmpl"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__type
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__type
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_type
+msgid "Product Type"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_uom_readonly
+msgid "Product Uom Readonly"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__odoo_id
+msgid "Product attribute"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__odoo_id
+msgid "Product attribute value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order_line/import_mapper.py:0
+#, python-format
+msgid ""
+"Product not found in order line. Probably this product has been deleted in "
+"WooCommerce."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/importer.py:0
+#: code:addons/connector_woocommerce/models/sale_order/importer.py:0
+#, python-format
+msgid "Product not found on Odoo"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__odoo_id
+msgid "Product product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__odoo_id
+msgid "Product public category"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Product tax"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__odoo_id
+msgid "Product template"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_template/adapter.py:0
+#, python-format
+msgid "Product type not supported"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__property_stock_production
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__property_stock_production
+msgid "Production Location"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.act_window,name:connector_woocommerce.woocommerce_product_product_action
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_variant_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__product_variant_ids
+msgid "Products"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__project_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__project_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__project_id
+msgid "Project"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__project_template_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__project_template_id
+msgid "Project Template"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__project_id
+msgid "Project generated by the sales order item"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__project_ids
+msgid "Projects"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__project_ids
+msgid "Projects used in this sales order."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__public_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__public_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__public_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__public_description
+msgid "Public Description"
+msgstr "DescripciĂł pĂşblica"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__lst_price
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__lst_price
+msgid "Public Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__public_short_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__public_short_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__public_short_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__public_short_description
+msgid "Public Short Description"
+msgstr "DescripciĂł pĂşblica curta"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__service_to_purchase
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__service_to_purchase
+msgid "Purchase Automatically"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__purchase_contract_count
+msgid "Purchase Contracts"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__description_purchase
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__description_purchase
+msgid "Purchase Description"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_gap
+msgid "Purchase Gap"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__purchase_line_ids
+msgid "Purchase Lines"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__purchase_warn
+msgid "Purchase Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__purchase_order_count
+msgid "Purchase Order Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_order_line_ids
+msgid "Purchase Order Line"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_line_warn
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__purchase_line_warn
+msgid "Purchase Order Line Warning"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__uom_po_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__uom_po_id
+msgid "Purchase Unit of Measure"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__purchase_line_ids
+msgid ""
+"Purchase line generated by this Sales item on order confirmation, or when "
+"the quantity was increased."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchased_product_qty
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__purchased_product_qty
+msgid "Purchased"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_lines_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__purchase_lines_count
+msgid "Purchased products"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__putaway_rule_ids
+msgid "Putaway Rules"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__qty_available_today
+msgid "Qty Available Today"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__qty_to_deliver
+msgid "Qty To Deliver"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_uom_qty
+msgid "Quantity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__qty_available
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__qty_available
+msgid "Quantity On Hand"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__quantity_svl
+msgid "Quantity Svl"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__incoming_qty
+msgid ""
+"Quantity of planned incoming products.\n"
+"In a context with a single Stock Location, this includes goods arriving to this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods arriving to the Stock Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods arriving to any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__outgoing_qty
+msgid ""
+"Quantity of planned outgoing products.\n"
+"In a context with a single Stock Location, this includes goods leaving this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods leaving the Stock Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods leaving any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__visible_qty_configurator
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__visible_qty_configurator
+msgid "Quantity visible in configurator"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__sale_order_template_id
+msgid "Quotation Template"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__rating_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__rating_ids
+msgid "Rating"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__rating_avg
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__rating_avg
+msgid "Rating Average"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__rating_last_feedback
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__rating_last_feedback
+msgid "Rating Last Feedback"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__rating_last_image
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__rating_last_image
+msgid "Rating Last Image"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__rating_last_value
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__rating_last_value
+msgid "Rating Last Value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__rating_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__rating_count
+msgid "Rating count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__expense_policy
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__expense_policy
+msgid "Re-Invoice Expenses"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__visible_expense_policy
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__visible_expense_policy
+msgid "Re-Invoice Policy visible"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__rating_last_feedback
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__rating_last_feedback
+msgid "Reason of the rating"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__receipt_reminder_email
+msgid "Receipt Reminder"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__code
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__ref
+msgid "Reference"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__origin
+msgid "Reference of the document that generated this sales order request."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__parent_id
+msgid "Related Company"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__product_tmpl_ids
+msgid "Related Products"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__helpdesk_ticket_ids
+msgid "Related tickets"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__remaining_hours_available
+msgid "Remaining Hours Available"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__remaining_hours
+msgid "Remaining Hours on SO"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__removal_time
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__removal_time
+msgid "Removal Time"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__reordering_max_qty
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__reordering_max_qty
+msgid "Reordering Max Qty"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__reordering_min_qty
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__reordering_min_qty
+msgid "Reordering Min Qty"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__nbr_reordering_rules
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__nbr_reordering_rules
+msgid "Reordering Rules"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__repair_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__repair_count
+msgid "Repairs"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__require_signature
+msgid ""
+"Request a online signature to the customer in order to confirm orders "
+"automatically."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__require_payment
+msgid ""
+"Request an online payment to the customer in order to confirm orders "
+"automatically."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__odoo_id
+msgid "Res Partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Reset To draft Connection"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__responsible_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__responsible_id
+msgid "Responsible"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_user_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_user_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_user_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_user_id
+msgid "Responsible User"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__website_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_public_category__website_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__website_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__website_id
+msgid "Restrict publishing to this website."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_partner_view_tree
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_attribute_value_view_tree
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_attribute_view_tree
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_product_view_tree
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_public_category_view_tree
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_template_view_tree
+msgid "Resynchronize"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__return_service
+msgid "Return service"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_ribbon_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_ribbon_id
+msgid "Ribbon"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__round_trip_code
+msgid "Round trip code"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__route_id
+msgid "Route"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__route_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__route_ids
+msgid "Routes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__has_available_route_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__has_available_route_ids
+msgid "Routes can be selected on this product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__is_seo_optimized
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__is_seo_optimized
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__is_seo_optimized
+msgid "SEO optimized"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sii_exempt_cause
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sii_exempt_cause
+msgid "SII Exempt Cause"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_has_sms_error
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_has_sms_error
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_has_sms_error
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sage_bind_ids
+msgid "Sage Bindings"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sale_contract_count
+msgid "Sale Contracts"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__odoo_id
+msgid "Sale Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sale_order_count
+msgid "Sale Order Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__description_sale
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__description_sale
+msgid "Sales Description"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sales_gap
+msgid "Sales Gap"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sale_invoicing_grouping_criteria_id
+msgid "Sales Invoicing Grouping Criteria"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_sale_order
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sale_order_ids
+msgid "Sales Order"
+msgstr "Comanda de venda"
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_sale_order_line
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sale_line_warn
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sale_line_warn
+msgid "Sales Order Line"
+msgstr "LĂnia comanda de venda"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__is_service
+msgid ""
+"Sales Order item should generate a task and/or a project, depending on the "
+"product settings."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__list_price
+msgid "Sales Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__team_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__team_id
+msgid "Sales Team"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sale_warn
+msgid "Sales Warnings"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__user_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__user_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__salesman_id
+msgid "Salesperson"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__phone_sanitized
+msgid "Sanitized Number"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__scheduled_date
+msgid "Scheduled Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__es_seccion
+msgid "Section"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__access_token
+msgid "Security Token"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__project_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__project_id
+msgid ""
+"Select a billable project on which tasks can be created. This setting must "
+"be set for each company."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__project_template_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__project_template_id
+msgid ""
+"Select a billable project to be the skeleton of the new created project when"
+" selling the current product. Its stages and tasks will be duplicated."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__product_brand_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__product_brand_id
+msgid "Select a brand for this product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__project_id
+msgid "Select a non billable project on which tasks can be created."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__categ_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__categ_id
+msgid "Select category for the current product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__customer_payment_mode_id
+msgid "Select the default payment mode for this customer."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__supplier_payment_mode_id
+msgid "Select the default payment mode for this supplier."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__purchase_line_warn
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__sale_line_warn
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__purchase_line_warn
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__sale_line_warn
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__invoice_warn
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__picking_warn
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__purchase_warn
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__sale_warn
+msgid ""
+"Selecting the \"Warning\" option will notify user with the message, "
+"Selecting \"Blocking Message\" will throw an exception with the message and "
+"block the flow. The Message has to be written in the next field."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__self
+msgid "Self"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__product_product__variant_inventory_availability__never
+msgid "Sell regardless of inventory"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__l10n_es_facturae_sending_code
+msgid "Sending method"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__seo_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__seo_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__seo_name
+msgid "Seo name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment__sequence
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__sequence
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__sequence
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sequence
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__sequence
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sequence
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__sequence
+msgid "Sequence"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__service_policy
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__service_policy
+msgid "Service Invoicing Policy"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__is_all_service
+msgid "Service Product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__service_tracking
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__service_tracking
+msgid "Service Tracking"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__service_date
+msgid "Service date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__service_number
+msgid "Service number"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.act_window,name:connector_woocommerce.woocommerce_sale_order_action
+msgid "Services"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__partner_share
+msgid "Share Partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__es_hoja
+msgid "Sheet"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Shipping"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__picking_policy
+msgid "Shipping Policy"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__shipping_product_id
+msgid "Shipping Product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order_line/import_mapper.py:0
+#, python-format
+msgid "Shipping product not found, please define it on Backend"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__show_on_hand_qty_status_button
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__show_on_hand_qty_status_button
+msgid "Show On Hand Qty Status Button"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__product_product__variant_inventory_availability__always
+msgid "Show inventory on website and prevent sales if not enough stock"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__signature
+msgid "Signature"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__signature
+msgid "Signature received through the portal."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__signed_by
+msgid "Signed By"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__signed_on
+msgid "Signed On"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__signup_expiration
+msgid "Signup Expiration"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__signup_token
+msgid "Signup Token"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__signup_type
+msgid "Signup Token Type"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__signup_valid
+msgid "Signup Token is Valid"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__signup_url
+msgid "Signup URL"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sii_enabled
+msgid "Sii Enabled"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_template/adapter.py:0
+#, python-format
+msgid "Simple products can only have one variant"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sii_simplified_invoice
+msgid "Simplified invoices in SII?"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_size_x
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_size_x
+msgid "Size X"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_size_y
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_size_y
+msgid "Size Y"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__slug_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__slug_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__slug_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__slug_name
+msgid "Slug Name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sale_lines_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sales_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sale_lines_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sales_count
+msgid "Sold"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__source_id
+msgid "Source"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__can_be_expensed
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__can_be_expensed
+msgid "Specify whether the product can be selected in an expense."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__cost_method
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__cost_method
+msgid ""
+"Standard Price: The products are valued at their standard cost defined on the product.\n"
+" Average Cost (AVCO): The products are valued at weighted average cost.\n"
+" First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first.\n"
+" "
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__hs_code
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__hs_code
+msgid ""
+"Standardized code for international shipping and goods declaration. At the "
+"moment, only used for the FedEx shipping provider."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__state
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__state_id
+msgid "State"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__state
+msgid "Status"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__activity_state
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__activity_state
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__activity_state
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order_line__stock_move_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__stock_move_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__stock_move_ids
+msgid "Stock Move"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__move_ids
+msgid "Stock Moves"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__picking_warn
+msgid "Stock Picking"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__stock_quant_ids
+msgid "Stock Quant"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__stock_valuation_layer_ids
+msgid "Stock Valuation Layer"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__street
+msgid "Street"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__street2
+msgid "Street2"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__price_subtotal
+msgid "Subtotal"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__alternative_product_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__alternative_product_ids
+msgid ""
+"Suggest alternatives to your customer (upsell strategy). Those products show"
+" up on the product page."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__normal_cost
+msgid "Sum of Multiplication of Cost price and quantity of Vendor Bills"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__turnover
+msgid ""
+"Sum of Multiplication of Invoice price and quantity of Customer Invoices"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__total_cost
+msgid "Sum of Multiplication of Invoice price and quantity of Vendor Bills "
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__sale_expected
+msgid ""
+"Sum of Multiplication of Sale Catalog price and quantity of Customer "
+"Invoices"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__sale_num_invoiced
+msgid "Sum of Quantity in Customer Invoices"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__purchase_num_invoiced
+msgid "Sum of Quantity in Vendor Bills"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_purchase_currency_id
+msgid "Supplier Currency"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__supplier_payment_mode_id
+msgid "Supplier Payment Mode"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__supplier_rank
+msgid "Supplier Rank"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__sync_offset
+msgid "Sync Offset"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Synchronizers"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__category_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__tag_ids
+msgid "Tags"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__task_id
+msgid "Task generated by the sales order item"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__task_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__tasks_count
+msgid "Tasks"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__tasks_ids
+msgid "Tasks associated to this sale"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__tax_class_ids
+msgid "Tax Class"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__vat
+msgid "Tax ID"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__tax_map_ids
+msgid "Tax Mapping"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__amount_by_group
+msgid "Tax amount by group"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_template/export_mapper.py:0
+#, python-format
+msgid "Tax class is not defined on backend for tax %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order_line/import_mapper.py:0
+#, python-format
+msgid "Tax rate %s not found in backend mapping."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__amount_tax
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__tax_id
+msgid "Taxes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__show_update_pricelist
+msgid ""
+"Technical Field, True if the pricelist was changed;\n"
+" this will then display a recomputation button"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__valid_product_template_attribute_line_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__valid_product_template_attribute_line_ids
+msgid "Technical compute"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__display_type
+msgid "Technical field for UX purpose."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__pricelist_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__pricelist_id
+msgid ""
+"Technical field. Used for searching on pricelists, not stored in database."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__purchase_order_line_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__stock_move_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__stock_quant_ids
+msgid "Technical: used to compute quantities."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__note
+msgid "Terms and conditions"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/importer.py:0
+#, python-format
+msgid "The Order %s is already imported -> Update not allowed"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__vat
+msgid ""
+"The Tax Identification Number. Complete it if the contact is subjected to "
+"government taxes. Used in some legal statements."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__amount_delivery
+msgid "The amount without tax."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__analytic_account_id
+msgid "The analytic account related to a sales order."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_attribute_value__attribute_id
+msgid ""
+"The attribute cannot be changed once the value is used on at least one "
+"product."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_public_category/export_mapper.py:0
+#, python-format
+msgid ""
+"The category '%s' has a double space in the name. WooCommerce only allow one"
+" space. Please, remove it before export."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_attribute__display_type
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_attribute_value__display_type
+msgid "The display type used in the Product Configurator."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_account_position_id
+msgid ""
+"The fiscal position determines the taxes/accounts used for this contact."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__website_url
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__website_url
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__website_url
+msgid "The full URL to access the document through the website."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__user_id
+msgid "The internal user in charge of this contact."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_template/export_mapper.py:0
+#, python-format
+msgid ""
+"The inventory availability '%s' is not supported by WooCommerce. Review "
+"product template {%s}%s."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_product/export_mapper.py:0
+#, python-format
+msgid ""
+"The inventory availability '%s' is not supported by WooCommerce. Review "
+"product variant {%s}%s."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/import_mapper.py:0
+#, python-format
+msgid "The partner %s, with id:%s is archived, please, enable it"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__has_unreconciled_entries
+msgid ""
+"The partner has at least one unreconciled debit and credit since last time "
+"the invoices & payments matching was performed."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__reference
+msgid "The payment communication of this sale order."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/importer.py:0
+#: code:addons/connector_woocommerce/models/sale_order/importer.py:0
+#, python-format
+msgid ""
+"The product '%s' in the order has been deleted on WooCommerce. This order "
+"cannot be imported."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__public_categ_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__public_categ_ids
+msgid ""
+"The product will be available in each mentioned eCommerce category. Go to "
+"Shop > Customize and enable 'eCommerce categories' to view all eCommerce "
+"categories."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__currency_rate
+msgid ""
+"The rate of the currency to the currency of rate 1 applicable at the date of"
+" the order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__lst_price
+msgid ""
+"The sale price is managed from the product template. Click on the 'Configure"
+" Variants' button to set the extra attribute prices."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_stock_customer
+msgid ""
+"The stock location used as destination when sending goods to this contact."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_stock_supplier
+msgid ""
+"The stock location used as source when receiving goods from this contact."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/adapter.py:0
+#, python-format
+msgid "There are more than one partner with the same name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__property_account_creditor_price_difference
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__property_account_creditor_price_difference
+msgid ""
+"This account is used in automated inventory valuation to record the price "
+"difference between a purchase order and its related vendor bill when "
+"validating this vendor bill."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_account_payable_id
+msgid ""
+"This account will be used instead of the default one as the payable account "
+"for the current partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_account_receivable_id
+msgid ""
+"This account will be used instead of the default one as the receivable "
+"account for the current partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_purchase_currency_id
+msgid ""
+"This currency will be used, instead of the default one, for purchases from "
+"the current partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_backend__tz
+msgid "This field is used to define in which timezone the backend will work."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_backend__chunk_size
+msgid ""
+"This field is used to define the chunk size to import from the backend."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__email_normalized
+msgid ""
+"This field is used to search on email address as the primary email field can"
+" contain more than strictly an email address."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__campaign_id
+msgid ""
+"This is a name that helps you keep track of your different campaign efforts,"
+" e.g. Fall_Drive, Christmas_Special"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__commitment_date
+msgid ""
+"This is the delivery date promised to the customer. If set, the delivery "
+"order will be scheduled based on this date rather than product lead times."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__medium_id
+msgid "This is the method of delivery, e.g. Postcard, Email, or Banner Ad"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__source_id
+msgid ""
+"This is the source of the link, e.g. Search Engine, another domain, or name "
+"of email list"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__price_extra
+msgid "This is the sum of the extra price of all attributes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_supplier_payment_term_id
+msgid ""
+"This payment term will be used instead of the default one for purchase "
+"orders and vendor bills"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_payment_term_id
+msgid ""
+"This payment term will be used instead of the default one for sales orders "
+"and customer invoices"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_product_pricelist
+msgid ""
+"This pricelist will be used, instead of the default one, for sales to the "
+"current partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__property_stock_production
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__property_stock_production
+msgid ""
+"This stock location will be used, instead of the default one, as the source "
+"location for stock moves generated by manufacturing orders."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__property_stock_inventory
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__property_stock_inventory
+msgid ""
+"This stock location will be used, instead of the default one, as the source "
+"location for stock moves generated when you do an inventory."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__responsible_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__responsible_id
+msgid ""
+"This user will be responsible of the next activities related to logistic "
+"operations for this product."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__default_supplierinfo_discount
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__default_supplierinfo_discount2
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__default_supplierinfo_discount3
+msgid ""
+"This value will be used as the default one, for each new supplierinfo line "
+"depending on that supplier."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__timesheet_encode_uom_id
+msgid ""
+"This will set the unit of measure used to encode timesheet. This will simply provide tools\n"
+" and widgets to help the encoding. All reporting will still be expressed in hours (default value)."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__helpdesk_ticket_active_count
+msgid "Ticket active count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__helpdesk_ticket_count
+msgid "Ticket count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__helpdesk_ticket_count_string
+msgid "Tickets"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__timesheet_encode_uom_id
+msgid "Timesheet Encoding Unit"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__timesheet_total_duration
+msgid "Timesheet Total Duration"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__timesheet_count
+msgid "Timesheet activities"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__timesheet_ids
+msgid "Timesheet activities associated to this sale"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__tz
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__tz
+msgid "Timezone"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__tz_offset
+msgid "Timezone offset"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__title
+msgid "Title"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__qty_to_invoice
+msgid "To Invoice Quantity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__to_review
+msgid "To review"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__amount_total
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__price_total
+msgid "Total"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__total_cost
+msgid "Total Cost"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__total_invoiced
+msgid "Total Invoiced"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__total_margin
+msgid "Total Margin"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__total_margin_rate
+msgid "Total Margin Rate(%)"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__debit
+msgid "Total Payable"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__total_purchase_price
+msgid "Total Purchase Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__credit
+msgid "Total Receivable"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__price_tax
+msgid "Total Tax"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__credit
+msgid "Total amount this customer owes you."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__debit
+msgid "Total amount you have to pay to this vendor."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__total_margin_rate
+msgid "Total margin * 100 / Turnover"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__timesheet_total_duration
+msgid ""
+"Total recorded duration, expressed in the encoding UoM, and rounded to the "
+"unit"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__service_type
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__service_type
+msgid "Track Service"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__tracking
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__tracking
+msgid "Tracking"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__tracking_emails_count
+msgid "Tracking Emails Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__comercial
+msgid "Trade name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__transaction_ids
+msgid "Transactions"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_stock_picking
+msgid "Transfer"
+msgstr "Transferència"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__picking_ids
+msgid "Transfers"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__turnover
+msgid "Turnover"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__total_margin
+msgid "Turnover - Standard price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__type_name
+msgid "Type Name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__activity_exception_decoration
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__activity_exception_decoration
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__activity_exception_decoration
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#, python-format
+msgid "Type {} not supported for operator {}"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__unidad_tramitadora
+msgid "Unidad tramitadora"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__price_unit
+msgid "Unit Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__uom_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__uom_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_uom
+msgid "Unit of Measure"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__uom_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__uom_name
+msgid "Unit of Measure Name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_unread
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_unread
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_unread
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_unread
+msgid "Unread Messages"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_unread_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_unread_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_unread_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__amount_untaxed
+msgid "Untaxed Amount"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__untaxed_amount_to_invoice
+msgid "Untaxed Amount To Invoice"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__untaxed_amount_invoiced
+msgid "Untaxed Invoiced Amount"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__url
+msgid "Url"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__use_main_product_image
+msgid "Use Main Product Image"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__barcode
+msgid "Use a barcode to identify this contact."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__woocommerce_backend__use_main_product_image__first
+msgid "Use main image as first image"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__woocommerce_backend__use_main_product_image__last
+msgid "Use main image as last image"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__is_used_on_products
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__is_used_on_products
+msgid "Used on Products"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__aeat_identification_type
+msgid ""
+"Used to specify an identification type to send to SII. Normally for sending "
+"national and export invoices to SII where the customer country is not Spain,"
+" it would calculate an identification type of 04 if the VAT field is filled "
+"and 06 if it was not. This field is to specify types of 03 through 05, in "
+"the event that the customer doesn't identify with a foreign VAT and instead "
+"with their passport or residential certificate. If there is no value it will"
+" work as before."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__user_ids
+msgid "Users"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__currency_id
+msgid "Utility field to express amount currency"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__valid_product_template_attribute_line_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__valid_product_template_attribute_line_ids
+msgid "Valid Product Attribute Lines"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__name
+msgid "Value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__value_svl
+msgid "Value Svl"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__value_ids
+msgid "Values"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_variant_1920
+msgid "Variant Image"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_variant_1024
+msgid "Variant Image 1024"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_variant_128
+msgid "Variant Image 128"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_variant_256
+msgid "Variant Image 256"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_variant_512
+msgid "Variant Image 512"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__price_extra
+msgid "Variant Price Extra"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__variant_public_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__variant_public_description
+msgid "Variant Public Description"
+msgstr "DescripciĂł PĂşblica de la Variant"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__variant_description_sale
+msgid "Variant Sale Description"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__variant_seller_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__variant_seller_ids
+msgid "Variant Seller"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__create_variant
+msgid "Variants Creation Mode"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_stock_supplier
+msgid "Vendor Location"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_supplier_payment_term_id
+msgid "Vendor Payment Terms"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__supplier_taxes_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__supplier_taxes_id
+msgid "Vendor Taxes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__seller_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__seller_ids
+msgid "Vendors"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__verify_ssl
+msgid "Verify Ssl"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__version
+msgid "Version"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__virtual_available_at_date
+msgid "Virtual Available At Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_published
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_published
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__website_published
+msgid "Visible on current website"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__visitor_ids
+msgid "Visitors"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__volume
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__volume
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__es_tomo
+msgid "Volume"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__volume_uom_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__volume_uom_name
+msgid "Volume unit of measure label"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__warehouse_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__warehouse_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__warehouse_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__warehouse_id
+msgid "Warehouse"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__warning_stock
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__warning_stock
+msgid "Warning"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__website_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__website_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__website_id
+msgid "Website"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__website
+msgid "Website Link"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__website_message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__website_message_ids
+msgid "Website Messages"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__website_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__website_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_name
+msgid "Website Name"
+msgstr "Nom del lloc web"
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_product_public_category
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__public_categ_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__public_categ_ids
+msgid "Website Product Category"
+msgstr "Categoria web del producte"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_sequence
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_sequence
+msgid "Website Sequence"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_url
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_url
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__website_url
+msgid "Website URL"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__website_message_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__website_message_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__website_message_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__website_message_ids
+msgid "Website communication history"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_meta_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__website_meta_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_meta_description
+msgid "Website meta description"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_meta_keywords
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__website_meta_keywords
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_meta_keywords
+msgid "Website meta keywords"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_meta_title
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__website_meta_title
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_meta_title
+msgid "Website meta title"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_meta_og_img
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__website_meta_og_img
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_meta_og_img
+msgid "Website opengraph image"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__website_id
+msgid "Website through which this order was placed."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__weight
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__weight
+msgid "Weight"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__weight_uom_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__weight_uom_name
+msgid "Weight unit of measure label"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__tz
+msgid ""
+"When printing documents and exporting/importing data, time values are computed according to this timezone.\n"
+"If the timezone is not set, UTC (Coordinated Universal Time) is used.\n"
+"Anywhere else, time values are computed according to the time offset of your web client."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__use_expiration_date
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__use_expiration_date
+msgid ""
+"When this box is ticked, you have the possibility to specify dates to manage"
+" product expiration, on the product and on the corresponding lot/serial "
+"numbers"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_menu_root
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_sale_order_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_sale_order_view_filter
+msgid "WooCommerce"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.server,name:connector_woocommerce.ir_cron_woocommerce_export_product_attribute_ir_actions_server
+#: model:ir.cron,cron_name:connector_woocommerce.ir_cron_woocommerce_export_product_attribute
+#: model:ir.cron,name:connector_woocommerce.ir_cron_woocommerce_export_product_attribute
+msgid "WooCommerce - Export Product Attribute"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.server,name:connector_woocommerce.ir_cron_woocommerce_export_product_ir_actions_server
+#: model:ir.cron,cron_name:connector_woocommerce.ir_cron_woocommerce_export_product
+#: model:ir.cron,name:connector_woocommerce.ir_cron_woocommerce_export_product
+msgid "WooCommerce - Export Product Product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.server,name:connector_woocommerce.ir_cron_woocommerce_export_product_attribute_value_ir_actions_server
+#: model:ir.cron,cron_name:connector_woocommerce.ir_cron_woocommerce_export_product_attribute_value
+#: model:ir.cron,name:connector_woocommerce.ir_cron_woocommerce_export_product_attribute_value
+msgid "WooCommerce - Export Product Product Attribute Value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.server,name:connector_woocommerce.ir_cron_woocommerce_export_product_public_category_ir_actions_server
+#: model:ir.cron,cron_name:connector_woocommerce.ir_cron_woocommerce_export_product_public_category
+#: model:ir.cron,name:connector_woocommerce.ir_cron_woocommerce_export_product_public_category
+msgid "WooCommerce - Export Product Public Category"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.server,name:connector_woocommerce.ir_cron_woocommerce_export_product_template_ir_actions_server
+#: model:ir.cron,cron_name:connector_woocommerce.ir_cron_woocommerce_export_product_template
+#: model:ir.cron,name:connector_woocommerce.ir_cron_woocommerce_export_product_template
+msgid "WooCommerce - Export Product Template"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.server,name:connector_woocommerce.ir_cron_woocommerce_export_sale_order_ir_actions_server
+#: model:ir.cron,cron_name:connector_woocommerce.ir_cron_woocommerce_export_sale_order
+#: model:ir.cron,name:connector_woocommerce.ir_cron_woocommerce_export_sale_order
+msgid "WooCommerce - Export Sale Orders"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.server,name:connector_woocommerce.ir_cron_woocommerce_import_sale_order_ir_actions_server
+#: model:ir.cron,cron_name:connector_woocommerce.ir_cron_woocommerce_import_sale_order
+#: model:ir.cron,name:connector_woocommerce.ir_cron_woocommerce_import_sale_order
+msgid "WooCommerce - Import Sale Orders"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_backend
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_binding__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__backend_id
+msgid "WooCommerce Backend"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_backend_account_tax
+msgid "WooCommerce Backend Account Tax"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_backend_payment_mode
+msgid "WooCommerce Backend Payment Mode"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_backend_tax_class
+msgid "WooCommerce Backend Tax Class"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.act_window,name:connector_woocommerce.woocommerce_backend_action
+msgid "WooCommerce Backends"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_binding
+msgid "WooCommerce Binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attribute__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attribute_value__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_public_category__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_res_partner__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_res_users__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sage_res_partner__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order_line__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__woocommerce_bind_ids
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_product_attribute_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_product_product_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_product_template_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_res_partner_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_sale_order_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_woocommerce_product_public_category_view_form
+msgid "WooCommerce Bindings"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_backend__consumer_key
+msgid "WooCommerce Consumer Key"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__woocommerce_idattribute
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__woocommerce_idattribute
+msgid "WooCommerce ID Attribute"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__woocommerce_idattributevalue
+msgid "WooCommerce ID Attribute Value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__woocommerce_idparent
+msgid "WooCommerce ID Parent"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__woocommerce_idproduct
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__woocommerce_idproduct
+msgid "WooCommerce ID Product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__woocommerce_idpubliccategory
+msgid "WooCommerce ID Public Category"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__woocommerce_idrespartner
+msgid "WooCommerce ID Res Partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__woocommerce_idsaleorder
+msgid "WooCommerce ID Sale Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__woocommerce_order_id
+msgid "WooCommerce Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__woocommerce_order_line_id
+msgid "WooCommerce Order Line ID"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__woocommerce_order_line_ids
+msgid "WooCommerce Order Line ids"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__woocommerce_payment_mode
+msgid "WooCommerce Payment Mode"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_product_attribute
+msgid "WooCommerce Product Attribute Binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_attribute_value_view_form
+msgid "WooCommerce Product Attribute Value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_product_attribute_value
+msgid "WooCommerce Product Attribute Value Binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_product_view_form
+msgid "WooCommerce Product Product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_public_category_view_form
+msgid "WooCommerce Product Public Category"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_product_public_category
+msgid "WooCommerce Product Public Category Binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_attribute_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_template_view_form
+msgid "WooCommerce Product Template"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_product_product
+msgid "WooCommerce Product product Binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_product_template
+msgid "WooCommerce Product template Binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_partner_view_form
+msgid "WooCommerce Res Partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_res_partner
+msgid "WooCommerce Res Partner Binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_sale_order
+msgid "WooCommerce Sale Order Binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_sale_order_view_form
+msgid "WooCommerce Sale order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__woocommerce_tax_class
+msgid "WooCommerce Tax Class"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__woocommerce_tax_rate_id
+msgid "WooCommerce Tax Rate ID"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__woocommerce_address_type
+msgid "WooCommerce Type"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_backend__url
+msgid "WooCommerce URL"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order_line__woocommerce_discount
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__woocommerce_discount
+msgid "Woocommerce Discount"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__woocommerce_enabled
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__woocommerce_enabled
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__woocommerce_enabled
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__woocommerce_enabled
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.product_template_search_view_website
+msgid "Woocommerce Enabled"
+msgstr "Habilitat a Woocommerce"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order__woocommerce_order_state
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__woocommerce_order_state
+msgid "Woocommerce Order State"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__woocommerce_sale_order_id
+msgid "Woocommerce Sale Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__woocommerce_status
+msgid "Woocommerce Status"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order__woocommerce_status_write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__woocommerce_status_write_date
+msgid "Woocommerce Status Write Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_stock_picking__woocommerce_stock_picking_state
+msgid "Woocommerce Stock Picking State"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__woocommerce_write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__woocommerce_write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__woocommerce_write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__woocommerce_write_date
+msgid "Woocommerce Write Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__wordpress_backend_id
+msgid "Wordpress Backend"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#, python-format
+msgid "Wrong domain clause format %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_template/product_template.py:0
+#, python-format
+msgid ""
+"You can't change the attributes if the product has a woocommerce binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_template/export_mapper.py:0
+#, python-format
+msgid "You must define a default code for the product %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_product/export_mapper.py:0
+#, python-format
+msgid "You must define an internal reference for the product {%s}'%s'"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__zip_id
+msgid "ZIP Location"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__zip
+msgid "Zip"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.product_product_view_form_easy_inherit_connector_woocommerce
+msgid "eCommerce"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_product_attachment
+msgid "product.attachment"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__amount_by_group
+msgid "type: [(name, amount, base, formated amount, formated base)]"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "woocommerce Backend"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_sale_order_line
+msgid "woocommerce.sale.order.line"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__organo_gestor
+msgid "Órgano gestor"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__organo_proponente
+msgid "Órgano proponente"
+msgstr ""
diff --git a/connector_woocommerce/i18n/es.po b/connector_woocommerce/i18n/es.po
new file mode 100644
index 000000000..6ea955887
--- /dev/null
+++ b/connector_woocommerce/i18n/es.po
@@ -0,0 +1,5645 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * connector_woocommerce
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-08-09 12:54+0000\n"
+"PO-Revision-Date: 2024-08-09 12:54+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__bom_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__bom_count
+msgid "# Bill of Material"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__used_in_bom_count
+msgid "# BoM Where Used"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_num_invoiced
+msgid "# Invoiced in Purchase"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sale_num_invoiced
+msgid "# Invoiced in Sale"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__meeting_count
+msgid "# Meetings"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_variant_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__product_variant_count
+msgid "# Product Variants"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__task_count
+msgid "# Tasks"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__supplier_invoice_count
+msgid "# Vendor Bills"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__used_in_bom_count
+msgid "# of BoM Where is Used"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__expense_count
+msgid "# of Expenses"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_attribute__create_variant
+msgid ""
+"- Instantly: All possible variants are created as soon as the attribute and its values are added to a product.\n"
+" - Dynamically: Each variant is created only when its corresponding attributes and values are added to a sales order.\n"
+" - Never: Variants are never created for the attribute.\n"
+" Note: the variants creation mode cannot be changed once the attribute is used on at least one product."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_backend_payment_mode_tax_map_uniq
+msgid ""
+"A binding already exists with the same (backend, woocommerce_payment_mode) "
+"ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_backend_account_tax_tax_map_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_backend_tax_class_tax_map_uniq
+msgid ""
+"A binding already exists with the same (backend, woocommerce_tax_rate_id) "
+"ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_sale_order_line_lol_ext_uniq
+msgid "A binding already exists with the same External (WooCommerce) ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_attribute_external_uniq
+msgid "A binding already exists with the same External (idAttribute) ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_attribute_value_external_uniq
+msgid "A binding already exists with the same External (idAttributevalue) ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_product_external_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_public_category_external_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_template_external_uniq
+msgid "A binding already exists with the same External (idProduct) ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_res_partner_external_uniq
+msgid "A binding already exists with the same External (idResPartner) ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_sale_order_external_uniq
+msgid "A binding already exists with the same External (idSaleOrder) ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_binding_woocommerce_internal_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_attribute_value_woocommerce_internal_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_attribute_woocommerce_internal_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_product_woocommerce_internal_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_public_category_woocommerce_internal_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_product_template_woocommerce_internal_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_res_partner_woocommerce_internal_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_sale_order_line_woocommerce_internal_uniq
+#: model:ir.model.constraint,message:connector_woocommerce.constraint_woocommerce_sale_order_woocommerce_internal_uniq
+msgid "A binding already exists with the same Internal (Odoo) ID."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__description_sale
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__description_sale
+msgid ""
+"A description of the Product that you want to communicate to your customers."
+" This description will be copied to every Sales Order, Delivery Order and "
+"Customer Invoice/Credit Note"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__variant_description_sale
+msgid ""
+"A description of the product variant that you want to communicate to your "
+"customers.This description will be copied to every Sale Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__type
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__type
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__product_type
+msgid ""
+"A storable product is a product for which you manage stock. The Inventory app has to be installed.\n"
+"A consumable product is a product for which stock is not managed.\n"
+"A service is a non-material product you provide."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__aeat_anonymous_cash_customer
+msgid "AEAT - Anonymous customer"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__aeat_identification_type
+msgid "AEAT Identification type"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__is_abandoned_cart
+msgid "Abandoned Cart"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__access_warning
+msgid "Access warning"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__accessory_product_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__accessory_product_ids
+msgid ""
+"Accessories show up when the customer reviews the cart before payment "
+"(cross-sell strategy)."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__accessory_product_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__accessory_product_ids
+msgid "Accessory Products"
+msgstr "Productos Accesorios"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__qty_delivered_method
+msgid ""
+"According to product configuration, the delivered quantity can be automatically computed by mechanism :\n"
+" - Manual: the quantity is set manually on the line\n"
+" - Analytic From expenses: the quantity is the quantity sum from posted expenses\n"
+" - Timesheet: the quantity is the sum of hours recorded on tasks linked to this sale line\n"
+" - Stock Moves: the quantity comes from confirmed pickings\n"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_account_payable_id
+msgid "Account Payable"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_account_receivable_id
+msgid "Account Receivable"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__account_tax
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__account_tax
+msgid "Account Tax"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_needaction
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_needaction
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_needaction
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_needaction
+msgid "Action Needed"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__active
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__active
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__active
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__active
+msgid "Active"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__active_lang_count
+msgid "Active Lang Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_ids
+msgid "Activities"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_exception_decoration
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_exception_decoration
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_exception_decoration
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_state
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_state
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_state
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_state
+msgid "Activity State"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_type_icon
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_type_icon
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_type_icon
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_type_icon
+msgid "Activity Type Icon"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__additional_info
+msgid "Additional info"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_res_partner__address_hash
+#: model:ir.model.fields,field_description:connector_woocommerce.field_res_users__address_hash
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sage_res_partner__address_hash
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__address_hash
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__woocommerce_address_hash
+msgid "Address Hash"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__type
+msgid "Address Type"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_product_product__inventory_availability
+#: model:ir.model.fields,help:connector_woocommerce.field_product_product__variant_inventory_availability
+#: model:ir.model.fields,help:connector_woocommerce.field_product_template__inventory_availability
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__inventory_availability
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__variant_inventory_availability
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__inventory_availability
+msgid "Adds an inventory availability status on the web product page."
+msgstr ""
+"Añade un estado de disponibilidad en inventario en la página web del "
+"producto."
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__aeat_identification
+msgid "Aeat Identification"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__alert_time
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__alert_time
+msgid "Alert Time"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__lang
+msgid ""
+"All the emails and documents sent to this contact will be translated in this"
+" language."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_template/adapter.py:0
+#, python-format
+msgid "All variants must belong to the same parent product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__allow_negative_stock
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__allow_negative_stock
+msgid "Allow Negative Stock"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_attribute_value__is_custom
+msgid "Allow users to input custom values for this attribute value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__alternative_product_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__alternative_product_ids
+msgid "Alternative Products"
+msgstr "Productos alternativos"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__amount_undiscounted
+msgid "Amount Before Discount"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__analytic_account_id
+msgid "Analytic Account"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__analytic_tag_ids
+msgid "Analytic Tags"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__analytic_line_ids
+msgid "Analytic lines"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Archived"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__attach_invoice_as_annex
+msgid "Attach Invoice As Annex"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment__attachment_id
+msgid "Attachment"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_attachment_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_attachment_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_attachment_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_attachment_count
+msgid "Attachment Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__attribute_id
+msgid "Attribute"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_product_attribute_value
+msgid "Attribute Value"
+msgstr "Valor del Atributo"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_attribute_value/adapter.py:0
+#, python-format
+msgid "Attribute id is required to create attribute value on woocommerce."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__auth_number
+msgid "Authorization Number"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__authorized_transaction_ids
+msgid "Authorized Transactions"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__facturae_auto_dates
+msgid "Auto Dates"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__receipt_reminder_email
+msgid ""
+"Automatically send a confirmation email to the vendor X days before the "
+"expected receipt date, asking him to confirm the exact date."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__available_threshold
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__available_threshold
+msgid "Availability Threshold"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__produce_delay
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__produce_delay
+msgid ""
+"Average lead time in days to manufacture this product. In the case of multi-"
+"level BOM, the manufacturing lead times of the components will be added."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__sale_avg_price
+msgid "Avg. Price in Customer Invoices."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__purchase_avg_price
+msgid "Avg. Price in Vendor Bills "
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_avg_price
+msgid "Avg. Purchase Unit Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sale_avg_price
+msgid "Avg. Sale Unit Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__variant_bom_ids
+msgid "BOM Product Variants"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__backend_id
+msgid "Backend"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__backend_id
+msgid "Backend id"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_backend_menu_action
+msgid "Backends"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__bank_account_count
+msgid "Bank"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__bank_ids
+msgid "Banks"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__barcode
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__barcode
+msgid "Barcode"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__barcode_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__barcode_ids
+msgid "Barcodes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__use_time
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__use_time
+msgid "Best Before Time"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__bom_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__bom_ids
+msgid "Bill of Materials"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_binary_attachment_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_binary_attachment_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_binary_attachment_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_binary_attachment_count
+msgid "Binary Attachment Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__is_blacklisted
+msgid "Blacklist"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__mobile_blacklisted
+msgid "Blacklisted Phone Is Mobile"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__phone_blacklisted
+msgid "Blacklisted Phone is Phone"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__bom_line_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__bom_line_ids
+msgid "BoM Components"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__es_libro
+msgid "Book"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_bounce
+msgid "Bounce"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_brand_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__product_brand_id
+msgid "Brand"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid ""
+"By clicking on the buttons,\n"
+" you will initiate the\n"
+" synchronizations\n"
+" with WooCommerce.\n"
+" Note that the import or exports\n"
+" won't be done directly,\n"
+" they will create 'Jobs'\n"
+" executed as soon\n"
+" as possible."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__campaign_id
+msgid "Campaign"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_updatable
+msgid "Can Edit Product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__can_image_1024_be_zoomed
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__can_image_1024_be_zoomed
+msgid "Can Image 1024 be zoomed"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__can_publish
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__can_publish
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__can_publish
+msgid "Can Publish"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__can_image_variant_1024_be_zoomed
+msgid "Can Variant Image 1024 be zoomed"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__can_be_expensed
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__can_be_expensed
+msgid "Can be Expensed"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_ok
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__purchase_ok
+msgid "Can be Purchased"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sale_ok
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sale_ok
+msgid "Can be Sold"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__sale_order__woocommerce_order_state__cancel
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__stock_picking__woocommerce_stock_picking_state__cancel
+msgid "Cancel"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__cart_qty
+msgid "Cart Qty"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__cart_quantity
+msgid "Cart Quantity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__cart_recovery_email_sent
+msgid "Cart recovery email already sent"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_uom_category_id
+msgid "Category"
+msgstr "Categoria"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__website_description
+msgid "Category Description"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__route_from_categ_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__route_from_categ_ids
+msgid "Category Routes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__certifications_count
+msgid "Certifications Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__channel_ids
+msgid "Channels"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Check Connection"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__is_company
+msgid "Check if the contact is a company, otherwise it is a person"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__employee
+msgid "Check this box if this contact is an Employee."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__country_enforce_cities
+msgid ""
+"Check this box to ensure every address created in that country has a 'City' "
+"chosen in the list of the country's cities."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__aeat_anonymous_cash_customer
+msgid "Check this for anonymous cash customer. AEAT communication"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__sii_simplified_invoice
+msgid ""
+"Checking this mark, invoices done to this partner will be sent to SII as "
+"simplified invoices."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__child_id
+msgid "Children Categories"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__chunk_size
+msgid "Chunk Size"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__city
+msgid "City"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__city_id
+msgid "City of Address"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__quality_classification_id
+msgid "Classification"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__client_order_ref_prefix
+msgid "Client Order Reference Prefix"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__html_color
+msgid "Color"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__color
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__color
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__color
+msgid "Color Index"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__combination_indices
+msgid "Combination Indices"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__commercial_partner_id
+msgid "Commercial Entity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__es_registro_mercantil
+msgid "Commercial Registry"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__ref_company_ids
+msgid "Companies that refers to partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__company_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__company_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__company_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__company_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__company_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__company_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__company_id
+msgid "Company"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__certifications_company_count
+msgid "Company Certifications Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__company_name
+msgid "Company Name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__commercial_company_name
+msgid "Company Name Entity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__company_type
+msgid "Company Type"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__partner_gid
+msgid "Company database ID"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__contact_address
+msgid "Complete Address"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__effective_date
+msgid "Completion date of the first delivery order."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_product_attribute_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_product_product_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_product_template_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_res_partner_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_sale_order_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_woocommerce_product_public_category_view_form
+msgid "Connector WooCommerce"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__consumer_key
+msgid "Consumer Key"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__consumer_secret
+msgid "Consumer Secret"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_res_partner
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__child_ids
+msgid "Contact"
+msgstr "Contacto"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__contract_number
+msgid "Contract number"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__contract_ids
+msgid "Contracts"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_method
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__purchase_method
+msgid "Control Policy"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__product_uom_category_id
+msgid ""
+"Conversion between Units of Measure can only occur if they belong to the "
+"same category. The conversion will be made based on the ratios."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__standard_price
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__standard_price
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__purchase_price
+msgid "Cost"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__cost_currency_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__cost_currency_id
+msgid "Cost Currency"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__cost_method
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__cost_method
+msgid "Costing Method"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__payment_token_count
+msgid "Count Payment Token"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__mrp_production_count
+msgid "Count of MO generated"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__message_bounce
+msgid "Counter of the number of bounced emails for this contact"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__country_id
+msgid "Country"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__create_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__create_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__date_order
+msgid ""
+"Creation date of draft/sent orders,\n"
+"Confirmation date of confirmed orders."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__credit_limit
+msgid "Credit Limit"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__currency_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__currency_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__currency_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__currency_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__currency_id
+msgid "Currency"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/import_mapper.py:0
+#, python-format
+msgid "Currency '%s' is not defined"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__currency_rate
+msgid "Currency Rate"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__qty_available
+msgid ""
+"Current quantity of products.\n"
+"In a context with a single Stock Location, this includes goods stored at this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\n"
+"stored in the Stock Location of the Warehouse of this Shop, or any of its children.\n"
+"Otherwise, this includes goods stored in any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__oxigen_margin_percent
+msgid "Custom %Margin calculated as Margin/Cost"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__custom_message
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__custom_message
+msgid "Custom Message"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__partner_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__order_partner_id
+msgid "Customer"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sale_delay
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sale_delay
+msgid "Customer Lead Time"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_stock_customer
+msgid "Customer Location"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__customer_payment_mode_id
+msgid "Customer Payment Mode"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_payment_term_id
+msgid "Customer Payment Terms"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__access_url
+msgid "Customer Portal URL"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__customer_rank
+msgid "Customer Rank"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__partner_ref
+msgid "Customer Ref"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__client_order_ref
+msgid "Customer Reference"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__taxes_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__taxes_id
+msgid "Customer Taxes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__buyer_ids
+msgid "Customers"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__dn_enabled
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__dn_enabled
+msgid "D/N"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__date
+msgid "Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__signed_on
+msgid "Date of the signature."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__reminder_date_before_receipt
+msgid "Days Before Receipt"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__default_supplierinfo_discount
+msgid "Default Supplier Discount (%)"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__default_supplierinfo_discount2
+msgid "Default Supplier Discount 2 (%)"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__default_supplierinfo_discount3
+msgid "Default Supplier Discount 3 (%)"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_delivery_carrier_id
+msgid "Default delivery method used in sales orders."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__purchase_journal_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sale_journal_id
+msgid "Default journal"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__supplier_taxes_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__supplier_taxes_id
+msgid "Default taxes used when buying the product."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__taxes_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__taxes_id
+msgid "Default taxes used when selling the product."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__uom_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__uom_id
+msgid "Default unit of measure used for all stock operations."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__uom_po_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__uom_po_id
+msgid ""
+"Default unit of measure used for purchase orders. It must be in the same "
+"category as the default unit of measure."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__seller_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__seller_ids
+msgid "Define vendor pricelists."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__trust
+msgid "Degree of trust you have in this debtor"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__qty_delivered_manual
+msgid "Delivered Manually"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__qty_delivered
+msgid "Delivered Quantity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__partner_shipping_id
+msgid "Delivery Address"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__amount_delivery
+msgid "Delivery Amount"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__commitment_date
+msgid "Delivery Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__delivery_message
+msgid "Delivery Message"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_delivery_carrier_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__carrier_id
+msgid "Delivery Method"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__delivery_count
+msgid "Delivery Orders"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__delivery_rating_success
+msgid "Delivery Rating Success"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__delivery_set
+msgid "Delivery Set"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__recompute_delivery_price
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__recompute_delivery_price
+msgid "Delivery cost should be recomputed"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__expected_date
+msgid ""
+"Delivery date you can promise to the customer, computed from the minimum "
+"lead time of the order lines in case of Service products. In case of "
+"shipping, the shipping policy of the order will be taken into account to "
+"either use the minimum or maximum lead time of the order lines."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__sale_delay
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__sale_delay
+msgid ""
+"Delivery lead time, in days. It's the number of days, promised to the "
+"customer, between the confirmation of the sales order and the delivery."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__route_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__route_ids
+msgid ""
+"Depending on the modules installed, this will allow you to define the route "
+"of the product: whether it will be bought, manufactured, replenished on "
+"order, etc."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__name
+msgid "Description"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_description
+msgid "Description for the website"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__description_pickingout
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__description_pickingout
+msgid "Description on Delivery Orders"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__description_picking
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__description_picking
+msgid "Description on Picking"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__description_pickingin
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__description_pickingin
+msgid "Description on Receptions"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__destination
+msgid "Destination"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_attribute__sequence
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_attribute_value__sequence
+msgid "Determine the display order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__website_sequence
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__website_sequence
+msgid "Determine the display order in the Website E-commerce"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order_line__discount
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__discount
+msgid "Discount (%)"
+msgstr "Descuento (%)"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__discount_pricelist_id
+msgid "Discount Pricelist"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attribute__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attribute_value__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_public_category__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_res_partner__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_stock_picking__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_binding__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__display_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__display_name
+msgid "Display Name"
+msgstr "Nombre mostrado"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__display_qty_widget
+msgid "Display Qty Widget"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__display_type
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__display_type
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__display_type
+msgid "Display Type"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__visible_project
+msgid "Display project"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__document_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__document_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__quality_document_ids
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.product_product_view_form_easy_inherit_connector_woocommerce
+msgid "Documents"
+msgstr "Documentos"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__woocommerce_backend__use_main_product_image__no
+msgid "Don't use main image"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__sale_order__woocommerce_order_state__done
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__stock_picking__woocommerce_stock_picking_state__done
+msgid "Done"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__is_downpayment
+msgid ""
+"Down payments are made when creating invoices from a sales order. They are "
+"not copied when duplicating a sales order."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#, python-format
+msgid "Duplicated field %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__effective_date
+msgid "Effective Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__partner_share
+msgid ""
+"Either customer (not a user), either shared user. Indicated the current "
+"partner is a customer without access or with a limited access created for "
+"sharing data."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__email
+msgid "Email"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__email_bounced
+msgid "Email Bounced"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__email_score
+msgid "Email Score"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__employee
+msgid "Employee"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__country_enforce_cities
+msgid "Enforce Cities"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__tracking
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__tracking
+msgid "Ensure the traceability of a storable product in your warehouse."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__sale_invoicing_exclude_from_invoicing
+msgid "Exclude from invoicing"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__expected_date
+msgid "Expected Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__expected_margin
+msgid "Expected Margin"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__expected_margin_rate
+msgid "Expected Margin (%)"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sale_expected
+msgid "Expected Sale"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__expected_margin
+msgid "Expected Sale - Normal Cost"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__sales_gap
+msgid "Expected Sale - Turn Over"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__expected_margin_rate
+msgid "Expected margin * 100 / Expected Sale"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__property_account_expense_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__property_account_expense_id
+msgid "Expense Account"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__expense_ids
+msgid "Expenses"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__expense_policy
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__expense_policy
+msgid ""
+"Expenses and vendor bills can be re-invoiced to a customer.With this option,"
+" a validated expense can be re-invoice to a customer at its cost or sales "
+"price."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__validity_date
+msgid "Expiration"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__use_expiration_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__use_expiration_date
+msgid "Expiration Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__expiration_time
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__expiration_time
+msgid "Expiration Time"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Export Product Attribute Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Export Product Attribute Value Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Export Product Public Categories Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Export Product Template Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__export_product_tmpl_since_date
+msgid "Export Product Templates Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__export_product_attribute_value_since_date
+msgid "Export Product attribute values Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__export_product_attribute_since_date
+msgid "Export Product attributes Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__export_product_public_category_since_date
+msgid "Export Product public category Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__export_products_since_date
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Export Products Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__export_sale_orders_since_date
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Export Sale Orders Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Export in background"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_external_objects_menu
+msgid "External Objects"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_external_sale_order_menu
+msgid "External Orders"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_external_partner_menu
+msgid "External Partners"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_external_product_attribute_value_menu
+msgid "External Product Attribute Values"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_external_product_attribute_menu
+msgid "External Product Attributes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_external_product_public_category_menu
+msgid "External Product Public Categories"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_external_product_template_menu
+msgid "External Product Templates"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_external_product_variant_menu
+msgid "External Product product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_template_image_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__product_template_image_ids
+msgid "Extra Product Media"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_variant_image_ids
+msgid "Extra Variant Images"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__facturae
+msgid "Factura electrĂłnica"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__facturae_version
+msgid "Facturae Version"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__failed_message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__failed_message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__failed_message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__failed_message_ids
+msgid "Failed Messages"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__fax
+msgid "Fax"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__phone_sanitized
+msgid ""
+"Field used to store sanitized phone number. Helps speeding up searches and "
+"comparisons."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__carrier_id
+msgid "Fill this field if you plan to invoice the shipping based on picking."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__valid_mandate_id
+msgid "First Valid Mandate"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__firstname
+msgid "First name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_account_position_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__fiscal_position_id
+msgid "Fiscal Position"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__fiscal_position_id
+msgid ""
+"Fiscal positions are used to adapt taxes and accounts for particular "
+"customers or sales orders/invoices.The default value comes from the "
+"customer."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__fix_price
+msgid "Fix Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_follower_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_follower_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_follower_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_follower_ids
+msgid "Followers"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_channel_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_channel_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_channel_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_channel_ids
+msgid "Followers (Channels)"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_partner_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_partner_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_partner_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_partner_ids
+msgid "Followers (Partners)"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__activity_type_icon
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__activity_type_icon
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__activity_type_icon
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__forecast_expected_date
+msgid "Forecast Expected Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__virtual_available
+msgid "Forecast Quantity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__virtual_available
+msgid ""
+"Forecast quantity (computed as Quantity On Hand - Outgoing + Incoming)\n"
+"In a context with a single Stock Location, this includes goods stored in this location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods stored in any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__free_qty
+msgid ""
+"Forecast quantity (computed as Quantity On Hand - reserved quantity)\n"
+"In a context with a single Stock Location, this includes goods stored in this location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods stored in any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__virtual_available
+msgid "Forecasted Quantity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__email_formatted
+msgid "Format email address \"Name \""
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__email_formatted
+msgid "Formatted Email"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__free_qty_today
+msgid "Free Qty Today"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__free_qty
+msgid "Free To Use Quantity "
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__project_id
+msgid "Generated Project"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__purchase_line_ids
+msgid "Generated Purchase Lines"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__task_id
+msgid "Generated Task"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__partner_latitude
+msgid "Geo Latitude"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__partner_longitude
+msgid "Geo Longitude"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__packaging_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__packaging_ids
+msgid "Gives the different ways to package the same product."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_public_category__sequence
+msgid "Gives the sequence order when displaying a list of product categories."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__sequence
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__sequence
+msgid "Gives the sequence order when displaying a product list"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__hs_code
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__hs_code
+msgid "HS Code"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__has_attributes
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__has_attributes
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__has_attributes
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__has_attributes
+msgid "Has Attributes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__show_update_pricelist
+msgid "Has Pricelist Changed"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__has_unreconciled_entries
+msgid "Has Unreconciled Entries"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__show_json_popover
+msgid "Has late picking"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_attribute_value__html_color
+msgid ""
+"Here you can set a specific HTML color index (e.g. #ff0000) to display the "
+"color if the attribute type is 'Color'."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attribute__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attribute_value__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_public_category__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_res_partner__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order_line__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_stock_picking__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_binding__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__id
+msgid "ID"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__im_status
+msgid "IM Status"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_exception_icon
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_exception_icon
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_exception_icon
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_exception_icon
+msgid "Icon"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__activity_exception_icon
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__activity_exception_icon
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__activity_exception_icon
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__aeat_identification
+msgid "Identification for AEAT purposes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__message_needaction
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__message_unread
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__message_needaction
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__message_unread
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__message_needaction
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__message_unread
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__message_needaction
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__message_unread
+msgid "If checked, new messages require your attention."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__message_has_error
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__message_has_sms_error
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__message_has_error
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__message_has_sms_error
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__message_has_error
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__message_has_sms_error
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__message_has_error
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__sale_invoicing_grouping_criteria_id
+msgid "If empty, company default (if any) or default will be applied."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__team_id
+msgid ""
+"If set, this Sales Team will be used for sales and assignments related to "
+"this partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__is_blacklisted
+msgid ""
+"If the email address is on the blacklist, the contact won't receive mass "
+"mailing anymore, from any list"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__phone_sanitized_blacklisted
+msgid ""
+"If the sanitized phone number is on the blacklist, the contact won't receive"
+" mass mailing sms anymore, from any list"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__allow_negative_stock
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__allow_negative_stock
+msgid ""
+"If this option is not active on this product nor on its product category and"
+" that this product is a stockable product, then the validation of the "
+"related stock moves will be blocked if the stock level becomes negative with"
+" the stock move."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__service_to_purchase
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__service_to_purchase
+msgid ""
+"If ticked, each time you sell this product through a SO, a RfQ is "
+"automatically created to buy the product. Tip: don't forget to set a vendor "
+"on the product."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__active
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__active
+msgid ""
+"If unchecked, it will allow you to hide the product without removing it."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__pricelist_id
+msgid "If you change the pricelist, only newly added lines will be affected."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__picking_policy
+msgid ""
+"If you deliver all products at once, the delivery order will be scheduled "
+"based on the greatest product lead time. Otherwise, it will be based on the "
+"shortest."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__not_in_mod347
+msgid ""
+"If you mark this field, this partner will not be included in any AEAT 347 "
+"model report, independently from the total amount of its operations."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_1920
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__image_1920
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__image_1920
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__image_1920
+msgid "Image"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_1024
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__image_1024
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__image_1024
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__image_1024
+msgid "Image 1024"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_128
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__image_128
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__image_128
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__image_128
+msgid "Image 128"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_256
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__image_256
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__image_256
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__image_256
+msgid "Image 256"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_512
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__image_512
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__image_512
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__image_512
+msgid "Image 512"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__import_sale_order_since_date
+msgid "Import Sale Order Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Import Sale Orders Since"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Import in background"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__in_repair_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__in_repair_ids
+msgid "In Repair"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__standard_price
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__standard_price
+msgid ""
+"In Standard Price & AVCO: value of the product (automatically computed in AVCO).\n"
+" In FIFO: value of the next unit that will leave the stock (automatically computed).\n"
+" Used to value the product when the purchase cost is not known (e.g. inventory adjustment).\n"
+" Used to compute margins on sale orders."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__property_account_income_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__property_account_income_id
+msgid "Income Account"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__incoming_qty
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__incoming_qty
+msgid "Incoming"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__incoterm
+msgid "Incoterm"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__mobile_blacklisted
+msgid ""
+"Indicates if a blacklisted sanitized phone number is a mobile number. Helps "
+"distinguish which number is blacklisted when there is both a "
+"mobile and phone field in a model."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__phone_blacklisted
+msgid ""
+"Indicates if a blacklisted sanitized phone number is a phone number. Helps "
+"distinguish which number is blacklisted when there is both a "
+"mobile and phone field in a model."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__industry_id
+msgid "Industry"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__insured_ident_cardnum
+msgid "Insured identity card number"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__insured_name
+msgid "Insured person's name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__default_code
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__default_code
+msgid "Internal Reference"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__barcode
+msgid "International Article Number used for product identification."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__incoterm
+msgid ""
+"International Commercial Terms are a series of predefined commercial terms "
+"used in international transactions."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__inventory_availability
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__variant_inventory_availability
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__inventory_availability
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__inventory_availability
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__variant_inventory_availability
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__inventory_availability
+msgid "Inventory Availability"
+msgstr "Disponibilidad del inventario"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__property_stock_inventory
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__property_stock_inventory
+msgid "Inventory Location"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__valuation
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__valuation
+msgid "Inventory Valuation"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__invoice_warn
+msgid "Invoice"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__type
+msgid ""
+"Invoice & Delivery addresses are used in sales orders. Private addresses are"
+" only visible by authorized users."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__partner_invoice_id
+msgid "Invoice Address"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__invoice_batch_email_partner_id
+msgid "Invoice Batch Contact"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__invoice_batch_sending_method
+msgid "Invoice Batch Sending method"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__invoice_count
+msgid "Invoice Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__invoice_lines
+msgid "Invoice Lines"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__invoice_state
+msgid "Invoice State"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__invoice_status
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__invoice_status
+msgid "Invoice Status"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__qty_invoiced
+msgid "Invoiced Quantity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__invoice_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__invoice_ids
+msgid "Invoices"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__invoice_policy
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__invoice_policy
+msgid "Invoicing Policy"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_is_follower
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_is_follower
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_is_follower
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_is_follower
+msgid "Is Follower"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__is_mto
+msgid "Is Mto"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__is_product_variant
+msgid "Is Product Variant"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__is_published
+msgid "Is Published"
+msgstr "Está publicado"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order__is_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__is_woocommerce
+msgid "Is Woocommerce"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__is_company
+msgid "Is a Company"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__is_delivery
+msgid "Is a Delivery"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__is_service
+msgid "Is a Service"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__has_configurable_attributes
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__has_configurable_attributes
+msgid "Is a configurable product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__is_downpayment
+msgid "Is a down payment"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__is_product_variant
+msgid "Is a product variant"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__is_custom
+msgid "Is custom value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__is_expense
+msgid "Is expense"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__is_expired
+msgid "Is expired"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__is_expense
+msgid ""
+"Is true if the sales order line comes from an expense or a vendor bills"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__json_popover
+msgid "JSON data for the popover widget"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__function
+msgid "Job Position"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__journal_item_count
+msgid "Journal Items"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__property_account_income_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__property_account_income_id
+msgid ""
+"Keep this field empty to use the default value from the product category."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__property_account_expense_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__property_account_expense_id
+msgid ""
+"Keep this field empty to use the default value from the product category. If"
+" anglo-saxon accounting with automated valuation method is configured, the "
+"expense account on the product category will be used."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#, python-format
+msgid "Key %s already exists"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__language_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__lang
+msgid "Language"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attribute____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attribute_value____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_public_category____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_res_partner____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_stock_picking____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_binding____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order____last_update
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line____last_update
+msgid "Last Modified on"
+msgstr "Ăšltima modificaciĂłn el"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__last_website_so_id
+msgid "Last Online Sales Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__write_uid
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__lastname
+msgid "Last name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__calendar_last_notif_ack
+msgid "Last notification marked as read from base Calendar"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_binding__sync_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__sync_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__sync_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sync_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__sync_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sync_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sync_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__sync_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__sync_date
+msgid "Last synchronization date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__last_time_entries_checked
+msgid ""
+"Last time the invoices & payments matching was performed for this partner. "
+"It is set either if there's not at least an unreconciled debit and an "
+"unreconciled credit or if you click the \"Done\" button."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__last_time_entries_checked
+msgid "Latest Invoices & Payments Matching Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__customer_lead
+msgid "Lead Time"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__attribute_line_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__pav_attribute_line_ids
+msgid "Lines"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__linked_line_id
+msgid "Linked Order Line"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__list_price
+msgid "List Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__location_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__location_id
+msgid "Location"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__stock_location_ids
+msgid "Locations"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_main_attachment_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_main_attachment_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_main_attachment_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_main_attachment_id
+msgid "Main Attachment"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__barcode
+msgid "Main barcode"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__valuation
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__valuation
+msgid ""
+"Manual: The accounting entries to value the inventory are not posted automatically.\n"
+" Automated: An accounting entry is automatically created to value the inventory when a product enters or leaves the company.\n"
+" "
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__service_type
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__service_type
+msgid ""
+"Manually set quantities on order: Invoice based on the manually entered quantity, without creating an analytic account.\n"
+"Timesheets on contract: Invoice based on the tracked hours on the related timesheet.\n"
+"Create a task and track hours: Create a task on the sales order validation and track the work hours."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__mrp_product_qty
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__mrp_product_qty
+msgid "Manufactured"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__produce_delay
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__produce_delay
+msgid "Manufacturing Lead Time"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Mappings"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__margin
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__margin
+msgid "Margin"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__margin_percent
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__oxigen_margin_percent
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__margin_percent
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__oxigen_margin_percent
+msgid "Margin (%)"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__date_from
+msgid "Margin Date From"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__date_to
+msgid "Margin Date To"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__medium_id
+msgid "Medium"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__meeting_ids
+msgid "Meetings"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_has_error
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_has_error
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_has_error
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_has_error
+msgid "Message Delivery error"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__invoice_warn_msg
+msgid "Message for Invoice"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__purchase_warn_msg
+msgid "Message for Purchase Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_line_warn_msg
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__purchase_line_warn_msg
+msgid "Message for Purchase Order Line"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sale_warn_msg
+msgid "Message for Sales Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sale_line_warn_msg
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sale_line_warn_msg
+msgid "Message for Sales Order Line"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__picking_warn_msg
+msgid "Message for Stock Picking"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_ids
+msgid "Messages"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__qty_delivered_method
+msgid "Method to update delivered qty"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__orderpoint_ids
+msgid "Minimum Stock Rules"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_backend__sync_offset
+msgid ""
+"Minutes to start the synchronization before(negative)/after(positive) the "
+"last one"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__mobile
+msgid "Mobile"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/adapter.py:0
+#, python-format
+msgid "More than one order found with the same id: %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/importer.py:0
+#, python-format
+msgid "More than one product found with sku %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_attribute_value/adapter.py:0
+#, python-format
+msgid "More than one product parent found"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_product/adapter.py:0
+#: code:addons/connector_woocommerce/models/product_template/adapter.py:0
+#, python-format
+msgid "More than one simple product found with the same id: %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#, python-format
+msgid "Multiple values found for '%s'"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__my_activity_date_deadline
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__my_activity_date_deadline
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__my_activity_date_deadline
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__my_activity_date_deadline
+msgid "My Activity Deadline"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__nos_enabled
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__nos_enabled
+msgid "NOS"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__name
+msgid "Name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__name_short
+msgid "Name Short"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__signed_by
+msgid "Name of the person that signed the SO."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_date_deadline
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_date_deadline
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_date_deadline
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_summary
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_summary
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_summary
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_summary
+msgid "Next Activity Summary"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_type_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_type_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_type_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_type_id
+msgid "Next Activity Type"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__normal_cost
+msgid "Normal Cost"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__purchase_gap
+msgid "Normal Cost - Total Cost"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__email_normalized
+msgid "Normalized Email"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#, python-format
+msgid "Not equal operation not supported for non boolean fields"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__not_in_mod347
+msgid "Not included in 347 report"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_public_category/product_public_category.py:0
+#, python-format
+msgid ""
+"Not supported: It's not possible delete a category '%s' with WooCommerce "
+"bindings if it has children with WooCommerce bindings. Delete first the "
+"children %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_public_category/product_public_category.py:0
+#, python-format
+msgid ""
+"Not supported: It's not possible delete more than one category with "
+"WooCommerce bindings at the same time"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__comment
+msgid "Notes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_needaction_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_needaction_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_needaction_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_needaction_counter
+msgid "Number of Actions"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__mandate_count
+msgid "Number of Mandates"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__purchase_order_count
+msgid "Number of Purchase Order Generated"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__repair_count
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__repair_count
+msgid "Number of Repair Orders where the product appears as a Part"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__expiration_time
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__expiration_time
+msgid ""
+"Number of days after the receipt of the products (from the vendor or in "
+"stock after production) after which the goods may become dangerous and must "
+"not be consumed. It will be computed on the lot/serial number."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__alert_time
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__alert_time
+msgid ""
+"Number of days before the Expiration Date after which an alert should be "
+"raised on the lot/serial number. It will be computed on the lot/serial "
+"number."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__removal_time
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__removal_time
+msgid ""
+"Number of days before the Expiration Date after which the goods should be "
+"removed from the stock. It will be computed on the lot/serial number."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__use_time
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__use_time
+msgid ""
+"Number of days before the Expiration Date after which the goods starts "
+"deteriorating, without being dangerous yet. It will be computed on the "
+"lot/serial number."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__customer_lead
+msgid ""
+"Number of days between the order confirmation and the shipping of the "
+"products to the customer"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__reminder_date_before_receipt
+msgid "Number of days to send reminder email before the promised receipt date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_has_error_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_has_error_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_has_error_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_has_error_counter
+msgid "Number of errors"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__purchase_line_count
+msgid "Number of generated purchase items"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__message_needaction_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__message_needaction_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__message_needaction_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__message_has_error_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__message_has_error_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__message_has_error_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__pricelist_item_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__pricelist_item_count
+msgid "Number of price rules"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_backend__page_size
+msgid "Number of records to fetch at a time. Max: 100"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__message_unread_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__message_unread_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__message_unread_counter
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__message_unread_counter
+msgid "Number of unread messages"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__oficina_contable
+msgid "Oficina contable"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__service_tracking
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__service_tracking
+msgid ""
+"On Sales order confirmation, this product can generate a project and/or task. From those, you can track the service you are selling.\n"
+" 'In sale order's project': Will use the sale order's configured project if defined or fallback to creating a new project based on the selected template."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__purchase_method
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__purchase_method
+msgid ""
+"On ordered quantities: Control bills based on ordered quantities.\n"
+"On received quantities: Control bills based on received quantities."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__on_time_rate
+msgid "On-Time Delivery Rate"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__require_payment
+msgid "Online Payment"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__require_signature
+msgid "Online Signature"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__only_services
+msgid "Only Services"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_template/export_mapper.py:0
+#, python-format
+msgid ""
+"Only one tax is allowed per product. Please review taxes in product {%s} %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#, python-format
+msgid "Operator %s not supported"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#, python-format
+msgid "Operator '%(OPERATOR)s' only supports tuples or lists, not %(TYPES)s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__opportunity_ids
+msgid "Opportunities"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__opportunity_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__opportunity_id
+msgid "Opportunity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__sale_order_option_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__sale_order_option_ids
+msgid "Optional Products Lines"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__option_line_ids
+msgid "Options Linked"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__date_order
+msgid "Order Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__date_order_tz
+msgid "Order Date TZ"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__order_line
+msgid "Order Lines"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__website_order_line
+msgid "Order Lines displayed on Website"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__woocommerce_order_line_ids
+msgid "Order Lines in WooCommerce sale orders"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__website_order_line
+msgid ""
+"Order Lines to be displayed on the website. They should not be used for "
+"computation purpose."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__order_id
+msgid "Order Reference"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__state
+msgid "Order Status"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Order Tax"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__odoo_id
+msgid "Order line"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__invoice_policy
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__invoice_policy
+msgid ""
+"Ordered Quantity: Invoice quantities ordered by the customer.\n"
+"Delivered Quantity: Invoice quantities delivered to the customer."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__origin
+msgid "Origin"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Other Info"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__outgoing_qty
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__outgoing_qty
+msgid "Outgoing"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__on_time_rate
+msgid ""
+"Over the past x days; the number of products received on time divided by the"
+" number of ordered products.x is either the System Parameter "
+"purchase_stock.on_time_delivery_days or the default 365"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_packaging
+msgid "Package"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__es_folio
+msgid "Page"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__page_size
+msgid "Page Size"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/backend/backend.py:0
+#, python-format
+msgid "Page size must be less than 100"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_product/adapter.py:0
+#, python-format
+msgid "Params required"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__parent_id
+msgid "Parent Category"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__parent_path
+msgid "Parent Path"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__parent_name
+msgid "Parent name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__parents_and_self
+msgid "Parents And Self"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.act_window,name:connector_woocommerce.woocommerce_partner_action
+msgid "Partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__same_vat_partner_id
+msgid "Partner with same Tax ID"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__debit_limit
+msgid "Payable Limit"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__payment_mode_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__payment_mode_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__payment_mode_id
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Payment Mode"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__reference
+msgid "Payment Ref."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__payment_term_id
+msgid "Payment Terms"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__payment_token_ids
+msgid "Payment Tokens"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/import_mapper.py:0
+#, python-format
+msgid "Payment method '%s' is not defined on backend"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__phone
+msgid "Phone"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__phone_sanitized_blacklisted
+msgid "Phone Blacklisted"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__plan_to_change_car
+msgid "Plan To Change Car"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__plate_number
+msgid "Plate"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_product_product_view_form
+msgid ""
+"Please note that WooCommerce allows only one image per product variant. "
+"Additional images will not be exported to WooCommerce and will be ignored."
+msgstr "Tenga en cuenta que WooCommerce solo permite una imagen por variante de producto. "
+"Las imágenes adicionales se ignorarán y no se exportarán a WooCommerce."
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__policy_number
+msgid "Policy number"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__access_url
+msgid "Portal Access URL"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_backend__client_order_ref_prefix
+msgid "Prefix to add to the client order reference"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__price
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__price
+msgid "Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__property_account_creditor_price_difference
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__property_account_creditor_price_difference
+msgid "Price Difference Account"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__price_reduce
+msgid "Price Reduce"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__price_reduce_taxexcl
+msgid "Price Reduce Tax excl"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__price_reduce_taxinc
+msgid "Price Reduce Tax inc"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__list_price
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__lst_price
+msgid "Price at which the product is sold to customers."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__pricelist_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__pricelist_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_product_pricelist
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__pricelist_id
+msgid "Pricelist"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__sale_order__woocommerce_order_state__processing
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__stock_picking__woocommerce_stock_picking_state__processing
+msgid "Processing"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__procurement_group_id
+msgid "Procurement Group"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_product_product
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_variant_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__product_variant_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_id
+msgid "Product"
+msgstr "Producto"
+
+#. module: connector_woocommerce
+#: model:ir.actions.act_window,name:connector_woocommerce.woocommerce_product_attribute_action
+#: model:ir.model,name:connector_woocommerce.model_product_attribute
+msgid "Product Attribute"
+msgstr "Atributo de producto"
+
+#. module: connector_woocommerce
+#: model:ir.actions.act_window,name:connector_woocommerce.woocommerce_product_attribute_value_action
+msgid "Product Attribute Value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__attribute_line_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__attribute_line_ids
+msgid "Product Attributes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__categ_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__categ_id
+msgid "Product Category"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__product_document_attachment_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__product_document_attachment_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_document_attachment_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__product_document_attachment_ids
+msgid "Product Document Attachment"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__product_image_attachment_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__product_image_attachment_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_image_attachment_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__product_image_attachment_ids
+msgid "Product Image Attachment"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__packaging_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__packaging_ids
+msgid "Product Packages"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.act_window,name:connector_woocommerce.woocommerce_product_public_category_action
+msgid "Product Public Category"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_qty
+msgid "Product Qty"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.act_window,name:connector_woocommerce.woocommerce_product_template_action
+#: model:ir.model,name:connector_woocommerce.model_product_template
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_tmpl_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_template_id
+msgid "Product Template"
+msgstr "Plantilla de producto"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__product_tmpl_ids
+msgid "Product Tmpl"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__type
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__type
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_type
+msgid "Product Type"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_uom_readonly
+msgid "Product Uom Readonly"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__odoo_id
+msgid "Product attribute"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__odoo_id
+msgid "Product attribute value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order_line/import_mapper.py:0
+#, python-format
+msgid ""
+"Product not found in order line. Probably this product has been deleted in "
+"WooCommerce."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/importer.py:0
+#: code:addons/connector_woocommerce/models/sale_order/importer.py:0
+#, python-format
+msgid "Product not found on Odoo"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__odoo_id
+msgid "Product product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__odoo_id
+msgid "Product public category"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Product tax"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__odoo_id
+msgid "Product template"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_template/adapter.py:0
+#, python-format
+msgid "Product type not supported"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__property_stock_production
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__property_stock_production
+msgid "Production Location"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.act_window,name:connector_woocommerce.woocommerce_product_product_action
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__product_variant_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__product_variant_ids
+msgid "Products"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__project_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__project_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__project_id
+msgid "Project"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__project_template_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__project_template_id
+msgid "Project Template"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__project_id
+msgid "Project generated by the sales order item"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__project_ids
+msgid "Projects"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__project_ids
+msgid "Projects used in this sales order."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__public_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__public_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__public_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__public_description
+msgid "Public Description"
+msgstr "DescripciĂłn pĂşblica"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__lst_price
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__lst_price
+msgid "Public Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__public_short_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__public_short_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__public_short_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__public_short_description
+msgid "Public Short Description"
+msgstr "DescripciĂłn pĂşblica corta"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__service_to_purchase
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__service_to_purchase
+msgid "Purchase Automatically"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__purchase_contract_count
+msgid "Purchase Contracts"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__description_purchase
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__description_purchase
+msgid "Purchase Description"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_gap
+msgid "Purchase Gap"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__purchase_line_ids
+msgid "Purchase Lines"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__purchase_warn
+msgid "Purchase Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__purchase_order_count
+msgid "Purchase Order Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_order_line_ids
+msgid "Purchase Order Line"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_line_warn
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__purchase_line_warn
+msgid "Purchase Order Line Warning"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__uom_po_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__uom_po_id
+msgid "Purchase Unit of Measure"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__purchase_line_ids
+msgid ""
+"Purchase line generated by this Sales item on order confirmation, or when "
+"the quantity was increased."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchased_product_qty
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__purchased_product_qty
+msgid "Purchased"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__purchase_lines_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__purchase_lines_count
+msgid "Purchased products"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__putaway_rule_ids
+msgid "Putaway Rules"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__qty_available_today
+msgid "Qty Available Today"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__qty_to_deliver
+msgid "Qty To Deliver"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_uom_qty
+msgid "Quantity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__qty_available
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__qty_available
+msgid "Quantity On Hand"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__quantity_svl
+msgid "Quantity Svl"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__incoming_qty
+msgid ""
+"Quantity of planned incoming products.\n"
+"In a context with a single Stock Location, this includes goods arriving to this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods arriving to the Stock Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods arriving to any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__outgoing_qty
+msgid ""
+"Quantity of planned outgoing products.\n"
+"In a context with a single Stock Location, this includes goods leaving this Location, or any of its children.\n"
+"In a context with a single Warehouse, this includes goods leaving the Stock Location of this Warehouse, or any of its children.\n"
+"Otherwise, this includes goods leaving any Stock Location with 'internal' type."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__visible_qty_configurator
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__visible_qty_configurator
+msgid "Quantity visible in configurator"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__sale_order_template_id
+msgid "Quotation Template"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__rating_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__rating_ids
+msgid "Rating"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__rating_avg
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__rating_avg
+msgid "Rating Average"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__rating_last_feedback
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__rating_last_feedback
+msgid "Rating Last Feedback"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__rating_last_image
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__rating_last_image
+msgid "Rating Last Image"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__rating_last_value
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__rating_last_value
+msgid "Rating Last Value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__rating_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__rating_count
+msgid "Rating count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__expense_policy
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__expense_policy
+msgid "Re-Invoice Expenses"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__visible_expense_policy
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__visible_expense_policy
+msgid "Re-Invoice Policy visible"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__rating_last_feedback
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__rating_last_feedback
+msgid "Reason of the rating"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__receipt_reminder_email
+msgid "Receipt Reminder"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__code
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__ref
+msgid "Reference"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__origin
+msgid "Reference of the document that generated this sales order request."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__parent_id
+msgid "Related Company"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__product_tmpl_ids
+msgid "Related Products"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__helpdesk_ticket_ids
+msgid "Related tickets"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__remaining_hours_available
+msgid "Remaining Hours Available"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__remaining_hours
+msgid "Remaining Hours on SO"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__removal_time
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__removal_time
+msgid "Removal Time"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__reordering_max_qty
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__reordering_max_qty
+msgid "Reordering Max Qty"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__reordering_min_qty
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__reordering_min_qty
+msgid "Reordering Min Qty"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__nbr_reordering_rules
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__nbr_reordering_rules
+msgid "Reordering Rules"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__repair_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__repair_count
+msgid "Repairs"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__require_signature
+msgid ""
+"Request a online signature to the customer in order to confirm orders "
+"automatically."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__require_payment
+msgid ""
+"Request an online payment to the customer in order to confirm orders "
+"automatically."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__odoo_id
+msgid "Res Partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Reset To draft Connection"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__responsible_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__responsible_id
+msgid "Responsible"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__activity_user_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__activity_user_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__activity_user_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__activity_user_id
+msgid "Responsible User"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__website_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_public_category__website_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__website_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__website_id
+msgid "Restrict publishing to this website."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_partner_view_tree
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_attribute_value_view_tree
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_attribute_view_tree
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_product_view_tree
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_public_category_view_tree
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_template_view_tree
+msgid "Resynchronize"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__return_service
+msgid "Return service"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_ribbon_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_ribbon_id
+msgid "Ribbon"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__round_trip_code
+msgid "Round trip code"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__route_id
+msgid "Route"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__route_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__route_ids
+msgid "Routes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__has_available_route_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__has_available_route_ids
+msgid "Routes can be selected on this product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__is_seo_optimized
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__is_seo_optimized
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__is_seo_optimized
+msgid "SEO optimized"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sii_exempt_cause
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sii_exempt_cause
+msgid "SII Exempt Cause"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_has_sms_error
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_has_sms_error
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_has_sms_error
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sage_bind_ids
+msgid "Sage Bindings"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sale_contract_count
+msgid "Sale Contracts"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__odoo_id
+msgid "Sale Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sale_order_count
+msgid "Sale Order Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__description_sale
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__description_sale
+msgid "Sales Description"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sales_gap
+msgid "Sales Gap"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sale_invoicing_grouping_criteria_id
+msgid "Sales Invoicing Grouping Criteria"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_sale_order
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sale_order_ids
+msgid "Sales Order"
+msgstr "Pedido de venta"
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_sale_order_line
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sale_line_warn
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sale_line_warn
+msgid "Sales Order Line"
+msgstr "LĂnea de pedido de venta"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__is_service
+msgid ""
+"Sales Order item should generate a task and/or a project, depending on the "
+"product settings."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__list_price
+msgid "Sales Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__team_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__team_id
+msgid "Sales Team"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sale_warn
+msgid "Sales Warnings"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__user_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__user_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__salesman_id
+msgid "Salesperson"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__phone_sanitized
+msgid "Sanitized Number"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__scheduled_date
+msgid "Scheduled Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__es_seccion
+msgid "Section"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__access_token
+msgid "Security Token"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__project_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__project_id
+msgid ""
+"Select a billable project on which tasks can be created. This setting must "
+"be set for each company."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__project_template_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__project_template_id
+msgid ""
+"Select a billable project to be the skeleton of the new created project when"
+" selling the current product. Its stages and tasks will be duplicated."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__product_brand_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__product_brand_id
+msgid "Select a brand for this product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__project_id
+msgid "Select a non billable project on which tasks can be created."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__categ_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__categ_id
+msgid "Select category for the current product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__customer_payment_mode_id
+msgid "Select the default payment mode for this customer."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__supplier_payment_mode_id
+msgid "Select the default payment mode for this supplier."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__purchase_line_warn
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__sale_line_warn
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__purchase_line_warn
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__sale_line_warn
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__invoice_warn
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__picking_warn
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__purchase_warn
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__sale_warn
+msgid ""
+"Selecting the \"Warning\" option will notify user with the message, "
+"Selecting \"Blocking Message\" will throw an exception with the message and "
+"block the flow. The Message has to be written in the next field."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__self
+msgid "Self"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__product_product__variant_inventory_availability__never
+msgid "Sell regardless of inventory"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__l10n_es_facturae_sending_code
+msgid "Sending method"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__seo_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__seo_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__seo_name
+msgid "Seo name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attachment__sequence
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__sequence
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__sequence
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sequence
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__sequence
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sequence
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__sequence
+msgid "Sequence"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__service_policy
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__service_policy
+msgid "Service Invoicing Policy"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__is_all_service
+msgid "Service Product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__service_tracking
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__service_tracking
+msgid "Service Tracking"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__service_date
+msgid "Service date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__service_number
+msgid "Service number"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.act_window,name:connector_woocommerce.woocommerce_sale_order_action
+msgid "Services"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__partner_share
+msgid "Share Partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__es_hoja
+msgid "Sheet"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Shipping"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__picking_policy
+msgid "Shipping Policy"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__shipping_product_id
+msgid "Shipping Product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order_line/import_mapper.py:0
+#, python-format
+msgid "Shipping product not found, please define it on Backend"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__show_on_hand_qty_status_button
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__show_on_hand_qty_status_button
+msgid "Show On Hand Qty Status Button"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__product_product__variant_inventory_availability__always
+msgid "Show inventory on website and prevent sales if not enough stock"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__signature
+msgid "Signature"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__signature
+msgid "Signature received through the portal."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__signed_by
+msgid "Signed By"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__signed_on
+msgid "Signed On"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__signup_expiration
+msgid "Signup Expiration"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__signup_token
+msgid "Signup Token"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__signup_type
+msgid "Signup Token Type"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__signup_valid
+msgid "Signup Token is Valid"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__signup_url
+msgid "Signup URL"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sii_enabled
+msgid "Sii Enabled"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_template/adapter.py:0
+#, python-format
+msgid "Simple products can only have one variant"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__sii_simplified_invoice
+msgid "Simplified invoices in SII?"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_size_x
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_size_x
+msgid "Size X"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_size_y
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_size_y
+msgid "Size Y"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__slug_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__slug_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__slug_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__slug_name
+msgid "Slug Name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sale_lines_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__sales_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sale_lines_count
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__sales_count
+msgid "Sold"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__source_id
+msgid "Source"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__can_be_expensed
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__can_be_expensed
+msgid "Specify whether the product can be selected in an expense."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__cost_method
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__cost_method
+msgid ""
+"Standard Price: The products are valued at their standard cost defined on the product.\n"
+" Average Cost (AVCO): The products are valued at weighted average cost.\n"
+" First In First Out (FIFO): The products are valued supposing those that enter the company first will also leave it first.\n"
+" "
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__hs_code
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__hs_code
+msgid ""
+"Standardized code for international shipping and goods declaration. At the "
+"moment, only used for the FedEx shipping provider."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__state
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__state_id
+msgid "State"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__state
+msgid "Status"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__activity_state
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__activity_state
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__activity_state
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order_line__stock_move_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__stock_move_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__stock_move_ids
+msgid "Stock Move"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__move_ids
+msgid "Stock Moves"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__picking_warn
+msgid "Stock Picking"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__stock_quant_ids
+msgid "Stock Quant"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__stock_valuation_layer_ids
+msgid "Stock Valuation Layer"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__street
+msgid "Street"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__street2
+msgid "Street2"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__price_subtotal
+msgid "Subtotal"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__alternative_product_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__alternative_product_ids
+msgid ""
+"Suggest alternatives to your customer (upsell strategy). Those products show"
+" up on the product page."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__normal_cost
+msgid "Sum of Multiplication of Cost price and quantity of Vendor Bills"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__turnover
+msgid ""
+"Sum of Multiplication of Invoice price and quantity of Customer Invoices"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__total_cost
+msgid "Sum of Multiplication of Invoice price and quantity of Vendor Bills "
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__sale_expected
+msgid ""
+"Sum of Multiplication of Sale Catalog price and quantity of Customer "
+"Invoices"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__sale_num_invoiced
+msgid "Sum of Quantity in Customer Invoices"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__purchase_num_invoiced
+msgid "Sum of Quantity in Vendor Bills"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_purchase_currency_id
+msgid "Supplier Currency"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__supplier_payment_mode_id
+msgid "Supplier Payment Mode"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__supplier_rank
+msgid "Supplier Rank"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__sync_offset
+msgid "Sync Offset"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "Synchronizers"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__category_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__tag_ids
+msgid "Tags"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__task_id
+msgid "Task generated by the sales order item"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__task_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__tasks_count
+msgid "Tasks"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__tasks_ids
+msgid "Tasks associated to this sale"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__tax_class_ids
+msgid "Tax Class"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__vat
+msgid "Tax ID"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__tax_map_ids
+msgid "Tax Mapping"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__amount_by_group
+msgid "Tax amount by group"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_template/export_mapper.py:0
+#, python-format
+msgid "Tax class is not defined on backend for tax %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order_line/import_mapper.py:0
+#, python-format
+msgid "Tax rate %s not found in backend mapping."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__amount_tax
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__tax_id
+msgid "Taxes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__show_update_pricelist
+msgid ""
+"Technical Field, True if the pricelist was changed;\n"
+" this will then display a recomputation button"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__valid_product_template_attribute_line_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__valid_product_template_attribute_line_ids
+msgid "Technical compute"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order_line__display_type
+msgid "Technical field for UX purpose."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__pricelist_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__pricelist_id
+msgid ""
+"Technical field. Used for searching on pricelists, not stored in database."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__purchase_order_line_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__stock_move_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__stock_quant_ids
+msgid "Technical: used to compute quantities."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__note
+msgid "Terms and conditions"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/importer.py:0
+#, python-format
+msgid "The Order %s is already imported -> Update not allowed"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__vat
+msgid ""
+"The Tax Identification Number. Complete it if the contact is subjected to "
+"government taxes. Used in some legal statements."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__amount_delivery
+msgid "The amount without tax."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__analytic_account_id
+msgid "The analytic account related to a sales order."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_attribute_value__attribute_id
+msgid ""
+"The attribute cannot be changed once the value is used on at least one "
+"product."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_public_category/export_mapper.py:0
+#, python-format
+msgid ""
+"The category '%s' has a double space in the name. WooCommerce only allow one"
+" space. Please, remove it before export."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_attribute__display_type
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_attribute_value__display_type
+msgid "The display type used in the Product Configurator."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_account_position_id
+msgid ""
+"The fiscal position determines the taxes/accounts used for this contact."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__website_url
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__website_url
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__website_url
+msgid "The full URL to access the document through the website."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__user_id
+msgid "The internal user in charge of this contact."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_template/export_mapper.py:0
+#, python-format
+msgid ""
+"The inventory availability '%s' is not supported by WooCommerce. Review "
+"product template {%s}%s."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_product/export_mapper.py:0
+#, python-format
+msgid ""
+"The inventory availability '%s' is not supported by WooCommerce. Review "
+"product variant {%s}%s."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/import_mapper.py:0
+#, python-format
+msgid "The partner %s, with id:%s is archived, please, enable it"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__has_unreconciled_entries
+msgid ""
+"The partner has at least one unreconciled debit and credit since last time "
+"the invoices & payments matching was performed."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__reference
+msgid "The payment communication of this sale order."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/importer.py:0
+#: code:addons/connector_woocommerce/models/sale_order/importer.py:0
+#, python-format
+msgid ""
+"The product '%s' in the order has been deleted on WooCommerce. This order "
+"cannot be imported."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__public_categ_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__public_categ_ids
+msgid ""
+"The product will be available in each mentioned eCommerce category. Go to "
+"Shop > Customize and enable 'eCommerce categories' to view all eCommerce "
+"categories."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__currency_rate
+msgid ""
+"The rate of the currency to the currency of rate 1 applicable at the date of"
+" the order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__lst_price
+msgid ""
+"The sale price is managed from the product template. Click on the 'Configure"
+" Variants' button to set the extra attribute prices."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_stock_customer
+msgid ""
+"The stock location used as destination when sending goods to this contact."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_stock_supplier
+msgid ""
+"The stock location used as source when receiving goods from this contact."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/sale_order/adapter.py:0
+#, python-format
+msgid "There are more than one partner with the same name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__property_account_creditor_price_difference
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__property_account_creditor_price_difference
+msgid ""
+"This account is used in automated inventory valuation to record the price "
+"difference between a purchase order and its related vendor bill when "
+"validating this vendor bill."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_account_payable_id
+msgid ""
+"This account will be used instead of the default one as the payable account "
+"for the current partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_account_receivable_id
+msgid ""
+"This account will be used instead of the default one as the receivable "
+"account for the current partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_purchase_currency_id
+msgid ""
+"This currency will be used, instead of the default one, for purchases from "
+"the current partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_backend__tz
+msgid "This field is used to define in which timezone the backend will work."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_backend__chunk_size
+msgid ""
+"This field is used to define the chunk size to import from the backend."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__email_normalized
+msgid ""
+"This field is used to search on email address as the primary email field can"
+" contain more than strictly an email address."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__campaign_id
+msgid ""
+"This is a name that helps you keep track of your different campaign efforts,"
+" e.g. Fall_Drive, Christmas_Special"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__commitment_date
+msgid ""
+"This is the delivery date promised to the customer. If set, the delivery "
+"order will be scheduled based on this date rather than product lead times."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__medium_id
+msgid "This is the method of delivery, e.g. Postcard, Email, or Banner Ad"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__source_id
+msgid ""
+"This is the source of the link, e.g. Search Engine, another domain, or name "
+"of email list"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__price_extra
+msgid "This is the sum of the extra price of all attributes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_supplier_payment_term_id
+msgid ""
+"This payment term will be used instead of the default one for purchase "
+"orders and vendor bills"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_payment_term_id
+msgid ""
+"This payment term will be used instead of the default one for sales orders "
+"and customer invoices"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__property_product_pricelist
+msgid ""
+"This pricelist will be used, instead of the default one, for sales to the "
+"current partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__property_stock_production
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__property_stock_production
+msgid ""
+"This stock location will be used, instead of the default one, as the source "
+"location for stock moves generated by manufacturing orders."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__property_stock_inventory
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__property_stock_inventory
+msgid ""
+"This stock location will be used, instead of the default one, as the source "
+"location for stock moves generated when you do an inventory."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__responsible_id
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__responsible_id
+msgid ""
+"This user will be responsible of the next activities related to logistic "
+"operations for this product."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__default_supplierinfo_discount
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__default_supplierinfo_discount2
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__default_supplierinfo_discount3
+msgid ""
+"This value will be used as the default one, for each new supplierinfo line "
+"depending on that supplier."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__timesheet_encode_uom_id
+msgid ""
+"This will set the unit of measure used to encode timesheet. This will simply provide tools\n"
+" and widgets to help the encoding. All reporting will still be expressed in hours (default value)."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__helpdesk_ticket_active_count
+msgid "Ticket active count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__helpdesk_ticket_count
+msgid "Ticket count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__helpdesk_ticket_count_string
+msgid "Tickets"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__timesheet_encode_uom_id
+msgid "Timesheet Encoding Unit"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__timesheet_total_duration
+msgid "Timesheet Total Duration"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__timesheet_count
+msgid "Timesheet activities"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__timesheet_ids
+msgid "Timesheet activities associated to this sale"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__tz
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__tz
+msgid "Timezone"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__tz_offset
+msgid "Timezone offset"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__title
+msgid "Title"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__qty_to_invoice
+msgid "To Invoice Quantity"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__to_review
+msgid "To review"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__amount_total
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__price_total
+msgid "Total"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__total_cost
+msgid "Total Cost"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__total_invoiced
+msgid "Total Invoiced"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__total_margin
+msgid "Total Margin"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__total_margin_rate
+msgid "Total Margin Rate(%)"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__debit
+msgid "Total Payable"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__total_purchase_price
+msgid "Total Purchase Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__credit
+msgid "Total Receivable"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__price_tax
+msgid "Total Tax"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__credit
+msgid "Total amount this customer owes you."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__debit
+msgid "Total amount you have to pay to this vendor."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__total_margin_rate
+msgid "Total margin * 100 / Turnover"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__timesheet_total_duration
+msgid ""
+"Total recorded duration, expressed in the encoding UoM, and rounded to the "
+"unit"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__service_type
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__service_type
+msgid "Track Service"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__tracking
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__tracking
+msgid "Tracking"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__tracking_emails_count
+msgid "Tracking Emails Count"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__comercial
+msgid "Trade name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__transaction_ids
+msgid "Transactions"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_stock_picking
+msgid "Transfer"
+msgstr "Albarán"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__picking_ids
+msgid "Transfers"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__turnover
+msgid "Turnover"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__total_margin
+msgid "Turnover - Standard price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__type_name
+msgid "Type Name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__activity_exception_decoration
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__activity_exception_decoration
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__activity_exception_decoration
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#, python-format
+msgid "Type {} not supported for operator {}"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__unidad_tramitadora
+msgid "Unidad tramitadora"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__price_unit
+msgid "Unit Price"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__uom_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__uom_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__product_uom
+msgid "Unit of Measure"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__uom_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__uom_name
+msgid "Unit of Measure Name"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_unread
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_unread
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_unread
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_unread
+msgid "Unread Messages"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__message_unread_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__message_unread_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__message_unread_counter
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__amount_untaxed
+msgid "Untaxed Amount"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__untaxed_amount_to_invoice
+msgid "Untaxed Amount To Invoice"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__untaxed_amount_invoiced
+msgid "Untaxed Invoiced Amount"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__url
+msgid "Url"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__use_main_product_image
+msgid "Use Main Product Image"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__barcode
+msgid "Use a barcode to identify this contact."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__woocommerce_backend__use_main_product_image__first
+msgid "Use main image as first image"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields.selection,name:connector_woocommerce.selection__woocommerce_backend__use_main_product_image__last
+msgid "Use main image as last image"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__is_used_on_products
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__is_used_on_products
+msgid "Used on Products"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__aeat_identification_type
+msgid ""
+"Used to specify an identification type to send to SII. Normally for sending "
+"national and export invoices to SII where the customer country is not Spain,"
+" it would calculate an identification type of 04 if the VAT field is filled "
+"and 06 if it was not. This field is to specify types of 03 through 05, in "
+"the event that the customer doesn't identify with a foreign VAT and instead "
+"with their passport or residential certificate. If there is no value it will"
+" work as before."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__user_ids
+msgid "Users"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__currency_id
+msgid "Utility field to express amount currency"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__valid_product_template_attribute_line_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__valid_product_template_attribute_line_ids
+msgid "Valid Product Attribute Lines"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__name
+msgid "Value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__value_svl
+msgid "Value Svl"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__value_ids
+msgid "Values"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_variant_1920
+msgid "Variant Image"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_variant_1024
+msgid "Variant Image 1024"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_variant_128
+msgid "Variant Image 128"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_variant_256
+msgid "Variant Image 256"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__image_variant_512
+msgid "Variant Image 512"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__price_extra
+msgid "Variant Price Extra"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__variant_public_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__variant_public_description
+msgid "Variant Public Description"
+msgstr "DescripciĂłn PĂşblica de la Variante"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__variant_description_sale
+msgid "Variant Sale Description"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__variant_seller_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__variant_seller_ids
+msgid "Variant Seller"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__create_variant
+msgid "Variants Creation Mode"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_stock_supplier
+msgid "Vendor Location"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__property_supplier_payment_term_id
+msgid "Vendor Payment Terms"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__supplier_taxes_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__supplier_taxes_id
+msgid "Vendor Taxes"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__seller_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__seller_ids
+msgid "Vendors"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__verify_ssl
+msgid "Verify Ssl"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__version
+msgid "Version"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__virtual_available_at_date
+msgid "Virtual Available At Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_published
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_published
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__website_published
+msgid "Visible on current website"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__visitor_ids
+msgid "Visitors"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__volume
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__volume
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__es_tomo
+msgid "Volume"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__volume_uom_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__volume_uom_name
+msgid "Volume unit of measure label"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__warehouse_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__warehouse_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__warehouse_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__warehouse_id
+msgid "Warehouse"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__warning_stock
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__warning_stock
+msgid "Warning"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__website_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__website_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__website_id
+msgid "Website"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__website
+msgid "Website Link"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__website_message_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__website_message_ids
+msgid "Website Messages"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__website_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__website_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_name
+msgid "Website Name"
+msgstr "Nombre del sitio web"
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_product_public_category
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__public_categ_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__public_categ_ids
+msgid "Website Product Category"
+msgstr "CategorĂa del Producto"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_sequence
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_sequence
+msgid "Website Sequence"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_url
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_url
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__website_url
+msgid "Website URL"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__website_message_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__website_message_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__website_message_ids
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__website_message_ids
+msgid "Website communication history"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_meta_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__website_meta_description
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_meta_description
+msgid "Website meta description"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_meta_keywords
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__website_meta_keywords
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_meta_keywords
+msgid "Website meta keywords"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_meta_title
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__website_meta_title
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_meta_title
+msgid "Website meta title"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__website_meta_og_img
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__website_meta_og_img
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__website_meta_og_img
+msgid "Website opengraph image"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__website_id
+msgid "Website through which this order was placed."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__weight
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__weight
+msgid "Weight"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__weight_uom_name
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__weight_uom_name
+msgid "Weight unit of measure label"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_res_partner__tz
+msgid ""
+"When printing documents and exporting/importing data, time values are computed according to this timezone.\n"
+"If the timezone is not set, UTC (Coordinated Universal Time) is used.\n"
+"Anywhere else, time values are computed according to the time offset of your web client."
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_product__use_expiration_date
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_product_template__use_expiration_date
+msgid ""
+"When this box is ticked, you have the possibility to specify dates to manage"
+" product expiration, on the product and on the corresponding lot/serial "
+"numbers"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.ui.menu,name:connector_woocommerce.woocommerce_menu_root
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_sale_order_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_sale_order_view_filter
+msgid "WooCommerce"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.server,name:connector_woocommerce.ir_cron_woocommerce_export_product_attribute_ir_actions_server
+#: model:ir.cron,cron_name:connector_woocommerce.ir_cron_woocommerce_export_product_attribute
+#: model:ir.cron,name:connector_woocommerce.ir_cron_woocommerce_export_product_attribute
+msgid "WooCommerce - Export Product Attribute"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.server,name:connector_woocommerce.ir_cron_woocommerce_export_product_ir_actions_server
+#: model:ir.cron,cron_name:connector_woocommerce.ir_cron_woocommerce_export_product
+#: model:ir.cron,name:connector_woocommerce.ir_cron_woocommerce_export_product
+msgid "WooCommerce - Export Product Product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.server,name:connector_woocommerce.ir_cron_woocommerce_export_product_attribute_value_ir_actions_server
+#: model:ir.cron,cron_name:connector_woocommerce.ir_cron_woocommerce_export_product_attribute_value
+#: model:ir.cron,name:connector_woocommerce.ir_cron_woocommerce_export_product_attribute_value
+msgid "WooCommerce - Export Product Product Attribute Value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.server,name:connector_woocommerce.ir_cron_woocommerce_export_product_public_category_ir_actions_server
+#: model:ir.cron,cron_name:connector_woocommerce.ir_cron_woocommerce_export_product_public_category
+#: model:ir.cron,name:connector_woocommerce.ir_cron_woocommerce_export_product_public_category
+msgid "WooCommerce - Export Product Public Category"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.server,name:connector_woocommerce.ir_cron_woocommerce_export_product_template_ir_actions_server
+#: model:ir.cron,cron_name:connector_woocommerce.ir_cron_woocommerce_export_product_template
+#: model:ir.cron,name:connector_woocommerce.ir_cron_woocommerce_export_product_template
+msgid "WooCommerce - Export Product Template"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.server,name:connector_woocommerce.ir_cron_woocommerce_export_sale_order_ir_actions_server
+#: model:ir.cron,cron_name:connector_woocommerce.ir_cron_woocommerce_export_sale_order
+#: model:ir.cron,name:connector_woocommerce.ir_cron_woocommerce_export_sale_order
+msgid "WooCommerce - Export Sale Orders"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.server,name:connector_woocommerce.ir_cron_woocommerce_import_sale_order_ir_actions_server
+#: model:ir.cron,cron_name:connector_woocommerce.ir_cron_woocommerce_import_sale_order
+#: model:ir.cron,name:connector_woocommerce.ir_cron_woocommerce_import_sale_order
+msgid "WooCommerce - Import Sale Orders"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_backend
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_binding__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__backend_id
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__backend_id
+msgid "WooCommerce Backend"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_backend_account_tax
+msgid "WooCommerce Backend Account Tax"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_backend_payment_mode
+msgid "WooCommerce Backend Payment Mode"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_backend_tax_class
+msgid "WooCommerce Backend Tax Class"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.actions.act_window,name:connector_woocommerce.woocommerce_backend_action
+msgid "WooCommerce Backends"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_binding
+msgid "WooCommerce Binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attribute__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_attribute_value__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_public_category__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_res_partner__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_res_users__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sage_res_partner__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order_line__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__woocommerce_bind_ids
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__woocommerce_bind_ids
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_product_attribute_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_product_product_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_product_template_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_res_partner_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_sale_order_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.connector_woocommerce_product_public_category_view_form
+msgid "WooCommerce Bindings"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_backend__consumer_key
+msgid "WooCommerce Consumer Key"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute__woocommerce_idattribute
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__woocommerce_idattribute
+msgid "WooCommerce ID Attribute"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_attribute_value__woocommerce_idattributevalue
+msgid "WooCommerce ID Attribute Value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__woocommerce_idparent
+msgid "WooCommerce ID Parent"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__woocommerce_idproduct
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__woocommerce_idproduct
+msgid "WooCommerce ID Product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_public_category__woocommerce_idpubliccategory
+msgid "WooCommerce ID Public Category"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__woocommerce_idrespartner
+msgid "WooCommerce ID Res Partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__woocommerce_idsaleorder
+msgid "WooCommerce ID Sale Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__woocommerce_order_id
+msgid "WooCommerce Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__woocommerce_order_line_id
+msgid "WooCommerce Order Line ID"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__woocommerce_order_line_ids
+msgid "WooCommerce Order Line ids"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_payment_mode__woocommerce_payment_mode
+msgid "WooCommerce Payment Mode"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_product_attribute
+msgid "WooCommerce Product Attribute Binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_attribute_value_view_form
+msgid "WooCommerce Product Attribute Value"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_product_attribute_value
+msgid "WooCommerce Product Attribute Value Binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_product_view_form
+msgid "WooCommerce Product Product"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_public_category_view_form
+msgid "WooCommerce Product Public Category"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_product_public_category
+msgid "WooCommerce Product Public Category Binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_attribute_view_form
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_product_template_view_form
+msgid "WooCommerce Product Template"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_product_product
+msgid "WooCommerce Product product Binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_product_template
+msgid "WooCommerce Product template Binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_partner_view_form
+msgid "WooCommerce Res Partner"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_res_partner
+msgid "WooCommerce Res Partner Binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_sale_order
+msgid "WooCommerce Sale Order Binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_sale_order_view_form
+msgid "WooCommerce Sale order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_tax_class__woocommerce_tax_class
+msgid "WooCommerce Tax Class"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend_account_tax__woocommerce_tax_rate_id
+msgid "WooCommerce Tax Rate ID"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__woocommerce_address_type
+msgid "WooCommerce Type"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_backend__url
+msgid "WooCommerce URL"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order_line__woocommerce_discount
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__woocommerce_discount
+msgid "Woocommerce Discount"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__woocommerce_enabled
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__woocommerce_enabled
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__woocommerce_enabled
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__woocommerce_enabled
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.product_template_search_view_website
+msgid "Woocommerce Enabled"
+msgstr "Habilitado en Woocommerce"
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order__woocommerce_order_state
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__woocommerce_order_state
+msgid "Woocommerce Order State"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order_line__woocommerce_sale_order_id
+msgid "Woocommerce Sale Order"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__woocommerce_status
+msgid "Woocommerce Status"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_sale_order__woocommerce_status_write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_sale_order__woocommerce_status_write_date
+msgid "Woocommerce Status Write Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_stock_picking__woocommerce_stock_picking_state
+msgid "Woocommerce Stock Picking State"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_product__woocommerce_write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_product_template__woocommerce_write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_product__woocommerce_write_date
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_product_template__woocommerce_write_date
+msgid "Woocommerce Write Date"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_backend__wordpress_backend_id
+msgid "Wordpress Backend"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/common/tools.py:0
+#, python-format
+msgid "Wrong domain clause format %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_template/product_template.py:0
+#, python-format
+msgid ""
+"You can't change the attributes if the product has a woocommerce binding"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_template/export_mapper.py:0
+#, python-format
+msgid "You must define a default code for the product %s"
+msgstr ""
+
+#. module: connector_woocommerce
+#: code:addons/connector_woocommerce/models/product_product/export_mapper.py:0
+#, python-format
+msgid "You must define an internal reference for the product {%s}'%s'"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__zip_id
+msgid "ZIP Location"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__zip
+msgid "Zip"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.product_product_view_form_easy_inherit_connector_woocommerce
+msgid "eCommerce"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_product_attachment
+msgid "product.attachment"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,help:connector_woocommerce.field_woocommerce_sale_order__amount_by_group
+msgid "type: [(name, amount, base, formated amount, formated base)]"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model_terms:ir.ui.view,arch_db:connector_woocommerce.woocommerce_backend_view_form
+msgid "woocommerce Backend"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model,name:connector_woocommerce.model_woocommerce_sale_order_line
+msgid "woocommerce.sale.order.line"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__organo_gestor
+msgid "Órgano gestor"
+msgstr ""
+
+#. module: connector_woocommerce
+#: model:ir.model.fields,field_description:connector_woocommerce.field_woocommerce_res_partner__organo_proponente
+msgid "Órgano proponente"
+msgstr ""
diff --git a/connector_woocommerce/models/__init__.py b/connector_woocommerce/models/__init__.py
new file mode 100644
index 000000000..914a2bac9
--- /dev/null
+++ b/connector_woocommerce/models/__init__.py
@@ -0,0 +1,14 @@
+from . import backend
+from . import binding
+from . import common
+from . import ir_attachment
+from . import product_public_category
+from . import product_attribute
+from . import product_attribute_value
+from . import product
+from . import product_template
+from . import product_product
+from . import res_partner
+from . import sale_order_line
+from . import sale_order
+from . import stock_picking
diff --git a/connector_woocommerce/models/backend/__init__.py b/connector_woocommerce/models/backend/__init__.py
new file mode 100644
index 000000000..65be80dff
--- /dev/null
+++ b/connector_woocommerce/models/backend/__init__.py
@@ -0,0 +1,5 @@
+from . import adapter
+from . import backend
+from . import backend_account_tax
+from . import backend_payment_mode
+from . import backend_tax_class
diff --git a/connector_woocommerce/models/backend/adapter.py b/connector_woocommerce/models/backend/adapter.py
new file mode 100644
index 000000000..51919cc9a
--- /dev/null
+++ b/connector_woocommerce/models/backend/adapter.py
@@ -0,0 +1,15 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+import logging
+
+from odoo.addons.component.core import Component
+
+_logger = logging.getLogger(__name__)
+
+
+class WooCommerceBackendAdapter(Component):
+ _name = "connector.woocommerce.backend.adapter"
+ _inherit = "connector.woocommerce.adapter"
+ _description = "WooCommerce Backend Adapter"
+
+ _apply_on = "woocommerce.backend"
diff --git a/connector_woocommerce/models/backend/backend.py b/connector_woocommerce/models/backend/backend.py
new file mode 100644
index 000000000..d42d48964
--- /dev/null
+++ b/connector_woocommerce/models/backend/backend.py
@@ -0,0 +1,239 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+import logging
+
+from odoo import _, api, fields, models
+from odoo.exceptions import ValidationError
+
+_logger = logging.getLogger(__name__)
+
+
+class WooCommerceBackend(models.Model):
+ _name = "woocommerce.backend"
+ _inherit = "connector.extension.backend"
+ _description = "WooCommerce Backend"
+
+ url = fields.Char(
+ help="WooCommerce URL",
+ required=True,
+ )
+ consumer_key = fields.Char(
+ help="WooCommerce Consumer Key",
+ required=True,
+ )
+ consumer_secret = fields.Char(
+ required=True,
+ )
+ payment_mode_ids = fields.One2many(
+ comodel_name="woocommerce.backend.payment.mode",
+ inverse_name="backend_id",
+ string="Payment Mode",
+ )
+ tax_map_ids = fields.One2many(
+ comodel_name="woocommerce.backend.account.tax",
+ inverse_name="backend_id",
+ string="Tax Mapping",
+ )
+ tax_class_ids = fields.One2many(
+ comodel_name="woocommerce.backend.tax.class",
+ inverse_name="backend_id",
+ string="Tax Class",
+ )
+ shipping_product_id = fields.Many2one(
+ comodel_name="product.product",
+ )
+
+ page_size = fields.Integer(
+ help="Number of records to fetch at a time. Max: 100",
+ )
+
+ @api.constrains("page_size")
+ def _check_page_size(self):
+ for rec in self:
+ if rec.page_size > 100:
+ raise ValidationError(_("Page size must be less than 100"))
+
+ language_id = fields.Many2one(
+ comodel_name="res.lang",
+ string="Language",
+ required=True,
+ )
+ client_order_ref_prefix = fields.Char(
+ string="Client Order Reference Prefix",
+ help="Prefix to add to the client order reference",
+ required=True,
+ )
+ verify_ssl = fields.Boolean(
+ default=True,
+ )
+ discount_pricelist_id = fields.Many2one(
+ comodel_name="product.pricelist",
+ )
+ wordpress_backend_id = fields.Many2one(
+ comodel_name="wordpress.backend",
+ )
+ use_main_product_image = fields.Selection(
+ selection=[
+ ("no", "Don't use main image"),
+ ("first", "Use main image as first image"),
+ ("last", "Use main image as last image"),
+ ],
+ default="first",
+ )
+ export_product_tmpl_since_date = fields.Datetime(
+ string="Export Product Templates Since",
+ )
+ export_products_since_date = fields.Datetime(
+ string="Export Products Since",
+ )
+ export_sale_orders_since_date = fields.Datetime(
+ string="Export Sale Orders Since",
+ )
+ export_product_public_category_since_date = fields.Datetime(
+ string="Export Product public category Since",
+ )
+ export_product_attribute_since_date = fields.Datetime(
+ string="Export Product attributes Since",
+ )
+ export_product_attribute_value_since_date = fields.Datetime(
+ string="Export Product attribute values Since",
+ )
+ export_product_attachment_since_date = fields.Datetime(
+ string="Export Product Attachment Since",
+ )
+ import_sale_order_since_date = fields.Datetime(
+ string="Import Sale Order Since",
+ )
+ stock_location_ids = fields.Many2many(
+ string="Locations",
+ comodel_name="stock.location",
+ readonly=False,
+ required=True,
+ domain="[('usage', 'in', ['internal','view'])]",
+ )
+
+ def export_product_tmpl_since(self):
+ self.env.user.company_id = self.company_id
+ for rec in self:
+ since_date = fields.Datetime.from_string(rec.export_product_tmpl_since_date)
+ rec.export_product_tmpl_since_date = fields.Datetime.now()
+ self.env["woocommerce.product.template"].export_product_tmpl_since(
+ backend_record=rec, since_date=since_date
+ )
+
+ def export_products_since(self):
+ self.env.user.company_id = self.company_id
+ for rec in self:
+ since_date = fields.Datetime.from_string(rec.export_products_since_date)
+ rec.export_products_since_date = fields.Datetime.now()
+ self.env["woocommerce.product.product"].export_products_since(
+ backend_record=rec, since_date=since_date
+ )
+
+ def export_sale_orders_since(self):
+ self.env.user.company_id = self.company_id
+ for rec in self:
+ since_date = fields.Datetime.from_string(rec.export_sale_orders_since_date)
+ rec.export_sale_orders_since_date = fields.Datetime.now()
+ self.env["woocommerce.sale.order"].export_sale_orders_since(
+ backend_record=rec, since_date=since_date
+ )
+
+ def export_product_public_category_since(self):
+ self.env.user.company_id = self.company_id
+ for rec in self:
+ since_date = fields.Datetime.from_string(
+ rec.export_product_public_category_since_date
+ )
+ rec.export_product_public_category_since_date = fields.Datetime.now()
+ self.env[
+ "woocommerce.product.public.category"
+ ].export_product_public_category_since(
+ backend_record=rec, since_date=since_date
+ )
+
+ def export_product_attribute_since(self):
+ self.env.user.company_id = self.company_id
+ for rec in self:
+ since_date = fields.Datetime.from_string(
+ rec.export_product_attribute_since_date
+ )
+ rec.export_product_attribute_since_date = fields.Datetime.now()
+ self.env["woocommerce.product.attribute"].export_product_attribute_since(
+ backend_record=rec, since_date=since_date
+ )
+
+ def export_product_attribute_value_since(self):
+ self.env.user.company_id = self.company_id
+ for rec in self:
+ since_date = fields.Datetime.from_string(
+ rec.export_product_attribute_value_since_date
+ )
+ rec.export_product_attribute_value_since_date = fields.Datetime.now()
+ self.env[
+ "woocommerce.product.attribute.value"
+ ].export_product_attribute_value_since(
+ backend_record=rec, since_date=since_date
+ )
+
+ def export_product_attachment_since(self):
+ self.env.user.company_id = self.company_id
+ for rec in self:
+ since_date = fields.Datetime.from_string(
+ rec.export_product_attachment_since_date
+ )
+ rec.export_product_attachment_since_date = fields.Datetime.now()
+ self.env["wordpress.ir.attachment"].export_product_attachment_since(
+ backend_record=rec, since_date=since_date
+ )
+
+ def import_sale_orders_since(self):
+ self.env.user.company_id = self.company_id
+ for rec in self:
+ since_date = fields.Datetime.from_string(rec.import_sale_order_since_date)
+ rec.import_sale_order_since_date = fields.Datetime.now()
+ self.env["woocommerce.sale.order"].import_sale_orders_since(
+ backend_record=rec, since_date=since_date
+ )
+
+ # scheduler
+ @api.model
+ def _scheduler_export_products(self):
+ for backend in self.env[self._name].search([("state", "=", "validated")]):
+ backend.export_products_since()
+
+ # scheduler
+ @api.model
+ def _scheduler_export_product_tmpl(self):
+ for backend in self.env[self._name].search([("state", "=", "validated")]):
+ backend.export_product_tmpl_since()
+
+ @api.model
+ def _scheduler_export_sale_orders(self):
+ for backend in self.env[self._name].search([("state", "=", "validated")]):
+ backend.export_sale_orders_since()
+
+ @api.model
+ def _scheduler_import_sale_orders(self):
+ for backend in self.env[self._name].search([("state", "=", "validated")]):
+ backend.import_sale_orders_since()
+
+ @api.model
+ def _scheduler_export_product_public_category(self):
+ for backend in self.env[self._name].search([("state", "=", "validated")]):
+ backend.export_product_public_category_since()
+
+ @api.model
+ def _scheduler_export_product_attribute(self):
+ for backend in self.env[self._name].search([("state", "=", "validated")]):
+ backend.export_product_attribute_since()
+
+ @api.model
+ def _scheduler_export_product_attribute_value(self):
+ for backend in self.env[self._name].search([("state", "=", "validated")]):
+ backend.export_product_attribute_value_since()
+
+ @api.model
+ def _scheduler_export_product_attachment(self):
+ for backend in self.env[self._name].search([("state", "=", "validated")]):
+ backend.export_product_attachment_since()
diff --git a/connector_woocommerce/models/backend/backend_account_tax.py b/connector_woocommerce/models/backend/backend_account_tax.py
new file mode 100644
index 000000000..49ed108ec
--- /dev/null
+++ b/connector_woocommerce/models/backend/backend_account_tax.py
@@ -0,0 +1,35 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+import logging
+
+from odoo import fields, models
+
+_logger = logging.getLogger(__name__)
+
+
+class WooCommerceBackendAccountTax(models.Model):
+ _name = "woocommerce.backend.account.tax"
+ _description = "WooCommerce Backend Account Tax"
+
+ backend_id = fields.Many2one(
+ string="Backend id",
+ comodel_name="woocommerce.backend",
+ required=True,
+ ondelete="cascade",
+ )
+ woocommerce_tax_rate_id = fields.Integer(
+ string="WooCommerce Tax Rate ID",
+ required=True,
+ )
+ account_tax = fields.Many2one(
+ comodel_name="account.tax",
+ required=True,
+ )
+
+ _sql_constraints = [
+ (
+ "tax_map_uniq",
+ "unique(backend_id, woocommerce_tax_rate_id)",
+ "A binding already exists with the same (backend, woocommerce_tax_rate_id) ID.",
+ ),
+ ]
diff --git a/connector_woocommerce/models/backend/backend_payment_mode.py b/connector_woocommerce/models/backend/backend_payment_mode.py
new file mode 100644
index 000000000..2e4e25e36
--- /dev/null
+++ b/connector_woocommerce/models/backend/backend_payment_mode.py
@@ -0,0 +1,43 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+import logging
+
+from odoo import fields, models
+
+_logger = logging.getLogger(__name__)
+
+
+class WooCommerceBackendAccountTax(models.Model):
+ _name = "woocommerce.backend.payment.mode"
+ _description = "WooCommerce Backend Payment Mode"
+
+ backend_id = fields.Many2one(
+ string="Backend id",
+ comodel_name="woocommerce.backend",
+ required=True,
+ ondelete="cascade",
+ )
+ company_id = fields.Many2one(
+ comodel_name="res.company",
+ required=True,
+ default=lambda self: self.env.company,
+ ondelete="restrict",
+ )
+ woocommerce_payment_mode = fields.Char(
+ string="WooCommerce Payment Mode",
+ required=True,
+ )
+ payment_mode_id = fields.Many2one(
+ comodel_name="account.payment.mode",
+ required=True,
+ check_company=True,
+ domain="[('payment_type', '=', 'inbound'), ('company_id', '=', company_id)]",
+ )
+
+ _sql_constraints = [
+ (
+ "tax_map_uniq",
+ "unique(backend_id, woocommerce_payment_mode)",
+ "A binding already exists with the same (backend, woocommerce_payment_mode) ID.",
+ ),
+ ]
diff --git a/connector_woocommerce/models/backend/backend_tax_class.py b/connector_woocommerce/models/backend/backend_tax_class.py
new file mode 100644
index 000000000..af844813c
--- /dev/null
+++ b/connector_woocommerce/models/backend/backend_tax_class.py
@@ -0,0 +1,34 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+import logging
+
+from odoo import fields, models
+
+_logger = logging.getLogger(__name__)
+
+
+class WooCommerceBackendTaxClass(models.Model):
+ _name = "woocommerce.backend.tax.class"
+ _description = "WooCommerce Backend Tax Class"
+
+ backend_id = fields.Many2one(
+ string="Backend id",
+ comodel_name="woocommerce.backend",
+ required=True,
+ ondelete="cascade",
+ )
+ account_tax = fields.Many2one(
+ comodel_name="account.tax",
+ required=True,
+ )
+ woocommerce_tax_class = fields.Char(
+ string="WooCommerce Tax Class",
+ required=True,
+ )
+ _sql_constraints = [
+ (
+ "tax_map_uniq",
+ "unique(backend_id, woocommerce_tax_class)",
+ "A binding already exists with the same (backend, woocommerce_tax_rate_id) ID.",
+ ),
+ ]
diff --git a/connector_woocommerce/models/binding/__init__.py b/connector_woocommerce/models/binding/__init__.py
new file mode 100644
index 000000000..0fec82e8a
--- /dev/null
+++ b/connector_woocommerce/models/binding/__init__.py
@@ -0,0 +1 @@
+from . import binding
diff --git a/connector_woocommerce/models/binding/binding.py b/connector_woocommerce/models/binding/binding.py
new file mode 100644
index 000000000..767798929
--- /dev/null
+++ b/connector_woocommerce/models/binding/binding.py
@@ -0,0 +1,25 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models
+
+
+class WoocommerceBinding(models.AbstractModel):
+ _name = "woocommerce.binding"
+ _inherit = "connector.extension.external.binding"
+ _description = "WooCommerce Binding"
+
+ backend_id = fields.Many2one(
+ comodel_name="woocommerce.backend",
+ string="WooCommerce Backend",
+ required=True,
+ ondelete="restrict",
+ )
+
+ _sql_constraints = [
+ (
+ "internal_uniq",
+ "unique(backend_id, odoo_id)",
+ "A binding already exists with the same Internal (Odoo) ID.",
+ ),
+ ]
diff --git a/connector_woocommerce/models/common/tools.py b/connector_woocommerce/models/common/tools.py
new file mode 100644
index 000000000..bab1c47ac
--- /dev/null
+++ b/connector_woocommerce/models/common/tools.py
@@ -0,0 +1,121 @@
+# Copyright NuoBiT Solutions - Eric Antones
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+import datetime
+import hashlib
+import unicodedata
+
+from odoo import _
+from odoo.exceptions import ValidationError
+
+
+def list2hash(_list):
+ _hash = hashlib.sha256()
+ for e in _list:
+ if isinstance(e, int):
+ e9 = str(e)
+ elif isinstance(e, str):
+ e9 = e
+ elif isinstance(e, float):
+ e9 = str(e)
+ elif e is None:
+ e9 = ""
+ else:
+ raise Exception("Unexpected type for a key: type %s" % type(e))
+ _hash.update(e9.encode("utf8"))
+ return _hash.hexdigest()
+
+
+def domain_to_normalized_dict(self, domain):
+ """Convert, if possible, standard Odoo domain to a dictionary.
+ To do so it is necessary to convert all operators to
+ equal '=' operator.
+ """
+ res = {}
+ for elem in domain:
+ if len(elem) != 3:
+ raise ValidationError(_("Wrong domain clause format %s") % elem)
+ field, op, value = elem
+ if op == "=":
+ if field in res:
+ raise ValidationError(_("Duplicated field %s") % field)
+ res[field] = self._normalize_value(value)
+ elif op == "!=":
+ if not isinstance(value, bool):
+ raise ValidationError(
+ _("Not equal operation not supported for non boolean fields")
+ )
+ if field in res:
+ raise ValidationError(_("Duplicated field %s") % field)
+ res[field] = self._normalize_value(not value)
+ elif op == "in":
+ if not isinstance(value, (tuple, list)):
+ raise ValidationError(
+ _(
+ "Operator '%(OPERATOR)s' only supports tuples or lists, not %(TYPES)s"
+ )
+ % {
+ "OPERATOR": op,
+ "TYPES": type(value),
+ }
+ )
+ if field in res:
+ raise ValidationError(_("Duplicated field %s") % field)
+ res[field] = self._normalize_value(value)
+ elif op in (">", ">=", "<", "<="):
+ if not isinstance(value, (datetime.date, datetime.datetime, int)):
+ raise ValidationError(
+ _("Type {} not supported for operator {}").format(type(value), op)
+ )
+ if op in (">", "<"):
+ adj = 1
+ if isinstance(value, (datetime.date, datetime.datetime)):
+ adj = datetime.timedelta(days=adj)
+ if op == "<":
+ op, value = "<=", value - adj
+ else:
+ op, value = ">=", value + adj
+
+ res[field] = self._normalize_value(value)
+ else:
+ raise ValidationError(_("Operator %s not supported") % op)
+
+ return res
+
+
+def convert_item_to_json(item, ct, namespace):
+ jitem = {}
+ for path, func, key, multi in ct:
+ if key in jitem:
+ raise ValidationError(_("Key %s already exists") % key)
+ value = item.xpath(path, namespaces=namespace)
+ if not value:
+ jitem[key] = None
+ else:
+ if multi:
+ jitem[key] = func(value)
+ else:
+ if len(value) > 1:
+ raise ValidationError(_("Multiple values found for '%s'") % path)
+ else:
+ jitem[key] = func(value[0])
+ return jitem
+
+
+def convert_to_json(data, ct, namespace):
+ res = []
+ for d in data:
+ res.append(convert_item_to_json(d, ct, namespace))
+ return res
+
+
+def slugify(value):
+ if not value:
+ return None
+ return (
+ unicodedata.normalize("NFKD", value)
+ .encode("ascii", "ignore")
+ .decode("ascii")
+ .lower()
+ .replace(" ", "")
+ )
diff --git a/connector_woocommerce/models/ir_attachment/__init__.py b/connector_woocommerce/models/ir_attachment/__init__.py
new file mode 100644
index 000000000..0fec82e8a
--- /dev/null
+++ b/connector_woocommerce/models/ir_attachment/__init__.py
@@ -0,0 +1 @@
+from . import binding
diff --git a/connector_woocommerce/models/ir_attachment/binding.py b/connector_woocommerce/models/ir_attachment/binding.py
new file mode 100644
index 000000000..e924bf0de
--- /dev/null
+++ b/connector_woocommerce/models/ir_attachment/binding.py
@@ -0,0 +1,53 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
+
+from odoo import api, models
+
+
+class WordPressIrAttachment(models.Model):
+ _inherit = "wordpress.ir.attachment"
+
+ @api.model
+ def _get_woocommerce_base_domain(self):
+ product_template = (
+ self.env["product.template"]
+ .with_context(active_test=False)
+ .search(
+ [
+ ("woocommerce_enabled", "=", True),
+ ("has_attributes", "!=", False),
+ ]
+ )
+ )
+ product_variant = (
+ self.env["product.product"]
+ .with_context(active_test=False)
+ .search(
+ [
+ ("product_tmpl_id.woocommerce_enabled", "=", True),
+ ("product_tmpl_id.has_attributes", "=", True),
+ ]
+ )
+ )
+ attachments = (
+ product_template.product_image_attachment_ids.attachment_id
+ + product_template.product_document_attachment_ids.attachment_id
+ + product_variant.product_variant_image_attachment_ids.attachment_id
+ + product_variant.product_document_attachment_ids.attachment_id
+ )
+ return [("id", "in", attachments.ids)]
+
+ def export_product_attachment_since(self, backend_record=None, since_date=None):
+ domain = self._get_woocommerce_base_domain()
+ if since_date:
+ domain += [
+ (
+ "write_date",
+ ">",
+ since_date.strftime("%Y-%m-%dT%H:%M:%S"),
+ )
+ ]
+ self.with_delay().export_batch(
+ backend_record.wordpress_backend_id, domain=domain
+ )
+ return True
diff --git a/connector_woocommerce/models/product/__init__.py b/connector_woocommerce/models/product/__init__.py
new file mode 100644
index 000000000..34ea264d2
--- /dev/null
+++ b/connector_woocommerce/models/product/__init__.py
@@ -0,0 +1 @@
+from . import export_mapper
diff --git a/connector_woocommerce/models/product/export_mapper.py b/connector_woocommerce/models/product/export_mapper.py
new file mode 100644
index 000000000..edd47e508
--- /dev/null
+++ b/connector_woocommerce/models/product/export_mapper.py
@@ -0,0 +1,51 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import AbstractComponent
+
+
+class WooCommerceProductExportMapper(AbstractComponent):
+ _name = "woocommerce.product.export.mapper"
+ _inherit = "woocommerce.export.mapper"
+
+ def _prepare_url(self, binding, document):
+ return binding.wordpress_source_url
+
+ def _get_lang(self, document):
+ return self.backend_record.language_id.code
+
+ def _prepare_document_description(self, documents):
+ document_description = []
+ if self.backend_record.wordpress_backend_id:
+ with self.backend_record.wordpress_backend_id.work_on(
+ "wordpress.ir.attachment"
+ ) as work:
+ binder = work.component(usage="binder")
+ for document in documents:
+ external_id = binder.get_external_dict_ids(
+ document.attachment_id, check_external_id=False
+ )
+ if external_id:
+ binding = binder.wrap_record(document.attachment_id)
+ document_description.append(
+ "%s
"
+ % (
+ self._prepare_url(binding, document),
+ document.with_context(
+ lang=self._get_lang(document)
+ ).name,
+ )
+ )
+ else:
+ if (
+ not self.backend_record.wordpress_backend_id.test_database
+ and self.backend_record.wordpress_backend_id
+ ):
+ assert external_id, (
+ "Unexpected error on %s:"
+ "The backend id cannot be obtained."
+ "At this stage, the backend record should "
+ "have been already linked via "
+ "._export_dependencies. " % document.product_id._name
+ )
+ return "\n".join(document_description) or None
diff --git a/connector_woocommerce/models/product_attribute/__init__.py b/connector_woocommerce/models/product_attribute/__init__.py
new file mode 100644
index 000000000..fd2c9b08c
--- /dev/null
+++ b/connector_woocommerce/models/product_attribute/__init__.py
@@ -0,0 +1,6 @@
+from . import adapter
+from . import binder
+from . import binding
+from . import export_mapper
+from . import exporter
+from . import product_attribute
diff --git a/connector_woocommerce/models/product_attribute/adapter.py b/connector_woocommerce/models/product_attribute/adapter.py
new file mode 100644
index 000000000..c529d8fce
--- /dev/null
+++ b/connector_woocommerce/models/product_attribute/adapter.py
@@ -0,0 +1,30 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceProductAttributeAdapter(Component):
+ _name = "cwoocommerce.product.attribute.adapter"
+ _inherit = "connector.woocommerce.adapter"
+
+ _apply_on = "woocommerce.product.attribute"
+
+ def read(self, _id): # pylint: disable=W8106
+ url_l = ["products/attributes", str(_id)]
+ return self._exec("get", "/".join(url_l))
+
+ def search_read(self, domain=None):
+ return self._exec("get", "products/attributes", domain=domain)
+
+ def create(self, data): # pylint: disable=W8106
+ return self._exec("post", "products/attributes", data=data)
+
+ def write(self, external_id, data): # pylint: disable=W8106
+ url_l = ["products/attributes", str(external_id[0])]
+ return self._exec("put", "/".join(url_l), data=data)
+
+ def _get_search_fields(self):
+ res = super()._get_search_fields()
+ res.append("slug")
+ return res
diff --git a/connector_woocommerce/models/product_attribute/binder.py b/connector_woocommerce/models/product_attribute/binder.py
new file mode 100644
index 000000000..a0968baab
--- /dev/null
+++ b/connector_woocommerce/models/product_attribute/binder.py
@@ -0,0 +1,23 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceProductAttributeBinder(Component):
+ _name = "woocommerce.product.attribute.binder"
+ _inherit = "woocommerce.binder"
+
+ _apply_on = "woocommerce.product.attribute"
+
+ @property
+ def external_id(self):
+ return ["id"]
+
+ @property
+ def internal_id(self):
+ return ["woocommerce_idattribute"]
+
+ @property
+ def external_alt_id(self):
+ return ["name"]
diff --git a/connector_woocommerce/models/product_attribute/binding.py b/connector_woocommerce/models/product_attribute/binding.py
new file mode 100644
index 000000000..af684ffbe
--- /dev/null
+++ b/connector_woocommerce/models/product_attribute/binding.py
@@ -0,0 +1,47 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import api, fields, models
+
+
+class WooCommerceProductAttribute(models.Model):
+ _name = "woocommerce.product.attribute"
+ _inherit = "woocommerce.binding"
+ _inherits = {"product.attribute": "odoo_id"}
+ _description = "WooCommerce Product Attribute Binding"
+
+ odoo_id = fields.Many2one(
+ comodel_name="product.attribute",
+ string="Product attribute",
+ required=True,
+ ondelete="cascade",
+ )
+ woocommerce_idattribute = fields.Integer(
+ string="WooCommerce ID Attribute",
+ readonly=True,
+ )
+
+ _sql_constraints = [
+ (
+ "external_uniq",
+ "unique(backend_id, woocommerce_idattribute)",
+ "A binding already exists with the same External (idAttribute) ID.",
+ ),
+ ]
+
+ @api.model
+ def _get_base_domain(self):
+ return []
+
+ def export_product_attribute_since(self, backend_record=None, since_date=None):
+ domain = self._get_base_domain()
+ if since_date:
+ domain += [
+ (
+ "write_date",
+ ">",
+ since_date.strftime("%Y-%m-%dT%H:%M:%S"),
+ )
+ ]
+ self.with_delay().export_batch(backend_record, domain=domain)
+ return True
diff --git a/connector_woocommerce/models/product_attribute/export_mapper.py b/connector_woocommerce/models/product_attribute/export_mapper.py
new file mode 100644
index 000000000..926aa182d
--- /dev/null
+++ b/connector_woocommerce/models/product_attribute/export_mapper.py
@@ -0,0 +1,19 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import changed_by, mapping
+
+
+class WooCommerceProductAttributeExportMapper(Component):
+ _name = "woocommerce.product.attribute.export.mapper"
+ _inherit = "woocommerce.export.mapper"
+
+ _apply_on = "woocommerce.product.attribute"
+
+ @changed_by("name")
+ @mapping
+ def name(self, record):
+ return {
+ "name": record.with_context(lang=self.backend_record.language_id.code).name
+ }
diff --git a/connector_woocommerce/models/product_attribute/exporter.py b/connector_woocommerce/models/product_attribute/exporter.py
new file mode 100644
index 000000000..e2fa17686
--- /dev/null
+++ b/connector_woocommerce/models/product_attribute/exporter.py
@@ -0,0 +1,35 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceProductAttributeBatchDirectExporter(Component):
+ """Export the WooCommerce Product Attibute.
+
+ For every Product Attibute in the list, execute inmediately.
+ """
+
+ _name = "woocommerce.product.attribute.batch.direct.exporter"
+ _inherit = "connector.extension.generic.batch.direct.exporter"
+
+ _apply_on = "woocommerce.product.attribute"
+
+
+class WooCommerceProductAttributeBatchDelayedExporter(Component):
+ """Export the WooCommerce Product Attibute.
+
+ For every Product Attibute in the list, a delayed job is created.
+ """
+
+ _name = "woocommerce.product.attribute.batch.delayed.exporter"
+ _inherit = "connector.extension.generic.batch.delayed.exporter"
+
+ _apply_on = "woocommerce.product.attribute"
+
+
+class WooCommerceProductAttributeExporter(Component):
+ _name = "woocommerce.product.attribute.record.direct.exporter"
+ _inherit = "woocommerce.record.direct.exporter"
+
+ _apply_on = "woocommerce.product.attribute"
diff --git a/connector_woocommerce/models/product_attribute/product_attribute.py b/connector_woocommerce/models/product_attribute/product_attribute.py
new file mode 100644
index 000000000..91e903744
--- /dev/null
+++ b/connector_woocommerce/models/product_attribute/product_attribute.py
@@ -0,0 +1,15 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import fields, models
+
+
+class ProductAttribute(models.Model):
+ _inherit = "product.attribute"
+
+ woocommerce_bind_ids = fields.One2many(
+ comodel_name="woocommerce.product.attribute",
+ inverse_name="odoo_id",
+ string="WooCommerce Bindings",
+ context={"active_test": False},
+ )
diff --git a/connector_woocommerce/models/product_attribute_value/__init__.py b/connector_woocommerce/models/product_attribute_value/__init__.py
new file mode 100644
index 000000000..47eac9b0c
--- /dev/null
+++ b/connector_woocommerce/models/product_attribute_value/__init__.py
@@ -0,0 +1,6 @@
+from . import adapter
+from . import binder
+from . import binding
+from . import export_mapper
+from . import exporter
+from . import product_attribute_value
diff --git a/connector_woocommerce/models/product_attribute_value/adapter.py b/connector_woocommerce/models/product_attribute_value/adapter.py
new file mode 100644
index 000000000..f4413fac9
--- /dev/null
+++ b/connector_woocommerce/models/product_attribute_value/adapter.py
@@ -0,0 +1,86 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import _
+from odoo.exceptions import ValidationError
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceProductAttributeValueAdapter(Component):
+ _name = "woocommerce.product.attribute.value.adapter"
+ _inherit = "connector.woocommerce.adapter"
+
+ _apply_on = "woocommerce.product.attribute.value"
+
+ def read(self, external_id): # pylint: disable=W8106
+ external_id = self.binder_for().id2dict(external_id, in_field=False)
+ url = "products/attributes/%s/terms/%s" % (
+ external_id["parent_id"],
+ external_id["id"],
+ )
+ return self._exec("get", url)
+
+ def search_read(self, domain=None):
+ binder = self.binder_for()
+ domain_dict = self._domain_to_normalized_dict(domain)
+ external_id_fields = binder.get_id_fields(in_field=False)
+ _, common_domain = self._extract_domain_clauses(domain, external_id_fields)
+ external_id = binder.dict2id(domain_dict, in_field=False)
+ if external_id:
+ res = self.read(external_id)
+ else:
+ # We have parent id but not the woocommerce attribute value id
+ if "parent_id" in domain_dict:
+ _, common_domain = self._extract_domain_clauses(
+ common_domain, "parent_name"
+ )
+ url = "products/attributes/%s/terms" % domain_dict["parent_id"]
+ res = self._exec("get", url, domain=common_domain)
+ if res:
+ res[0]["parent_id"] = domain_dict["parent_id"]
+ elif "parent_name" in domain_dict:
+ partner_name, common_domain = self._extract_domain_clauses(
+ common_domain, ["parent_name"]
+ )
+ url = "products/attributes"
+ res = self._exec(
+ "get", url, domain=[("name", "=", domain_dict["parent_name"])]
+ )
+ if not res:
+ return []
+ if len(res) != 1:
+ raise ValidationError(_("More than one product parent found"))
+ parent_id = res[0]["id"]
+ url = "products/attributes/%s/terms" % parent_id
+ res = self._exec("get", url, domain=common_domain)
+ for elem in res:
+ elem["parent_id"] = parent_id
+ else:
+ return []
+ return res
+
+ def create(self, data): # pylint: disable=W8106
+ if "parent_id" not in data:
+ raise ValidationError(
+ _("Attribute id is required to create attribute value on woocommerce.")
+ )
+ res = self._exec(
+ "post",
+ "products/attributes/%s/terms" % data["parent_id"],
+ data=data,
+ )
+ if res:
+ res.update({"parent_id": data["parent_id"]})
+ return res
+
+ def write(self, external_id, data): # pylint: disable=W8106
+ return self._exec(
+ "put",
+ "products/attributes/%s/terms/%s" % (external_id[0], external_id[1]),
+ data=data,
+ )
+
+ def _get_search_fields(self):
+ res = super()._get_search_fields()
+ res.append("slug")
+ return res
diff --git a/connector_woocommerce/models/product_attribute_value/binder.py b/connector_woocommerce/models/product_attribute_value/binder.py
new file mode 100644
index 000000000..4e478e4c2
--- /dev/null
+++ b/connector_woocommerce/models/product_attribute_value/binder.py
@@ -0,0 +1,25 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceProductAttributeValueBinder(Component):
+ _name = "woocommerce.product.attribute.value.binder"
+ _inherit = "woocommerce.binder"
+
+ _apply_on = "woocommerce.product.attribute.value"
+
+ # TODO: Review: Parent_id is a required field to search but if we try
+ # to rebind we need export parents(attributes) before
+ @property
+ def external_id(self):
+ return ["parent_id", "id"]
+
+ @property
+ def internal_id(self):
+ return ["woocommerce_idattribute", "woocommerce_idattributevalue"]
+
+ @property
+ def external_alt_id(self):
+ return ["parent_name", "name"]
diff --git a/connector_woocommerce/models/product_attribute_value/binding.py b/connector_woocommerce/models/product_attribute_value/binding.py
new file mode 100644
index 000000000..f5644e570
--- /dev/null
+++ b/connector_woocommerce/models/product_attribute_value/binding.py
@@ -0,0 +1,53 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import api, fields, models
+
+
+class WooCommerceProductAttributeValue(models.Model):
+ _name = "woocommerce.product.attribute.value"
+ _inherit = "woocommerce.binding"
+ _inherits = {"product.attribute.value": "odoo_id"}
+ _description = "WooCommerce Product Attribute Value Binding"
+
+ odoo_id = fields.Many2one(
+ comodel_name="product.attribute.value",
+ string="Product attribute value",
+ required=True,
+ ondelete="cascade",
+ )
+ woocommerce_idattribute = fields.Integer(
+ string="WooCommerce ID Attribute",
+ readonly=True,
+ )
+ woocommerce_idattributevalue = fields.Integer(
+ string="WooCommerce ID Attribute Value",
+ readonly=True,
+ )
+
+ _sql_constraints = [
+ (
+ "external_uniq",
+ "unique(backend_id, woocommerce_idattribute, woocommerce_idattributevalue)",
+ "A binding already exists with the same External (idAttributevalue) ID.",
+ ),
+ ]
+
+ @api.model
+ def _get_base_domain(self):
+ return []
+
+ def export_product_attribute_value_since(
+ self, backend_record=None, since_date=None
+ ):
+ domain = self._get_base_domain()
+ if since_date:
+ domain += [
+ (
+ "write_date",
+ ">",
+ since_date.strftime("%Y-%m-%dT%H:%M:%S"),
+ )
+ ]
+ self.with_delay().export_batch(backend_record, domain=domain)
+ return True
diff --git a/connector_woocommerce/models/product_attribute_value/export_mapper.py b/connector_woocommerce/models/product_attribute_value/export_mapper.py
new file mode 100644
index 000000000..c00ca3dbc
--- /dev/null
+++ b/connector_woocommerce/models/product_attribute_value/export_mapper.py
@@ -0,0 +1,46 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import changed_by, mapping
+from odoo.addons.connector_extension.components.mapper import required
+
+
+def nullif(field):
+ def modifier(self, record, to_attr):
+ value = record[field]
+ return value and value.strip() or None
+
+ return modifier
+
+
+class WooCommerceProductAttributeValueExportMapper(Component):
+ _name = "woocommerce.product.attribute.value.export.mapper"
+ _inherit = "woocommerce.export.mapper"
+
+ _apply_on = "woocommerce.product.attribute.value"
+
+ @required("name")
+ @changed_by("name")
+ @mapping
+ def name(self, record):
+ return {
+ "name": record.with_context(lang=self.backend_record.language_id.code).name
+ }
+
+ @required("parent_id")
+ @changed_by("attribute_id")
+ @mapping
+ def parent_id(self, record):
+ binder = self.binder_for("woocommerce.product.attribute")
+ values = binder.get_external_dict_ids(record.attribute_id)
+ return {"parent_id": values["id"] or None}
+
+ @changed_by("attribute_id")
+ @mapping
+ def parent_name(self, record):
+ return {
+ "parent_name": record.attribute_id.with_context(
+ lang=self.backend_record.language_id.code
+ ).name
+ }
diff --git a/connector_woocommerce/models/product_attribute_value/exporter.py b/connector_woocommerce/models/product_attribute_value/exporter.py
new file mode 100644
index 000000000..f91abdf86
--- /dev/null
+++ b/connector_woocommerce/models/product_attribute_value/exporter.py
@@ -0,0 +1,41 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceProductAttributeValueBatchDirectExporter(Component):
+ """Export the WooCommerce Product Attibute Value.
+
+ For every Product Attibute Value in the list, execute inmediately.
+ """
+
+ _name = "woocommerce.product.attribute.value.batch.direct.exporter"
+ _inherit = "connector.extension.generic.batch.direct.exporter"
+
+ _apply_on = "woocommerce.product.attribute.value"
+
+
+class WooCommerceProductAttributeValueBatchDelayedExporter(Component):
+ """Export the WooCommerce Product Attibute Value.
+
+ For every Product Attibute Value in the list, a delayed job is created.
+ """
+
+ _name = "woocommerce.product.attribute.value.batch.delayed.exporter"
+ _inherit = "connector.extension.generic.batch.delayed.exporter"
+
+ _apply_on = "woocommerce.product.attribute.value"
+
+
+class WooCommerceProductAttributeValueExporter(Component):
+ _name = "woocommerce.product.attribute.value.record.direct.exporter"
+ _inherit = "woocommerce.record.direct.exporter"
+
+ _apply_on = "woocommerce.product.attribute.value"
+
+ def _export_dependencies(self, relation):
+ self._export_dependency(
+ relation.attribute_id,
+ "woocommerce.product.attribute",
+ )
diff --git a/connector_woocommerce/models/product_attribute_value/product_attribute_value.py b/connector_woocommerce/models/product_attribute_value/product_attribute_value.py
new file mode 100644
index 000000000..ff18d2b04
--- /dev/null
+++ b/connector_woocommerce/models/product_attribute_value/product_attribute_value.py
@@ -0,0 +1,15 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import fields, models
+
+
+class ProductAttributeValue(models.Model):
+ _inherit = "product.attribute.value"
+
+ woocommerce_bind_ids = fields.One2many(
+ comodel_name="woocommerce.product.attribute.value",
+ inverse_name="odoo_id",
+ string="WooCommerce Bindings",
+ context={"active_test": False},
+ )
diff --git a/connector_woocommerce/models/product_product/__init__.py b/connector_woocommerce/models/product_product/__init__.py
new file mode 100644
index 000000000..c9a5e56eb
--- /dev/null
+++ b/connector_woocommerce/models/product_product/__init__.py
@@ -0,0 +1,7 @@
+from . import adapter
+from . import binder
+from . import binding
+from . import export_mapper
+from . import exporter
+from . import product
+from . import product_pricelist_item
diff --git a/connector_woocommerce/models/product_product/adapter.py b/connector_woocommerce/models/product_product/adapter.py
new file mode 100644
index 000000000..df7176be0
--- /dev/null
+++ b/connector_woocommerce/models/product_product/adapter.py
@@ -0,0 +1,90 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import _
+from odoo.exceptions import ValidationError
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceProductProductAdapter(Component):
+ _name = "woocommerce.product.product.adapter"
+ _inherit = "connector.woocommerce.adapter"
+
+ _apply_on = "woocommerce.product.product"
+
+ def _reorg_product_data(self, data):
+ return
+
+ def read(self, external_id): # pylint: disable=W8106
+ external_id_values = self.binder_for().id2dict(external_id, in_field=False)
+ url = "products/%s/variations/%s" % (
+ external_id_values["parent_id"],
+ external_id_values["id"],
+ )
+ res = self._exec("get", url, limit=1)
+ self._reorg_product_data(res)
+ if len(res) > 1:
+ raise ValidationError(
+ _("More than one simple product found with the same id: %s")
+ % (external_id_values["id"])
+ )
+ return res[0]
+
+ def create(self, data): # pylint: disable=W8106
+ self._prepare_data(data)
+ url_l = ["products"]
+ parent = data.pop("parent_id")
+ url_l.append("%s/variations" % parent)
+ res = self._exec("post", "/".join(url_l), data=data)
+ res["parent_id"] = parent
+ return res
+
+ def write(self, external_id, data): # pylint: disable=W8106
+ self._prepare_data(data)
+ return self._exec(
+ "put",
+ "products/%s/variations/%s" % (external_id[0], external_id[1]),
+ data=data,
+ )
+
+ def search_read(self, domain=None):
+ binder = self.binder_for()
+ external_id_fields = binder.get_id_fields(in_field=False)
+ _, common_domain = self._extract_domain_clauses(domain, external_id_fields)
+ domain_dict = self._domain_to_normalized_dict(domain)
+ external_id_values = binder.dict2id2dict(domain_dict, in_field=False)
+ if external_id_values:
+ url = "products/%s/variations/%s" % (
+ external_id_values["parent_id"],
+ external_id_values["id"],
+ )
+ res = self._exec("get", url, domain=common_domain)
+ else:
+ # if "id" in domain_dict and "parent_id" in domain_dict:
+ # url = "products/%s/variations/%s" % (
+ # domain_dict["parent_id"],
+ # domain_dict["id"],
+ # )
+ # res = self._exec("get", url, domain=common_domain)
+ # if "sku" in domain_dict:
+ url = "products"
+ domain.append(("parent_id", "!=", 0))
+ res = self._exec("get", url, domain=domain)
+ # else:
+ # raise ValidationError(_("Params required"))
+ return res
+
+ def _get_search_fields(self):
+ res = super()._get_search_fields()
+ res.extend(["sku", "parent"])
+ return res
+
+ def _format_product_product(self, data):
+ conv_mapper = {
+ "/regular_price": lambda x: str(round(x, 10)) if x is not None else None,
+ "/sale_price": lambda x: str(round(x, 10)) if x is not None else None,
+ }
+ self._convert_format(data, conv_mapper)
+
+ def _prepare_data(self, data):
+ self._format_product_product(data)
diff --git a/connector_woocommerce/models/product_product/binder.py b/connector_woocommerce/models/product_product/binder.py
new file mode 100644
index 000000000..70cb2fc42
--- /dev/null
+++ b/connector_woocommerce/models/product_product/binder.py
@@ -0,0 +1,27 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceProductProductBinder(Component):
+ _name = "woocommerce.product.product.binder"
+ _inherit = "woocommerce.binder"
+
+ _apply_on = "woocommerce.product.product"
+
+ @property
+ def external_id(self):
+ return ["parent_id", "id"]
+
+ @property
+ def internal_id(self):
+ return ["woocommerce_idparent", "woocommerce_idproduct"]
+
+ @property
+ def external_alt_id(self):
+ return ["sku"]
+
+ @property
+ def internal_alt_id(self):
+ return ["default_code"]
diff --git a/connector_woocommerce/models/product_product/binding.py b/connector_woocommerce/models/product_product/binding.py
new file mode 100644
index 000000000..b6d253f11
--- /dev/null
+++ b/connector_woocommerce/models/product_product/binding.py
@@ -0,0 +1,51 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import api, fields, models
+
+
+class WooCommerceProductProduct(models.Model):
+ _name = "woocommerce.product.product"
+ _inherit = "woocommerce.binding"
+ _inherits = {"product.product": "odoo_id"}
+ _description = "WooCommerce Product product Binding"
+
+ odoo_id = fields.Many2one(
+ comodel_name="product.product",
+ string="Product product",
+ required=True,
+ ondelete="cascade",
+ )
+ woocommerce_idproduct = fields.Integer(
+ string="WooCommerce ID Product",
+ readonly=True,
+ )
+ woocommerce_idparent = fields.Integer(
+ string="WooCommerce ID Parent",
+ readonly=True,
+ )
+ _sql_constraints = [
+ (
+ "external_uniq",
+ "unique(backend_id, woocommerce_idproduct)",
+ "A binding already exists with the same External (idProduct) ID.",
+ ),
+ ]
+
+ @api.model
+ def _get_base_domain(self):
+ return [
+ ("product_tmpl_id.woocommerce_enabled", "=", True),
+ ("product_tmpl_id.has_attributes", "=", True),
+ ]
+
+ # TODO: Review Why is export_products_since used instead of overriding
+ # the export_data function?
+ def export_products_since(self, backend_record=None, since_date=None):
+ domain = self._get_base_domain()
+ if since_date:
+ domain.append(
+ ("woocommerce_write_date", ">", fields.Datetime.to_string(since_date))
+ )
+ self.with_delay().export_batch(backend_record, domain=domain)
+ return True
diff --git a/connector_woocommerce/models/product_product/export_mapper.py b/connector_woocommerce/models/product_product/export_mapper.py
new file mode 100644
index 000000000..0e61a5267
--- /dev/null
+++ b/connector_woocommerce/models/product_product/export_mapper.py
@@ -0,0 +1,165 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import _
+from odoo.exceptions import ValidationError
+
+from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import changed_by, mapping
+from odoo.addons.connector_extension.common import tools
+
+
+class WooCommerceProductProductExportMapper(Component):
+ _name = "woocommerce.product.product.export.mapper"
+ _inherit = "woocommerce.product.export.mapper"
+
+ _apply_on = "woocommerce.product.product"
+
+ @mapping
+ def price(self, record):
+ # On WooCommerce regular price is the usually price.
+ # sales price is the price with discount.
+ # On odoo we don't have this functionality per product
+ return {
+ "regular_price": record.lst_price,
+ }
+
+ @mapping
+ def sale_price(self, record):
+ pricelist = self.backend_record.discount_pricelist_id
+ if pricelist:
+ return {
+ "sale_price": pricelist.price_get(record.id, 1)[pricelist.id],
+ }
+ return {"sale_price": None}
+
+ @changed_by("default_code")
+ @mapping
+ def sku(self, record):
+ # This requirement is not needed on WooCommerce
+ # but it's necessary in e-commerce
+ if not record.default_code:
+ raise ValidationError(
+ _("You must define an internal reference for the product {%s}'%s'")
+ % (record.id, record.display_name)
+ )
+ return {"sku": record.default_code}
+
+ @changed_by("is_published")
+ @mapping
+ def status(self, record):
+ return {
+ "status": "publish"
+ if record.active and record.variant_is_published
+ else "private"
+ }
+
+ @mapping
+ def stock(self, record):
+ if (
+ record.type in ("consu", "service")
+ or record.variant_inventory_availability == "never"
+ ):
+ stock = {"manage_stock": False, "stock_status": "instock"}
+ # modificar el type
+ elif record.variant_inventory_availability == "always":
+ qty = sum(
+ self.env["stock.quant"]
+ .search(
+ [
+ ("product_id", "=", record.id),
+ (
+ "location_id",
+ "child_of",
+ self.backend_record.stock_location_ids.ids,
+ ),
+ ]
+ )
+ .mapped("available_quantity")
+ )
+ stock = {
+ "manage_stock": True,
+ # WooCommerce don't accept fractional quantities
+ "stock_quantity": int(qty),
+ "stock_status": "instock" if record.qty_available > 0 else "outofstock",
+ }
+ else:
+ raise ValidationError(
+ _(
+ "The inventory availability '%s' is not supported by WooCommerce. "
+ "Review product variant {%s}%s."
+ )
+ % (
+ record.variant_inventory_availability,
+ record.id,
+ record.display_name,
+ )
+ )
+ return stock
+
+ def _get_product_description(self, record):
+ description = record.with_context(
+ lang=self.backend_record.language_id.code
+ ).variant_public_description
+ if not description:
+ return False
+ return tools.color_rgb2hex(description)
+
+ @mapping
+ def description(self, record):
+ description = []
+ product_description = self._get_product_description(record)
+ if product_description:
+ description.append(product_description)
+ if record.document_ids:
+ document_description = self._prepare_document_description(
+ record.document_ids
+ )
+ if document_description:
+ description.append(document_description)
+ return {"description": "\n".join(description) or None}
+
+ @mapping
+ def parent_id(self, record):
+ binder = self.binder_for("woocommerce.product.template")
+ values = binder.get_external_dict_ids(record.product_tmpl_id)
+ return {"parent_id": values["id"]}
+
+ @mapping
+ def image(self, record):
+ # WooCommerce only allows one image per variant product
+ product_image_attachments = record.with_context(
+ include_main_product_image=self.backend_record.use_main_product_image
+ ).product_variant_image_attachment_ids
+ if product_image_attachments and self.backend_record.wordpress_backend_id:
+ with self.backend_record.wordpress_backend_id.work_on(
+ "wordpress.ir.attachment"
+ ) as work:
+ binder = work.component(usage="binder")
+ image = product_image_attachments[0].attachment_id
+ values = binder.get_external_dict_ids(image, check_external_id=False)
+ if (
+ self.backend_record.wordpress_backend_id.test_database
+ and not values
+ ):
+ return None
+ return {
+ "image": {
+ "id": values["id"],
+ }
+ }
+ else:
+ return {"image": {}}
+
+ @mapping
+ def attributes(self, record):
+ binder = self.binder_for("woocommerce.product.attribute")
+ attr_list = []
+ for value in record.product_template_attribute_value_ids:
+ values = binder.get_external_dict_ids(value.attribute_id)
+ attr_list.append(
+ {
+ "id": values["id"],
+ "option": value.name,
+ }
+ )
+ return {"attributes": attr_list}
diff --git a/connector_woocommerce/models/product_product/exporter.py b/connector_woocommerce/models/product_product/exporter.py
new file mode 100644
index 000000000..bb269bca2
--- /dev/null
+++ b/connector_woocommerce/models/product_product/exporter.py
@@ -0,0 +1,94 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceProductProductBatchDirectExporter(Component):
+ """Export the WooCommerce Product product.
+
+ For every Product product in the list, execute inmediately.
+ """
+
+ _name = "woocommerce.product.product.batch.direct.exporter"
+ _inherit = "connector.extension.generic.batch.direct.exporter"
+
+ _apply_on = "woocommerce.product.product"
+
+
+class WooCommerceProductProductBatchDelayedExporter(Component):
+ """Export the WooCommerce Product Product.
+
+ For every Product product in the list, a delayed job is created.
+ """
+
+ _name = "woocommerce.product.product.batch.delayed.exporter"
+ _inherit = "connector.extension.generic.batch.delayed.exporter"
+
+ _apply_on = "woocommerce.product.product"
+
+
+class WooCommerceProductProductExporter(Component):
+ _name = "woocommerce.product.product.record.direct.exporter"
+ _inherit = "woocommerce.record.direct.exporter"
+
+ _apply_on = "woocommerce.product.product"
+
+ def _export_dependencies(self, relation):
+ # In the case of a woocommerce simple product (Product template with one variant)
+ # we need to export the dependencies of the product template because
+ # it's the product template that will be exported instead of product product
+ if relation.env.context.get("export_wo_acc_p"):
+ self._export_dependency(
+ relation.with_context(export_wo_acc_p=True).product_tmpl_id,
+ "woocommerce.product.template",
+ )
+ else:
+ self._export_dependency(
+ relation.product_tmpl_id,
+ "woocommerce.product.template",
+ always=True,
+ )
+ for line in relation.product_tmpl_id.attribute_line_ids:
+ self._export_dependency(
+ line.attribute_id,
+ "woocommerce.product.attribute",
+ )
+ for value in line.value_ids:
+ self._export_dependency(
+ value,
+ "woocommerce.product.attribute.value",
+ )
+ # TODO: Duplicated code?
+ # for attribute_line in relation.attribute_line_ids:
+ # self._export_dependency(
+ # attribute_line.attribute_id,
+ # "woocommerce.product.attribute",
+ # )
+ product_image_attachments = relation.with_context(
+ include_main_product_image=self.backend_record.use_main_product_image
+ ).product_variant_image_attachment_ids
+ if (
+ product_image_attachments
+ and len(relation.product_tmpl_id.product_variant_ids) > 1
+ ):
+ if self.backend_record.wordpress_backend_id:
+ with self.backend_record.wordpress_backend_id.work_on(
+ "wordpress.ir.attachment"
+ ) as work:
+ exporter = work.component(self._usage)
+ exporter._export_dependency(
+ product_image_attachments[0].attachment_id,
+ "wordpress.ir.attachment",
+ )
+ if relation.product_document_attachment_ids:
+ if self.backend_record.wordpress_backend_id:
+ with self.backend_record.wordpress_backend_id.work_on(
+ "wordpress.ir.attachment"
+ ) as work:
+ exporter = work.component(self._usage)
+ for attachment in relation.product_document_attachment_ids:
+ exporter._export_dependency(
+ attachment.attachment_id,
+ "wordpress.ir.attachment",
+ )
diff --git a/connector_woocommerce/models/product_product/product.py b/connector_woocommerce/models/product_product/product.py
new file mode 100644
index 000000000..1d6409274
--- /dev/null
+++ b/connector_woocommerce/models/product_product/product.py
@@ -0,0 +1,46 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import api, fields, models
+
+
+class ProductProduct(models.Model):
+ _inherit = "product.product"
+
+ woocommerce_bind_ids = fields.One2many(
+ comodel_name="woocommerce.product.product",
+ inverse_name="odoo_id",
+ string="WooCommerce Bindings",
+ context={"active_test": False},
+ )
+ woocommerce_write_date = fields.Datetime(
+ compute="_compute_woocommerce_write_date",
+ store=True,
+ )
+
+ @api.depends(
+ "is_published",
+ "lst_price",
+ "type",
+ "default_code",
+ "image_1920",
+ "default_code",
+ "qty_available",
+ "product_template_attribute_value_ids",
+ "variant_public_description",
+ "alternative_product_ids",
+ "accessory_product_ids",
+ "variant_inventory_availability",
+ "document_ids",
+ "product_tmpl_id",
+ "product_tmpl_id.has_attributes",
+ "product_tmpl_id.woocommerce_enabled",
+ )
+ def _compute_woocommerce_write_date(self):
+ for rec in self:
+ if (
+ rec.product_tmpl_id.woocommerce_enabled
+ or rec.variant_is_published
+ or rec.woocommerce_write_date
+ ):
+ rec.woocommerce_write_date = fields.Datetime.now()
diff --git a/connector_woocommerce/models/product_product/product_pricelist_item.py b/connector_woocommerce/models/product_product/product_pricelist_item.py
new file mode 100644
index 000000000..587a2b3f3
--- /dev/null
+++ b/connector_woocommerce/models/product_product/product_pricelist_item.py
@@ -0,0 +1,49 @@
+# Copyright NuoBiT Solutions - Frank Cespedes
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import api, fields, models
+
+
+class PricelistItem(models.Model):
+ _inherit = "product.pricelist.item"
+
+ def _update_woocommerce_write_date_by_pricelist(self, values):
+ product = values.get("product_id")
+ if product:
+ product = self.env["product.product"].browse(product).exists()
+ else:
+ product = values.get("product_tmpl_id")
+ if product:
+ product = self.env["product.template"].browse(product).exists()
+ product = product.with_context(active_test=False).product_variant_ids
+ if not product:
+ product = (
+ self.product_id
+ or self.product_tmpl_id.with_context(
+ active_test=False
+ ).product_variant_ids
+ )
+
+ if product:
+ if product.woocommerce_bind_ids:
+ product.woocommerce_write_date = fields.Datetime.now()
+
+ def _dependent_field_product_woocommerce_write_date(self):
+ return {"product_id", "product_tmpl_id", "fixed_price", "applied_on"}
+
+ @api.model_create_multi
+ def create(self, vals_list):
+ for values in vals_list:
+ if self._dependent_field_product_woocommerce_write_date() & values.keys():
+ self._update_woocommerce_write_date_by_pricelist(values)
+ return super(PricelistItem, self).create(vals_list)
+
+ def write(self, values):
+ if self._dependent_field_product_woocommerce_write_date() & values.keys():
+ self._update_woocommerce_write_date_by_pricelist(values)
+ return super(PricelistItem, self).write(values)
+
+ def unlink(self):
+ for rec in self:
+ rec._update_woocommerce_write_date_by_pricelist({})
+ return super(PricelistItem, self).unlink()
diff --git a/connector_woocommerce/models/product_public_category/__init__.py b/connector_woocommerce/models/product_public_category/__init__.py
new file mode 100644
index 000000000..5b998a716
--- /dev/null
+++ b/connector_woocommerce/models/product_public_category/__init__.py
@@ -0,0 +1,8 @@
+from . import adapter
+from . import binder
+from . import binding
+from . import export_deleter
+from . import export_mapper
+from . import exporter
+from . import listener
+from . import product_public_category
diff --git a/connector_woocommerce/models/product_public_category/adapter.py b/connector_woocommerce/models/product_public_category/adapter.py
new file mode 100644
index 000000000..e77513817
--- /dev/null
+++ b/connector_woocommerce/models/product_public_category/adapter.py
@@ -0,0 +1,34 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceProductPublicCategoryAdapter(Component):
+ _name = "woocommerce.product.public.category.adapter"
+ _inherit = "connector.woocommerce.adapter"
+
+ _apply_on = "woocommerce.product.public.category"
+
+ def create(self, data): # pylint: disable=W8106
+ return self._exec("post", "products/categories", data=data)
+
+ def write(self, external_id, data): # pylint: disable=W8106
+ if self.env.context.get("resync_exported_dependencies"):
+ return {}
+ external_id_values = self.binder_for().id2dict(external_id, in_field=False)
+ url = "products/categories/%s" % external_id_values["id"]
+ return self._exec("put", url, data=data)
+
+ def search_read(self, domain=None):
+ return self._exec("get", "products/categories", domain=domain)
+
+ def _get_search_fields(self):
+ res = super()._get_search_fields()
+ res.append("slug")
+ return res
+
+ def delete(self, external_id):
+ external_id_values = self.binder_for().id2dict(external_id, in_field=False)
+ url = "products/categories/%s" % external_id_values["id"]
+ return self._exec("delete", url, params={"force": "1"})
diff --git a/connector_woocommerce/models/product_public_category/binder.py b/connector_woocommerce/models/product_public_category/binder.py
new file mode 100644
index 000000000..7d923c369
--- /dev/null
+++ b/connector_woocommerce/models/product_public_category/binder.py
@@ -0,0 +1,23 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceProductPublicCategoryBinder(Component):
+ _name = "woocommerce.product.public.category.binder"
+ _inherit = "woocommerce.binder"
+
+ _apply_on = "woocommerce.product.public.category"
+
+ @property
+ def external_id(self):
+ return ["id"]
+
+ @property
+ def internal_id(self):
+ return ["woocommerce_idpubliccategory"]
+
+ @property
+ def external_alt_id(self):
+ return ["name"]
diff --git a/connector_woocommerce/models/product_public_category/binding.py b/connector_woocommerce/models/product_public_category/binding.py
new file mode 100644
index 000000000..d22c26262
--- /dev/null
+++ b/connector_woocommerce/models/product_public_category/binding.py
@@ -0,0 +1,45 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import api, fields, models
+
+
+class WooCommerceProductPublicCategory(models.Model):
+ _name = "woocommerce.product.public.category"
+ _inherit = "woocommerce.binding"
+ _inherits = {"product.public.category": "odoo_id"}
+ _description = "WooCommerce Product Public Category Binding"
+
+ odoo_id = fields.Many2one(
+ comodel_name="product.public.category",
+ string="Product public category",
+ required=True,
+ ondelete="cascade",
+ )
+ woocommerce_idpubliccategory = fields.Integer(
+ string="WooCommerce ID Public Category",
+ readonly=True,
+ )
+
+ _sql_constraints = [
+ (
+ "external_uniq",
+ "unique(backend_id, woocommerce_idpubliccategory)",
+ "A binding already exists with the same External (idProduct) ID.",
+ ),
+ ]
+
+ @api.model
+ def _get_base_domain(self):
+ return []
+
+ def export_product_public_category_since(
+ self, backend_record=None, since_date=None
+ ):
+ domain = self._get_base_domain()
+ if since_date:
+ domain += [
+ ("write_date", ">", fields.Datetime.to_string(since_date)),
+ ]
+ self.with_delay().export_batch(backend_record, domain=domain)
+ return True
diff --git a/connector_woocommerce/models/product_public_category/export_deleter.py b/connector_woocommerce/models/product_public_category/export_deleter.py
new file mode 100644
index 000000000..a6d5360eb
--- /dev/null
+++ b/connector_woocommerce/models/product_public_category/export_deleter.py
@@ -0,0 +1,35 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceProductPublicCategoryBatchDirectExportDeleter(Component):
+ """Delete the WooCommerce Product Public Category.
+
+ For every Product Public Category in the list, execute inmediately.
+ """
+
+ _name = "woocommerce.product.public.category.batch.direct.export.deleter"
+ _inherit = "connector.extension.batch.direct.export.deleter"
+
+ _apply_on = "woocommerce.product.public.category"
+
+
+class WooCommerceProductPublicCategoryBatchDelayedExportDeleter(Component):
+ """Delete the WooCommerce Product Public Category.
+
+ For every Product Public Category in the list, a delayed job is created.
+ """
+
+ _name = "woocommerce.product.public.category.batch.delayed.export.deleter"
+ _inherit = "connector.extension.batch.delayed.export.deleter"
+
+ _apply_on = "woocommerce.product.public.category"
+
+
+class WooCommerceProductPublicCategoryExportDeleter(Component):
+ _name = "woocommerce.product.public.category.record.direct.export.deleter"
+ _inherit = "woocommerce.record.direct.export.deleter"
+
+ _apply_on = "woocommerce.product.public.category"
diff --git a/connector_woocommerce/models/product_public_category/export_mapper.py b/connector_woocommerce/models/product_public_category/export_mapper.py
new file mode 100644
index 000000000..a60a1e49f
--- /dev/null
+++ b/connector_woocommerce/models/product_public_category/export_mapper.py
@@ -0,0 +1,54 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import _
+from odoo.exceptions import ValidationError
+
+from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import changed_by, mapping
+
+
+class WooCommerceProductPublicCategoryExportMapper(Component):
+ _name = "woocommerce.product.public.category.export.mapper"
+ _inherit = "woocommerce.export.mapper"
+
+ _apply_on = "woocommerce.product.public.category"
+
+ @mapping
+ def parent_id(self, record):
+ binder = self.binder_for("woocommerce.product.public.category")
+ if record.parent_id:
+ values = binder.get_external_dict_ids(record.parent_id)
+ return {"parent": values["id"]}
+
+ @changed_by("name")
+ @mapping
+ def name(self, record):
+ if " " in record.name:
+ raise ValidationError(
+ _(
+ "The category '%s' has a double space in the name. "
+ "WooCommerce only allow one space. Please, remove it before export."
+ )
+ % record.name
+ )
+ return {
+ "name": record.with_context(lang=self.backend_record.language_id.code).name
+ }
+
+ @mapping
+ def description(self, record):
+ return {
+ "description": record.with_context(
+ lang=self.backend_record.language_id.code
+ ).description
+ or None
+ }
+
+ # TODO: We shoud do this differently, is not a good hook
+ def _get_slug_name(self, record):
+ return record.with_context(lang=self.backend_record.language_id.code).slug_name
+
+ @mapping
+ def slug(self, record):
+ slug = self._get_slug_name(record)
+ return {"slug": slug or None}
diff --git a/connector_woocommerce/models/product_public_category/exporter.py b/connector_woocommerce/models/product_public_category/exporter.py
new file mode 100644
index 000000000..6888e3904
--- /dev/null
+++ b/connector_woocommerce/models/product_public_category/exporter.py
@@ -0,0 +1,41 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceProductPublicCategoryBatchDirectExporter(Component):
+ """Export the WooCommerce Product Public Category.
+
+ For every Product Public Category in the list, execute inmediately.
+ """
+
+ _name = "woocommerce.product.public.category.batch.direct.exporter"
+ _inherit = "connector.extension.generic.batch.direct.exporter"
+
+ _apply_on = "woocommerce.product.public.category"
+
+
+class WooCommerceProductPublicCategoryBatchDelayedExporter(Component):
+ """Export the WooCommerce Product Public Category.
+
+ For every Product Public Category in the list, a delayed job is created.
+ """
+
+ _name = "woocommerce.product.public.category.batch.delayed.exporter"
+ _inherit = "connector.extension.generic.batch.delayed.exporter"
+
+ _apply_on = "woocommerce.product.public.category"
+
+
+class WooCommerceProductPublicCategoryExporter(Component):
+ _name = "woocommerce.product.public.category.record.direct.exporter"
+ _inherit = "woocommerce.record.direct.exporter"
+
+ _apply_on = "woocommerce.product.public.category"
+
+ def _export_dependencies(self, relation):
+ if relation.parent_id:
+ self._export_dependency(
+ relation.parent_id, "woocommerce.product.public.category"
+ )
diff --git a/connector_woocommerce/models/product_public_category/listener.py b/connector_woocommerce/models/product_public_category/listener.py
new file mode 100644
index 000000000..e92f242fb
--- /dev/null
+++ b/connector_woocommerce/models/product_public_category/listener.py
@@ -0,0 +1,11 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class ProductPublicCategoryListener(Component):
+ _name = "woocommerce.product.public.category.listener"
+ _inherit = "connector.extension.event.listener"
+
+ _apply_on = "product.public.category"
diff --git a/connector_woocommerce/models/product_public_category/product_public_category.py b/connector_woocommerce/models/product_public_category/product_public_category.py
new file mode 100644
index 000000000..a70fe7537
--- /dev/null
+++ b/connector_woocommerce/models/product_public_category/product_public_category.py
@@ -0,0 +1,42 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import _, fields, models
+from odoo.exceptions import ValidationError
+
+
+class ProductPublicCategory(models.Model):
+ _inherit = "product.public.category"
+
+ woocommerce_bind_ids = fields.One2many(
+ comodel_name="woocommerce.product.public.category",
+ inverse_name="odoo_id",
+ string="WooCommerce Bindings",
+ context={"active_test": False},
+ )
+
+ def unlink(self):
+ categories_with_bindings = self.filtered(lambda x: x.woocommerce_bind_ids)
+ if len(categories_with_bindings) > 1:
+ raise ValidationError(
+ _(
+ "Not supported: It's not possible delete more than one "
+ "category with WooCommerce bindings at the same time"
+ )
+ )
+ children_with_bindings = categories_with_bindings.search(
+ [("parent_id", "in", self.ids)]
+ ).filtered(lambda x: x.woocommerce_bind_ids)
+ if children_with_bindings:
+ raise ValidationError(
+ _(
+ "Not supported: It's not possible delete a category '%s' with "
+ "WooCommerce bindings if it has children with WooCommerce "
+ "bindings. Delete first the children %s"
+ )
+ % (categories_with_bindings.name, children_with_bindings.mapped("name"))
+ )
+ return super(
+ ProductPublicCategory,
+ self.with_context(binding_field="woocommerce_bind_ids"),
+ ).unlink()
diff --git a/connector_woocommerce/models/product_template/__init__.py b/connector_woocommerce/models/product_template/__init__.py
new file mode 100644
index 000000000..7f01959ff
--- /dev/null
+++ b/connector_woocommerce/models/product_template/__init__.py
@@ -0,0 +1,6 @@
+from . import adapter
+from . import binder
+from . import binding
+from . import export_mapper
+from . import exporter
+from . import product_template
diff --git a/connector_woocommerce/models/product_template/adapter.py b/connector_woocommerce/models/product_template/adapter.py
new file mode 100644
index 000000000..39b1381fc
--- /dev/null
+++ b/connector_woocommerce/models/product_template/adapter.py
@@ -0,0 +1,105 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import _
+from odoo.exceptions import ValidationError
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceProductTemplateAdapter(Component):
+ _name = "woocommerce.product.template.adapter"
+ _inherit = "connector.woocommerce.adapter"
+
+ _apply_on = "woocommerce.product.template"
+
+ def _reorg_product_data(self, data):
+ return
+
+ def read(self, external_id): # pylint: disable=W8106
+ external_id_values = self.binder_for().id2dict(external_id, in_field=False)
+ url = "products/%s" % external_id_values["id"]
+ res = self._exec("get", url, limit=1)
+ self._reorg_product_data(res)
+ if len(res) > 1:
+ raise ValidationError(
+ _("More than one simple product found with the same id: %s")
+ % (external_id_values["id"])
+ )
+ return res[0]
+
+ def create(self, data): # pylint: disable=W8106
+ self._prepare_data(data)
+ return self._exec("post", "products", data=data)
+
+ def write(self, external_id, data): # pylint: disable=W8106
+ self._prepare_data(data)
+ url_l = ["products", str(external_id[0])]
+ res = self._exec("put", "/".join(url_l), data=data)
+ return res
+
+ def _modify_res_on_search_read(self, parent_ids, domain_dict):
+ return [{"id": parent_ids.pop()}]
+
+ def search_read(self, domain=None):
+ binder = self.binder_for()
+ domain_dict = self._domain_to_normalized_dict(domain)
+ id_fields = binder.get_id_fields(in_field=False)
+ __, common_domain = self._extract_domain_clauses(domain, id_fields)
+ template_id = binder.dict2id(domain_dict, in_field=False, unwrap=True)
+ if template_id:
+ url = "products/%s" % template_id
+ res = self._exec("get", url, domain=common_domain)
+ else:
+ res = []
+ skus = []
+ if "sku" in domain_dict:
+ skus = domain_dict["sku"]
+ if skus and len(skus) > 1:
+ skus = ",".join([f"{sku}" for sku in skus if sku])
+ if skus:
+ products = self._exec("get", "products", domain=domain)
+ if len(products) == 1 and products[0]["type"] == "simple":
+ return products
+ parent_ids = set(filter(None, map(lambda x: x["parent_id"], products)))
+ if len(parent_ids) > 1:
+ raise ValidationError(
+ _("All variants must belong to the same parent product")
+ )
+ if parent_ids:
+ res = self._modify_res_on_search_read(parent_ids, domain_dict)
+ else:
+ res = self._exec("get", "products", domain=domain)
+ return res
+
+ def _get_search_fields(self):
+ res = super()._get_search_fields()
+ res.extend(["sku"])
+ return res
+
+ def _format_product_template(self, data):
+ conv_mapper = {
+ "/regular_price": lambda x: str(round(x, 10)) if x is not None else None,
+ "/sale_price": lambda x: str(round(x, 10)) if x is not None else None,
+ }
+ self._convert_format(data, conv_mapper)
+
+ def _normalize_simple_sku(self, sku):
+ if isinstance(sku, list):
+ if len(sku) > 1:
+ raise ValidationError(_("Simple products can only have one variant"))
+ else:
+ sku = sku[0]
+ return sku
+
+ def _prepare_data(self, data):
+ self._format_product_template(data)
+ meta_data = self.prepare_meta_data(data)
+ if meta_data:
+ data["meta_data"] = meta_data
+ if data.get("sku"):
+ if data["type"] == "simple":
+ data["sku"] = self._normalize_simple_sku(data["sku"])
+ elif data["type"] == "variable":
+ data.pop("sku")
+ else:
+ raise ValidationError(_("Product type not supported"))
diff --git a/connector_woocommerce/models/product_template/binder.py b/connector_woocommerce/models/product_template/binder.py
new file mode 100644
index 000000000..2ff317d94
--- /dev/null
+++ b/connector_woocommerce/models/product_template/binder.py
@@ -0,0 +1,27 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceProductTemplateBinder(Component):
+ _name = "woocommerce.product.template.binder"
+ _inherit = "woocommerce.binder"
+
+ _apply_on = "woocommerce.product.template"
+
+ @property
+ def external_id(self):
+ return ["id"]
+
+ @property
+ def internal_id(self):
+ return ["woocommerce_idproduct"]
+
+ @property
+ def external_alt_id(self):
+ return ["sku"]
+
+ @property
+ def internal_alt_id(self):
+ return ["default_code"]
diff --git a/connector_woocommerce/models/product_template/binding.py b/connector_woocommerce/models/product_template/binding.py
new file mode 100644
index 000000000..910bb4b79
--- /dev/null
+++ b/connector_woocommerce/models/product_template/binding.py
@@ -0,0 +1,57 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import api, fields, models
+
+
+class WooCommerceProductTemplate(models.Model):
+ _name = "woocommerce.product.template"
+ _inherit = "woocommerce.binding"
+ _inherits = {"product.template": "odoo_id"}
+ _description = "WooCommerce Product template Binding"
+
+ odoo_id = fields.Many2one(
+ comodel_name="product.template",
+ string="Product template",
+ required=True,
+ ondelete="cascade",
+ )
+ woocommerce_idproduct = fields.Integer(
+ string="WooCommerce ID Product",
+ readonly=True,
+ )
+
+ _sql_constraints = [
+ (
+ "external_uniq",
+ "unique(backend_id, woocommerce_idproduct)",
+ "A binding already exists with the same External (idProduct) ID.",
+ ),
+ ]
+
+ @api.model
+ def _get_base_domain(self):
+ return [
+ ("woocommerce_enabled", "=", True),
+ ("has_attributes", "=", False),
+ ]
+
+ def export_product_tmpl_since(self, backend_record=None, since_date=None):
+ domain = self._get_base_domain()
+ if since_date:
+ domain = [
+ (
+ "woocommerce_write_date",
+ ">",
+ fields.Datetime.to_string(since_date),
+ )
+ ]
+ self.with_delay().export_batch(backend_record, domain=domain)
+ return True
+
+ def resync_export(self):
+ super().resync_export()
+ for rec in self:
+ rec.product_variant_ids.woocommerce_bind_ids.filtered(
+ lambda x: x.backend_id == self.backend_id
+ ).resync_export()
diff --git a/connector_woocommerce/models/product_template/export_mapper.py b/connector_woocommerce/models/product_template/export_mapper.py
new file mode 100644
index 000000000..9178476a3
--- /dev/null
+++ b/connector_woocommerce/models/product_template/export_mapper.py
@@ -0,0 +1,295 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import _
+from odoo.exceptions import ValidationError
+
+from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import changed_by, mapping
+from odoo.addons.connector_extension.common import tools
+
+
+class WooCommerceProductTemplateExportMapper(Component):
+ _name = "woocommerce.product.template.export.mapper"
+ _inherit = "woocommerce.product.export.mapper"
+
+ _apply_on = "woocommerce.product.template"
+
+ @mapping
+ def name(self, record):
+ return {"name": record.website_name if record.website_name else record.name}
+
+ @changed_by("default_code")
+ @mapping
+ def sku(self, record):
+ if record.has_attributes:
+ return {"sku": None}
+
+ default_codes = (
+ record.with_context(active_test=False)
+ .product_variant_ids.filtered("default_code")
+ .mapped("default_code")
+ )
+ if not default_codes:
+ raise ValidationError(
+ _("You must define a default code for the product %s") % record.name
+ )
+ return {"sku": default_codes or None}
+
+ @mapping
+ def status(self, record):
+ return {
+ "status": "publish" if record.active and record.is_published else "private"
+ }
+
+ @mapping
+ def stock(self, record):
+ if any(
+ [
+ record.inventory_availability == "never",
+ record.type in ("consu", "service"),
+ record.has_attributes,
+ ]
+ ):
+ stock = {
+ "manage_stock": False,
+ "stock_status": "instock",
+ }
+ else:
+ if record.inventory_availability == "always":
+ manage_stock = True
+ qty = sum(
+ self.env["stock.quant"]
+ .search(
+ [
+ ("product_id", "=", record.product_variant_id.id),
+ (
+ "location_id",
+ "child_of",
+ self.backend_record.stock_location_ids.ids,
+ ),
+ ]
+ )
+ .mapped("available_quantity")
+ )
+ stock = {
+ "manage_stock": manage_stock,
+ "stock_quantity": int(qty),
+ "stock_status": "instock"
+ if record.product_variant_id.qty_available > 0
+ or record.type in ("consu", "service")
+ else "outofstock",
+ }
+ else:
+ raise ValidationError(
+ _(
+ "The inventory availability '%s' is not supported by WooCommerce. "
+ "Review product template {%s}%s."
+ )
+ % (record.inventory_availability, record.id, record.display_name)
+ )
+ return stock
+
+ @mapping
+ def price(self, record):
+ if not record.has_attributes:
+ # On WooCommerce regular price is the usually price.
+ # sales price is the price with discount.
+ # On odoo we don't have this functionality per product
+ return {
+ "regular_price": record.list_price,
+ }
+ return {"regular_price": None}
+
+ @mapping
+ def sale_price(self, record):
+ if not record.has_attributes:
+ pricelist = self.backend_record.discount_pricelist_id
+ if pricelist:
+ return {
+ "sale_price": pricelist.price_get(record.product_variant_id.id, 1)[
+ pricelist.id
+ ],
+ }
+ return {"sale_price": None}
+
+ def _get_product_description(self, record):
+ description = record.with_context(
+ lang=self.backend_record.language_id.code
+ ).public_description
+ if not description:
+ return False
+ return tools.color_rgb2hex(description)
+
+ def _get_product_variant_description(self, record):
+ description = record.product_variant_id.with_context(
+ lang=self.backend_record.language_id.code
+ ).variant_public_description
+ if not description:
+ return False
+ return tools.color_rgb2hex(description)
+
+ @mapping
+ def description(self, record):
+ description = False
+ if record.public_description:
+ description = self._get_product_description(record)
+ elif (
+ len(record.product_variant_ids) == 1
+ and record.product_variant_id.variant_public_description
+ ):
+ description = self._get_product_variant_description(record)
+ return {"description": description if description else ""}
+
+ def _get_short_description(self, record):
+ return record.with_context(
+ lang=self.backend_record.language_id.code
+ ).public_short_description
+
+ @mapping
+ def short_description(self, record):
+ short_description = []
+ public_short_description = self._get_short_description(record)
+ if public_short_description:
+ short_description.append(public_short_description)
+ document_description = self._prepare_document_description(record.document_ids)
+ if document_description:
+ short_description.append(document_description)
+ return {"short_description": "\n".join(short_description) or None}
+
+ @mapping
+ def product_type(self, record):
+ return {"type": "variable" if record.has_attributes else "simple"}
+
+ @mapping
+ def categories(self, record):
+ categories = []
+ binder = self.binder_for("woocommerce.product.public.category")
+ for category in record.public_categ_ids:
+ values = binder.get_external_dict_ids(category)
+ categories.append({"id": values["id"]})
+ if categories:
+ return {"categories": categories}
+
+ def _get_value_ids(self, attribute_line):
+ return attribute_line.product_template_value_ids.with_context(
+ lang=self.backend_record.language_id.code
+ ).mapped("name")
+
+ @mapping
+ def attributes(self, record):
+ binder = self.binder_for("woocommerce.product.attribute")
+ attr_list = []
+ # This method is used to ensure that even the attributes of
+ # archived products are exported
+ for line in record.with_context(
+ active_test=False
+ ).product_variant_ids.product_template_attribute_value_ids.attribute_line_id:
+ values = binder.get_external_dict_ids(line.attribute_id)
+ attr_list.append(
+ {
+ "id": values["id"],
+ "options": self._get_value_ids(line),
+ "visible": "true",
+ "variation": "true",
+ }
+ )
+ if attr_list:
+ return {"attributes": attr_list}
+
+ @mapping
+ def tax_class(self, record):
+ if record.taxes_id:
+ if len(record.taxes_id) > 1:
+ raise ValidationError(
+ _(
+ "Only one tax is allowed per product. "
+ "Please review taxes in product {%s} %s"
+ )
+ % (record.id, record.display_name)
+ )
+ tax_class = self.backend_record.tax_class_ids.filtered(
+ lambda x: record["taxes_id"] == x.account_tax
+ )
+ if not tax_class:
+ raise ValidationError(
+ _("Tax class is not defined on backend for tax %s")
+ % record.mapped("taxes_id").name
+ )
+ return {"tax_class": tax_class.woocommerce_tax_class}
+
+ @mapping
+ def upsell_ids(self, record):
+ binder = self.binder_for("woocommerce.product.template")
+ alternate_list = []
+ if record.alternative_product_ids and not record.env.context.get(
+ "export_wo_alt_p"
+ ):
+ for product in record.alternative_product_ids:
+ values = binder.get_external_dict_ids(product)
+ alternate_list.append(values["id"])
+ return {"upsell_ids": alternate_list}
+
+ @mapping
+ def cross_sell_ids(self, record):
+ product_binder = self.binder_for("woocommerce.product.product")
+ template_binder = self.binder_for("woocommerce.product.template")
+ accessory_list = []
+ if record.accessory_product_ids and not record.env.context.get(
+ "export_wo_acc_p"
+ ):
+ for product in record.accessory_product_ids:
+ if product.product_tmpl_id.has_attributes:
+ values = product_binder.get_external_dict_ids(product)
+ else:
+ values = template_binder.get_external_dict_ids(
+ product.product_tmpl_id
+ )
+ accessory_list.append(values["id"])
+ return {"cross_sell_ids": accessory_list}
+
+ def _get_product_image_attachments(self, record):
+ return record.with_context(
+ include_main_product_image=self.backend_record.use_main_product_image
+ ).product_image_attachment_ids
+
+ @mapping
+ def images(self, record):
+ if self.backend_record.wordpress_backend_id:
+ with self.backend_record.wordpress_backend_id.work_on(
+ "wordpress.ir.attachment"
+ ) as work:
+ binder = work.component(usage="binder")
+ img_list = []
+ product_image_attachments = self._get_product_image_attachments(record)
+ for image in product_image_attachments.mapped("attachment_id"):
+ external_id = binder.get_external_dict_ids(
+ image, check_external_id=False
+ )
+ if external_id:
+ img_list.append(
+ {
+ "id": external_id["id"],
+ }
+ )
+ else:
+ if not self.backend_record.wordpress_backend_id.test_database:
+ assert external_id, (
+ "Unexpected error on %s:"
+ "The backend id cannot be obtained."
+ "At this stage, the backend record should "
+ "have been already linked via "
+ "._export_dependencies. " % record._name
+ )
+ if img_list:
+ return {"images": img_list}
+ else:
+ return {"images": []}
+
+ def _get_slug_name(self, record):
+ return record.with_context(lang=self.backend_record.language_id.code).slug_name
+
+ @mapping
+ def slug(self, record):
+ slug = self._get_slug_name(record)
+ if slug:
+ return {"slug": slug}
diff --git a/connector_woocommerce/models/product_template/exporter.py b/connector_woocommerce/models/product_template/exporter.py
new file mode 100644
index 000000000..450c7da7c
--- /dev/null
+++ b/connector_woocommerce/models/product_template/exporter.py
@@ -0,0 +1,92 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceProductTemplateBatchDirectExporter(Component):
+ """Export the WooCommerce Product template.
+
+ For every Product template in the list, execute inmediately.
+ """
+
+ _name = "woocommerce.product.template.batch.direct.exporter"
+ _inherit = "connector.extension.generic.batch.direct.exporter"
+
+ _apply_on = "woocommerce.product.template"
+
+
+class WooCommerceProductTemplateBatchDelayedExporter(Component):
+ """Export the WooCommerce Product Template.
+
+ For every Product template in the list, a delayed job is created.
+ """
+
+ _name = "woocommerce.product.template.batch.delayed.exporter"
+ _inherit = "connector.extension.generic.batch.delayed.exporter"
+
+ _apply_on = "woocommerce.product.template"
+
+
+class WooCommerceProductTemplateExporter(Component):
+ _name = "woocommerce.product.template.record.direct.exporter"
+ _inherit = "woocommerce.record.direct.exporter"
+
+ _apply_on = "woocommerce.product.template"
+
+ def _export_dependencies(self, relation):
+ for category in relation.public_categ_ids:
+ self._export_dependency(category, "woocommerce.product.public.category")
+ for line in relation.attribute_line_ids:
+ self._export_dependency(
+ line.attribute_id,
+ "woocommerce.product.attribute",
+ )
+ for value in line.value_ids:
+ self._export_dependency(
+ value,
+ "woocommerce.product.attribute.value",
+ )
+ if not relation.env.context.get("export_wo_alt_p"):
+ for alternative_product in relation.alternative_product_ids:
+ self._export_dependency(
+ alternative_product.with_context(export_wo_alt_p=True),
+ "woocommerce.product.template",
+ )
+
+ # TODO: Review circular reference. If at the same time one product variant
+ # is an accessory product of the product template, probably we will have
+ # a circular reference.
+ if not relation.env.context.get("export_wo_acc_p"):
+ for accessory_product in relation.accessory_product_ids:
+ if accessory_product.product_tmpl_id.has_attributes:
+ self._export_dependency(
+ accessory_product.with_context(export_wo_acc_p=True),
+ "woocommerce.product.product",
+ )
+ else:
+ self._export_dependency(
+ accessory_product.product_tmpl_id.with_context(
+ export_wo_acc_p=True
+ ),
+ "woocommerce.product.template",
+ )
+
+ if self.backend_record.wordpress_backend_id:
+ with self.backend_record.wordpress_backend_id.work_on(
+ "wordpress.ir.attachment"
+ ) as work:
+ exporter = work.component(self._usage)
+ product_image_attachments = relation.with_context(
+ include_main_product_image=self.backend_record.use_main_product_image
+ ).product_image_attachment_ids
+ for image_attachment in product_image_attachments:
+ exporter._export_dependency(
+ image_attachment.attachment_id,
+ "wordpress.ir.attachment",
+ )
+ for document_attachment in relation.product_document_attachment_ids:
+ exporter._export_dependency(
+ document_attachment.attachment_id,
+ "wordpress.ir.attachment",
+ )
diff --git a/connector_woocommerce/models/product_template/product_template.py b/connector_woocommerce/models/product_template/product_template.py
new file mode 100644
index 000000000..b7cb18bfe
--- /dev/null
+++ b/connector_woocommerce/models/product_template/product_template.py
@@ -0,0 +1,144 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import _, api, fields, models
+from odoo.exceptions import ValidationError
+
+
+class ProductTemplate(models.Model):
+ _inherit = "product.template"
+
+ woocommerce_bind_ids = fields.One2many(
+ comodel_name="woocommerce.product.template",
+ inverse_name="odoo_id",
+ string="WooCommerce Bindings",
+ context={"active_test": False},
+ )
+ woocommerce_write_date = fields.Datetime(
+ compute="_compute_woocommerce_write_date",
+ store=True,
+ )
+ has_attributes = fields.Boolean(
+ compute="_compute_has_attributes",
+ search="_search_has_attributes",
+ )
+
+ @api.depends("attribute_line_ids")
+ def _compute_has_attributes(self):
+ for rec in self:
+ rec.has_attributes = bool(rec.attribute_line_ids)
+
+ def _search_has_attributes(self, operator, value):
+ if operator == "=" and value:
+ return [("attribute_line_ids", "!=", False)]
+ return [("attribute_line_ids", operator, value)]
+
+ @api.depends(
+ "is_published",
+ "name",
+ "lst_price",
+ "active",
+ "qty_available",
+ "image_1920",
+ "default_code",
+ "description",
+ "public_categ_ids",
+ "attribute_line_ids",
+ "public_description",
+ "inventory_availability",
+ "has_attributes",
+ "document_ids",
+ "woocommerce_enabled",
+ )
+ def _compute_woocommerce_write_date(self):
+ for rec in self:
+ if (
+ rec.woocommerce_enabled
+ or rec.is_published
+ or rec.woocommerce_write_date
+ ):
+ rec.woocommerce_write_date = fields.Datetime.now()
+
+ website_name = fields.Char(
+ translate=True,
+ )
+ public_description = fields.Text(
+ translate=True,
+ )
+ public_short_description = fields.Text(
+ translate=True,
+ )
+ slug_name = fields.Char(
+ translate=True,
+ )
+ is_published = fields.Boolean(
+ compute="_compute_template_is_published",
+ inverse="_inverse_template_is_published",
+ store=True,
+ readonly=False,
+ )
+ button_is_published = fields.Boolean(
+ related="is_published",
+ )
+ woocommerce_enabled = fields.Boolean(
+ compute="_compute_woocommerce_enabled",
+ store=True,
+ readonly=False,
+ )
+
+ def _compute_woocommerce_enabled(self):
+ for rec in self:
+ rec.woocommerce_enabled = rec.is_published
+
+ @api.depends("product_variant_ids.variant_is_published")
+ def _compute_template_is_published(self):
+ for rec in self:
+ published_variants = rec._origin.product_variant_ids.filtered(
+ lambda x: x.variant_is_published
+ )
+ rec.is_published = bool(published_variants)
+
+ def _inverse_template_is_published(self):
+ for rec in self:
+ rec.product_variant_ids.variant_is_published = rec.is_published
+
+ inventory_availability = fields.Selection(
+ compute="_compute_inventory_availability",
+ inverse="_inverse_inventory_availability",
+ store=True,
+ readonly=False,
+ )
+
+ @api.depends("product_variant_ids.variant_inventory_availability")
+ def _compute_inventory_availability(self):
+ for rec in self:
+ never_variants_availability = rec.product_variant_ids.filtered(
+ lambda x: x.variant_inventory_availability == "never"
+ )
+ if never_variants_availability:
+ rec.inventory_availability = "never"
+ else:
+ rec.inventory_availability = "always"
+
+ def _inverse_inventory_availability(self):
+ for rec in self:
+ if rec.inventory_availability in ("always", "never"):
+ rec.product_variant_ids.variant_inventory_availability = (
+ rec.inventory_availability
+ )
+
+ def write(self, vals):
+ res = super().write(vals)
+ if "has_attributes" in vals:
+ for rec in self:
+ if (
+ rec.woocommerce_bind_ids
+ and rec.has_attributes != vals["has_attributes"]
+ ):
+ raise ValidationError(
+ _(
+ "You can't change the attributes if the "
+ "product has a woocommerce binding"
+ )
+ )
+ return res
diff --git a/connector_woocommerce/models/res_partner/__init__.py b/connector_woocommerce/models/res_partner/__init__.py
new file mode 100644
index 000000000..fade27bb6
--- /dev/null
+++ b/connector_woocommerce/models/res_partner/__init__.py
@@ -0,0 +1,6 @@
+from . import adapter
+from . import binder
+from . import binding
+from . import import_mapper
+from . import importer
+from . import res_partner
diff --git a/connector_woocommerce/models/res_partner/adapter.py b/connector_woocommerce/models/res_partner/adapter.py
new file mode 100644
index 000000000..b5aae8c4f
--- /dev/null
+++ b/connector_woocommerce/models/res_partner/adapter.py
@@ -0,0 +1,11 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceResPartnerAdapter(Component):
+ _name = "woocommerce.res.partner.adapter"
+ _inherit = "connector.woocommerce.adapter"
+
+ _apply_on = "woocommerce.res.partner"
diff --git a/connector_woocommerce/models/res_partner/binder.py b/connector_woocommerce/models/res_partner/binder.py
new file mode 100644
index 000000000..df7ea1134
--- /dev/null
+++ b/connector_woocommerce/models/res_partner/binder.py
@@ -0,0 +1,16 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceResPartnerBinder(Component):
+ _name = "woocommerce.res.partner.binder"
+ _inherit = "woocommerce.binder"
+
+ _apply_on = "woocommerce.res.partner"
+
+ external_id = ["type", "hash"]
+ internal_id = ["woocommerce_address_type", "woocommerce_address_hash"]
+ external_alt_id = ["email", "hash", "type"]
+ internal_alt_id = ["address_hash", "type"]
diff --git a/connector_woocommerce/models/res_partner/binding.py b/connector_woocommerce/models/res_partner/binding.py
new file mode 100644
index 000000000..c9f5629e9
--- /dev/null
+++ b/connector_woocommerce/models/res_partner/binding.py
@@ -0,0 +1,38 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import fields, models
+
+
+class WooCommerceResPartner(models.Model):
+ _name = "woocommerce.res.partner"
+ _inherit = "woocommerce.binding"
+ _inherits = {"res.partner": "odoo_id"}
+ _description = "WooCommerce Res Partner Binding"
+
+ odoo_id = fields.Many2one(
+ comodel_name="res.partner",
+ string="Res Partner",
+ required=True,
+ ondelete="cascade",
+ )
+ woocommerce_idrespartner = fields.Integer(
+ string="WooCommerce ID Res Partner",
+ readonly=True,
+ )
+ woocommerce_address_type = fields.Char(
+ string="WooCommerce Type",
+ readonly=True,
+ )
+ woocommerce_address_hash = fields.Char(
+ string="Address Hash",
+ readonly=True,
+ )
+
+ _sql_constraints = [
+ (
+ "external_uniq",
+ "unique(backend_id, woocommerce_idrespartner)",
+ "A binding already exists with the same External (idResPartner) ID.",
+ ),
+ ]
diff --git a/connector_woocommerce/models/res_partner/import_mapper.py b/connector_woocommerce/models/res_partner/import_mapper.py
new file mode 100644
index 000000000..68841be61
--- /dev/null
+++ b/connector_woocommerce/models/res_partner/import_mapper.py
@@ -0,0 +1,73 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import mapping
+
+
+class WooCommerceResPartnerImportMapper(Component):
+ _name = "woocommerce.res.partner.import.mapper"
+ _inherit = "woocommerce.import.mapper"
+
+ _apply_on = "woocommerce.res.partner"
+
+ @mapping
+ def name(self, record):
+ return {"name": record.get("first_name") + " " + record.get("last_name")}
+
+ @mapping
+ def parent_id(self, record):
+ return {"parent_id": record.get("parent") or None}
+
+ @mapping
+ def street(self, record):
+ return {"street": record.get("address_1")}
+
+ @mapping
+ def street2(self, record):
+ return {"street2": record.get("address_2")}
+
+ @mapping
+ def city(self, record):
+ return {"city": record.get("city")}
+
+ @mapping
+ def type(self, record):
+ address_type = record.get("type")
+ if address_type == "billing":
+ return {"type": "invoice"}
+ elif address_type == "shipping":
+ return {"type": "delivery"}
+ return {"type": record.get("type")}
+
+ @mapping
+ def hash(self, record):
+ return {"address_hash": record["hash"]}
+
+ @mapping
+ def state_id(self, record):
+ state = self.env["res.country.state"].search(
+ [
+ ("code", "=", record["state"]),
+ ("country_id.code", "=", record["country"]),
+ ]
+ )
+ if state:
+ return {"state_id": state.id}
+
+ @mapping
+ def zip(self, record):
+ return {"zip": record.get("postcode")}
+
+ @mapping
+ def country_id(self, record):
+ country = self.env["res.country"].search([("code", "=", record.get("country"))])
+ if country:
+ return {"country_id": country.id or None}
+
+ @mapping
+ def email(self, record):
+ return {"email": record.get("email")}
+
+ @mapping
+ def mobile(self, record):
+ return {"mobile": record.get("phone")}
diff --git a/connector_woocommerce/models/res_partner/importer.py b/connector_woocommerce/models/res_partner/importer.py
new file mode 100644
index 000000000..adcf93991
--- /dev/null
+++ b/connector_woocommerce/models/res_partner/importer.py
@@ -0,0 +1,35 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceResPartnerBatchDirectImporter(Component):
+ """Import the WooCommerce Res Partner.
+
+ For every Res Partner in the list, execute inmediately.
+ """
+
+ _name = "woocommerce.res.partner.batch.direct.importer"
+ _inherit = "connector.extension.generic.batch.direct.importer"
+
+ _apply_on = "woocommerce.res.partner"
+
+
+class WooCommerceResPartnerBatchDelayedImporter(Component):
+ """Import the WooCommerce Res Partner.
+
+ For every Res Partner in the list, a delayed job is created.
+ """
+
+ _name = "woocommerce.res.partner.batch.delayed.importer"
+ _inherit = "connector.extension.generic.batch.delayed.importer"
+
+ _apply_on = "woocommerce.res.partner"
+
+
+class WooCommerceResPartnerImporter(Component):
+ _name = "woocommerce.res.partner.record.direct.importer"
+ _inherit = "woocommerce.record.direct.importer"
+
+ _apply_on = "woocommerce.res.partner"
diff --git a/connector_woocommerce/models/res_partner/res_partner.py b/connector_woocommerce/models/res_partner/res_partner.py
new file mode 100644
index 000000000..7fe114153
--- /dev/null
+++ b/connector_woocommerce/models/res_partner/res_partner.py
@@ -0,0 +1,50 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import api, fields, models
+
+from ....connector_extension.common.tools import list2hash
+
+
+class Partner(models.Model):
+ _inherit = "res.partner"
+
+ woocommerce_bind_ids = fields.One2many(
+ comodel_name="woocommerce.res.partner",
+ inverse_name="odoo_id",
+ string="WooCommerce Bindings",
+ context={"active_test": False},
+ )
+
+ address_hash = fields.Char(
+ compute="_compute_address_hash", store=True, readonly=True
+ )
+
+ @api.model
+ def _get_hash_fields(self):
+ return ["name", "street", "street2", "city", "zip", "email", "mobile"]
+
+ def _set_values_hash(self):
+ for rec in self:
+ values = [rec[x] or None for x in self._get_hash_fields()]
+ values.append(rec.parent_id.name or None)
+ values.append(rec.state_id.code or None)
+ values.append(rec.country_id.code or None)
+ return values
+
+ @api.depends(
+ "name",
+ "parent_id",
+ "street",
+ "street2",
+ "city",
+ "state_id",
+ "zip",
+ "country_id",
+ "email",
+ "mobile",
+ )
+ def _compute_address_hash(self):
+ for rec in self:
+ values = rec._set_values_hash()
+ rec.address_hash = list2hash(values)
diff --git a/connector_woocommerce/models/sale_order/__init__.py b/connector_woocommerce/models/sale_order/__init__.py
new file mode 100644
index 000000000..20355b946
--- /dev/null
+++ b/connector_woocommerce/models/sale_order/__init__.py
@@ -0,0 +1,9 @@
+from . import adapter
+from . import binder
+from . import binding
+from . import export_mapper
+from . import exporter
+from . import import_mapper
+from . import importer
+from . import listener
+from . import sale_order
diff --git a/connector_woocommerce/models/sale_order/adapter.py b/connector_woocommerce/models/sale_order/adapter.py
new file mode 100644
index 000000000..627084ee1
--- /dev/null
+++ b/connector_woocommerce/models/sale_order/adapter.py
@@ -0,0 +1,142 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import _
+from odoo.exceptions import ValidationError
+
+from odoo.addons.component.core import Component
+
+from ....connector_extension.common.tools import list2hash
+
+
+class WooCommerceSaleOrderAdapter(Component):
+ _name = "woocommerce.sale.order.adapter"
+ _inherit = "connector.woocommerce.adapter"
+
+ _apply_on = "woocommerce.sale.order"
+
+ def get_total_items(self, resource=None, domain=None):
+ return super().get_total_items("orders", domain=domain)
+
+ def _prepare_data(self, data):
+ meta_data = self.prepare_meta_data(data)
+ if meta_data:
+ data["meta_data"] = meta_data
+
+ def _get_hash_fields(self):
+ return [
+ "name",
+ "address_1",
+ "address_2",
+ "city",
+ "postcode",
+ "email",
+ "phone",
+ "company",
+ "state",
+ "country",
+ ]
+
+ def _get_billing(self, value, hash_fields):
+ if value.get("billing"):
+ value["billing"]["type"] = "billing"
+ value["billing"]["name"] = (
+ value["billing"]["first_name"] + " " + value["billing"]["last_name"]
+ )
+ value["billing"]["hash"] = list2hash(
+ value["billing"].get(x) for x in hash_fields
+ )
+
+ def _get_shipping(self, value, hash_fields):
+ if value.get("shipping"):
+ value["shipping"]["type"] = "shipping"
+ value["shipping"]["name"] = (
+ value["shipping"]["first_name"] + " " + value["shipping"]["last_name"]
+ )
+ value["shipping"]["hash"] = list2hash(
+ value["shipping"].get(x) for x in hash_fields
+ )
+ else:
+ value["shipping"] = None
+
+ def _reorg_order_data(self, values):
+ # reorganize data
+ for value in values:
+ hash_fields = self._get_hash_fields()
+ self._get_billing(value, hash_fields)
+ self._get_shipping(value, hash_fields)
+ if not value.get("products"):
+ value["products"] = []
+ for item in value["line_items"]:
+ item["order_id"] = value["id"]
+ item["is_shipping"] = False
+ if not float(item["subtotal"]):
+ item["discount"] = 0
+ else:
+ item["discount"] = (
+ 1 - float(item["total"]) / float(item["subtotal"])
+ ) * 100
+ product = {
+ "id": item["variation_id"]
+ if item.get("variation_id")
+ else item["product_id"],
+ "sku": item["sku"],
+ "name": item["name"],
+ "type": "variation" if item.get("variation_id") else "simple",
+ }
+ if item.get("variation_id"):
+ product["parent_id"] = item["product_id"]
+ value["products"].append(product)
+ for shipping in value["shipping_lines"]:
+ value["line_items"].append(
+ {
+ "order_id": value["id"],
+ "is_shipping": True,
+ "taxes": shipping["taxes"],
+ "total": shipping["total"],
+ "subtotal": shipping["total"],
+ "quantity": 1,
+ "id": shipping["id"],
+ "discount": 0,
+ "total_tax": shipping["total_tax"],
+ }
+ )
+
+ def read(self, external_id): # pylint: disable=W8106
+ external_id_values = self.binder_for().id2dict(external_id, in_field=False)
+ url = "orders/%s" % (external_id_values["id"])
+ res = self._exec("get", url, limit=1)
+ self._reorg_order_data(res)
+ if len(res) > 1:
+ raise ValidationError(
+ _("More than one order found with the same id: %s")
+ % (external_id_values["id"])
+ )
+ return res[0]
+
+ def search_read(self, domain=None, offset=0, limit=None):
+ self._convert_format_domain(domain)
+ if limit:
+ res = self._exec("get", "orders", domain=domain, offset=offset, limit=limit)
+ else:
+ res = self._exec("get", "orders", domain=domain, offset=offset)
+ self._reorg_order_data(res)
+ return res, len(res)
+
+ def write(self, external_id, data): # pylint: disable=W8106
+ self._prepare_data(data)
+ url_l = ["orders", str(external_id[0])]
+ return self._exec("put", "/".join(url_l), data=data)
+
+ def _get_search_fields(self):
+ res = super()._get_search_fields()
+ res += [
+ "status",
+ "after",
+ "date_created_gmt",
+ "modified_after",
+ "modified_before",
+ ]
+ return res
+
+ def _prepare_domain(self, domain):
+ self._convert_format_domain(domain)
diff --git a/connector_woocommerce/models/sale_order/binder.py b/connector_woocommerce/models/sale_order/binder.py
new file mode 100644
index 000000000..f7f244bc6
--- /dev/null
+++ b/connector_woocommerce/models/sale_order/binder.py
@@ -0,0 +1,16 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceSaleOrderBinder(Component):
+ _name = "woocommerce.sale.order.binder"
+ _inherit = "woocommerce.binder"
+
+ _apply_on = "woocommerce.sale.order"
+
+ external_id = "id"
+ internal_id = "woocommerce_idsaleorder"
+
+ internal_alt_id = "client_order_ref"
diff --git a/connector_woocommerce/models/sale_order/binding.py b/connector_woocommerce/models/sale_order/binding.py
new file mode 100644
index 000000000..2c1ff3946
--- /dev/null
+++ b/connector_woocommerce/models/sale_order/binding.py
@@ -0,0 +1,71 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import api, fields, models
+
+
+class WooCommerceSaleOrder(models.Model):
+ _name = "woocommerce.sale.order"
+ _inherit = "woocommerce.binding"
+ _inherits = {"sale.order": "odoo_id"}
+ _description = "WooCommerce Sale Order Binding"
+
+ odoo_id = fields.Many2one(
+ comodel_name="sale.order",
+ string="Sale Order",
+ required=True,
+ ondelete="cascade",
+ )
+ woocommerce_idsaleorder = fields.Integer(
+ string="WooCommerce ID Sale Order",
+ readonly=True,
+ )
+ woocommerce_status = fields.Char(
+ readonly=True,
+ )
+ woocommerce_order_line_ids = fields.One2many(
+ string="WooCommerce Order Line ids",
+ help="Order Lines in WooCommerce sale orders",
+ comodel_name="woocommerce.sale.order.line",
+ inverse_name="woocommerce_order_id",
+ )
+
+ _sql_constraints = [
+ (
+ "external_uniq",
+ "unique(backend_id, woocommerce_idsaleorder)",
+ "A binding already exists with the same External (idSaleOrder) ID.",
+ ),
+ ]
+
+ @api.model
+ def _get_base_domain(self):
+ return []
+
+ def import_sale_orders_since(self, backend_record=None, since_date=None):
+ domain = self._get_base_domain()
+ # TODO: El extract_domain_clauses don't accept 'in operator,
+ # to use get_total_items in status on-hold and processing we have to do two imports.
+ # We have to find a better way to join this domains.
+ domain += [("status", "=", "on-hold,processing")]
+ # domain += [("status", "=", "on-hold")]
+ # domain += [("status", "in", ["on-hold","processing"])]
+
+ if since_date:
+ domain += [("modified_after", "=", since_date)]
+ self.with_delay().import_batch(backend_record, domain=domain)
+ return True
+
+ def export_sale_orders_since(self, backend_record=None, since_date=None):
+ domain = self._get_base_domain()
+ domain += [("woocommerce_bind_ids", "!=", False)]
+ if since_date:
+ domain += [
+ (
+ "woocommerce_status_write_date",
+ ">",
+ since_date.strftime("%Y-%m-%dT%H:%M:%S"),
+ )
+ ]
+ self.with_delay().export_batch(backend_record, domain=domain)
+ return True
diff --git a/connector_woocommerce/models/sale_order/export_mapper.py b/connector_woocommerce/models/sale_order/export_mapper.py
new file mode 100644
index 000000000..543ba3bff
--- /dev/null
+++ b/connector_woocommerce/models/sale_order/export_mapper.py
@@ -0,0 +1,22 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import mapping
+
+
+class WooCommerceSaleOrderExportMapper(Component):
+ _name = "woocommerce.sale.order.export.mapper"
+ _inherit = "woocommerce.export.mapper"
+
+ _apply_on = "woocommerce.sale.order"
+
+ @mapping
+ def status(self, record):
+ if record.woocommerce_order_state == "processing":
+ status = "on-hold" if record.state == "draft" else "processing"
+ elif record.woocommerce_order_state == "done":
+ status = "completed"
+ else:
+ status = "cancelled"
+ return {"status": status}
diff --git a/connector_woocommerce/models/sale_order/exporter.py b/connector_woocommerce/models/sale_order/exporter.py
new file mode 100644
index 000000000..620ffd8b0
--- /dev/null
+++ b/connector_woocommerce/models/sale_order/exporter.py
@@ -0,0 +1,35 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceSaleOrdertBatchDirectExporter(Component):
+ """Export the WooCommerce Sale Order.
+
+ For every Sale Order in the list, execute inmediately.
+ """
+
+ _name = "woocommerce.sale.order.batch.direct.exporter"
+ _inherit = "connector.extension.generic.batch.direct.exporter"
+
+ _apply_on = "woocommerce.sale.order"
+
+
+class WooCommerceSaleOrderBatchDelayedExporter(Component):
+ """Export the WooCommerce Sale Order.
+
+ For every Sale Order in the list, a delayed job is created.
+ """
+
+ _name = "woocommerce.sale.order.batch.delayed.exporter"
+ _inherit = "connector.extension.generic.batch.delayed.exporter"
+
+ _apply_on = "woocommerce.sale.order"
+
+
+class WooCommerceSaleOrderExporter(Component):
+ _name = "woocommerce.sale.order.record.direct.exporter"
+ _inherit = "woocommerce.record.direct.exporter"
+
+ _apply_on = "woocommerce.sale.order"
diff --git a/connector_woocommerce/models/sale_order/import_mapper.py b/connector_woocommerce/models/sale_order/import_mapper.py
new file mode 100644
index 000000000..3cd7f92b2
--- /dev/null
+++ b/connector_woocommerce/models/sale_order/import_mapper.py
@@ -0,0 +1,119 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import _
+from odoo.exceptions import ValidationError
+
+from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import mapping, only_create
+
+
+class SaleOrderImportMapChild(Component):
+ _name = "woocommerce.sale.order.map.child.import"
+ _inherit = "woocommerce.map.child.import"
+
+ _apply_on = "woocommerce.sale.order.line"
+
+ def get_item_values(self, map_record, to_attr, options):
+ binder = self.binder_for("woocommerce.sale.order.line")
+ external_id = binder.dict2id(map_record.source, in_field=False)
+ woocommerce_order_line = binder.to_internal(external_id, unwrap=False)
+ if woocommerce_order_line:
+ map_record.update(id=woocommerce_order_line.id)
+ return map_record.values(**options)
+
+ def format_items(self, items_values):
+ ops = []
+ for values in items_values:
+ _id = values.pop("id", None)
+ if _id:
+ ops.append((1, _id, values))
+ else:
+ ops.append((0, False, values))
+ return ops
+
+
+class WooCommerceSaleOrderImportMapper(Component):
+ _name = "woocommerce.sale.order.import.mapper"
+ _inherit = "woocommerce.import.mapper"
+
+ _apply_on = "woocommerce.sale.order"
+ children = [
+ ("line_items", "woocommerce_order_line_ids", "woocommerce.sale.order.line")
+ ]
+
+ @mapping
+ def billing(self, record):
+ if record["billing"]:
+ binder = self.binder_for("woocommerce.res.partner")
+ external_id = binder.dict2id(record["billing"], in_field=False)
+ partner = binder.to_internal(external_id, unwrap=True)
+ assert partner, (
+ "partner_id %s should have been imported in "
+ "SaleOrderImporter._import_dependencies" % external_id
+ )
+ if not partner.active:
+ raise ValidationError(
+ _("The partner %s, with id:%s is archived, please, enable it")
+ % (partner.name, partner.id)
+ )
+ partner_return = {"partner_invoice_id": partner.id}
+ if partner.parent_id:
+ partner_return["partner_id"] = partner.parent_id.id
+ else:
+ partner_return["partner_id"] = partner.id
+ return partner_return
+
+ @mapping
+ def shipping(self, record):
+ if record["shipping"]:
+ binder = self.binder_for("woocommerce.res.partner")
+ external_id = binder.dict2id(record["shipping"], in_field=False)
+ partner = binder.to_internal(external_id, unwrap=True)
+ assert partner, (
+ "partner_shipping_id %s should have been imported in "
+ "SaleOrderImporter._import_dependencies" % external_id
+ )
+ return {"partner_shipping_id": partner.id}
+
+ @mapping
+ def payment_method(self, record):
+ payment_mode = self.backend_record.payment_mode_ids.filtered(
+ lambda x: record["payment_method"] == x.woocommerce_payment_mode
+ )
+ if not payment_mode and record["payment_method"]:
+ raise ValidationError(
+ _("Payment method '%s' is not defined on backend")
+ % record.get("payment_method")
+ )
+ return {"payment_mode_id": payment_mode.payment_mode_id.id}
+
+ @mapping
+ def currency(self, record):
+ currency = self.env["res.currency"].search(
+ [("name", "=", record.get("currency"))]
+ )
+ if not currency:
+ raise ValidationError(
+ _("Currency '%s' is not defined") % record.get("currency")
+ )
+ return {"currency_id": currency.id}
+
+ @mapping
+ def woocommerce_order_id(self, record):
+ client_order_ref = (
+ self.backend_record.client_order_ref_prefix + "-" + str(record["id"])
+ )
+ return {"client_order_ref": client_order_ref}
+
+ @mapping
+ def note(self, record):
+ return {"note": record["customer_note"]}
+
+ @mapping
+ def status(self, record):
+ return {"woocommerce_status": record["status"]}
+
+ @only_create
+ @mapping
+ def is_woocommerce(self, record):
+ return {"is_woocommerce": True}
diff --git a/connector_woocommerce/models/sale_order/importer.py b/connector_woocommerce/models/sale_order/importer.py
new file mode 100644
index 000000000..ace84c6de
--- /dev/null
+++ b/connector_woocommerce/models/sale_order/importer.py
@@ -0,0 +1,175 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import _
+from odoo.exceptions import ValidationError
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceSaleOrderBatchDirectImporter(Component):
+ """Import the WooCommerce Sale Order.
+
+ For every Sale Order in the list, execute inmediately.
+ """
+
+ _name = "woocommerce.sale.order.batch.direct.importer"
+ _inherit = "connector.extension.generic.batch.direct.importer"
+
+ _apply_on = "woocommerce.sale.order"
+
+
+class WooCommerceSaleOrderBatchDelayedImporter(Component):
+ """Import the WooCommerce Sale Order.
+
+ For every Sale Order in the list, a delayed job is created.
+ """
+
+ _name = "woocommerce.sale.order.batch.delayed.importer"
+ _inherit = "connector.extension.generic.batch.delayed.importer"
+
+ _apply_on = "woocommerce.sale.order"
+
+
+class WooCommerceSaleOrderImporter(Component):
+ _name = "woocommerce.sale.order.record.direct.importer"
+ _inherit = "woocommerce.record.direct.importer"
+
+ _apply_on = "woocommerce.sale.order"
+
+ def _get_partner_parent_domain(self, dir_type, value):
+ name = value[dir_type].get("company") or value[dir_type].get("name")
+ return [
+ ("company_type", "in", (False, "company")),
+ ("child_ids", "!=", False),
+ ("name", "=", name),
+ ]
+
+ def _additional_partner_parent_fields(self, value, dir_type):
+ return {}
+
+ def _get_partner_parent(self, dir_type, value):
+ # TODO: REVIEW: slug for company name?
+ domain = self._get_partner_parent_domain(dir_type, value)
+ parent = self.env["res.partner"].search(domain)
+ if not parent:
+ parent = self.env["res.partner"].create(
+ {
+ "name": value[dir_type].get("company")
+ or value[dir_type].get("name"),
+ "company_type": "company",
+ **self._additional_partner_parent_fields(value, dir_type),
+ }
+ )
+ elif len(parent) > 1:
+ raise ValidationError(
+ _("There are more than one parent partner with the same name %s")
+ % value[dir_type].get("name")
+ )
+ value[dir_type]["parent"] = parent.id
+
+ def _import_dependencies(self, external_data, sync_date):
+ # Customer
+ binder = self.binder_for("woocommerce.res.partner")
+ billing = external_data.get("billing")
+ if billing:
+ self._get_partner_parent("billing", external_data)
+ self._import_dependency(
+ binder.dict2id(billing, in_field=False),
+ "woocommerce.res.partner",
+ sync_date,
+ external_data=billing,
+ )
+ shipping = external_data.get("shipping")
+ if shipping:
+ self._get_partner_parent("shipping", external_data)
+ self._import_dependency(
+ binder.dict2id(shipping, in_field=False),
+ "woocommerce.res.partner",
+ sync_date,
+ external_data=shipping,
+ )
+ # Products
+ # We have done this so that a product can be linked with external id or sku
+ # without having to call the export dependency and thus avoid the write.
+ # Could we do it another way?
+ products = external_data["products"]
+ for product in products:
+ if product["type"] == "simple":
+ model = "product.template"
+ if product["id"] == 0:
+ raise ValidationError(
+ _(
+ "The product '%s' in the order has been deleted on WooCommerce. "
+ "This order cannot be imported."
+ )
+ % product["name"]
+ )
+ else:
+ model = "product.product"
+ if product["id"] == 0 and product["parent_id"] == 0:
+ raise ValidationError(
+ _(
+ "The product '%s' in the order has been deleted on WooCommerce. "
+ "This order cannot be imported."
+ )
+ % product["name"]
+ )
+
+ binder = self.binder_for("woocommerce." + model)
+ external_id = binder.dict2id(product, in_field=False)
+ binding = binder.to_internal(external_id)
+ if not binding and product.get("sku"):
+ relation = self.env[model].search(
+ [("default_code", "=", product["sku"])]
+ )
+ if not relation:
+ raise ValidationError(
+ _("Product with sku %s not found on Odoo") % product["sku"]
+ )
+ if len(relation) > 1:
+ raise ValidationError(
+ _("More than one product found with sku %s") % product["sku"]
+ )
+ binding = binder.bind_export(product, relation)
+ if not binding:
+ raise ValidationError(_("Product not found on Odoo"))
+
+ def _after_import(self, binding):
+ sale_order = self.binder_for().unwrap_binding(binding)
+ if sale_order.state == "draft" and binding.woocommerce_status == "processing":
+ sale_order.action_confirm()
+
+ def _must_skip(self, binding):
+ """Return True if the binding must be skipped."""
+ res = super()._must_skip(binding)
+ if binding:
+ return _(
+ "The Order %s is already imported "
+ "-> Update not allowed"
+ % self.binder_for().unwrap_binding(binding).display_name
+ )
+ return res
+
+
+class WooCommerceSaleOrderChunkDirectImporter(Component):
+ """Import the Woocommerce Orders.
+
+ For every order in the list, import it directly.
+ """
+
+ _name = "woocommerce.sale.order.chunk.direct.importer"
+ _inherit = "connector.extension.generic.chunk.direct.importer"
+
+ _apply_on = "woocommerce.sale.order"
+
+
+class WooCommerceSaleOrderChunkDelayedImporter(Component):
+ """Import the Woocommerce Orders.
+
+ For every order in the list, a delayed job is created.
+ """
+
+ _name = "woocommerce.sale.order.chunk.delayed.importer"
+ _inherit = "connector.extension.generic.chunk.delayed.importer"
+
+ _apply_on = "woocommerce.sale.order"
diff --git a/connector_woocommerce/models/sale_order/listener.py b/connector_woocommerce/models/sale_order/listener.py
new file mode 100644
index 000000000..6638f66e4
--- /dev/null
+++ b/connector_woocommerce/models/sale_order/listener.py
@@ -0,0 +1,36 @@
+# Copyright NuoBiT Solutions - Eric Antones
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class WooCommerceSaleOrderListener(Component):
+ _name = "sale.order.listener"
+ _inherit = "base.event.listener"
+
+ _apply_on = "sale.order"
+
+ def on_compute_woocommerce_order_state(self, records, fields=None):
+ self.export_records(records, fields)
+
+ def _get_fields_to_update(self):
+ return {"woocommerce_order_state"}
+
+ def export_records(self, records, fields=None):
+ fields_to_update = self._get_fields_to_update()
+ for rec in records:
+ if rec.woocommerce_bind_ids:
+ if set(fields) & fields_to_update:
+ if records.sudo().woocommerce_bind_ids:
+ backends = records.sudo().woocommerce_bind_ids.backend_id
+ else:
+ backends = self.env["woocommerce.backend"].search(
+ [("state", "=", "validated")]
+ )
+ Order = self.env["woocommerce.sale.order"]
+ domain = [
+ *Order._get_base_domain(),
+ ("id", "in", records.ids),
+ ]
+ for backend in backends:
+ Order.export_batch(backend, domain=domain, delayed=False)
diff --git a/connector_woocommerce/models/sale_order/sale_order.py b/connector_woocommerce/models/sale_order/sale_order.py
new file mode 100644
index 000000000..8facbce8f
--- /dev/null
+++ b/connector_woocommerce/models/sale_order/sale_order.py
@@ -0,0 +1,80 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import api, fields, models
+
+
+class SaleOrder(models.Model):
+ _inherit = "sale.order"
+
+ woocommerce_bind_ids = fields.One2many(
+ comodel_name="woocommerce.sale.order",
+ inverse_name="odoo_id",
+ string="WooCommerce Bindings",
+ context={"active_test": False},
+ )
+ is_woocommerce = fields.Boolean(
+ default=False,
+ )
+ woocommerce_status_write_date = fields.Datetime(
+ compute="_compute_woocommerce_status_write_date",
+ store=True,
+ )
+
+ @api.depends("state", "picking_ids", "picking_ids.state")
+ def _compute_woocommerce_status_write_date(self):
+ for rec in self:
+ if rec.is_woocommerce:
+ rec.woocommerce_status_write_date = fields.Datetime.now()
+
+ woocommerce_order_state = fields.Selection(
+ compute="_compute_woocommerce_order_state",
+ store=True,
+ selection=[
+ ("processing", "Processing"),
+ ("done", "Done"),
+ ("cancel", "Cancel"),
+ ],
+ )
+
+ def _get_woocommerce_order_state(self, picking_states):
+ self.ensure_one()
+ if not picking_states or "processing" in picking_states:
+ woocommerce_order_state = "processing"
+ else:
+ if "done" not in self.picking_ids.mapped("state"):
+ woocommerce_order_state = "cancel"
+ else:
+ woocommerce_order_state = "done"
+ return woocommerce_order_state
+
+ @api.depends(
+ "state",
+ "order_line.qty_delivered",
+ "order_line.product_uom_qty",
+ "woocommerce_bind_ids",
+ "picking_ids.woocommerce_stock_picking_state",
+ "picking_ids.state",
+ )
+ def _compute_woocommerce_order_state(self):
+ for rec in self:
+ if rec.is_woocommerce:
+ picking_states = self.picking_ids.mapped(
+ "woocommerce_stock_picking_state"
+ )
+ woocommerce_order_state = rec._get_woocommerce_order_state(
+ picking_states
+ )
+ if woocommerce_order_state != rec.woocommerce_order_state:
+ rec.woocommerce_order_state = woocommerce_order_state
+ self._event("on_compute_woocommerce_order_state").notify(
+ rec, fields={"woocommerce_order_state"}
+ )
+
+ def action_confirm(self):
+ res = super().action_confirm()
+ if self.woocommerce_bind_ids.woocommerce_status == "on-hold":
+ self._event("on_compute_woocommerce_order_state").notify(
+ self, fields={"woocommerce_order_state"}
+ )
+ return res
diff --git a/connector_woocommerce/models/sale_order_line/__init__.py b/connector_woocommerce/models/sale_order_line/__init__.py
new file mode 100644
index 000000000..1eda1882c
--- /dev/null
+++ b/connector_woocommerce/models/sale_order_line/__init__.py
@@ -0,0 +1,4 @@
+from . import import_mapper
+from . import binder
+from . import binding
+from . import sale_order_line
diff --git a/connector_woocommerce/models/sale_order_line/binder.py b/connector_woocommerce/models/sale_order_line/binder.py
new file mode 100644
index 000000000..066452329
--- /dev/null
+++ b/connector_woocommerce/models/sale_order_line/binder.py
@@ -0,0 +1,38 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo.addons.component.core import Component
+
+
+class SaleOrderLineBinder(Component):
+ _name = "woocommerce.sale.order.line.binder"
+ _inherit = "woocommerce.binder"
+
+ _apply_on = "woocommerce.sale.order.line"
+
+ external_id = ["id", "order_id"]
+ internal_id = [
+ "woocommerce_order_line_id",
+ "woocommerce_sale_order_id",
+ ]
+ # internal_alt_id = ["product_id", "price_unit", "product_uom_qty", "order_id"]
+
+ # TODO: REVIEW: Make an heuristic to bind sale order
+ # lines without binding but with a sale order binded
+ # def _get_internal_record_alt(self, values):
+ # model_name = self.unwrap_model()
+ # product = self.env['product.product'].search([('name', '=', values.pop('name'))])
+ # if not product:
+ # return self.env[model_name]
+ # values['product_id'] = product.product_variant_ids.ids
+ # order = self.env['sale.order'].search(
+ # [('client_order_ref', '=', values.get('order_id'))])
+ # if not order:
+ # return self.env[model_name]
+ # values['order_id'] = order.id
+ # line = super()._get_internal_record_alt(values)
+ # if line:
+ # if len(line) > 1:
+ # raise Exception("More than one sale order line found
+ # for this order, it's not possible to bind it")
+ # return line
diff --git a/connector_woocommerce/models/sale_order_line/binding.py b/connector_woocommerce/models/sale_order_line/binding.py
new file mode 100644
index 000000000..ea0439266
--- /dev/null
+++ b/connector_woocommerce/models/sale_order_line/binding.py
@@ -0,0 +1,60 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import api, fields, models
+
+
+class SaleOrderLineBinding(models.Model):
+ _name = "woocommerce.sale.order.line"
+ _inherit = "woocommerce.binding"
+ _inherits = {"sale.order.line": "odoo_id"}
+
+ odoo_id = fields.Many2one(
+ comodel_name="sale.order.line",
+ string="Order line",
+ required=True,
+ ondelete="cascade",
+ )
+ backend_id = fields.Many2one(
+ related="woocommerce_order_id.backend_id",
+ string="Backend",
+ readonly=True,
+ store=True,
+ required=False,
+ )
+ woocommerce_order_id = fields.Many2one(
+ comodel_name="woocommerce.sale.order",
+ string="WooCommerce Order",
+ required=True,
+ ondelete="cascade",
+ index=True,
+ )
+ woocommerce_sale_order_id = fields.Integer()
+ woocommerce_order_line_id = fields.Integer(
+ string="WooCommerce Order Line ID",
+ required=True,
+ )
+
+ _sql_constraints = [
+ (
+ "lol_ext_uniq",
+ "unique(backend_id, woocommerce_order_line_id)",
+ "A binding already exists with the same External (WooCommerce) ID.",
+ ),
+ ]
+
+ @api.model_create_multi
+ def create(self, vals_list):
+ for vals in vals_list:
+ woocommerce_order_id = vals["woocommerce_order_id"]
+ binding = self.env["woocommerce.sale.order"].browse(woocommerce_order_id)
+ vals["order_id"] = binding.odoo_id.id
+ return super().create(vals_list)
+ # FIXME triggers function field
+ # The amounts (amount_total, ...) computed fields on 'sale.order' are
+ # not triggered when magento.sale.order.line are created.
+ # It might be a v8 regression, because they were triggered in
+ # v7. Before getting a better correction, force the computation
+ # by writing again on the line.
+ # line = binding.odoo_id
+ # line.write({'price_unit': line.price_unit})
diff --git a/connector_woocommerce/models/sale_order_line/import_mapper.py b/connector_woocommerce/models/sale_order_line/import_mapper.py
new file mode 100644
index 000000000..12533d640
--- /dev/null
+++ b/connector_woocommerce/models/sale_order_line/import_mapper.py
@@ -0,0 +1,108 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import _
+from odoo.exceptions import ValidationError
+
+from odoo.addons.component.core import Component
+from odoo.addons.connector.components.mapper import mapping, only_create
+
+
+class SaleOrderLineImportMapper(Component):
+ _name = "woocommerce.sale.order.line.import.mapper"
+ _inherit = "woocommerce.import.mapper"
+
+ _apply_on = "woocommerce.sale.order.line"
+
+ @only_create
+ @mapping
+ def backend_id(self, record):
+ return {"backend_id": self.backend_record.id}
+
+ @mapping
+ def woocommerce_line_id(self, record):
+ binder = self.binder_for()
+ external_id = binder.dict2id(record, in_field=False)
+ return binder.id2dict(external_id, in_field=True)
+
+ @mapping
+ def price_unit(self, record):
+ return {"price_unit": (float(record["subtotal"])) / record["quantity"]}
+
+ @mapping
+ def price_total(self, record):
+ return {"price_total": float(record["subtotal"])}
+
+ @mapping
+ def price_tax(self, record):
+ return {"price_tax": float(record["total_tax"])}
+
+ @mapping
+ def price_subtotal(self, record):
+ return {"price_subtotal": float(record["total"])}
+
+ @mapping
+ def product_id(self, record):
+ if record["is_shipping"]:
+ shipping_product = self.backend_record.shipping_product_id
+ if not shipping_product:
+ raise ValidationError(
+ _("Shipping product not found, please define it on Backend")
+ )
+ return {"product_id": shipping_product.id}
+ if record.get("variation_id"):
+ external_id = [record["product_id"], record["variation_id"]]
+ binder = self.binder_for("woocommerce.product.product")
+ product_odoo = binder.to_internal(external_id, unwrap=True)
+ else:
+ if not record.get("product_id"):
+ raise ValidationError(
+ _(
+ "Product not found in order line. "
+ "Probably this product has been deleted in WooCommerce."
+ )
+ )
+ external_id = [record["product_id"]]
+ binder = self.binder_for("woocommerce.product.template")
+ product_tmpl = binder.to_internal(external_id, unwrap=True)
+ product_odoo = product_tmpl.product_variant_id
+ assert product_odoo, (
+ "product_id %s should have been imported in "
+ "SaleOrderImporter._import_dependencies" % (external_id,)
+ )
+ return {"product_id": product_odoo.id}
+
+ @mapping
+ def tax_id(self, record):
+ if record.get("taxes"):
+ taxes = []
+ for tax in record.get("taxes"):
+ if tax["total"]:
+ tax_map = self.backend_record.tax_map_ids.filtered(
+ lambda x: tax["id"] == int(x.woocommerce_tax_rate_id)
+ )
+ if not tax_map:
+ raise ValidationError(
+ _("Tax rate %s not found in backend mapping.") % tax["id"]
+ )
+ else:
+ taxes.append(tax_map.account_tax.id)
+ if taxes:
+ return {"tax_id": [(6, 0, taxes)]}
+
+ @mapping
+ def quantity(self, record):
+ return {"product_uom_qty": record["quantity"]}
+
+ @mapping
+ def order(self, record):
+ external_id = [record["order_id"]]
+ binder = self.binder_for("woocommerce.sale.order")
+ order = binder.to_internal(external_id, unwrap=True)
+ return {"order_id": order}
+
+ @mapping
+ def woocommerce_discount(self, record):
+ return {
+ "woocommerce_discount": record["discount"],
+ "discount": record["discount"],
+ }
diff --git a/connector_woocommerce/models/sale_order_line/sale_order_line.py b/connector_woocommerce/models/sale_order_line/sale_order_line.py
new file mode 100644
index 000000000..376a0a170
--- /dev/null
+++ b/connector_woocommerce/models/sale_order_line/sale_order_line.py
@@ -0,0 +1,49 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import api, fields, models
+from odoo.tools.float_utils import float_round
+
+
+class SaleOrderLine(models.Model):
+ _inherit = "sale.order.line"
+
+ # This field is created with digits=False to force
+ # the creation with type numeric, like discount.
+ woocommerce_discount = fields.Float(
+ digits=False,
+ )
+ stock_move_ids = fields.One2many(
+ comodel_name="stock.move",
+ inverse_name="sale_line_id",
+ )
+ discount = fields.Float(
+ digits=False,
+ )
+
+ woocommerce_bind_ids = fields.One2many(
+ comodel_name="woocommerce.sale.order.line",
+ inverse_name="odoo_id",
+ string="WooCommerce Bindings",
+ context={"active_test": False},
+ )
+
+ def write(self, vals):
+ prec = self.env.ref("product.decimal_discount").digits
+ if "woocommerce_discount" in vals:
+ vals["discount"] = vals["woocommerce_discount"]
+ elif "discount" in vals and not self.woocommerce_discount:
+ vals["discount"] = float_round(vals["discount"], precision_digits=prec)
+ return super().write(vals)
+
+ @api.model_create_multi
+ def create(self, vals_list):
+ prec = self.env.ref("product.decimal_discount").digits
+ for values in vals_list:
+ if "woocommerce_discount" in values:
+ values["discount"] = values["woocommerce_discount"]
+ elif "discount" in values:
+ values["discount"] = float_round(
+ values["discount"], precision_digits=prec
+ )
+ return super().create(vals_list)
diff --git a/connector_woocommerce/models/stock_picking/__init__.py b/connector_woocommerce/models/stock_picking/__init__.py
new file mode 100644
index 000000000..ae4c27227
--- /dev/null
+++ b/connector_woocommerce/models/stock_picking/__init__.py
@@ -0,0 +1 @@
+from . import stock_picking
diff --git a/connector_woocommerce/models/stock_picking/stock_picking.py b/connector_woocommerce/models/stock_picking/stock_picking.py
new file mode 100644
index 000000000..05fe452f2
--- /dev/null
+++ b/connector_woocommerce/models/stock_picking/stock_picking.py
@@ -0,0 +1,38 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import api, fields, models
+
+
+class Picking(models.Model):
+ _inherit = "stock.picking"
+
+ woocommerce_stock_picking_state = fields.Selection(
+ compute="_compute_woocommerce_stock_picking_state",
+ selection=[
+ ("processing", "Processing"),
+ ("done", "Done"),
+ ("cancel", "Cancel"),
+ ],
+ )
+
+ def _get_woocommerce_stock_picking_state(self):
+ self.ensure_one()
+ if self.state == "done":
+ woocommerce_stock_picking_state = "done"
+ elif self.state == "cancel":
+ woocommerce_stock_picking_state = "cancel"
+ else:
+ woocommerce_stock_picking_state = "processing"
+ return woocommerce_stock_picking_state
+
+ @api.depends("state")
+ def _compute_woocommerce_stock_picking_state(self):
+ for rec in self:
+ if rec.sale_id.is_woocommerce:
+ woocommerce_stock_picking_state = (
+ rec._get_woocommerce_stock_picking_state()
+ )
+ rec.woocommerce_stock_picking_state = woocommerce_stock_picking_state
+ else:
+ rec.woocommerce_stock_picking_state = False
diff --git a/connector_woocommerce/readme/CONTRIBUTORS.rst b/connector_woocommerce/readme/CONTRIBUTORS.rst
new file mode 100644
index 000000000..e468d95a0
--- /dev/null
+++ b/connector_woocommerce/readme/CONTRIBUTORS.rst
@@ -0,0 +1,4 @@
+* `NuoBiT `__:
+
+ * Kilian Niubo
+ * Eric Antones
diff --git a/connector_woocommerce/readme/DESCRIPTION.rst b/connector_woocommerce/readme/DESCRIPTION.rst
new file mode 100644
index 000000000..2de74dba8
--- /dev/null
+++ b/connector_woocommerce/readme/DESCRIPTION.rst
@@ -0,0 +1 @@
+Connector WooCommerce
diff --git a/connector_woocommerce/security/connector_woocommerce.xml b/connector_woocommerce/security/connector_woocommerce.xml
new file mode 100644
index 000000000..f81cb9cfc
--- /dev/null
+++ b/connector_woocommerce/security/connector_woocommerce.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ Connector Woocommerce backend multi-company rule
+
+ ['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]
+
+
+
diff --git a/connector_woocommerce/security/ir.model.access.csv b/connector_woocommerce/security/ir.model.access.csv
new file mode 100644
index 000000000..7f0f2af45
--- /dev/null
+++ b/connector_woocommerce/security/ir.model.access.csv
@@ -0,0 +1,25 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+"access_woocommerce_backend_manager","woocommerce_backend connector manager","model_woocommerce_backend","connector.group_connector_manager",1,1,1,1
+"access_woocommerce_backend_user","woocommerce_backend connector user","model_woocommerce_backend","base.group_user",1,0,0,0
+"access_woocommerce_backend_account_tax_manager","woocommerce_backend_account_tax connector manager","model_woocommerce_backend_account_tax","connector.group_connector_manager",1,1,1,1
+"access_woocommerce_backend_account_tax_user","woocommerce_backend_account_tax connector user","model_woocommerce_backend_account_tax","base.group_user",1,0,0,0
+"access_woocommerce_backend_tax_class_manager","woocommerce_backend_tax_class connector manager","model_woocommerce_backend_tax_class","connector.group_connector_manager",1,1,1,1
+"access_woocommerce_backend_tax_class_user","woocommerce_backend_tax_class connector user","model_woocommerce_backend_tax_class","base.group_user",1,0,0,0
+"access_woocommerce_backend_payment_mode_manager","woocommerce_backend_payment_mode connector manager","model_woocommerce_backend_payment_mode","connector.group_connector_manager",1,1,1,1
+"access_woocommerce_backend_payment_mode_user","woocommerce_backend_payment_mode connector user","model_woocommerce_backend_payment_mode","base.group_user",1,0,0,0
+"access_woocommerce_product_product_manager","woocommerce_product_product connector manager","model_woocommerce_product_product","connector.group_connector_manager",1,1,1,1
+"access_woocommerce_product_product_user","woocommerce_product_product connector user","model_woocommerce_product_product","base.group_user",1,0,0,0
+"access_woocommerce_product_public_category_manager","woocommerce_product_public_category connector manager","model_woocommerce_product_public_category","connector.group_connector_manager",1,1,1,1
+"access_woocommerce_product_public_category_user","woocommerce_product_public_category connector user","model_woocommerce_product_public_category","base.group_user",1,0,0,0
+"access_woocommerce_product_template_manager","woocommerce_product_template connector manager","model_woocommerce_product_template","connector.group_connector_manager",1,1,1,1
+"access_woocommerce_product_template_user","woocommerce_product_template connector user","model_woocommerce_product_template","base.group_user",1,0,0,0
+"access_woocommerce_product_attribute_manager","woocommerce_product_attribute connector manager","model_woocommerce_product_attribute","connector.group_connector_manager",1,1,1,1
+"access_woocommerce_product_attribute_user","woocommerce_product_attribute connector user","model_woocommerce_product_attribute","base.group_user",1,0,0,0
+"access_woocommerce_product_attribute_value_manager","woocommerce_product_attribute_value connector manager","model_woocommerce_product_attribute_value","connector.group_connector_manager",1,1,1,1
+"access_woocommerce_product_attribute_value_user","woocommerce_product_attribute_value connector user","model_woocommerce_product_attribute_value","base.group_user",1,0,0,0
+"access_woocommerce_sale_order_manager","woocommerce_sale_order connector manager","model_woocommerce_sale_order","connector.group_connector_manager",1,1,1,1
+"access_woocommerce_sale_order_user","woocommerce_sale_order connector user","model_woocommerce_sale_order","base.group_user",1,0,0,0
+"access_woocommerce_res_partner_manager","woocommerce_res_partner connector manager","model_woocommerce_res_partner","connector.group_connector_manager",1,1,1,1
+"access_woocommerce_res_partner_user","woocommerce_res_partner connector user","model_woocommerce_res_partner","base.group_user",1,0,0,0
+"access_woocommerce_sale_order_line_manager","woocommerce_sale_order_line connector manager","model_woocommerce_sale_order_line","connector.group_connector_manager",1,1,1,1
+"access_woocommerce_sale_order_line_user","woocommerce_sale_order_line connector user","model_woocommerce_sale_order_line","base.group_user",1,0,0,0
diff --git a/connector_woocommerce/static/description/icon.png b/connector_woocommerce/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..1cd641e792c30455187ca30940bc0f329ce8bbb0
GIT binary patch
literal 6342
zcmd^^hf`C}*TzHWpfm-MZa|7OjYtjE(4`3pP0Eid3J8V{0s)mKJ<q
zp^9|rp$mb~2}po9-@oIXJG(oxcjoS%d!O@s&d!Z9HP*e##KQyt0IurmK_64bp8pyH
z9i^|ds>-JfbWVo4P{8GX*QeIfbjl2)kDfIG0ALvZuTgp2ZfK=U();NfY11z-vM>r=
zo6RyI007+P`cO@apy}VqnaiVCLL`CEUGVGYE&5WpdhhbZv%|*-Y|2t(4~Cq|y`-Nmm-W
zxaTf4+R69rVU1b%qjm?yu*PFgHFYd#J82-D8cpXqO&omwG2*Hd6ZIUiK@+
zNCo8Lg{1^vn^0ZQgz*~*ZR3wsULxnnSBN%7p()3EYs>sX9In)T{*nJ2q*qxXPNhFk
z=z=+?4VOOdAF!ZYAVisYzF29g?udLQJtx@=HoAK_Kjx;4SO7>H_v*McB7(}RHMa>
z+PNao{Hw&Mjo0P}CBR&l(k@iIeRI@PRH6R9^lR3e?TL?ZHra#GHvKmkeVBHG8nv4{
zz$nHGR7`D$ae@TrcXCSA=$~Yvp@J|bKul>6s-`yT7>JaM5?KcltZ)(ilt^74fqLA{
z1k!bKw(GMV*AOgI*glG_($h!cZgArkEAa1SkSG`0yF8JLWTq^J->2CRaqKH1ZSQt7
z29|+OBS3Rj91K1XL~_9&zn1p
z)2Ez)&{9Of1X#b+mpgJ`{gurrlYqKrwrWXTOH{M%kEUhcgSp1J2FK4FF`JS|NfaAA6)?-&1}B`@lI2~kKWK)
zhQ|}GQ$j(rNS}9?Yu9}MzWxz*HMwR=u8$RYY6sr2pu3x5Yx*P!Z&c|X
zFZcC{+kqJV=XTZH=cMb6)MtgWo%C~XU8TEXDKx9;0hEV*74Z6i8vuzXp
zw<8QvI~;n;3@<^G0C#HHf2{N6E~2DO3jw!?w}z?_vV6Q>?kJ>IF-kEc*TtP}k7cVd
zvtdPgQ^jWhMXAL$Lqn!_A_IL+!hbY37)n@Sqc)6JwD4)3LP`up1cy^EXzh>B{$ce0
zgX~Iat{I@DM|zU|>9DuD?g}h7zCqV;o1*~3Hr=DYjDq;SG?3HS)(x+l@HAa-@>5wH
zhw`oqg>hP$e41h5)>$#qFWq?LGX`dC8ph`RyR&_z&og>psSHzZ=_8<-M4yk+3HK-+
zxqe%Ntx88}49jJazM_Vov;)83cSeeLv@taHOL>zP>~bqdmEyfHl9M%`@ivb|7{I;N
zzyHw9P7EH0$ww52RejJv>zvSr8v*iuX@X;(Z~NuUv$D0I_>OkcZWSulBUJjHUN=n|
zSI$q@$)`(E;^(|}q|2utYl8}>IcXkPX#{6Z%JnhUBly1B@B}sECm2Y88-QrQZd2n2
zKL=1_&Z87xM=GaycA-Ac*R<^bJk>-^k%lt;DjswC+AM`71*2iG?;!3Bc)I>55v)^C
zkt+Uzn&dhv|58XAY6{%ybSiVMl-sATTy=SUADQWD+(@-AVqg@Y+_fBV$LJnIEfujI4B5%4a@8S4M*50Lh7NqKSW>K=U5dW@)Hd{^oR4v%
zCM2(rAq7Qe-)R0ko{l@iCHGsxhkCNWby
zf&gByp!>=?r1ecWMqz5e-BmOED6n!_1V4<)R!!QNwM!AyGty8>p>ebEzdp*_(kAYA
z5*F^g_K}%Rm;V}4Q46qJpU+&3bU10WYg{j`T>lv9{B)J}RHC}yzy9x)wm4ju23yQ&
zUNm(i_(ChqD8d7AVUFMw
zXmia0A{l#}Sfq!GmHjatiTk$f|OvS0iG>W{p<8cZu^6HX`rMuX?l8<+?WVAW6
z3!MLV*VOFpd&STaeN2qdwU*
zk1ni(wdh{`{hLj-hCz&59jVIp~SmgtSQDf!FrPYKIF6_c_NJr
zn<-BdXVU}OSE{-No~b(6tG)250`-S%YB9Si@&}{d@FUGqjcNE@SlSdG`}H-#!~M1&
z;{E-SKUBb6)KwP1XB|S8MB=F>9k$#1$|^*t%%5zq#(35~S#+TgC^oj&COt~T>axhU0t
zQff{8Jt+NH^_pqPzec@Iv#L^r?qs$jdiCY&xOU2pve78Pc{a8y+D;2N0aEJe5d#uL}ZkkYQ&XA;NK5v>r@NUaj=<_V$*Ll@&CF!{LWI
zh@|EE!!M(B5qeQ40YHy86TVkX6Te=v4ytV_-JnKl93#Z9clghd^lywoBtgj)4%mxKR<#pH0*hxyHFQNJ
zGW`7CtD9C6)ehKni=#!gKj#ZO7L$d_i4nJZhR!z$B(rX9j$$L8X1>~^2By%Dp*IJj
z8QiI6*w*|IoF{UpFaD{!PWdOxja{DQq9?BK%2(Xuh#Tv2s_ELIvb@YAd{Af)Lph(9
z>DTXZ`|*!Jnw)?`BzPrdYx(?S2&<(1>1>-f=c}gi8^)=KW973rikh?!-B$fOy@x-Rd+?x=
zM(0SbmCz!gY#)CqB9J_^v4K$urOnoj|E||~D>%ndVMwe)ef3BuZH0l!Z&M@fyN}{1
zD;n{juZF|*{lehy$NlM{B`Q0Z18O|&=wX!Nt*rLKfak}ww{
zJ$9BJA3Tq4n~%w3V$0UA(+PgZ#j-35$=_xzuk(w5o2f(WOCu%+h>cg3B*aqaQdfeQ
zj@VutKTWtH8{S+}vR3Z`KIQl-h!4tFi1vG-Kuh^Lb0N=LN0+1ZP!WL39=Age)HS_E
z8khUbE>xA^59Nmj`B0@u0IR<04wqF@ssF4AP6ZVhslN61xT#8o@ymhOWJ5zkUQN07
zyDEYVZ4#Z$(%wnd04Y_^B_4gjFoKPWgD&OUsj^ezcuXa}E4yjc@xi#az
zyRy6>?#h2*VNdNO_jYQ1{@qaYoN7moT}cnd8cmK*&R@SeSYZgIBaJklh!n-3#3dyO
z!@*@06=Y8#wl9|Bj3=C0Fi!SfzVz7$Stc4_Q`K2P?2|gT!JIBhc*P&-IkB?Mb5I&%
z%BN*TF#vYzIW>)|=X`Chr};G5EZXg?_yvlDC|f%AP!ty{i{{pXQnHm<^|{P$D;
z9ZAW#l9Cd2($R5@*5}FeUd#l;N11WwITb1nJSm8r@`#sXHPsuq!3S2&h>U)y=3MjV;j3oWLY>5EOvuruXC*WH2G){378-0tpcMF}1(^PSWUe>XEJN%5
zl|m59cX=GC{^$_E-4Wm1=5|!;Ek&{<4lIOt5M&GMq=+JQdyt?WI#6C!)i!s4;k9T0
z{;`B*>VQ%iU)>Zbhgb4|vd=Wy4>107#gyeqi^+-^2E~0Ja&rFpRb<)oirMj4-KuLg
zSo1*y98TZlD<3^A&^bRESh~S*Lzqn0l;JfX-fdjA`M#a!@?b?zWdEr3mIiqS{m2J%
z3nWGoQG6+FQ~&gQF-DLGWF}WfwHL(4$EUt(5Jcx#l79K-x~qdu!_gs;XaP0`8m(8a
z2J#B{UvEhLT=w9*(6bFWp{9CI=Z&Hh)e}}1hnK6fPlSYqu4H|>g|Erg5fVWl5w&~Kdf{3+V{dCaNhFDg<~sELf1dC($hw|SmSkZ
zKD6>nsj6Q+aHEZDHC9{UJxPZ9y{6)F5hg5bm*}ihsxQxj~`xNo%QnaTEJn)f#{CK-H5HYAM7kK
zL!XvElM^Y!yC=uSu54Gj
zTEgKhtTCOqx1EcIl=VA7`!xLiUj%p*eH??_??@gOJJxVX)#(G`=31lw3whFi2Y7Mq
z1bXLvi+~U5E4R{v15H@yQI@=d!V9LD&P!p?0u7L&Rg=D<<*+
zouj?2?aYI{Ac%Gx!r&EkXmmvR`!Xl?06WsGs_Ts8ojW?id!X$>C}@~q>BMfGeGohw
zkR}NImw2grp7>W(5s*(iPYn$1*t@i%(W7u#6m}l)%TmD-221>N?VBna!@FO-7!xjM
z{`_^-yt<@e?fK$Sqzc7O%3&~A>HB|stQr64jx(U3y+}d}vp(r7c=iB8>t~T7HmYg1qJe4SLo$e62=EZUuFS7UqbSP}M^@%aI7g!ztzj{)_R0x*X6OMLAky)_Sv&%2DNGv
zxH}pEr{gEYf&ZF&RJoII9*=yd^~fxKtFc@1f_3}Vqqi8_U?;lC`7etN$3$u0dW+-%7P
zQ~iX&gr(5xd1M>3yrzZav9ZLIhbS&|=U$t!9iq*i5vy)(RsBw0TU#?~zdTKUXjyIl
z%7Q)Vp}YoU$acz-9y_`%Oig!%TPyC=ie3*Qut3@4V`+A4d<*f%jOx>*bX%#Ao+@wM
z;NW0DZKvmp%_oxvFw2#S9r8Sc?wXh}`3gVG`rBKr&jpxwTRQ7WtKY06QQVhs$u$!e
zs;Y%~2xwpH*9vxfQ~q#gAwn+P+=YE(L>|P(Fl&H27@?);kUI4FW%LjHZKYGk#f~@3
zXW;a;3+{&c`g+uCR+``$V9)N#RBCk_#RQ(K-PxlQ7Ym;XdCqGn$j%JmAwgtkWKn1}
z8^>3&)Q05VbBm+t`9B_${w9F7WfM{Jvawk;HDc*{Sa_Sla|zqX!vbKV%>gB|z6BCc
z8_bdnPnzloGP1I)!^5hnC6CLZUU`;nO2NF2)FaAkYhQL$Z58+`p75dj7RKse#Z!uacCm
z0@|m~U!QZOdb|V~`ktFK4;lg_ZOCjFXeV4`jGj&bh7Q6BEyN8~yGd*JyzwFbIRaAf
z#KG$rvQxWFvqwn`i6jBQ?6o+k+oOC)Gj9ChlgabiScr};b5|opxUYjCZOwmhjTj6W
zFzJt_htTuopW4IRiQ}r0L}`w=pE{HN<@(9Hl11P5cHmN6A1F^sg2OWXcw<+q2x>I5
zq9Bu>PBob6#^vrr<|IC)m+zJpFRRcCVsqbspNybriu&!R=H^@RcG#aBGz9RH}ZI=>4
zi(m?IA?Vr$Q7?wN6ZW7H`S?3}K8=$7J5MjWKri=_igw1%J?0~*6e_Ii*1&23dGcF}
z&=vaMgF!^veGQ1f$3k?WK5Jaw%==+Bb!tI6zQ68&-dQ3Orl+Tqh#Nt?dBEV_w^wkjY+qJ+X*NCMs%J-Lc4%}pKryM#O)O&9
un*HHVB-AlUN`suyDkKONktc!@Ievk;6wT20MOSqhE{1gM*SZGeqiYU
literal 0
HcmV?d00001
diff --git a/connector_woocommerce/static/description/index.html b/connector_woocommerce/static/description/index.html
new file mode 100644
index 000000000..88d86bffe
--- /dev/null
+++ b/connector_woocommerce/static/description/index.html
@@ -0,0 +1,421 @@
+
+
+
+
+
+Connector WooCommerce
+
+
+
+
+
Connector WooCommerce
+
+
+
+
Connector WooCommerce
+
Table of contents
+
+
+
+
Bugs are tracked on GitHub Issues .
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us to smash it by providing a detailed and welcomed
+feedback .
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+NuoBiT Solutions
+S.L.
+
+
+
+
+
+
This module is part of the NuoBiT/odoo-addons project on GitHub.
+
You are welcome to contribute.
+
+
+
+
+
diff --git a/connector_woocommerce/views/connector_woocommerce_menu.xml b/connector_woocommerce/views/connector_woocommerce_menu.xml
new file mode 100644
index 000000000..872f43dfd
--- /dev/null
+++ b/connector_woocommerce/views/connector_woocommerce_menu.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
diff --git a/connector_woocommerce/views/product_attribute.xml b/connector_woocommerce/views/product_attribute.xml
new file mode 100644
index 000000000..3cd4bc1a4
--- /dev/null
+++ b/connector_woocommerce/views/product_attribute.xml
@@ -0,0 +1,60 @@
+
+
+
+
+ product.attribute.connector.form
+ product.attribute
+
+
+
+
+
+
+
+
+
+
+
+
+
+ woocommerce.product.attribute.view.form
+ woocommerce.product.attribute
+
+
+
+
+
+ woocommerce.product.attribute.view.tree
+ woocommerce.product.attribute
+
+
+
+
+
+
+
+
+
+
+
+ Product Attribute
+ woocommerce.product.attribute
+ tree,form
+
+
diff --git a/connector_woocommerce/views/product_attribute_value.xml b/connector_woocommerce/views/product_attribute_value.xml
new file mode 100644
index 000000000..545971b75
--- /dev/null
+++ b/connector_woocommerce/views/product_attribute_value.xml
@@ -0,0 +1,47 @@
+
+
+
+
+ woocommerce.product.attribute.value.view.form
+ woocommerce.product.attribute.value
+
+
+
+
+
+ woocommerce.product.attribute.value.view.tree
+ woocommerce.product.attribute.value
+
+
+
+
+
+
+
+
+
+
+
+
+ Product Attribute Value
+ woocommerce.product.attribute.value
+ tree,form
+
+
diff --git a/connector_woocommerce/views/product_product.xml b/connector_woocommerce/views/product_product.xml
new file mode 100644
index 000000000..6940d8f0b
--- /dev/null
+++ b/connector_woocommerce/views/product_product.xml
@@ -0,0 +1,113 @@
+
+
+
+
+ connector.woocommerce.product.product.view.form.easy.inherit
+ product.product
+
+
+
+
+
+ Please note that WooCommerce allows only one image per product variant. Additional images will not be exported to WooCommerce and will be ignored.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ product.product.connector.form
+ product.product
+
+
+
+
+
+
+ Please note that WooCommerce allows only one image per product variant. Additional images will not be exported to WooCommerce and will be ignored.
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+
+
+ woocommerce.product.product.view.form
+ woocommerce.product.product
+
+
+
+
+
+ woocommerce.product.product.view.tree
+ woocommerce.product.product
+
+
+
+
+
+
+
+
+
+
+
+
+ Products
+ woocommerce.product.product
+ tree,form
+
+
diff --git a/connector_woocommerce/views/product_public_category.xml b/connector_woocommerce/views/product_public_category.xml
new file mode 100644
index 000000000..d5e2028e4
--- /dev/null
+++ b/connector_woocommerce/views/product_public_category.xml
@@ -0,0 +1,65 @@
+
+
+
+
+ product.public.category.form
+ product.public.category
+
+
+
+
+
+
+
+
+
+
+
+
+ woocommerce.product.public.category.view.form
+ woocommerce.product.public.category
+
+
+
+
+
+ woocommerce.product.public.category.view.tree
+ woocommerce.product.public.category
+
+
+
+
+
+
+
+
+
+
+
+ Product Public Category
+ woocommerce.product.public.category
+ tree,form
+
+
diff --git a/connector_woocommerce/views/product_template.xml b/connector_woocommerce/views/product_template.xml
new file mode 100644
index 000000000..2db19f35f
--- /dev/null
+++ b/connector_woocommerce/views/product_template.xml
@@ -0,0 +1,60 @@
+
+
+
+
+ product.template.connector.form
+ product.template
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ product.template.website.sale.public.description.form
+ product.template
+
+
+
+
+
+
+
+
+
+
+ product.template
+
+
+
+
+
+
+
+
+
diff --git a/connector_woocommerce/views/res_partner_views.xml b/connector_woocommerce/views/res_partner_views.xml
new file mode 100644
index 000000000..55c42db20
--- /dev/null
+++ b/connector_woocommerce/views/res_partner_views.xml
@@ -0,0 +1,61 @@
+
+
+
+
+ connector.partner.form
+ res.partner
+
+
+
+
+
+
+
+
+
+
+
+
+
+ woocommerce.partner.view.form
+ woocommerce.res.partner
+
+
+
+
+
+ woocommerce.partner.view.tree
+ woocommerce.res.partner
+
+
+
+
+
+
+
+
+
+
+
+
+ Partner
+ woocommerce.res.partner
+ tree,form
+
+
diff --git a/connector_woocommerce/views/sale_order_view.xml b/connector_woocommerce/views/sale_order_view.xml
new file mode 100644
index 000000000..297b58836
--- /dev/null
+++ b/connector_woocommerce/views/sale_order_view.xml
@@ -0,0 +1,80 @@
+
+
+
+
+ connector.sale.order.form
+ sale.order
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ woocommerce.sale.order.view.form
+ woocommerce.sale.order
+
+
+
+
+
+ woocommerce.sale.order.view.tree
+ woocommerce.sale.order
+
+
+
+
+
+
+
+
+
+
+
+ woocommerce.sale.order.view.filter
+ sale.order
+
+
+
+
+
+
+
+
+
+ Services
+ woocommerce.sale.order
+ tree,form
+
+
diff --git a/connector_woocommerce/views/woocommerce_backend_view.xml b/connector_woocommerce/views/woocommerce_backend_view.xml
new file mode 100644
index 000000000..d1366fe3a
--- /dev/null
+++ b/connector_woocommerce/views/woocommerce_backend_view.xml
@@ -0,0 +1,320 @@
+
+
+
+
+ woocommerce.backend.form
+ woocommerce.backend
+
+
+
+
+
+ woocommerce.backend.tree
+ woocommerce.backend
+
+
+
+
+
+
+
+
+
+
+
+ WooCommerce Backends
+ woocommerce.backend
+ tree,form
+
+
diff --git a/connector_woocommerce/views/woocommerce_product_template.xml b/connector_woocommerce/views/woocommerce_product_template.xml
new file mode 100644
index 000000000..fbf5e7667
--- /dev/null
+++ b/connector_woocommerce/views/woocommerce_product_template.xml
@@ -0,0 +1,45 @@
+
+
+
+
+ woocommerce.product.template.view.form
+ woocommerce.product.template
+
+
+
+
+
+
+ woocommerce.product.template.view.tree
+ woocommerce.product.template
+
+
+
+
+
+
+
+
+
+
+
+
+ Product Template
+ woocommerce.product.template
+ tree,form
+
+
diff --git a/setup/connector_woocommerce/odoo/addons/connector_woocommerce b/setup/connector_woocommerce/odoo/addons/connector_woocommerce
new file mode 120000
index 000000000..129628f45
--- /dev/null
+++ b/setup/connector_woocommerce/odoo/addons/connector_woocommerce
@@ -0,0 +1 @@
+../../../../connector_woocommerce
\ No newline at end of file
diff --git a/setup/connector_woocommerce/setup.py b/setup/connector_woocommerce/setup.py
new file mode 100644
index 000000000..28c57bb64
--- /dev/null
+++ b/setup/connector_woocommerce/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+ setup_requires=['setuptools-odoo'],
+ odoo_addon=True,
+)
From 75de66c6b5091c43376fade3153e7036f365bdae Mon Sep 17 00:00:00 2001
From: Eric Antones
Date: Fri, 29 Aug 2025 10:38:35 +0200
Subject: [PATCH 02/25] [REF] connector_woocommerce: move product attachment
auxiliar fields from website_sale_extra_fields
---
connector_woocommerce/i18n/ca.po | 4 +-
connector_woocommerce/i18n/es.po | 4 +-
connector_woocommerce/models/__init__.py | 1 +
.../models/product_attachment/__init__.py | 1 +
.../product_attachment/product_attachment.py | 23 +++++
.../models/product_product/product.py | 93 +++++++++++++++++++
.../product_template/product_template.py | 92 ++++++++++++++++++
.../models/sale_order_line/binding.py | 2 +
.../security/ir.model.access.csv | 1 +
9 files changed, 217 insertions(+), 4 deletions(-)
create mode 100644 connector_woocommerce/models/product_attachment/__init__.py
create mode 100644 connector_woocommerce/models/product_attachment/product_attachment.py
diff --git a/connector_woocommerce/i18n/ca.po b/connector_woocommerce/i18n/ca.po
index a8eed6a27..ede8e5709 100644
--- a/connector_woocommerce/i18n/ca.po
+++ b/connector_woocommerce/i18n/ca.po
@@ -5615,8 +5615,8 @@ msgid "eCommerce"
msgstr ""
#. module: connector_woocommerce
-#: model:ir.model,name:connector_woocommerce.model_product_attachment
-msgid "product.attachment"
+#: model:ir.model,name:connector_woocommerce.model_connector_woocommerce_product_attachment
+msgid "connector.woocommerce.product.attachment"
msgstr ""
#. module: connector_woocommerce
diff --git a/connector_woocommerce/i18n/es.po b/connector_woocommerce/i18n/es.po
index 6ea955887..95526715c 100644
--- a/connector_woocommerce/i18n/es.po
+++ b/connector_woocommerce/i18n/es.po
@@ -5615,8 +5615,8 @@ msgid "eCommerce"
msgstr ""
#. module: connector_woocommerce
-#: model:ir.model,name:connector_woocommerce.model_product_attachment
-msgid "product.attachment"
+#: model:ir.model,name:connector_woocommerce.model_connector_woocommerce_product_attachment
+msgid "connector.woocommerce.product.attachment"
msgstr ""
#. module: connector_woocommerce
diff --git a/connector_woocommerce/models/__init__.py b/connector_woocommerce/models/__init__.py
index 914a2bac9..b1dff19bc 100644
--- a/connector_woocommerce/models/__init__.py
+++ b/connector_woocommerce/models/__init__.py
@@ -2,6 +2,7 @@
from . import binding
from . import common
from . import ir_attachment
+from . import product_attachment
from . import product_public_category
from . import product_attribute
from . import product_attribute_value
diff --git a/connector_woocommerce/models/product_attachment/__init__.py b/connector_woocommerce/models/product_attachment/__init__.py
new file mode 100644
index 000000000..dc578aacd
--- /dev/null
+++ b/connector_woocommerce/models/product_attachment/__init__.py
@@ -0,0 +1 @@
+from . import product_attachment
diff --git a/connector_woocommerce/models/product_attachment/product_attachment.py b/connector_woocommerce/models/product_attachment/product_attachment.py
new file mode 100644
index 000000000..ba7e6b25b
--- /dev/null
+++ b/connector_woocommerce/models/product_attachment/product_attachment.py
@@ -0,0 +1,23 @@
+# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright NuoBiT Solutions - Eric Antones
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
+from odoo import fields, models
+
+
+# This model is used to store attachments from product images and documents
+class ConnectorWoocommerceProductAttachment(models.TransientModel):
+ _name = "connector.woocommerce.product.attachment"
+ _order = "sequence, id"
+
+ _description = "Connector Woocommerce Product Attachment"
+
+ sequence = fields.Integer(
+ string="Sequence",
+ )
+
+ attachment_id = fields.Many2one(
+ comodel_name="ir.attachment",
+ string="Attachment",
+ required=True,
+ )
diff --git a/connector_woocommerce/models/product_product/product.py b/connector_woocommerce/models/product_product/product.py
index 1d6409274..431d7b61e 100644
--- a/connector_woocommerce/models/product_product/product.py
+++ b/connector_woocommerce/models/product_product/product.py
@@ -44,3 +44,96 @@ def _compute_woocommerce_write_date(self):
or rec.woocommerce_write_date
):
rec.woocommerce_write_date = fields.Datetime.now()
+
+ # Auxiliar fields for images and documents
+ product_variant_image_attachment_ids = fields.Many2many(
+ comodel_name="connector.woocommerce.product.attachment",
+ compute="_compute_product_variant_image_attachment_ids",
+ )
+
+ def _compute_product_variant_image_attachment_ids(self):
+ for rec in self:
+ if self.env.context.get("include_main_product_image") == "first":
+ rec._create_main_product_variant_image_attachment(is_first=True)
+ for variant_image in rec.product_variant_image_ids:
+ if variant_image.image_1920:
+ attachment = self.env["ir.attachment"].search(
+ [
+ ("res_model", "=", variant_image._name),
+ ("res_id", "in", variant_image.ids),
+ ("res_field", "=", "image_1920"),
+ ]
+ )
+ rec.product_variant_image_attachment_ids = [
+ (
+ 0,
+ 0,
+ {
+ "attachment_id": attachment.id,
+ "sequence": variant_image.sequence,
+ },
+ )
+ ]
+ if self.env.context.get("include_main_product_image") == "last":
+ rec._create_main_product_variant_image_attachment(is_first=False)
+ if not rec.product_variant_image_attachment_ids:
+ rec.product_variant_image_attachment_ids = self.env[
+ "connector.woocommerce.product.attachment"
+ ]
+
+ product_document_attachment_ids = fields.Many2many(
+ comodel_name="connector.woocommerce.product.attachment",
+ compute="_compute_product_document_attachment_ids",
+ )
+
+ def _compute_product_document_attachment_ids(self):
+ for rec in self:
+ for doc in rec.document_ids:
+ rec.product_document_attachment_ids = [
+ (
+ 0,
+ 0,
+ {
+ "attachment_id": doc.attachment_id.id,
+ "sequence": doc.sequence,
+ },
+ )
+ ]
+ if not rec.product_document_attachment_ids:
+ rec.product_document_attachment_ids = self.env[
+ "connector.woocommerce.product.attachment"
+ ]
+
+ def _create_main_product_variant_image_attachment(self, is_first=True):
+ self.ensure_one()
+ attachment = self.env["ir.attachment"].search(
+ [
+ ("res_model", "=", self._name),
+ ("res_id", "=", self.id),
+ ("res_field", "=", "image_variant_1920"),
+ ]
+ )
+ # TODO: Duplicated code in product_template
+ if attachment:
+ if is_first:
+ sequence = (
+ min(self.product_variant_image_ids.mapped("sequence")) - 1
+ if self.product_variant_image_ids
+ else 1
+ )
+ else:
+ sequence = (
+ max(self.product_variant_image_ids.mapped("sequence")) + 1
+ if self.product_variant_image_ids
+ else 1
+ )
+ self.product_variant_image_attachment_ids = [
+ (
+ 0,
+ 0,
+ {
+ "attachment_id": attachment.id,
+ "sequence": sequence,
+ },
+ )
+ ]
diff --git a/connector_woocommerce/models/product_template/product_template.py b/connector_woocommerce/models/product_template/product_template.py
index b7cb18bfe..d00e9f1c3 100644
--- a/connector_woocommerce/models/product_template/product_template.py
+++ b/connector_woocommerce/models/product_template/product_template.py
@@ -127,6 +127,98 @@ def _inverse_inventory_availability(self):
rec.inventory_availability
)
+ # Auxiliar fields for images and documents
+ product_image_attachment_ids = fields.Many2many(
+ comodel_name="connector.woocommerce.product.attachment",
+ compute="_compute_product_image_attachment_ids",
+ )
+
+ def _create_main_product_image_attachment(self, is_first=True):
+ self.ensure_one()
+ attachment = self.env["ir.attachment"].search(
+ [
+ ("res_model", "=", self._name),
+ ("res_id", "=", self.id),
+ ("res_field", "=", "image_1920"),
+ ]
+ )
+ if attachment:
+ if is_first:
+ sequence = (
+ min(self.product_template_image_ids.mapped("sequence")) - 1
+ if self.product_template_image_ids
+ else 1
+ )
+ else:
+ sequence = (
+ max(self.product_template_image_ids.mapped("sequence")) + 1
+ if self.product_template_image_ids
+ else 1
+ )
+ self.product_image_attachment_ids = [
+ (
+ 0,
+ 0,
+ {
+ "attachment_id": attachment.id,
+ "sequence": sequence,
+ },
+ )
+ ]
+
+ def _compute_product_image_attachment_ids(self):
+ for rec in self:
+ if self.env.context.get("include_main_product_image") == "first":
+ rec._create_main_product_image_attachment(is_first=True)
+ for template_image in rec.product_template_image_ids:
+ if template_image.image_1920:
+ attachment = self.env["ir.attachment"].search(
+ [
+ ("res_model", "=", template_image._name),
+ ("res_id", "=", template_image.id),
+ ("res_field", "=", "image_1920"),
+ ]
+ )
+ rec.product_image_attachment_ids = [
+ (
+ 0,
+ 0,
+ {
+ "attachment_id": attachment.id,
+ "sequence": template_image.sequence,
+ },
+ )
+ ]
+ if self.env.context.get("include_main_product_image") == "last":
+ rec._create_main_product_image_attachment(is_first=False)
+ if not rec.product_image_attachment_ids:
+ rec.product_image_attachment_ids = self.env[
+ "connector.woocommerce.product.attachment"
+ ]
+
+ product_document_attachment_ids = fields.Many2many(
+ comodel_name="connector.woocommerce.product.attachment",
+ compute="_compute_product_document_attachment_ids",
+ )
+
+ def _compute_product_document_attachment_ids(self):
+ for rec in self:
+ for doc in rec.document_ids:
+ rec.product_document_attachment_ids = [
+ (
+ 0,
+ 0,
+ {
+ "attachment_id": doc.attachment_id.id,
+ "sequence": doc.sequence,
+ },
+ )
+ ]
+ if not rec.product_document_attachment_ids:
+ rec.product_document_attachment_ids = self.env[
+ "connector.woocommerce.product.attachment"
+ ]
+
def write(self, vals):
res = super().write(vals)
if "has_attributes" in vals:
diff --git a/connector_woocommerce/models/sale_order_line/binding.py b/connector_woocommerce/models/sale_order_line/binding.py
index ea0439266..85da088f3 100644
--- a/connector_woocommerce/models/sale_order_line/binding.py
+++ b/connector_woocommerce/models/sale_order_line/binding.py
@@ -9,6 +9,8 @@ class SaleOrderLineBinding(models.Model):
_inherit = "woocommerce.binding"
_inherits = {"sale.order.line": "odoo_id"}
+ _description = "Woocommerce Sale Order"
+
odoo_id = fields.Many2one(
comodel_name="sale.order.line",
string="Order line",
diff --git a/connector_woocommerce/security/ir.model.access.csv b/connector_woocommerce/security/ir.model.access.csv
index 7f0f2af45..27b8a316d 100644
--- a/connector_woocommerce/security/ir.model.access.csv
+++ b/connector_woocommerce/security/ir.model.access.csv
@@ -23,3 +23,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
"access_woocommerce_res_partner_user","woocommerce_res_partner connector user","model_woocommerce_res_partner","base.group_user",1,0,0,0
"access_woocommerce_sale_order_line_manager","woocommerce_sale_order_line connector manager","model_woocommerce_sale_order_line","connector.group_connector_manager",1,1,1,1
"access_woocommerce_sale_order_line_user","woocommerce_sale_order_line connector user","model_woocommerce_sale_order_line","base.group_user",1,0,0,0
+"access_connector_woocommerce_product_attachment_user","connector_woocommerce_product_attachment connector user","model_connector_woocommerce_product_attachment","base.group_user",1,1,1,1
From e01ad805e0eef4de0020751b005cfcd7539d59d5 Mon Sep 17 00:00:00 2001
From: Eric Antones
Date: Wed, 9 Apr 2025 12:28:57 +0200
Subject: [PATCH 03/25] [TMP] connector_woocommerce: disable slug export on
write temporarily
---
.../models/product_public_category/export_mapper.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/connector_woocommerce/models/product_public_category/export_mapper.py b/connector_woocommerce/models/product_public_category/export_mapper.py
index a60a1e49f..fcd60ca42 100644
--- a/connector_woocommerce/models/product_public_category/export_mapper.py
+++ b/connector_woocommerce/models/product_public_category/export_mapper.py
@@ -4,7 +4,7 @@
from odoo.exceptions import ValidationError
from odoo.addons.component.core import Component
-from odoo.addons.connector.components.mapper import changed_by, mapping
+from odoo.addons.connector.components.mapper import changed_by, mapping, only_create
class WooCommerceProductPublicCategoryExportMapper(Component):
@@ -44,10 +44,13 @@ def description(self, record):
or None
}
+ # TODO: TEMPORARY DISABLED ON WRITE UNTIL WE HAD a MYSQL CONNECTION AND
+ # DO THIS WITH THE API WPML RESTRICTIONS
# TODO: We shoud do this differently, is not a good hook
def _get_slug_name(self, record):
return record.with_context(lang=self.backend_record.language_id.code).slug_name
+ @only_create
@mapping
def slug(self, record):
slug = self._get_slug_name(record)
From dc6f1528641ccca82d4bf6057119a00895e4f1df Mon Sep 17 00:00:00 2001
From: Eric Antones
Date: Tue, 18 Nov 2025 12:47:15 +0100
Subject: [PATCH 04/25] [FIX] connector_woocommerce: all the external ids of
the binding should be required
---
connector_woocommerce/models/product_attribute/binding.py | 1 +
.../models/product_attribute_value/binding.py | 2 ++
connector_woocommerce/models/product_product/binding.py | 2 ++
.../models/product_public_category/binding.py | 1 +
connector_woocommerce/models/product_template/binding.py | 1 +
connector_woocommerce/models/res_partner/binding.py | 5 ++++-
connector_woocommerce/models/sale_order/binding.py | 2 ++
7 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/connector_woocommerce/models/product_attribute/binding.py b/connector_woocommerce/models/product_attribute/binding.py
index af684ffbe..55a3d0831 100644
--- a/connector_woocommerce/models/product_attribute/binding.py
+++ b/connector_woocommerce/models/product_attribute/binding.py
@@ -19,6 +19,7 @@ class WooCommerceProductAttribute(models.Model):
woocommerce_idattribute = fields.Integer(
string="WooCommerce ID Attribute",
readonly=True,
+ required=True,
)
_sql_constraints = [
diff --git a/connector_woocommerce/models/product_attribute_value/binding.py b/connector_woocommerce/models/product_attribute_value/binding.py
index f5644e570..abfc23c12 100644
--- a/connector_woocommerce/models/product_attribute_value/binding.py
+++ b/connector_woocommerce/models/product_attribute_value/binding.py
@@ -19,10 +19,12 @@ class WooCommerceProductAttributeValue(models.Model):
woocommerce_idattribute = fields.Integer(
string="WooCommerce ID Attribute",
readonly=True,
+ required=True,
)
woocommerce_idattributevalue = fields.Integer(
string="WooCommerce ID Attribute Value",
readonly=True,
+ required=True,
)
_sql_constraints = [
diff --git a/connector_woocommerce/models/product_product/binding.py b/connector_woocommerce/models/product_product/binding.py
index b6d253f11..2abbebc8c 100644
--- a/connector_woocommerce/models/product_product/binding.py
+++ b/connector_woocommerce/models/product_product/binding.py
@@ -19,10 +19,12 @@ class WooCommerceProductProduct(models.Model):
woocommerce_idproduct = fields.Integer(
string="WooCommerce ID Product",
readonly=True,
+ required=True,
)
woocommerce_idparent = fields.Integer(
string="WooCommerce ID Parent",
readonly=True,
+ required=True,
)
_sql_constraints = [
(
diff --git a/connector_woocommerce/models/product_public_category/binding.py b/connector_woocommerce/models/product_public_category/binding.py
index d22c26262..0b03dff6e 100644
--- a/connector_woocommerce/models/product_public_category/binding.py
+++ b/connector_woocommerce/models/product_public_category/binding.py
@@ -19,6 +19,7 @@ class WooCommerceProductPublicCategory(models.Model):
woocommerce_idpubliccategory = fields.Integer(
string="WooCommerce ID Public Category",
readonly=True,
+ required=True,
)
_sql_constraints = [
diff --git a/connector_woocommerce/models/product_template/binding.py b/connector_woocommerce/models/product_template/binding.py
index 910bb4b79..15175445c 100644
--- a/connector_woocommerce/models/product_template/binding.py
+++ b/connector_woocommerce/models/product_template/binding.py
@@ -19,6 +19,7 @@ class WooCommerceProductTemplate(models.Model):
woocommerce_idproduct = fields.Integer(
string="WooCommerce ID Product",
readonly=True,
+ required=True,
)
_sql_constraints = [
diff --git a/connector_woocommerce/models/res_partner/binding.py b/connector_woocommerce/models/res_partner/binding.py
index c9f5629e9..8a6b2aaaa 100644
--- a/connector_woocommerce/models/res_partner/binding.py
+++ b/connector_woocommerce/models/res_partner/binding.py
@@ -19,14 +19,17 @@ class WooCommerceResPartner(models.Model):
woocommerce_idrespartner = fields.Integer(
string="WooCommerce ID Res Partner",
readonly=True,
+ required=True,
)
woocommerce_address_type = fields.Char(
string="WooCommerce Type",
readonly=True,
+ required=True,
)
woocommerce_address_hash = fields.Char(
- string="Address Hash",
+ string="WooCommerce Address Hash",
readonly=True,
+ required=True,
)
_sql_constraints = [
diff --git a/connector_woocommerce/models/sale_order/binding.py b/connector_woocommerce/models/sale_order/binding.py
index 2c1ff3946..2f326b831 100644
--- a/connector_woocommerce/models/sale_order/binding.py
+++ b/connector_woocommerce/models/sale_order/binding.py
@@ -19,9 +19,11 @@ class WooCommerceSaleOrder(models.Model):
woocommerce_idsaleorder = fields.Integer(
string="WooCommerce ID Sale Order",
readonly=True,
+ required=True,
)
woocommerce_status = fields.Char(
readonly=True,
+ required=True,
)
woocommerce_order_line_ids = fields.One2many(
string="WooCommerce Order Line ids",
From 256a9f38434e6722afc93ac3fbe6a6f8702bc3ce Mon Sep 17 00:00:00 2001
From: Eric Antones
Date: Tue, 18 Nov 2025 16:14:54 +0100
Subject: [PATCH 05/25] [REF] connector_woocommerce: rename account_tax to odoo
standard account_tax_id
---
.../models/backend/backend_account_tax.py | 9 +++++----
.../models/backend/backend_tax_class.py | 6 +++---
.../models/product_template/export_mapper.py | 2 +-
.../models/sale_order_line/import_mapper.py | 2 +-
connector_woocommerce/views/woocommerce_backend_view.xml | 4 ++--
5 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/connector_woocommerce/models/backend/backend_account_tax.py b/connector_woocommerce/models/backend/backend_account_tax.py
index 49ed108ec..553592b4a 100644
--- a/connector_woocommerce/models/backend/backend_account_tax.py
+++ b/connector_woocommerce/models/backend/backend_account_tax.py
@@ -17,12 +17,13 @@ class WooCommerceBackendAccountTax(models.Model):
required=True,
ondelete="cascade",
)
- woocommerce_tax_rate_id = fields.Integer(
- string="WooCommerce Tax Rate ID",
+
+ account_tax_id = fields.Many2one(
+ comodel_name="account.tax",
required=True,
)
- account_tax = fields.Many2one(
- comodel_name="account.tax",
+ woocommerce_tax_rate_id = fields.Integer(
+ string="WooCommerce Tax Rate ID",
required=True,
)
diff --git a/connector_woocommerce/models/backend/backend_tax_class.py b/connector_woocommerce/models/backend/backend_tax_class.py
index af844813c..398e2c67f 100644
--- a/connector_woocommerce/models/backend/backend_tax_class.py
+++ b/connector_woocommerce/models/backend/backend_tax_class.py
@@ -17,7 +17,7 @@ class WooCommerceBackendTaxClass(models.Model):
required=True,
ondelete="cascade",
)
- account_tax = fields.Many2one(
+ account_tax_id = fields.Many2one(
comodel_name="account.tax",
required=True,
)
@@ -28,7 +28,7 @@ class WooCommerceBackendTaxClass(models.Model):
_sql_constraints = [
(
"tax_map_uniq",
- "unique(backend_id, woocommerce_tax_class)",
- "A binding already exists with the same (backend, woocommerce_tax_rate_id) ID.",
+ "unique(backend_id, account_tax_id)",
+ "A binding already exists with the same (backend, account_tax_id) ID.",
),
]
diff --git a/connector_woocommerce/models/product_template/export_mapper.py b/connector_woocommerce/models/product_template/export_mapper.py
index 9178476a3..3637c1287 100644
--- a/connector_woocommerce/models/product_template/export_mapper.py
+++ b/connector_woocommerce/models/product_template/export_mapper.py
@@ -208,7 +208,7 @@ def tax_class(self, record):
% (record.id, record.display_name)
)
tax_class = self.backend_record.tax_class_ids.filtered(
- lambda x: record["taxes_id"] == x.account_tax
+ lambda x: record["taxes_id"] == x.account_tax_id
)
if not tax_class:
raise ValidationError(
diff --git a/connector_woocommerce/models/sale_order_line/import_mapper.py b/connector_woocommerce/models/sale_order_line/import_mapper.py
index 12533d640..a86ca210d 100644
--- a/connector_woocommerce/models/sale_order_line/import_mapper.py
+++ b/connector_woocommerce/models/sale_order_line/import_mapper.py
@@ -85,7 +85,7 @@ def tax_id(self, record):
_("Tax rate %s not found in backend mapping.") % tax["id"]
)
else:
- taxes.append(tax_map.account_tax.id)
+ taxes.append(tax_map.account_tax_id.id)
if taxes:
return {"tax_id": [(6, 0, taxes)]}
diff --git a/connector_woocommerce/views/woocommerce_backend_view.xml b/connector_woocommerce/views/woocommerce_backend_view.xml
index d1366fe3a..2269ee8a5 100644
--- a/connector_woocommerce/views/woocommerce_backend_view.xml
+++ b/connector_woocommerce/views/woocommerce_backend_view.xml
@@ -254,7 +254,7 @@
-
+
@@ -262,7 +262,7 @@
-
+
From de988c4b6c7c6823b9f5f9ab77a0300ab68dbf45 Mon Sep 17 00:00:00 2001
From: Eric Antones
Date: Tue, 18 Nov 2025 16:15:43 +0100
Subject: [PATCH 06/25] [FIX+REF] connector_woocommerce: missing export_batch
channel
---
connector_woocommerce/data/queue_data.xml | 8 +++--
.../data/queue_job_function_data.xml | 35 +++++++++++++++----
2 files changed, 35 insertions(+), 8 deletions(-)
diff --git a/connector_woocommerce/data/queue_data.xml b/connector_woocommerce/data/queue_data.xml
index 5c3977dd5..c61f64e7a 100644
--- a/connector_woocommerce/data/queue_data.xml
+++ b/connector_woocommerce/data/queue_data.xml
@@ -2,15 +2,19 @@
+
+ woocommerce_export_batch
+
+
woocommerce_export_record
-
+
woocommerce_import_batch
-
+
woocommerce_import_chunk
diff --git a/connector_woocommerce/data/queue_job_function_data.xml b/connector_woocommerce/data/queue_job_function_data.xml
index 7a9c00e39..d514bfddc 100644
--- a/connector_woocommerce/data/queue_job_function_data.xml
+++ b/connector_woocommerce/data/queue_job_function_data.xml
@@ -1,8 +1,10 @@
-
+
-
+
+
/>
+
/>
-
+
+
+
+
+ export_batch
+
+
+
+
/>
+
/>
+
/>
+
/>
+
/>
+
ref="connector_woocommerce.model_woocommerce_sale_order"
/>
import_batch
-
+
@@ -129,9 +151,10 @@ License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)-->
ref="connector_woocommerce.model_woocommerce_sale_order"
/>
import_chunk
-
+
+
Date: Tue, 2 Dec 2025 13:22:30 +0100
Subject: [PATCH 07/25] [IMP+FIX+REF] connector_woocommerce
---
.../data/queue_job_function_data.xml | 26 +++++++
.../models/product/export_mapper.py | 12 ++--
.../models/product_attribute/adapter.py | 2 +-
.../product_attribute/product_attribute.py | 1 +
.../models/product_attribute_value/adapter.py | 71 ++++++++++---------
.../models/product_attribute_value/binding.py | 15 +++-
.../product_attribute_value/export_mapper.py | 7 +-
.../models/product_product/adapter.py | 26 +++----
.../models/product_product/binding.py | 7 ++
.../models/product_public_category/binding.py | 25 +++++++
.../models/product_template/adapter.py | 9 ++-
.../models/product_template/binder.py | 5 ++
.../models/product_template/binding.py | 1 +
.../models/product_template/export_mapper.py | 11 ++-
.../product_template/product_template.py | 20 +++---
.../models/res_partner/binder.py | 7 ++
.../models/res_partner/binding.py | 7 +-
.../models/res_partner/import_mapper.py | 13 +++-
.../models/sale_order/adapter.py | 7 +-
.../models/sale_order/importer.py | 21 ++++--
.../models/sale_order_line/binder.py | 2 +-
.../models/sale_order_line/binding.py | 12 ++--
.../views/woocommerce_backend_view.xml | 32 ++++-----
23 files changed, 230 insertions(+), 109 deletions(-)
diff --git a/connector_woocommerce/data/queue_job_function_data.xml b/connector_woocommerce/data/queue_job_function_data.xml
index d514bfddc..072f72e28 100644
--- a/connector_woocommerce/data/queue_job_function_data.xml
+++ b/connector_woocommerce/data/queue_job_function_data.xml
@@ -68,6 +68,19 @@
+
+
+ export_batch
+
+
+
+
+
+
+ export_batch
+
+
+
+
%s
"
% (
self._prepare_url(binding, document),
- document.with_context(
- lang=self._get_lang(document)
- ).name,
+ # document.with_context(
+ # lang=self._get_lang(document)
+ # ).name,
+ document.name,
)
)
else:
diff --git a/connector_woocommerce/models/product_attribute/adapter.py b/connector_woocommerce/models/product_attribute/adapter.py
index c529d8fce..2f7c6e80c 100644
--- a/connector_woocommerce/models/product_attribute/adapter.py
+++ b/connector_woocommerce/models/product_attribute/adapter.py
@@ -5,7 +5,7 @@
class WooCommerceProductAttributeAdapter(Component):
- _name = "cwoocommerce.product.attribute.adapter"
+ _name = "woocommerce.product.attribute.adapter"
_inherit = "connector.woocommerce.adapter"
_apply_on = "woocommerce.product.attribute"
diff --git a/connector_woocommerce/models/product_attribute/product_attribute.py b/connector_woocommerce/models/product_attribute/product_attribute.py
index 91e903744..85fad6988 100644
--- a/connector_woocommerce/models/product_attribute/product_attribute.py
+++ b/connector_woocommerce/models/product_attribute/product_attribute.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2025 NuoBiT Solutions - Eric Antones
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import fields, models
diff --git a/connector_woocommerce/models/product_attribute_value/adapter.py b/connector_woocommerce/models/product_attribute_value/adapter.py
index f4413fac9..84d5cabda 100644
--- a/connector_woocommerce/models/product_attribute_value/adapter.py
+++ b/connector_woocommerce/models/product_attribute_value/adapter.py
@@ -14,49 +14,52 @@ class WooCommerceProductAttributeValueAdapter(Component):
def read(self, external_id): # pylint: disable=W8106
external_id = self.binder_for().id2dict(external_id, in_field=False)
- url = "products/attributes/%s/terms/%s" % (
- external_id["parent_id"],
- external_id["id"],
- )
- return self._exec("get", url)
+ url = "products/attributes/%s/terms/%s" % tuple(external_id)
+ values = self._exec("get", url)
+ return values
def search_read(self, domain=None):
binder = self.binder_for()
domain_dict = self._domain_to_normalized_dict(domain)
- external_id_fields = binder.get_id_fields(in_field=False)
- _, common_domain = self._extract_domain_clauses(domain, external_id_fields)
external_id = binder.dict2id(domain_dict, in_field=False)
if external_id:
res = self.read(external_id)
- else:
- # We have parent id but not the woocommerce attribute value id
- if "parent_id" in domain_dict:
- _, common_domain = self._extract_domain_clauses(
- common_domain, "parent_name"
+ if len(res) > 1:
+ raise ValidationError(
+ _("Multiple attribute values found with external_id %s")
+ % (external_id,)
)
- url = "products/attributes/%s/terms" % domain_dict["parent_id"]
- res = self._exec("get", url, domain=common_domain)
- if res:
- res[0]["parent_id"] = domain_dict["parent_id"]
- elif "parent_name" in domain_dict:
- partner_name, common_domain = self._extract_domain_clauses(
- common_domain, ["parent_name"]
- )
- url = "products/attributes"
- res = self._exec(
- "get", url, domain=[("name", "=", domain_dict["parent_name"])]
+ else:
+ if "parent_id" not in domain_dict:
+ attribute_adapter = self.component(
+ usage="backend.adapter", model_name="woocommerce.product.attribute"
)
- if not res:
- return []
- if len(res) != 1:
- raise ValidationError(_("More than one product parent found"))
- parent_id = res[0]["id"]
- url = "products/attributes/%s/terms" % parent_id
- res = self._exec("get", url, domain=common_domain)
- for elem in res:
- elem["parent_id"] = parent_id
+ attributes = attribute_adapter.search_read([])
+ if "parent_name" in domain_dict:
+ attributes = self._filter(
+ attributes, domain=[("name", "=", domain_dict["parent_name"])]
+ )
+ attribute_ids = [x["id"] for x in attributes]
+ del domain_dict["parent_name"]
else:
- return []
+ attribute_ids = [domain_dict["parent_id"]]
+ del domain_dict["parent_id"]
+
+ domain = self._normalized_dict_to_domain(domain_dict)
+ search_fields = self._get_search_fields()
+ real_domain, common_domain = self._extract_domain_clauses(
+ domain, search_fields
+ )
+
+ attribute_values = []
+ for attribute_id in attribute_ids:
+ url = "products/attributes/%s/terms" % attribute_id
+ values = self._exec("get", url, domain=real_domain)
+ for value in values:
+ value["parent_id"] = attribute_id
+ attribute_values += values
+ res = self._filter(attribute_values, domain=common_domain)
+
return res
def create(self, data): # pylint: disable=W8106
@@ -76,7 +79,7 @@ def create(self, data): # pylint: disable=W8106
def write(self, external_id, data): # pylint: disable=W8106
return self._exec(
"put",
- "products/attributes/%s/terms/%s" % (external_id[0], external_id[1]),
+ "products/attributes/%s/terms/%s" % tuple(external_id),
data=data,
)
diff --git a/connector_woocommerce/models/product_attribute_value/binding.py b/connector_woocommerce/models/product_attribute_value/binding.py
index abfc23c12..d9c20c162 100644
--- a/connector_woocommerce/models/product_attribute_value/binding.py
+++ b/connector_woocommerce/models/product_attribute_value/binding.py
@@ -30,7 +30,7 @@ class WooCommerceProductAttributeValue(models.Model):
_sql_constraints = [
(
"external_uniq",
- "unique(backend_id, woocommerce_idattribute, woocommerce_idattributevalue)",
+ "unique(backend_id, woocommerce_idattributevalue)",
"A binding already exists with the same External (idAttributevalue) ID.",
),
]
@@ -42,6 +42,19 @@ def _get_base_domain(self):
def export_product_attribute_value_since(
self, backend_record=None, since_date=None
):
+ # with backend_record.work_on(self._name) as work:
+ # adapter = work.component(usage="backend.adapter")
+ # url = "products/attributes/95/terms"
+ # values = adapter._exec("get", url, offset=3, limit=11)
+ # for v in values:
+ # print(">", v)
+ # print("--->", len(values))
+ # exit()
+
+ # domain += [("attribute_id", "=", 7)]
+ # self.export_batch(backend_record, domain=domain, delayed=False)
+ # self.with_delay().export_batch(backend_record, domain=domain)
+
domain = self._get_base_domain()
if since_date:
domain += [
diff --git a/connector_woocommerce/models/product_attribute_value/export_mapper.py b/connector_woocommerce/models/product_attribute_value/export_mapper.py
index c00ca3dbc..d3539587c 100644
--- a/connector_woocommerce/models/product_attribute_value/export_mapper.py
+++ b/connector_woocommerce/models/product_attribute_value/export_mapper.py
@@ -1,8 +1,9 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2025 NuoBiT Solutions - Eric Antones
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo.addons.component.core import Component
-from odoo.addons.connector.components.mapper import changed_by, mapping
+from odoo.addons.connector.components.mapper import changed_by, mapping, only_create
from odoo.addons.connector_extension.components.mapper import required
@@ -29,14 +30,14 @@ def name(self, record):
}
@required("parent_id")
- @changed_by("attribute_id")
+ @only_create
@mapping
def parent_id(self, record):
binder = self.binder_for("woocommerce.product.attribute")
values = binder.get_external_dict_ids(record.attribute_id)
return {"parent_id": values["id"] or None}
- @changed_by("attribute_id")
+ @changed_by("parent_name")
@mapping
def parent_name(self, record):
return {
diff --git a/connector_woocommerce/models/product_product/adapter.py b/connector_woocommerce/models/product_product/adapter.py
index df7176be0..1b47c832e 100644
--- a/connector_woocommerce/models/product_product/adapter.py
+++ b/connector_woocommerce/models/product_product/adapter.py
@@ -43,7 +43,7 @@ def write(self, external_id, data): # pylint: disable=W8106
self._prepare_data(data)
return self._exec(
"put",
- "products/%s/variations/%s" % (external_id[0], external_id[1]),
+ "products/%s/variations/%s" % tuple(external_id),
data=data,
)
@@ -52,12 +52,9 @@ def search_read(self, domain=None):
external_id_fields = binder.get_id_fields(in_field=False)
_, common_domain = self._extract_domain_clauses(domain, external_id_fields)
domain_dict = self._domain_to_normalized_dict(domain)
- external_id_values = binder.dict2id2dict(domain_dict, in_field=False)
- if external_id_values:
- url = "products/%s/variations/%s" % (
- external_id_values["parent_id"],
- external_id_values["id"],
- )
+ external_id = binder.dict2id(domain_dict, in_field=False)
+ if external_id:
+ url = "products/%s/variations/%s" % tuple(external_id)
res = self._exec("get", url, domain=common_domain)
else:
# if "id" in domain_dict and "parent_id" in domain_dict:
@@ -67,17 +64,20 @@ def search_read(self, domain=None):
# )
# res = self._exec("get", url, domain=common_domain)
# if "sku" in domain_dict:
- url = "products"
- domain.append(("parent_id", "!=", 0))
- res = self._exec("get", url, domain=domain)
+ res = self._exec(
+ "get",
+ "products",
+ domain=[
+ *domain,
+ ("parent_id", "!=", 0),
+ ],
+ )
# else:
# raise ValidationError(_("Params required"))
return res
def _get_search_fields(self):
- res = super()._get_search_fields()
- res.extend(["sku", "parent"])
- return res
+ return super()._get_search_fields() + ["sku", "parent"]
def _format_product_product(self, data):
conv_mapper = {
diff --git a/connector_woocommerce/models/product_product/binding.py b/connector_woocommerce/models/product_product/binding.py
index 2abbebc8c..8146304d9 100644
--- a/connector_woocommerce/models/product_product/binding.py
+++ b/connector_woocommerce/models/product_product/binding.py
@@ -8,6 +8,9 @@ class WooCommerceProductProduct(models.Model):
_name = "woocommerce.product.product"
_inherit = "woocommerce.binding"
_inherits = {"product.product": "odoo_id"}
+ _order = (
+ "backend_id, product_tmpl_id, woocommerce_idparent," "woocommerce_idproduct"
+ )
_description = "WooCommerce Product product Binding"
odoo_id = fields.Many2one(
@@ -34,6 +37,7 @@ class WooCommerceProductProduct(models.Model):
),
]
+ # TODO: put this on upper classes and inherit. Check this on other classes
@api.model
def _get_base_domain(self):
return [
@@ -45,9 +49,12 @@ def _get_base_domain(self):
# the export_data function?
def export_products_since(self, backend_record=None, since_date=None):
domain = self._get_base_domain()
+ # domain = [("product_tmpl_id", "=", 64877)]
+ # domain = [('id', '=', 64753)]
if since_date:
domain.append(
("woocommerce_write_date", ">", fields.Datetime.to_string(since_date))
)
self.with_delay().export_batch(backend_record, domain=domain)
+ # self.export_batch(backend_record, domain=domain)
return True
diff --git a/connector_woocommerce/models/product_public_category/binding.py b/connector_woocommerce/models/product_public_category/binding.py
index 0b03dff6e..4db7d6f99 100644
--- a/connector_woocommerce/models/product_public_category/binding.py
+++ b/connector_woocommerce/models/product_public_category/binding.py
@@ -37,6 +37,31 @@ def _get_base_domain(self):
def export_product_public_category_since(
self, backend_record=None, since_date=None
):
+ # with backend_record.work_on(self._name) as work:
+ # adapter = work.component(usage="backend.adapter")
+ # url = "products/categories"
+ # # domain=[('name', '=', 'VentilaciĂł mecĂ nica'), ('lang', '=', 'ca')]
+ # # domain = [('id', '=', 3081), ('lang', '=', 'ca')]
+ # domain = [
+ # #("id", "in", [2946, 2949, 2937, 2955, 3051, 2943, 2967, 2964]),
+ # ("lang", "=", "ca"),
+ # ]
+ # # values = adapter.get_total_items(url, domain)
+ # # values = adapter._exec("get", url, offset=3, limit=11)
+ # pairs = [(13, 10)]
+ # for offset, limit in pairs:
+ # values = adapter._exec(
+ # "get", url, domain=domain, offset=offset, limit=limit, count=False
+ # )
+ # if isinstance(values, list):
+ # for v in values:
+ # # print(">", v)
+ # print(">", v["id"])
+ # print("--->", len(values))
+ # else:
+ # print(">>>", values)
+ # exit()
+
domain = self._get_base_domain()
if since_date:
domain += [
diff --git a/connector_woocommerce/models/product_template/adapter.py b/connector_woocommerce/models/product_template/adapter.py
index 39b1381fc..d808a971c 100644
--- a/connector_woocommerce/models/product_template/adapter.py
+++ b/connector_woocommerce/models/product_template/adapter.py
@@ -55,6 +55,8 @@ def search_read(self, domain=None):
if "sku" in domain_dict:
skus = domain_dict["sku"]
if skus and len(skus) > 1:
+ # TODO: check if sku has one element and pass the domain with the
+ # skus converted to string instead on the python list
skus = ",".join([f"{sku}" for sku in skus if sku])
if skus:
products = self._exec("get", "products", domain=domain)
@@ -72,9 +74,7 @@ def search_read(self, domain=None):
return res
def _get_search_fields(self):
- res = super()._get_search_fields()
- res.extend(["sku"])
- return res
+ return super()._get_search_fields() + ["sku"]
def _format_product_template(self, data):
conv_mapper = {
@@ -83,10 +83,13 @@ def _format_product_template(self, data):
}
self._convert_format(data, conv_mapper)
+ # TODO: do we really need this
def _normalize_simple_sku(self, sku):
if isinstance(sku, list):
if len(sku) > 1:
raise ValidationError(_("Simple products can only have one variant"))
+ elif not sku:
+ raise ValidationError(_("Simple products must have a SKU"))
else:
sku = sku[0]
return sku
diff --git a/connector_woocommerce/models/product_template/binder.py b/connector_woocommerce/models/product_template/binder.py
index 2ff317d94..59551e2fe 100644
--- a/connector_woocommerce/models/product_template/binder.py
+++ b/connector_woocommerce/models/product_template/binder.py
@@ -25,3 +25,8 @@ def external_alt_id(self):
@property
def internal_alt_id(self):
return ["default_code"]
+
+ # def _additional_external_binding_fields(self, external_data, relation):
+ # return {
+ # **super()._additional_external_binding_fields(external_data, relation),
+ # }
diff --git a/connector_woocommerce/models/product_template/binding.py b/connector_woocommerce/models/product_template/binding.py
index 15175445c..c880c75d2 100644
--- a/connector_woocommerce/models/product_template/binding.py
+++ b/connector_woocommerce/models/product_template/binding.py
@@ -8,6 +8,7 @@ class WooCommerceProductTemplate(models.Model):
_name = "woocommerce.product.template"
_inherit = "woocommerce.binding"
_inherits = {"product.template": "odoo_id"}
+ _order = "backend_id, odoo_id, woocommerce_idproduct"
_description = "WooCommerce Product template Binding"
odoo_id = fields.Many2one(
diff --git a/connector_woocommerce/models/product_template/export_mapper.py b/connector_woocommerce/models/product_template/export_mapper.py
index 3637c1287..25cbf37b1 100644
--- a/connector_woocommerce/models/product_template/export_mapper.py
+++ b/connector_woocommerce/models/product_template/export_mapper.py
@@ -33,6 +33,14 @@ def sku(self, record):
raise ValidationError(
_("You must define a default code for the product %s") % record.name
)
+ elif len(default_codes) > 1:
+ raise ValidationError(
+ _(
+ "Multiple default codes found for the product %s. "
+ "Please ensure that all variants have the same default code."
+ % record.name
+ )
+ )
return {"sku": default_codes or None}
@mapping
@@ -56,7 +64,6 @@ def stock(self, record):
}
else:
if record.inventory_availability == "always":
- manage_stock = True
qty = sum(
self.env["stock.quant"]
.search(
@@ -72,7 +79,7 @@ def stock(self, record):
.mapped("available_quantity")
)
stock = {
- "manage_stock": manage_stock,
+ "manage_stock": True,
"stock_quantity": int(qty),
"stock_status": "instock"
if record.product_variant_id.qty_available > 0
diff --git a/connector_woocommerce/models/product_template/product_template.py b/connector_woocommerce/models/product_template/product_template.py
index d00e9f1c3..04364172e 100644
--- a/connector_woocommerce/models/product_template/product_template.py
+++ b/connector_woocommerce/models/product_template/product_template.py
@@ -71,15 +71,17 @@ def _compute_woocommerce_write_date(self):
slug_name = fields.Char(
translate=True,
)
- is_published = fields.Boolean(
- compute="_compute_template_is_published",
- inverse="_inverse_template_is_published",
- store=True,
- readonly=False,
- )
- button_is_published = fields.Boolean(
- related="is_published",
- )
+ # is_published = fields.Boolean(
+ # string="Product published",
+ # compute="_compute_template_is_published",
+ # inverse="_inverse_template_is_published",
+ # store=True,
+ # readonly=False,
+ # )
+ # button_is_published = fields.Boolean(
+ # string="Button product published",
+ # related="is_published",
+ # )
woocommerce_enabled = fields.Boolean(
compute="_compute_woocommerce_enabled",
store=True,
diff --git a/connector_woocommerce/models/res_partner/binder.py b/connector_woocommerce/models/res_partner/binder.py
index df7ea1134..ed03b7417 100644
--- a/connector_woocommerce/models/res_partner/binder.py
+++ b/connector_woocommerce/models/res_partner/binder.py
@@ -12,5 +12,12 @@ class WooCommerceResPartnerBinder(Component):
external_id = ["type", "hash"]
internal_id = ["woocommerce_address_type", "woocommerce_address_hash"]
+
external_alt_id = ["email", "hash", "type"]
internal_alt_id = ["address_hash", "type"]
+
+ # def _additional_external_binding_fields(self, external_data, relation):
+ # a=1
+ # return super()._additional_external_binding_fields(
+ # external_data, relation
+ # )
diff --git a/connector_woocommerce/models/res_partner/binding.py b/connector_woocommerce/models/res_partner/binding.py
index 8a6b2aaaa..6fda75d8c 100644
--- a/connector_woocommerce/models/res_partner/binding.py
+++ b/connector_woocommerce/models/res_partner/binding.py
@@ -16,10 +16,11 @@ class WooCommerceResPartner(models.Model):
required=True,
ondelete="cascade",
)
+ # TODO: DELETE
woocommerce_idrespartner = fields.Integer(
string="WooCommerce ID Res Partner",
readonly=True,
- required=True,
+ # required=True,
)
woocommerce_address_type = fields.Char(
string="WooCommerce Type",
@@ -35,7 +36,7 @@ class WooCommerceResPartner(models.Model):
_sql_constraints = [
(
"external_uniq",
- "unique(backend_id, woocommerce_idrespartner)",
- "A binding already exists with the same External (idResPartner) ID.",
+ "unique(backend_id, woocommerce_address_type, woocommerce_address_hash)",
+ "A binding already exists with the same hash) ID.",
),
]
diff --git a/connector_woocommerce/models/res_partner/import_mapper.py b/connector_woocommerce/models/res_partner/import_mapper.py
index 68841be61..6cc98f533 100644
--- a/connector_woocommerce/models/res_partner/import_mapper.py
+++ b/connector_woocommerce/models/res_partner/import_mapper.py
@@ -1,5 +1,8 @@
# Copyright NuoBiT Solutions - Kilian Niubo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+from odoo import _
+from odoo.exceptions import ValidationError
+
from odoo.addons.component.core import Component
from odoo.addons.connector.components.mapper import mapping
@@ -12,7 +15,7 @@ class WooCommerceResPartnerImportMapper(Component):
@mapping
def name(self, record):
- return {"name": record.get("first_name") + " " + record.get("last_name")}
+ return {"name": record["name"]}
@mapping
def parent_id(self, record):
@@ -32,12 +35,16 @@ def city(self, record):
@mapping
def type(self, record):
- address_type = record.get("type")
+ address_type = record["type"]
if address_type == "billing":
return {"type": "invoice"}
elif address_type == "shipping":
return {"type": "delivery"}
- return {"type": record.get("type")}
+ else:
+ raise ValidationError(
+ _("Unknown address type '%s' for partner import." % address_type)
+ )
+ # return {"type": record.get("type")}
@mapping
def hash(self, record):
diff --git a/connector_woocommerce/models/sale_order/adapter.py b/connector_woocommerce/models/sale_order/adapter.py
index 627084ee1..9c604f692 100644
--- a/connector_woocommerce/models/sale_order/adapter.py
+++ b/connector_woocommerce/models/sale_order/adapter.py
@@ -45,6 +45,7 @@ def _get_billing(self, value, hash_fields):
value["billing"]["hash"] = list2hash(
value["billing"].get(x) for x in hash_fields
)
+ value["billing"]["customer_id"] = value["customer_id"]
def _get_shipping(self, value, hash_fields):
if value.get("shipping"):
@@ -55,6 +56,7 @@ def _get_shipping(self, value, hash_fields):
value["shipping"]["hash"] = list2hash(
value["shipping"].get(x) for x in hash_fields
)
+ value["shipping"]["customer_id"] = value["customer_id"]
else:
value["shipping"] = None
@@ -115,10 +117,7 @@ def read(self, external_id): # pylint: disable=W8106
def search_read(self, domain=None, offset=0, limit=None):
self._convert_format_domain(domain)
- if limit:
- res = self._exec("get", "orders", domain=domain, offset=offset, limit=limit)
- else:
- res = self._exec("get", "orders", domain=domain, offset=offset)
+ res = self._exec("get", "orders", domain=domain, offset=offset, limit=limit)
self._reorg_order_data(res)
return res, len(res)
diff --git a/connector_woocommerce/models/sale_order/importer.py b/connector_woocommerce/models/sale_order/importer.py
index ace84c6de..97a4bb584 100644
--- a/connector_woocommerce/models/sale_order/importer.py
+++ b/connector_woocommerce/models/sale_order/importer.py
@@ -47,15 +47,23 @@ def _get_partner_parent_domain(self, dir_type, value):
def _additional_partner_parent_fields(self, value, dir_type):
return {}
- def _get_partner_parent(self, dir_type, value):
+ def _add_partner_parent(self, dir_type, value):
# TODO: REVIEW: slug for company name?
domain = self._get_partner_parent_domain(dir_type, value)
parent = self.env["res.partner"].search(domain)
if not parent:
+ name = value[dir_type]["company"] or value[dir_type]["name"]
+ if not name:
+ raise ValidationError(
+ _(
+ "Cannot create the parent partner for %s: %s because neither "
+ "company nor name is set."
+ )
+ % (dir_type, value)
+ )
parent = self.env["res.partner"].create(
{
- "name": value[dir_type].get("company")
- or value[dir_type].get("name"),
+ "name": name,
"company_type": "company",
**self._additional_partner_parent_fields(value, dir_type),
}
@@ -63,7 +71,7 @@ def _get_partner_parent(self, dir_type, value):
elif len(parent) > 1:
raise ValidationError(
_("There are more than one parent partner with the same name %s")
- % value[dir_type].get("name")
+ % value[dir_type]["name"]
)
value[dir_type]["parent"] = parent.id
@@ -72,7 +80,8 @@ def _import_dependencies(self, external_data, sync_date):
binder = self.binder_for("woocommerce.res.partner")
billing = external_data.get("billing")
if billing:
- self._get_partner_parent("billing", external_data)
+ # TODO: dELETE only next line
+ self._add_partner_parent("billing", external_data)
self._import_dependency(
binder.dict2id(billing, in_field=False),
"woocommerce.res.partner",
@@ -81,7 +90,7 @@ def _import_dependencies(self, external_data, sync_date):
)
shipping = external_data.get("shipping")
if shipping:
- self._get_partner_parent("shipping", external_data)
+ self._add_partner_parent("shipping", external_data)
self._import_dependency(
binder.dict2id(shipping, in_field=False),
"woocommerce.res.partner",
diff --git a/connector_woocommerce/models/sale_order_line/binder.py b/connector_woocommerce/models/sale_order_line/binder.py
index 066452329..b199281a9 100644
--- a/connector_woocommerce/models/sale_order_line/binder.py
+++ b/connector_woocommerce/models/sale_order_line/binder.py
@@ -13,7 +13,7 @@ class SaleOrderLineBinder(Component):
external_id = ["id", "order_id"]
internal_id = [
"woocommerce_order_line_id",
- "woocommerce_sale_order_id",
+ # "woocommerce_sale_order_id",
]
# internal_alt_id = ["product_id", "price_unit", "product_uom_qty", "order_id"]
diff --git a/connector_woocommerce/models/sale_order_line/binding.py b/connector_woocommerce/models/sale_order_line/binding.py
index 85da088f3..69eeb478d 100644
--- a/connector_woocommerce/models/sale_order_line/binding.py
+++ b/connector_woocommerce/models/sale_order_line/binding.py
@@ -17,6 +17,7 @@ class SaleOrderLineBinding(models.Model):
required=True,
ondelete="cascade",
)
+ # TODO: put this on a importer and compute this on the mapper maybe
backend_id = fields.Many2one(
related="woocommerce_order_id.backend_id",
string="Backend",
@@ -24,6 +25,12 @@ class SaleOrderLineBinding(models.Model):
store=True,
required=False,
)
+ woocommerce_order_line_id = fields.Integer(
+ string="WooCommerce Order Line ID",
+ required=True,
+ )
+ # woocommerce_sale_order_id = fields.Integer()
+
woocommerce_order_id = fields.Many2one(
comodel_name="woocommerce.sale.order",
string="WooCommerce Order",
@@ -31,11 +38,6 @@ class SaleOrderLineBinding(models.Model):
ondelete="cascade",
index=True,
)
- woocommerce_sale_order_id = fields.Integer()
- woocommerce_order_line_id = fields.Integer(
- string="WooCommerce Order Line ID",
- required=True,
- )
_sql_constraints = [
(
diff --git a/connector_woocommerce/views/woocommerce_backend_view.xml b/connector_woocommerce/views/woocommerce_backend_view.xml
index 2269ee8a5..6a534ee07 100644
--- a/connector_woocommerce/views/woocommerce_backend_view.xml
+++ b/connector_woocommerce/views/woocommerce_backend_view.xml
@@ -80,24 +80,24 @@
executed as soon
as possible.
-
+
@@ -123,38 +123,38 @@
-
+
Date: Wed, 24 Dec 2025 18:30:32 +0100
Subject: [PATCH 08/25] [IMP] connector_woocommerce: added log call in backend
---
.../views/woocommerce_backend_view.xml | 41 +++++++++++--------
1 file changed, 24 insertions(+), 17 deletions(-)
diff --git a/connector_woocommerce/views/woocommerce_backend_view.xml b/connector_woocommerce/views/woocommerce_backend_view.xml
index 6a534ee07..0694f0eb6 100644
--- a/connector_woocommerce/views/woocommerce_backend_view.xml
+++ b/connector_woocommerce/views/woocommerce_backend_view.xml
@@ -80,7 +80,7 @@
executed as soon
as possible.
-
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
From 8afa8767e8481f3508298d19c5a05f9b63629656 Mon Sep 17 00:00:00 2001
From: Eric Antones
Date: Fri, 26 Dec 2025 18:46:39 +0100
Subject: [PATCH 09/25] [FIX] connector_woocommerce: wrong channel on export
batch product
---
connector_woocommerce/data/queue_job_function_data.xml | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/connector_woocommerce/data/queue_job_function_data.xml b/connector_woocommerce/data/queue_job_function_data.xml
index 072f72e28..cbac324f3 100644
--- a/connector_woocommerce/data/queue_job_function_data.xml
+++ b/connector_woocommerce/data/queue_job_function_data.xml
@@ -14,10 +14,7 @@
ref="connector_woocommerce.model_woocommerce_product_product"
/>
export_batch
-
+
From effc6fe515f615fb921979db674d663039b16140 Mon Sep 17 00:00:00 2001
From: Eric Antones
Date: Sat, 27 Dec 2025 13:24:31 +0100
Subject: [PATCH 10/25] [FIX] connector_woocommerce: missing channel product
attribute value batch definition
---
.../data/queue_job_function_data.xml | 24 +++++++++++--------
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/connector_woocommerce/data/queue_job_function_data.xml b/connector_woocommerce/data/queue_job_function_data.xml
index cbac324f3..dd371f42c 100644
--- a/connector_woocommerce/data/queue_job_function_data.xml
+++ b/connector_woocommerce/data/queue_job_function_data.xml
@@ -95,7 +95,7 @@
-
@@ -125,6 +125,19 @@
+
+
+ export_batch
+
+
+
+
-
-
- import_chunk
-
-
-
Date: Mon, 26 Jan 2026 21:00:38 +0100
Subject: [PATCH 11/25] [IMP] connector_woocommerce: allow updating category
slugs
---
.../models/product_public_category/export_mapper.py | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/connector_woocommerce/models/product_public_category/export_mapper.py b/connector_woocommerce/models/product_public_category/export_mapper.py
index fcd60ca42..0c37a9c74 100644
--- a/connector_woocommerce/models/product_public_category/export_mapper.py
+++ b/connector_woocommerce/models/product_public_category/export_mapper.py
@@ -4,7 +4,7 @@
from odoo.exceptions import ValidationError
from odoo.addons.component.core import Component
-from odoo.addons.connector.components.mapper import changed_by, mapping, only_create
+from odoo.addons.connector.components.mapper import changed_by, mapping
class WooCommerceProductPublicCategoryExportMapper(Component):
@@ -44,13 +44,9 @@ def description(self, record):
or None
}
- # TODO: TEMPORARY DISABLED ON WRITE UNTIL WE HAD a MYSQL CONNECTION AND
- # DO THIS WITH THE API WPML RESTRICTIONS
- # TODO: We shoud do this differently, is not a good hook
def _get_slug_name(self, record):
return record.with_context(lang=self.backend_record.language_id.code).slug_name
- @only_create
@mapping
def slug(self, record):
slug = self._get_slug_name(record)
From 5d2722f438c9d1fe941f328b6815f9a1f9027c1f Mon Sep 17 00:00:00 2001
From: Eric Antones
Date: Tue, 27 Jan 2026 01:02:38 +0100
Subject: [PATCH 12/25] [REF] connector_woocommerce: rename some variables
---
.../models/product_attribute_value/binding.py | 3 ++-
connector_woocommerce/models/product_product/binding.py | 6 +++---
connector_woocommerce/models/product_product/exporter.py | 8 ++++----
3 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/connector_woocommerce/models/product_attribute_value/binding.py b/connector_woocommerce/models/product_attribute_value/binding.py
index d9c20c162..1a52c2b6e 100644
--- a/connector_woocommerce/models/product_attribute_value/binding.py
+++ b/connector_woocommerce/models/product_attribute_value/binding.py
@@ -51,7 +51,8 @@ def export_product_attribute_value_since(
# print("--->", len(values))
# exit()
- # domain += [("attribute_id", "=", 7)]
+ # domain = [("attribute_id", "=", 27)]
+ # domain = [("id", "=", 292)]
# self.export_batch(backend_record, domain=domain, delayed=False)
# self.with_delay().export_batch(backend_record, domain=domain)
diff --git a/connector_woocommerce/models/product_product/binding.py b/connector_woocommerce/models/product_product/binding.py
index 8146304d9..bb39d9f0c 100644
--- a/connector_woocommerce/models/product_product/binding.py
+++ b/connector_woocommerce/models/product_product/binding.py
@@ -49,12 +49,12 @@ def _get_base_domain(self):
# the export_data function?
def export_products_since(self, backend_record=None, since_date=None):
domain = self._get_base_domain()
- # domain = [("product_tmpl_id", "=", 64877)]
- # domain = [('id', '=', 64753)]
if since_date:
domain.append(
("woocommerce_write_date", ">", fields.Datetime.to_string(since_date))
)
self.with_delay().export_batch(backend_record, domain=domain)
- # self.export_batch(backend_record, domain=domain)
+ # domain = [("product_tmpl_id", "=", 64877)]
+ # domain = [('id', '=', 64753)]
+ # self.export_batch(backend_record, domain=domain, delayed=False)
return True
diff --git a/connector_woocommerce/models/product_product/exporter.py b/connector_woocommerce/models/product_product/exporter.py
index bb269bca2..4627ac072 100644
--- a/connector_woocommerce/models/product_product/exporter.py
+++ b/connector_woocommerce/models/product_product/exporter.py
@@ -49,14 +49,14 @@ def _export_dependencies(self, relation):
"woocommerce.product.template",
always=True,
)
- for line in relation.product_tmpl_id.attribute_line_ids:
+ for attr_line in relation.product_tmpl_id.attribute_line_ids:
self._export_dependency(
- line.attribute_id,
+ attr_line.attribute_id,
"woocommerce.product.attribute",
)
- for value in line.value_ids:
+ for attr_value in attr_line.value_ids:
self._export_dependency(
- value,
+ attr_value,
"woocommerce.product.attribute.value",
)
# TODO: Duplicated code?
From 85b46e6a9483634ff405839c361d140bf05b0e1e Mon Sep 17 00:00:00 2001
From: ???
Date: Fri, 27 Mar 2026 10:02:30 +0100
Subject: [PATCH 13/25] [IMP] connector_woocommerce: pre-commit auto fixes
---
connector_woocommerce/README.rst | 18 +++++++++---------
connector_woocommerce/__manifest__.py | 2 +-
connector_woocommerce/data/ir_cron.xml | 2 +-
.../data/queue_job_function_data.xml | 1 -
.../product_product/product_pricelist_item.py | 6 +++---
connector_woocommerce/pyproject.toml | 3 +++
connector_woocommerce/readme/CONTRIBUTORS.md | 3 +++
connector_woocommerce/readme/CONTRIBUTORS.rst | 4 ----
.../readme/{DESCRIPTION.rst => DESCRIPTION.md} | 0
.../static/description/index.html | 6 +++---
.../views/sale_order_view.xml | 2 +-
.../views/woocommerce_backend_view.xml | 1 -
requirements.txt | 2 ++
13 files changed, 26 insertions(+), 24 deletions(-)
create mode 100644 connector_woocommerce/pyproject.toml
create mode 100644 connector_woocommerce/readme/CONTRIBUTORS.md
delete mode 100644 connector_woocommerce/readme/CONTRIBUTORS.rst
rename connector_woocommerce/readme/{DESCRIPTION.rst => DESCRIPTION.md} (100%)
create mode 100644 requirements.txt
diff --git a/connector_woocommerce/README.rst b/connector_woocommerce/README.rst
index c7923dbef..0d4f7cedd 100644
--- a/connector_woocommerce/README.rst
+++ b/connector_woocommerce/README.rst
@@ -17,7 +17,7 @@ Connector WooCommerce
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-NuoBiT%2Fodoo--addons-lightgray.png?logo=github
- :target: https://github.com/NuoBiT/odoo-addons/tree/14.0/connector_woocommerce
+ :target: https://github.com/NuoBiT/odoo-addons/tree/18.0/connector_woocommerce
:alt: NuoBiT/odoo-addons
|badge1| |badge2| |badge3|
@@ -35,7 +35,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -43,22 +43,22 @@ Credits
=======
Authors
-~~~~~~~
+-------
* NuoBiT Solutions
* S.L.
Contributors
-~~~~~~~~~~~~
+------------
-* `NuoBiT `__:
+- `NuoBiT `__:
- * Kilian Niubo
- * Eric Antones
+ - Kilian Niubo
+ - Eric Antones
Maintainers
-~~~~~~~~~~~
+-----------
-This module is part of the `NuoBiT/odoo-addons `_ project on GitHub.
+This module is part of the `NuoBiT/odoo-addons `_ project on GitHub.
You are welcome to contribute.
diff --git a/connector_woocommerce/__manifest__.py b/connector_woocommerce/__manifest__.py
index d1eaa7dda..94021d939 100644
--- a/connector_woocommerce/__manifest__.py
+++ b/connector_woocommerce/__manifest__.py
@@ -8,7 +8,7 @@
"author": "NuoBiT Solutions, S.L.",
"license": "AGPL-3",
"category": "Connector",
- "website": "https://github.com/nuobit/odoo-addons",
+ "website": "https://github.com/NuoBiT/odoo-addons",
"external_dependencies": {
"python": [
"woocommerce",
diff --git a/connector_woocommerce/data/ir_cron.xml b/connector_woocommerce/data/ir_cron.xml
index 6ed9dab55..281570d81 100644
--- a/connector_woocommerce/data/ir_cron.xml
+++ b/connector_woocommerce/data/ir_cron.xml
@@ -129,7 +129,7 @@
code
model._scheduler_export_product_attribute_value()
-
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) -->
-
+ - Eric Antones \
diff --git a/connector_woocommerce/readme/CONTRIBUTORS.rst b/connector_woocommerce/readme/CONTRIBUTORS.rst
deleted file mode 100644
index e468d95a0..000000000
--- a/connector_woocommerce/readme/CONTRIBUTORS.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-* `NuoBiT `__:
-
- * Kilian Niubo
- * Eric Antones
diff --git a/connector_woocommerce/readme/DESCRIPTION.rst b/connector_woocommerce/readme/DESCRIPTION.md
similarity index 100%
rename from connector_woocommerce/readme/DESCRIPTION.rst
rename to connector_woocommerce/readme/DESCRIPTION.md
diff --git a/connector_woocommerce/static/description/index.html b/connector_woocommerce/static/description/index.html
index 88d86bffe..bd0d1d5b8 100644
--- a/connector_woocommerce/static/description/index.html
+++ b/connector_woocommerce/static/description/index.html
@@ -369,7 +369,7 @@ Connector WooCommerce
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:efb5e8c61863c074f22531f0a6ed6366c9d138be340175ef86002feddcd28e36
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
Connector WooCommerce
Table of contents
@@ -388,7 +388,7 @@
Bugs are tracked on GitHub Issues .
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
-feedback .
+
feedback .
Do not contact contributors directly about support or help with technical issues.
-
This module is part of the NuoBiT/odoo-addons project on GitHub.
+
This module is part of the NuoBiT/odoo-addons project on GitHub.
You are welcome to contribute.
diff --git a/connector_woocommerce/views/sale_order_view.xml b/connector_woocommerce/views/sale_order_view.xml
index 297b58836..6acf7a7ec 100644
--- a/connector_woocommerce/views/sale_order_view.xml
+++ b/connector_woocommerce/views/sale_order_view.xml
@@ -13,7 +13,7 @@
-
-
Date: Fri, 27 Mar 2026 11:53:35 +0100
Subject: [PATCH 14/25] [MIG] connector_woocommerce: Migration to 18.0
---
connector_woocommerce/README.rst | 8 ++--
connector_woocommerce/__manifest__.py | 5 +-
.../models/backend/backend_account_tax.py | 4 +-
.../models/backend/backend_payment_mode.py | 4 +-
connector_woocommerce/models/common/tools.py | 22 ++++++---
.../models/product/export_mapper.py | 22 +++++----
.../product_attachment/product_attachment.py | 5 +-
.../models/product_attribute_value/adapter.py | 9 ++--
.../models/product_product/adapter.py | 13 +++---
.../models/product_product/export_mapper.py | 26 +++++++----
.../models/product_product/exporter.py | 4 +-
.../models/product_public_category/adapter.py | 5 +-
.../product_public_category.py | 11 +++--
.../models/product_template/adapter.py | 5 +-
.../models/product_template/binding.py | 4 +-
.../models/product_template/export_mapper.py | 29 ++++++++----
.../models/res_partner/import_mapper.py | 3 +-
.../models/sale_order/adapter.py | 4 +-
.../models/sale_order/binding.py | 4 +-
.../models/sale_order/import_mapper.py | 17 ++++---
.../models/sale_order/importer.py | 22 +++++----
.../models/sale_order_line/import_mapper.py | 8 ++--
connector_woocommerce/readme/CONTRIBUTORS.md | 5 +-
.../static/description/index.html | 8 ++--
.../views/product_attribute.xml | 9 ++--
.../views/product_attribute_value.xml | 9 ++--
.../views/product_product.xml | 13 +++---
.../views/product_public_category.xml | 9 ++--
.../views/product_template.xml | 2 +-
.../views/res_partner_views.xml | 9 ++--
.../views/sale_order_view.xml | 11 +++--
.../views/woocommerce_backend_view.xml | 46 ++++++++-----------
.../views/woocommerce_product_template.xml | 9 ++--
33 files changed, 213 insertions(+), 151 deletions(-)
diff --git a/connector_woocommerce/README.rst b/connector_woocommerce/README.rst
index 0d4f7cedd..83f93cef8 100644
--- a/connector_woocommerce/README.rst
+++ b/connector_woocommerce/README.rst
@@ -45,16 +45,16 @@ Credits
Authors
-------
-* NuoBiT Solutions
-* S.L.
+* NuoBiT Solutions SL
Contributors
------------
- `NuoBiT `__:
- - Kilian Niubo
- - Eric Antones
+ - Kilian Niubo kniubo@nuobit.com
+ - Eric Antones eantones@nuobit.com
+ - Deniz Gallo dgallo@nuobit.com
Maintainers
-----------
diff --git a/connector_woocommerce/__manifest__.py b/connector_woocommerce/__manifest__.py
index 94021d939..7b0fe7c6f 100644
--- a/connector_woocommerce/__manifest__.py
+++ b/connector_woocommerce/__manifest__.py
@@ -1,11 +1,12 @@
# Copyright NuoBiT Solutions - Kilian Niubo
# Copyright NuoBiT Solutions - Eric Antones
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
{
"name": "Connector WooCommerce",
- "version": "14.0.0.1.1",
- "author": "NuoBiT Solutions, S.L.",
+ "version": "18.0.1.0.0",
+ "author": "NuoBiT Solutions SL",
"license": "AGPL-3",
"category": "Connector",
"website": "https://github.com/NuoBiT/odoo-addons",
diff --git a/connector_woocommerce/models/backend/backend_account_tax.py b/connector_woocommerce/models/backend/backend_account_tax.py
index 553592b4a..ab3cf99b8 100644
--- a/connector_woocommerce/models/backend/backend_account_tax.py
+++ b/connector_woocommerce/models/backend/backend_account_tax.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import logging
@@ -31,6 +32,7 @@ class WooCommerceBackendAccountTax(models.Model):
(
"tax_map_uniq",
"unique(backend_id, woocommerce_tax_rate_id)",
- "A binding already exists with the same (backend, woocommerce_tax_rate_id) ID.",
+ "A binding already exists with the same "
+ "(backend, woocommerce_tax_rate_id) ID.",
),
]
diff --git a/connector_woocommerce/models/backend/backend_payment_mode.py b/connector_woocommerce/models/backend/backend_payment_mode.py
index 2e4e25e36..27b45a5c2 100644
--- a/connector_woocommerce/models/backend/backend_payment_mode.py
+++ b/connector_woocommerce/models/backend/backend_payment_mode.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import logging
@@ -38,6 +39,7 @@ class WooCommerceBackendAccountTax(models.Model):
(
"tax_map_uniq",
"unique(backend_id, woocommerce_payment_mode)",
- "A binding already exists with the same (backend, woocommerce_payment_mode) ID.",
+ "A binding already exists with the same "
+ "(backend, woocommerce_payment_mode) ID.",
),
]
diff --git a/connector_woocommerce/models/common/tools.py b/connector_woocommerce/models/common/tools.py
index bab1c47ac..f60cbc9ff 100644
--- a/connector_woocommerce/models/common/tools.py
+++ b/connector_woocommerce/models/common/tools.py
@@ -1,5 +1,6 @@
# Copyright NuoBiT Solutions - Eric Antones
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
import datetime
import hashlib
@@ -21,7 +22,7 @@ def list2hash(_list):
elif e is None:
e9 = ""
else:
- raise Exception("Unexpected type for a key: type %s" % type(e))
+ raise Exception(f"Unexpected type for a key: type {type(e)}")
_hash.update(e9.encode("utf8"))
return _hash.hexdigest()
@@ -49,10 +50,11 @@ def domain_to_normalized_dict(self, domain):
raise ValidationError(_("Duplicated field %s") % field)
res[field] = self._normalize_value(not value)
elif op == "in":
- if not isinstance(value, (tuple, list)):
+ if not isinstance(value, (tuple | list)):
raise ValidationError(
_(
- "Operator '%(OPERATOR)s' only supports tuples or lists, not %(TYPES)s"
+ "Operator '%(OPERATOR)s' only supports"
+ " tuples or lists, not %(TYPES)s"
)
% {
"OPERATOR": op,
@@ -60,16 +62,22 @@ def domain_to_normalized_dict(self, domain):
}
)
if field in res:
- raise ValidationError(_("Duplicated field %s") % field)
+ raise ValidationError(
+ _("Duplicated field %(field)s") % {"field": field}
+ )
res[field] = self._normalize_value(value)
elif op in (">", ">=", "<", "<="):
- if not isinstance(value, (datetime.date, datetime.datetime, int)):
+ if not isinstance(value, (datetime.date | datetime.datetime | int)):
raise ValidationError(
- _("Type {} not supported for operator {}").format(type(value), op)
+ _("Type %(OPERATOR)s not supported for operator %(TYPES)s")
+ % {
+ "OPERATOR": op,
+ "TYPES": type(value),
+ }
)
if op in (">", "<"):
adj = 1
- if isinstance(value, (datetime.date, datetime.datetime)):
+ if isinstance(value, (datetime.date | datetime.datetime)):
adj = datetime.timedelta(days=adj)
if op == "<":
op, value = "<=", value - adj
diff --git a/connector_woocommerce/models/product/export_mapper.py b/connector_woocommerce/models/product/export_mapper.py
index 44602cbda..34d8e0f2d 100644
--- a/connector_woocommerce/models/product/export_mapper.py
+++ b/connector_woocommerce/models/product/export_mapper.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo.addons.component.core import AbstractComponent
@@ -29,14 +30,15 @@ def _prepare_document_description(self, documents):
if external_id:
binding = binder.wrap_record(document.attachment_id)
document_description.append(
- "%s
"
- % (
- self._prepare_url(binding, document),
- # document.with_context(
- # lang=self._get_lang(document)
- # ).name,
- document.name,
- )
+ f"{document.name}
"
+ # % (
+ # self._prepare_url(binding, document),
+ # # document.with_context(
+ # # lang=self._get_lang(document)
+ # # ).name,
+ # document.name,
+ # )
)
else:
if (
@@ -44,10 +46,10 @@ def _prepare_document_description(self, documents):
and self.backend_record.wordpress_backend_id
):
assert external_id, (
- "Unexpected error on %s:"
+ f"Unexpected error on {document.product_id._name}:"
"The backend id cannot be obtained."
"At this stage, the backend record should "
"have been already linked via "
- "._export_dependencies. " % document.product_id._name
+ "._export_dependencies. "
)
return "\n".join(document_description) or None
diff --git a/connector_woocommerce/models/product_attachment/product_attachment.py b/connector_woocommerce/models/product_attachment/product_attachment.py
index ba7e6b25b..cd0fa1d5f 100644
--- a/connector_woocommerce/models/product_attachment/product_attachment.py
+++ b/connector_woocommerce/models/product_attachment/product_attachment.py
@@ -1,5 +1,6 @@
# Copyright NuoBiT Solutions - Kilian Niubo
# Copyright NuoBiT Solutions - Eric Antones
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import fields, models
@@ -12,9 +13,7 @@ class ConnectorWoocommerceProductAttachment(models.TransientModel):
_description = "Connector Woocommerce Product Attachment"
- sequence = fields.Integer(
- string="Sequence",
- )
+ sequence = fields.Integer()
attachment_id = fields.Many2one(
comodel_name="ir.attachment",
diff --git a/connector_woocommerce/models/product_attribute_value/adapter.py b/connector_woocommerce/models/product_attribute_value/adapter.py
index 84d5cabda..8575353be 100644
--- a/connector_woocommerce/models/product_attribute_value/adapter.py
+++ b/connector_woocommerce/models/product_attribute_value/adapter.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import _
from odoo.exceptions import ValidationError
@@ -14,7 +15,7 @@ class WooCommerceProductAttributeValueAdapter(Component):
def read(self, external_id): # pylint: disable=W8106
external_id = self.binder_for().id2dict(external_id, in_field=False)
- url = "products/attributes/%s/terms/%s" % tuple(external_id)
+ url = f"products/attributes/{tuple(external_id)}/terms/{tuple(external_id)}"
values = self._exec("get", url)
return values
@@ -53,7 +54,7 @@ def search_read(self, domain=None):
attribute_values = []
for attribute_id in attribute_ids:
- url = "products/attributes/%s/terms" % attribute_id
+ url = f"products/attributes/{attribute_id}/terms"
values = self._exec("get", url, domain=real_domain)
for value in values:
value["parent_id"] = attribute_id
@@ -69,7 +70,7 @@ def create(self, data): # pylint: disable=W8106
)
res = self._exec(
"post",
- "products/attributes/%s/terms" % data["parent_id"],
+ f"products/attributes/{data['parent_id']}/terms",
data=data,
)
if res:
@@ -79,7 +80,7 @@ def create(self, data): # pylint: disable=W8106
def write(self, external_id, data): # pylint: disable=W8106
return self._exec(
"put",
- "products/attributes/%s/terms/%s" % tuple(external_id),
+ f"products/attributes/{tuple(external_id)}/terms/{tuple(external_id)}",
data=data,
)
diff --git a/connector_woocommerce/models/product_product/adapter.py b/connector_woocommerce/models/product_product/adapter.py
index 1b47c832e..3a3d8684d 100644
--- a/connector_woocommerce/models/product_product/adapter.py
+++ b/connector_woocommerce/models/product_product/adapter.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import _
from odoo.exceptions import ValidationError
@@ -17,9 +18,9 @@ def _reorg_product_data(self, data):
def read(self, external_id): # pylint: disable=W8106
external_id_values = self.binder_for().id2dict(external_id, in_field=False)
- url = "products/%s/variations/%s" % (
- external_id_values["parent_id"],
- external_id_values["id"],
+ url = (
+ f"products/{external_id_values['parent_id']}"
+ f"/variations/{external_id_values['id']}"
)
res = self._exec("get", url, limit=1)
self._reorg_product_data(res)
@@ -34,7 +35,7 @@ def create(self, data): # pylint: disable=W8106
self._prepare_data(data)
url_l = ["products"]
parent = data.pop("parent_id")
- url_l.append("%s/variations" % parent)
+ url_l.append(f"{parent}/variations")
res = self._exec("post", "/".join(url_l), data=data)
res["parent_id"] = parent
return res
@@ -43,7 +44,7 @@ def write(self, external_id, data): # pylint: disable=W8106
self._prepare_data(data)
return self._exec(
"put",
- "products/%s/variations/%s" % tuple(external_id),
+ f"products/{tuple(external_id)}/variations/{tuple(external_id)}",
data=data,
)
@@ -54,7 +55,7 @@ def search_read(self, domain=None):
domain_dict = self._domain_to_normalized_dict(domain)
external_id = binder.dict2id(domain_dict, in_field=False)
if external_id:
- url = "products/%s/variations/%s" % tuple(external_id)
+ url = f"products/{tuple(external_id)}/variations/{tuple(external_id)}"
res = self._exec("get", url, domain=common_domain)
else:
# if "id" in domain_dict and "parent_id" in domain_dict:
diff --git a/connector_woocommerce/models/product_product/export_mapper.py b/connector_woocommerce/models/product_product/export_mapper.py
index 0e61a5267..8285d2737 100644
--- a/connector_woocommerce/models/product_product/export_mapper.py
+++ b/connector_woocommerce/models/product_product/export_mapper.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import _
from odoo.exceptions import ValidationError
@@ -39,8 +40,14 @@ def sku(self, record):
# but it's necessary in e-commerce
if not record.default_code:
raise ValidationError(
- _("You must define an internal reference for the product {%s}'%s'")
- % (record.id, record.display_name)
+ _(
+ "You must define an internal reference "
+ "for the product {%(rec)s}'%(name)s'"
+ )
+ % {
+ "rec": record.id,
+ "name": record.display_name,
+ }
)
return {"sku": record.default_code}
@@ -85,14 +92,15 @@ def stock(self, record):
else:
raise ValidationError(
_(
- "The inventory availability '%s' is not supported by WooCommerce. "
- "Review product variant {%s}%s."
- )
- % (
- record.variant_inventory_availability,
- record.id,
- record.display_name,
+ "The inventory availability '%(inv)s' "
+ "is not supported by WooCommerce. "
+ "Review product variant {%(rec)s}%(name)s."
)
+ % {
+ "inv": record.variant_inventory_availability,
+ "rec": record.id,
+ "name": record.display_name,
+ }
)
return stock
diff --git a/connector_woocommerce/models/product_product/exporter.py b/connector_woocommerce/models/product_product/exporter.py
index 4627ac072..19377c2b8 100644
--- a/connector_woocommerce/models/product_product/exporter.py
+++ b/connector_woocommerce/models/product_product/exporter.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo.addons.component.core import Component
@@ -35,7 +36,8 @@ class WooCommerceProductProductExporter(Component):
_apply_on = "woocommerce.product.product"
def _export_dependencies(self, relation):
- # In the case of a woocommerce simple product (Product template with one variant)
+ # In the case of a woocommerce simple product
+ # (Product template with one variant)
# we need to export the dependencies of the product template because
# it's the product template that will be exported instead of product product
if relation.env.context.get("export_wo_acc_p"):
diff --git a/connector_woocommerce/models/product_public_category/adapter.py b/connector_woocommerce/models/product_public_category/adapter.py
index e77513817..c2a4f745c 100644
--- a/connector_woocommerce/models/product_public_category/adapter.py
+++ b/connector_woocommerce/models/product_public_category/adapter.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo.addons.component.core import Component
@@ -17,7 +18,7 @@ def write(self, external_id, data): # pylint: disable=W8106
if self.env.context.get("resync_exported_dependencies"):
return {}
external_id_values = self.binder_for().id2dict(external_id, in_field=False)
- url = "products/categories/%s" % external_id_values["id"]
+ url = f"products/categories/{external_id_values['id']}"
return self._exec("put", url, data=data)
def search_read(self, domain=None):
@@ -30,5 +31,5 @@ def _get_search_fields(self):
def delete(self, external_id):
external_id_values = self.binder_for().id2dict(external_id, in_field=False)
- url = "products/categories/%s" % external_id_values["id"]
+ url = f"products/categories/{external_id_values['id']}"
return self._exec("delete", url, params={"force": "1"})
diff --git a/connector_woocommerce/models/product_public_category/product_public_category.py b/connector_woocommerce/models/product_public_category/product_public_category.py
index a70fe7537..7352fb730 100644
--- a/connector_woocommerce/models/product_public_category/product_public_category.py
+++ b/connector_woocommerce/models/product_public_category/product_public_category.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import _, fields, models
@@ -30,11 +31,15 @@ def unlink(self):
if children_with_bindings:
raise ValidationError(
_(
- "Not supported: It's not possible delete a category '%s' with "
+ "Not supported: It's not possible delete"
+ " a category '%(name)s' with "
"WooCommerce bindings if it has children with WooCommerce "
- "bindings. Delete first the children %s"
+ "bindings. Delete first the children %(children)s"
)
- % (categories_with_bindings.name, children_with_bindings.mapped("name"))
+ % {
+ "name": categories_with_bindings.name,
+ "children": ", ".join(children_with_bindings.mapped("name")),
+ }
)
return super(
ProductPublicCategory,
diff --git a/connector_woocommerce/models/product_template/adapter.py b/connector_woocommerce/models/product_template/adapter.py
index d808a971c..b3442b523 100644
--- a/connector_woocommerce/models/product_template/adapter.py
+++ b/connector_woocommerce/models/product_template/adapter.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import _
from odoo.exceptions import ValidationError
@@ -17,7 +18,7 @@ def _reorg_product_data(self, data):
def read(self, external_id): # pylint: disable=W8106
external_id_values = self.binder_for().id2dict(external_id, in_field=False)
- url = "products/%s" % external_id_values["id"]
+ url = f"products/{external_id_values['id']}"
res = self._exec("get", url, limit=1)
self._reorg_product_data(res)
if len(res) > 1:
@@ -47,7 +48,7 @@ def search_read(self, domain=None):
__, common_domain = self._extract_domain_clauses(domain, id_fields)
template_id = binder.dict2id(domain_dict, in_field=False, unwrap=True)
if template_id:
- url = "products/%s" % template_id
+ url = f"products/{template_id}"
res = self._exec("get", url, domain=common_domain)
else:
res = []
diff --git a/connector_woocommerce/models/product_template/binding.py b/connector_woocommerce/models/product_template/binding.py
index c880c75d2..d7d50b6d0 100644
--- a/connector_woocommerce/models/product_template/binding.py
+++ b/connector_woocommerce/models/product_template/binding.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import api, fields, models
@@ -52,8 +53,9 @@ def export_product_tmpl_since(self, backend_record=None, since_date=None):
return True
def resync_export(self):
- super().resync_export()
+ res = super().resync_export()
for rec in self:
rec.product_variant_ids.woocommerce_bind_ids.filtered(
lambda x: x.backend_id == self.backend_id
).resync_export()
+ return res
diff --git a/connector_woocommerce/models/product_template/export_mapper.py b/connector_woocommerce/models/product_template/export_mapper.py
index 25cbf37b1..f0c4abd10 100644
--- a/connector_woocommerce/models/product_template/export_mapper.py
+++ b/connector_woocommerce/models/product_template/export_mapper.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import _
from odoo.exceptions import ValidationError
@@ -35,11 +36,11 @@ def sku(self, record):
)
elif len(default_codes) > 1:
raise ValidationError(
+ # format
_(
- "Multiple default codes found for the product %s. "
+ "Multiple default codes found for the product {}."
"Please ensure that all variants have the same default code."
- % record.name
- )
+ ).format(record.name)
)
return {"sku": default_codes or None}
@@ -89,10 +90,15 @@ def stock(self, record):
else:
raise ValidationError(
_(
- "The inventory availability '%s' is not supported by WooCommerce. "
- "Review product template {%s}%s."
+ "The inventory availability '%(inv)s' "
+ "is not supported by WooCommerce. "
+ "Review product template {%(rec)s}%(name)s."
)
- % (record.inventory_availability, record.id, record.display_name)
+ % {
+ "inv": record.inventory_availability,
+ "rec": record.id,
+ "name": record.display_name,
+ }
)
return stock
@@ -210,9 +216,12 @@ def tax_class(self, record):
raise ValidationError(
_(
"Only one tax is allowed per product. "
- "Please review taxes in product {%s} %s"
+ "Please review taxes in product {%(id)s} %(name)s"
)
- % (record.id, record.display_name)
+ % {
+ "id": record.id,
+ "name": record.display_name,
+ }
)
tax_class = self.backend_record.tax_class_ids.filtered(
lambda x: record["taxes_id"] == x.account_tax_id
@@ -281,11 +290,11 @@ def images(self, record):
else:
if not self.backend_record.wordpress_backend_id.test_database:
assert external_id, (
- "Unexpected error on %s:"
+ f"Unexpected error on {record._name}:"
"The backend id cannot be obtained."
"At this stage, the backend record should "
"have been already linked via "
- "._export_dependencies. " % record._name
+ "._export_dependencies. "
)
if img_list:
return {"images": img_list}
diff --git a/connector_woocommerce/models/res_partner/import_mapper.py b/connector_woocommerce/models/res_partner/import_mapper.py
index 6cc98f533..dd9f6cb88 100644
--- a/connector_woocommerce/models/res_partner/import_mapper.py
+++ b/connector_woocommerce/models/res_partner/import_mapper.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import _
from odoo.exceptions import ValidationError
@@ -42,7 +43,7 @@ def type(self, record):
return {"type": "delivery"}
else:
raise ValidationError(
- _("Unknown address type '%s' for partner import." % address_type)
+ _("Unknown address type '{}' for partner import.").format(address_type)
)
# return {"type": record.get("type")}
diff --git a/connector_woocommerce/models/sale_order/adapter.py b/connector_woocommerce/models/sale_order/adapter.py
index 9c604f692..3ec75dec2 100644
--- a/connector_woocommerce/models/sale_order/adapter.py
+++ b/connector_woocommerce/models/sale_order/adapter.py
@@ -1,5 +1,7 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
from odoo import _
from odoo.exceptions import ValidationError
@@ -105,7 +107,7 @@ def _reorg_order_data(self, values):
def read(self, external_id): # pylint: disable=W8106
external_id_values = self.binder_for().id2dict(external_id, in_field=False)
- url = "orders/%s" % (external_id_values["id"])
+ url = f"orders/{external_id_values['id']}"
res = self._exec("get", url, limit=1)
self._reorg_order_data(res)
if len(res) > 1:
diff --git a/connector_woocommerce/models/sale_order/binding.py b/connector_woocommerce/models/sale_order/binding.py
index 2f326b831..dd5c4951b 100644
--- a/connector_woocommerce/models/sale_order/binding.py
+++ b/connector_woocommerce/models/sale_order/binding.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import api, fields, models
@@ -47,7 +48,8 @@ def _get_base_domain(self):
def import_sale_orders_since(self, backend_record=None, since_date=None):
domain = self._get_base_domain()
# TODO: El extract_domain_clauses don't accept 'in operator,
- # to use get_total_items in status on-hold and processing we have to do two imports.
+ # to use get_total_items in status on-hold and
+ # processing we have to do two imports.
# We have to find a better way to join this domains.
domain += [("status", "=", "on-hold,processing")]
# domain += [("status", "=", "on-hold")]
diff --git a/connector_woocommerce/models/sale_order/import_mapper.py b/connector_woocommerce/models/sale_order/import_mapper.py
index 3cd7f92b2..6cd6879ea 100644
--- a/connector_woocommerce/models/sale_order/import_mapper.py
+++ b/connector_woocommerce/models/sale_order/import_mapper.py
@@ -1,5 +1,7 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
from odoo import _
from odoo.exceptions import ValidationError
@@ -48,13 +50,16 @@ def billing(self, record):
external_id = binder.dict2id(record["billing"], in_field=False)
partner = binder.to_internal(external_id, unwrap=True)
assert partner, (
- "partner_id %s should have been imported in "
- "SaleOrderImporter._import_dependencies" % external_id
+ f"partner_id {external_id} should have been imported in "
+ "SaleOrderImporter._import_dependencies"
)
if not partner.active:
raise ValidationError(
- _("The partner %s, with id:%s is archived, please, enable it")
- % (partner.name, partner.id)
+ _(
+ "The partner %(partner)s, with id:%(id)s"
+ " is archived, please, enable it"
+ )
+ % {"partner": partner.name, "id": partner.id}
)
partner_return = {"partner_invoice_id": partner.id}
if partner.parent_id:
@@ -70,8 +75,8 @@ def shipping(self, record):
external_id = binder.dict2id(record["shipping"], in_field=False)
partner = binder.to_internal(external_id, unwrap=True)
assert partner, (
- "partner_shipping_id %s should have been imported in "
- "SaleOrderImporter._import_dependencies" % external_id
+ f"partner_shipping_id {external_id} should have been imported in "
+ "SaleOrderImporter._import_dependencies"
)
return {"partner_shipping_id": partner.id}
diff --git a/connector_woocommerce/models/sale_order/importer.py b/connector_woocommerce/models/sale_order/importer.py
index 97a4bb584..02fc3f907 100644
--- a/connector_woocommerce/models/sale_order/importer.py
+++ b/connector_woocommerce/models/sale_order/importer.py
@@ -1,5 +1,7 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
from odoo import _
from odoo.exceptions import ValidationError
@@ -56,10 +58,14 @@ def _add_partner_parent(self, dir_type, value):
if not name:
raise ValidationError(
_(
- "Cannot create the parent partner for %s: %s because neither "
+ "Cannot create the parent partner "
+ "for %(dir)s: %(value)s because neither "
"company nor name is set."
)
- % (dir_type, value)
+ % {
+ "dir": dir_type,
+ "value": value,
+ }
)
parent = self.env["res.partner"].create(
{
@@ -108,7 +114,8 @@ def _import_dependencies(self, external_data, sync_date):
if product["id"] == 0:
raise ValidationError(
_(
- "The product '%s' in the order has been deleted on WooCommerce. "
+ "The product '%s' in the order "
+ "has been deleted on WooCommerce. "
"This order cannot be imported."
)
% product["name"]
@@ -118,7 +125,8 @@ def _import_dependencies(self, external_data, sync_date):
if product["id"] == 0 and product["parent_id"] == 0:
raise ValidationError(
_(
- "The product '%s' in the order has been deleted on WooCommerce. "
+ "The product '%s' in the order "
+ "has been deleted on WooCommerce. "
"This order cannot be imported."
)
% product["name"]
@@ -153,10 +161,8 @@ def _must_skip(self, binding):
res = super()._must_skip(binding)
if binding:
return _(
- "The Order %s is already imported "
- "-> Update not allowed"
- % self.binder_for().unwrap_binding(binding).display_name
- )
+ "The Order {} is already imported " "-> Update not allowed"
+ ).format(binding.woocommerce_id)
return res
diff --git a/connector_woocommerce/models/sale_order_line/import_mapper.py b/connector_woocommerce/models/sale_order_line/import_mapper.py
index a86ca210d..ea06d2d17 100644
--- a/connector_woocommerce/models/sale_order_line/import_mapper.py
+++ b/connector_woocommerce/models/sale_order_line/import_mapper.py
@@ -1,5 +1,7 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
from odoo import _
from odoo.exceptions import ValidationError
@@ -66,8 +68,8 @@ def product_id(self, record):
product_tmpl = binder.to_internal(external_id, unwrap=True)
product_odoo = product_tmpl.product_variant_id
assert product_odoo, (
- "product_id %s should have been imported in "
- "SaleOrderImporter._import_dependencies" % (external_id,)
+ f"product_id {external_id} should have been imported in "
+ "SaleOrderImporter._import_dependencies"
)
return {"product_id": product_odoo.id}
@@ -78,7 +80,7 @@ def tax_id(self, record):
for tax in record.get("taxes"):
if tax["total"]:
tax_map = self.backend_record.tax_map_ids.filtered(
- lambda x: tax["id"] == int(x.woocommerce_tax_rate_id)
+ lambda x, tax=tax: tax["id"] == int(x.woocommerce_tax_rate_id)
)
if not tax_map:
raise ValidationError(
diff --git a/connector_woocommerce/readme/CONTRIBUTORS.md b/connector_woocommerce/readme/CONTRIBUTORS.md
index e861d9e77..0355cecbc 100644
--- a/connector_woocommerce/readme/CONTRIBUTORS.md
+++ b/connector_woocommerce/readme/CONTRIBUTORS.md
@@ -1,3 +1,4 @@
- [NuoBiT](https://www.nuobit.com):
- - Kilian Niubo \
- - Eric Antones \
+ - Kilian Niubo
+ - Eric Antones
+ - Deniz Gallo
diff --git a/connector_woocommerce/static/description/index.html b/connector_woocommerce/static/description/index.html
index bd0d1d5b8..5fd9a89c1 100644
--- a/connector_woocommerce/static/description/index.html
+++ b/connector_woocommerce/static/description/index.html
@@ -396,16 +396,16 @@
-NuoBiT Solutions
-S.L.
+NuoBiT Solutions SL
diff --git a/connector_woocommerce/views/product_attribute.xml b/connector_woocommerce/views/product_attribute.xml
index 3cd4bc1a4..6aacf0466 100644
--- a/connector_woocommerce/views/product_attribute.xml
+++ b/connector_woocommerce/views/product_attribute.xml
@@ -1,5 +1,6 @@
@@ -35,10 +36,10 @@
- woocommerce.product.attribute.view.tree
+ woocommerce.product.attribute.view.list
woocommerce.product.attribute
-
+
@@ -49,12 +50,12 @@
string="Resynchronize"
icon="fa-refresh fa-lg"
/>
-
+
Product Attribute
woocommerce.product.attribute
- tree,form
+ list,form
diff --git a/connector_woocommerce/views/product_attribute_value.xml b/connector_woocommerce/views/product_attribute_value.xml
index 545971b75..ce9b2d51c 100644
--- a/connector_woocommerce/views/product_attribute_value.xml
+++ b/connector_woocommerce/views/product_attribute_value.xml
@@ -1,5 +1,6 @@
@@ -18,10 +19,10 @@
- woocommerce.product.attribute.value.view.tree
+ woocommerce.product.attribute.value.view.list
woocommerce.product.attribute.value
-
+
@@ -33,7 +34,7 @@
string="Resynchronize"
icon="fa-refresh fa-lg"
/>
-
+
Product Attribute Value
woocommerce.product.attribute.value
- tree,form
+ list,form
diff --git a/connector_woocommerce/views/product_product.xml b/connector_woocommerce/views/product_product.xml
index 6940d8f0b..90c12576b 100644
--- a/connector_woocommerce/views/product_product.xml
+++ b/connector_woocommerce/views/product_product.xml
@@ -1,5 +1,6 @@
Please note that WooCommerce allows only one image per product variant. Additional images will not be exported to WooCommerce and will be ignored.
@@ -48,7 +49,7 @@
class="alert alert-info"
role="alert"
style="margin-bottom:0px;"
- attrs="{'invisible': [('variant_is_published', '=', False)]}"
+ invisible="variant_is_published == False"
>
Please note that WooCommerce allows only one image per product variant. Additional images will not be exported to WooCommerce and will be ignored.
@@ -87,10 +88,10 @@
- woocommerce.product.product.view.tree
+ woocommerce.product.product.view.list
woocommerce.product.product
-
+
@@ -102,12 +103,12 @@
string="Resynchronize"
icon="fa-refresh fa-lg"
/>
-
+
Products
woocommerce.product.product
- tree,form
+ list,form
diff --git a/connector_woocommerce/views/product_public_category.xml b/connector_woocommerce/views/product_public_category.xml
index d5e2028e4..286974b51 100644
--- a/connector_woocommerce/views/product_public_category.xml
+++ b/connector_woocommerce/views/product_public_category.xml
@@ -1,5 +1,6 @@
- woocommerce.product.public.category.view.tree
+ woocommerce.product.public.category.view.list
woocommerce.product.public.category
-
+
@@ -51,7 +52,7 @@
string="Resynchronize"
icon="fa-refresh fa-lg"
/>
-
+
Product Public Category
woocommerce.product.public.category
- tree,form
+ list,form
diff --git a/connector_woocommerce/views/product_template.xml b/connector_woocommerce/views/product_template.xml
index 2db19f35f..39c6de4de 100644
--- a/connector_woocommerce/views/product_template.xml
+++ b/connector_woocommerce/views/product_template.xml
@@ -33,7 +33,7 @@
diff --git a/connector_woocommerce/views/res_partner_views.xml b/connector_woocommerce/views/res_partner_views.xml
index 55c42db20..fba79c279 100644
--- a/connector_woocommerce/views/res_partner_views.xml
+++ b/connector_woocommerce/views/res_partner_views.xml
@@ -1,5 +1,6 @@
@@ -35,10 +36,10 @@
- woocommerce.partner.view.tree
+ woocommerce.partner.view.list
woocommerce.res.partner
-
+
@@ -50,12 +51,12 @@
string="Resynchronize"
icon="fa-refresh fa-lg"
/>
-
+
Partner
woocommerce.res.partner
- tree,form
+ list,form
diff --git a/connector_woocommerce/views/sale_order_view.xml b/connector_woocommerce/views/sale_order_view.xml
index 6acf7a7ec..5739722b9 100644
--- a/connector_woocommerce/views/sale_order_view.xml
+++ b/connector_woocommerce/views/sale_order_view.xml
@@ -1,5 +1,6 @@
@@ -17,7 +18,7 @@
name="web_ribbon"
title="WooCommerce"
bg_color="bg-info"
- attrs="{'invisible': [('is_woocommerce', '!=', True)]}"
+ invisible="is_woocommerce != True"
/>
@@ -45,16 +46,16 @@
- woocommerce.sale.order.view.tree
+ woocommerce.sale.order.view.list
woocommerce.sale.order
-
+
-
+
@@ -75,6 +76,6 @@
Services
woocommerce.sale.order
- tree,form
+ list,form
diff --git a/connector_woocommerce/views/woocommerce_backend_view.xml b/connector_woocommerce/views/woocommerce_backend_view.xml
index 5901a268a..d09bfd860 100644
--- a/connector_woocommerce/views/woocommerce_backend_view.xml
+++ b/connector_woocommerce/views/woocommerce_backend_view.xml
@@ -1,5 +1,6 @@
@@ -13,13 +14,13 @@
type="object"
class="oe_highlight"
string="Check Connection"
- attrs="{'invisible':[('state', 'not in', ['draft'])]}"
+ invisible="state != 'draft'"
/>
@@ -29,7 +30,7 @@
name="web_ribbon"
title="Archived"
bg_color="bg-danger"
- attrs="{'invisible': [('active', '=', True)]}"
+ invisible="active == True"
/>
@@ -37,33 +38,24 @@
-
-
+
+
-
+
@@ -243,27 +235,27 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -306,21 +298,21 @@
- woocommerce.backend.tree
+ woocommerce.backend.list
woocommerce.backend
-
+
-
+
WooCommerce Backends
woocommerce.backend
- tree,form
+ list,form
diff --git a/connector_woocommerce/views/woocommerce_product_template.xml b/connector_woocommerce/views/woocommerce_product_template.xml
index fbf5e7667..5b99e4a36 100644
--- a/connector_woocommerce/views/woocommerce_product_template.xml
+++ b/connector_woocommerce/views/woocommerce_product_template.xml
@@ -1,6 +1,7 @@
@@ -19,10 +20,10 @@
- woocommerce.product.template.view.tree
+ woocommerce.product.template.view.list
woocommerce.product.template
-
+
@@ -33,13 +34,13 @@
string="Resynchronize"
icon="fa-refresh fa-lg"
/>
-
+
Product Template
woocommerce.product.template
- tree,form
+ list,form
From b3fd10c90c53068e0eacc77f97630d8bd85fc11e Mon Sep 17 00:00:00 2001
From: ???
Date: Mon, 30 Mar 2026 16:10:05 +0200
Subject: [PATCH 15/25] [MIG] connector_woocommerce: Migration to 18.0
---
connector_woocommerce/data/ir_cron.xml | 16 ----------------
.../models/product_template/product_template.py | 2 +-
2 files changed, 1 insertion(+), 17 deletions(-)
diff --git a/connector_woocommerce/data/ir_cron.xml b/connector_woocommerce/data/ir_cron.xml
index 281570d81..65b885420 100644
--- a/connector_woocommerce/data/ir_cron.xml
+++ b/connector_woocommerce/data/ir_cron.xml
@@ -14,8 +14,6 @@
1
days
- -1
-
code
model._scheduler_export_product_tmpl()
@@ -29,8 +27,6 @@
1
days
- -1
-
code
model._scheduler_export_products()
@@ -48,8 +44,6 @@
1
days
- -1
-
code
model._scheduler_export_sale_orders()
@@ -67,8 +61,6 @@
1
days
- -1
-
code
model._scheduler_import_sale_orders()
@@ -86,8 +78,6 @@
1
days
- -1
-
code
model._scheduler_export_product_public_category()
@@ -105,8 +95,6 @@
1
days
- -1
-
code
model._scheduler_export_product_attribute()
@@ -124,8 +112,6 @@
1
days
- -1
-
code
model._scheduler_export_product_attribute_value()
@@ -142,8 +128,6 @@
1
days
- -1
-
code
model._scheduler_export_product_attachment()
diff --git a/connector_woocommerce/models/product_template/product_template.py b/connector_woocommerce/models/product_template/product_template.py
index 04364172e..0d3444562 100644
--- a/connector_woocommerce/models/product_template/product_template.py
+++ b/connector_woocommerce/models/product_template/product_template.py
@@ -36,7 +36,7 @@ def _search_has_attributes(self, operator, value):
@api.depends(
"is_published",
"name",
- "lst_price",
+ "list_price",
"active",
"qty_available",
"image_1920",
From 47112e1ddc62598d78298d47bd62a52334076e54 Mon Sep 17 00:00:00 2001
From: ???
Date: Mon, 30 Mar 2026 18:15:39 +0200
Subject: [PATCH 16/25] [MIG] connector_woocommerce: Migration to 18.0
---
connector_woocommerce/__manifest__.py | 1 +
connector_woocommerce/components/binder.py | 3 ++-
connector_woocommerce/components/exporter.py | 5 +++--
connector_woocommerce/components/importer.py | 5 +++--
.../models/product_attribute/exporter.py | 5 +++--
.../models/product_attribute_value/exporter.py | 5 +++--
.../models/product_product/exporter.py | 4 ++--
.../models/product_public_category/exporter.py | 5 +++--
.../models/product_template/exporter.py | 5 +++--
.../models/res_partner/importer.py | 5 +++--
.../models/sale_order/exporter.py | 5 +++--
.../models/sale_order/importer.py | 8 ++++----
connector_woocommerce/views/product_attribute.xml | 10 +++++-----
connector_woocommerce/views/product_product.xml | 13 +++++++------
connector_woocommerce/views/product_template.xml | 14 +++++++-------
connector_woocommerce/views/res_partner_views.xml | 10 +++++-----
connector_woocommerce/views/sale_order_view.xml | 11 ++++++-----
17 files changed, 63 insertions(+), 51 deletions(-)
diff --git a/connector_woocommerce/__manifest__.py b/connector_woocommerce/__manifest__.py
index 7b0fe7c6f..fe68f1cf4 100644
--- a/connector_woocommerce/__manifest__.py
+++ b/connector_woocommerce/__manifest__.py
@@ -16,6 +16,7 @@
],
},
"depends": [
+ "account_payment_mode",
"connector_extension_woocommerce",
"connector_wordpress",
"sale_stock",
diff --git a/connector_woocommerce/components/binder.py b/connector_woocommerce/components/binder.py
index 4d72668d4..79f8886e6 100644
--- a/connector_woocommerce/components/binder.py
+++ b/connector_woocommerce/components/binder.py
@@ -1,10 +1,11 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo.addons.component.core import AbstractComponent
class WooCommerceBinder(AbstractComponent):
_name = "woocommerce.binder"
- _inherit = ["connector.extension.generic.binder", "base.woocommerce.connector"]
+ _inherit = ["connector.extension.binder", "base.woocommerce.connector"]
_default_binding_field = "woocommerce_bind_ids"
diff --git a/connector_woocommerce/components/exporter.py b/connector_woocommerce/components/exporter.py
index 3b9657ff6..5c66dc00b 100644
--- a/connector_woocommerce/components/exporter.py
+++ b/connector_woocommerce/components/exporter.py
@@ -1,5 +1,6 @@
# Copyright NuoBiT Solutions - Eric Antones
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
import logging
@@ -14,7 +15,7 @@ class WooCommerceRecordDirectExporter(AbstractComponent):
_name = "woocommerce.record.direct.exporter"
_inherit = [
- "connector.extension.generic.record.direct.exporter",
+ "connector.extension.record.direct.exporter",
"base.woocommerce.connector",
]
@@ -27,6 +28,6 @@ class WooCommerceBatchExporter(AbstractComponent):
_name = "woocommerce.batch.exporter"
_inherit = [
- "connector.extension.generic.batch.exporter",
+ "connector.extension.batch.exporter",
"base.woocommerce.connector",
]
diff --git a/connector_woocommerce/components/importer.py b/connector_woocommerce/components/importer.py
index 927648bd8..f9dc392e7 100644
--- a/connector_woocommerce/components/importer.py
+++ b/connector_woocommerce/components/importer.py
@@ -1,5 +1,6 @@
# Copyright NuoBiT Solutions - Eric Antones
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
import logging
@@ -13,7 +14,7 @@ class WooCommerceDirectImporter(AbstractComponent):
_name = "woocommerce.record.direct.importer"
_inherit = [
- "connector.extension.generic.record.direct.importer",
+ "connector.extension.record.direct.importer",
"base.woocommerce.connector",
]
@@ -26,6 +27,6 @@ class WooCommerceBatchImporter(AbstractComponent):
_name = "woocommerce.batch.importer"
_inherit = [
- "connector.extension.generic.batch.importer",
+ "connector.extension.batch.importer",
"base.woocommerce.connector",
]
diff --git a/connector_woocommerce/models/product_attribute/exporter.py b/connector_woocommerce/models/product_attribute/exporter.py
index e2fa17686..2d70d73fd 100644
--- a/connector_woocommerce/models/product_attribute/exporter.py
+++ b/connector_woocommerce/models/product_attribute/exporter.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo.addons.component.core import Component
@@ -11,7 +12,7 @@ class WooCommerceProductAttributeBatchDirectExporter(Component):
"""
_name = "woocommerce.product.attribute.batch.direct.exporter"
- _inherit = "connector.extension.generic.batch.direct.exporter"
+ _inherit = "connector.extension.batch.direct.exporter"
_apply_on = "woocommerce.product.attribute"
@@ -23,7 +24,7 @@ class WooCommerceProductAttributeBatchDelayedExporter(Component):
"""
_name = "woocommerce.product.attribute.batch.delayed.exporter"
- _inherit = "connector.extension.generic.batch.delayed.exporter"
+ _inherit = "connector.extension.batch.delayed.exporter"
_apply_on = "woocommerce.product.attribute"
diff --git a/connector_woocommerce/models/product_attribute_value/exporter.py b/connector_woocommerce/models/product_attribute_value/exporter.py
index f91abdf86..f08d83823 100644
--- a/connector_woocommerce/models/product_attribute_value/exporter.py
+++ b/connector_woocommerce/models/product_attribute_value/exporter.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo.addons.component.core import Component
@@ -11,7 +12,7 @@ class WooCommerceProductAttributeValueBatchDirectExporter(Component):
"""
_name = "woocommerce.product.attribute.value.batch.direct.exporter"
- _inherit = "connector.extension.generic.batch.direct.exporter"
+ _inherit = "connector.extension.batch.direct.exporter"
_apply_on = "woocommerce.product.attribute.value"
@@ -23,7 +24,7 @@ class WooCommerceProductAttributeValueBatchDelayedExporter(Component):
"""
_name = "woocommerce.product.attribute.value.batch.delayed.exporter"
- _inherit = "connector.extension.generic.batch.delayed.exporter"
+ _inherit = "connector.extension.batch.delayed.exporter"
_apply_on = "woocommerce.product.attribute.value"
diff --git a/connector_woocommerce/models/product_product/exporter.py b/connector_woocommerce/models/product_product/exporter.py
index 19377c2b8..e3506d9cd 100644
--- a/connector_woocommerce/models/product_product/exporter.py
+++ b/connector_woocommerce/models/product_product/exporter.py
@@ -12,7 +12,7 @@ class WooCommerceProductProductBatchDirectExporter(Component):
"""
_name = "woocommerce.product.product.batch.direct.exporter"
- _inherit = "connector.extension.generic.batch.direct.exporter"
+ _inherit = "connector.extension.batch.direct.exporter"
_apply_on = "woocommerce.product.product"
@@ -24,7 +24,7 @@ class WooCommerceProductProductBatchDelayedExporter(Component):
"""
_name = "woocommerce.product.product.batch.delayed.exporter"
- _inherit = "connector.extension.generic.batch.delayed.exporter"
+ _inherit = "connector.extension.batch.delayed.exporter"
_apply_on = "woocommerce.product.product"
diff --git a/connector_woocommerce/models/product_public_category/exporter.py b/connector_woocommerce/models/product_public_category/exporter.py
index 6888e3904..91a5a53c7 100644
--- a/connector_woocommerce/models/product_public_category/exporter.py
+++ b/connector_woocommerce/models/product_public_category/exporter.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo.addons.component.core import Component
@@ -11,7 +12,7 @@ class WooCommerceProductPublicCategoryBatchDirectExporter(Component):
"""
_name = "woocommerce.product.public.category.batch.direct.exporter"
- _inherit = "connector.extension.generic.batch.direct.exporter"
+ _inherit = "connector.extension.batch.direct.exporter"
_apply_on = "woocommerce.product.public.category"
@@ -23,7 +24,7 @@ class WooCommerceProductPublicCategoryBatchDelayedExporter(Component):
"""
_name = "woocommerce.product.public.category.batch.delayed.exporter"
- _inherit = "connector.extension.generic.batch.delayed.exporter"
+ _inherit = "connector.extension.batch.delayed.exporter"
_apply_on = "woocommerce.product.public.category"
diff --git a/connector_woocommerce/models/product_template/exporter.py b/connector_woocommerce/models/product_template/exporter.py
index 450c7da7c..26678241d 100644
--- a/connector_woocommerce/models/product_template/exporter.py
+++ b/connector_woocommerce/models/product_template/exporter.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo.addons.component.core import Component
@@ -11,7 +12,7 @@ class WooCommerceProductTemplateBatchDirectExporter(Component):
"""
_name = "woocommerce.product.template.batch.direct.exporter"
- _inherit = "connector.extension.generic.batch.direct.exporter"
+ _inherit = "connector.extension.batch.direct.exporter"
_apply_on = "woocommerce.product.template"
@@ -23,7 +24,7 @@ class WooCommerceProductTemplateBatchDelayedExporter(Component):
"""
_name = "woocommerce.product.template.batch.delayed.exporter"
- _inherit = "connector.extension.generic.batch.delayed.exporter"
+ _inherit = "connector.extension.batch.delayed.exporter"
_apply_on = "woocommerce.product.template"
diff --git a/connector_woocommerce/models/res_partner/importer.py b/connector_woocommerce/models/res_partner/importer.py
index adcf93991..9e6eeb32b 100644
--- a/connector_woocommerce/models/res_partner/importer.py
+++ b/connector_woocommerce/models/res_partner/importer.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo.addons.component.core import Component
@@ -11,7 +12,7 @@ class WooCommerceResPartnerBatchDirectImporter(Component):
"""
_name = "woocommerce.res.partner.batch.direct.importer"
- _inherit = "connector.extension.generic.batch.direct.importer"
+ _inherit = "connector.extension.batch.direct.importer"
_apply_on = "woocommerce.res.partner"
@@ -23,7 +24,7 @@ class WooCommerceResPartnerBatchDelayedImporter(Component):
"""
_name = "woocommerce.res.partner.batch.delayed.importer"
- _inherit = "connector.extension.generic.batch.delayed.importer"
+ _inherit = "connector.extension.batch.delayed.importer"
_apply_on = "woocommerce.res.partner"
diff --git a/connector_woocommerce/models/sale_order/exporter.py b/connector_woocommerce/models/sale_order/exporter.py
index 620ffd8b0..e939df435 100644
--- a/connector_woocommerce/models/sale_order/exporter.py
+++ b/connector_woocommerce/models/sale_order/exporter.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo.addons.component.core import Component
@@ -11,7 +12,7 @@ class WooCommerceSaleOrdertBatchDirectExporter(Component):
"""
_name = "woocommerce.sale.order.batch.direct.exporter"
- _inherit = "connector.extension.generic.batch.direct.exporter"
+ _inherit = "connector.extension.batch.direct.exporter"
_apply_on = "woocommerce.sale.order"
@@ -23,7 +24,7 @@ class WooCommerceSaleOrderBatchDelayedExporter(Component):
"""
_name = "woocommerce.sale.order.batch.delayed.exporter"
- _inherit = "connector.extension.generic.batch.delayed.exporter"
+ _inherit = "connector.extension.batch.delayed.exporter"
_apply_on = "woocommerce.sale.order"
diff --git a/connector_woocommerce/models/sale_order/importer.py b/connector_woocommerce/models/sale_order/importer.py
index 02fc3f907..57a9e2f62 100644
--- a/connector_woocommerce/models/sale_order/importer.py
+++ b/connector_woocommerce/models/sale_order/importer.py
@@ -15,7 +15,7 @@ class WooCommerceSaleOrderBatchDirectImporter(Component):
"""
_name = "woocommerce.sale.order.batch.direct.importer"
- _inherit = "connector.extension.generic.batch.direct.importer"
+ _inherit = "connector.extension.batch.direct.importer"
_apply_on = "woocommerce.sale.order"
@@ -27,7 +27,7 @@ class WooCommerceSaleOrderBatchDelayedImporter(Component):
"""
_name = "woocommerce.sale.order.batch.delayed.importer"
- _inherit = "connector.extension.generic.batch.delayed.importer"
+ _inherit = "connector.extension.batch.delayed.importer"
_apply_on = "woocommerce.sale.order"
@@ -173,7 +173,7 @@ class WooCommerceSaleOrderChunkDirectImporter(Component):
"""
_name = "woocommerce.sale.order.chunk.direct.importer"
- _inherit = "connector.extension.generic.chunk.direct.importer"
+ _inherit = "connector.extension.chunk.direct.importer"
_apply_on = "woocommerce.sale.order"
@@ -185,6 +185,6 @@ class WooCommerceSaleOrderChunkDelayedImporter(Component):
"""
_name = "woocommerce.sale.order.chunk.delayed.importer"
- _inherit = "connector.extension.generic.chunk.delayed.importer"
+ _inherit = "connector.extension.chunk.delayed.importer"
_apply_on = "woocommerce.sale.order"
diff --git a/connector_woocommerce/views/product_attribute.xml b/connector_woocommerce/views/product_attribute.xml
index 6aacf0466..4c635ecd8 100644
--- a/connector_woocommerce/views/product_attribute.xml
+++ b/connector_woocommerce/views/product_attribute.xml
@@ -7,13 +7,13 @@
product.attribute.connector.form
product.attribute
-
-
+
diff --git a/connector_woocommerce/views/product_product.xml b/connector_woocommerce/views/product_product.xml
index 90c12576b..ec184ed3e 100644
--- a/connector_woocommerce/views/product_product.xml
+++ b/connector_woocommerce/views/product_product.xml
@@ -38,10 +38,6 @@
product.product.connector.form
product.product
-
@@ -50,19 +46,24 @@
role="alert"
style="margin-bottom:0px;"
invisible="variant_is_published == False"
+ groups="connector.group_connector_manager"
>
Please note that WooCommerce allows only one image per product variant. Additional images will not be exported to WooCommerce and will be ignored.
-
+
1
diff --git a/connector_woocommerce/views/product_template.xml b/connector_woocommerce/views/product_template.xml
index 39c6de4de..c9151b71c 100644
--- a/connector_woocommerce/views/product_template.xml
+++ b/connector_woocommerce/views/product_template.xml
@@ -7,13 +7,13 @@
product.template.connector.form
product.template
-
-
+
@@ -30,13 +30,13 @@
product.template
-
+
-
+
diff --git a/connector_woocommerce/views/res_partner_views.xml b/connector_woocommerce/views/res_partner_views.xml
index fba79c279..b8cc5400e 100644
--- a/connector_woocommerce/views/res_partner_views.xml
+++ b/connector_woocommerce/views/res_partner_views.xml
@@ -7,13 +7,13 @@
connector.partner.form
res.partner
-
-
+
diff --git a/connector_woocommerce/views/sale_order_view.xml b/connector_woocommerce/views/sale_order_view.xml
index 5739722b9..0963d8c9d 100644
--- a/connector_woocommerce/views/sale_order_view.xml
+++ b/connector_woocommerce/views/sale_order_view.xml
@@ -7,10 +7,6 @@
connector.sale.order.form
sale.order
-
@@ -19,10 +15,15 @@
title="WooCommerce"
bg_color="bg-info"
invisible="is_woocommerce != True"
+ groups="connector.group_connector_manager"
/>
-
+
From b780af45c714a6f188b6edab0780ca730c31b99e Mon Sep 17 00:00:00 2001
From: ???
Date: Wed, 1 Apr 2026 15:39:23 +0200
Subject: [PATCH 17/25] [MIG] connector_woocommerce: Migration to 18.0
---
connector_woocommerce/components/binder.py | 1 +
.../models/product_attribute_value/adapter.py | 2 +-
.../models/product_product/export_mapper.py | 2 +-
.../models/product_template/export_mapper.py | 6 +++---
4 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/connector_woocommerce/components/binder.py b/connector_woocommerce/components/binder.py
index 79f8886e6..84b453ed9 100644
--- a/connector_woocommerce/components/binder.py
+++ b/connector_woocommerce/components/binder.py
@@ -1,6 +1,7 @@
# Copyright NuoBiT Solutions - Kilian Niubo
# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
+
from odoo.addons.component.core import AbstractComponent
diff --git a/connector_woocommerce/models/product_attribute_value/adapter.py b/connector_woocommerce/models/product_attribute_value/adapter.py
index 8575353be..b66a73182 100644
--- a/connector_woocommerce/models/product_attribute_value/adapter.py
+++ b/connector_woocommerce/models/product_attribute_value/adapter.py
@@ -33,7 +33,7 @@ def search_read(self, domain=None):
else:
if "parent_id" not in domain_dict:
attribute_adapter = self.component(
- usage="backend.adapter", model_name="woocommerce.product.attribute"
+ usage="adapter", model_name="woocommerce.product.attribute"
)
attributes = attribute_adapter.search_read([])
if "parent_name" in domain_dict:
diff --git a/connector_woocommerce/models/product_product/export_mapper.py b/connector_woocommerce/models/product_product/export_mapper.py
index 8285d2737..a2b6f027b 100644
--- a/connector_woocommerce/models/product_product/export_mapper.py
+++ b/connector_woocommerce/models/product_product/export_mapper.py
@@ -29,7 +29,7 @@ def sale_price(self, record):
pricelist = self.backend_record.discount_pricelist_id
if pricelist:
return {
- "sale_price": pricelist.price_get(record.id, 1)[pricelist.id],
+ "sale_price": pricelist._get_product_price(record, 1),
}
return {"sale_price": None}
diff --git a/connector_woocommerce/models/product_template/export_mapper.py b/connector_woocommerce/models/product_template/export_mapper.py
index f0c4abd10..5bcd1dd44 100644
--- a/connector_woocommerce/models/product_template/export_mapper.py
+++ b/connector_woocommerce/models/product_template/export_mapper.py
@@ -119,9 +119,9 @@ def sale_price(self, record):
pricelist = self.backend_record.discount_pricelist_id
if pricelist:
return {
- "sale_price": pricelist.price_get(record.product_variant_id.id, 1)[
- pricelist.id
- ],
+ "sale_price": pricelist._get_product_price(
+ record.product_variant_id, 1
+ ),
}
return {"sale_price": None}
From a33d358a00f05e3e612ca93c1455bb91e094981a Mon Sep 17 00:00:00 2001
From: ???
Date: Wed, 1 Apr 2026 17:22:07 +0200
Subject: [PATCH 18/25] [MIG] connector_woocommerce: Migration to 18.0
---
.../models/product_product/adapter.py | 10 ++++++++--
connector_woocommerce/models/sale_order/importer.py | 2 +-
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/connector_woocommerce/models/product_product/adapter.py b/connector_woocommerce/models/product_product/adapter.py
index 3a3d8684d..b186b8167 100644
--- a/connector_woocommerce/models/product_product/adapter.py
+++ b/connector_woocommerce/models/product_product/adapter.py
@@ -42,9 +42,11 @@ def create(self, data): # pylint: disable=W8106
def write(self, external_id, data): # pylint: disable=W8106
self._prepare_data(data)
+ external_id_values = self.binder_for().id2dict(external_id, in_field=False)
return self._exec(
"put",
- f"products/{tuple(external_id)}/variations/{tuple(external_id)}",
+ f"products/{external_id_values['parent_id']}"
+ f"/variations/{external_id_values['id']}",
data=data,
)
@@ -55,7 +57,11 @@ def search_read(self, domain=None):
domain_dict = self._domain_to_normalized_dict(domain)
external_id = binder.dict2id(domain_dict, in_field=False)
if external_id:
- url = f"products/{tuple(external_id)}/variations/{tuple(external_id)}"
+ external_id_values = binder.id2dict(external_id, in_field=False)
+ url = (
+ f"products/{external_id_values['parent_id']}"
+ f"/variations/{external_id_values['id']}"
+ )
res = self._exec("get", url, domain=common_domain)
else:
# if "id" in domain_dict and "parent_id" in domain_dict:
diff --git a/connector_woocommerce/models/sale_order/importer.py b/connector_woocommerce/models/sale_order/importer.py
index 57a9e2f62..8a5ef49ed 100644
--- a/connector_woocommerce/models/sale_order/importer.py
+++ b/connector_woocommerce/models/sale_order/importer.py
@@ -162,7 +162,7 @@ def _must_skip(self, binding):
if binding:
return _(
"The Order {} is already imported " "-> Update not allowed"
- ).format(binding.woocommerce_id)
+ ).format(binding.woocommerce_idsaleorder)
return res
From 4d2724c3b4d82b2add715518198a6bd24a5d9976 Mon Sep 17 00:00:00 2001
From: ???
Date: Thu, 9 Apr 2026 10:15:18 +0200
Subject: [PATCH 19/25] [MIG] connector_woocommerce: Migration to 18.0
---
connector_woocommerce/models/product/export_mapper.py | 4 ++--
.../models/product_template/product_template.py | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/connector_woocommerce/models/product/export_mapper.py b/connector_woocommerce/models/product/export_mapper.py
index 34d8e0f2d..b04afc710 100644
--- a/connector_woocommerce/models/product/export_mapper.py
+++ b/connector_woocommerce/models/product/export_mapper.py
@@ -25,10 +25,10 @@ def _prepare_document_description(self, documents):
documents = self._get_lang_doc(documents)
for document in documents:
external_id = binder.get_external_dict_ids(
- document.attachment_id, check_external_id=False
+ document.ir_attachment_id, check_external_id=False
)
if external_id:
- binding = binder.wrap_record(document.attachment_id)
+ binding = binder.wrap_record(document.ir_attachment_id)
document_description.append(
f"{document.name}
"
diff --git a/connector_woocommerce/models/product_template/product_template.py b/connector_woocommerce/models/product_template/product_template.py
index 0d3444562..eda832db0 100644
--- a/connector_woocommerce/models/product_template/product_template.py
+++ b/connector_woocommerce/models/product_template/product_template.py
@@ -211,7 +211,7 @@ def _compute_product_document_attachment_ids(self):
0,
0,
{
- "attachment_id": doc.attachment_id.id,
+ "attachment_id": doc.ir_attachment_id.id,
"sequence": doc.sequence,
},
)
From 549e72136de02462591b6805509a539a9a560637 Mon Sep 17 00:00:00 2001
From: ???
Date: Thu, 9 Apr 2026 11:10:33 +0200
Subject: [PATCH 20/25] [MIG] connector_woocommerce: Migration to 18.0
---
.../models/product_attribute_value/adapter.py | 11 ++++++++---
.../models/product_product/product.py | 3 ++-
connector_woocommerce/models/sale_order/sale_order.py | 3 ++-
3 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/connector_woocommerce/models/product_attribute_value/adapter.py b/connector_woocommerce/models/product_attribute_value/adapter.py
index b66a73182..d133e7084 100644
--- a/connector_woocommerce/models/product_attribute_value/adapter.py
+++ b/connector_woocommerce/models/product_attribute_value/adapter.py
@@ -14,8 +14,11 @@ class WooCommerceProductAttributeValueAdapter(Component):
_apply_on = "woocommerce.product.attribute.value"
def read(self, external_id): # pylint: disable=W8106
- external_id = self.binder_for().id2dict(external_id, in_field=False)
- url = f"products/attributes/{tuple(external_id)}/terms/{tuple(external_id)}"
+ external_id_values = self.binder_for().id2dict(external_id, in_field=False)
+ url = (
+ f"products/attributes/{external_id_values['parent_id']}"
+ f"/terms/{external_id_values['id']}"
+ )
values = self._exec("get", url)
return values
@@ -78,9 +81,11 @@ def create(self, data): # pylint: disable=W8106
return res
def write(self, external_id, data): # pylint: disable=W8106
+ external_id_values = self.binder_for().id2dict(external_id, in_field=False)
return self._exec(
"put",
- f"products/attributes/{tuple(external_id)}/terms/{tuple(external_id)}",
+ f"products/attributes/{external_id_values['parent_id']}"
+ f"/terms/{external_id_values['id']}",
data=data,
)
diff --git a/connector_woocommerce/models/product_product/product.py b/connector_woocommerce/models/product_product/product.py
index 431d7b61e..22718d3c1 100644
--- a/connector_woocommerce/models/product_product/product.py
+++ b/connector_woocommerce/models/product_product/product.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import api, fields, models
@@ -94,7 +95,7 @@ def _compute_product_document_attachment_ids(self):
0,
0,
{
- "attachment_id": doc.attachment_id.id,
+ "attachment_id": doc.ir_attachment_id.id,
"sequence": doc.sequence,
},
)
diff --git a/connector_woocommerce/models/sale_order/sale_order.py b/connector_woocommerce/models/sale_order/sale_order.py
index 8facbce8f..a93274b8f 100644
--- a/connector_woocommerce/models/sale_order/sale_order.py
+++ b/connector_woocommerce/models/sale_order/sale_order.py
@@ -1,4 +1,5 @@
# Copyright NuoBiT Solutions - Kilian Niubo
+# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
from odoo import api, fields, models
@@ -59,7 +60,7 @@ def _get_woocommerce_order_state(self, picking_states):
def _compute_woocommerce_order_state(self):
for rec in self:
if rec.is_woocommerce:
- picking_states = self.picking_ids.mapped(
+ picking_states = rec.picking_ids.mapped(
"woocommerce_stock_picking_state"
)
woocommerce_order_state = rec._get_woocommerce_order_state(
From c3c41d33422ac227c55ef2a3e89e3efd07bdce57 Mon Sep 17 00:00:00 2001
From: ???
Date: Wed, 15 Apr 2026 12:04:36 +0200
Subject: [PATCH 21/25] [MIG] connector_woocommerce: Migration to 18.0
---
connector_woocommerce/__manifest__.py | 2 +-
connector_woocommerce/models/sale_order/adapter.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/connector_woocommerce/__manifest__.py b/connector_woocommerce/__manifest__.py
index fe68f1cf4..3fdc559ab 100644
--- a/connector_woocommerce/__manifest__.py
+++ b/connector_woocommerce/__manifest__.py
@@ -16,7 +16,7 @@
],
},
"depends": [
- "account_payment_mode",
+ "account_payment_sale",
"connector_extension_woocommerce",
"connector_wordpress",
"sale_stock",
diff --git a/connector_woocommerce/models/sale_order/adapter.py b/connector_woocommerce/models/sale_order/adapter.py
index 3ec75dec2..f38ecd4af 100644
--- a/connector_woocommerce/models/sale_order/adapter.py
+++ b/connector_woocommerce/models/sale_order/adapter.py
@@ -121,7 +121,7 @@ def search_read(self, domain=None, offset=0, limit=None):
self._convert_format_domain(domain)
res = self._exec("get", "orders", domain=domain, offset=offset, limit=limit)
self._reorg_order_data(res)
- return res, len(res)
+ return res
def write(self, external_id, data): # pylint: disable=W8106
self._prepare_data(data)
From cad20dad9ae12f35101c7f2354dd1bb4beab55ea Mon Sep 17 00:00:00 2001
From: ???
Date: Tue, 7 Apr 2026 18:01:48 +0200
Subject: [PATCH 22/25] [DO NOT MERGE] test-requirements.txt
---
test-requirements.txt | 8 ++++++++
1 file changed, 8 insertions(+)
create mode 100644 test-requirements.txt
diff --git a/test-requirements.txt b/test-requirements.txt
new file mode 100644
index 000000000..18966babb
--- /dev/null
+++ b/test-requirements.txt
@@ -0,0 +1,8 @@
+odoo-addon-website_sale_stock_variant@git+https://github.com/nuobit/odoo-addons.git@refs/pull/825/head#subdirectory=website_sale_stock_variant
+odoo-addon-website_sale_extra_fields@git+https://github.com/nuobit/odoo-addons.git@refs/pull/826/head#subdirectory=website_sale_extra_fields
+odoo-addon-connector_wordpress@git+https://github.com/nuobit/odoo-addons.git@refs/pull/876/head#subdirectory=connector_wordpress
+odoo-addon-connector_extension_woocommerce@git+https://github.com/nuobit/odoo-addons.git@refs/pull/875/head#subdirectory=connector_extension_woocommerce
+odoo-addon-tools_mimetypes_extension@git+https://github.com/nuobit/odoo-addons.git@refs/pull/878/head#subdirectory=tools_mimetypes_extension
+odoo-addon-website_sale_variant@git+https://github.com/nuobit/odoo-addons.git@refs/pull/824/head#subdirectory=website_sale_variant
+odoo-addon-website_sale_product_document@git+https://github.com/nuobit/odoo-addons.git@refs/pull/827/head#subdirectory=website_sale_product_document
+odoo-addon-connector_extension_wordpress@git+https://github.com/nuobit/odoo-addons.git@refs/pull/877/head#subdirectory=connector_extension_wordpress
From f1f5f2257a36e7e215231091d4cc3ca6a4936b60 Mon Sep 17 00:00:00 2001
From: ???
Date: Wed, 1 Apr 2026 10:06:02 +0200
Subject: [PATCH 23/25] [FIX] connector_extension: fix conflict resolution
during migration to 18.0
---
connector_extension/components/binder.py | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/connector_extension/components/binder.py b/connector_extension/components/binder.py
index 72f41c9a5..b7426254c 100644
--- a/connector_extension/components/binder.py
+++ b/connector_extension/components/binder.py
@@ -280,7 +280,6 @@ def bind_import(self, external_data, values, sync_date, for_create=False):
**self.id2dict(external_id, in_field=True),
}
)
- self.env.cr.commit() # pylint: disable=E8102
def _prepare_binding_export_values(self, relation, external_data):
external_id = self.dict2id(external_data, in_field=False)
@@ -478,8 +477,6 @@ def to_binding_from_internal_key(self, relation):
:param relation: odoo object, not a binding and without binding
:return: binding
"""
- export_mapper = self.component(usage="export.mapper")
- mapper_external_data = export_mapper.map_record(relation)
ext_alt_id = getattr(self, self._external_alt_field, None)
if not ext_alt_id:
id_values = {}
@@ -487,6 +484,8 @@ def to_binding_from_internal_key(self, relation):
if isinstance(ext_alt_id, str):
ext_alt_id = [ext_alt_id]
+ export_mapper = self.component(usage="export.mapper")
+ mapper_external_data = export_mapper.map_record(relation)
id_fields = mapper_external_data._mapper.get_target_fields(
mapper_external_data, fields=ext_alt_id
)
@@ -537,7 +536,7 @@ def to_binding_from_internal_key(self, relation):
import_mapper_exists = False
if not import_mapper_exists:
binding = self.bind_export(record, relation)
- binding[self._sync_date_field] = fields.Datetime.now()
+ # binding[self._sync_date_field] = fields.Datetime.now()
if not binding:
raise InvalidDataError(
f"The binding with external id {external_id} "
@@ -563,9 +562,9 @@ def get_external_dict_ids(self, relation, check_external_id=True):
external_id = self.to_external(relation, wrap=False)
if check_external_id:
assert external_id, (
- f"Unexpected error on {relation._name}:"
- "The backend id cannot be obtained."
- "At this stage, the backend record should have "
+ f"Error on {relation._name}:"
+ "The external id cannot be obtained."
+ "At this stage, the external record should have "
"been already linked via "
"._export_dependencies. "
)
From c6e50133c7ef417ca6bf893f903e56e4aff7de9f Mon Sep 17 00:00:00 2001
From: ???
Date: Wed, 1 Apr 2026 11:16:28 +0200
Subject: [PATCH 24/25] [FIX] connector_extension: remove cr.commit() from
bind_export
In Odoo 18, queue_job forbids commits during job execution via
_prevent_commit to avoid releasing the job lock prematurely.
The cr.commit() in bind_export was an optimization for concurrent
binding creation that is no longer compatible. The _retry_unique_violation
context manager still handles race conditions via PostgreSQL's UNIQUE
constraint without needing an explicit commit.
---
connector_extension/components/binder.py | 8 --------
1 file changed, 8 deletions(-)
diff --git a/connector_extension/components/binder.py b/connector_extension/components/binder.py
index b7426254c..027cb00a0 100644
--- a/connector_extension/components/binder.py
+++ b/connector_extension/components/binder.py
@@ -20,7 +20,6 @@
import psycopg2
-import odoo
from odoo import _, fields, models
from odoo.exceptions import ValidationError
from odoo.osv import expression
@@ -312,13 +311,6 @@ def bind_export(self, external_data, relation):
with self._retry_unique_violation():
values = self._prepare_binding_export_values(relation, external_data)
binding = self.model.with_context(connector_no_export=True).create(values)
- # Eager commit to avoid having 2 jobs
- # exporting at the same time. The constraint
- # will pop if an other job already created
- # the same binding. It will be caught and
- # raise a RetryableJobError.
- if not odoo.tools.config["test_enable"]:
- self.env.cr.commit() # pylint: disable=E8102
return binding
def _additional_external_binding_fields(self, external_data, relation):
From 421dd88476a678b6397c1c0d6cb02b40df7a24b2 Mon Sep 17 00:00:00 2001
From: ???
Date: Tue, 7 Apr 2026 17:32:49 +0200
Subject: [PATCH 25/25] [IMP] connector_extension: change strict parameter to
False in dict zip function
---
connector_extension/components/binder.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/connector_extension/components/binder.py b/connector_extension/components/binder.py
index 027cb00a0..f3a04efb6 100644
--- a/connector_extension/components/binder.py
+++ b/connector_extension/components/binder.py
@@ -96,7 +96,7 @@ def id2dict(self, _id, in_field=True, alt_field=False):
if not isinstance(_id, (tuple | list)):
_id = [_id]
fields = self.get_id_fields(in_field=in_field, alt_field=alt_field)
- return dict(zip(fields, _id, strict=True))
+ return dict(zip(fields, _id, strict=False))
else:
return None