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