configureCommand(self::DESCRIPTION); $this->addArgument('mode', InputArgument::REQUIRED, 'If the notification is related to the startAt (value = start) date or endAt date (vakue = end) of the service request.'); } 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 $mode */ $mode = $input->getArgument('mode'); $isStartMode = $mode === 'start'; $io->note(' > mode : '.$mode); $io->newLine(); $io->section('Getting services request...'); $query = $isStartMode ? $this->serviceRequestRepository->getStartingAtTomorow() : $this->serviceRequestRepository->getEndingAtTomorow() ; $emailClass = $isStartMode ? NotifyServiceRequestStartEmail::class : NotifyServiceRequestEndEmail::class ; $io->section('Sending notifications...'); $count = 0; foreach ($query->toIterable() as $serviceRequest) { /** @var ServiceRequest $serviceRequest */ $referenceDate = $isStartMode ? $serviceRequest->getStartAt() : $serviceRequest->getEndAt() ; $io->comment(sprintf(' > notifying owner and recipient for service request %s (%s) starting on %s.', $serviceRequest->getId(), $serviceRequest->getStatus()->value, $referenceDate->format('Y-m-d') )); $context = [ 'service_request' => $serviceRequest, 'user' => $serviceRequest->getOwner(), '%product%' => $serviceRequest->getProduct()->getName(), '%date%' => $referenceDate->format($this->translator->trans('format.date', [], 'date')), ]; $this->appMailer->send($emailClass, $context); $this->sendSms($serviceRequest->getOwner(), $emailClass, $context); $context['user'] = $serviceRequest->getRecipient(); $this->appMailer->send($emailClass, $context); $this->sendSms($serviceRequest->getRecipient(), $emailClass, $context); ++$count; } $io->note(sprintf(' > %d notification(s) sent.', $count * 2)); // owner and recipient $this->memoryReport($io); $this->done($io); return Command::SUCCESS; } }