public function execute($request)
 {
     $form = $this->getForm();
     $saveSuccess = true;
     $logger = Logger::getLogger('saveLeaveEntitlementsAction');
     if ($request->isMethod(sfRequest::POST)) {
         $form->bind($request->getParameter($form->getName()));
         $hdnEmpId = $request->getParameter('hdnEmpId');
         $hdnLeaveTypeId = $request->getParameter('hdnLeaveTypeId');
         $leavePeriodId = $request->getParameter('leavePeriodId');
         $txtLeaveEntitled = $request->getParameter('txtLeaveEntitled');
         $idCount = count($hdnEmpId);
         $leaveTypeCount = count($hdnLeaveTypeId);
         $count = count($txtLeaveEntitled);
         /*
          * Validate we have all input values for all rows.
          */
         if ($count != $idCount || $count != $leaveTypeCount) {
             $logger->error("saveLeaveEntitlements: field count does not match: " . " employee ids={$idCount}, leaveTypeIds={$hdnLeaveTypeId}, entitlements={$txtLeaveEntitled}");
             $logger->error($hdnEmpId);
             $logger->error($hdnLeaveTypeId);
             $logger->error($txtLeaveEntitled);
             $saveSuccess = false;
         } else {
             $leaveEntitlementService = $this->getLeaveEntitlementService();
             $leaveSummaryData = $request->getParameter('leaveSummary');
             if ($count > 0) {
                 $employeeLeaveEntitlementList = $leaveEntitlementService->searchEmployeeLeaveEntitlement($hdnEmpId, $hdnLeaveTypeId, $leavePeriodId, $count);
                 $employeeLeaveEntitlementArray = $this->getEmployeeLeaveEntitlementArray($employeeLeaveEntitlementList);
                 $employeeLeaveEntitlements = array();
                 for ($i = 0; $i < $count; $i++) {
                     $arrayKey = $hdnEmpId[$i] . "_" . $hdnLeaveTypeId[$i];
                     if (array_key_exists($arrayKey, $employeeLeaveEntitlementArray)) {
                         $employeeLeaveEntitlement = $employeeLeaveEntitlementArray[$arrayKey];
                         $employeeLeaveEntitlement->setNoOfDaysAllotted($txtLeaveEntitled[$i]);
                     } else {
                         $employeeLeaveEntitlement = new EmployeeLeaveEntitlement();
                         $employeeLeaveEntitlement->setLeaveTypeId($hdnLeaveTypeId[$i]);
                         $employeeLeaveEntitlement->setEmployeeId($hdnEmpId[$i]);
                         $employeeLeaveEntitlement->setLeavePeriodId($leavePeriodId);
                         $employeeLeaveEntitlement->setNoOfDaysAllotted($txtLeaveEntitled[$i]);
                     }
                     $employeeLeaveEntitlements[] = $employeeLeaveEntitlement;
                 }
                 try {
                     $leaveEntitlementService->saveEmployeeLeaveEntitlementCollection($employeeLeaveEntitlements);
                 } catch (Exception $e) {
                     $logger->error($e);
                     $saveSuccess = false;
                 }
             }
         }
         if ($saveSuccess) {
             $this->getUser()->setFlash('templateMessage', array('SUCCESS', __(TopLevelMessages::SAVE_SUCCESS)), false);
         } else {
             $this->getUser()->setFlash('templateMessage', array('FAILURE', __(TopLevelMessages::SAVE_FAILURE)), false);
         }
         $this->forwardToLeaveSummary();
     }
 }
 protected static function init()
 {
     if (!self::$leaveRequestDao instanceof LeaveRequestDao) {
         self::$leaveRequestDao = new LeaveRequestDao();
     }
 }
 public function testSaveEmployeeLeaveEntitlementCollection()
 {
     $employeeLeaveEntitlementCollection = new Doctrine_Collection('EmployeeLeaveEntitlement');
     $employeeLeaveEntitlementList = array();
     $employeeLeaveEntitlement = new EmployeeLeaveEntitlement();
     $employeeLeaveEntitlement->setLeaveTypeId(1);
     $employeeLeaveEntitlement->setLeavePeriodId(1);
     $employeeLeaveEntitlement->setEmployeeId(1);
     $employeeLeaveEntitlement->setNoOfDaysAllotted(14);
     $employeeLeaveEntitlement->setLeaveBroughtForward(2);
     $employeeLeaveEntitlement->setLeaveCarriedForward(5);
     $employeeLeaveEntitlementCollection->add($employeeLeaveEntitlement);
     $employeeLeaveEntitlementList[] = $employeeLeaveEntitlement;
     $employeeLeaveEntitlement = new EmployeeLeaveEntitlement();
     $employeeLeaveEntitlement->setLeaveTypeId(1);
     $employeeLeaveEntitlement->setLeavePeriodId(1);
     $employeeLeaveEntitlement->setEmployeeId(2);
     $employeeLeaveEntitlement->setNoOfDaysAllotted(20);
     $employeeLeaveEntitlement->setLeaveBroughtForward(3);
     $employeeLeaveEntitlement->setLeaveCarriedForward(4);
     $employeeLeaveEntitlementCollection->add($employeeLeaveEntitlement);
     $employeeLeaveEntitlementList[] = $employeeLeaveEntitlement;
     $leaveEntitlementDao = $this->getMock('LeaveEntitlementDao', array('saveEmployeeLeaveEntitlementCollection'));
     $leaveEntitlementDao->expects($this->once())->method('saveEmployeeLeaveEntitlementCollection')->with($employeeLeaveEntitlementList)->will($this->returnValue($employeeLeaveEntitlementCollection));
     $leaveEntitlementService = new LeaveEntitlementService();
     $leaveEntitlementService->setLeaveEntitlementDao($leaveEntitlementDao);
     $results = $leaveEntitlementService->saveEmployeeLeaveEntitlementCollection($employeeLeaveEntitlementList);
     $this->assertEquals($employeeLeaveEntitlementCollection, $results);
 }
 public function xtestIsEmployeeHavingLeaveBalanceErrorCases()
 {
     $empId = 1;
     $leaveTypeId = "LT001";
     $leaveRequest = "";
     $leavePeriodId = 11;
     $dateApplied = '2010-09-11';
     $applyDays = 2;
     $leaveRequest = new LeaveRequest();
     $leaveRequest->setDateApplied($dateApplied);
     $leaveRequest->setLeavePeriodId($leavePeriodId);
     $entitledDays = 5;
     $availableLeave = 3;
     $leaveEntitlement = new EmployeeLeaveEntitlement();
     $leaveEntitlement->setLeaveBroughtForward(2);
     $leaveBalance = 0;
     $currentLeavePeriod = new LeavePeriod();
     $currentLeavePeriod->setStartDate('2010-01-01');
     $currentLeavePeriod->setEndDate('2010-12-31');
     $nextLeavePeriod = new LeavePeriod();
     $nextLeavePeriod->setStartDate('2011-01-01');
     $nextLeavePeriod->setEndDate('2011-12-31');
     $leaveEntitlementService = $this->getMock('OldLeaveEntitlementService', array('getEmployeeLeaveEntitlementDays', 'readEmployeeLeaveEntitlement', 'getLeaveBalance'));
     $leaveEntitlementService->expects($this->any())->method('getEmployeeLeaveEntitlementDays')->with($empId, $leaveTypeId, $leavePeriodId)->will($this->returnValue($entitledDays));
     $leaveEntitlementService->expects($this->any())->method('readEmployeeLeaveEntitlement')->with($empId, $leaveTypeId, $leavePeriodId)->will($this->returnValue($leaveEntitlement));
     $leaveEntitlementService->expects($this->any())->method('getLeaveBalance')->will($this->returnValue($leaveBalance));
     $this->leaveRequestService->setLeaveEntitlementService($leaveEntitlementService);
     $leaveRequestDao = $this->getMock('LeaveRequestDao', array('getNumOfAvaliableLeave'));
     $leaveRequestDao->expects($this->any())->method('getNumOfAvaliableLeave')->with($empId, $leaveTypeId)->will($this->returnValue($availableLeave));
     $this->leaveRequestService->setLeaveRequestDao($leaveRequestDao);
     $leavePeriodService = $this->getMock('LeavePeriodService', array('getLeavePeriod', 'createNextLeavePeriod', 'getCurrentLeavePeriod'));
     $leavePeriodService->expects($this->any())->method('getLeavePeriod')->with(strtotime($leaveRequest->getDateApplied()))->will($this->returnValue($currentLeavePeriod));
     $leavePeriodService->expects($this->any())->method('createNextLeavePeriod')->with(date('Y-m-d', strtotime('2010-09-13')))->will($this->returnValue($nextLeavePeriod));
     $leavePeriodService->expects($this->any())->method('getCurrentLeavePeriod')->will($this->returnValue($currentLeavePeriod));
     $this->leaveRequestService->setLeavePeriodService($leavePeriodService);
     // Trigger leave balance exceeded
     try {
         $retVal = $this->leaveRequestService->isEmployeeHavingLeaveBalance($empId, $leaveTypeId, $leaveRequest, $applyDays);
         $this->fail("Exception expected");
     } catch (LeaveServiceException $e) {
         // expected - check code thrown in LeaveRequestService
     }
 }
 /**
  * Save employee leave brought forward for given period
  * @param int $employeeId
  * @param int $leaveTypeId
  * @param int $leavePeriodId
  * @param float $broughtForwardLeaveLength
  * @return boolean
  */
 public function saveEmployeeLeaveBroughtForward($employeeId, $leaveTypeId, $leavePeriodId, $broughtForwardLeaveLength)
 {
     try {
         $leaveEntitlement = $this->readEmployeeLeaveEntitlement($employeeId, $leaveTypeId, $leavePeriodId);
         if (!$leaveEntitlement instanceof EmployeeLeaveEntitlement) {
             $leaveEntitlement = new EmployeeLeaveEntitlement();
             $leaveEntitlement->setLeaveTypeId($leaveTypeId);
             $leaveEntitlement->setLeavePeriodId($leavePeriodId);
             $leaveEntitlement->setEmployeeId($employeeId);
             $leaveEntitlement->setNoOfDaysAllotted(0);
         }
         $leaveEntitlement->setLeaveBroughtForward($broughtForwardLeaveLength);
         $leaveEntitlement->save();
         return true;
     } catch (Exception $e) {
         throw new DaoException($e->getMessage());
     }
 }
 public function testSaveEmployeeLeaveEntitlementCollection()
 {
     $leaveEntitilementFixture = sfConfig::get('sf_plugins_dir') . '/orangehrmCoreLeavePlugin/test/fixtures/leaveEntitlement.yml';
     TestDataService::populate($leaveEntitilementFixture);
     $leaveEntitlementList = array();
     $employeeLeaveEntitlement = new EmployeeLeaveEntitlement();
     $employeeLeaveEntitlement->setLeaveTypeId('LTY002');
     $employeeLeaveEntitlement->setEmployeeId(2);
     $employeeLeaveEntitlement->setLeavePeriodId(1);
     $employeeLeaveEntitlement->setNoOfDaysAllotted(40);
     $leaveEntitlementList[] = $employeeLeaveEntitlement;
     $employeeLeaveEntitlement = TestDataService::fetchObject('EmployeeLeaveEntitlement', array('LTY001', 1, 1));
     //$employeeLeaveEntitlement = $this->leaveEntitlementDao->getEmployeeLeaveEntitlement(1, 'LTY001', 1);
     $employeeLeaveEntitlement->setNoOfDaysAllotted(50);
     $leaveEntitlementList[] = $employeeLeaveEntitlement;
     $results = $this->leaveEntitlementDao->saveEmployeeLeaveEntitlementCollection($leaveEntitlementList);
     $employeeLeaveEntitlement = TestDataService::fetchObject('EmployeeLeaveEntitlement', array('LTY001', 1, 1));
     //$employeeLeaveEntitlement = $this->leaveEntitlementDao->getEmployeeLeaveEntitlement(1, 'LTY001', 1);
     $this->assertEquals(50.0, $employeeLeaveEntitlement->getNoOfDaysAllotted());
     $employeeLeaveEntitlement = TestDataService::fetchObject('EmployeeLeaveEntitlement', array('LTY002', 2, 1));
     //$employeeLeaveEntitlement = $this->leaveEntitlementDao->getEmployeeLeaveEntitlement(2, 'LTY002', 1);
     $this->assertEquals(40.0, $employeeLeaveEntitlement->getNoOfDaysAllotted());
 }
 public function fetchRawLeaveSummaryRecords($clues, $offset, $limit)
 {
     $includeTerminated = false;
     if ($clues['cmbWithTerminated'] != 0) {
         $includeTerminated = true;
     }
     $recordsResult = $this->getLeaveSummaryDao()->fetchRawLeaveSummaryRecords($clues, $offset, $limit, $includeTerminated);
     $recordsCount = $this->fetchRawLeaveSummaryRecordsCount($clues, $includeTerminated);
     $leaveEntitlementService = new LeaveEntitlementService();
     $leaveEntitlementService->setLeaveEntitlementDao(new LeaveEntitlementDao());
     $leavePeriodService = new LeavePeriodService();
     $leavePeriodService->setLeavePeriodDao(new LeavePeriodDao());
     $summaryListArray = array();
     if ($recordsCount > 0) {
         $i = 0;
         while ($row = $recordsResult->fetch()) {
             $employeeName = $row['empFirstName'] . ' ' . $row['empLastName'];
             $employeeId = $row['empNumber'];
             $employeeStatus = $row['empStatus'];
             $leaveType = $row['leaveTypeName'];
             $leaveTypeId = $row['leaveTypeId'];
             $leavePeriodId = $clues['cmbLeavePeriod'] ? $clues['cmbLeavePeriod'] : $leavePeriodService->getCurrentLeavePeriod();
             $leaveEntitlementObj = $leaveEntitlementService->readEmployeeLeaveEntitlement($employeeId, $leaveTypeId, $leavePeriodId);
             if ($leaveEntitlementObj instanceof EmployeeLeaveEntitlement) {
                 $leaveEntitled = $leaveEntitlementObj->getNoOfDaysAllotted();
                 $leaveBroughtForward = $leaveEntitlementObj->getLeaveBroughtForward();
                 $leaveCarryForward = $leaveEntitlementObj->getLeaveCarriedForward();
             } else {
                 $leaveEntitled = '0.00';
                 $leaveBroughtForward = '0.00';
                 $leaveCarryForward = '0.00';
             }
             $leaveRequestService = new LeaveRequestService();
             $leaveRequestService->setLeaveRequestDao(new LeaveRequestDao());
             $leaveTaken = $leaveRequestService->getTakenLeaveSum($employeeId, $leaveTypeId, $leavePeriodId);
             $leaveTaken = empty($leaveTaken) ? '0.00' : $leaveTaken;
             //$leaveScheduled = $this->_getLeaveScheduled($employeeId, $leaveTypeId, $leavePeriodId);
             $leaveScheduled = $leaveRequestService->getScheduledLeavesSum($employeeId, $leaveTypeId, $leavePeriodId);
             $leaveScheduled = empty($leaveScheduled) ? '0.00' : $leaveScheduled;
             $leaveRemaining = $leaveEntitled + $leaveBroughtForward - ($leaveTaken + $leaveScheduled + $leaveCarryForward);
             $leaveRemaining = number_format($leaveRemaining, 2);
             $rowDisplayFlag = false;
             $deletedFlag = false;
             //show active leave types
             if ($row['availableFlag'] == 1) {
                 $rowDisplayFlag = true;
             }
             //show inactive leave types if any leaveEntitled, leaveTaken, leaveScheduled of them above 0
             if ($row['availableFlag'] != 1 && ($leaveEntitled > 0 || $leaveTaken > 0 || $leaveScheduled > 0)) {
                 $rowDisplayFlag = true;
                 $deletedFlag = true;
             }
             if ($rowDisplayFlag) {
                 $summaryListRow = array();
                 $employeeLeaveEntitlementObject = new EmployeeLeaveEntitlement();
                 // If readonly value is 1, force read only
                 if (isset($row['readonly']) && $row['readonly'] == 1) {
                     $employeeLeaveEntitlementObject->setForceReadOnly(true);
                 }
                 $employeeLeaveEntitlementObject->setEmployeeId($employeeId);
                 $employeeLeaveEntitlementObject->setEmployeeStatus($employeeStatus);
                 $employeeLeaveEntitlementObject->setLeaveTypeId($leaveTypeId);
                 $employeeLeaveEntitlementObject->setNoOfDaysAllotted($leaveEntitled);
                 $employeeLeaveEntitlementObject->setLeaveBroughtForward($leaveBroughtForward);
                 $employeeLeaveEntitlementObject->setLeaveCarriedForward($leaveCarryForward);
                 $employeeLeaveEntitlementObject->setLeavePeriodId($leavePeriodId);
                 $summaryListArray[] = $employeeLeaveEntitlementObject;
                 $i++;
             }
         }
     }
     return $summaryListArray;
 }
 public function testGetLeaveBalanceExistingRecords()
 {
     $employeeLeaveEntitlement = new EmployeeLeaveEntitlement();
     $employeeLeaveEntitlement->setNoOfDaysAllotted(14);
     $employeeLeaveEntitlement->setLeaveBroughtForward(2);
     $employeeLeaveEntitlement->setLeaveCarriedForward(5);
     $leaveEntitlementService = $this->getMock('LeaveEntitlementService', array('readEmployeeLeaveEntitlement'));
     $leaveEntitlementService->expects($this->once())->method('readEmployeeLeaveEntitlement')->with(1, 'LTY001', 1)->will($this->returnValue($employeeLeaveEntitlement));
     $leaveRequestService = $this->getMock('LeaveRequestService', array('getScheduledLeavesSum', 'getTakenLeaveSum'));
     $leaveRequestService->expects($this->once())->method('getScheduledLeavesSum')->with(1, 'LTY001', 1)->will($this->returnValue(3));
     $leaveRequestService->expects($this->once())->method('getTakenLeaveSum')->with(1, 'LTY001', 1)->will($this->returnValue(2));
     $leaveEntitlementService->setLeaveRequestService($leaveRequestService);
     $this->assertEquals(6, $leaveEntitlementService->getLeaveBalance(1, 'LTY001', 1));
 }