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