mirror of
https://forge.chapril.org/tykayn/osm-commerces
synced 2025-10-09 17:02:46 +02:00
menu latéral ville
This commit is contained in:
parent
f4c5e048ff
commit
2e459122b5
11 changed files with 1008 additions and 236 deletions
103
src/Command/CreateStatsFromDemandesCommand.php
Normal file
103
src/Command/CreateStatsFromDemandesCommand.php
Normal file
|
@ -0,0 +1,103 @@
|
|||
<?php
|
||||
|
||||
namespace App\Command;
|
||||
|
||||
use App\Entity\Demande;
|
||||
use App\Entity\Stats;
|
||||
use App\Repository\DemandeRepository;
|
||||
use App\Repository\StatsRepository;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Component\Console\Attribute\AsCommand;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
|
||||
#[AsCommand(
|
||||
name: 'app:create-stats-from-demandes',
|
||||
description: 'Create Stats objects for cities with Demandes but no Stats',
|
||||
)]
|
||||
class CreateStatsFromDemandesCommand extends Command
|
||||
{
|
||||
private EntityManagerInterface $entityManager;
|
||||
private DemandeRepository $demandeRepository;
|
||||
private StatsRepository $statsRepository;
|
||||
|
||||
public function __construct(
|
||||
EntityManagerInterface $entityManager,
|
||||
DemandeRepository $demandeRepository,
|
||||
StatsRepository $statsRepository
|
||||
) {
|
||||
parent::__construct();
|
||||
$this->entityManager = $entityManager;
|
||||
$this->demandeRepository = $demandeRepository;
|
||||
$this->statsRepository = $statsRepository;
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||
{
|
||||
$io = new SymfonyStyle($input, $output);
|
||||
$io->title('Creating Stats objects for cities with Demandes but no Stats');
|
||||
|
||||
// Find all Demandes with INSEE codes
|
||||
$demandesWithInsee = $this->demandeRepository->createQueryBuilder('d')
|
||||
->where('d.insee IS NOT NULL')
|
||||
->getQuery()
|
||||
->getResult();
|
||||
|
||||
if (empty($demandesWithInsee)) {
|
||||
$io->warning('No Demandes with INSEE codes found.');
|
||||
return Command::SUCCESS;
|
||||
}
|
||||
|
||||
$io->info(sprintf('Found %d Demandes with INSEE codes.', count($demandesWithInsee)));
|
||||
|
||||
// Group Demandes by INSEE code
|
||||
$demandesByInsee = [];
|
||||
/** @var Demande $demande */
|
||||
foreach ($demandesWithInsee as $demande) {
|
||||
$insee = $demande->getInsee();
|
||||
if (!isset($demandesByInsee[$insee])) {
|
||||
$demandesByInsee[$insee] = [];
|
||||
}
|
||||
$demandesByInsee[$insee][] = $demande;
|
||||
}
|
||||
|
||||
$io->info(sprintf('Found %d unique INSEE codes.', count($demandesByInsee)));
|
||||
|
||||
// Check which INSEE codes don't have Stats objects
|
||||
$newStatsCount = 0;
|
||||
foreach ($demandesByInsee as $insee => $demandes) {
|
||||
$stats = $this->statsRepository->findOneBy(['zone' => $insee]);
|
||||
if ($stats === null) {
|
||||
// Create a new Stats object for this INSEE code
|
||||
$stats = new Stats();
|
||||
$stats->setZone((string) $insee);
|
||||
|
||||
// Try to set the city name from the first Demande
|
||||
$firstDemande = $demandes[0];
|
||||
if ($firstDemande->getQuery()) {
|
||||
// Use the query as a fallback name (will be updated during labourage)
|
||||
$stats->setName($firstDemande->getQuery());
|
||||
}
|
||||
|
||||
$stats->setDateCreated(new \DateTime());
|
||||
$stats->setDateLabourageRequested(new \DateTime());
|
||||
|
||||
$this->entityManager->persist($stats);
|
||||
$newStatsCount++;
|
||||
|
||||
$io->text(sprintf('Created Stats for INSEE code %s', $insee));
|
||||
}
|
||||
}
|
||||
|
||||
if ($newStatsCount > 0) {
|
||||
$this->entityManager->flush();
|
||||
$io->success(sprintf('Created %d new Stats objects.', $newStatsCount));
|
||||
} else {
|
||||
$io->info('No new Stats objects needed to be created.');
|
||||
}
|
||||
|
||||
return Command::SUCCESS;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue