Exemple #1
0
 public function disburseLoan(Loan $loan, \DateTime $disbursedDate, Money $nativeAmount)
 {
     $isDisbursed = TransactionQuery::create()->filterByLoan($loan)->filterDisbursement()->count();
     if ($isDisbursed) {
         // TODO
         return;
     }
     PropelDB::transaction(function ($con) use($loan, $disbursedDate, $nativeAmount) {
         $this->transactionService->addDisbursementTransaction($con, $nativeAmount, $loan);
         $loans = LoanQuery::create()->filterByBorrower($loan->getBorrower())->count();
         if ($loans == 1) {
             $this->transactionService->addFeeTransaction($con, $nativeAmount, $loan);
         }
         //TODO service fee rate
         $loan->setStatus(Loan::ACTIVE)->setNativeDisbursedAmount($nativeAmount)->setDisbursedDate($disbursedDate)->calculateExtraDays($disbursedDate)->setServiceFeeRate(2.5);
         $loan->save($con);
         $this->changeLoanStage($con, $loan, Loan::FUNDED, Loan::ACTIVE);
         $installments = $this->generateLoanInstallments($loan);
         foreach ($installments as $installment) {
             $installment->save($con);
         }
     });
     //TODO Add repayment schedule
     //TODO Send email / sift sience event
 }