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; }