예제 #1
0
 /**
  * Concierges must be able to create Tickets manually.
  *
  * @Template()
  */
 public function createTicketAction(Request $request)
 {
     $event = $this->eventRepo->getNextEvent()->getOrThrow(new AccessDeniedHttpException('No event.'));
     $registration = new Registration();
     $registration->setEvent($event);
     $registration->setConfirmed(true);
     $form = $this->formFactory->create(new TicketType(), $registration, array('action' => $request->getPathInfo()));
     $form->handleRequest($request);
     if ($form->isValid()) {
         /* @var Registration $formData */
         $formData = $form->getData();
         $registerCommand = new RegisterCommand();
         $registerCommand->event = $event;
         $registerCommand->email = $formData->getEmail();
         $registerCommand->name = $formData->getName();
         $registerCommand->twitter = $formData->getTwitter();
         $registerCommand->saturday = $formData->getSaturday();
         $registerCommand->sunday = $formData->getSunday();
         $registerCommand->tags = $formData->getTags();
         $registerCommand->type = $formData->getType();
         $registerCommand->confirmed = $formData->isConfirmed();
         $this->commandBus->handle($registerCommand);
         /* @var FlashBagInterface $fb */
         $fb = $request->getSession()->getFlashBag();
         foreach (array(Ticket::DAY_SATURDAY => $formData->getSaturday(), Ticket::DAY_SUNDAY => $formData->getSunday()) as $day => $want) {
             if (!$want) {
                 continue;
             }
             $ticketCommand = new CreateTicketCommand();
             $ticketCommand->day = $day;
             $ticketCommand->event = $event;
             $ticketCommand->registration = $registration;
             $this->commandBus->handle($ticketCommand);
             $fb->add('info', sprintf('Ticket für %s / %s angelegt.', $registration->getEmail(), $day == Ticket::DAY_SATURDAY ? 'Samstag' : 'Sonntag'));
         }
         return new RedirectResponse($this->router->generate('bcrmweb_concierge_index'));
     }
     return array('form' => $form->createView());
 }
예제 #2
0
 /**
  * @test
  * @group functional
  * @group regression
  * @depends vipTicketsShouldNotCountForEventCapacity
  */
 public function vipTicketsShouldBeCreatedIfEventIsOverCapacity()
 {
     /* @var $em \Doctrine\Common\Persistence\ObjectManager */
     $client = static::createClient();
     $container = $client->getContainer();
     $em = $container->get('doctrine')->getManager();
     $event = $em->getRepository('BCRMBackendBundle:Event\\Event')->findAll()[0];
     $event->setCapacity(1);
     $em->persist($event);
     $em->flush();
     // Create Sponsor registration
     $sponsor2 = new Registration();
     $sponsor2->setName('Sponsor 2');
     $sponsor2->setEvent($event);
     $sponsor2->setEmail('*****@*****.**');
     $sponsor2->setSaturday(true);
     $sponsor2->setConfirmed(true);
     $sponsor2->setType(Registration::TYPE_SPONSOR);
     $em->persist($sponsor2);
     $em->flush();
     $this->createTicketsCommand($container);
     $this->assertEquals(6, count($em->getRepository('BCRMBackendBundle:Event\\Ticket')->findBy(array('event' => $event, 'day' => Ticket::DAY_SATURDAY))));
 }
예제 #3
0
 /**
  * @test
  * @group functional
  */
 public function listUnprintedTickets()
 {
     $client = static::createClient();
     $container = $client->getContainer();
     // Confirm registration key
     /* @var $em \Doctrine\Common\Persistence\ObjectManager */
     $em = $container->get('doctrine')->getManager();
     $event = $em->getRepository('BCRMBackendBundle:Event\\Event')->findAll()[0];
     // Create registrations
     for ($i = 0; $i < 5; $i++) {
         $registration = new Registration();
         $registration->setEmail(sprintf('*****@*****.**', $i));
         $registration->setName(sprintf('John Doe %d', $i));
         $registration->setEvent($event);
         $registration->setConfirmed(true);
         $registration->setSaturday(false);
         $registration->setSunday(true);
         $registration->setTags(sprintf('#johndoe%d', $i));
         $em->persist($registration);
     }
     // Create tickets
     for ($i = 0; $i < 5; $i++) {
         $checkedIn = $i > 1;
         $sundayTicket = new Ticket();
         $sundayTicket->setEmail(sprintf('*****@*****.**', $i));
         $sundayTicket->setName(sprintf('John Doe %d', $i));
         $sundayTicket->setEvent($event);
         $sundayTicket->setDay(Ticket::DAY_SUNDAY);
         $sundayTicket->setCode(sprintf('PRNT%d', $i));
         $sundayTicket->setNotified(true);
         $sundayTicket->setCheckedIn($checkedIn);
         $em->persist($sundayTicket);
         $saturdayTicket = new Ticket();
         $saturdayTicket->setEmail(sprintf('*****@*****.**', $i));
         $saturdayTicket->setName(sprintf('John Doe %d', $i));
         $saturdayTicket->setEvent($event);
         $saturdayTicket->setDay(Ticket::DAY_SATURDAY);
         $saturdayTicket->setCode(sprintf('NOPRNT%d', $i));
         $saturdayTicket->setNotified(true);
         $saturdayTicket->setCheckedIn($checkedIn);
         $em->persist($saturdayTicket);
     }
     $em->flush();
     $client = static::createClient(array(), array('PHP_AUTH_USER' => 'concierge', 'PHP_AUTH_PW' => 'letmein'));
     $client->request('GET', '/api/printing/queue');
     $response = $client->getResponse();
     $this->assertEquals(200, $response->getStatusCode());
     $this->assertEquals("application/json", $response->headers->get('Content-Type'));
     $this->assertEquals("utf-8", $response->getCharset());
     $queue = json_decode($response->getContent());
     $this->assertEquals(3, count($queue->items));
     $ticket = $queue->items[0];
     $this->assertObjectHasAttribute('name', $ticket);
     $this->assertObjectHasAttribute('tags', $ticket);
     $this->assertObjectHasAttribute('code', $ticket);
     $this->assertObjectHasAttribute('day', $ticket);
     $this->assertEquals('#' . strtolower(str_replace(' ', '', $ticket->name)), $ticket->tags);
     $this->assertEquals(1, preg_match('/^PRNT[0-9]+$/', $ticket->code));
     $this->assertEquals(2, $ticket->day);
     return $queue->items;
 }
예제 #4
0
 /**
  * @test
  * @group   functional
  * @depends removeTickets
  */
 public function thereShouldBeNoMoreTicketsThanCapacity()
 {
     $client = static::createClient();
     $container = $client->getContainer();
     /* @var $em \Doctrine\Common\Persistence\ObjectManager */
     $em = $container->get('doctrine')->getManager();
     $this->assertEquals(0, count($em->getRepository('BCRMBackendBundle:Event\\Ticket')->findAll()));
     $event = $em->getRepository('BCRMBackendBundle:Event\\Event')->findAll()[0];
     // Create confirmed registrations
     for ($i = 1; $i <= 5; $i++) {
         $email = 'john.doe.198' . $i . '@domain.com';
         $registration = new Registration();
         $registration->setName($i);
         $registration->setEvent($event);
         $registration->setEmail($email);
         $registration->setSaturday(true);
         $registration->setConfirmed(true);
         $em->persist($registration);
     }
     $em->flush();
     $this->createTicketsCommand($container);
     $tickets = $em->getRepository('BCRMBackendBundle:Event\\Ticket')->findBy(array('event' => $event, 'day' => Ticket::DAY_SATURDAY));
     $this->assertEquals(3, count($tickets));
     $this->assertInArray('*****@*****.**', array_map(function (Ticket $t) {
         return $t->getEmail();
     }, $tickets));
     // Unregister Tickets
     $unregistration = new Unregistration();
     $unregistration->setEvent($event);
     $unregistration->setEmail('*****@*****.**');
     $unregistration->setConfirmed(true);
     $unregistration->setSaturday(true);
     $em->persist($unregistration);
     $em->flush();
     $this->processUnregistrationsCommand($container);
     $this->assertEquals(2, count($em->getRepository('BCRMBackendBundle:Event\\Ticket')->findBy(array('event' => $event, 'day' => Ticket::DAY_SATURDAY))));
     $this->createTicketsCommand($container);
     $tickets = $em->getRepository('BCRMBackendBundle:Event\\Ticket')->findBy(array('event' => $event, 'day' => Ticket::DAY_SATURDAY));
     $this->assertEquals(3, count($tickets));
     $this->assertNotInArray('*****@*****.**', array_map(function (Ticket $t) {
         return $t->getEmail();
     }, $tickets));
 }