TransportBase::copyOrder

  1. Bitrix24 API (v. 23.675.0)
  2. sender
  3. TransportBase
  4. copyOrder
  • Модуль: sender
  • Путь к файлу: ~/bitrix/modules/sender/lib/integration/crm/returncustomer/transportbase.php
  • Класс: Bitrix\Sender\Integration\Crm\ReturnCustomer\TransportBase
  • Вызов: TransportBase::copyOrder
protected function copyOrder($formDealId, $toDealId)
{
	if ($data = $this->getOrderData($formDealId))
	{
		$registry = \Bitrix\Sale\Registry::getInstance( \Bitrix\Sale\Registry::REGISTRY_TYPE_ORDER);
		$orderClassName = $registry->getOrderClassName();

		/** @var Order $order */
		$order = $orderClassName::load($data['PAYMENT_ORDER_ID']);
		if ($order)
		{
			/** @var Order $newOrder */
			$newOrder = $orderClassName::create($order->getSiteId(), $order->getUserId(), $order->getCurrency());

			/** @var Basket $basketClassName */
			$basketClassName = $registry->getBasketClassName();

			$newBasket = $basketClassName::create($order->getSiteId());
			/** @var BasketItem $item */
			foreach ($order->getBasket() as $item)
			{
				$basketItem = $newBasket->createItem($item->getField('MODULE'), $item->getProductId());
				$basketItem->setFields([
					'PRODUCT_PROVIDER_CLASS' => $item->getField('PRODUCT_PROVIDER_CLASS'),
					'QUANTITY' => $item->getQuantity(),
					'CURRENCY' => $item->getCurrency(),
					'BASE_PRICE' => $item->getBasePrice(),
					'PRICE' => $item->getPrice(),
					'CUSTOM_PRICE' => $item->isCustomPrice() ? 'Y' : 'N',

				]);
			}

			$newOrder->setBasket($newBasket);

			/** @var Payment $payment */
			$payment = $order->getPaymentCollection()->getItemById($data['PAYMENT_ID']);
			if ($payment)
			{
				$newPayment = $newOrder->getPaymentCollection()->createItem();
				$newPayment->setFields([
					'PAY_SYSTEM_ID' => $payment->getPaymentSystemId(),
					'PAY_SYSTEM_NAME' => $payment->getPaymentSystemName(),
					'PS_RECURRING_TOKEN' => $payment->getField('PS_RECURRING_TOKEN'),
					'SUM' => $payment->getSum(),
				]);
			}

			/** @var \Bitrix\Sale\Shipment $newShipment */
			$newShipment = $newOrder->getShipmentCollection()->createItem();
			foreach ($newBasket as $item)
			{
				$newShipmentItem = $newShipment->getShipmentItemCollection()->createItem($item);
				$newShipmentItem->setQuantity($item->getQuantity());
			}

			$binding = $newOrder->createEntityBinding();
			$binding->setField('OWNER_ID', $toDealId);
			$binding->setField('OWNER_TYPE_ID', \CCrmOwnerType::Deal);

			/** @var ContactCompanyEntity $item */
			foreach ($order->getContactCompanyCollection()->getCompanies() as $item)
			{
				/** @var Company $newCompany */
				$newCompany = $newOrder->getContactCompanyCollection()->createCompany();
				$newCompany->setField('ENTITY_ID', $item->getField('ENTITY_ID'));
				$newCompany->setField('IS_PRIMARY', $item->getField('IS_PRIMARY'));
			}

			/** @var ContactCompanyEntity $item */
			foreach ($order->getContactCompanyCollection()->getContacts() as $item)
			{
				/** @var Contact $newContact */
				$newContact = $newOrder->getContactCompanyCollection()->createContact();
				$newContact->setField('ENTITY_ID', $item->getField('ENTITY_ID'));
				$newContact->setField('IS_PRIMARY', $item->getField('IS_PRIMARY'));
			}

			$newOrder->refreshData();
			$newOrder->doFinalAction();

			$newOrder->save();
		}
	}
}

Добавить комментарий