алгоритм учета в данной ситуации очень прост:
1. есть: %скидки рассчитывать от общей суммы покупок(я так понял это реализовано в модуле)
2. есть: сумма товаров в корзине общая(обычное товары + товары со скидкой и уцененные...)
3. делаем: отдельно рассчитываем сумму товаров со скидкой и уцененных товаров...
4. делаем: рассчитываем сумму скидки=(сумма товаров в корзине общая(п.2) - сумма товаров со скидкой и уцененных товаров(п.3))*%скидки (п.1)
5. в итоге: Общая сумма корзины(п.2) - рассчитанная сумма скидки(п.4)
результат: Товары которые уже со скидкой, дополнительную скидку не получают! но скидка за оборот накапливается. Клиент доволен продавец тоже не в убытке!
где-то в разделе скидок описать что на товары со скидкой накопительная скидка не распространяется. Все.
Вопрос по Вашему модулю, в личном кабинете отображается информация о текущей скидке покупателя и сколько осталось ему, чтобы получить следующую скидку, как єто реализовано в корзине?
Алгоритм учета тут как раз более менее ясен. Вопросы возникают потом:
1. Покупатель прочитал, что при покупке от 1000 руб от получит скидку 10%. Положил в корзину товаров на 2000 руб, а ему написано, что ваша скидка 0%. Что в этой ситуации будет делать покупатель? Писать администратору и обижаться, что его обманули.
Или просто больше к вам не придет.
Получается надо в миникорзине писать отдельно: столько-то товаров со скидкой, столько-то без скидки, и общий итог.
Опять покупатель начнет писать, а почему на эти товары нет скидки. Вы его отправите читать правила предоставления скидок и т.д.
В общем, эта часть реализуема, но на мой взгляд несет больше неудобств, чем пользы.
2. Второй момент более неприятен, и он связан уже с накопительной скидкой. Если накопительная скидка не используется, то этой проблемы не возникает. А вот если используется, то возникает следующая ситуация: Вирт хранит по каждому заказу только 2 значения для суммы покупки: сумма всех купленных товаров без скидок и общая сумма заказа с учетом всех скидок, доставки, оплаты и прочих бонусов и вычетов.
Если мы считаем сумму скидки не учитывая уцененные товары, то нам надо создавать дополнительное поле в БД для хранения еще и этого промежуточного итога, чтобы затем его учитывать при расчете накопительной скидки. А создавая модуль я как раз хотел измежать любых изменений Вирта, кроме установки самого модуля.
Скидка от суммы покупки так и называется, потому что она дается в конце, после всего и от всей суммы. В этом ее сущность. А если она дается только на некоторые товары, то это уже не скидка от суммы покупки, а скидка на часть товаров, на которые нет других скидок. Соответственно ее так и надо позиционировать, и уже использовать тот алгоритм, что вы описали.
Что касается вашего вопроса про личный кабинет, то везде, кроме миникорзины, покупатель будет видеть скидку только в поле "скидка по купону". Если вы ходите выводить там какую-то дополнительную информацию, то надо править файлы Вирта.
Вы можете посмотреть, как выводится информация о скидках на демо сайте модуля.