• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/compatible/ordercompatibility.php
  • Класс: BitrixSaleCompatibleOrderCompatibility
  • Вызов: OrderCompatibility::fillOrderFromRequest
static function fillOrderFromRequest(SaleOrder $order, array $fields)
{
	global $USER;
	$result = new SaleResult();
	if (isset($fields['CANCELED']))
	{
		if ($order->getId() > 0 && $order->getField('CANCELED') != $fields['CANCELED'])
		{
			if (!(CSaleOrder::CanUserCancelOrder($order->getId(), $USER->GetUserGroupArray(), $USER->GetID())))
			{
				$result->addError( new SaleResultError(MainLocalizationLoc::getMessage('SALE_COMPATIBLE_ORDER_CANCEL_NO_PERMISSION'), 'SALE_COMPATIBLE_ORDER_CANCEL_NO_PERMISSION') );
				return $result;
			}

			/** @var SaleResult $r */
			$r = $order->setField('CANCELED', $fields['CANCELED']);
			if (!$r->isSuccess())
			{
				$result->addErrors($r->getErrors());
				return $result;
			}

			if (array_key_exists("REASON_CANCELED", $fields))
			{
				/** @var SaleResult $r */
				$r = $order->setField('REASON_CANCELED', $fields['REASON_CANCELED']);
				if (!$r->isSuccess())
				{
					$result->addErrors($r->getErrors());
					return $result;
				}
			}

		}
	}


	if (isset($fields['MARKED']))
	{
		if ($order->getId() > 0)
		{
			if ($fields['MARKED'] == 'Y')
			{
				$reasonMarked = '';
				if (!empty($fields['REASON_MARKED']))
				{
					$reasonMarked = trim($fields['REASON_MARKED']);
				}

				$r = new SaleResult();
				$r->addError(new SaleResultWarning($reasonMarked, 'SALE_ORDER_MARKER_ERROR'));

				$registry = SaleRegistry::getInstance(static::getRegistryType());

				/** @var SaleEntityMarker $entityMarkerClassName */
				$entityMarkerClassName = $registry->getEntityMarkerClassName();
				$entityMarkerClassName::addMarker($order, $order, $r);
			}

			if ($order->getField('MARKED') != $fields['MARKED'])
			{
				/** @var SaleResult $r */
				$r = $order->setField('MARKED', $fields['MARKED']);
				if (!$r->isSuccess())
				{
					$result->addErrors($r->getErrors());
				}
			}
		}
	}

	if ($order->getId() > 0 && !empty($fields['ACCOUNT_NUMBER']) && !empty($fields['SITE_ID']))
	{
		$filter = array(
			'filter' => array(
				'=ACCOUNT_NUMBER' => $fields['ACCOUNT_NUMBER'],
				'!ID' => $order->getId()
			),
			'select' => array('ID')
		);

		$registry = SaleRegistry::getInstance(static::getRegistryType());

		/** @var SaleOrder $orderClassName */
		$orderClassName = $registry->getOrderClassName();
		if (($res = $orderClassName::getList($filter)) && ($res->fetch()))
		{
			$result->addError(new SaleResultError(MainLocalizationLoc::getMessage('SALE_COMPATIBLE_ORDER_ACCOUNT_NUMBER_ALREADY_EXISTS'), 'SALE_COMPATIBLE_ORDER_ACCOUNT_NUMBER_ALREADY_EXISTS'));
		}
	}


	return $result;
}