- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/exchange/onec/converterdocumentorder.php
- Класс: Bitrix\Sale\Exchange\OneC\ConverterDocumentOrder
- Вызов: ConverterDocumentOrder::externalizeItems
public function externalizeItems(array $items, array $info)
{
$result = array();
foreach ($items as $rowId=>$item)
{
foreach($info['FIELDS'] as $name=>$fieldInfo)
{
$value='';
$fieldValues = [];
switch ($name)
{
case 'ID':
$value = static::normalizeExternalCode($item['PRODUCT_XML_ID']);
break;
case 'CATALOG_ID':
$value = $item['CATALOG_XML_ID'];
break;
case 'NAME':
$value = $item['NAME'];
break;
case 'PRICE_PER_UNIT':
$value = $item['PRICE'];
break;
case 'QUANTITY':
$value = $item['QUANTITY'];
break;
case 'SUMM':
$value = $item['PRICE']*$item['QUANTITY'];
break;
case 'KOEF':
$value = self::KOEF_DEFAULT;
break;
case 'ITEM_UNIT':
$code = (intval($item['MEASURE_CODE'])>0 ? $item['MEASURE_CODE']:self::MEASURE_CODE_DEFAULT);
foreach($fieldInfo['FIELDS'] as $unitFieldName=>$unitFieldInfo)
{
$unitValue = '';
switch ($unitFieldName)
{
case 'ITEM_UNIT_CODE':
$unitValue = $code;
break;
case 'ITEM_UNIT_NAME':
$unitValue = static::getCatalogMeasureByCode($code);
break;
}
$this->externalizeField($unitValue, $unitFieldInfo);
$fieldValues[$unitFieldName] = $unitValue;
}
break;
case 'DISCOUNTS':
$summ = doubleval($item['DISCOUNT_PRICE']);
if($summ > 0)
{
foreach($fieldInfo['FIELDS'] as $discountFieldName=>$discountFieldInfo)
{
$discountValue = '';
switch ($discountFieldName)
{
case 'NAME':
$discountValue = DocumentBase::getLangByCodeField('ITEM_DISCOUNT');
break;
case 'SUMM':
$discountValue = $item['DISCOUNT_PRICE'];
break;
case 'IN_PRICE':
$discountValue = 'Y';
break;
}
$this->externalizeField($discountValue, $discountFieldInfo);
$fieldValues[$discountFieldName] = $discountValue;
}
}
break;
case 'REK_VALUES':
foreach($fieldInfo['FIELDS'] as $rekFieldName=>$rekFieldInfo)
{
$fieldValue = [];
switch ($rekFieldName)
{
case 'TYPE_NOMENKLATURA':
foreach ($rekFieldInfo['FIELDS'] as $nameProp=>$infoProp)
{
$valueProp='';
switch ($nameProp)
{
case 'NAME':
$valueProp = DocumentBase::getLangByCodeField('TYPE_NOMENKLATURA');
break;
case 'VALUE':
$valueProp = DocumentBase::getLangByCodeField($item['PRODUCT_XML_ID']==ImportOneCBase::DELIVERY_SERVICE_XMLID ? ImportBase::ITEM_SERVICE:ImportBase::ITEM_ITEM);
break;
}
$this->externalizeField($valueProp, $infoProp);
$fieldValue[$nameProp] = $valueProp;
}
$fieldValues[] = $fieldValue;
break;
case 'TYPE_OF_NOMENKLATURA':
foreach ($rekFieldInfo['FIELDS'] as $nameProp=>$infoProp)
{
$valueProp='';
switch ($nameProp)
{
case 'NAME':
$valueProp = DocumentBase::getLangByCodeField('TYPE_OF_NOMENKLATURA');
break;
case 'VALUE':
$valueProp = DocumentBase::getLangByCodeField($item['PRODUCT_XML_ID']==ImportOneCBase::DELIVERY_SERVICE_XMLID ? ImportBase::ITEM_SERVICE:ImportBase::ITEM_ITEM);
break;
}
$this->externalizeField($valueProp, $infoProp);
$fieldValue[$nameProp] = $valueProp;
}
$fieldValues[] = $fieldValue;
break;
case 'BASKET_NUMBER':
foreach ($rekFieldInfo['FIELDS'] as $nameProp=>$infoProp)
{
$valueProp='';
switch ($nameProp)
{
case 'NAME':
$valueProp = DocumentBase::getLangByCodeField('BASKET_NUMBER');
break;
case 'VALUE':
$valueProp = \CSaleExport::getNumberBasketPosition($item['ID']);
break;
}
$this->externalizeField($valueProp, $infoProp);
$fieldValue[$nameProp] = $valueProp;
}
$fieldValues[] = $fieldValue;
break;
case 'PROPERTY_VALUE_BASKET':
$attributes = isset($item['ATTRIBUTES'])? $item['ATTRIBUTES']:array();
if(count($attributes)>0)
{
foreach ($attributes as $rowIdAttr=>$attribute)
{
foreach ($rekFieldInfo['FIELDS'] as $nameProp=>$infoProp)
{
$valueProp='';
switch ($nameProp)
{
case 'NAME':
$valueProp = DocumentBase::getLangByCodeField('PROPERTY_VALUE_BASKET').'#'.($attribute['CODE']<>'' ? $attribute['CODE']:$attribute['NAME']);
break;
case 'VALUE':
$valueProp = $attribute['VALUE'];
break;
}
$this->externalizeField($valueProp, $infoProp);
$fieldValues[$rowIdAttr][$nameProp] = $valueProp;
}
}
}
break;
}
}
break;
case 'TAX_RATES':
$rate = doubleval($item['VAT_RATE']);
if($rate > 0)
{
foreach($fieldInfo['FIELDS'] as $rateFieldName=>$rateFieldInfo)
{
$rateValue = '';
switch ($rateFieldName)
{
case 'NAME':
$rateValue = DocumentBase::getLangByCodeField('VAT');
break;
case 'RATE':
$rateValue = $item['VAT_RATE']*100;
break;
}
$this->externalizeField($rekValue, $rateFieldInfo);
$fieldValues[$rateFieldName] = $rateValue;
}
}
break;
case 'TAXES':
$rate = doubleval($item['VAT_RATE']);
if($rate > 0)
{
foreach($fieldInfo['FIELDS'] as $taxFieldName=>$taxFieldInfo)
{
$taxValue = '';
switch ($taxFieldName)
{
case 'NAME':
$taxValue = DocumentBase::getLangByCodeField('VAT');
break;
case 'TAX_VALUE':
$taxValue = (($item["PRICE"] / ($item["VAT_RATE"]+1)) * $item["VAT_RATE"]);
break;
case 'IN_PRICE':
$taxValue = 'Y';
break;
}
$this->externalizeField($taxValue, $taxFieldInfo);
$fieldValues[$taxFieldName] = $taxValue;
}
}
break;
}
if($value<>'')
{
$this->externalizeField($value, $fieldInfo);
$result[$rowId][$name] = $value;
}
elseif (is_array($fieldValues))
{
$result[$rowId][$name] = $fieldValues;
}
}
}
return $result;
}