- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_product_row.php
- Класс: \CAllCrmProductRow
- Вызов: CAllCrmProductRow::LoadRows
static function LoadRows($ownerType, $ownerID, $assoc = false)
{
$ownerType = strval($ownerType);
$filter = array();
if(isset($ownerType[0]))
{
$filter['OWNER_TYPE'] = $ownerType;
}
if(is_array($ownerID))
{
if(count($ownerID) > 0)
{
$filter['@OWNER_ID'] = $ownerID;
}
}
else
{
$ownerID = (int)$ownerID;
if($ownerID > 0)
{
$filter['OWNER_ID'] = $ownerID;
}
}
$measurelessProductIDs = array();
$dbRes = self::GetList(array('SORT' => 'ASC', 'ID'=>'ASC'), $filter);
$results = array();
while($ary = $dbRes->Fetch())
{
$productID = $ary['PRODUCT_ID'] = isset($ary['PRODUCT_ID']) ? intval($ary['PRODUCT_ID']) : 0;
$ary['QUANTITY'] = isset($ary['QUANTITY']) ? round((float)$ary['QUANTITY'], 4) : 0.0;
$ary['PRICE'] = isset($ary['PRICE']) ? round((float)$ary['PRICE'], 2) : 0.0;
$ary['PRICE_EXCLUSIVE'] = isset($ary['PRICE_EXCLUSIVE']) ? round((float)$ary['PRICE_EXCLUSIVE'], 2) : 0.0;
$ary['PRICE_NETTO'] = isset($ary['PRICE_NETTO']) ? round((float)$ary['PRICE_NETTO'], 2) : 0.0;
$ary['PRICE_BRUTTO'] = isset($ary['PRICE_BRUTTO']) ? round((float)$ary['PRICE_BRUTTO'], 2) : 0.0;
$ary['DISCOUNT_TYPE_ID'] = isset($ary['DISCOUNT_TYPE_ID'])
? (int)$ary['DISCOUNT_TYPE_ID'] : \Bitrix\Crm\Discount::UNDEFINED;
$ary['DISCOUNT_RATE'] = isset($ary['DISCOUNT_RATE']) ? round((float)$ary['DISCOUNT_RATE'], 2) : 0.0;
$ary['DISCOUNT_SUM'] = isset($ary['DISCOUNT_SUM']) ? round((float)$ary['DISCOUNT_SUM'], 2) : 0.0;
$ary['TAX_RATE'] = isset($ary['TAX_RATE']) ? round((float)$ary['TAX_RATE'], 2) : null;
$ary['TAX_INCLUDED'] = isset($ary['TAX_INCLUDED']) ? $ary['TAX_INCLUDED'] : 'N';
$ary['CUSTOMIZED'] = isset($ary['CUSTOMIZED']) ? $ary['CUSTOMIZED'] : 'N';
$ary['SORT'] = isset($ary['SORT']) ? (int)$ary['SORT'] : 0;
$ary['MEASURE_CODE'] = isset($ary['MEASURE_CODE']) ? (int)$ary['MEASURE_CODE'] : 0;
$ary['MEASURE_NAME'] = isset($ary['MEASURE_NAME']) ? $ary['MEASURE_NAME'] : '';
$ary['TYPE'] = isset($ary['TYPE']) ? (int)$ary['TYPE'] : \Bitrix\Crm\ProductType::TYPE_PRODUCT;
if($productID > 0 && $ary['MEASURE_CODE'] <= 0)
{
if(!in_array($productID, $measurelessProductIDs, true))
{
$measurelessProductIDs[] = $productID;
}
}
if(!isset($ary['PRODUCT_NAME']) || $ary['PRODUCT_NAME'] === '')
{
if($ary['PRODUCT_ID'] > 0 && isset($ary['ORIGINAL_PRODUCT_NAME']))
{
$ary['PRODUCT_NAME'] = $ary['ORIGINAL_PRODUCT_NAME'];
}
elseif(!isset($ary['PRODUCT_NAME']))
{
$ary['PRODUCT_NAME'] = '';
}
}
if($assoc)
{
$results[(int)$ary['ID']] = $ary;
}
else
{
$results[] = $ary;
}
}
$results = \Bitrix\Crm\Service\Sale\Reservation\ReservationService::getInstance()->fillCrmReserves($results);
if(!empty($measurelessProductIDs))
{
$defaultMeasureInfo = \Bitrix\Crm\Measure::getDefaultMeasure();
$measureInfos = \Bitrix\Crm\Measure::getProductMeasures($measurelessProductIDs);
foreach($results as &$result)
{
if($result['MEASURE_CODE'] > 0)
{
continue;
}
$productID = $result['PRODUCT_ID'];
if(isset($measureInfos[$productID]) && !empty($measureInfos[$productID]))
{
$measureInfo = $measureInfos[$productID][0];
$result['MEASURE_CODE'] = $measureInfo['CODE'];
$result['MEASURE_NAME'] = $measureInfo['SYMBOL'];
}
elseif($defaultMeasureInfo !== null)
{
$result['MEASURE_CODE'] = $defaultMeasureInfo['CODE'];
$result['MEASURE_NAME'] = $defaultMeasureInfo['SYMBOL'];
}
}
unset($result);
}
return $results;
}