• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/order.php
  • Класс: BitrixSaleOrder
  • Вызов: Order::syncOrderPaymentPaid
private function syncOrderPaymentPaid(Payment $payment)
{
	$result = new Result();

	if ($payment->isPaid())
	{
		return $result;
	}

	$sumPaid = $this->getPaymentCollection()->getPaidSum();

	$userBudget = InternalsUserBudgetPool::getUserBudgetByOrder($this);

	$debitSum = $payment->getSum();

	$maxPaid = $payment->getSum() + $sumPaid - $this->getSumPaid();

	if ($maxPaid >= $payment->getSum())
	{
		$finalSumPaid = $this->getSumPaid();
	}
	else
	{
		$debitSum = $maxPaid;
		$finalSumPaid = $sumPaid;
	}

	if ($debitSum > 0 && $payment->isInner())
	{
		if (PriceMaths::roundPrecision($debitSum) > PriceMaths::roundPrecision($userBudget))
		{
			$result->addError( new ResultError(Loc::getMessage('SALE_ORDER_PAYMENT_CANCELLED_PAID'), 'SALE_ORDER_PAYMENT_NOT_ENOUGH_USER_BUDGET_SYNCPAID') );
			return $result;
		}

		InternalsUserBudgetPool::addPoolItem($this, ($debitSum * -1), InternalsUserBudgetPool::BUDGET_TYPE_ORDER_CANCEL_PART, $payment);
	}

	$result->setData(array('SUM_PAID' => $finalSumPaid));

	return $result;
}