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