CCrmProductRow::DoSaveRows

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CCrmProductRow
  4. DoSaveRows
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/mysql/crm_product_row.php
  • Класс: \CCrmProductRow
  • Вызов: CCrmProductRow::DoSaveRows
static function DoSaveRows($ownerType, $ownerID, array $arRows)
{
	global $DB;

	static::$originalRows = $arRows;

	if(!is_int($ownerID))
	{
		$ownerID = (int)$ownerID;
	}

	$insertRows = array();
	$updateRows = array();
	$deleteRows = array();
	foreach($arRows as $index => $row)
	{
		if(isset($row['ID']) && $row['ID'] > 0)
		{
			$updateRows[$row['ID']] = $row;
		}
		else
		{
			$row['ORIGINAL_INDEX'] = $index;
			$insertRows[] = $row;
		}
	}

	$dbResult = self::GetList(
		array('ID'=>'ASC'),
		array('=OWNER_TYPE' => $ownerType, '=OWNER_ID' => $ownerID)
	);
	if(is_object($dbResult))
	{
		while($row = $dbResult->Fetch())
		{
			$ID = $row['ID'];
			if(!isset($updateRows[$ID]))
			{
				$deleteRows[] = $ID;
			}
			elseif(!self::NeedForUpdate($row, $updateRows[$ID]))
			{
				unset($updateRows[$ID]);
			}
		}
	}

	$tableName = self::TABLE_NAME;

	if(!empty($deleteRows))
	{
		$scriptValues = implode(',', $deleteRows);
		$DB->Query("DELETE FROM {$tableName} WHERE ID IN ({$scriptValues})", false, 'FILE: '.__FILE__.'
LINE: '.__LINE__); $reservationTableName = \Bitrix\Crm\Reservation\Internals\ProductRowReservationTable::getTableName(); $DB->Query( "DELETE FROM {$reservationTableName} WHERE ROW_ID IN ({$scriptValues})", true ); } if(!empty($updateRows)) { foreach($updateRows as $ID => $row) { unset($row['ID'], $row['OWNER_TYPE'], $row['OWNER_ID']); if ($row['TAX_RATE'] === null) { $row['TAX_RATE'] = false; } $scriptValues = $DB->PrepareUpdate($tableName, $row); $DB->Query("UPDATE {$tableName} SET {$scriptValues} WHERE ID = {$ID}", false, 'FILE: '.__FILE__.'
LINE: '.__LINE__); } } if(!empty($insertRows)) { if (self::$perRowInsert) { foreach($insertRows as $row) { unset($row['ID']); $row['OWNER_TYPE'] = $ownerType; $row['OWNER_ID'] = $ownerID; if ($row['TAX_RATE'] === null) { $row['TAX_RATE'] = false; } if ($row['XML_ID'] === null) { $row['XML_ID'] = false; } $data = $DB->PrepareInsert($tableName, $row); $DB->Query( "INSERT INTO {$tableName}({$data[0]}) VALUES ({$data[1]})", false, 'File: '.__FILE__.'
Line: '.__LINE__ ); static::$originalRows[$row['ORIGINAL_INDEX']]['ID'] = (int)$DB->LastID(); } } else { $scriptColumns = ''; $scriptValues = ''; foreach($insertRows as $row) { unset($row['ID']); $row['OWNER_TYPE'] = $ownerType; $row['OWNER_ID'] = $ownerID; if ($row['TAX_RATE'] === null) { $row['TAX_RATE'] = false; } if ($row['XML_ID'] === null) { $row['XML_ID'] = false; } $data = $DB->PrepareInsert($tableName, $row); if($scriptColumns === '') { $scriptColumns = $data[0]; } if($scriptValues !== '') { $scriptValues .= ",({$data[1]})"; } else { $scriptValues = "({$data[1]})"; } } $DB->Query( "INSERT INTO {$tableName}({$scriptColumns}) VALUES {$scriptValues}", false, 'File: '.__FILE__.'
Line: '.__LINE__ ); } } return true; }

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