Округление цен — собственный тип округления. Обработчики

Рейтинг: 3.6954  
На голосовании
Предложил Пользователь 25773 15.10.2016 20:35:30

Округление цен — собственный тип округления. Обработчики

Посмотрел новый функционал округления цен. Плакать хочется.

Все что есть — округление в большую или меньшую сторону и диапазоны.
[spoiler]


Добавьте событие, чтобы в эту форму можно было добавить свой тип округления. Или прописать свою собственную функцию.

В нашем модуле "Округление скидок" есть еще психологическое округление, есть корректировка после округления. Куча опций, которые можно применить к ценам. Только дайте событие.






Сейчас настроил округление цен в Битриксе и изменил в одном месте ядро: получилась моя функция \CAskaronRound::Apply($value); выглядит роскошно. Везде 99.

Bitrix\Catalog\Product\Price::roundValue
public static function roundValue($value, $precision, $type) 
{
 $type = (int)$type;
 if (!in_array($type, Catalog\RoundingTable::getRoundTypes(false)))
 return $value;

 $precision = (float)$precision;
 if ($precision <= 0)
 return 0;
 if ($precision >= 1)
 $precision = (int)$precision;

 $value = (float)$value;
 if (abs($value) <= self::VALUE_EPS)
 return 0;

 // Askaron begin
 if ( \CModule::IncludeModule("askaron.round") )
 {
   return \CAskaronRound::Apply($value);
 }
 // Askaron end

 return ($precision < 1
 ? static::roundFraction($value, $precision, $type)
 : static::roundWhole($value, $precision, $type)
 );
}

Еще вопрос по округлению. Есть смысл сделать опцию к округлению, чтобы округлялись только товары со скидкой. Обычно оригинальная цена заполнена адекватно и проблемы возникают только с рассчитанными ценами скидок.
Рейтинг: 0  
Ответил Жуков Евгений 18.10.2016 12:41:43
Артемий, благодарим за интерес к штатному функционалу.
Все что есть — округление в большую или меньшую сторону и диапазоны.
Реализация опиралась на 1С для обеспечения совместимости при обмене данными.
Добавьте событие, чтобы в эту форму можно было добавить свой тип округления. Или прописать свою собственную функцию.
Только дайте событие.
Сейчас настроил округление цен в Битриксе и изменил в одном месте ядро: получилась моя функция \CAskaronRound::Apply($value); выглядит роскошно
В таком варианте - однозначно нет. Информация об округлении передается и сохраняется в заказе. При редактировании сохраненного заказа используются уже не текущие настройки округления, а сохраненные в заказе.
Обычно оригинальная цена заполнена адекватно и проблемы возникают только с рассчитанными ценами скидок.
Цены в каталоге могут быть заданы в разной валюте, округление применяется уже после перевода в валюту показа.

Рейтинг: 0  
Пользователь 25773 18.10.2016 14:14:11
Обычно оригинальная цена заполнена адекватно и проблемы возникают только с рассчитанными ценами скидок.
Цены в каталоге могут быть заданы в разной валюте, округление применяется уже после перевода в валюту показа.
Евгений, я понял, что для округления скидок вы исправлять не будете.

Есть еще вопрос: поломалось событие OnCountPriceWithDiscountResult при округлении скидок. Обращение № 1190661. Теперь это событие вызывается всегда, даже если скидок нет. Что теперь делать? Будут ли новые события?
Рейтинг: 0  
Пользователь 2106 18.10.2016 14:49:36
Евгений, я понял, что для округления скидок вы исправлять не будете.
Артемий, не стоит быть столь категоричным, тем более что слово "исправлять" для данной ситуации не подходит вообще. Я всего лишь описал причины текущей реализации и то, что Ваше пожелание в предложенном варианте (через события) не может быть реализовано. Какие-то иные варианты можно расссмотреть, при условии, что все это будет работать в редактировании/просмотре заказов ПОСЛЕ оформления.
Рейтинг: 0.0913  
Пользователь 2106 18.10.2016 16:43:17
Обращение № 1190661
Новых событий не будет, вариант решения в Вашем тикете.