Пример #1
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;
 }