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 Club, Jumper from followup.models import Chrono, LearnedSkill from .forms import JumperForm import simplejson @login_required @require_http_methods(["GET"]) def club_listing(request): """Liste tous les clubs connus """ club_list = Club.objects.all() context = {"club_list": club_list} return render(request, "clubs/list.html", context) @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 @require_http_methods(["GET"]) def jumper_listing(request): """Liste tous les gymnasts connus """ jumper_list = Jumper.objects.all() context = {'jumper_list': jumper_list} return render(request, "jumpers/list.html", context) @login_required @require_http_methods(["GET"]) def jumper_details(request, jumperid): """Récupère toutes les informations d'un gymnaste. """ 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') 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] 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, 'routine_score': routine_score, 'best_routine': best_routine, 'best_straightjump': best_straightjump } 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) data = {'club_related': jumper.club} else: jumper = None data = {} if request.method == "POST": jumper_form = JumperForm(request.POST, instance=jumper) if jumper_form.is_valid(): print(jumper_form.cleaned_data) jumper = jumper_form.save() return HttpResponseRedirect("/jumper/details/" + str(jumper.id)) else: print(jumper_form.errors) form = JumperForm(instance=jumper, initial=data) context = {"form": form, "jumperid": jumperid} return render(request, "jumpers/create.html", context)