Ultron/followup/views.py

108 lines
3.3 KiB
Python

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)