/**
  * Saves Leave Request and Sends Notification
  * 
  * @param LeaveParameterObject $leaveAssignmentData 
  * 
  */
 protected function saveLeaveRequest(LeaveParameterObject $leaveAssignmentData)
 {
     $leaveRequest = $this->generateLeaveRequest($leaveAssignmentData);
     $leaveType = $this->getLeaveTypeService()->readLeaveType($leaveAssignmentData->getLeaveType());
     $leaveRequest->setLeaveTypeName($leaveType->getLeaveTypeName());
     if (is_null($leaveRequest->getLeavePeriodId())) {
         if ($this->getLeavePeriodService()->isWithinNextLeavePeriod(strtotime($leaveRequest->getDateApplied()))) {
             $nextLeavePeriod = $this->getLeavePeriodService()->createNextLeavePeriod($leaveRequest->getDateApplied());
             $leaveRequest->setLeavePeriodId($nextLeavePeriod->getLeavePeriodId());
         }
     }
     $leaves = $this->createLeaveObjectListForAppliedRange($leaveAssignmentData);
     if ($this->isEmployeeAllowedToApply($leaveType)) {
         if ($this->isValidLeaveRequest($leaveRequest, $leaves)) {
             try {
                 $this->getLeaveRequestService()->saveLeaveRequest($leaveRequest, $leaves);
                 if ($this->isOverlapLeaveRequest($leaveAssignmentData)) {
                     $this->getLeaveRequestService()->modifyOverlapLeaveRequest($leaveRequest, $leaves);
                 }
                 //sending leave apply notification
                 $leaveApplicationMailer = new LeaveApplicationMailer($this->getLoggedInEmployee(), $leaveRequest, $leaves);
                 $leaveApplicationMailer->send();
                 return true;
             } catch (Exception $e) {
                 throw new LeaveAllocationServiceException('Leave Quota will Exceed');
             }
         }
     }
 }
 protected function sendEmail($loggedInEmployee, $leaveRequest, $leaves)
 {
     $leaveApplicationMailer = new LeaveApplicationMailer($loggedInEmployee, $leaveRequest, $leaves);
     $leaveApplicationMailer->send();
 }