103 lines
3.5 KiB
Python
103 lines
3.5 KiB
Python
|
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, Skill
|
||
|
from .forms import GymnastForm
|
||
|
|
||
|
import simplejson
|
||
|
|
||
|
|
||
|
@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
|
||
|
"""
|
||
|
gymnast_list = Gymnast.objects.all()
|
||
|
context = {'gymnast_list': gymnast_list}
|
||
|
return render(request, "gymnasts/list.html", context)
|
||
|
|
||
|
|
||
|
@login_required
|
||
|
@require_http_methods(["GET"])
|
||
|
def gymnast_details(request, gymnastid):
|
||
|
"""Récupère toutes les informations d'un gymnaste.
|
||
|
"""
|
||
|
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')
|
||
|
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
|
||
|
}
|
||
|
|
||
|
return render(request, "gymnasts/details.html", context)
|
||
|
|
||
|
|
||
|
@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, "gymnasts/create.html", context)
|