private function changeLoanStage(ConnectionInterface $con, Loan $loan, $oldStatus = null, $newStatus, \DateTime $date = null) { $date = $date ?: new \DateTime(); $newLoanStage = new Stage(); $newLoanStage->setLoan($loan)->setBorrower($loan->getBorrower())->setStatus($newStatus)->setStartDate($date); if ($oldStatus) { $currentLoanStage = StageQuery::create()->filterByLoan($loan)->findOneByStatus($oldStatus); if ($currentLoanStage) { $currentLoanStage->setEndDate($date); $currentLoanStage->save($con); } } $newLoanStageSuccess = $newLoanStage->save($con); if (!$newLoanStageSuccess) { throw new \Exception(); } }