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;
 }