fix(recommerce): использовать in_stock для определения наличия в API
- Добавить константу RECOMMERCE_INFINITY_COUNT = 999999 в mappers.py - Изменить логику: product.in_stock определяет count (0 или 999999) - Добавить test_count.py для тестирования поля count - Обновить документацию recommerce_api.md с секцией Product Availability Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from typing import List, Dict, Any, Optional
|
||||
from django.conf import settings
|
||||
from .client import RecommerceClient
|
||||
from .mappers import to_api_product, from_api_order
|
||||
from .mappers import to_api_product, from_api_order, RECOMMERCE_INFINITY_COUNT
|
||||
from .exceptions import RecommerceError
|
||||
# Imports for typing only to avoid circular dependency issues at module level if possible
|
||||
# but for simplicity in this structure we'll import inside methods if needed or use 'Any'
|
||||
@@ -39,13 +39,10 @@ class RecommerceService:
|
||||
# Получаем остаток, если нужно
|
||||
stock_count = None
|
||||
if fields is None or 'count' in fields:
|
||||
# Пытаемся получить остаток.
|
||||
# Логика получения остатка может зависеть от вашей системы inventory.
|
||||
# Здесь предполагаем, что у product есть метод или связь для получения общего остатка.
|
||||
# Для простоты используем первый попавшийся Stock или 0
|
||||
# В реальном проекте тут должна быть логика выбора склада
|
||||
stock = product.stocks.first()
|
||||
stock_count = int(stock.quantity_free) if stock else 0
|
||||
# Используем in_stock для определения наличия в формате Recommerce:
|
||||
# - in_stock=False → count=0 (нет в наличии)
|
||||
# - in_stock=True → count=999999 (есть в наличии, "бесконечность")
|
||||
stock_count = RECOMMERCE_INFINITY_COUNT if product.in_stock else 0
|
||||
|
||||
data = to_api_product(product, stock_count=stock_count, fields=fields)
|
||||
|
||||
@@ -74,8 +71,8 @@ class RecommerceService:
|
||||
RecommerceError: Если отсутствует обязательное поле parent_category_sku
|
||||
"""
|
||||
# Для создания нужны все поля
|
||||
stock = product.stocks.first()
|
||||
stock_count = int(stock.quantity_free) if stock else 0
|
||||
# Используем in_stock для определения наличия в формате Recommerce
|
||||
stock_count = RECOMMERCE_INFINITY_COUNT if product.in_stock else 0
|
||||
|
||||
data = to_api_product(product, stock_count=stock_count, fields=None, for_create=True)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user