Реализована мультиязычность на одном сайте. Для каждого языка заведен тип цен со своей валютой, который определяется в OnGetOptimalPrice().
Теперь необходимо реализовать возможность сохранять заказы в валюте типа цены, которая применяется для текущего языка, учитывая все скидки, купоны и т.д. Пробовал различные варианты сохранения заказа, но там либо вся цена конвертируется в основную валюту, либо валюта сохраняется как надо, а сумма конвертируется, либо не просчитываются скидки. Как корректно реализовать такой функционал?
В админке в заказах при нажатии на кнопку "Пересчитать", заказ пересохраняется как надо, но только если тип цены соответствует текущему языку в админке, в противном случае выдает ошибку:
Возможно, стоит вызывать этот пересчет сразу после сохранения заказа, но как это сделать пока не разобрался.
Теперь необходимо реализовать возможность сохранять заказы в валюте типа цены, которая применяется для текущего языка, учитывая все скидки, купоны и т.д. Пробовал различные варианты сохранения заказа, но там либо вся цена конвертируется в основную валюту, либо валюта сохраняется как надо, а сумма конвертируется, либо не просчитываются скидки. Как корректно реализовать такой функционал?
В админке в заказах при нажатии на кнопку "Пересчитать", заказ пересохраняется как надо, но только если тип цены соответствует текущему языку в админке, в противном случае выдает ошибку:
Код |
---|
[Bitrix\Main\NotSupportedException] CURRENCY (150) /web/bitrix/modules/sale/lib/order.php:1747 #0: Bitrix\Sale\Order->onBasketModify(string, object, string, string, string) /web/bitrix/modules/sale/lib/basket.php:284 #1: Bitrix\Sale\Basket->onItemModify(object, string, string, string) /web/bitrix/modules/sale/lib/internals/collectableentity.php:21 #2: Bitrix\Sale\Internals\CollectableEntity->onFieldModify(string, string, string) /web/bitrix/modules/sale/lib/basketitembase.php:256 #3: Bitrix\Sale\BasketItemBase->onFieldModify(string, string, string) /web/bitrix/modules/sale/lib/internals/entity.php:162 #4: Bitrix\Sale\Internals\Entity->setField(string, string) /web/bitrix/modules/sale/lib/basketitembase.php:162 #5: Bitrix\Sale\BasketItemBase->setField(string, string) /web/bitrix/modules/sale/lib/basketitem.php:86 #6: Bitrix\Sale\BasketItem->setField(string, string) /web/bitrix/modules/sale/lib/internals/entity.php:334 #7: Bitrix\Sale\Internals\Entity->setFields(array) /web/bitrix/modules/sale/lib/basketitembase.php:244 #8: Bitrix\Sale\BasketItemBase->setFields(array) /web/bitrix/modules/sale/lib/basket.php:382 #9: Bitrix\Sale\Basket->refreshData(array) /web/bitrix/modules/sale/admin/order_edit.php:139 #10: require_once(string) /web/bitrix/admin/sale_order_edit.php:2 |
Возможно, стоит вызывать этот пересчет сразу после сохранения заказа, но как это сделать пока не разобрался.