Ejemplo n.º 1
0
 /**
  * Method to check if the status of a leave request can be changed
  * 
  * @param \Symfony\Component\Security\Core\User\UserInterface $user
  * @param \Opit\OpitHrm\TravelBundle\Entity\TravelRequest $travelRequest
  * @param type $isAdmin
  * @param type $isGeneralManager
  * @param type $travelRequestStatusId
  * @return type
  */
 protected function isTRStatusChangeable(UserInterface $user, TravelRequest $travelRequest, $isAdmin, $isGeneralManager, $travelRequestStatusId)
 {
     if (null === $travelRequest->getId()) {
         return VoterInterface::ACCESS_DENIED;
     }
     if (in_array($travelRequestStatusId, array(Status::APPROVED, Status::REJECTED))) {
         return VoterInterface::ACCESS_DENIED;
     }
     // If user is admin and status of lr is not approved allow status change
     if ($isAdmin) {
         return VoterInterface::ACCESS_GRANTED;
     } elseif ($isGeneralManager) {
         // Check if general manager is owner of travel request
         if ($user === $travelRequest->getUser()) {
             return VoterInterface::ACCESS_GRANTED;
         } else {
             // If user is gm only allow status change when tr status is for approval
             if (Status::FOR_APPROVAL === $travelRequestStatusId) {
                 return VoterInterface::ACCESS_GRANTED;
             }
         }
     } elseif ($user === $travelRequest->getUser()) {
         // If user is owner and status is created or revise allow status change
         if (in_array($travelRequestStatusId, array(Status::CREATED, Status::REVISE))) {
             return VoterInterface::ACCESS_GRANTED;
         }
     }
     return VoterInterface::ACCESS_DENIED;
 }