protected function linkLeaveToUnusedLeaveEntitlement(LeaveEntitlement $leaveEntitlement) { $balance = $leaveEntitlement->getNoOfDays() - $leaveEntitlement->getDaysUsed(); $entitlementId = $leaveEntitlement->getId(); if ($balance > 0) { $leaveList = $this->getLeaveWithoutEntitlements($leaveEntitlement->getEmpNumber(), $leaveEntitlement->getLeaveTypeId(), $leaveEntitlement->getFromDate(), $leaveEntitlement->getToDate()); $query = Doctrine_Query::create()->from('LeaveLeaveEntitlement l')->where('l.leave_id = ?')->andWhere('l.entitlement_id = ?'); foreach ($leaveList as $leave) { $daysLeft = $leave['days_left']; $leaveId = $leave['id']; $daysToAssign = $daysLeft > $balance ? $balance : $daysLeft; $leaveEntitlement->setDaysUsed($leaveEntitlement->getDaysUsed() - $daysToAssign); $balance -= $daysToAssign; // assign to leave $entitlementAssignment = $query->fetchOne(array($leaveId, $entitlementId)); if ($entitlementAssignment === false) { $entitlementAssignment = new LeaveLeaveEntitlement(); $entitlementAssignment->setLeaveId($leaveId); $entitlementAssignment->setEntitlementId($entitlementId); $entitlementAssignment->setLengthDays($daysToAssign); } else { $entitlementAssignment->setLengthDays($entitlementAssignment->getLengthDays() + $daysToAssign); } $entitlementAssignment->save(); $entitlementAssignment->free(); if ($balance <= 0) { break; } } } return $leaveEntitlement; }