Уже несколько раз поступал запрос сделать обновление цен опций, при массовом изменении цены или назначении скидок.
С основной ценой все просто. Есть база и есть скидка. Когда скидка истекла, в игру вступает базовая цена. Это разные записи и даже таблицы в базе данных.
С ценой опций есть следующая проблемка. Цена опций в базе для каждой опции товара своя. Нет инструментария, который где-то отдельно бы включал скидки на них, которые потом можно было бы просто отмести.
Так вот, математика получается следующая:
Дано:
Исходная цена опции: 32
Зададим скидку: -20%
При массовом назначении скидки в опции, мы получим:
32 - 20% = 25,6
Но при попытке увеличить цены опций обратно, будут побочные эффекты:
1. Надо будет делать псевдоназначения скидой (к примеру, +20%)
2. Полученная цена опции 25,6 +20% = 30,72
Если использовать округления, казалось бы, все равно пойдет на 30 вроде как несущественно. Впрочем, это на первый взгляд. Ведь если цены на уровне 47 и 67, то, возможно, разница в 2 или 5 тоже существенна.
Пробуем другие более крупные числа:
3 699 - 20% = 2 959,2
2 959,2 +20% = 3 551,04
Разница уже очень существенна без вариантов.
Отдельно стоит заметить, что при массовом изменении базовой цены, ситуация будет такой же самой: ее больше нельзя будет массово изменить к прежнему значению, поменяв знак в числе процента. Однако, реальное изменение цен и не должно предполагать "откатов". В таком случае, изменение базовой цены и цены опции будет происходить по единому принципу. И, соответственно, является годным решением.