• Модуль: salescenter
  • Путь к файлу: ~/bitrix/modules/salescenter/lib/controller/order.php
  • Класс: BitrixSalesCenterControllerOrder
  • Вызов: Order::sendPaymentsAction
public function sendPaymentsAction(array $paymentIds, array $options)
{
	$sentPayments = [];
	$paymentTitle = '';
	$sessionId = $dialogId = false;

	if (Bitrix24Manager::getInstance()->isPaymentsLimitReached())
	{
		$this->addError(new Error(Loc::getMessage('SALESCENTER_CONTROLLER_ORDER_PAYMENTS_LIMIT_REACHED')));
		return null;
	}

	$context = $options['context'] ?? '';

	if ($context === SalesCenterComponentContextDictionary::CHAT)
	{
		if (isset($options['sessionId']))
		{
			$sessionId = (int)$options['sessionId'];
			ImOpenLinesManager::getInstance()->setSessionId($sessionId);
		}

		$dialogId = ImOpenLinesManager::getInstance()->getDialogId();
		if (!$dialogId)
		{
			$this->addError(new Error('Dialog not found'));
		}
		elseif (!$sessionId)
		{
			$this->addError(new Error('Session not found'));
		}
	}

	if (!empty($this->getErrors()))
	{
		return ['payments' => $sentPayments];
	}

	if (MainLoader::includeModule('sale'))
	{
		$registry = SaleRegistry::getInstance(SaleRegistry::REGISTRY_TYPE_ORDER);

		/** @var SaleOrder $orderClass */
		$orderClass = $registry->getOrderClassName();
		/** @var SalePayment $paymentClass */
		$paymentClass = $registry->getPaymentClassName();

		$orderPaymentBinding = [];
		$paymentsIterator = $paymentClass::getList([
			'select' => ['ID', 'ORDER_ID'],
			'filter' => [
				'=ID' => $paymentIds,
			],
		]);
		while ($paymentData = $paymentsIterator->fetch())
		{
			$orderPaymentBinding[$paymentData['ID']] = $paymentData['ORDER_ID'];
		}

		foreach ($paymentIds as $paymentId)
		{
			$orderId = $orderPaymentBinding[$paymentId];
			$order = $orderClass::load($orderId);
			if (!$order)
			{
				$this->addError(new Error('Order '. $orderId .' not found'));
			}

			$payment = $order->getPaymentCollection()->getItemById($paymentId);

			if ($context === SalesCenterComponentContextDictionary::CHAT)
			{
				$sendResult = $this->sendPaymentByIm($payment, $dialogId);
				if ($sendResult->isSuccess())
				{
					$sentPayments[] = $sendResult->getData()['PAYMENT'];
				}
				else
				{
					$this->addErrors($sendResult->getErrors());
				}
			}
			elseif ($context === SalesCenterComponentContextDictionary::SMS)
			{
				$sendResult = $this->sendPaymentBySms($payment);
				if ($sendResult->isSuccess())
				{
					$sentPayments[] = $sendResult->getData()['PAYMENT'];
					$paymentTitle = $sendResult->getData()['TEXT'];
				}
				else
				{
					$this->addErrors($sendResult->getErrors());
				}
			}
		}
	}

	return [
		'payments' => $sentPayments,
		'paymentTitle' => $paymentTitle,
	];
}