diff --git a/myproject/integrations/recommerce/client.py b/myproject/integrations/recommerce/client.py index 412cf40..8144886 100644 --- a/myproject/integrations/recommerce/client.py +++ b/myproject/integrations/recommerce/client.py @@ -106,6 +106,7 @@ class RecommerceClient: # Recommerce API требует form-data для POST запросов # data должен быть плоским словарём с ключами вида price[amount], price[currency] logger.info(f"Recommerce update_product {sku}: {data}") + logger.debug(f"Data types in update_product: {[(k, type(v).__name__) for k, v in data.items()]}") return self._request('POST', f'catalog/products/{sku}', data=data) def create_product(self, data: Dict[str, Any]) -> Dict[str, Any]: diff --git a/myproject/integrations/recommerce/mappers.py b/myproject/integrations/recommerce/mappers.py index b13ad98..b18bb68 100644 --- a/myproject/integrations/recommerce/mappers.py +++ b/myproject/integrations/recommerce/mappers.py @@ -62,12 +62,13 @@ def to_api_product( # price_old - как в рабочем скрипте (не old_price из документации) data['price_old[amount]'] = str(float(product.price)) data['price_old[currency]'] = 'BYN' - # TODO: is_special='true' принимается API но игнорируется при обновлении. - # Возможно работает только при создании товара. else: # Нет скидки: только основная цена data['price[amount]'] = str(float(product.price or 0)) data['price[currency]'] = 'BYN' + # Важно: передаем "0" для price_old, чтобы сбросить зачеркнутую цену (как в рабочем скрипте) + data['price_old[amount]'] = "0" + data['price_old[currency]'] = 'BYN' if 'content' in fields: # content включает название и описание @@ -87,6 +88,12 @@ def to_api_product( if photo.image: data[f'images[{idx}]'] = photo.image.url + # Обработка флагов товара (как строки "true"/"false" согласно документации API) + if hasattr(product, 'is_new'): + data['is_new'] = "true" if product.is_new else "false" + if hasattr(product, 'is_popular'): + data['is_popular'] = "true" if product.is_popular else "false" + return data