/** * */ 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; }
/** * @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; }