Helper::doSaveOrder

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. Helper
  4. doSaveOrder
  • Модуль: 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;
}

Добавить комментарий