diff --git a/fusion-woo-odoo/fusion_woocommerce/controllers/product_search.py b/fusion-woo-odoo/fusion_woocommerce/controllers/product_search.py index 9df081c7..89d263e1 100644 --- a/fusion-woo-odoo/fusion_woocommerce/controllers/product_search.py +++ b/fusion-woo-odoo/fusion_woocommerce/controllers/product_search.py @@ -153,6 +153,7 @@ class WooProductSearchController(http.Controller): 'woo_product_name': m.woo_product_name or '', 'woo_sku': m.woo_sku or '', 'woo_product_type': m.woo_product_type or '', + 'woo_permalink': m.woo_permalink or '', 'odoo_product_id': m.product_id.id if m.product_id else False, 'odoo_product_name': m.product_id.name if m.product_id else '', 'odoo_default_code': m.product_id.default_code or '' if m.product_id else '', diff --git a/fusion-woo-odoo/fusion_woocommerce/models/woo_instance.py b/fusion-woo-odoo/fusion_woocommerce/models/woo_instance.py index fbdcc0e6..cf4129ff 100644 --- a/fusion-woo-odoo/fusion_woocommerce/models/woo_instance.py +++ b/fusion-woo-odoo/fusion_woocommerce/models/woo_instance.py @@ -202,6 +202,8 @@ class WooInstance(models.Model): except (ValueError, TypeError): pass + wc_permalink = wc_prod.get('permalink', '') + ProductMap.create({ 'instance_id': self.id, 'product_id': odoo_product.id if odoo_product else False, @@ -209,6 +211,7 @@ class WooInstance(models.Model): 'woo_product_name': wc_name, 'woo_sku': wc_sku, 'woo_price': wc_price, + 'woo_permalink': wc_permalink, 'woo_product_type': wc_type if wc_type in ('simple', 'variable', 'grouped', 'external') else 'simple', 'state': match_state, 'company_id': self.company_id.id, diff --git a/fusion-woo-odoo/fusion_woocommerce/models/woo_product_map.py b/fusion-woo-odoo/fusion_woocommerce/models/woo_product_map.py index 54b45711..24713d9e 100644 --- a/fusion-woo-odoo/fusion_woocommerce/models/woo_product_map.py +++ b/fusion-woo-odoo/fusion_woocommerce/models/woo_product_map.py @@ -26,6 +26,7 @@ class WooProductMap(models.Model): ('external', 'External'), ]) woo_price = fields.Float(string='WC Price', digits='Product Price') + woo_permalink = fields.Char(string='WC Product URL') woo_parent_id = fields.Integer() is_variation = fields.Boolean() sync_price = fields.Boolean(default=True) diff --git a/fusion-woo-odoo/fusion_woocommerce/static/src/css/woo_styles.css b/fusion-woo-odoo/fusion_woocommerce/static/src/css/woo_styles.css index aa27094b..476a84c0 100644 --- a/fusion-woo-odoo/fusion_woocommerce/static/src/css/woo_styles.css +++ b/fusion-woo-odoo/fusion_woocommerce/static/src/css/woo_styles.css @@ -587,6 +587,24 @@ html[style*="color-scheme: dark"] { color: var(--woo-accent); background: var(--woo-bg-hover); } +/* Product link to WooCommerce */ +.woo-product-link { + color: var(--woo-accent); + text-decoration: none; + transition: color 0.15s; +} +.woo-product-link:hover { + color: var(--woo-accent-hover); + text-decoration: underline; +} +.woo-external-icon { + font-size: 0.7rem; + opacity: 0.5; +} +.woo-product-link:hover .woo-external-icon { + opacity: 1; +} + .woo-price-sync-col { width: 60px; white-space: nowrap; diff --git a/fusion-woo-odoo/fusion_woocommerce/static/src/xml/product_mapping.xml b/fusion-woo-odoo/fusion_woocommerce/static/src/xml/product_mapping.xml index f8bec4a3..ab25497d 100644 --- a/fusion-woo-odoo/fusion_woocommerce/static/src/xml/product_mapping.xml +++ b/fusion-woo-odoo/fusion_woocommerce/static/src/xml/product_mapping.xml @@ -156,7 +156,15 @@ t-att-checked="isMappedSelected(p.id)" t-on-change="() => this.toggleSelectMapped(p.id)"/> - + + + + + + + + +