Пример #1
0
 /**
  * Method to check if the status of a travel expense can be changed
  *
  * @param \Symfony\Component\Security\Core\User\UserInterface $user
  * @param \Opit\OpitHrm\TravelBundle\Entity\TravelExpense $travelExpense
  * @param type $isAdmin
  * @param type $isGeneralManager
  * @param type $travelExpenseStatusId
  * @return type
  */
 protected function isTEStatusChangeable(UserInterface $user, TravelExpense $travelExpense, $isAdmin, $isGeneralManager, $travelExpenseStatusId)
 {
     if (null === $travelExpense->getId()) {
         return VoterInterface::ACCESS_DENIED;
     }
     if (in_array($travelExpenseStatusId, array(Status::PAID, Status::REJECTED))) {
         return VoterInterface::ACCESS_DENIED;
     }
     // If user is admin and status of te is not approved allow status change
     if ($isAdmin) {
         return VoterInterface::ACCESS_GRANTED;
     } elseif ($isGeneralManager) {
         // Check if general manager is owner of te
         if ($user === $travelExpense->getUser()) {
             return VoterInterface::ACCESS_GRANTED;
         } else {
             // If user is gm allow status change when te status is for approval or approved
             if (Status::FOR_APPROVAL === $travelExpenseStatusId || Status::APPROVED === $travelExpenseStatusId) {
                 return VoterInterface::ACCESS_GRANTED;
             }
         }
     } elseif ($user === $travelExpense->getUser()) {
         // If user is owner and status is created or revise allow status change
         if (in_array($travelExpenseStatusId, array(Status::CREATED, Status::REVISE))) {
             return VoterInterface::ACCESS_GRANTED;
         }
     }
     return VoterInterface::ACCESS_DENIED;
 }