From bcc9a6ac0ebee2fbeb0484bebc5ee85627ba0f12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Tue, 26 Aug 2025 14:02:20 +0200 Subject: [PATCH] feat: cli command to update teamer status on a yearly basis closes #8699yr1eh --- src/Command/TeamerStatusCommand.php | 71 +++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/Command/TeamerStatusCommand.php diff --git a/src/Command/TeamerStatusCommand.php b/src/Command/TeamerStatusCommand.php new file mode 100644 index 0000000..22c2471 --- /dev/null +++ b/src/Command/TeamerStatusCommand.php @@ -0,0 +1,71 @@ +entityManager + ->getRepository(Teamer::class) + ->createQueryBuilder('teamer') + ; + + $teamersToUpdate = $qb + ->innerJoin('teamer.dispositions', 'disposition') + ->where($qb->expr()->andX( + $qb->expr()->eq('teamer.status', ':teamer_status'), + $qb->expr()->eq('disposition.status', ':disposition_status') + )) + ->groupBy('teamer.id') + ->setParameters([ + 'teamer_status' => Teamer::STATUS_NEW, + 'disposition_status' => Disposition::STATUS_COMPLETED, + ]) + ->getQuery() + ->getResult() + ; + + $teamersCount = count($teamersToUpdate); + + if (0 === $teamersCount) { + $output->writeln('No teamer status to update'); + + return Command::SUCCESS; + } + + foreach ($teamersToUpdate as $teamer) { + $teamer->setStatus(Teamer::STATUS_EXISTING); + } + + $this->entityManager->flush(); + + $output->writeln('Updated '.$teamersCount.' teamer status'); + + $this->logger->info('Update teamers status', [ + 'teamers_count' => $teamersCount, + ]); + + return Command::SUCCESS; + } +}