Ultron/followup/views.py

103 lines
3.1 KiB
Python
Raw Normal View History

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
2021-11-11 15:21:48 +01:00
from django.db.models import Q
2021-11-02 14:05:32 +01:00
from jumpers.models import Jumper
2021-11-11 15:21:48 +01:00
from .models import Chrono, Skill
from .forms import ChronoForm
@login_required
2021-11-11 15:21:48 +01:00
@require_http_methods(["GET"])
def chrono_listing(request):
""" Récupère la liste des chronos """
2021-11-11 15:21:48 +01:00
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):
2021-11-11 15:21:48 +01:00
""" 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():
form.save()
if chronoid is not None:
return HttpResponseRedirect("/chrono/" + str(chronoid) + "/")
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}
2021-11-11 15:21:48 +01:00
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}
# print(kwargs)
# skill_list = Skill.objects.filter(level__lte=4)
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)