/** * @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); }
/** * 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(); }