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):