diff --git a/connector_woocommerce_apg_nif/README.rst b/connector_woocommerce_apg_nif/README.rst new file mode 100644 index 000000000..adbcc000e --- /dev/null +++ b/connector_woocommerce_apg_nif/README.rst @@ -0,0 +1,30 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +======================= +WooCommerce Connector +======================= + +* This module works with plugin APG NIF/CIF/NIE Field for WooCommerce. +* https://artprojectgroup.es/plugins-para-woocommerce/wc-apg-nifcifnie-field + +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 smashing it by providing a detailed and welcomed feedback. + +Credits +======= + +Contributors +------------ + +* Kilian Niubo + + + + diff --git a/connector_woocommerce_apg_nif/__init__.py b/connector_woocommerce_apg_nif/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/connector_woocommerce_apg_nif/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/connector_woocommerce_apg_nif/__manifest__.py b/connector_woocommerce_apg_nif/__manifest__.py new file mode 100644 index 000000000..9960a69ed --- /dev/null +++ b/connector_woocommerce_apg_nif/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright NuoBiT Solutions - Kilian Niubo +# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +{ + "name": "Connector WooCommerce APG NIF", + "version": "18.0.1.0.0", + "author": "NuoBiT Solutions SL", + "license": "AGPL-3", + "category": "Connector", + "website": "https://github.com/NuoBiT/odoo-addons", + "external_dependencies": { + "python": [ + "woocommerce", + ], + }, + "depends": [ + "connector_woocommerce", + ], +} diff --git a/connector_woocommerce_apg_nif/models/__init__.py b/connector_woocommerce_apg_nif/models/__init__.py new file mode 100644 index 000000000..17c6cc85d --- /dev/null +++ b/connector_woocommerce_apg_nif/models/__init__.py @@ -0,0 +1,2 @@ +from . import res_partner +from . import sale_order diff --git a/connector_woocommerce_apg_nif/models/res_partner/__init__.py b/connector_woocommerce_apg_nif/models/res_partner/__init__.py new file mode 100644 index 000000000..f2dad19d8 --- /dev/null +++ b/connector_woocommerce_apg_nif/models/res_partner/__init__.py @@ -0,0 +1,2 @@ +from . import import_mapper +from . import res_partner diff --git a/connector_woocommerce_apg_nif/models/res_partner/import_mapper.py b/connector_woocommerce_apg_nif/models/res_partner/import_mapper.py new file mode 100644 index 000000000..2358bf968 --- /dev/null +++ b/connector_woocommerce_apg_nif/models/res_partner/import_mapper.py @@ -0,0 +1,12 @@ +# Copyright NuoBiT Solutions - Kilian Niubo +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) +from odoo.addons.component.core import Component +from odoo.addons.connector.components.mapper import mapping + + +class WooCommerceResPartnerImportMapper(Component): + _inherit = "woocommerce.res.partner.import.mapper" + + @mapping + def vat(self, record): + return {"vat": record.get("nif")} diff --git a/connector_woocommerce_apg_nif/models/res_partner/res_partner.py b/connector_woocommerce_apg_nif/models/res_partner/res_partner.py new file mode 100644 index 000000000..fd344c957 --- /dev/null +++ b/connector_woocommerce_apg_nif/models/res_partner/res_partner.py @@ -0,0 +1,23 @@ +# Copyright NuoBiT Solutions - Kilian Niubo +# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo import api, models + + +class Partner(models.Model): + _inherit = "res.partner" + + def _get_hash_fields(self): + hash_fields = super()._get_hash_fields() + return hash_fields + ["vat"] + + @api.depends("vat") + def _compute_address_hash(self): + return super()._compute_address_hash() + + def _set_values_hash(self): + for rec in self: + values = super()._set_values_hash() + values.append(rec.vat or None) + return values diff --git a/connector_woocommerce_apg_nif/models/sale_order/__init__.py b/connector_woocommerce_apg_nif/models/sale_order/__init__.py new file mode 100644 index 000000000..c501c2719 --- /dev/null +++ b/connector_woocommerce_apg_nif/models/sale_order/__init__.py @@ -0,0 +1,2 @@ +from . import adapter +from . import importer diff --git a/connector_woocommerce_apg_nif/models/sale_order/adapter.py b/connector_woocommerce_apg_nif/models/sale_order/adapter.py new file mode 100644 index 000000000..113a52a25 --- /dev/null +++ b/connector_woocommerce_apg_nif/models/sale_order/adapter.py @@ -0,0 +1,29 @@ +# Copyright NuoBiT Solutions - Kilian Niubo +# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo.addons.component.core import Component + + +class WooCommerceSaleOrderAdapter(Component): + _inherit = "woocommerce.sale.order.adapter" + + _apply_on = "woocommerce.sale.order" + + def _get_hash_fields(self): + hash_fields = super()._get_hash_fields() + return hash_fields + ["nif"] + + def _get_billing(self, value, hash_fields): + if value.get("billing"): + for item in value["meta_data"]: + if item["key"] == "_billing_nif": + value["billing"]["nif"] = item["value"] + return super()._get_billing(value, hash_fields) + + def _get_shipping(self, value, hash_fields): + if value.get("shipping"): + for item in value["meta_data"]: + if item["key"] == "_shipping_nif": + value["shipping"]["nif"] = item["value"] + return super()._get_shipping(value, hash_fields) diff --git a/connector_woocommerce_apg_nif/models/sale_order/importer.py b/connector_woocommerce_apg_nif/models/sale_order/importer.py new file mode 100644 index 000000000..dc564df13 --- /dev/null +++ b/connector_woocommerce_apg_nif/models/sale_order/importer.py @@ -0,0 +1,29 @@ +# Copyright NuoBiT Solutions - Frank Cespedes +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) + +from odoo.osv import expression + +from odoo.addons.component.core import Component + + +class WooCommerceBaseSaleOrderImporter(Component): + _inherit = "woocommerce.sale.order.record.direct.importer" + + def _get_partner_parent_domain(self, dir_type, value): + domain = super()._get_partner_parent_domain(dir_type, value) + if value[dir_type].get("nif"): + domain = [d for d in domain if d[0] != "name"] + domain = expression.AND([domain, [("vat", "=", value[dir_type]["nif"])]]) + else: + if ( + dir_type == "shipping" + and value["shipping"]["name"] == value["billing"]["name"] + ): + domain.append(("id", "=", value["billing"]["parent"])) + return domain + + def _additional_partner_parent_fields(self, value, dir_type): + return { + **super()._additional_partner_parent_fields(value, dir_type), + "vat": value[dir_type].get("nif"), + } diff --git a/connector_woocommerce_apg_nif/pyproject.toml b/connector_woocommerce_apg_nif/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/connector_woocommerce_apg_nif/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/connector_woocommerce_apg_nif/readme/CONTRIBUTORS.md b/connector_woocommerce_apg_nif/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..5d535bfca --- /dev/null +++ b/connector_woocommerce_apg_nif/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +- [NuoBiT](https://www.nuobit.com): + - Kilian Niubo + - Deniz Gallo diff --git a/connector_woocommerce_apg_nif/static/description/icon.png b/connector_woocommerce_apg_nif/static/description/icon.png new file mode 100644 index 000000000..1cd641e79 Binary files /dev/null and b/connector_woocommerce_apg_nif/static/description/icon.png differ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..7b4c1eb2f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +# generated from manifests external_dependencies +woocommerce diff --git a/setup/connector_woocommerce_apg_nif/odoo/addons/connector_woocommerce_apg_nif b/setup/connector_woocommerce_apg_nif/odoo/addons/connector_woocommerce_apg_nif new file mode 120000 index 000000000..43e6fc641 --- /dev/null +++ b/setup/connector_woocommerce_apg_nif/odoo/addons/connector_woocommerce_apg_nif @@ -0,0 +1 @@ +../../../../connector_woocommerce_apg_nif \ No newline at end of file diff --git a/setup/connector_woocommerce_apg_nif/setup.py b/setup/connector_woocommerce_apg_nif/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/connector_woocommerce_apg_nif/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 000000000..f6e0c2e2c --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,9 @@ +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 +odoo-addon-connector_woocommerce@git+https://github.com/nuobit/odoo-addons.git@refs/pull/874/head#subdirectory=connector_woocommerce