- Модуль: 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;
}