public function postPersist(LifecycleEventArgs $args) { $entity = $args->getEntity(); $entityManager = $args->getEntityManager(); if ($entity instanceof TravelRequest) { $travelRequestId = str_replace(array('{year}', '{id}'), array(date('y'), sprintf('%05d', $entity->getId())), TravelRequest::getIDPattern()); $entity->setTravelRequestId($travelRequestId); $entityManager->persist($entity); $entityManager->flush(); } }
/** * @internal */ public function setEditRights(TravelRequest $travelRequest, TravelRequestUserInterface $currentUser, $currentStatusId) { $isEditLocked = true; $isStatusLocked = true; if (!$this->securityContext->isGranted('ROLE_ADMIN')) { // If request was created by current user if ($travelRequest->getUser()->getId() === $currentUser->getId()) { if (in_array($currentStatusId, array(Status::CREATED, Status::REVISE))) { $isEditLocked = false; $isStatusLocked = false; } elseif ($travelRequest->getGeneralManager()->getId() === $travelRequest->getUser()->getId()) { $isStatusLocked = false; } } elseif ($travelRequest->getGeneralManager()->getId() === $currentUser->getId()) { if (!in_array($currentStatusId, array(Status::CREATED, Status::REVISE))) { $isStatusLocked = false; } } } else { $isEditLocked = false; $isStatusLocked = false; if (in_array($currentStatusId, array(Status::APPROVED, Status::REJECTED))) { $isEditLocked = true; $isStatusLocked = true; } elseif ($currentStatusId === Status::FOR_APPROVAL) { $isEditLocked = true; } } return array('isStatusLocked' => $isStatusLocked, 'isEditLocked' => $isEditLocked); }
/** * @internal */ public function addChildNodes(TravelRequest $travelRequest) { $children = new ArrayCollection(); foreach ($travelRequest->getDestinations() as $destination) { $children->add($destination); } foreach ($travelRequest->getAccomodations() as $accomodation) { $children->add($accomodation); } return $children; }
/** * {@inheritDoc} */ public function doLoad(ObjectManager $manager) { // Test for required user/status references first if (!$this->hasReference('admin') || !$this->hasReference('created')) { throw new \RuntimeException('Travel request fixtures require user/status bundle fixtures.'); } $aclManager = $this->container->get('opit.security.acl.manager'); // First travel request $admin = $this->getReference('admin'); $departureDate = new \DateTime('next monday'); $arrivalDate = clone $departureDate; $arrivalDate->add(new \DateInterval('P3D')); $travelRequest1 = new TravelRequest(); $travelRequest1->setUser($admin); $travelRequest1->setGeneralManager($this->getReference('generalManager')); $travelRequest1->setDepartureDate($departureDate); $travelRequest1->setArrivalDate($arrivalDate); $travelRequest1->setCustomerRelated(1); $travelRequest1->setTripPurpose('Conference'); // Add Destinations if ($this->hasReference('currency-huf') && $this->hasReference('transportation-type-airplane')) { $destination1 = new TRDestination(); $destination1->setTransportationType($this->getReference('transportation-type-airplane')); $destination1->setName('Vienna'); $destination1->setCost('57000'); $destination1->setCurrency($this->getReference('currency-huf')); $travelRequest1->addDestination($destination1); } if ($this->hasReference('currency-eur') && $this->hasReference('transportation-type-bus')) { $destination2 = new TRDestination(); $destination2->setTransportationType($this->getReference('transportation-type-bus')); $destination2->setName('Hotel Stefanie'); $destination2->setCost('8.50'); $destination2->setCurrency($this->getReference('currency-eur')); $travelRequest1->addDestination($destination2); } // Add accomodation if ($this->hasReference('currency-eur')) { $accomodation1 = new TRAccomodation(); $accomodation1->setHotelName('Hotel Stefanie'); $accomodation1->setCity('Vienna'); $accomodation1->setNumberOfNights(2); $accomodation1->setCost('187'); $accomodation1->setCurrency($this->getReference('currency-eur')); $travelRequest1->addAccomodation($accomodation1); } // Create status comment $comment1 = new CommentTRStatus(); $comment1->setContent('Generated by the system.'); // Add travel request states $travelRequest1Status = new StatesTravelRequests($this->getReference('created')); $travelRequest1Status->setComment($comment1); $travelRequest1->addState($travelRequest1Status); $manager->persist($travelRequest1); // Second travel request $user = $this->getReference('user'); $departureDate2 = new \DateTime('next month tuesday'); $arrivalDate2 = clone $departureDate2; $arrivalDate2->add(new \DateInterval('P1W')); $travelRequest2 = new TravelRequest(); $travelRequest2->setUser($user); $travelRequest2->setGeneralManager($this->getReference('generalManager')); $travelRequest2->setDepartureDate($departureDate2); $travelRequest2->setArrivalDate($arrivalDate2); $travelRequest2->setCustomerRelated(0); $travelRequest2->setCustomerName('IBM'); $travelRequest2->setTripPurpose('Business meeting'); // Add Destinations if ($this->hasReference('currency-huf') && $this->hasReference('transportation-type-airplane')) { $destination3 = new TRDestination(); $destination3->setTransportationType($this->getReference('transportation-type-airplane')); $destination3->setName('UK'); $destination3->setCost('112500'); $destination3->setCurrency($this->getReference('currency-huf')); $travelRequest2->addDestination($destination3); } if ($this->hasReference('currency-gbp') && $this->hasReference('transportation-type-taxi')) { $destination4 = new TRDestination(); $destination4->setTransportationType($this->getReference('transportation-type-taxi')); $destination4->setName('Westpoint Hotel'); $destination4->setCost('35'); $destination4->setCurrency($this->getReference('currency-gbp')); $travelRequest2->addDestination($destination4); $destination5 = new TRDestination(); $destination5->setTransportationType($this->getReference('transportation-type-bus')); $destination5->setName('London weekly pass'); $destination5->setCost('16.50'); $destination5->setCurrency($this->getReference('currency-gbp')); $travelRequest2->addDestination($destination5); } // Add accomodation if ($this->hasReference('currency-gbp')) { $accomodation2 = new TRAccomodation(); $accomodation2->setHotelName('Westpoint Hotel'); $accomodation2->setCity('London'); $accomodation2->setNumberOfNights(7); $accomodation2->setCost('753'); $accomodation2->setCurrency($this->getReference('currency-gbp')); $travelRequest2->addAccomodation($accomodation2); } // Fake the state times $createdDateTime = new \DateTime(); $createdDateTime->sub(new \DateInterval('PT1H')); $forApprovalDateTime = clone $createdDateTime; $forApprovalDateTime->add(new \DateInterval('PT10M')); // Add travel request states (scope user) $travelRequest2Status = new StatesTravelRequests($this->getReference('created')); $travelRequest2Status->setCreatedUser($user); $travelRequest2Status->setCreated($createdDateTime); $travelRequest2->addState($travelRequest2Status); $travelRequest3Status = new StatesTravelRequests($this->getReference('forApproval')); $travelRequest3Status->setCreatedUser($user); $travelRequest3Status->setCreated($forApprovalDateTime); $travelRequest2->addState($travelRequest3Status); $travelRequest4Status = new StatesTravelRequests($this->getReference('approved')); $travelRequest4Status->setCreatedUser($this->getReference('generalManager')); $travelRequest2->addState($travelRequest4Status); $manager->persist($travelRequest2); $manager->flush(); // Grant owner access $aclManager->grant($travelRequest1, $admin); $aclManager->grant($travelRequest2, $user); $this->addReference('travel-request-approved', $travelRequest2); $this->addReference('travel-request-status-approved', $travelRequest4Status); }
/** * Method to create and/or save travelExpense * * @param boolean $isNewTravelExpense * @param \Opit\OpitHrm\TravelBundle\Entity\TravelRequest $travelRequest * @param \Opit\OpitHrm\TravelBundle\Entity\TravelExpense $travelExpense * @param EntityManager $entityManager * @param ArrayCollection $children * @param Request $request * @return form */ protected function handleForm($isNewTravelExpense, $travelRequest, $travelExpense, EntityManager $entityManager, $children, $request) { $form = $this->createForm(new ExpenseType($travelRequest->getUser()->getEmployee(), $isNewTravelExpense), $travelExpense, array('em' => $entityManager)); if ($request->isMethod('POST')) { $form->handleRequest($request); if ($form->isValid()) { $statusManager = $this->get('opit.manager.travel_expense_status_manager'); $isNew = $travelExpense->getId(); $travelExpense = $this->get('opit.model.travel_expense')->calculateAdvances($travelExpense); $this->get('opit.model.travel_expense')->removeChildNodes($travelExpense, $children); $travelExpense->setTravelRequest($travelRequest); $entityManager->persist($travelExpense); $entityManager->flush(); // Create initial state for new travel expense. if (null === $isNew) { $statusManager->addStatus($travelExpense, Status::CREATED); } return true; } } return $form; }
/** * Method to check if travel expense can be added * * @param \Symfony\Component\Security\Core\User\UserInterface $user * @param \Opit\OpitHrm\TravelBundle\Entity\TravelRequest $travelRequest * @param type $travelRequestStatusId * @param type $isAdmin * @return type */ protected function isTECreateable(UserInterface $user, TravelRequest $travelRequest, $travelRequestStatusId, $isAdmin) { if (Status::APPROVED === $travelRequestStatusId && ($isAdmin || $user === $travelRequest->getUser())) { return VoterInterface::ACCESS_GRANTED; } return VoterInterface::ACCESS_DENIED; }