From d247a7a129eb41d0724e1526a3cb4fa134d5ad09 Mon Sep 17 00:00:00 2001 From: Gregory Trullemans Date: Sun, 5 Dec 2021 19:41:35 +0100 Subject: [PATCH] Upgrade UI and statistics/skill component --- people/urls.py | 4 +- people/views.py | 57 +++++---- templates/followup/chronos/list.html | 4 +- templates/peoples/gymnasts/details.html | 24 +--- .../peoples/gymnasts/list_scores_chronos.html | 2 +- .../{statistics.html => list_skill.html} | 109 ++++++++++++++++-- 6 files changed, 138 insertions(+), 62 deletions(-) rename templates/peoples/gymnasts/{statistics.html => list_skill.html} (70%) diff --git a/people/urls.py b/people/urls.py index 1e30de4166..d8cf4ecf2d 100644 --- a/people/urls.py +++ b/people/urls.py @@ -8,8 +8,8 @@ gymnast_urlpatterns = [ path(r"details//", views.gymnast_details, name="gymnast_details"), path( r"/statistics/", - views.gymnast_display_stats, - name="gymnast_display_stats", + views.gymnast_display_skill, + name="gymnast_display_skill", ), path( r"/routine/", diff --git a/people/views.py b/people/views.py index 15fd96d0d2..6f6bdaf257 100644 --- a/people/views.py +++ b/people/views.py @@ -59,8 +59,8 @@ def gymnast_details(request, gymnastid): gymnast = get_object_or_404(Gymnast, pk=gymnastid) learnedskills_list = LearnedSkill.objects.filter(gymnast=gymnastid).order_by('-date')[:10] nb_skill = Skill.objects.all().count() - known_skill = LearnedSkill.objects.filter(gymnast=gymnastid).count() - percentage_known_skill = ( known_skill / nb_skill ) * 100 + nb_known_skill = LearnedSkill.objects.filter(gymnast=gymnastid).distinct('skill').count() + percentage_known_skill = ( nb_known_skill / nb_skill ) * 100 chronos_list = Chrono.objects.filter(gymnast=gymnastid).order_by('-date')[:10] straightjump_score = Chrono.objects.filter(gymnast=gymnastid).filter(type=0).order_by('-date') best_straightjump = Chrono.objects.filter(gymnast=gymnastid).filter(type=0).order_by('-score')[:1] @@ -80,7 +80,7 @@ def gymnast_details(request, gymnastid): 'best_routine': best_routine, 'best_straightjump': best_straightjump, 'nb_skill': nb_skill, - 'known_skill': known_skill, + 'nb_known_skill': nb_known_skill, 'points_routine_1_list': points_routine_1_list, 'points_routine_2_list': points_routine_2_list, 'points_routine_final_list': points_routine_final_list, @@ -181,7 +181,6 @@ def gymnast_display_routines(request, gymnastid): gymnast = get_object_or_404(Gymnast, pk=gymnastid) ghr_list = gymnast.has_routine.prefetch_related("routine") context = {"ghr_list": ghr_list, "gymnastid": gymnastid} - print(context) return render(request, "peoples/gymnasts/list_routine.html", context) @@ -199,7 +198,6 @@ def link_routine_to_gymnast(request, gymnastid=None): data = {"dateend": None} if request.method == "POST": - print(request.POST) form = GymnastHasRoutineForm(request.POST) if form.is_valid(): @@ -245,7 +243,7 @@ def gymnast_create_or_update(request, gymnastid=None): return render(request, "peoples/gymnasts/create.html", context) -def __getInformationsFromLevel(gymnast, total_known_skill): +def __getInformationsFromLevel(gymnast, gymnast_nb_known_skills): """ Calcule toutes les statistiques par rapport au niveau. """ @@ -312,22 +310,22 @@ def __getInformationsFromLevel(gymnast, total_known_skill): ).exclude(known_by__gymnast=gymnast.id) # Liste des Skill que le gymnaste ne sais PAS faire (ayant un niveau plus grand que le niveau max du gym) - context["new_unknown_skill"] = Skill.objects.filter( + context["unknown_skill"] = Skill.objects.filter( level__gt=context["max_level_educative"] ).exclude(known_by__gymnast=gymnast.id) else: context["max_level_educative"] = 0 context["total_skill"] = Skill.objects.all().count() - context["new_unknown_skill"] = Skill.objects.all() + context["unknown_skill"] = Skill.objects.all() # Calcul des statistiques if context["total_skill"] != 0: context["completude"] = "%s%%" % ( - int((total_known_skill / context["total_skill"]) * 100) + int((gymnast_nb_known_skills / context["total_skill"]) * 100) ) context["evaluated_level"] = int( - context["max_level_educative"] * (total_known_skill / context["total_skill"]) + context["max_level_educative"] * (gymnast_nb_known_skills / context["total_skill"]) ) else: context["completude"] = 0 @@ -336,7 +334,7 @@ def __getInformationsFromLevel(gymnast, total_known_skill): return context -def __getInformationsFromRank(gymnast, total_known_skill): +def __getInformationsFromRank(gymnast, gymnast_nb_known_skills): """ Calcule toutes les statistiques par rapport au rang. """ @@ -421,22 +419,22 @@ def __getInformationsFromRank(gymnast, total_known_skill): # Liste des Skill que le gymnaste ne sais PAS faire (ayant un niveau # plus grand que le niveau max du gym) - context["new_unknown_skill"] = Skill.objects.filter( + context["unknown_skill"] = Skill.objects.filter( level__gt=context["max_rank_educative"] ).exclude(known_by__gymnast=gymnast.id) else: context["max_rank_educative"] = 0 context["total_skill"] = Skill.objects.all().count() - context["new_unknown_skill"] = Skill.objects.all() + context["unknown_skill"] = Skill.objects.all() # Calcul des statistiques if context["total_skill"] != 0: context["completude"] = "%s%%" % ( - int((total_known_skill / context["total_skill"]) * 100) + int((gymnast_nb_known_skills / context["total_skill"]) * 100) ) context["evaluated_level"] = (min_rank - 1) + ( - int(context["max_rank_educative"] * (total_known_skill / context["total_skill"])) + int(context["max_rank_educative"] * (gymnast_nb_known_skills / context["total_skill"])) ) else: context["completude"] = 0 @@ -447,9 +445,9 @@ def __getInformationsFromRank(gymnast, total_known_skill): @login_required @require_http_methods(["GET"]) -def gymnast_display_stats(request, gymnastid): +def gymnast_display_skill(request, gymnastid): """ - Tag affichant les statistiques d'un gymnaste : le nombre de saut qu'il sait faire (total, + Tag affichant les statistiques de skill d'un gymnaste : le nombre de saut qu'il sait faire (total, par niveau, par rank, …), calcule la complétude, … .. todo:: Générer UNE fois la liste de skill que le gymnaste ne sait pas faire (1 query) @@ -457,11 +455,11 @@ def gymnast_display_stats(request, gymnastid): affiche conditionnellement (par age, par rank, ...) """ gymnast = get_object_or_404(Gymnast, pk=gymnastid) - # Nombre de Skill que le gymnaste sait faire - gymnast_known_skills = gymnast.known_skills.count() + + gymnast_nb_known_skills = gymnast.known_skills.distinct('skill').count() context = {} - context = __getInformationsFromLevel(gymnast, gymnast_known_skills) - context.update(__getInformationsFromRank(gymnast, gymnast_known_skills)) + context = __getInformationsFromLevel(gymnast, gymnast_nb_known_skills) + context.update(__getInformationsFromRank(gymnast, gymnast_nb_known_skills)) if gymnast.gender: context["skill_by_age"] = Skill.objects.filter(age_girl__lte=gymnast.age).exclude( @@ -472,7 +470,18 @@ def gymnast_display_stats(request, gymnastid): known_by__gymnast=gymnast.id ) - context["gymnast"] = gymnast - context["total_known_skill"] = gymnast_known_skills + # skill_whith_help = Skill.objects.filter(known_by__gymnast=gymnastid).filter(known_by__cando=1).exclude(known_by__gymnast=gymnastid, known_by__cando=2) + skill_whith_help = Skill.objects.filter(known_by__gymnast=gymnastid, known_by__cando=1).exclude( + known_by__gymnast=gymnast.id, known_by__cando__gte=2 + ).distinct() - return render(request, "peoples/gymnasts/statistics.html", context) \ No newline at end of file + skill_not_chained = Skill.objects.filter(known_by__gymnast=gymnastid, known_by__cando=2).exclude( + known_by__gymnast=gymnast.id, known_by__cando=3 + ).distinct() + + context["skill_whith_help"] = skill_whith_help + context["skill_not_chained"] = skill_not_chained + context["gymnast"] = gymnast + context["gymnast_nb_known_skills "] = gymnast_nb_known_skills + + return render(request, "peoples/gymnasts/list_skill.html", context) \ No newline at end of file diff --git a/templates/followup/chronos/list.html b/templates/followup/chronos/list.html index eb761bbac5..9b2af9c107 100644 --- a/templates/followup/chronos/list.html +++ b/templates/followup/chronos/list.html @@ -25,9 +25,9 @@ - Jumper + Gymnast Date - ToF + Time of Flight diff --git a/templates/peoples/gymnasts/details.html b/templates/peoples/gymnasts/details.html index 4157dab64b..cee172bac5 100644 --- a/templates/peoples/gymnasts/details.html +++ b/templates/peoples/gymnasts/details.html @@ -24,7 +24,7 @@
{{ gymnast.age }} years ({{ gymnast.birthdate | date:"d F Y" }}){{ gymnast.get_orientation_display }}
{{ gymnast.club.name }} - {{ gymnast.club.place.city }}
- {{ gymnast.trainings_by_week }} training/week - {{ gymnast.hours_by_week }} hours/week
+ {{ gymnast.trainings_by_week }} training/week for {{ gymnast.hours_by_week }} hours/week

{% if best_routine or best_straightjump %}
Bests Scores
@@ -42,15 +42,12 @@
- {{ known_skill }} known skill on {{ nb_skill }} skills. + {{ nb_known_skill }} known skills on {{ nb_skill }} skills.
- @@ -95,7 +92,7 @@ {% endif %}
-
+
{% if chronos_list %} @@ -161,16 +158,6 @@ Accidents - -
+ + + + + + + + + + + + {% for skill in skill_whith_help %} + + + + + + + + + {% endfor %} + +
LabelDiff.LevelRankNotation
+ + + {{ skill.long_label }}{{ skill.difficulty }}{{ skill.level }}{{ skill.rank }}{{ skill.notation }}
+
+ {% endif %} + + {% if skill_not_chained %} +
+ + + + + + + + + + + + + {% for skill in skill_not_chained %} + + + + + + + + + {% endfor %} + +
LabelDiff.LevelRankNotation
+ + {{ skill.long_label }}{{ skill.difficulty }}{{ skill.level }}{{ skill.rank }}{{ skill.notation }}
+
+ {% endif %} + {% if skill_by_rank %} -
+
@@ -78,7 +163,7 @@ {% endif %} {% if skill_by_level %} -
+
@@ -117,7 +202,7 @@ {% endif %} {% if skill_by_age %} -
+
@@ -155,8 +240,8 @@ {% endif %} - {% if new_unknown_skill %} -
+ {% if unknown_skill %} +
@@ -169,7 +254,7 @@ - {% for skill in new_unknown_skill %} + {% for skill in unknown_skill %}