• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/helpers/order/builder/orderbuilderexist.php
  • Класс: BitrixSaleHelpersOrderBuilderOrderBuilderExist
  • Вызов: OrderBuilderExist::setUser
public function setUser()
{
	$currentUserId = (int)$this->builder->getOrder()->getUserId();

	$formDataUserId = (int)($this->builder->getFormData()['USER_ID'] ?? 0);
	$isChanged = ($formDataUserId > 0) && ($currentUserId !== $formDataUserId);
	if ($currentUserId && $isChanged)
	{
		$paymentCollection = $this->builder->getOrder()->getPaymentCollection();
		/** @var BitrixSalePayment $payment */
		foreach ($paymentCollection as $payment)
		{
			if ($payment->isPaid())
			{
				$this->builder->getErrorsContainer()->addError(new Error(
					Loc::getMessage("SALE_HLP_OBE_CHANGE_USER_ERROR")
					, 'SALE_ORDEREDIT_ERROR_CHANGE_USER_WITH_PAID_PAYMENTS'));
			}
		}
	}

	if ($formDataUserId > 0)
	{
		$this->builder->getOrder()->setFieldNoDemand(
			"USER_ID",
			$this->builder->getUserId()
		);
	}

	if ($isChanged)
	{
		$personTypeId =  (int)$this->builder->getOrder()->getPersonTypeId();
		$resultLoading = BitrixSaleOrderUserProperties::loadProfiles($formDataUserId, $personTypeId);
		if (!$resultLoading->isSuccess())
		{
			return;
		}
		$profiles = $resultLoading->getData();
		if (!is_array($profiles[$personTypeId]))
		{
			return;
		}
		$currentProfile = current($profiles[$personTypeId]);
		if (empty($currentProfile))
		{
			return;
		}
		$values = $currentProfile['VALUES'];
		$propertyCollection = $this->builder->getOrder()->getPropertyCollection();
		$propertyCollection->setValuesFromPost(
			['PROPERTIES' => $values],[]
		);
	}
}