public function calculate()
 {
     if (!$this->getDepositAmount() || !$this->getTerm() || !$this->getCurrency()) {
         return false;
     }
     if (!$this->getIsMain()) {
         if (!$this->getInterestPaymentType() || !$this->getInterestPaymentPercent()) {
             return false;
         }
     }
     $sum = array();
     if ($this->getIsMain()) {
         $interestPaymentPercent = Cache::tags('deposits')->rememberForever('deposits_max_percent', function () {
             return Deposit::frequency()->currency($this->getCurrency())->max('percent');
         });
         $percentTotal = (100 - ($this->getPercent() + $this->getPercentMilitary())) / 100;
         $sum[0] = $this->getDepositAmount() * ($interestPaymentPercent / 100) / 12 * $this->getTerm() * $percentTotal;
         for ($i = 1; $i <= $this->getTerm() - 1; $i++) {
             $sum[$i] = ($this->getDepositAmount() + $sum[$i - 1]) * ($interestPaymentPercent / 100) / 12 * $this->getTerm() * $percentTotal;
         }
         $sum = round(array_pop($sum), 2);
         $this->result = array('sum' => $sum, 'amount' => $this->getDepositAmount(), 'installment' => $this->getMonthlyInstallment(), 'percent' => $interestPaymentPercent, 'currency' => $this->getCurrency());
     } else {
         foreach ($this->getDepositIds() as $key => $value) {
             $percentTotal = (100 - ($this->getPercent() + $this->getPercentMilitary())) / 100;
             if ($this->getInterestPaymentType() == 'capitalize') {
                 $interestPaymentPercent = Cache::tags('deposits')->rememberForever('deposits_max_percent', function () {
                     return Deposit::frequency()->currency($this->getCurrency())->max('percent');
                 });
                 $temp = array();
                 $temp[0] = $this->getDepositAmount() * ($interestPaymentPercent / 100) / 12 * $this->getTerm() * $percentTotal;
                 for ($i = 1; $i <= $this->getTerm() - 1; $i++) {
                     $temp[$i] = ($this->getDepositAmount() + $temp[$i - 1]) * ($interestPaymentPercent / 100) / 12 * $this->getTerm() * $percentTotal;
                 }
                 $sum = round(array_pop($temp), 2);
             } else {
                 $sum = $this->getDepositAmount() * ($this->getInterestPaymentPercent() / 100) / 12 * $this->getTerm() * $percentTotal;
             }
             $this->result[$value] = array('bonus' => 0, 'percent' => $this->getInterestPaymentPercent(), 'sum' => $sum, 'amount' => $this->getDepositAmount(), 'installment' => $this->getMonthlyInstallment() * $this->getTerm(), 'term' => $this->getTerm(), 'currency' => $this->getCurrency(), 'paymentType' => $this->getInterestPaymentType());
         }
     }
     return $this->result;
 }