• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/orderbase.php
  • Класс: BitrixSaleOrderBase
  • Вызов: OrderBase::onFieldModify
protected function onFieldModify($name, $oldValue, $value)
{
	global $USER;

	$result = new Result();

	if ($name !== 'UPDATED_1C' && !$this->getFields()->isChanged('UPDATED_1C'))
	{
		$this->setField("UPDATED_1C", "N");
	}

	if ($name == "PRICE")
	{
		/** @var Result $r */
		$r = $this->refreshVat();
		if (!$r->isSuccess())
		{
			$result->addErrors($r->getErrors());
			return $result;
		}
	}
	elseif ($name == "CURRENCY")
	{
		throw new MainNotImplementedException('field CURRENCY');
	}
	elseif ($name == "CANCELED")
	{
		$event = new MainEvent('sale', EventActions::EVENT_ON_BEFORE_ORDER_CANCELED, array(
			'ENTITY' => $this
		));
		$event->send();

		if ($event->getResults())
		{
			/** @var MainEventResult $eventResult */
			foreach($event->getResults() as $eventResult)
			{
				if($eventResult->getType() == MainEventResult::ERROR)
				{
					$errorMsg = new ResultError(
						MainLocalizationLoc::getMessage('SALE_EVENT_ON_BEFORE_ORDER_CANCELED_ERROR'),
						'SALE_EVENT_ON_BEFORE_ORDER_CANCELED_ERROR'
					);
					if ($eventResultData = $eventResult->getParameters())
					{
						if (isset($eventResultData) && $eventResultData instanceof ResultError)
						{
							/** @var ResultError $errorMsg */
							$errorMsg = $eventResultData;
						}
					}

					$result->addError($errorMsg);
				}
			}
		}

		if (!$result->isSuccess())
		{
			return $result;
		}

		$r = $this->onOrderModify($name, $oldValue, $value);
		if (!$r->isSuccess())
		{
			$result->addErrors($r->getErrors());
			return $result;
		}

		$this->setField('DATE_CANCELED', new TypeDateTime());

		if (is_object($USER) && $USER->isAuthorized())
		{
			$this->setField('EMP_CANCELED_ID', $USER->getID());
		}

		InternalsEventsPool::addEvent(
			$this->getInternalId(),
			EventActions::EVENT_ON_ORDER_CANCELED,
			array('ENTITY' => $this)
		);

		InternalsEventsPool::addEvent(
			$this->getInternalId(),
			EventActions::EVENT_ON_ORDER_CANCELED_SEND_MAIL,
			array('ENTITY' => $this)
		);
	}
	elseif ($name == "USER_ID")
	{
		throw new MainNotImplementedException('field USER_ID');
	}
	elseif($name == "MARKED")
	{
		if ($oldValue != "Y")
		{
			$this->setField('DATE_MARKED', new TypeDateTime());

			if (is_object($USER) && $USER->isAuthorized())
			{
				$this->setField('EMP_MARKED_ID', $USER->getID());
			}
		}
		elseif ($value == "N")
		{
			$this->setField('REASON_MARKED', '');
		}
	}
	elseif ($name == "STATUS_ID")
	{
		$event = new MainEvent('sale', EventActions::EVENT_ON_BEFORE_ORDER_STATUS_CHANGE, array(
			'ENTITY' => $this,
			'VALUE' => $value,
			'OLD_VALUE' => $oldValue,
		));
		$event->send();

		if ($event->getResults())
		{
			/** @var MainEventResult $eventResult */
			foreach($event->getResults() as $eventResult)
			{
				if($eventResult->getType() == MainEventResult::ERROR)
				{
					$errorMsg = new ResultError(
						MainLocalizationLoc::getMessage('SALE_EVENT_ON_BEFORE_ORDER_STATUS_CHANGE_ERROR'),
						'SALE_EVENT_ON_BEFORE_ORDER_STATUS_CHANGE_ERROR'
					);
					if ($eventResultData = $eventResult->getParameters())
					{
						if (isset($eventResultData) && $eventResultData instanceof ResultError)
						{
							/** @var ResultError $errorMsg */
							$errorMsg = $eventResultData;
						}
					}

					$result->addError($errorMsg);
				}
			}
		}

		if (!$result->isSuccess())
		{
			return $result;
		}

		$this->setField('DATE_STATUS', new TypeDateTime());

		if (is_object($USER) && $USER->isAuthorized())
		{
			$this->setField('EMP_STATUS_ID', $USER->GetID());
		}

		InternalsEventsPool::addEvent($this->getInternalId(), EventActions::EVENT_ON_ORDER_STATUS_CHANGE, array(
			'ENTITY' => $this,
			'VALUE' => $value,
			'OLD_VALUE' => $oldValue,
		));

		InternalsEventsPool::addEvent($this->getInternalId(), EventActions::EVENT_ON_ORDER_STATUS_CHANGE_SEND_MAIL, array(
			'ENTITY' => $this,
			'VALUE' => $value,
			'OLD_VALUE' => $oldValue,
		));

		if ($this->isStatusChangedOnPay($value, $oldValue))
		{
			InternalsEventsPool::addEvent($this->getInternalId(), EventActions::EVENT_ON_ORDER_STATUS_ALLOW_PAY_CHANGE, array(
				'ENTITY' => $this,
				'VALUE' => $value,
				'OLD_VALUE' => $oldValue,
			));
		}
	}

	return $result;
}