четверг, 31 января 2013 г.

Как избежать применения двойной скидки в VirtueMart.
(How to avoid double discount in Virtuemart)


Как Вы наверное знаете, в VirtueMart существует достаточно гибкая система скидок. Вы можете устанавливать скидки на товары в процентном соотношении и выводить покупателю надпись вида «Вы экономите 10%» или же в абсолютном значении «Вы экономите 500 руб.»
Эти скидки могут быть как постоянными, так и ограниченными временными рамками.

Также Вы можете устанавливать скидки основываясь на принадлежности покупателя к той или иной группе. Например, Вы создаете группу «постоянные покупатели» и присваиваете ей скидку в размере 15%. Соответственно, когда пользователь авторизуется на сайте, он уже будет видеть «свои» цены на товар, что достаточно удобно.

Но иногда возникает следующая ситуация:
Пользователь принадлежит к группе «постоянные покупатели» и уже получает товар со скидкой в 15%, а владелец магазина, желая привлечь побольше новых покупателей в свой магазин, делает акционную цену (-15%) на некоторые товары. В итоге, у пользователей принадлежащих к группе «постоянные покупатели» цена акционных товаров будет снижена на 30% что, как Вы понимаете, не совсем соответствует намерению владельца магазина (так-как суть акции заключалась в привлечении новых покупателей, а не распродаже товара по бросовым ценам.)


К сожалению, управление скидками в VirtueMart не предоставляет возможности регулирования данной ситуации стандартными средствами магазина. Поэтому, разбираться с ситуацией применения двойной скидки в VirtueMart, нам придется самостоятельно.


Все нижеизложенное, справедливо для VirtueMart 1.14, хотя возможно и применимо для более поздних версий магазина.

1) Первым делом, нам необходимо узнать shopper_group_id группы «постоянные покупатели»
Для этого заходим в административную часть сайта. Переходим к компоненту VirtueMart.
Открываем вкладку «Покупатели», затем выбираем «Группы покупателей». В открывшемся окне выбираем нашу группу. Обратите внимание на строку браузера.

Как Вы видите у меня shopper_group_id = 8

2) Открываем файл /administrator/components/com_virtuemart/classes/ps_product.php
ищем метод getPriceByShopperGroup находим строку

$price_info["product_price"]= $db->f("product_price") * ((100 - $auth["shopper_group_discount"])/100);

И меняем на:

$discount_info = $this->get_discount( $product_id );
if ($discount_info [amount] > 0 and $auth[shopper_group_id] == 8)
{
$price_info["product_price"]= $db->f("product_price");
}else
{
$price_info["product_price"]= $db->f("product_price") * ((100 - $auth["shopper_group_discount"])/100);
}

Таким образом группа «постоянные покупатели» будет видеть «свои» цены на все товары, но стоимость акционных товаров для них будет такая же как и для других покупателей.

3 комментария:

  1. Добрый день! А как это применить, если таких групп несколько?

    ОтветитьУдалить
  2. Добрый. Просто измените условие
    if(...)
    согласно Вашим требованиям.

    ОтветитьУдалить
  3. Спасибо огромное! Помогло! Только удалил
    and $auth[shopper_group_id] == 8
    чтобы распространялось на все группы покупателей.

    ОтветитьУдалить