• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/order/matcher/fieldsynchronizer.php
  • Класс: Bitrix\Crm\Order\Matcher\FieldSynchronizer
  • Вызов: FieldSynchronizer::updateProperties
static function updateProperties($items)
{
	$result = new Result();

	foreach ($items as $itemFields)
	{
		$propertyId = $itemFields['ID'];
		unset($itemFields['ID']);

		$variants = static::extractItems($itemFields);
		$relations = static::extractRelations($itemFields);
		$matchProperties = static::extractMatchProperties($itemFields);

		$res = OrderPropsTable::update($propertyId, $itemFields);

		if ($res->isSuccess())
		{
			if (!empty($variants))
			{
				$existingItems = [];

				$existingItemsIterator = \CSaleOrderPropsVariant::GetList([], ['ORDER_PROPS_ID' => $propertyId], false, false, ['ID']);
				while ($existingItem = $existingItemsIterator->Fetch())
				{
					$existingItems[] = $existingItem['ID'];
				}

				foreach ($variants as $item)
				{
					foreach ($item as $key => $value)
					{
						if (is_string($key) && $key[0] === '~')
						{
							unset($item[$key]);
						}
					}

					if (in_array($item['ID'], $existingItems))
					{
						\CSaleOrderPropsVariant::Update($item['ID'], array_diff_key($item, ['ID' => 0]));
					}
					else
					{
						$item['ORDER_PROPS_ID'] = $propertyId;
						$item['VALUE'] = $item['ID'];
						\CSaleOrderPropsVariant::Add(array_diff_key($item, ['ID' => 0]));
					}
				}
			}

			if (!empty($relations))
			{
				self::saveRelations($propertyId, $relations);
			}

			if (!empty($matchProperties) || $itemFields['UTIL'] === 'Y')
			{
				$propertyMatch = OrderPropsMatchTable::getByPropertyId($propertyId);

				if (!empty($propertyMatch))
				{
					if ($itemFields['UTIL'] === 'Y')
					{
						OrderPropsMatchTable::delete($propertyMatch['ID']);
					}
					else
					{
						OrderPropsMatchTable::update($propertyMatch['ID'], $matchProperties);
					}
				}
				elseif (!empty($matchProperties))
				{
					OrderPropsMatchTable::add(['SALE_PROP_ID' => $res->getId()] + $matchProperties);
				}
			}
		}
		else
		{
			$result->addErrors($res->getErrors());
		}
	}

	return $result;
}