Opencart. Связка модулей разовых и накопительных скидок.
В настоящее время, на сайте действуют обе системы, два модуля: Скидки от суммы заказа и Накопительные скидки на основе купонов. Обе прогрессивные, назначающие размер скидок в зависимости от суммы заказа.
Но система подсчёта итога, их тупо плюсует, делая очень хорошо клиенту и вводя в разорение продавца. Нет речи ни каком взаимодействии и логичном расчёте. Приходится отрубать накопительные, оставляя только разовые. Да к тому же, модулям всё равно — под акцией товар или нет, назначены ему собственные скидки или нет.
Мне нужна реализация следующего алгоритма подсчёта итоговой суммы заказа.
1. Посчитать сумму заказа. Если в нём есть акционные или скидочные товары, то считать по акционным и скидочным ценам. /* Впрочем, система и так будет считать подобным образом. */ Запомнить это число как «№ 1».
2. Теперь снова посчитать сумму заказа, но теперь на основе базовых цен товаров, без их собственных скидок и акций. Запомнить это число как «№ 2».
3. Взять число «№ 1» и пересчитать его, на этот раз, с вычетом подходящего процента разовой скидки. Запомнить это число как «№ 3».
4. Взять число «№ 2» и пересчитать его с вычетом подходящего процента разовой скидки. Запомнить это число как «№ 4».
5. Сравнить оба полученных числа. Запомнить меньшее как «№ 5». /* Таким образом мы получим наиболее выгодное и логичную сумму для клиента: если ему выгодно, то сработали акции магазина, а если нет, то включилась его разовая скидка. Теперь надо выяснить — может быть клиенту будет выгоднее использовать накопительную, а не разовую скидку. Но это уже касается только зарегистрированных клиентов, так как накопительные скидки считаются только для них. */
6. /* Поэтому, на данном этапе, модуль должен закончить обработку заказа незарегистрированного клиента. */ Берётся меньшее из чисел №№ «3» и «4», а затем добавляется в качестве готовой суммы для дальнейшего расчёта итога, со всеми его методами доставки, способами оплаты и т.д.
/* Теперь работа с зарегистрированным клиентом. */
7. Если клиент зарегистрирован, то взять число «№ 1» и пересчитать его за вычетом накопительной скидки клиента. Запомнить это число как «№ 6».
8. Если клиент зарегистрирован, то взять число «№ 2» и пересчитать его за вычетом накопительной скидки клиента. Запомнить это число как «№ 7».
9. Сравнить оба полученных числа. Запомнить меньшее как «№ 8».
10. Теперь надо сравнить оба полученных меньших числа — «№ 7» и «№ 8». Запомнить меньшее из них как «№ 9». /* Это наиболее выгодная зарегистрированному клиенту сумма, учитывающая его накопительную скидку. Вот теперь и надо выяснить окончательно, какая ему выгоднее в итоге — накопительная, разовая или изначально предоставленная акционными ценами товаров. */
11. Берётся число «№ 9» и сравнивается с «№ 5». Оставляется меньшее и запоминается как «№ 10».
12. «№ 10» принимается суммой заказа для зарегистрированного клиента и добавляется в качестве готовой суммы для дальнейшего расчёта итога, как в случае для незарегистрированного клиента из шестого пункта алгоритма.
***
В процессе обсуждения возможны внесения изменений и дополнений.
Зарегистрируйтесь или войдите на сайт под своим именем.