Ejemplo n.º 1
0
 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]);
                 }
             }
         }
     }
 }
Ejemplo n.º 2
0
 /**
  * @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
                ]);
            } */
     }
 }