public function getNextLaneForSection(RaceSection $raceSection) { $em = $this->getEntityManager(); $qb = $em->createQueryBuilder(); $qb->select('MAX(r.lane) maxNum')->from('AppBundle:Registration', 'r')->where($qb->expr()->eq('r.section', '?1'))->setParameter(1, $raceSection->getId()); return (int) $qb->getQuery()->getSingleScalarResult() + 1; }
public function createSection(Race $race, $number, LoggerInterface $logger = null) { $em = $this->getEntityManager(); $section = new RaceSection(); $section->setRace($race)->setNumber($number); $em->persist($section); if (!is_null($logger)) { $logger->info("Create section #{$number} for race {$race->getId()}"); } $em->flush(); $em->refresh($race); $em->refresh($section); return $section; }
/** * Check if all participants are cancelled or finished and if so, finish the race * @param RaceSection $section */ public function checkIfFinished(RaceSection $section) { $done = 0; /** @var Registration $reg */ foreach ($section->getValidRegistrations() as $reg) { if ($reg->isDone()) { $done += 1; } } if ($done == $section->getValidRegistrations()->count()) { $section->setStatus(RaceSectionStatus::FINISHED); $em = $this->getDoctrine()->getManager(); $em->persist($section); $em->flush(); } }