Надо было давно написать... уже сам забыл все :(
В общем модуль скидок в 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...
Обидно, что за прошедшее время сам забыл, как активировать этот код (если это вообще надо)... Ну понадобится - вспомню, а впредь буду писать в блог сразу, он же именно для этого...
В общем модуль скидок в 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...
Обидно, что за прошедшее время сам забыл, как активировать этот код (если это вообще надо)... Ну понадобится - вспомню, а впредь буду писать в блог сразу, он же именно для этого...
Комментариев нет:
Отправить комментарий