public function cancelLoan(Loan $loan) { PropelDB::transaction(function ($con) use($loan) { $loan->setStatus(Loan::CANCELED)->setExpiredDate(new \DateTime()); $loan->save($con); $borrower = $loan->getBorrower(); $borrower->setActiveLoan(null)->setLoanStatus(Loan::NO_LOAN); $borrower->save($con); $this->changeLoanStage($con, $loan, Loan::OPEN, Loan::CANCELED); $this->refundLenders($con, $loan, Loan::CANCELED); }); // TODO emails to refunded lenders return true; }