From 4e80a6a3a18e950c1d9f9fede364cc79b720f891 Mon Sep 17 00:00:00 2001 From: osaajani <> Date: Tue, 30 May 2023 18:05:38 +0200 Subject: [PATCH] Improve dashboard stats to show sended sms status stats --- controllers/internals/Console.php | 44 ++++ controllers/internals/Sended.php | 12 +- controllers/publics/Dashboard.php | 30 ++- models/Sended.php | 6 +- templates/dashboard/show.php | 395 +++++++++++++++++------------- 5 files changed, 288 insertions(+), 199 deletions(-) diff --git a/controllers/internals/Console.php b/controllers/internals/Console.php index 3451252..2315629 100644 --- a/controllers/internals/Console.php +++ b/controllers/internals/Console.php @@ -11,6 +11,8 @@ namespace controllers\internals; +use DateInterval; + /** * Class to call the console scripts. */ @@ -212,4 +214,46 @@ namespace controllers\internals; $internal_quota = new \controllers\internals\Quota($bdd); $internal_quota->renew_quotas(); } + + /** + * Do some fake population renewal. + */ + public function f() + { + $bdd = \descartes\Model::_connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD); + $internal_sended = new \controllers\internals\Sended($bdd); + + $destinations = ['+33612345678','+33612345679','+33612345680',]; + $statuses = [\models\Sended::STATUS_DELIVERED, \models\Sended::STATUS_FAILED, \models\Sended::STATUS_UNKNOWN]; + $day = new \DateTime(); + $day->sub(new DateInterval('P30D')); + for ($i = 0; $i < 30; $i++) + { + $day->add(new DateInterval('P1D')); + $n = rand(0, 100); + for ($j = 0; $j < $n; $j++) + { + $id_user = 1; + $id_phone = rand(1, 2); + $destination = $destinations[array_rand($destinations)]; + $status = $statuses[array_rand($statuses)]; + $internal_sended->create( + $id_user, + $id_phone, + $day->format('Y-m-d H:i:s'), + "TEST N°$i:$j", + $destination, + uniqid(), + 'adapters\TestAdapter', + false, + false, + null, + [], + null, + $status, + ); + } + } + + } } diff --git a/controllers/internals/Sended.php b/controllers/internals/Sended.php index e58577c..5096621 100644 --- a/controllers/internals/Sended.php +++ b/controllers/internals/Sended.php @@ -207,17 +207,9 @@ use Exception; * * @return array */ - public function count_by_day_since_for_user(int $id_user, $date) + public function count_by_day_and_status_since_for_user(int $id_user, $date) { - $counts_by_day = $this->get_model()->count_by_day_since_for_user($id_user, $date); - $return = []; - - foreach ($counts_by_day as $count_by_day) - { - $return[$count_by_day['at_ymd']] = $count_by_day['nb']; - } - - return $return; + return $this->get_model()->count_by_day_and_status_since_for_user($id_user, $date); } /** diff --git a/controllers/publics/Dashboard.php b/controllers/publics/Dashboard.php index 9cb84ac..bc7b3ed 100644 --- a/controllers/publics/Dashboard.php +++ b/controllers/publics/Dashboard.php @@ -87,11 +87,12 @@ namespace controllers\publics; $stats_start_date_formated = $stats_start_date->format('Y-m-d'); } - $nb_sendeds_by_day = $this->internal_sended->count_by_day_since_for_user($id_user, $stats_start_date_formated); + $nb_sendeds_by_day = $this->internal_sended->count_by_day_and_status_since_for_user($id_user, $stats_start_date_formated); $nb_receiveds_by_day = $this->internal_received->count_by_day_since_for_user($id_user, $stats_start_date_formated); //On va traduire ces données pour les afficher en graphique - $array_area_chart = []; + $array_bar_chart_sended = []; + $array_bar_chart_received = []; $date = clone $stats_start_date; $one_day = new \DateInterval('P1D'); @@ -101,12 +102,15 @@ namespace controllers\publics; while ($date <= $now) { $date_f = $date->format('Y-m-d'); - $array_area_chart[$date_f] = [ + $array_bar_chart_sended[$date_f] = [ 'period' => $date_f, - 'sendeds' => 0, - 'receiveds' => 0, + 'sendeds_failed' => 0, + 'sendeds_unknown' => 0, + 'sendeds_delivered' => 0, ]; + $array_bar_chart_received[$date_f] = ['period' => $date_f, 'receiveds' => 0]; + $date->add($one_day); } @@ -114,15 +118,16 @@ namespace controllers\publics; $total_receiveds = 0; //0n remplie le tableau avec les données adaptées - foreach ($nb_sendeds_by_day as $date => $nb_sended) + foreach ($nb_sendeds_by_day as $nb_sended) { - $array_area_chart[$date]['sendeds'] = $nb_sended; - $total_sendeds += $nb_sended; + $array_bar_chart_sended[$nb_sended['at_ymd']]['sendeds_' . $nb_sended['status']] = $nb_sended['nb']; + $array_bar_chart_sended[$nb_sended['at_ymd']]['sendeds_total'] = ($array_bar_chart_sended[$nb_sended['at_ymd']]['sendeds_total'] ?? 0) + $nb_sended['nb']; + $total_sendeds += $nb_sended['nb']; } foreach ($nb_receiveds_by_day as $date => $nb_received) { - $array_area_chart[$date]['receiveds'] = $nb_received; + $array_bar_chart_received[$date]['receiveds'] = $nb_received; $total_receiveds += $nb_received; } @@ -130,7 +135,8 @@ namespace controllers\publics; $avg_sendeds = round($total_sendeds / $nb_days, 2); $avg_receiveds = round($total_receiveds / $nb_days, 2); - $array_area_chart = array_values($array_area_chart); + $array_bar_chart_sended = array_values($array_bar_chart_sended); + $array_bar_chart_received = array_values($array_bar_chart_received); $this->render('dashboard/show', [ 'nb_contacts' => $nb_contacts, @@ -145,7 +151,9 @@ namespace controllers\publics; 'sendeds' => $sendeds, 'receiveds' => $receiveds, 'events' => $events, - 'data_area_chart' => json_encode($array_area_chart), + 'data_bar_chart_sended' => json_encode($array_bar_chart_sended), + 'data_bar_chart_received' => json_encode($array_bar_chart_received), + 'stats_start_date_formated' => $stats_start_date_formated, ]); } } diff --git a/models/Sended.php b/models/Sended.php index 3644dee..e742e24 100644 --- a/models/Sended.php +++ b/models/Sended.php @@ -222,14 +222,14 @@ namespace models; * * @return array */ - public function count_by_day_since_for_user($id_user, $date) + public function count_by_day_and_status_since_for_user($id_user, $date) { $query = " - SELECT COUNT(id) as nb, DATE_FORMAT(at, '%Y-%m-%d') as at_ymd + SELECT COUNT(id) as nb, status, DATE_FORMAT(at, '%Y-%m-%d') as at_ymd FROM sended WHERE at > :date AND id_user = :id_user - GROUP BY at_ymd + GROUP BY at_ymd, status "; $params = [ diff --git a/templates/dashboard/show.php b/templates/dashboard/show.php index 9c5f52f..137ec52 100644 --- a/templates/dashboard/show.php +++ b/templates/dashboard/show.php @@ -1,147 +1,160 @@ render('incs/head') + //Template dashboard + + $this->render('incs/head') ?>
render('incs/nav', ['page' => 'dashboard']) + $this->render('incs/nav', ['page' => 'dashboard']) ?> -
-
- -
-
-

- Dashboard Statistiques d'utilisation -

- -
-
- +
+
+ +
+
+

+ Dashboard Statistiques d'utilisation +

+ +
+
+ -
-
-
-
-
-
- -
-
-
-
Contacts
-
-
-
- - - -
-
-
-
-
-
-
- -
-
-
-
Groupes
-
-
-
- - - -
-
-
-
-
-
-
- -
-
-
-
SMS programmés
-
-
-
- - - -
-
-
-
-
-
-
- -
-
-
-
SMS non lus
-
-
-
- - - -
-
-
- +
+
+
+
+
+
+ +
+
+
+
Contacts
+
+
+
+ + + +
+
+
+
+
+
+
+ +
+
+
+
Groupes
+
+
+
+ + + +
+
+
+
+
+
+
+ +
+
+
+
SMS programmés
+
+
+
+ + + +
+
+
+
+
+
+
+ +
+
+
+
SMS non lus
+
+
+
+ + + +
+
+
+ -
-
-
-
-

Activité de la semaine :

- SMS envoyés (moyenne = par jour).
- SMS reçus (moyenne = par jour). +
+
+
+
+

SMS envoyés depuis le :

+ SMS envoyés (moyenne = par jour).

Crédits restants : . -
-
-
-
-
-
-
- +
+
+
+
+
+
+
-
-
-
-

SMS Envoyés

-
+
+
+
+

SMS reçus depuis le :

+ SMS reçus (moyenne = par jour). +
+
+
+
+
+
+
+ + +
+
+
+
+

SMS Envoyés

+
Vous n'avez envoyé aucun SMS pour l'instant. @@ -168,14 +181,14 @@ Voir tous les SMS envoyés
-
-
-
-
-
-
-

SMS Reçus

-
+
+
+
+
+
+
+

SMS Reçus

+
Vous n'avez reçu aucun SMS pour l'instant. @@ -204,14 +217,14 @@ Voir tous les SMS reçus
-
-
-
-
-
-
-

Évènements survenus

-
+
+
+
+
+
+
+

Évènements survenus

+
Aucun évènement n'est encore survenu. @@ -228,41 +241,73 @@ Voirs tous les évènements survenus
-
-
-
-
- +
+
+ + + - - + + - - + + render('incs/footer'); + $this->render('incs/footer');