configureCommand(self::DESCRIPTION); $this->addArgument('days', InputArgument::REQUIRED, 'Number of days from tomorrow (1 = notifiy members expiring tomorrow)'); } protected function execute(InputInterface $input, OutputInterface $output): int { $io = new SymfonyStyle($input, $output); $io->title(self::DESCRIPTION.' ('.$this->environment.' env)'); $this->memoryReport($io); /** @var string $days */ $days = $input->getArgument('days'); $days = max(1, (int) $days); $io->section(\sprintf('Getting membership expiring in %d days...', $days)); $query = $this->userGroupRepository->getExpiring($days); $io->section('Sending notificaitons...'); $count = 0; foreach ($query->toIterable() as $userGroup) { /** @var UserGroup $userGroup */ $user = $userGroup->getUser(); $group = $userGroup->getGroup(); $io->comment(\sprintf(' > notifying membership for %s of %s/%s (%s) (%s)', $group->getName(), $user->getDisplayName(), $userGroup->getEndAt()?->format('Y-m-d'), $userGroup->getMembership()->value, $user->getId() )); $this->appMailer->send(NotifyMembershipExpirationEmail::class, compact('user', 'group', 'days')); $this->sendSms($user, EndMembershipEmail::class, [ '%group%' => $group->getName(), '%days' => $days, ]); ++$count; } $io->note(\sprintf(' > %d notification(s) sent.', $count)); $this->memoryReport($io); $this->done($io); return Command::SUCCESS; } }