Пример #1
0
 /**
  *
  */
 public function delete()
 {
     $result = new Result();
     /** @var Basket $basket */
     if (!($basket = $this->getCollection())) {
         throw new ObjectNotFoundException('Entity "Basket" not found');
     }
     /** @var Order $order */
     if ($order = $basket->getOrder()) {
         /** @var ShipmentCollection $shipmentCollection */
         if ($shipmentCollection = $order->getShipmentCollection()) {
             /** @var Shipment $shipment */
             foreach ($shipmentCollection as $shipment) {
                 if ($shipment->isSystem()) {
                     continue;
                 }
                 /** @var ShipmentItemCollection $shipmentItemCollection */
                 if ($shipmentItemCollection = $shipment->getShipmentItemCollection()) {
                     if ($shipmentItemCollection->getItemByBasketCode($this->getBasketCode()) && $shipment->isShipped()) {
                         $result->addError(new ResultError(Loc::getMessage('SALE_BASKET_ITEM_REMOVE_IMPOSSIBLE_BECAUSE_SHIPPED', array('#PRODUCT_NAME#' => $this->getField('NAME'))), 'SALE_BASKET_ITEM_REMOVE_IMPOSSIBLE_BECAUSE_SHIPPED'));
                         return $result;
                     }
                 }
             }
         }
     }
     $r = $this->setField("QUANTITY", 0);
     if (!$r->isSuccess()) {
         $result->addErrors($r->getErrors());
         return $result;
     }
     $bundleCollection = null;
     if ($this->isBundleParent()) {
         /** @var Basket $bundleCollection */
         $bundleCollection = $this->getBundleCollection();
     }
     if (!$this->isBundleChild()) {
         /** @var Result $r */
         $r = parent::delete();
         if (!$r->isSuccess()) {
             $result->addErrors($r->getErrors());
             return $result;
         }
     }
     if ($bundleCollection !== null) {
         /** @var BasketItem $bundleBasketItem */
         foreach ($bundleCollection as $bundleBasketItem) {
             /** @var Result $r */
             $r = $bundleBasketItem->delete();
             if (!$r->isSuccess()) {
                 $result->addErrors($r->getErrors());
             }
         }
     }
     return $result;
 }
Пример #2
0
 /**
  * @param array $oldOrder
  * @return Shipment
  * @internal
  */
 public static function convertOrderOldToNew(array $oldOrder)
 {
     $siteId = isset($oldOrder["SITE_ID"]) ? $oldOrder["SITE_ID"] : SITE_ID;
     $newOrder = \Bitrix\Sale\Order::create($siteId, null, $oldOrder["CURRENCY"]);
     $dbPersonType = \CSalePersonType::GetList(array("SORT" => "ASC", "NAME" => "ASC"), array("ACTIVE" => "Y", "LID" => $siteId));
     if ($arPersonType = $dbPersonType->GetNext()) {
         $personTypeId = $arPersonType["ID"];
     } else {
         $personTypeId = 1;
     }
     $newOrder->setPersonTypeId($personTypeId);
     $newOrder->setFieldNoDemand("PRICE", $oldOrder["PRICE"]);
     $basket = \Bitrix\Sale\Basket::create($siteId);
     $settableFields = array_flip(\Bitrix\Sale\BasketItemBase::getSettableFields());
     if (!empty($oldOrder["ITEMS"]) && is_array($oldOrder["ITEMS"])) {
         foreach ($oldOrder["ITEMS"] as $oldBasketItem) {
             $newBasketItem = $basket->createItem($oldBasketItem["MODULE"], $oldBasketItem["PRODUCT_ID"]);
             $oldBasketItem = array_intersect_key($oldBasketItem, $settableFields);
             $newBasketItem->setFieldsNoDemand($oldBasketItem);
         }
     }
     $props = $newOrder->getPropertyCollection();
     if (!empty($oldOrder['PROPERTIES']) && is_array($oldOrder['PROPERTIES'])) {
         $r = $props->setValuesFromPost($oldOrder, $_FILES);
     }
     $newOrder->setBasket($basket);
     if ($loc = $props->getDeliveryLocation()) {
         $loc->setValue($oldOrder["LOCATION_TO"]);
     }
     if ($loc = $props->getDeliveryLocationZip()) {
         $loc->setValue($oldOrder["LOCATION_ZIP"]);
     }
     /** @var \Bitrix\Sale\ShipmentCollection $shipmentCollection */
     $shipmentCollection = $newOrder->getShipmentCollection();
     $shipment = $shipmentCollection->createItem();
     $shipment->setField("CURRENCY", $oldOrder["CURRENCY"]);
     $shipmentItemCollection = $shipment->getShipmentItemCollection();
     foreach ($newOrder->getBasket() as $item) {
         $shipmentItem = $shipmentItemCollection->createItem($item);
         $shipmentItem->setQuantity($item->getQuantity());
         if (strlen($shipmentItem->getField("DIMENSIONS"))) {
             $shipmentItem->setField("DIMENSIONS", unserialize($shipmentItem->getField("DIMENSIONS")));
         }
     }
     if (isset($arOrder["DELIVERY_EXTRA_SERVICES"])) {
         $shipment->setExtraServices($arOrder["DELIVERY_EXTRA_SERVICES"]);
     }
     return $shipment;
 }