/**
  * @internal
  */
 public function setTravelRequestAccessRights(TravelResourceInterface $travelRequest, $currentStatus)
 {
     $isEditLocked = true;
     // travel request can not be edited
     $isTEAddLocked = true;
     // travel expense can not be added
     $isStatusLocked = true;
     // status can not be changed
     $unlockedStates = array();
     $currentUser = $this->securityContext->getToken()->getUser();
     $currentStatusId = $currentStatus->getId();
     if ($travelRequest->getUser()->getId() === $currentUser->getId()) {
         // Show add travel expense in case travel expense is approved.
         if (Status::APPROVED === $currentStatusId) {
             $isTEAddLocked = false;
         }
         if (in_array($currentStatusId, array(Status::CREATED, Status::REVISE))) {
             $isEditLocked = false;
         }
         if ($this->isUserGeneralManager($travelRequest)) {
             $unlockedStates = array(Status::FOR_APPROVAL);
         }
         if (in_array($currentStatusId, array_merge(array(Status::CREATED, Status::REVISE), $unlockedStates))) {
             $isStatusLocked = false;
         }
     } elseif ($this->isUserGeneralManager($travelRequest)) {
         if (Status::FOR_APPROVAL === $currentStatusId) {
             $isStatusLocked = false;
         }
     }
     // Unlock edit mode for admins at all times
     if ($this->securityContext->isGranted('ROLE_ADMIN')) {
         $isStatusLocked = false;
         $isTEAddLocked = true;
         $isEditLocked = false;
         if (Status::APPROVED === $currentStatusId) {
             $isEditLocked = true;
             $isTEAddLocked = false;
             $isStatusLocked = true;
         } elseif (Status::PAID === $currentStatusId) {
             $isEditLocked = true;
             $isStatusLocked = true;
         } elseif (Status::REJECTED === $currentStatusId) {
             $isEditLocked = true;
             $isStatusLocked = true;
         } elseif (Status::FOR_APPROVAL === $currentStatusId) {
             $isEditLocked = true;
         }
     }
     return array('isTREditLocked' => $isEditLocked, 'isAddTravelExpenseLocked' => $isTEAddLocked, 'isStatusLocked' => $isStatusLocked);
 }
示例#2
0
 /**
  * User is a general manager or not
  *
  * @param \Opit\OpitHrm\TravelBundle\Model\TravelResourceInterface $travelRequest
  * @return boolean
  */
 public function isUserGeneralManager(TravelResourceInterface $travelRequest)
 {
     return $travelRequest->getGeneralManager()->getId() === $this->tokenStorage->getToken()->getUser()->getId();
 }