details:   https://code.tryton.org/tryton/commit/2ec0ff372d38
branch:    default
user:      Cédric Krier <[email protected]>
date:      Wed Mar 25 23:25:50 2026 +0100
description:
        Set header for sale from shopify before setting the lines

        The lines may depend on the header like the shipping line which depends 
on the
        carrier.

        Closes #14706
diffstat:

 modules/web_shop_shopify/sale.py |  48 +++++++++++++++------------------------
 1 files changed, 19 insertions(+), 29 deletions(-)

diffs (80 lines):

diff -r f76f971c8b48 -r 2ec0ff372d38 modules/web_shop_shopify/sale.py
--- a/modules/web_shop_shopify/sale.py  Sat Mar 14 00:46:13 2026 +0100
+++ b/modules/web_shop_shopify/sale.py  Wed Mar 25 23:25:50 2026 +0100
@@ -441,6 +441,8 @@
             address.save()
             sale.invoice_address = address
 
+        sale._set_header_from_shopify(shop, order)
+
         id2line = {
             l.shopify_identifier: l for l in getattr(sale, 'lines', [])
             if l.shopify_identifier}
@@ -504,6 +506,9 @@
             cls._shopify_amount_to_pay(order))
         return sale
 
+    def _set_header_from_shopify(self, shop, order):
+        pass
+
     @classmethod
     def _shopify_amount_to_pay(cls, order):
         if order['paymentTerms']:
@@ -766,17 +771,17 @@
         shipping_line.setdefault('title')
         return fields
 
-    @classmethod
-    def get_from_shopify(cls, shop, order, sale=None):
-        pool = Pool()
-        Tax = pool.get('account.tax')
+    def _set_header_from_shopify(self, shop, order):
+        super()._set_header_from_shopify(shop, order)
 
-        sale = super().get_from_shopify(shop, order, sale=sale)
-
-        shipment_cost_method = None
-        if shipping_line := order['shippingLine']:
-            available_carriers = sale.on_change_with_available_carriers()
-            carrier = None
+        if (self.shipment_address
+                and self.shipment_address == self.warehouse.address):
+            shipment_cost_method = None
+        else:
+            shipment_cost_method = 'order'
+        carrier = None
+        if shipment_cost_method and (shipping_line := order['shippingLine']):
+            available_carriers = self.on_change_with_available_carriers()
             for carrier in available_carriers:
                 if carrier.shopify_match(shop, shipping_line):
                     carrier = carrier
@@ -784,25 +789,10 @@
             else:
                 if available_carriers:
                     carrier = available_carriers[0]
-            setattr_changed(sale, 'carrier', carrier)
-            if sale.carrier:
-                shipment_cost_method = 'order'
-                for line in sale.lines:
-                    if getattr(line, 'shipment_cost', None) is not None:
-                        unit_price = line.unit_price
-                        base_price = getattr(line, 'base_price', None)
-                        if setattr_changed(
-                                line, 'product', sale.carrier.carrier_product):
-                            line.on_change_product()
-                        unit_price = round_price(Tax.reverse_compute(
-                                unit_price, line.taxes, sale.sale_date))
-                        setattr_changed(line, 'unit_price', unit_price)
-                        if base_price is not None:
-                            base_price = round_price(Tax.reverse_compute(
-                                    base_price, line.taxes, sale.sale_date))
-                            setattr_changed(line, 'base_price', base_price)
-        setattr_changed(sale, 'shipment_cost_method', shipment_cost_method)
-        return sale
+                else:
+                    shipment_cost_method = None
+        setattr_changed(self, 'carrier', carrier)
+        setattr_changed(self, 'shipment_cost_method', shipment_cost_method)
 
 
 class Line(IdentifierMixin, metaclass=PoolMeta):

Reply via email to