Ejemplo n.º 1
0
 /**
  * @param Order $order
  * @param Payment $payment
  * @param $operation
  * @return Result
  * @throws \Exception
  */
 public 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;
         }
         //			Internals\UserBudgetPool::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;
 }
Ejemplo n.º 2
0
 /**
  * @return Result
  */
 protected function syncOrderPaid()
 {
     $result = new Result();
     if ($this->getSumPaid() == $this->getPrice()) {
         return $result;
     }
     $debitSum = $this->getPrice() - $this->getSumPaid();
     $paymentCollection = $this->getPaymentCollection();
     $sumPaid = $paymentCollection->getPaidSum();
     $userBudget = Internals\UserBudgetPool::getUserBudgetByOrder($this);
     $bePaid = $sumPaid - $this->getSumPaid();
     if ($bePaid > 0) {
         if ($debitSum > $bePaid) {
             $debitSum = $bePaid;
         }
         if ($debitSum >= $userBudget) {
             $debitSum = $userBudget;
         }
         if ($userBudget >= $debitSum && $debitSum > 0) {
             Internals\UserBudgetPool::addPoolItem($this, $debitSum * -1, Internals\UserBudgetPool::BUDGET_TYPE_ORDER_PAY);
             $finalSumPaid = $this->getSumPaid() + $debitSum;
             $result->setData(array('SUM_PAID' => $finalSumPaid));
         }
     }
     return $result;
 }
Ejemplo n.º 3
0
 /**
  * @param float $needSum
  * @param int $userId
  * @param string $currency
  * @param bool $fullPay
  * @return bool
  */
 public static function canPayWithUserBudget($needSum, $userId, $currency, $fullPay = true)
 {
     $budget = Sale\Internals\UserBudgetPool::getUserBudget($userId, $currency);
     if ($fullPay === false && $budget > 0) {
         return true;
     }
     if ($fullPay === true && $budget >= $needSum) {
         return true;
     }
     return false;
 }