Версия CS-Cart: Multi-Vendor 4.20.1
Валюта: Рубли, количество знаков после запятой = 0 (копейки не используем).
Описание проблемы:
У нас есть свой обработчик (хук change_order_status_post ), который при выполнении заказа (статус ‘C’) автоматически создаёт выплату (payout ) продавцу. Всё считает правильно: order_placed + payout = 0. В таблице vendor_payouts суммы сходятся.
Проблема:
Спустя некоторое время (от 1 дня до 2 недель) баланс продавца самопроизвольно показывает -1 рубль .
- На главной странице продавца (
vendor.php) висит-1 - На странице “Бухгалтерский учёт” (
companies.balance) тоже висит-1
Хотя в БД и просто если пересчитать этого продавца выходит чётко 0, а не -1.
Продавец видит, что должен нам рубль, приходят уведомления. Это бесит и нас, и продавцов.
Как воспроизвести:
- Убедитесь, что у продавца баланс 0 (после всех выплат).
- Не создавайте новые заказы и выплаты. Просто ждите.
- Через некоторое время (от 1 дня до 2 недель) баланс сам сменится на
-1.
Что мы выяснили в ходе отладки:
Мы отследили момент, когда баланс слетает в -1 . Это происходит одновременно с фоновым запросом CS-Cart к updates.cs-cart.com (проверка лицензии и обновлений). Причём интервал непредсказуемый от дня до двух недель.
Похоже, что при этом запросе система пересчитывает баланс, но делает это с ошибкой округления для валют с decimals = 0 .
Вопросы:
- Кто-нибудь сталкивался с таким?
- Как отключить пересчёт баланса при проверке лицензии?
- Это баг? Есть ли официальный фикс?