From aa0bf2e7ba3c03e386cd2f5a61ee5e026f66ee46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Wed, 2 Jul 2025 13:25:56 +0200 Subject: [PATCH] Reset to draft sales updated from Shopify As the update from Shopify may need to add new lines which can only be created for a draft sale. Closes #14099 --- modules/web_shop_shopify/web.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/modules/web_shop_shopify/web.py b/modules/web_shop_shopify/web.py index 120ec118fa..b06d069ca7 100644 --- a/modules/web_shop_shopify/web.py +++ b/modules/web_shop_shopify/web.py @@ -2,6 +2,7 @@ # this repository contains the full copyright notices and license terms. import datetime as dt import urllib.parse +from collections import defaultdict from decimal import Decimal from operator import attrgetter @@ -558,6 +559,7 @@ class Shop(metaclass=PoolMeta): Sale = pool.get('sale.sale') assert len(sales) == len(orders) to_update = {} + states_to_restore = defaultdict(list) for sale, order in zip(sales, orders): assert sale.shopify_identifier == order.id shop = sale.web_shop @@ -568,8 +570,11 @@ class Shop(metaclass=PoolMeta): sale.tax_amount_cache = None sale.total_amount_cache = None to_update[sale] = order - Payment.get_from_shopify(sale, order) + states_to_restore[sale.state].append(sale) + Sale.write(list(to_update.keys()), {'state': 'draft'}) Sale.save(to_update.keys()) + for state, state_sales in states_to_restore.items(): + Sale.write(list(state_sales), {'state': state}) for sale, order in to_update.items(): sale.shopify_tax_adjustment = ( Decimal(order.current_total_price) - sale.total_amount) @@ -588,6 +593,11 @@ class Shop(metaclass=PoolMeta): Sale.write(to_quote, {'state': 'quotation'}) cls.log(to_quote, 'transition', 'state:quotation') + for sale, order in zip(sales, orders): + shop = sale.web_shop + with shop.shopify_session(): + Payment.get_from_shopify(sale, order) + @classmethod def check_modification(cls, mode, shops, values=None, external=False): pool = Pool()