Manager::updateProductFormsWithNewPrice

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. Manager
  4. updateProductFormsWithNewPrice
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/webform/manager.php
  • Класс: Bitrix\Crm\WebForm\Manager
  • Вызов: Manager::updateProductFormsWithNewPrice
static function updateProductFormsWithNewPrice(int $productId, float $oldPrice, float $newPrice, string $oldCurrency, string $newCurrency)
{
	static $formFields; // cache fields

	if (is_null($formFields))
	{
		// get all product form fields
		$formFields = \Bitrix\Crm\WebForm\Internals\FieldTable::getList([
			'select' => ['ID', 'FORM_ID', 'ITEMS'],
			'filter' => [
				'=TYPE' => 'product',
			],
		]);
	}

	static $forms = []; // cache forms

	$updatedForms = [];
	// update only fields related to updated price
	foreach ($formFields as $field)
	{
		$formId = $field['FORM_ID'];
		if (!array_key_exists($formId, $forms))
		{
			$forms[$formId] = new \Bitrix\Crm\WebForm\Form($formId);
		}
		$form = $forms[$formId];

		$formCurrency = $form->getCurrencyId();
		if ($formCurrency !== $oldCurrency || $formCurrency !== $newCurrency)
		{
			continue;
		}

		$items = $field['ITEMS'] ?? [];

		$isUpdated = false;
		foreach ($items as &$item)
		{
			// update if price in form matches catalog price
			if ($productId === (int)$item['ID'] && $oldPrice === (float)$item['PRICE']) // && $item['CUSTOM_PRICE'] === 'N'
			{
				$item['PRICE'] = $newPrice;
				$isUpdated = true;
			}
		}

		if ($isUpdated)
		{
			\Bitrix\Crm\WebForm\Internals\FieldTable::update($field['ID'], ['ITEMS' => $items]);
			$updatedForms[] = $formId;
		}
	}

	// rebuild form cache
	foreach ($updatedForms as $formId)
	{
		\Bitrix\Crm\WebForm\Manager::updateScriptCache($formId, 1);
	}
}

Добавить комментарий