diff --git a/src/Command/FixScoreQualificationsCommand.php b/src/Command/FixScoreQualificationsCommand.php new file mode 100644 index 0000000000..20e77e83be --- /dev/null +++ b/src/Command/FixScoreQualificationsCommand.php @@ -0,0 +1,90 @@ +io = new SymfonyStyle($input, $output); + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $count = 0; + $countScoreChanged = 0; + $countQualifChanged = 0; + + $startDate = new \DateTimeImmutable('2024-02-14'); + $endDate = new \DateTimeImmutable('2024-03-08'); + + /** @var Signalement[] $signalements */ + $signalements = $this->signalementRepository->findSignalementsBetweenDates($startDate, $endDate); + + $this->io->info(\sprintf('%s signalements à parcourir.', \count($signalements))); + + /** @var Signalement $signalement */ + foreach ($signalements as $signalement) { + $oldScore = $signalement->getScore(); + /** @var ArrayCollection $oldQualifications */ + $oldQualifications = new ArrayCollection($signalement->getSignalementQualifications()->toArray()); + + $newScore = $this->criticiteCalculator->calculate($signalement); + $signalement->setScore($newScore); + $this->signalementQualificationUpdater->updateQualificationFromScore($signalement); + $newQualifications = $signalement->getSignalementQualifications(); + $this->signalementManager->save($signalement, false); + + if (abs($oldScore - $newScore) > 0.00001) { + $this->io->info(\sprintf('Score of signalement %s changed from %s to %s.', + $signalement->getUuid(), $oldScore, $newScore)); + ++$countScoreChanged; + } + if ($oldQualifications->count() !== $newQualifications->count()) { + $this->io->info(\sprintf('Number of qualifications of signalement %s changed %s to %s.', + $signalement->getUuid(), $oldQualifications->count(), $newQualifications->count())); + ++$countQualifChanged; + } + + ++$count; + } + $this->signalementManager->flush(); + + $this->io->success(\sprintf( + '%s signalements were analyzed. %s scores changed. %s number of qualifications changed', + $count, + $countScoreChanged, + $countQualifChanged + )); + + return Command::SUCCESS; + } +} diff --git a/src/Repository/SignalementRepository.php b/src/Repository/SignalementRepository.php index a4809cebce..afb00efd85 100755 --- a/src/Repository/SignalementRepository.php +++ b/src/Repository/SignalementRepository.php @@ -1375,4 +1375,17 @@ public function findSynchroIdoss($status): array ->getQuery() ->getResult(); } + + public function findSignalementsBetweenDates(\DateTimeImmutable $startDate, \DateTimeImmutable $endDate): array + { + $qb = $this->createQueryBuilder('s'); + + return $qb + ->where('s.createdAt BETWEEN :startDate AND :endDate') + ->setParameter('startDate', $startDate) + ->setParameter('endDate', $endDate) + ->orderBy('s.createdAt', 'ASC') + ->getQuery() + ->getResult(); + } }