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; }
public function createOrUpdate(\AppBundle\DRV_Import\Athlete $athlete, LoggerInterface $logger) { /** @var \AppBundle\Entity\Competitor $dbItem */ $dbItem = null; $gotError = false; try { $this->findByAthlete($athlete, $logger); } catch (NonUniqueResultException $e) { $gotError = true; } if (null != $dbItem) { $logger->debug("Found competitor with id [{$dbItem->getId()}] for DRV-ID [{$athlete->drv_id}]"); // check and update if necessary $updates = false; if ($dbItem->getLastName() != $athlete->lastname) { $dbItem->setLastName($athlete->lastname); $updates = true; } if ($dbItem->getFirstName() != $athlete->firstname) { $dbItem->setFirstName($athlete->firstname); $updates = true; } if ($dbItem->getYearOfBirth() != $athlete->yearofbirth) { $dbItem->setYearOfBirth($athlete->yearofbirth); $updates = true; } if ($athlete->is_female && $dbItem->getGender() != Competitor::GENDER_FEMALE) { $dbItem->setGender(Competitor::GENDER_FEMALE); } elseif (!$athlete->is_female && $dbItem->getGender() != Competitor::GENDER_MALE) { $dbItem->setGender(Competitor::GENDER_MALE); } if ($dbItem->getDrvId() != $athlete->drv_id) { $dbItem->setDrvId($athlete->drv_id); } if ($updates) { $logger->debug("Updating competitor with id [{$dbItem->getId()}]"); $this->getEntityManager()->persist($dbItem); } } else { if (!$gotError) { $logger->debug("Found nothing. Create a new competitor."); // create competitor $dbItem = new Competitor(); $dbItem->setLastName($athlete->lastname)->setFirstName($athlete->firstname)->setYearOfBirth($athlete->yearofbirth)->setGender($athlete->is_female ? Competitor::GENDER_FEMALE : Competitor::GENDER_MALE)->setDrvId($athlete->drv_id); $this->getEntityManager()->persist($dbItem); } else { throw new NonUniqueResultException("got multiple results for competitor: [{$athlete->lastname}, {$athlete->firstname}, {$athlete->yearofbirth}]"); } } 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())); }
/** * Creates a form to delete a Competitor entity. * * @param Competitor $competitor The Competitor entity * * @return \Symfony\Component\Form\Form The form */ private function createDeleteForm(Competitor $competitor) { return $this->createFormBuilder()->setAction($this->generateUrl('competitor_delete', array('id' => $competitor->getId())))->setMethod('DELETE')->getForm(); }