CCrmAccountingHelper::calculateAccountingData

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CCrmAccountingHelper
  4. calculateAccountingData
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_accounting_helper.php
  • Класс: \CCrmAccountingHelper
  • Вызов: CCrmAccountingHelper::calculateAccountingData
static function calculateAccountingData(array $newValue, array $oldValue = [], bool $calculateTax = false): array
{
	$result = [];

	$currencyId = $newValue['CURRENCY_ID'] ?? $oldValue['CURRENCY_ID'] ?? null;
	$exchangeRate = $newValue['EXCH_RATE'] ?? $oldValue['EXCH_RATE'] ?? null;
	if (!$exchangeRate && $currencyId)
	{
		$exchangeRate = CCrmCurrency::GetExchangeRate($currencyId);
	}
	// if currency changed and exchangeRate is not directly set, need to update it
	if (
		isset($newValue['CURRENCY_ID'])
		&& isset($oldValue['CURRENCY_ID'])
		&& $newValue['CURRENCY_ID'] !== $oldValue['CURRENCY_ID']
		&& !isset($newValue['EXCH_RATE'])
	)
	{
		$exchangeRate = CCrmCurrency::GetExchangeRate($currencyId);
	}
	$accData = self::PrepareAccountingData(
		[
			'CURRENCY_ID' => $currencyId,
			'SUM' => $newValue['OPPORTUNITY'] ?? $oldValue['OPPORTUNITY'] ?? null,
			'EXCH_RATE' => $exchangeRate,
		]
	);
	if (is_array($accData))
	{
		$result['EXCH_RATE'] = $exchangeRate;
		$result['ACCOUNT_CURRENCY_ID'] = $accData['ACCOUNT_CURRENCY_ID'];
		$result['OPPORTUNITY_ACCOUNT'] = $accData['ACCOUNT_SUM'];
	}
	if ($calculateTax)
	{
		$accData = self::PrepareAccountingData(
			[
				'CURRENCY_ID' => $currencyId,
				'SUM' => $newValue['TAX_VALUE'] ?? $oldValue['TAX_VALUE'] ?? null,
				'EXCH_RATE' => $exchangeRate,
			]
		);
		if (is_array($accData))
		{
			$result['EXCH_RATE'] = $exchangeRate;
			$result['TAX_VALUE_ACCOUNT'] = $accData['ACCOUNT_SUM'];
		}
	}

	return $result;
}

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