/** * @param $formData * @return Sale\Order * @throws ArgumentNullException * @throws UserMessageException */ protected function getOrder(array $formData, Result &$result = null) { if (!isset($formData["ID"])) { $formData["ID"] = 0; } else { $formData["ID"] = intval($formData["ID"]); } if ($this->order !== null && !$this->formDataChanged && $this->order->getId() == $formData["ID"]) { return $this->order; } if (!$result) { $result = new Result(); } Admin\OrderEdit::initCouponsData(intval($formData["USER_ID"]) > 0 ? intval($formData["USER_ID"]) : 0, intval($formData["ID"]) > 0 ? intval($formData["ID"]) : 0, intval($formData["OLD_USER_ID"]) > 0 ? intval($formData["OLD_USER_ID"]) : null); if ($formData["ID"] > 0) { $this->order = Sale\Order::load($formData["ID"]); if (!$this->order) { throw new UserMessageException("Can't load order with id:\"" . $formData["ID"] . "\"!"); } } else { $this->order = Admin\OrderEdit::createOrderFromForm($formData, $this->userId, false, array(), $result); if (!$this->order) { throw new UserMessageException("Can't create order!"); } } $this->formDataChanged = false; return $this->order; }
$formData["PRODUCT"] = array(); $basketCode = 1; foreach ($_GET["product"] as $productId => $quantity) { $productParams = Blocks\OrderBasket::getProductDetails($productId, $quantity, $formData["USER_ID"], $formData["SITE_ID"]); if (!is_array($productParams) || empty($productParams)) { continue; } $formData["PRODUCT"][$basketCode] = $productParams; $formData["PRODUCT"][$basketCode]["BASKET_CODE"] = $basketCode; $basketCode++; } if (empty($formData["PRODUCT"])) { unset($formData["PRODUCT"]); } } $order = OrderEdit::createOrderFromForm($formData, $USER->GetID(), false, array(), $result); if (!$order) { $result->addError(new \Bitrix\Main\Entity\EntityError("Can't create order!")); } } elseif ($isCopyingOrderOperation) { /** @var \Bitrix\Sale\Order $originalOrder */ $originalOrder = Bitrix\Sale\Order::load($ID); if ($originalOrder) { $order = \Bitrix\Sale\Order::create($originalOrder->getSiteId(), $originalOrder->getUserId(), $originalOrder->getCurrency()); $order->setPersonTypeId($originalOrder->getPersonTypeId()); $originalPropCollection = $originalOrder->getPropertyCollection(); $properties['PROPERTIES'] = array(); $files = array(); /** @var \Bitrix\Sale\PropertyValue $prop */ foreach ($originalPropCollection as $prop) { if ($prop->getField('TYPE') == 'FILE') {