- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/tax.php
- Класс: BitrixSaleTax
- Вызов: Tax::calculate
public function calculate()
{
/** @var Result $result */
$result = new Result();
/** @var Order $order */
if (!$order = $this->getOrder())
{
throw new MainObjectNotFoundException('Entity "Order" not found');
}
$taxResult = array();
$taxList = $this->getTaxList();
$taxExempt = static::loadExemptList($order->getUserId());
$fields = array(
"SITE_ID" => $order->getSiteid(),
"PERSON_TYPE_ID" => $order->getPersonTypeId(),
"TAX_LOCATION" => $order->getTaxLocation(),
"CURRENCY" => $order->getCurrency(),
"USE_VAT" => $order->isUsedVat(),
"VAT_RATE" => $order->getVatRate(),
"VAT_SUM" => $order->getVatSum(),
);
if (is_array($taxExempt))
{
$fields['TAX_EXEMPT'] = $taxExempt;
}
if (is_array($taxList) && !empty($taxList))
{
$fields['TAX_LIST'] = $taxList;
}
/** @var Basket $basket */
$basket = $order->getBasket();
if (empty($basket))
return $result;
/** @var BasketItem $basketItem */
foreach ($basket as $basketItem)
{
if ($basketItem->getQuantity() == 0)
continue;
$fields['BASKET_ITEMS'][] = $basketItem->getFieldValues();
}
/** @var CSaleTax $className */
$className = static::getTaxClassName();
$className::calculateTax($fields, array());
if (!$order->isUsedVat() && isset($fields['TAX_LIST']) && is_array($fields['TAX_LIST']))
{
$taxResult['TAX_LIST'] = $fields['TAX_LIST'];
}
if (array_key_exists('TAX_PRICE', $fields) && floatval($fields['TAX_PRICE']) >= 0)
{
$taxResult['TAX_PRICE'] = $fields['TAX_PRICE'];
}
if (array_key_exists('VAT_SUM', $fields) && floatval($fields['VAT_SUM']) > 0)
{
$taxResult['VAT_SUM'] = $fields['VAT_SUM'];
}
if (array_key_exists('TAX_LIST', $fields))
{
$newTaxList = $this->checkModifyTaxList($fields['TAX_LIST']);
$taxResult['TAX_LIST'] = $newTaxList;
$this->list = $newTaxList;
}
if (!$order->isUsedVat() && empty($this->list) && is_array($this->list))
{
$taxResult['TAX_PRICE'] = 0;
}
if (!empty($taxResult))
{
$result->setData($taxResult);
}
return $result;
}