public function actionLogin() { if (!Yii::app()->user->isGuest) { $this->redirect(array('default/index')); } $this->pageTitle = 'Login page'; $model = new LoginForm(); $model_class_name = get_class($model); // collect user input data if (isset($_POST[$model_class_name])) { $model->attributes = $_POST[$model_class_name]; $model->_identity = new UserIdentity($model->username, $model->password); $model->_identity->user = Users::model()->find('`username`=:t1 OR `email`=:t1', array(':t1' => $model->username)); if ($model->validate()) { if ($model->_identity->login($model->rememberMe)) { if (Controller::$user_level !== UserLevels::LEVEL_MEMBER) { $this->redirect(Yii::app()->getModule('admin')->user->returnUrl); } $this->redirect(Yii::app()->user->returnUrl); } } } else { //recover loans overdue LoanRepayments::model()->recoverLoans(date('Y') . '-' . date('m') . '-' . date('d')); } $this->render('login', array('model' => $model)); }
</font></td> <td style="width: 50px; text-align: right"><font size="8"><?php echo $expenditure->amount; $netExpenditures = $netExpenditures + $expenditure->amount; ?> </font></td> </tr> <?php if ($member != ContributionsByMembers::PAYMENT_BY_CASH && $member != ContributionsByMembers::PAYMENT_BY_BANK) { ?> <?php if ($expenditure->trans_channes == Expenditures::LOANING_CHANNEL) { ?> <?php $loanValues = LoanRepayments::model()->profitEarnedOrToBeEarnedOnLoanBetweenAndIncludingTheseDates($expenditure->associated_id, $till); ?> <?php if (!empty($loanValues[LoanRepayments::INTEREST])) { ?> <tr> <td style="width: 50px"><font size="8"><?php if ($expenditure->date != $prvsDate) { echo $expenditure->date; } ?> </font></td> <td style="width: 150px"><font size="8">Interest</font></td> <td style="width: 50px; text-align: right"><font size="8"><?php echo $loanValues[LoanRepayments::INTEREST]; $netExpenditures = $netExpenditures + $loanValues[LoanRepayments::INTEREST];
/** * * @param \LoanApplications $loans models * @param date $endDate * @return double */ public function computeTotals($loans, $endDate) { $totalLoans = 0; foreach ($loans as $loan) { $totalLoans = $totalLoans + LoanRepayments::model()->loanBalanceOfMemberAfterThisDate($loan, $endDate); } return "{$totalLoans}"; }
/** * * @param int $savingId saving id * @param date $dateDue yyyy-mm-dd * @return double amount (to be) accumulated on a loan application */ public function evaluateSavingsAmountForStatement($savingId, $dateDue) { $saving = Savings::model()->findByPk($savingId); if (is_object($saving)) { if (Savings::model()->savingIsWithdrawableByThisDate($savingId, $dateDue)) { return Savings::model()->totalWithDrawals(Savings::model()->withdrawalsfromASavingBetweenAndIncludingTheseDates($savingId, '0000-00-00', $dateDue)); } return LoanRepayments::model()->amountDue($saving->principal, $saving->interest_rate_per_annum, $saving->date_of_investment, $dateDue, 0); } }
/** * * @param int $savingId Savings id * @param date $since yyyy-mm-dd * @param date $till yyyy-mm-dd * @return array saving values */ public function profitEarnedOrToBeEarnedOnSavingBetweenAndIncludingTheseDates($savingId, $since, $till) { if (is_object($saving = $this->findByPk($savingId))) { return array(self::PRINCIPAL => $saving->principal, self::AMOUNT_WITHDRAWN => $accumulatedSaving = $this->totalWithDrawals($latestSavingHistory = $this->latestSavingHistoryBetweenAndIncludingTheseDates($saving->savings_id, $since, $till)), self::REDUCING_BALANCE => $remainingSaving = isset($latestSavingHistory[0]) && $latestSavingHistory[0]->principal > 0 && empty($latestSavingHistory[0]->accumulated_amount) ? LoanRepayments::model()->amountDue($latestSavingHistory[0]->principal, $latestSavingHistory[0]->interest_rate_per_annum, $latestSavingHistory[0]->date_of_investment, $till, 0) : 0, self::ACCUMULATED_SAVING => $accumulatedSaving = $accumulatedSaving + $remainingSaving, self::INTEREST => round($accumulatedSaving - $saving->principal, 2)); } return array(); }
</font> </td> </tr> <?php } ?> <?php $amountDue = $transaction[Loanrepayments::REDUCING_BALANCE]; ?> <?php if (($principal = $amountDue) != 0 && $transaction[ContributionsByMembers::DATE] != ($endDate = date('Y') . '-' . date('m') . '-' . date('d'))) { ?> <?php $amountDue = round(LoanRepayments::model()->amountDue($principal, $loanApplication->interest_rate, $transaction[ContributionsByMembers::DATE], $endDate, $transactions[0][ContributionsByMembers::DATE] == $endDate && count($transactions) == 1 ? 1 : 0), 3); ?> <?php $endDate = substr($endDate, 8, 2) . ' ' . substr(Defaults::monthName(substr($endDate, 5, 2)), 0, 3) . ' ' . substr($endDate, 0, 4); ?> <tr> <td style="display:table-cell; text-align:center; width:65px; height: 12px; border-left: 2px solid #000000; border-right: 1px solid #000000"> <font style="font-family: sans-serif; font-weight: normal" size="8"> <?php echo $endDate; ?> </font> </td> <td style="display:table-cell; text-align:center; width:60px; height: 12px; border-right: 1px solid #000000"> <font style="font-family: sans-serif; font-weight: normal" size="8"></font>
/** * * @param \ContributionsByMembers $contributions models * @param \LoanRepayments $loanRecoveries models * @return double */ public function membersContributionsBtwnDates($contributions, $loanRecoveries) { return $this->computeTotals($contributions) - LoanRepayments::model()->totalRecoveries($loanRecoveries); }
/** * * @param type $member * @param date $since yyyy-mm-dd * @param date $till yyyy-mm-dd * @return array total expenditures */ public function totalExpenditureOnMemberFromStartToIncludingThisDate($member, $since, $till) { $total = 0; $pendingLoanAmounts = 0; foreach ($this->expendituresOnMemberBetweenAndIncludingThisDates($member, '0000-00-00', $since) as $expenditure) { $total = $total + $expenditure->amount; if ($expenditure->trans_channes == Expenditures::LOANING_CHANNEL) { $loanValues = LoanRepayments::model()->profitEarnedOrToBeEarnedOnLoanBetweenAndIncludingTheseDates($expenditure->associated_id, $since); if (!empty($loanValues[LoanRepayments::INTEREST])) { $total = $total + $loanValues[LoanRepayments::INTEREST]; if ($loanValues[LoanRepayments::REDUCING_BALANCE] > 0) { $newLoanValues = LoanRepayments::model()->profitEarnedOrToBeEarnedOnLoanBetweenAndIncludingTheseDates($expenditure->associated_id, $till); $paymentsWithinDates = LoanRepayments::model()->memberLoanRepaymentsBtwnDatesAgain($expenditure->associated_id, LoanApplications::model()->dayAfter($since), $till); $pendingLoanAmounts = $pendingLoanAmounts + $newLoanValues[LoanRepayments::INTEREST] - (empty($paymentsWithinDates) ? $loanValues[LoanRepayments::INTEREST] : 0); } } } } return array('total' => $total, 'pendingTotal' => $pendingLoanAmounts); }
/** * * @param \LoanRepayments $repayment */ public function updateRecoveryModel($repayment) { $loanApplication = LoanApplications::model()->returnALoanApplication($repayment->loan_application); if ($repayment->isNewRecord) { $repayment->save(false); } else { $repayment->update(array('recoveryamount', 'amountrecovered', 'newbalance', 'recoverydate')); } $this->serviceLoanApplication($repayment, $loanApplication); }
/** * * @param \Loanrepayments $loanRepayments models * @param \Loanapplications $loanApplication models * @param \CashWithdrawals $withdrawals models * @param date $startDate * @param date $endDate * @return array */ public function orderLoanRepaymentTransactions($loanRepayments, $loanApplication, $startDate, $endDate) { $transactions = array(); $separations = $this->separateRecoveriesFromRepayments($loanRepayments); $transactions[$count = count($transactions)][Loanrepayments::PRINCIPAL] = $loanApplication->amout_borrowed; $transactions[$count][Loanrepayments::AMOUNT_DUE] = null; $transactions[$count][Loanrepayments::INTEREST] = null; $transactions[$count][Loanrepayments::AMOUNT_PAID] = null; $transactions[$count][Loanrepayments::DEDUCTION_FROM_CONTRIBUTIONS] = null; $transactions[$count][Loanrepayments::REDUCING_BALANCE] = round(LoanRepayments::model()->amountDue($loanApplication->amout_borrowed, $loanApplication->interest_rate, $loanApplication->close_date, $loanApplication->close_date, 0), 3); $transactions[$count][ContributionsByMembers::RECEIPT] = null; $transactions[$count][ContributionsByMembers::DATE] = $loanApplication->close_date; while ($startDate <= $endDate) { foreach ($loanRepayments as $l => $loanRepayment) { if (!empty($loanRepayment->contribution_toward_loan)) { if (isset($separations[self::REPAYMENTS][$loanRepayment->primaryKey])) { $contribution = ContributionsByMembers::model()->findByPk($loanRepayment->contribution_toward_loan); $repayment = $separations[self::REPAYMENTS][$loanRepayment->primaryKey]; if ($repayment->recoverydate == $startDate) { $transactions[$count = count($transactions)][Loanrepayments::PRINCIPAL] = $transactions[$count - 1][LoanRepayments::REDUCING_BALANCE]; $transactions[$count][Loanrepayments::AMOUNT_DUE] = $loanRepayment->amount_due; $transactions[$count][Loanrepayments::INTEREST] = round($transactions[$count][Loanrepayments::AMOUNT_DUE] - $transactions[$count][Loanrepayments::PRINCIPAL], 3); //round($loanRepayment->amount_due - $transactions[$count - 1][LoanRepayments::REDUCING_BALANCE], 3); $transactions[$count][Loanrepayments::AMOUNT_PAID] = $loanRepayment->amount_due - $loanRepayment->balance; $transactions[$count][Loanrepayments::DEDUCTION_FROM_CONTRIBUTIONS] = null; $transactions[$count][Loanrepayments::REDUCING_BALANCE] = $loanRepayment->balance; $transactions[$count][ContributionsByMembers::RECEIPT] = $contribution->receiptno == ContributionsByMembers::FALSE_RECEIPT ? null : $contribution->receiptno; $transactions[$count][ContributionsByMembers::DATE] = $startDate; } } } if (isset($separations[self::RECOVERIES][$loanRepayment->primaryKey])) { $contribution = ContributionsByMembers::model()->findByPk($loanRepayment->contribution_toward_loan); $repayment = $separations[self::RECOVERIES][$loanRepayment->primaryKey]; if ($repayment->recoverydate == $startDate) { $transactions[$count = count($transactions)][Loanrepayments::PRINCIPAL] = $transactions[$count - 1][LoanRepayments::REDUCING_BALANCE]; $transactions[$count][Loanrepayments::AMOUNT_DUE] = $loanRepayment->recoveryamount; $transactions[$count][Loanrepayments::INTEREST] = round($transactions[$count][Loanrepayments::AMOUNT_DUE] - $transactions[$count][Loanrepayments::PRINCIPAL], 3); //round($loanRepayment->recoveryamount - $transactions[$count - 1][LoanRepayments::REDUCING_BALANCE], 3); $transactions[$count][Loanrepayments::AMOUNT_PAID] = null; $transactions[$count][Loanrepayments::DEDUCTION_FROM_CONTRIBUTIONS] = $loanRepayment->amountrecovered; $transactions[$count][Loanrepayments::REDUCING_BALANCE] = $loanRepayment->newbalance; $transactions[$count][ContributionsByMembers::RECEIPT] = Loanrepayments::INSTEAD_OF_RECEIPT; $transactions[$count][ContributionsByMembers::DATE] = $startDate; } } } $startDate = LoanApplications::model()->dayAfter($startDate); } if (count($transactions) < 2) { $transactions[$count = count($transactions)][Loanrepayments::PRINCIPAL] = $transactions[$count - 1][LoanRepayments::REDUCING_BALANCE]; $transactions[$count][Loanrepayments::AMOUNT_DUE] = round(LoanRepayments::model()->amountDue($transactions[$count][Loanrepayments::PRINCIPAL], $loanApplication->interest_rate, $loanApplication->close_date, $endDate, $transactions[$count - 1][ContributionsByMembers::DATE] == $endDate ? 1 : 0), 3); $transactions[$count][Loanrepayments::INTEREST] = round($transactions[$count][Loanrepayments::AMOUNT_DUE] - $transactions[$count][Loanrepayments::PRINCIPAL], 3); $transactions[$count][Loanrepayments::AMOUNT_PAID] = null; $transactions[$count][Loanrepayments::DEDUCTION_FROM_CONTRIBUTIONS] = null; $transactions[$count][Loanrepayments::REDUCING_BALANCE] = $transactions[$count][Loanrepayments::AMOUNT_DUE]; $transactions[$count][ContributionsByMembers::RECEIPT] = null; $transactions[$count][ContributionsByMembers::DATE] = $endDate; } return $transactions; }