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