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