public function createOrUpdate(Competitor $competitor, $drvClubId, \DateTime $dateTime, LoggerInterface $logger) { /** @var Membership $dbItem */ $dbItem = null; /** @var Membership $m */ foreach ($competitor->getMemberships() as $m) { if ($m->getClub()->getDrvId() == $drvClubId) { if (null != $m->getSince() && $m->getSince() < $dateTime) { if (null != $m->getUntil() && $m->getUntil() > $dateTime) { // The membership has an end, but this import falls into the active period. $dbItem = $m; } elseif (null == $m->getUntil()) { // no ending $dbItem = $m; } } } } // If no matching membership was found, create one if (null == $dbItem) { $club = $this->getEntityManager()->getRepository('AppBundle:Club')->findOneByDrvId($drvClubId); if (null != $club) { $dbItem = new Membership(); $dbItem->setPerson($competitor)->setClub($club)->setSince($dateTime); $this->getEntityManager()->persist($dbItem); $logger->info("Created new membership for " . "[{$competitor->getLastName()}, {$competitor->getFirstName()}, {$competitor->getId()}]"); } else { $message = "Found no club with DRV-ID {$drvClubId}! No membership created for " . "[{$competitor->getLastName()}, {$competitor->getFirstName()}, {$competitor->getId()}]"; $logger->warning($message); throw new \Exception($message); } } return $dbItem; }
/** * Creates a new Membership entity. * * @Route("/new/{competitor}", name="membership_new") * @Method({"GET", "POST"}) * @Security("has_role('ROLE_REGISTRATION')") */ public function newAction(Request $request, Competitor $competitor) { $membership = new Membership(); $em = $this->getDoctrine()->getManager(); // find all clubs where the given competitor is _not_ a member $myClubs = $competitor->getMemberships()->map(function ($membership) { return $membership->getClub()->getId(); }); $clubQb = $em->getRepository('AppBundle:Club')->createQueryBuilder('c'); if (0 < count($myClubs)) { $clubQb = $clubQb->where('c.id NOT IN (:clubs)')->setParameter('clubs', $myClubs); } $clubQ = $clubQb->getQuery(); $clubs = $clubQ->getResult(); $form = $this->createForm('AppBundle\\Form\\MembershipType', $membership, array('competitors' => array($competitor), 'clubs' => $clubs)); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $em->persist($membership); $em->flush(); $this->addFlash('notice', 'Neue Mitgliedschaft wurde angelegt!'); return $this->redirectToRoute('competitor_show', array('id' => $competitor->getId())); } return $this->render('membership/new.html.twig', array('membership' => $membership, 'person' => $competitor, 'form' => $form->createView())); }