public static function handleSaveDiscounts(OrderCalculateEvent $event) { if (OrderCalculateEvent::BEFORE_CALCULATE !== $event->state) { return null; } self::getAllDiscounts(); foreach (self::$allDiscounts as $discountTypeName => $discountType) { if (in_array($discountTypeName, ['order_without_delivery', 'order_with_delivery', 'delivery'])) { foreach ($discountType as $discount) { $discountFlag = false; foreach (Discount::getTypeObjects() as $discountTypeObject) { $discountFlag = $discountTypeObject->checkDiscount($discount, null, $event->order); if ($discountFlag === false) { break; } } $special_price_list_id = SpecialPriceList::find()->where(['handler' => 'getDiscountPriceOrder', 'object_id' => $event->order->object->id])->one()->id; if ($discountFlag === true && $event->price > 0) { $oldPrice = $event->price; $deliveryPrice = SpecialPriceObject::getSumPrice($event->order->id, SpecialPriceList::TYPE_DELIVERY); $price = $discount->getDiscountPrice($oldPrice, $deliveryPrice); $discountPrice = $price - $oldPrice; SpecialPriceObject::setObject($special_price_list_id, $event->order->id, $discountPrice, $discount->name); } else { SpecialPriceObject::deleteAll(['special_price_list_id' => $special_price_list_id, 'object_model_id' => $event->order->id]); } } } } }
/** * @param OrderCalculateEvent $event * @return null */ public static function handleSaveDiscounts(OrderCalculateEvent $event) { if (OrderCalculateEvent::BEFORE_CALCULATE !== $event->state) { return null; } static $discounts = null; if (null === $discounts) { $discounts = self::getDiscountsByAppliance(['order_without_delivery', 'order_with_delivery', 'delivery']); } foreach ($discounts as $discount) { /** @var Discount $discount */ $discountFlag = 0; foreach (Discount::getTypeObjects() as $discountTypeObject) { /** @var AbstractDiscountType $discountTypeObject */ if (true === $discountTypeObject->checkDiscount($discount, null, $event->order)) { $discountFlag++; } } $special_price_list_id = SpecialPriceList::find()->where(['handler' => 'getDiscountPriceOrder', 'object_id' => $event->order->object->id])->one()->id; if ($discountFlag > 0 && $event->price > 0 && ($discount->apply_order_price_lg !== -1 && $event->order->total_price > $discount->apply_order_price_lg)) { $oldPrice = $event->price; $deliveryPrice = SpecialPriceObject::getSumPrice($event->order->id, SpecialPriceList::TYPE_DELIVERY); $price = $discount->getDiscountPrice($oldPrice, $deliveryPrice); $discountPrice = $price - $oldPrice; SpecialPriceObject::setObject($special_price_list_id, $event->order->id, $discountPrice, $discount->name); } /** Данный кусок удаляет все объекты, если одна из скидок не применилась! */ /* else { SpecialPriceObject::deleteAll([ 'special_price_list_id' => $special_price_list_id, 'object_model_id' => $event->order->id ]); } */ } }