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