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;
 }
示例#4
0
 /**
  * {@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);
 }
示例#5
0
 /**
  * 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;
 }