Ultron/people/views.py

198 lines
6.8 KiB
Python
Raw Normal View History

2021-11-17 10:39:16 +01:00
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from django.contrib.auth.decorators import login_required
from django.views.decorators.http import require_http_methods
from django.http import HttpResponse, HttpResponseRedirect
from django.db.models import Q
from django.contrib import messages
from .models import Gymnast
from followup.models import Chrono, LearnedSkill, MindState, Skill, Point, Accident
2021-11-17 10:39:16 +01:00
from .forms import GymnastForm
from followup.models import Event
2021-11-17 10:39:16 +01:00
import simplejson
import pendulum
2021-11-17 10:39:16 +01:00
@login_required
@require_http_methods(["GET"])
def gymnast_lookup(request):
"""
Récupère la liste des gymnastes à la volée suivant des caractères de
recherche entrés. (min 3 caractères)
"""
results = []
pattern = request.GET.get("pattern", None)
# Ignore queries shorter than length 3
if pattern is not None and len(pattern) > 3:
model_results = Gymnast.objects.filter(
Q(last_name__icontains=pattern) | Q(first_name__icontains=pattern)
)
results = [{"ID": x.id, "Name": str(x)} for x in model_results]
json = simplejson.dumps(results)
return HttpResponse(json, content_type="application/json")
@login_required
@require_http_methods(["GET"])
def gymnast_listing(request):
"""
Liste tous les gymnasts connus
2021-11-17 10:39:16 +01:00
"""
gymnast_list = Gymnast.objects.all()
context = {'gymnast_list': gymnast_list}
return render(request, "peoples/gymnasts/list.html", context)
2021-11-17 10:39:16 +01:00
@login_required
@require_http_methods(["GET"])
def gymnast_details(request, gymnastid):
"""
Récupère toutes les informations d'un gymnaste.
2021-11-17 10:39:16 +01:00
"""
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()
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]
best_routine = Chrono.objects.filter(gymnast=gymnastid).filter(type=1).order_by('-score')[:1]
routine_score = Chrono.objects.filter(gymnast=gymnastid).filter(type=1).order_by('-date')
points_routine_1_list = Point.objects.filter(gymnast=gymnastid).filter(routine_type=0).order_by('-event__datebegin')
points_routine_2_list = Point.objects.filter(gymnast=gymnastid).filter(routine_type=1).order_by('-event__datebegin')
points_routine_final_list = Point.objects.filter(gymnast=gymnastid).filter(routine_type=2).order_by('-event__datebegin')
# for point in points_routine_1_list:
# print(point.point_execution)
2021-11-17 10:39:16 +01:00
context = {
'gymnast': gymnast,
'learnedskills_list': learnedskills_list,
'chronos_list': chronos_list,
'straightjump_score': straightjump_score,
'routine_score': routine_score,
'best_routine': best_routine,
'best_straightjump': best_straightjump,
'nb_skill': nb_skill,
'known_skill': 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,
2021-11-17 10:39:16 +01:00
}
return render(request, "peoples/gymnasts/details.html", context)
2021-11-17 10:39:16 +01:00
@login_required
@require_http_methods(["GET"])
def gymnast_display_event(request, gymnastid):
"""
Renvoie deux listes d'évènements : ceux à venir et ceux passés.
"""
today = pendulum.now().date()
next_event_list = Event.objects.filter(gymnasts=gymnastid, datebegin__gte=today)
previous_event_list = Event.objects.filter(gymnasts=gymnastid, datebegin__lte=today)
context = {
"next_event_list": next_event_list,
"previous_event_list": previous_event_list,
}
return render(request, "peoples/gymnasts/event_list.html", context)
@login_required
@require_http_methods(["GET"])
def gymnast_display_accident(request, gymnastid):
"""
Renvoie deux listes d'évènements : ceux à venir et ceux passés.
"""
accident_list = Accident.objects.filter(gymnast=gymnastid)
context = {
"accidents": accident_list,
}
return render(request, "peoples/gymnasts/accident_list.html", context)
@login_required
@require_http_methods(["GET"])
def gymnast_display_scores_chrono(request, gymnastid):
"""
Selectionne tous les scores réalisés par le gymnaste
"""
score_list = Point.objects.filter(gymnast=gymnastid).order_by("-event__datebegin")
score_routine1_list = score_list.filter(routine_type=0)
score_routine2_list = score_list.filter(routine_type=1)
score_routine3_list = score_list.filter(routine_type=2)
chrono_list = Chrono.objects.filter(gymnast=gymnastid).order_by("date")
chrono_10c = chrono_list.filter(type=0)
chrono_r1 = chrono_list.filter(type=1)
chrono_r2 = chrono_list.filter(type=2)
chrono_rf = chrono_list.filter(type=3)
context = {
"score_list": score_list,
"score_routine1_list": score_routine1_list,
"score_routine2_list": score_routine2_list,
"score_routine3_list": score_routine3_list,
"chrono_list": chrono_list,
"chrono_10c": chrono_10c,
"chrono_r1": chrono_r1,
"chrono_r2": chrono_r2,
"chrono_rf": chrono_rf,
"gymnastid": gymnastid,
}
return render(request, "peoples/gymnasts/scores_chronos_list.html", context)
@login_required
@require_http_methods(["GET"])
def gymnast_display_mindstate(request, gymnastid):
"""
Selectionne tous les scores réalisés par le gymnaste
"""
mindstate_list = MindState.objects.filter(gymnast=gymnastid).order_by("-date")
context = {
"mindstate_list": mindstate_list,
"gymnastid": gymnastid,
}
return render(request, "peoples/gymnasts/mindstate_list.html", context)
2021-11-17 10:39:16 +01:00
@login_required
@require_http_methods(["GET", "POST"])
def gymnast_create_or_update(request, gymnastid=None):
"""
Formulaire de creation et modification d'un gymnaste.
"""
if gymnastid:
gymnast = get_object_or_404(Gymnast, pk=gymnastid)
data = {'club_related': gymnast.club}
else:
gymnast = None
data = {}
if request.method == "POST":
gymnast_form = GymnastForm(request.POST, instance=gymnast)
if gymnast_form.is_valid():
gymnast = gymnast_form.save()
return HttpResponseRedirect("/gymnast/details/" + str(gymnast.id))
else:
print(gymnast_form.errors)
form = GymnastForm(instance=gymnast, initial=data)
context = {"form": form, "gymnastid": gymnastid}
return render(request, "peoples/gymnasts/create.html", context)