- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/invoice/compatible/helper.php
- Класс: Bitrix\Crm\Invoice\Compatible\Helper
- Вызов: Helper::doSaveOrder
static function doSaveOrder(&$fields, $additionalFields, $id, &$errors)
{
global $APPLICATION;
$id = (int)$id;
$defFields = array(
"ID" => $fields["ID"],
"LID" => $fields["SITE_ID"],
"PERSON_TYPE_ID" => $fields["PERSON_TYPE_ID"],
"PRICE" => $fields["PRICE"],
"CURRENCY" => $fields["CURRENCY"],
"USER_ID" => $fields["USER_ID"],
"PAY_SYSTEM_ID" => $fields["PAY_SYSTEM_ID"],
"PRICE_DELIVERY" => $fields["DELIVERY_PRICE"],
"DELIVERY_ID" => ($fields["DELIVERY_ID"] <> '' ? $fields["DELIVERY_ID"] : false),
"DISCOUNT_VALUE" => $fields["DISCOUNT_PRICE"],
"TAX_VALUE" => $fields["TAX_VALUE"],
"TRACKING_NUMBER" => $fields["TRACKING_NUMBER"]
);
if ($fields["DELIVERY_PRICE"] == $fields["PRICE_DELIVERY"]
&& isset($fields['PRICE_DELIVERY_DIFF']) && floatval($fields['PRICE_DELIVERY_DIFF']) > 0)
{
$defFields["DELIVERY_PRICE"] = $fields['PRICE_DELIVERY_DIFF'] + $fields["PRICE_DELIVERY"];
}
if ($id <= 0)
{
$defFields["PAYED"] = "N";
$defFields["CANCELED"] = "N";
$defFields["STATUS_ID"] = "N";
}
$defFields = array_merge($defFields, $additionalFields);
// It comes from places like crm_invoice`s Add() and tells us if we need
// to convert location props from ID to CODE.
if(!$fields['LOCATION_IN_CODES'])
{
\CSaleOrder::TranslateLocationPropertyValues($fields["PERSON_TYPE_ID"], $fields["ORDER_PROP"]);
}
unset($fields['LOCATION_IN_CODES']);
$orderFields = array_merge($fields, $defFields, $additionalFields);
if (isset($orderFields['CUSTOM_DISCOUNT_PRICE']) && $orderFields['CUSTOM_DISCOUNT_PRICE'] === true)
Sale\Compatible\DiscountCompatibility::reInit(Sale\Compatible\DiscountCompatibility::MODE_DISABLED);
if ($id > 0)
$orderFields['ID'] = $id;
if (isset($orderFields['ACCOUNT_NUMBER']))
{
$accountNumber = $orderFields['ACCOUNT_NUMBER'];
if (is_string($accountNumber) && $accountNumber <> '' || is_numeric($accountNumber))
{
$res = static::getList(
['ID' => 'ASC'],
[
'ACCOUNT_NUMBER' => $accountNumber,
'!ID' => $id,
],
false,
['nTopCount' => 1],
['ID']
);
if ($res->fetch())
{
$errors[] = Loc::getMessage('CRM_INVOICE_COMPAT_HELPER_EXISTING_ACCOUNT_NUMBER');
return false;
}
}
}
/** @var Sale\Result $r */
$r = Invoice::modifyOrder(Invoice::ORDER_COMPAT_ACTION_SAVE, $orderFields);
if ($r->isSuccess())
{
$id = $r->getId();
}
else
{
foreach ($r->getErrorMessages() as $error)
{
$errors[] = $error;
$APPLICATION->ThrowException($error);
}
return false;
}
return $id;
}