add history on stats

This commit is contained in:
Tykayn 2025-06-17 19:38:44 +02:00 committed by tykayn
parent 7fb0c9c8c2
commit b61fa6a287
11 changed files with 502 additions and 37 deletions

View file

@ -8,6 +8,7 @@ use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use App\Entity\Place;
use App\Entity\Stats;
use App\Entity\StatsHistory;
use App\Service\Motocultrice;
use Doctrine\ORM\EntityManagerInterface;
use function uuid_create;
@ -146,6 +147,8 @@ final class AdminController extends AbstractController
$city = $this->motocultrice->get_city_osm_from_zip_code($insee_code);
if (!$stats) {
$stats = new Stats();
$stats->setDateCreated(new \DateTime());
$stats->setDateModified(new \DateTime());
$stats->setZone($insee_code)
->setPlacesCount(0)
->setAvecHoraires(0)
@ -234,15 +237,30 @@ final class AdminController extends AbstractController
// Mettre à jour les statistiques finales
$stats->computeCompletionPercent();
if($stats->getDateCreated() == null) {
$stats->setDateCreated(new \DateTime());
}
$stats->setDateModified(new \DateTime());
// Créer un historique des statistiques
$statsHistory = new StatsHistory();
$statsHistory->setDate(new \DateTime())
->setStats($stats);
$statsHistory->setPlacesCount($stats->getPlaces()->count())
->setOpeningHoursCount($stats->getAvecHoraires())
->setAddressCount($stats->getAvecAdresse())
->setWebsiteCount($stats->getAvecSite())
->setSiretCount($stats->getAvecSiret())
// ->setAccessibiliteCount($stats->getAvecAccessibilite())
// ->setNoteCount($stats->getAvecNote())
->setCompletionPercent($stats->getCompletionPercent())
->setStats($stats);
$this->entityManager->persist($statsHistory);
$this->entityManager->persist($stats);
$this->entityManager->flush();
@ -253,10 +271,11 @@ final class AdminController extends AbstractController
$this->addFlash('success', $message);
} catch (\Exception $e) {
$this->addFlash('error', 'Erreur lors du labourage : ' . $e->getMessage());
die(var_dump($e));
}
return $this->redirectToRoute('app_public_dashboard');
// return $this->redirectToRoute('app_admin_stats', ['insee_code' => $insee_code]);
// return $this->redirectToRoute('app_public_dashboard');
return $this->redirectToRoute('app_admin_stats', ['insee_code' => $insee_code]);
}
#[Route('/admin/delete/{id}', name: 'app_admin_delete')]

View file

@ -16,10 +16,10 @@ class Stats
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
#[ORM\Column(length: 255, type: Types::STRING, nullable: true)]
private ?string $zone = null; // code insee de la zone
#[ORM\Column(type: Types::SMALLINT)]
#[ORM\Column(type: Types::INTEGER, nullable: true)]
private ?int $completion_percent = null;
/**
@ -29,27 +29,27 @@ class Stats
private Collection $places;
// nombre de commerces dans la zone
#[ORM\Column(type: Types::SMALLINT, nullable: true)]
#[ORM\Column(type: Types::INTEGER, nullable: true)]
private ?int $places_count = null;
// nombre de commerces avec horaires
#[ORM\Column(type: Types::SMALLINT, nullable: true)]
#[ORM\Column(type: Types::INTEGER, nullable: true)]
private ?int $avec_horaires = null;
// nombre de commerces avec adresse
#[ORM\Column(type: Types::SMALLINT, nullable: true)]
#[ORM\Column(type: Types::INTEGER, nullable: true)]
private ?int $avec_adresse = null;
// nombre de commerces avec site
#[ORM\Column(type: Types::SMALLINT, nullable: true)]
#[ORM\Column(type: Types::INTEGER, nullable: true)]
private ?int $avec_site = null;
// nombre de commerces avec accessibilité
#[ORM\Column(type: Types::SMALLINT, nullable: true)]
#[ORM\Column(type: Types::INTEGER, nullable: true)]
private ?int $avec_accessibilite = null;
// nombre de commerces avec note
#[ORM\Column(type: Types::SMALLINT, nullable: true)]
#[ORM\Column(type: Types::INTEGER, nullable: true)]
private ?int $avec_note = null;
#[ORM\Column(length: 255, nullable: true)]
@ -59,10 +59,10 @@ class Stats
#[ORM\Column(type: Types::INTEGER, nullable: true)]
private ?int $population = null;
#[ORM\Column(type: Types::SMALLINT, nullable: true)]
#[ORM\Column(type: Types::INTEGER, nullable: true)]
private ?int $siren = null;
#[ORM\Column(type: Types::SMALLINT, nullable: true)]
#[ORM\Column(type: Types::INTEGER, nullable: true)]
private ?int $codeEpci = null;
#[ORM\Column(length: 255, nullable: true)]
@ -74,6 +74,18 @@ class Stats
#[ORM\OneToMany(targetEntity: StatsHistory::class, mappedBy: 'stats')]
private Collection $statsHistories;
#[ORM\Column(nullable: true)]
private ?\DateTime $date_created = null;
#[ORM\Column(nullable: true)]
private ?\DateTime $date_modified = null;
#[ORM\Column(nullable: true)]
private ?int $avec_siret = null;
#[ORM\Column(nullable: true)]
private ?int $avec_name = null;
// calcule le pourcentage de complétion de la zone
public function computeCompletionPercent(): ?int
{
@ -352,6 +364,54 @@ class Stats
return $this;
}
public function getDateCreated(): ?\DateTime
{
return $this->date_created;
}
public function setDateCreated(?\DateTime $date_created): static
{
$this->date_created = $date_created;
return $this;
}
public function getDateModified(): ?\DateTime
{
return $this->date_modified;
}
public function setDateModified(?\DateTime $date_modified): static
{
$this->date_modified = $date_modified;
return $this;
}
public function getAvecSiret(): ?int
{
return $this->avec_siret;
}
public function setAvecSiret(?int $avec_siret): static
{
$this->avec_siret = $avec_siret;
return $this;
}
public function getAvecName(): ?int
{
return $this->avec_name;
}
public function setAvecName(?int $avec_name): static
{
$this->avec_name = $avec_name;
return $this;
}
}

View file

@ -29,6 +29,24 @@ class StatsHistory
#[ORM\ManyToOne(inversedBy: 'statsHistories')]
private ?Stats $stats = null;
#[ORM\Column]
private ?\DateTime $date = null;
#[ORM\Column(nullable: true)]
private ?int $names_count = null;
#[ORM\Column(nullable: true)]
private ?int $opening_hours_count = null;
#[ORM\Column(nullable: true)]
private ?int $website_count = null;
#[ORM\Column(nullable: true)]
private ?int $address_count = null;
#[ORM\Column(nullable: true)]
private ?int $siret_count = null;
public function getId(): ?int
{
@ -95,4 +113,76 @@ class StatsHistory
return $this;
}
public function getDate(): ?\DateTime
{
return $this->date;
}
public function setDate(\DateTime $date): static
{
$this->date = $date;
return $this;
}
public function getNamesCount(): ?int
{
return $this->names_count;
}
public function setNamesCount(?int $names_count): static
{
$this->names_count = $names_count;
return $this;
}
public function getOpeningHoursCount(): ?int
{
return $this->opening_hours_count;
}
public function setOpeningHoursCount(?int $opening_hours_count): static
{
$this->opening_hours_count = $opening_hours_count;
return $this;
}
public function getWebsiteCount(): ?int
{
return $this->website_count;
}
public function setWebsiteCount(?int $website_count): static
{
$this->website_count = $website_count;
return $this;
}
public function getAddressCount(): ?int
{
return $this->address_count;
}
public function setAddressCount(?int $address_count): static
{
$this->address_count = $address_count;
return $this;
}
public function getSiretCount(): ?int
{
return $this->siret_count;
}
public function setSiretCount(?int $siret_count): static
{
$this->siret_count = $siret_count;
return $this;
}
}