diff --git a/app/Console/Commands/RecalculateAttendeesStatusCommand.php b/app/Console/Commands/RecalculateAttendeesStatusCommand.php new file mode 100644 index 00000000..2ac78cc6 --- /dev/null +++ b/app/Console/Commands/RecalculateAttendeesStatusCommand.php @@ -0,0 +1,90 @@ +repository = $repository; + $this->service = $service; + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + + try { + + $start = time(); + $summit_id = $this->argument('summit_id'); + if(empty($summit_id)) + throw new \InvalidArgumentException("summit_id is required"); + $this->service->recalculateAttendeeStatus(intval($summit_id)); + $end = time(); + $delta = $end - $start; + $this->info(sprintf("execution call %s seconds", $delta)); + } + catch (Exception $ex) { + Log::error($ex); + } + } + +} \ No newline at end of file diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index be5a7b0d..821f34f2 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -44,6 +44,7 @@ class Kernel extends ConsoleKernel \App\Console\Commands\SummitEmailFlowEventSeederCommand::class, \App\Console\Commands\SummitEmailFlowTypeSeederCommand::class, \App\Console\Commands\PresentationMaterialsCreateMUXAssetsCommand::class, + \App\Console\Commands\RecalculateAttendeesStatusCommand::class, ]; /** diff --git a/app/ModelSerializers/Summit/Registration/SummitAttendeeCSVSerializer.php b/app/ModelSerializers/Summit/Registration/SummitAttendeeCSVSerializer.php index d7d299bb..81b4a28c 100644 --- a/app/ModelSerializers/Summit/Registration/SummitAttendeeCSVSerializer.php +++ b/app/ModelSerializers/Summit/Registration/SummitAttendeeCSVSerializer.php @@ -26,7 +26,7 @@ final class SummitAttendeeCSVSerializer extends SilverStripeSerializer 'Email' => 'email:json_string', 'CompanyName' => 'company:json_string', 'DisclaimerAcceptedDate' => 'disclaimer_accepted_date:datetime_epoch', + 'Status' => 'status:json_string', ]; - - + } \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Summit.php b/app/Models/Foundation/Summit/Summit.php index 3a22c08e..5fc7475f 100644 --- a/app/Models/Foundation/Summit/Summit.php +++ b/app/Models/Foundation/Summit/Summit.php @@ -2034,6 +2034,9 @@ SQL; return $this->attendees->count(); } + public function getAttendees(){ + return $this->attendees; + } /** * @return int diff --git a/app/Services/Model/AttendeeService.php b/app/Services/Model/AttendeeService.php index 83b42a3a..5b0689f7 100644 --- a/app/Services/Model/AttendeeService.php +++ b/app/Services/Model/AttendeeService.php @@ -25,6 +25,7 @@ use models\summit\factories\SummitAttendeeFactory; use models\summit\ISummitAttendeeRepository; use models\summit\ISummitAttendeeTicketRepository; use models\summit\ISummitRegistrationPromoCodeRepository; +use models\summit\ISummitRepository; use models\summit\ISummitTicketTypeRepository; use models\summit\Summit; use models\summit\SummitAttendee; @@ -71,6 +72,11 @@ final class AttendeeService extends AbstractService implements IAttendeeService */ private $promo_code_repository; + /** + * @var ISummitRepository + */ + private $summit_repository; + public function __construct ( @@ -79,6 +85,7 @@ final class AttendeeService extends AbstractService implements IAttendeeService ISummitAttendeeTicketRepository $ticket_repository, ISummitTicketTypeRepository $ticket_type_repository, ISummitRegistrationPromoCodeRepository $promo_code_repository, + ISummitRepository $summit_repository, IEventbriteAPI $eventbrite_api, ITransactionService $tx_service ) @@ -90,6 +97,7 @@ final class AttendeeService extends AbstractService implements IAttendeeService $this->ticket_type_repository = $ticket_type_repository; $this->promo_code_repository = $promo_code_repository; $this->eventbrite_api = $eventbrite_api; + $this->summit_repository = $summit_repository; } /** @@ -422,4 +430,15 @@ final class AttendeeService extends AbstractService implements IAttendeeService Log::warning($ex); } } + + public function recalculateAttendeeStatus(int $summit_id):void{ + $this->tx_service->transaction(function() use($summit_id){ + $summit = $this->summit_repository->getById($summit_id); + if(is_null($summit) || !$summit instanceof Summit) return; + + foreach($summit->getAttendees() as $attendee){ + $attendee->updateStatus(); + } + }); + } } \ No newline at end of file diff --git a/app/Services/Model/IAttendeeService.php b/app/Services/Model/IAttendeeService.php index e6822cdd..46d58708 100644 --- a/app/Services/Model/IAttendeeService.php +++ b/app/Services/Model/IAttendeeService.php @@ -102,4 +102,9 @@ interface IAttendeeService * @param Filter|null $filter */ public function send(int $summit_id, array $payload, Filter $filter = null):void; + + /** + * @param int $summit_id + */ + public function recalculateAttendeeStatus(int $summit_id):void; } \ No newline at end of file