From 5354f948489ca21207031dd65049452064b79c54 Mon Sep 17 00:00:00 2001 From: Eric Antones Date: Sat, 2 May 2026 00:34:09 +0200 Subject: [PATCH] [FIX] connector_woocommerce_ast: configure tracking wait --- .../backend/backend_delivery_type_provider.py | 6 +++ .../models/sale_order/export_mapper.py | 41 +++++++++---------- .../views/woocommerce_backend_view.xml | 1 + 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/connector_woocommerce_ast/models/backend/backend_delivery_type_provider.py b/connector_woocommerce_ast/models/backend/backend_delivery_type_provider.py index f9a0413c1..c80f835d8 100644 --- a/connector_woocommerce_ast/models/backend/backend_delivery_type_provider.py +++ b/connector_woocommerce_ast/models/backend/backend_delivery_type_provider.py @@ -31,6 +31,12 @@ def _get_selection_fields(self): string="WooCommerce provider name", required=True, ) + use_tracking_number = fields.Boolean( + string="Use tracking number", + default=False, + help="Export tracking information for this provider and delay the " + "WooCommerce status export until the picking has a tracking number.", + ) _sql_constraints = [ ( diff --git a/connector_woocommerce_ast/models/sale_order/export_mapper.py b/connector_woocommerce_ast/models/sale_order/export_mapper.py index 95b5254f8..5c844675a 100644 --- a/connector_woocommerce_ast/models/sale_order/export_mapper.py +++ b/connector_woocommerce_ast/models/sale_order/export_mapper.py @@ -13,32 +13,31 @@ class WooCommerceSaleOrderExportMapper(Component): @mapping def status(self, record): + result = super().status(record) if record.woocommerce_order_state == "partial_shipped": - return {"status": "partial-shipped"} + result["status"] = "partial-shipped" elif record.woocommerce_order_state == "delivered": - return {"status": "delivered"} - else: - return super().status(record) + result["status"] = "delivered" - @mapping - def shipment_tracking(self, record): - tracking = {} picking = record.picking_ids.filtered( lambda p: p.state == "done" and p.carrier_id - ).sorted(key=lambda p: p.id,)[-1:] + ).sorted(key=lambda p: p.id)[-1:] if picking: - carrier = self.backend_record.carrier_provider_ids.filtered( + backend_carrier = self.backend_record.carrier_provider_ids.filtered( lambda x: picking.carrier_id.delivery_type == x.delivery_type ) - if not carrier: - raise ValidationError( - _("carrier is not defined on backend for carrier %s") - % picking.carrier_id.name - ) - elif len(carrier) > 1: - raise ValidationError(_("Carrier is duplicated")) - tracking["tracking_provider"] = carrier.woocommerce_provider - if picking.carrier_tracking_ref: - tracking["tracking_number"] = picking.carrier_tracking_ref - if tracking: - return {"_wc_shipment_tracking_items": [tracking]} + if backend_carrier: + if len(backend_carrier) > 1: + raise ValidationError(_("Carrier is duplicated")) + if backend_carrier.use_tracking_number: + if picking.carrier_tracking_ref: + result["_wc_shipment_tracking_items"] = [ + { + "tracking_provider": backend_carrier.woocommerce_provider, + "tracking_number": picking.carrier_tracking_ref, + } + ] + else: + result.pop("status") + + return result diff --git a/connector_woocommerce_ast/views/woocommerce_backend_view.xml b/connector_woocommerce_ast/views/woocommerce_backend_view.xml index 08cd6093d..1235bf8da 100644 --- a/connector_woocommerce_ast/views/woocommerce_backend_view.xml +++ b/connector_woocommerce_ast/views/woocommerce_backend_view.xml @@ -15,6 +15,7 @@ +