public function initialize() { $thisMonth = DateTimeUtils::getNow(DateTimeUtils::FM_DEV_YM . '01 000000', DateTimeUtils::FM_DEV_DATETIME); DateTimeUtils::addDateTime($thisMonth, 'P1M', null, false); DateTimeUtils::subDateTime($thisMonth, 'P1D', null, false); $this->closing_date = $thisMonth->format(DateTimeUtils::FM_DB_DATETIME); $oTime = DateTimeUtils::getDateTimeFromDB($this->opening_date); $cTime = DateTimeUtils::getDateTimeFromDB($this->closing_date); $now = new \DateTime(); $this->closing_diff = $cTime->diff($oTime)->days; $this->now_diff = $now->diff($oTime)->days; // calculate Closing Interest $this->closing_interest_unit = NumberUtils::getInterest($this->opening_balance, $this->term_interest_rate); $this->closing_interest = NumberUtils::rounds($this->closing_interest_unit * $this->closing_diff, NumberUtils::NUM_ROUND); $this->closing_balance = $this->opening_balance + $this->capital + $this->closing_interest; // calculate Interest of current date $this->now_interest_unit = NumberUtils::getInterest($this->opening_balance, $this->noterm_interest_rate); $delta = $this->now_diff - $this->closing_diff; if ($delta < 0) { $this->now_interest = NumberUtils::rounds($this->now_interest_unit * $this->now_diff, NumberUtils::NUM_ROUND); } else { $this->now_interest = $this->closing_interest + NumberUtils::getInterest($this->closing_balance, $this->noterm_interest_rate, NumberUtils::NUM_ROUND, $delta); } $this->now_balance = $this->opening_balance + $this->capital + $this->now_interest; }
public function actionIndex() { $arrDeposits = []; $sumDeposits = ['opening_balance' => 0, 'closing_interest_unit' => 0, 'closing_interest' => 0, 'closing_balance' => 0, 'now_interest_unit' => 0, 'now_interest' => 0, 'capital' => 0, 'result_interest' => 0]; $minClosingTimestamp = null; $arrTmAtm = []; $arrCredit = []; $arrLunchFound = []; $arrOtherFound = []; $sumTmAtm = ['opening_balance' => 0, 'closing_balance' => 0, 'now_balance' => 0]; $sumTmAtmDeposit = ['opening_balance' => 0, 'closing_balance' => 0, 'now_balance' => 0]; $sumTotal = ['opening_balance' => 0, 'closing_balance' => 0, 'now_balance' => 0]; $arrFinAccount = FinAccount::find()->where(['delete_flag' => 0])->orderBy('order_num')->all(); foreach ($arrFinAccount as $finAccount) { $instance = $finAccount->instance(); $instance->initialize(); if ($instance instanceof FinAccount01I00 || $instance instanceof FinAccount02I00) { // add instance TM or ATM $arrTmAtm[] = $instance; // sum TM - ATM $sumTmAtm['opening_balance'] += $instance->opening_balance; $sumTmAtm['closing_balance'] += $instance->closing_balance; $sumTmAtm['now_balance'] += $instance->now_balance; // sum TM - ATM - Deposits $sumTmAtmDeposit['opening_balance'] += $instance->opening_balance; $sumTmAtmDeposit['closing_balance'] += $instance->closing_balance; $sumTmAtmDeposit['now_balance'] += $instance->now_balance; // sum Total $sumTotal['opening_balance'] += $instance->opening_balance; $sumTotal['closing_balance'] += $instance->closing_balance; $sumTotal['now_balance'] += $instance->now_balance; } elseif ($instance instanceof FinAccount03I00) { // add instance CREDIT $arrCredit[] = $instance; // sum Total $sumTotal['opening_balance'] += $instance->opening_balance; $sumTotal['closing_balance'] += $instance->closing_balance; $sumTotal['now_balance'] += $instance->now_balance; } elseif ($instance instanceof FinAccount04I00) { // add instance Deposits $arrDeposits[] = $instance; // sum deposits $sumDeposits['opening_balance'] += $instance->opening_balance; $sumDeposits['closing_interest_unit'] += $instance->closing_interest_unit; $sumDeposits['closing_interest'] += $instance->closing_interest; $sumDeposits['closing_balance'] += $instance->closing_balance; $sumDeposits['now_interest_unit'] += $instance->now_interest_unit; $sumDeposits['now_interest'] += $instance->now_interest; $sumDeposits['capital'] += $instance->capital; $sumDeposits['result_interest'] += $instance->result_interest; // sum TM - ATM - Deposits $nowbalance = $instance->opening_balance + $instance->now_interest; $sumTmAtmDeposit['opening_balance'] += $instance->opening_balance; $sumTmAtmDeposit['closing_balance'] += $instance->closing_balance; $sumTmAtmDeposit['now_balance'] += $nowbalance; // sum Total $sumTotal['opening_balance'] += $instance->opening_balance; $sumTotal['closing_balance'] += $instance->closing_balance; $sumTotal['now_balance'] += $nowbalance; // next closing $timestamp = DateTimeUtils::getDateTimeFromDB($instance->closing_date)->getTimestamp(); if (is_null($minClosingTimestamp) || $minClosingTimestamp > $timestamp) { $minClosingTimestamp = $timestamp; } } elseif ($instance instanceof FinAccount05I00) { // add instance LUNCH FOUND $arrLunchFound[] = $instance; // sum Total $sumTotal['opening_balance'] += $instance->opening_balance; $sumTotal['closing_balance'] += $instance->closing_balance; $sumTotal['now_balance'] += $instance->now_balance; } elseif ($instance instanceof FinAccount06I00 || $instance instanceof FinAccount07I00) { // add instance OTHER FOUND $arrOtherFound[] = $instance; // sum Total $sumTotal['opening_balance'] += $instance->opening_balance; $sumTotal['closing_balance'] += $instance->closing_balance; $sumTotal['now_balance'] += $instance->now_balance; } } return $this->render('index', ['arrDeposits' => $arrDeposits, 'sumDeposits' => $sumDeposits, 'minClosingTimestamp' => $minClosingTimestamp, 'arrTmAtm' => $arrTmAtm, 'sumTmAtm' => $sumTmAtm, 'sumTmAtmDeposit' => $sumTmAtmDeposit, 'arrCredit' => $arrCredit, 'arrLunchFound' => $arrLunchFound, 'arrOtherFound' => $arrOtherFound, 'sumTotal' => $sumTotal]); }