- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_invoice.php
- Класс: \CAllCrmInvoice
- Вызов: CAllCrmInvoice::QuickRecalculate
static function QuickRecalculate($arFields, $siteId = SITE_ID)
{
if(!CModule::IncludeModule('sale'))
{
return array('err'=> '1');
}
$tmpOrderId = isset($arFields['ID']) ? intval($arFields['ID']) : 0;
if($tmpOrderId < 0)
{
$tmpOrderId = 0;
}
$saleUserId = intval(CSaleUser::GetAnonymousUserID());
if ($saleUserId <= 0)
{
return array('err'=> '2');
}
$arProduct = isset($arFields['PRODUCT_ROWS']) && is_array($arFields['PRODUCT_ROWS'])
? $arFields['PRODUCT_ROWS'] : array();
if(empty($arProduct))
{
return array('err'=> '3');
}
$currencyId = CCrmInvoice::GetCurrencyID($siteId);
foreach ($arProduct as &$productRow)
{
if (isset($productRow['PRODUCT_NAME']))
{
$productRow['NAME'] = $productRow['PRODUCT_NAME'];
unset($productRow['PRODUCT_NAME']);
}
if (isset($productRow['PRICE']))
{
$productRow['PRICE_DEFAULT'] = $productRow['PRICE'];
}
if (!isset($productRow['CURRENCY']))
{
$productRow['CURRENCY'] = $currencyId;
}
$productRow['MODULE'] = 'catalog';
$productRow['PRODUCT_PROVIDER_CLASS'] = 'CCatalogProductProvider';
$productRow['CALLBACK_FUNC'] = 'Y';
}
unset($productRow);
$arOrderProductPrice = self::__fGetUserShoppingCart($arProduct, $siteId, 'N');
foreach ($arOrderProductPrice as &$arItem) // tmp hack not to update basket quantity data from catalog
{
$arItem['ID_TMP'] = $arItem['ID'];
unset($arItem['ID']);
}
unset($arItem);
$arErrors = array();
$arShoppingCart = Compatible\BasketHelper::doGetUserShoppingCart(
$siteId, $saleUserId, $arOrderProductPrice, $arErrors, $tmpOrderId
);
foreach ($arShoppingCart as $key => &$arItem)
{
$arItem['ID'] = $arItem['ID_TMP'];
unset($arItem['ID_TMP']);
}
unset($arItem);
$personTypeId = isset($arFields['PERSON_TYPE_ID']) ? intval($arFields['PERSON_TYPE_ID']) : 0;
if($personTypeId <= 0)
{
$arPersonTypes = CCrmPaySystem::getPersonTypeIDs();
if (isset($arPersonTypes['CONTACT']))
$personTypeId = intval($arPersonTypes['CONTACT']);
}
if ($personTypeId <= 0)
{
return array('err'=> '4');
}
$arOrderPropsValues = array();
if (isset($arFields['INVOICE_PROPERTIES']) && is_array($arFields['INVOICE_PROPERTIES']) && count($arFields['INVOICE_PROPERTIES']) > 0)
{
$arOrderPropsValues = $arFields['INVOICE_PROPERTIES'];
}
if (isset($arFields['INVOICE_PROPERTIES']))
{
unset($arFields['INVOICE_PROPERTIES']);
}
if (count($arOrderPropsValues) <= 0)
{
return array('err'=> '5');
}
$deliveryId = null;
$paySystemId = isset($arFields['PAY_SYSTEM_ID']) ? intval($arFields['PAY_SYSTEM_ID']) : 0;
$arOptions = array(
'LOCATION_IN_CODES' => true, // let DoCalculateOrder know we send location in CODEs
'CART_FIX' => 'Y',
'CURRENCY' => $currencyId
);
$arErrors = array();
$arWarnings = array();
$invoiceCompatible = Compatible\Invoice::create($arFields);
$arOptions['ORDER'] = $invoiceCompatible->getOrder();
return CSaleOrder::DoCalculateOrder(
$siteId,
$saleUserId,
$arShoppingCart,
$personTypeId,
$arOrderPropsValues,
$deliveryId,
$paySystemId,
$arOptions,
$arErrors,
$arWarnings
);
}