householdRepository = $householdRepository; } public function householdAddressApi($id, Request $request, string $_format): Response { return $this->addRemoveSomething('address', $id, $request, $_format, 'address', Address::class, [ 'groups' => [ 'read' ] ]); } /** * Find Household of people participating to the same AccompanyingPeriod * * @ParamConverter("person", options={"id" = "person_id"}) */ public function suggestHouseholdByAccompanyingPeriodParticipationApi(Person $person, string $_format) { // TODO add acl $count = $this->householdRepository->countByAccompanyingPeriodParticipation($person); $paginator = $this->getPaginatorFactory()->create($count); if ($count === 0) { $households = []; } else { $households = $this->householdRepository->findByAccompanyingPeriodParticipation($person, $paginator->getItemsPerPage(), $paginator->getCurrentPageFirstItemNumber()); } $collection = new Collection($households, $paginator); return $this->json($collection, Response::HTTP_OK, [], [ "groups" => ["read"]]); } /** * @Route("/api/1.0/person/address/suggest/by-household/{household_id}.{_format}", * name="chill_person_address_suggest_by_household", * requirements={ * "_format"="json" * } * ) * @ParamConverter("household", options={"id" = "household_id"}) */ public function suggestAddressByHousehold(Household $household, string $_format) { // TODO add acl $addresses = []; // collect addresses from location in courses foreach ($household->getCurrentPersons() as $person) { foreach ($person->getAccompanyingPeriodParticipations() as $participation) { if (null !== $participation->getAccompanyingPeriod()->getAddressLocation()) { $a = $participation->getAccompanyingPeriod()->getAddressLocation(); $addresses[$a->getId()] = $a; } if (null !== $personLocation = $participation ->getAccompanyingPeriod()->getPersonLocation()) { $a = $personLocation->getCurrentHouseholdAddress(); if (null !== $a) { $addresses[$a->getId()] = $a; } } } } // remove the actual address $actual = $household->getCurrentAddress(); if (null !== $actual) { $addresses = \array_filter($addresses, fn($a) => $a !== $actual); } return $this->json(\array_values($addresses), Response::HTTP_OK, [], [ 'groups' => [ 'read' ] ]); } }