/** * Найти наиболее подходящую скидку для заказа $order * @param order $order заказ * @return orderDiscount самая подходящая скидка для заказа $order */ public static function search(order $order) { $cmsController = cmsController::getInstance(); $emarket = $cmsController->getModule('emarket'); if($emarket instanceof def_module == false) { throw new coreException('Emarket module must be installed in order to calculate discounts'); } $allDiscounts = $emarket->getAllDiscounts('bonus'); $discounts = array(); foreach($allDiscounts as $discountObject) { $discount = discount::get($discountObject->id); if($discount instanceof bonusDiscount == false) continue; if($discount->validate($order)) $discounts[] = $discount; } switch(sizeof($discounts)) { case 0: return null; default: $orderPrice = $order->getOriginalPrice(); $maxDiscount = null; $minPrice = null; foreach($discounts as $i => $discount) { $price = $discount->recalcPrice($orderPrice); if($price <= 0) continue; if(is_null($minPrice) || $minPrice > $price) { $minPrice = $price; $maxDiscount = $discount; } } return $maxDiscount; } }
/** * Найти наиболее оптимальную скидку для товара $element * @param iUmiHierarchyElement $element товар в каталоге * @return itemDiscount скидка на товар */ public static final function search(iUmiHierarchyElement $element) { $cmsController = cmsController::getInstance(); $emarket = $cmsController->getModule('emarket'); if ($emarket instanceof def_module == false) { throw new privateException('Emarket module must be installed in order to calculate discounts'); } $allDiscounts = $emarket->getAllDiscounts('item'); $discounts = array(); foreach ($allDiscounts as $discountObject) { $discount = discount::get($discountObject->id); if ($discount instanceof itemDiscount == false) { continue; } if ($discount->validate($element)) { $discounts[] = $discount; } } 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; } }
public function getRules($discountTypeId = false, $discountId = false) { $items = discountRule::getList($discountTypeId); if ($discountId) { $discount = discount::get($discountId); $discountRules = $discount->getDiscountRules(); $discountRulesId = array(); foreach ($discountRules as $rule) { $discountRulesId[] = $rule->getObject()->rule_type_id; } foreach ($items as $i => $rule) { $items[$i] = array('attribute:id' => $rule->id, 'attribute:name' => $rule->name); if (in_array($rule->id, $discountRulesId)) { $items[$i]['attribute:selected'] = 'selected'; } } } return array('items' => array('nodes:item' => $items)); }