/** * 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; }
/** * @internal */ public function getCostsByCurrencies(TravelExpense $travelExpense) { $currencies = $this->entityManager->getRepository('OpitOpitHrmCurrencyRateBundle:Currency')->findAll(); $sumOfCompanyPaidExpensesByCurrencies = array(); $sumOfEmployeePaidExpensesByCurrencies = array(); foreach ($currencies as $currency) { $sumOfCompanyPaidExpensesByCurrencies[$currency->getCode()] = 0; $sumOfEmployeePaidExpensesByCurrencies[$currency->getCode()] = 0; } foreach ($travelExpense->getCompanyPaidExpenses() as $companyPaidExpenses) { $companyPaidExpenseAmount = $companyPaidExpenses->getAmount(); $companyPaidExpenseCurrency = $companyPaidExpenses->getCurrency()->getCode(); $sumOfCompanyPaidExpensesByCurrencies[$companyPaidExpenseCurrency] += $companyPaidExpenseAmount; } foreach ($travelExpense->getUserPaidExpenses() as $employeePaidExpense) { $employeePaidExpenseAmount = $employeePaidExpense->getAmount(); $employeePaidExpenseCurrency = $employeePaidExpense->getCurrency()->getCode(); $sumOfEmployeePaidExpensesByCurrencies[$employeePaidExpenseCurrency] += $employeePaidExpenseAmount; } return array('employeePaidExpenses' => $sumOfEmployeePaidExpensesByCurrencies, 'companyPaidExpenses' => $sumOfCompanyPaidExpensesByCurrencies); }
/** * {@inheritDoc} */ public function doLoad(ObjectManager $manager) { // Test for required user/status references first if (!$this->hasReference('travel-request-approved')) { throw new \RuntimeException('Leave expense fixtures require travel request fixtures.'); } $travelRequest = $this->getReference('travel-request-approved'); $employee = $travelRequest->getUser()->getEmployee(); // First travel expense // Set values from travel request where needed $travelExpense1 = new TravelExpense(); $travelExpense1->setUser($travelRequest->getUser()); $travelExpense1->setTaxIdentification($employee->getTaxIdentification()); $travelExpense1->setRechargeable(false); $travelExpense1->setPayInEuro(true); $travelExpense1->setBankName($employee->getBankName()); $travelExpense1->setBankAccountNumber($employee->getBankAccountNumber()); $travelExpense1->setDepartureCountry('Hungary'); $travelExpense1->setArrivalCountry('UK'); $travelExpense1->setDepartureDateTime($travelRequest->getDepartureDate()); $travelExpense1->setArrivalDateTime($travelRequest->getArrivalDate()); // Add expenses paid by me/company if ($this->hasReference('currency-gbp') && $this->hasReference('expense-type-tickets')) { $expense1 = new TEUserPaidExpense(); $expense1->setDescription('London weekly pass'); $expense1->setDate($travelRequest->getDepartureDate()); $expense1->setExpenseType($this->getReference('expense-type-tickets')); $expense1->setAmount(16.5); $expense1->setCurrency($this->getReference('currency-gbp')); $expense1->setDestination('London'); $travelExpense1->addUserPaidExpense($expense1); $expense2 = new TEUserPaidExpense(); $expense2->setDescription('Taxi to hotel'); $expense2->setDate($travelRequest->getDepartureDate()); $expense2->setExpenseType($this->getReference('expense-type-taxi')); $expense2->setAmount(35); $expense2->setCurrency($this->getReference('currency-gbp')); $expense2->setDestination('London'); $travelExpense1->addUserPaidExpense($expense2); $trStatusApproved = $this->getReference('travel-request-status-approved'); $expense3 = new TECompanyPaidExpense(); $expense3->setDescription('Westpoint Hotel'); $expense3->setDate($trStatusApproved->getCreated()); $expense3->setExpenseType($this->getReference('expense-type-hotel')); $expense3->setAmount(753); $expense3->setCurrency($this->getReference('currency-gbp')); $expense3->setDestination('London'); $travelExpense1->addCompanyPaidExpense($expense3); } if ($this->hasReference('currency-huf') && $this->hasReference('expense-type-tickets')) { $expense4 = new TECompanyPaidExpense(); $expense4->setDescription('Flight tickets'); $expense4->setDate($trStatusApproved->getCreated()); $expense4->setExpenseType($this->getReference('expense-type-tickets')); $expense4->setAmount(112500); $expense4->setCurrency($this->getReference('currency-huf')); $expense4->setDestination('London'); $travelExpense1->addCompanyPaidExpense($expense4); } // Add travel expense states if ($this->hasReference('user') && $this->hasReference('created')) { $travelRequest1Status = new StatesTravelExpenses($this->getReference('created')); $travelRequest1Status->setCreatedUser($this->getReference('user')); $travelExpense1->addState($travelRequest1Status); } $travelExpense1->setTravelRequest($travelRequest); $manager->persist($travelExpense1); $manager->flush(); }