diff --git a/connector_woocommerce_ast/models/sale_order/export_mapper.py b/connector_woocommerce_ast/models/sale_order/export_mapper.py index ae4754657..95b5254f8 100644 --- a/connector_woocommerce_ast/models/sale_order/export_mapper.py +++ b/connector_woocommerce_ast/models/sale_order/export_mapper.py @@ -1,5 +1,6 @@ # Copyright NuoBiT Solutions - Kilian Niubo # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + from odoo import _ from odoo.exceptions import ValidationError @@ -22,18 +23,22 @@ def status(self, record): @mapping def shipment_tracking(self, record): tracking = {} - for picking in record.picking_ids: - if picking.carrier_id: - carrier = self.backend_record.carrier_provider_ids.filtered( - lambda x: picking.carrier_id.delivery_type == x.delivery_type + picking = record.picking_ids.filtered( + lambda p: p.state == "done" and p.carrier_id + ).sorted(key=lambda p: p.id,)[-1:] + if picking: + 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 ) - if not carrier: - raise ValidationError( - _("carrier is not defined on backend for tax %s") - % record.get("carrier_id") - ) - tracking["tracking_provider"] = carrier.woocommerce_provider + 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 tracking: + return {"_wc_shipment_tracking_items": [tracking]} diff --git a/connector_woocommerce_ast/models/stock_picking/stock_picking.py b/connector_woocommerce_ast/models/stock_picking/stock_picking.py index a83f8db9d..8ad9c0f49 100644 --- a/connector_woocommerce_ast/models/stock_picking/stock_picking.py +++ b/connector_woocommerce_ast/models/stock_picking/stock_picking.py @@ -1,4 +1,5 @@ # 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 fields, models @@ -18,7 +19,7 @@ def _get_woocommerce_stock_picking_state(self): woocommerce_stock_picking_state = super()._get_woocommerce_stock_picking_state() if ( woocommerce_stock_picking_state == "done" - and self.delivery_state == "shipping_recorded_in_carrier" + and self.delivery_state == "customer_delivered" ): woocommerce_stock_picking_state = "delivered" return woocommerce_stock_picking_state