• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/paysystem/paymentavailablespaysystems.php
  • Класс: BitrixSalePaySystemPaymentAvailablesPaySystems
  • Вызов: PaymentAvailablesPaySystems::setBindings
static function setBindings(int $paymentId, array $paySystemIds)
{
	$result = new Result();
	
	// check existing payment
	$existPayment = PaymentTable::getCount([
		'=ID' => $paymentId,
	]) > 0;
	if (!$existPayment)
	{
		$result->addError(
			new Error(Loc::getMessage('SALE_PS_PAYMENT_AVAILABLES_PAYSYSTEMS_NOT_FOUND_PAYMENT'))
		);
		return $result;
	}
	
	// grouping existing items by added & deleted
	$existPaySystemIds = [];
	$existRows = PaymentPaySystemAvailableTable::getList([
		'select' => [
			'ID',
			'PAY_SYSTEM_ID',
		],
		'filter' => [
			'=PAYMENT_ID' => $paymentId,
		],
	]);
	
	$deletedIds = [];
	$paySystemIds = array_map('intval', $paySystemIds);
	foreach ($existRows as $row)
	{
		$rowPaySystemId = (int)$row['PAY_SYSTEM_ID'];
		if (in_array($rowPaySystemId, $paySystemIds, true))
		{
			$existPaySystemIds[] = $rowPaySystemId;
		}
		else
		{
			$deletedIds[] = (int)$row['ID'];
		}
	}
	$addedPaySystemIds = array_diff($paySystemIds, $existPaySystemIds);
	
	// delete old pay systems
	foreach ($deletedIds as $deleteId)
	{
		$deleteResult = PaymentPaySystemAvailableTable::delete($deleteId);
		foreach ($deleteResult->getErrors() as $err)
		{
			$result->addError($err);
		}
	}
	
	// add new exist pay systems
	$paySystems = PaySystemActionTable::getList([
		'select' => [
			'ID',
		],
		'filter' => [
			'=ID' => $addedPaySystemIds,
		],
	]);
	foreach ($paySystems as $item)
	{
		$addResult = PaymentPaySystemAvailableTable::add([
			'PAYMENT_ID' => $paymentId,
			'PAY_SYSTEM_ID' => (int)$item['ID'],
		]);
		foreach ($addResult->getErrors() as $err)
		{
			$result->addError($err);
		}
	}
	
	return $result;
}