вторник, 28 апреля 2015 г.

О скидках в X-Cart

Надо было давно написать... уже сам забыл все :(

В общем модуль скидок в X-Cart конечно есть, но он есть в платной версии (полбеды) плюс мне нужны были очень специфические скидки, которые все равно было им не реализовать...

Спасибо Антону, ПОМОГ, /// за прошедшее время на офф сайте появилось много документации http://kb.x-cart.com/display/XDD/Changing+store+logic - прошу любить и жаловать :)

В моем случае код (вдруг кому пригодится) такой:

 1. Определяем, имеет ли покупатель право на 10% скидку, для этого у него не должно быть невыкупленных заказов и должны быть выкупленные:

    protected function has10Discount()
    {
        $discountState = false;

        $profile = \XLite\Core\Auth::getInstance()->getProfile();
        if ($profile) {
            $cnd = new \XLite\Core\CommonCell();
            $cnd->profile = $profile;
            foreach (\XLite\Core\Database::getRepo('XLite\Model\Order')->search($cnd) as $order) {
                $orderState = $order->getPaymentStatusCode();
        if ($orderState == \XLite\Model\Order\Status\Payment::STATUS_REFUNDED)
            { $discountState = false; break; }
                if ($orderState == \XLite\Model\Order\Status\Payment::STATUS_PAID)
            $discountState = true;
            }
        }

        return $discountState;
    }



2. Вычисляем скидку в зависимости от количества товаров:

    public function calculate()
    {

    $quantity = 0;
    $surcharge = 0;
    $pastaPrice = 700;
    $pastaOptDiscount = 300;

        foreach ($this->getOrderItems() as $item)
        {
                if (floor($item->getItemPrice()) == $pastaPrice)
                    $quantity += $item->getAmount();
        }

    if ($quantity < 3) $surcharge = 0;
    if ($quantity > 2 && $quantity < 6) $surcharge = $pastaPrice;
    if ($quantity == 6) $surcharge = 2*$pastaPrice;
    if ($quantity > 6)
    {
          if (round($quantity/6,0) != round($quantity/6,1)) $surcharge = 2*$pastaPrice;
          else $surcharge = $quantity*$pastaOptDiscount;
    }

    if ($this->has10Discount())
            $surcharge += floor(($this->getOrder()->getSubtotal() - $surcharge)/ 10);

        if ($surcharge <= 0) {
            $surcharge = null;
        }  else {
            $surcharge = $this->addOrderSurcharge($this->code, $surcharge * -1);
        }

        return $surcharge;
    }


Куда и как положить этот код - смотрите на офф сайте по ссылке http://kb.x-cart.com/display/XDD/Creating+global+discount, я же отмечу, что скидка считается не на товар, а общая, то есть при покупке трех товаров по 700 рублей сумма будет 2100 и сумма скидки - 700. Если это повторный заказ - то скидка будет уже 840...

Обидно, что за прошедшее время сам забыл, как активировать этот код (если это вообще надо)... Ну понадобится - вспомню, а впредь буду писать в блог сразу, он же именно для этого...

Комментариев нет:

Отправить комментарий