fix(recommerce): сброс зачеркнутой цены через price_old=0
- Передаем price_old[amount]="0" для сброса старой цены - Добавлены флаги is_new и is_popular в маппер - Добавлен debug логгер для отладки типов данных Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -106,6 +106,7 @@ class RecommerceClient:
|
|||||||
# Recommerce API требует form-data для POST запросов
|
# Recommerce API требует form-data для POST запросов
|
||||||
# data должен быть плоским словарём с ключами вида price[amount], price[currency]
|
# data должен быть плоским словарём с ключами вида price[amount], price[currency]
|
||||||
logger.info(f"Recommerce update_product {sku}: {data}")
|
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)
|
return self._request('POST', f'catalog/products/{sku}', data=data)
|
||||||
|
|
||||||
def create_product(self, data: Dict[str, Any]) -> Dict[str, Any]:
|
def create_product(self, data: Dict[str, Any]) -> Dict[str, Any]:
|
||||||
|
|||||||
@@ -62,12 +62,13 @@ def to_api_product(
|
|||||||
# price_old - как в рабочем скрипте (не old_price из документации)
|
# price_old - как в рабочем скрипте (не old_price из документации)
|
||||||
data['price_old[amount]'] = str(float(product.price))
|
data['price_old[amount]'] = str(float(product.price))
|
||||||
data['price_old[currency]'] = 'BYN'
|
data['price_old[currency]'] = 'BYN'
|
||||||
# TODO: is_special='true' принимается API но игнорируется при обновлении.
|
|
||||||
# Возможно работает только при создании товара.
|
|
||||||
else:
|
else:
|
||||||
# Нет скидки: только основная цена
|
# Нет скидки: только основная цена
|
||||||
data['price[amount]'] = str(float(product.price or 0))
|
data['price[amount]'] = str(float(product.price or 0))
|
||||||
data['price[currency]'] = 'BYN'
|
data['price[currency]'] = 'BYN'
|
||||||
|
# Важно: передаем "0" для price_old, чтобы сбросить зачеркнутую цену (как в рабочем скрипте)
|
||||||
|
data['price_old[amount]'] = "0"
|
||||||
|
data['price_old[currency]'] = 'BYN'
|
||||||
|
|
||||||
if 'content' in fields:
|
if 'content' in fields:
|
||||||
# content включает название и описание
|
# content включает название и описание
|
||||||
@@ -87,6 +88,12 @@ def to_api_product(
|
|||||||
if photo.image:
|
if photo.image:
|
||||||
data[f'images[{idx}]'] = photo.image.url
|
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
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user