diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitAttendeesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitAttendeesApiController.php index 917b4e42..f8a082bd 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitAttendeesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitAttendeesApiController.php @@ -15,6 +15,7 @@ use App\Http\Utils\EpochCellFormatter; use App\Jobs\Emails\InviteAttendeeTicketEditionMail; use App\Jobs\Emails\SummitAttendeeTicketRegenerateHashEmail; +use App\Jobs\SynchAllAttendeesStatus; use App\ModelSerializers\SerializerUtils; use App\Services\Model\IAttendeeService; use App\Services\Model\ISummitOrderService; @@ -350,6 +351,8 @@ final class OAuth2SummitAttendeesApiController extends OAuth2ProtectedController $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->getResourceServerContext())->find($summit_id); if (is_null($summit)) return $this->error404(); + SynchAllAttendeesStatus::dispatch($summit->getId()); + return $this->_getAll( function () { return [ diff --git a/app/Jobs/SynchAllAttendeesStatus.php b/app/Jobs/SynchAllAttendeesStatus.php new file mode 100644 index 00000000..a45ddcba --- /dev/null +++ b/app/Jobs/SynchAllAttendeesStatus.php @@ -0,0 +1,70 @@ +summit_id = $summit_id; + } + + /** + * @param ISummitRepository $repository + * @param ITransactionService $tx_service + * @throws \Exception + */ + public function handle( + ISummitRepository $repository, + ITransactionService $tx_service + ) + { + Log::debug(sprintf("SynchAllAttendeesStatus::handle summit %s", $this->summit_id)); + $tx_service->transaction(function() use($repository){ + $summit = $repository->getById($this->summit_id); + if(is_null($summit)) + throw new EntityNotFoundException(sprintf("Summit %s not found", $this->summit_id)); + + $summit->synchAllAttendeesStatus(); + }); + } +} + diff --git a/app/Models/Foundation/Summit/Summit.php b/app/Models/Foundation/Summit/Summit.php index 773f9295..efd9a5b9 100644 --- a/app/Models/Foundation/Summit/Summit.php +++ b/app/Models/Foundation/Summit/Summit.php @@ -5312,6 +5312,12 @@ SQL; } } + public function synchAllAttendeesStatus():void{ + foreach($this->attendees as $attendee){ + $attendee->updateStatus(); + } + } + public function synchPresentationAction(Presentation $presentation):void{ $presentation->initializeActions(); } diff --git a/app/Repositories/Summit/DoctrineSummitAttendeeRepository.php b/app/Repositories/Summit/DoctrineSummitAttendeeRepository.php index da426c31..c0fb101e 100644 --- a/app/Repositories/Summit/DoctrineSummitAttendeeRepository.php +++ b/app/Repositories/Summit/DoctrineSummitAttendeeRepository.php @@ -118,6 +118,9 @@ final class DoctrineSummitAttendeeRepository 'company' => 'e.company_name', 'member_id' => 'm.id', 'status' => 'e.status', + 'email' => <<getEntityManager() ->createQueryBuilder() ->select("e") @@ -150,7 +154,6 @@ final class DoctrineSummitAttendeeRepository $query->setParameter("summit_id", $summit->getId()); if(!is_null($filter)){ - $filter->apply2Query($query, $this->getFilterMappings()); } @@ -166,12 +169,12 @@ final class DoctrineSummitAttendeeRepository ->setFirstResult($paging_info->getOffset()) ->setMaxResults($paging_info->getPerPage()); - $paginator = new Paginator($query, $fetchJoinCollection = true); - $total = $paginator->count(); - $data = array(); - + $paginator = new Paginator($query); + $data = []; foreach($paginator as $entity) - array_push($data, $entity); + $data[] = $entity; + + $total = $paginator->count(); return new PagingResponse ( @@ -278,4 +281,5 @@ final class DoctrineSummitAttendeeRepository return $query->getQuery()->getOneOrNullResult(); } + } \ No newline at end of file