• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/internals/paysysteminner.php
  • Класс: BitrixSaleInternalsPaySystemInner
  • Вызов: PaySystemInner::createOperation
static function createOperation(Order &$order, Payment &$payment, $operation)
{
	$result = new Result();
	$paymentSum = $payment->getSum();

	if($operation == self::OPERATION_DEBIT)
	{
		$userBudget = UserBudgetPool::getUserBudgetByOrder($order);

		if($userBudget >= $paymentSum)
		{
			UserBudgetPool::addPoolItem($order, ( $paymentSum * -1 ), UserBudgetPool::BUDGET_TYPE_ORDER_PAY, $payment);
//				$payment->setField('PAID', 'Y');
		}
		else
		{
			$result->addError(new EntityError(Loc::getMessage('ORDER_PS_INNER_ERROR_INSUFFICIENT_MONEY')));
		}
	}
	elseif($operation == self::OPERATION_CREDIT)
	{
		UserBudgetPool::addPoolItem($order, ( $paymentSum ), UserBudgetPool::BUDGET_TYPE_ORDER_UNPAY, $payment);

//			$payment->setField('PAID', 'N');
	}
	elseif($operation == self::OPERATION_RETURN)
	{
		$sumPaid = $order->getSumPaid();
		$sumTrans = UserBudgetPool::getUserBudgetTransForOrder($order);
		$finalSumPaid = $paymentSum + $sumTrans;

		if ($finalSumPaid > 0)
		{
			$paymentSum = $paymentSum - $finalSumPaid;
		}

//			InternalsUserBudgetPool::addPoolItem($order->getUserId(), ( $paymentSum ), UserBudgetPool::BUDGET_TYPE_CANCEL_RETURN, $order, $payment);
//			$payment->setField('PAID', 'N');
		$payment->setField('IS_RETURN', 'Y');
	}
	else
	{
		throw new InvalidOperationException('Wrong operation type!');
	}

	return $result;
}