From b926ca0b904f753387a14698f66feabf352dfe67 Mon Sep 17 00:00:00 2001 From: mguschin Date: Tue, 12 May 2026 22:37:27 +0300 Subject: [PATCH] fix: send prices in rubles to VK Market API, not kopecks VK Market API expects the price field in rubles (float), not kopecks. Removing the *100 conversion that was inflating all prices by 100x. Comparison with cached VK prices now also uses rubles consistently. Co-Authored-By: Claude Sonnet 4.6 --- web/tasks/vk_sync.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/web/tasks/vk_sync.py b/web/tasks/vk_sync.py index e120957..5202f8f 100644 --- a/web/tasks/vk_sync.py +++ b/web/tasks/vk_sync.py @@ -38,14 +38,14 @@ def _is_weight(measure: str | None) -> bool: return (measure or "").strip().lower() in WEIGHT_MEASURES -def _calc_price(price: Decimal | None, measure: str | None) -> int: - """Return price in VK kopecks (integer). Weight items are multiplied.""" +def _calc_price(price: Decimal | None, measure: str | None) -> float: + """Return price in rubles for VK Market API. Weight items are multiplied.""" if price is None: - return 0 - base = int(price) + return 0.0 + base = float(price) if _is_weight(measure): base *= settings.VK_WEIGHT_PRICE_MULTIPLIER - return base * 100 # kopecks + return base def _build_description(name: str, measure: str | None, evo_description: str | None) -> str: @@ -169,7 +169,7 @@ def _sync_product( token: str, ) -> None: name = _name_for_vk(product.name) - price_kopecks = _calc_price(product.price, product.measure_name) + price_rubles = _calc_price(product.price, product.measure_name) desc = _build_description(product.name, product.measure_name, None) stock = settings.VK_STOCK_AMOUNT if product.allow_to_sell else 0 owner_id = f"-{vk_group_id}" @@ -185,7 +185,7 @@ def _sync_product( ).first() album_changed = False if vk_p: - vk_price_kopecks = int(vk_p.price * 100) if vk_p.price is not None else 0 + vk_price = float(vk_p.price) if vk_p.price is not None else 0.0 vk_stock = settings.VK_STOCK_AMOUNT if vk_p.availability == 0 else 0 vk_name = vk_p.name or "" vk_desc = (vk_p.description or "").strip() @@ -193,7 +193,7 @@ def _sync_product( album_changed = str(vk_p.album_id) != str(album_id) if album_id else False changed = ( name != vk_name - or price_kopecks != vk_price_kopecks + or price_rubles != vk_price or curr_desc != vk_desc or stock != vk_stock or album_changed @@ -210,7 +210,7 @@ def _sync_product( "name": name, "description": desc.strip(), "category_id": settings.VK_CATEGORY_ID, - "price": price_kopecks, + "price": price_rubles, "stock_amount": stock, }, token, user_id=user_id) if "error" in resp: @@ -252,7 +252,7 @@ def _sync_product( "name": name, "description": desc, "category_id": settings.VK_CATEGORY_ID, - "price": price_kopecks, + "price": price_rubles, "main_photo_id": photo_id, "stock_amount": stock, }, token, user_id=user_id)