diff --git a/migrations/Version20250712121647.php b/migrations/Version20250712121647.php
new file mode 100644
index 0000000..2d6808d
--- /dev/null
+++ b/migrations/Version20250712121647.php
@@ -0,0 +1,35 @@
+addSql(<<<'SQL'
+ ALTER TABLE place CHANGE email email VARCHAR(255) CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`, CHANGE note note LONGTEXT CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`, CHANGE name name VARCHAR(255) CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`, CHANGE note_content note_content VARCHAR(255) CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`, CHANGE street street VARCHAR(255) CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`, CHANGE housenumber housenumber VARCHAR(255) CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`, CHANGE siret siret VARCHAR(255) CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`, CHANGE osm_user osm_user VARCHAR(255) CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`, CHANGE email_content email_content LONGTEXT CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_0900_ai_ci`
+ SQL);
+ }
+
+ public function down(Schema $schema): void
+ {
+ // this down() migration is auto-generated, please modify it to your needs
+ $this->addSql(<<<'SQL'
+ ALTER TABLE place CHANGE email email VARCHAR(255) DEFAULT NULL, CHANGE note note VARCHAR(255) DEFAULT NULL, CHANGE name name VARCHAR(255) DEFAULT NULL, CHANGE note_content note_content VARCHAR(255) DEFAULT NULL, CHANGE street street VARCHAR(255) DEFAULT NULL, CHANGE housenumber housenumber VARCHAR(255) DEFAULT NULL, CHANGE siret siret VARCHAR(255) DEFAULT NULL, CHANGE osm_user osm_user VARCHAR(255) DEFAULT NULL, CHANGE email_content email_content LONGTEXT DEFAULT NULL
+ SQL);
+ }
+}
diff --git a/src/Controller/FollowUpController.php b/src/Controller/FollowUpController.php
index 1e73ce0..2ed362a 100644
--- a/src/Controller/FollowUpController.php
+++ b/src/Controller/FollowUpController.php
@@ -114,36 +114,61 @@ class FollowUpController extends AbstractController
$themes = \App\Service\FollowUpService::getFollowUpThemes();
$all_completion_data = [];
$latest_diffs = [];
+ // Définir les bornes de période
+ $now = new \DateTime();
+ $periods = [
+ '7j' => (clone $now)->modify('-7 days'),
+ '30j' => (clone $now)->modify('-30 days'),
+ '6mois' => (clone $now)->modify('-6 months'),
+ ];
foreach ($themes as $type => $label) {
$all_completion_data[$type] = $series[$type . '_completion'] ?? [];
- // Calcul du diff sur 7 jours pour le nombre et la complétion
$count_series = $series[$type . '_count'] ?? [];
$completion_series = $series[$type . '_completion'] ?? [];
- $count_now = count($count_series) ? $count_series[count($count_series)-1]['value'] : null;
- $count_7d = null;
- foreach (array_reverse($count_series) as $point) {
- $date = \DateTime::createFromFormat('Y-m-d', $point['date']);
- if ($date && $date <= (new \DateTime('-7 days'))) {
- $count_7d = $point['value'];
- break;
+ // Fonction utilitaire pour trouver la valeur la plus proche avant ou égale à une date
+ $findValueAtOrBefore = function($series, \DateTime $date) {
+ $val = null;
+ foreach (array_reverse($series) as $point) {
+ $ptDate = \DateTime::createFromFormat('Y-m-d', $point['date']);
+ if ($ptDate && $ptDate <= $date) {
+ $val = $point['value'];
+ break;
+ }
}
- }
- $completion_now = count($completion_series) ? $completion_series[count($completion_series)-1]['value'] : null;
- $completion_7d = null;
- foreach (array_reverse($completion_series) as $point) {
- $date = \DateTime::createFromFormat('Y-m-d', $point['date']);
- if ($date && $date <= (new \DateTime('-7 days'))) {
- $completion_7d = $point['value'];
- break;
- }
- }
+ return $val;
+ };
+ // Valeurs aux bornes
+ $val_now = count($count_series) ? $count_series[count($count_series)-1]['value'] : null;
+ $val_7j = $findValueAtOrBefore($count_series, $periods['7j']);
+ $val_30j = $findValueAtOrBefore($count_series, $periods['30j']);
+ $val_6mois = $findValueAtOrBefore($count_series, $periods['6mois']);
+ // Différences exclusives
+ $diff_7j = ($val_now !== null && $val_7j !== null) ? $val_now - $val_7j : null;
+ $diff_30j = ($val_7j !== null && $val_30j !== null) ? $val_7j - $val_30j : null;
+ $diff_6mois = ($val_30j !== null && $val_6mois !== null) ? $val_30j - $val_6mois : null;
+ // Idem pour la complétion
+ $comp_now = count($completion_series) ? $completion_series[count($completion_series)-1]['value'] : null;
+ $comp_7j = $findValueAtOrBefore($completion_series, $periods['7j']);
+ $comp_30j = $findValueAtOrBefore($completion_series, $periods['30j']);
+ $comp_6mois = $findValueAtOrBefore($completion_series, $periods['6mois']);
+ $comp_diff_7j = ($comp_now !== null && $comp_7j !== null) ? $comp_now - $comp_7j : null;
+ $comp_diff_30j = ($comp_7j !== null && $comp_30j !== null) ? $comp_7j - $comp_30j : null;
+ $comp_diff_6mois = ($comp_30j !== null && $comp_6mois !== null) ? $comp_30j - $comp_6mois : null;
$latest_diffs[$type] = [
- 'count_now' => $count_now,
- 'count_7d' => $count_7d,
- 'count_diff' => ($count_now !== null && $count_7d !== null) ? $count_now - $count_7d : null,
- 'completion_now' => $completion_now,
- 'completion_7d' => $completion_7d,
- 'completion_diff' => ($completion_now !== null && $completion_7d !== null) ? $completion_now - $completion_7d : null,
+ 'count_now' => $val_now,
+ 'count_7j' => $val_7j,
+ 'count_30j' => $val_30j,
+ 'count_6mois' => $val_6mois,
+ 'count_diff_7j' => $diff_7j,
+ 'count_diff_30j' => $diff_30j,
+ 'count_diff_6mois' => $diff_6mois,
+ 'completion_now' => $comp_now,
+ 'completion_7j' => $comp_7j,
+ 'completion_30j' => $comp_30j,
+ 'completion_6mois' => $comp_6mois,
+ 'completion_diff_7j' => $comp_diff_7j,
+ 'completion_diff_30j' => $comp_diff_30j,
+ 'completion_diff_6mois' => $comp_diff_6mois,
'label' => $label,
];
}
diff --git a/src/Entity/Place.php b/src/Entity/Place.php
index 9c7af8c..86557f0 100644
--- a/src/Entity/Place.php
+++ b/src/Entity/Place.php
@@ -31,7 +31,7 @@ class Place
#[ORM\Column]
private ?bool $dead = null;
- #[ORM\Column(length: 255, nullable: true, options: ['charset' => 'utf8mb4'])]
+ #[ORM\Column(type: Types::TEXT, nullable: true, options: ['charset' => 'utf8mb4'])]
private ?string $note = null;
#[ORM\Column(nullable: true)]
diff --git a/templates/admin/followup_graph.html.twig b/templates/admin/followup_graph.html.twig
index afebede..a5c46d8 100644
--- a/templates/admin/followup_graph.html.twig
+++ b/templates/admin/followup_graph.html.twig
@@ -26,13 +26,15 @@
Thème
- Évolution du nombre
- Évolution de la complétion
+ Évolution 7j
+ Évolution 30j
+ Évolution 6 mois
${k}
Entrez le code INSEE de votre ville pour l'ajouter à notre base de données
-Aucun lieu modifié dans les 6 derniers mois.
{% endif %}