UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: atach от 26 Августа 2013, 19:38:21

Название: Не срабатывает скидка при опционных свойствах и нулевой цене
Отправлено: atach от 26 Августа 2013, 19:38:21
Столкнулся с такой проблемой, делал скидку по примеру статьи:
http://wiki.umisoft.ru/%D0%A1%D0%BA%D0%B8%D0%B4%D0%BA%D0%B0_%D0%BD%D0%B0_%D1%82%D0%BE%D0%B2%D0%B0%D1%80_%D0%B2_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%82_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D1%8D%D1%82%D0%BE%D0%B3%D0%BE_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0_%D0%B2_%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D0%B5 (http://wiki.umisoft.ru/%D0%A1%D0%BA%D0%B8%D0%B4%D0%BA%D0%B0_%D0%BD%D0%B0_%D1%82%D0%BE%D0%B2%D0%B0%D1%80_%D0%B2_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%82_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D1%8D%D1%82%D0%BE%D0%B3%D0%BE_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0_%D0%B2_%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D0%B5)

Но возникла проблема, на одном из проектов цена у товаров стоит нулевая "0", и изменяется при помощи опционных свойств.

Проблема в том что скидка не срабатывает на такие товары (у которых поле price равно "0"). Если цена стоит выше "0" и добавляются опц.свойства то всё норм.

В самом правиле речь идет только о количестве ...
<?php
class countsDiscountRule extends discountRule implements itemDiscountRule {
 
  public function validateItem(iUmiHierarchyElement $orderItem) {
 
    $itemsCount = '';
    $emarket = cmsController::getInstance()->getModule('emarket');
    if(!$emarket) return;
    //текущая корзина
    $order = $emarket->getBasketOrder();
 
    foreach($order->getItems() as $orderItemBasket) {
      $object_id = $orderItemBasket->getItemElement()->getId();
      if($object_id == $orderItem->id){
        $itemsCount = $orderItemBasket->getAmount();
      break;
      }
    }
 
    // Если кол-во товаров в корзине >= условия в скидке то возвращаем true
    if($itemsCount >= $this->counts){
      return true;
    }else{
      return false;
    }
  }
 
};
?>
Название: Re:Не срабатывает скидка при опционных свойствах и нулевой цене
Отправлено: admin от 28 Августа 2013, 12:54:17
то есть, ваш вопрос, почему система не считает скидку когда в товаре с опционными свойствами в поле "цена" стоит 0 ?
Название: Re:Не срабатывает скидка при опционных свойствах и нулевой цене
Отправлено: atach от 28 Августа 2013, 13:14:06
НЕТ он не применяет правила когда стоит 0 только в поле price (основная цена), опциональные свойства есть (применены к товару) ...
Т.е. цена формируется цена + опц.свойство ... Так вот у всех товаров стоит 0, а опц свойстов цена > 0  ...

Если стоимость товара 0, то понятно что ноль ...
Название: Re:Не срабатывает скидка при опционных свойствах и нулевой цене
Отправлено: admin от 28 Августа 2013, 13:22:22
НЕТ он не применяет правила когда стоит 0 только в поле price (основная цена), опциональные свойства есть (применены к товару) ...
Т.е. цена формируется цена + опц.свойство ... Так вот у всех товаров стоит 0, а опц свойстов цена > 0  ...

Если стоимость товара 0, то понятно что ноль ...
Это мне понятно, я не совсем понимаю какого совета вы хотите?

понять где идет проверка на то что основная цена равна 0?
Название: Re:Не срабатывает скидка при опционных свойствах и нулевой цене
Отправлено: atach от 28 Августа 2013, 13:29:09
Нет я не пойму почему не срабатывает правило?

Ведь оно должно срабатывать при условии что в корзине находится определенное количество товара одного наименования.

Возможно я не понимаю как назначаются опц.свойства и сначала идет проверка на стоиомсть товара по полю (price), а не общее с опц.свйоствами
Название: Re:Не срабатывает скидка при опционных свойствах и нулевой цене
Отправлено: admin от 28 Августа 2013, 13:59:54
а скидку вы хотите увидеть в списке товаров?(если да то как вы даете понять системе в связке с какой опцией должна выводиться скидка) или в корзине?
Название: Re:Не срабатывает скидка при опционных свойствах и нулевой цене
Отправлено: atach от 28 Августа 2013, 14:04:33
Получил только что ответ от Службы Заботы ...
Все правила скидки работают только при условии что у товара цена (в поле price) выше нуля ...

Просто я думал что правило скидки проверяет конечную цену товара, которая получается уже после манипуляциями с опц.свойствами, а оказывается нет .
Название: Re:Не срабатывает скидка при опционных свойствах и нулевой цене
Отправлено: admin от 28 Августа 2013, 14:05:25
еще раз переспрошу, вы скидку где ожидали увидеть?
Название: Re:Не срабатывает скидка при опционных свойствах и нулевой цене
Отправлено: atach от 28 Августа 2013, 15:50:19
Я ожидаю её увидеть уже при оформлении заказа (в корзине). Если Вы об этом спрашиваете. Мне не нужно показывать пересчитанный товар в каталоге.

Скидка по правилам назначается не на заказ на товар в корзине (order_items)
Название: Re:Не срабатывает скидка при опционных свойствах и нулевой цене
Отправлено: admin от 28 Августа 2013, 16:01:52
нашел связку кода, в которой видно где надо поправить, но это редактирование ядра, так что в вашем случае:
- либо логически решить вопрос по другому
- либо сделать копию нескольких функций дублирующий функциональность пересчета скидки
- либо редактировать ядро
Название: Re:Не срабатывает скидка при опционных свойствах и нулевой цене
Отправлено: atach от 28 Августа 2013, 16:07:14
т.е. это всё таки проверка в ядре что бы item_price было больше 0?

p.s. можно тогда путь до класса где идет проверка этого всёго ...
Название: Re:Не срабатывает скидка при опционных свойствах и нулевой цене
Отправлено: atach от 28 Августа 2013, 16:09:01
Вариант конечно есть (выход) ... Ставить цену 1 руб.  и к ней добавлять цену опц.свойства уменьшенную на этот же 1 рубль, тогда скидка работает ... но для клиента боюсь не очень удобно это всё
Название: Re:Не срабатывает скидка при опционных свойствах и нулевой цене
Отправлено: admin от 28 Августа 2013, 16:19:35
хм.. прописать пути.

при выводе товаров происходит refresh() (файл /classes/modules/emarket/classes/orders/orderItem.php)

там есть строчка которая определяет скидку товара в корзине
$discount = itemDiscount::search($element);

itemDiscount::search это функция search() в (файле /classes/modules/emarket/classes/discounts/discounts/itemDiscount.php)/ Вней есть тот самый блок

~~~~~~~~~~
switch(sizeof($discounts)) {
            case 0: return null;
            default:
               $elementPrice = $element->price;
               $maxDiscount = null; $minPrice = null;
               foreach($discounts as $i => $discount) {
                  $price = $discount->recalcPrice($elementPrice);
                  if($price <= 0) continue;
                  
                  if(is_null($minPrice) || $minPrice > $price) {
                     $minPrice = $price;
                     $maxDiscount = $discount;
                  }
               }
               return $maxDiscount;
         }
~~~~~~~~~~

Думаю, там он и отпадает
Название: Re:Не срабатывает скидка при опционных свойствах и нулевой цене
Отправлено: atach от 28 Августа 2013, 16:21:16
Спасибо большое ...
Буду разбираться