Ultron/jumpers/views.py

128 lines
4.0 KiB
Python
Raw Normal View History

2021-11-02 14:05:32 +01:00
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from django.contrib.auth.decorators import login_required
2021-11-02 14:05:32 +01:00
from django.views.decorators.http import require_http_methods
2021-11-12 15:32:24 +01:00
from django.http import HttpResponse, HttpResponseRedirect
from django.db.models import Q
2021-11-02 14:05:32 +01:00
from .models import Club, Jumper
from followup.models import Chrono, LearnedSkill
2021-11-12 15:32:24 +01:00
from .forms import JumperForm
2021-11-02 14:05:32 +01:00
import simplejson
2021-11-02 14:05:32 +01:00
@login_required
2021-11-02 14:05:32 +01:00
@require_http_methods(["GET"])
def club_listing(request):
"""Liste tous les clubs connus
2021-11-02 14:05:32 +01:00
"""
club_list = Club.objects.all()
context = {"club_list": club_list}
return render(request, "clubs/list.html", context)
2021-11-12 15:32:24 +01:00
@login_required
@require_http_methods(["GET"])
def club_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 = Club.objects.filter(
Q(name__icontains=pattern) | Q(city__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 jumper_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 = Jumper.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
2021-11-02 14:05:32 +01:00
@require_http_methods(["GET"])
def jumper_listing(request):
"""Liste tous les gymnasts connus
2021-11-02 14:05:32 +01:00
"""
jumper_list = Jumper.objects.all()
2021-11-11 15:21:48 +01:00
context = {'jumper_list': jumper_list}
2021-11-02 14:05:32 +01:00
return render(request, "jumpers/list.html", context)
@login_required
2021-11-02 14:05:32 +01:00
@require_http_methods(["GET"])
def jumper_details(request, jumperid):
"""Récupère toutes les informations d'un gymnaste.
2021-11-02 14:05:32 +01:00
"""
jumper = get_object_or_404(Jumper, pk=jumperid)
learnedskills_list = LearnedSkill.objects.filter(jumper=jumperid).order_by('-date')[:8]
chronos_list = Chrono.objects.filter(jumper=jumperid).order_by('-date')[:8]
straightjump_score = Chrono.objects.filter(jumper=jumperid).filter(type=0).order_by('-date')
2021-11-12 15:32:24 +01:00
best_straightjump = Chrono.objects.filter(jumper=jumperid).filter(type=0).order_by('-score')[:1]
best_routine = Chrono.objects.filter(jumper=jumperid).filter(type=1).order_by('-score')[:1]
2021-11-02 14:05:32 +01:00
routine_score = Chrono.objects.filter(jumper=jumperid).filter(type=1).order_by('-date')
context = {
'jumper': jumper,
'learnedskills_list': learnedskills_list,
'chronos_list': chronos_list,
'straightjump_score': straightjump_score,
2021-11-12 15:32:24 +01:00
'routine_score': routine_score,
'best_routine': best_routine,
'best_straightjump': best_straightjump
2021-11-02 14:05:32 +01:00
}
2021-11-12 15:32:24 +01:00
return render(request, "jumpers/details.html", context)
@login_required
@require_http_methods(["GET", "POST"])
def jumper_create_or_update(request, jumperid=None):
"""
Formulaire de creation et modification d'un gymnaste.
"""
if jumperid:
jumper = get_object_or_404(Jumper, pk=jumperid)
else:
jumper = None
if request.method == "POST":
gymnast_form = JumperForm(request.POST, instance=jumper)
if gymnast_form.is_valid():
jumper = gymnast_form.save()
return HttpResponseRedirect("/jumper/details/" + str(jumper.id))
else:
form = JumperForm(instance=jumper)
context = {"form": form, "jumperid": jumperid}
return render(request, "jumpers/create.html", context)