diff --git a/lacommunaute/pages/tests/tests.py b/lacommunaute/pages/tests/tests.py index 18784374e..9165da0ea 100644 --- a/lacommunaute/pages/tests/tests.py +++ b/lacommunaute/pages/tests/tests.py @@ -16,6 +16,8 @@ def test_context_data(self): url = reverse("pages:statistiques") date = timezone.now() names = ["nb_uniq_engaged_visitors", "nb_uniq_visitors", "nb_uniq_active_visitors"] + + # datas for daily stats for name in names: StatFactory(name=name, date=date) undesired_period_stat = StatFactory( @@ -29,9 +31,12 @@ def test_context_data(self): self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "pages/statistiques.html") - # expected values + # datas for monthly stats + for name in names: + StatFactory(name=name, period=Period.MONTH, date=date) + + # expected values for daily stats self.assertIn("stats", response.context) - self.assertIn("date", response.context["stats"]) self.assertIn("nb_uniq_engaged_visitors", response.context["stats"]) self.assertIn("nb_uniq_visitors", response.context["stats"]) self.assertIn("nb_uniq_active_visitors", response.context["stats"]) @@ -41,6 +46,14 @@ def test_context_data(self): self.assertNotIn(undesired_period_stat.date.strftime("%Y-%m-%d"), response.context["stats"]["date"]) self.assertNotIn(undesired_date_stat.date.strftime("%Y-%m-%d"), response.context["stats"]["date"]) + # expected values for monthly stats + self.assertIn("period", response.context) + self.assertIn("nb_uniq_visitors", response.context) + self.assertIn("nb_uniq_active_visitors", response.context) + self.assertIn("nb_uniq_engaged_visitors", response.context) + self.assertIn("activation_percent", response.context) + self.assertIn("engagement_percent", response.context) + class LandingPagesListViewTest(TestCase): def test_context_data(self): diff --git a/lacommunaute/pages/views.py b/lacommunaute/pages/views.py index 2f66ecc06..a44ef75f8 100644 --- a/lacommunaute/pages/views.py +++ b/lacommunaute/pages/views.py @@ -6,6 +6,7 @@ from django.db.models.functions import Cast from django.shortcuts import render from django.utils import timezone +from django.utils.dateformat import format from django.views.generic.base import TemplateView from lacommunaute.forum.enums import Kind as ForumKind @@ -13,6 +14,7 @@ from lacommunaute.forum_conversation.models import Topic from lacommunaute.forum_stats.models import Stat from lacommunaute.utils.json import extract_values_in_list +from lacommunaute.utils.math import percent logger = logging.getLogger(__name__) @@ -25,6 +27,30 @@ def contact(request): class StatistiquesPageView(TemplateView): template_name = "pages/statistiques.html" + def get_funnel_data(self): + qs = Stat.objects.current_month_datas() + + stats = { + "period": None, + "nb_uniq_visitors": 0, + "nb_uniq_active_visitors": 0, + "nb_uniq_engaged_visitors": 0, + } + + if qs.filter(name="nb_uniq_visitors").exists(): + stats["period"] = format(qs.get(name="nb_uniq_visitors")["date"], "F Y") + stats["nb_uniq_visitors"] = qs.get(name="nb_uniq_visitors")["value"] + + if qs.filter(name="nb_uniq_active_visitors").exists(): + stats["nb_uniq_active_visitors"] = qs.get(name="nb_uniq_active_visitors")["value"] + + if qs.filter(name="nb_uniq_engaged_visitors").exists(): + stats["nb_uniq_engaged_visitors"] = qs.get(name="nb_uniq_engaged_visitors")["value"] + + stats["activation_percent"] = percent(stats["nb_uniq_active_visitors"], stats["nb_uniq_visitors"]) + stats["engagement_percent"] = percent(stats["nb_uniq_engaged_visitors"], stats["nb_uniq_visitors"]) + return stats + def get_context_data(self, **kwargs): indicator_names = [ "nb_uniq_engaged_visitors", @@ -40,6 +66,7 @@ def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["stats"] = extract_values_in_list(datas, indicator_names) + context = {**context, **self.get_funnel_data()} return context diff --git a/lacommunaute/templates/pages/statistiques.html b/lacommunaute/templates/pages/statistiques.html index a598386ce..0fca79a9d 100644 --- a/lacommunaute/templates/pages/statistiques.html +++ b/lacommunaute/templates/pages/statistiques.html @@ -27,36 +27,21 @@

Acquisition

- Utilisateurs - 3192 - -16%/mois précédent + Utilisateurs + {{ nb_uniq_visitors }}
- Utilisateurs actifs - 3067 -
    -
  • - 96% des Utilisateurs -
  • -
  • - +1,4%/mois précédent -
  • -
+ Utilisateurs actifs + {{ nb_uniq_active_visitors }} + {{ activation_percent }}% des utilisateurs
- Utilisateurs engagés - 1539 -
    -
  • - 50.2% des Util. Actifs -
  • -
  • - +3%/mois préc. -
  • -
+ Utilisateurs engagés + {{nb_uniq_engaged_visitors }} + {{ engagement_percent }}% des util. actifs
-
- Période : Août 2023 +
+ Période : {{ period }}