/**
  * Move tickets and rooms from the waiting list
  * to pending if there are free quota
  */
 public function updateWaitingListCommand()
 {
     $registrationsToNotify = [];
     $numberOfTickets = $this->bookableService->getTicketsStatus();
     if ($numberOfTickets > 0) {
         $waitingTickets = $this->ticketRepository->findWaitingByCount($numberOfTickets);
         /** @var Ticket $ticket */
         foreach ($waitingTickets as $ticket) {
             $priorBookingState = $ticket->getBookingState();
             $ticket->setBookingState(AbstractBookable::BOOKING_STATE_PENDING);
             $this->ticketRepository->update($ticket);
             /** @var Participant $participant */
             $participant = $this->registrationParticipantRepository->findOneByTicket($ticket);
             /** @var Registration $notification */
             $notification = $participant->getRegistration();
             $registrationIdentifier = $this->persistenceManager->getIdentifierByObject($notification);
             if (!array_key_exists($registrationIdentifier, $registrationsToNotify)) {
                 $registrationsToNotify[$registrationIdentifier] = ['registration' => $notification, 'ticketBookingStateChanged' => [], 'roomBookingStateChanged' => []];
             }
             $participantIdentifier = $this->persistenceManager->getIdentifierByObject($participant);
             $registrationsToNotify[$registrationIdentifier]['ticketBookingStateChanged'][$participantIdentifier] = ['participant' => $participant, 'priorBookingState' => $priorBookingState, 'newBookingState' => $ticket->getBookingState()];
         }
     }
     $numberOfRooms = $this->bookableService->getTicketsStatus();
     if ($numberOfRooms > 0) {
         $waitingRooms = $this->roomRepository->findWaitingByCount($numberOfRooms);
         /** @var Room $room */
         foreach ($waitingRooms as $room) {
             $priorBookingState = $room->getBookingState();
             $room->setBookingState(AbstractBookable::BOOKING_STATE_PENDING);
             $this->roomRepository->update($room);
             /** @var Participant $participant */
             $participant = $this->registrationParticipantRepository->findOneByRoom($room);
             /** @var Registration $registration */
             $notification = $participant->getRegistration();
             $registrationIdentifier = $this->persistenceManager->getIdentifierByObject($notification);
             if (!array_key_exists($registrationIdentifier, $registrationsToNotify)) {
                 $registrationsToNotify[$registrationIdentifier] = ['registration' => $notification, 'ticketBookingStateChanged' => [], 'roomBookingStateChanged' => []];
             }
             $participantIdentifier = $this->persistenceManager->getIdentifierByObject($participant);
             $registrationsToNotify[$registrationIdentifier]['roomBookingStateChanged'][$participantIdentifier] = ['participant' => $participant, 'priorBookingState' => $priorBookingState, 'newBookingState' => $room->getBookingState()];
         }
     }
     $this->persistenceManager->persistAll();
     /** @var array $notification */
     foreach ($registrationsToNotify as $notification) {
         $this->mailService->sendMoveToWaitingListMail($notification);
     }
 }
 /**
  * @param Participant $participant
  * @return void
  */
 protected function isValid($participant)
 {
     if ($this->participantRepository->findOneByAccount($this->securityContext->getAccount())) {
         $this->addError('There is already a registration for this account', 1422907478);
     }
 }