from django.shortcuts import render, get_object_or_404 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 jumpers.models import Jumper from .models import Chrono, Skill from .forms import ChronoForm @login_required @require_http_methods(["GET"]) def chrono_listing(request): """ Récupère la liste des chronos """ chrono_list = Chrono.objects.all() context = {'chrono_list': chrono_list} return render(request, "chronos/list.html", context) @login_required @require_http_methods(["GET", "POST"]) def chrono_create_or_update(request, chronoid=None, jumperid=None): """ Création ou modification d'un chrono """ if chronoid: chrono = get_object_or_404(Chrono, pk=chronoid) data = { "jumper": chrono.jumper.id, "jumper_related": str(chrono.jumper), } else: chrono = None data = None if request.method == "POST": form = ChronoForm(request.POST, instance=chrono) if form.is_valid(): # calculer ici le ToF # if form.score_type == 1: # form.tof = form.score # else: # form.tof = round(( form.score * 13 ) / 15, 3) # form.tof = ( form.tof * 1000 ) - (( form.tof * 1000 ) % 5) # form.tof = form.tof / 1000 form.save() if chronoid is not None: return HttpResponseRedirect("/chrono/") elif jumperid is not None: return HttpResponseRedirect( "/jumper/" + str(jumperid) ) else: return HttpResponseRedirect("/chrono/") else: if data is None and jumperid is not None: jumper = get_object_or_404(Jumper, pk=jumperid) data = {"jumper": jumperid, "jumper_related": jumper} form = ChronoForm(instance=chrono, initial=data) context = {"form": form, "chronoid": chronoid} return render(request, "chronos/create.html", context) @login_required @require_http_methods(["GET"]) def skill_listing(request, field=None, expression=None, value=None, level=None): """ Récupère la liste des skills suivant un pattern si celui-ci est définit. """ pattern = None if not field or not value or not expression: pattern = request.GET.get("pattern", None) if pattern: skill_list = Skill.objects.filter( Q(longLabel__icontains=pattern) | Q(shortLabel__icontains=pattern) ) elif field and expression and value: kwargs = {"{0}__{1}".format(field, expression): value} skill_list = Skill.objects.filter(**kwargs) elif level is not None: skill_list = Skill.objects.filter else: skill_list = Skill.objects.all() context = {'skill_list': skill_list} return render(request, 'skills/list.html', context) @login_required @require_http_methods(["GET"]) def skill_details(request, skillid): """ Récupère toutes les informations d'un skill. :param skillig: id d'un `skill` :type skillid: int :return: skill """ context = {"skill": get_object_or_404(Skill, pk=skillid)} return render(request, "skills/details.html", context)