2022-01-07 18:08:39 +01:00
|
|
|
from datetime import datetime
|
2021-12-09 16:53:44 +01:00
|
|
|
|
|
|
|
from django.contrib.auth.decorators import login_required
|
2022-01-07 18:08:39 +01:00
|
|
|
from django.db.models import Q
|
2022-01-08 08:23:30 +01:00
|
|
|
from django.http import HttpResponseRedirect, JsonResponse
|
2021-12-09 16:53:44 +01:00
|
|
|
from django.shortcuts import render, get_object_or_404
|
|
|
|
from django.views.decorators.http import require_http_methods
|
2022-02-01 11:08:02 +01:00
|
|
|
from django.urls import reverse
|
2021-12-09 16:53:44 +01:00
|
|
|
|
|
|
|
from .models import (
|
|
|
|
Club,
|
|
|
|
Place,
|
|
|
|
Country,
|
|
|
|
)
|
|
|
|
from .forms import PlaceForm
|
|
|
|
|
|
|
|
|
2022-01-07 18:08:39 +01:00
|
|
|
def __difference_between_times(end, start):
|
2021-12-09 16:53:44 +01:00
|
|
|
"""
|
|
|
|
Prend deux `datetime.time` en paramètre et calcul la différence entre les deux.
|
|
|
|
"""
|
|
|
|
startdate = datetime(2000, 1, 1, start.hour, start.minute)
|
|
|
|
enddate = datetime(2000, 1, 1, end.hour, end.minute)
|
|
|
|
|
|
|
|
return enddate - startdate
|
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
@require_http_methods(["GET"])
|
|
|
|
def place_lookup(request):
|
|
|
|
"""
|
|
|
|
Récupère la liste des lieux à la volée suivant des caractères de recherche entrés.
|
|
|
|
"""
|
|
|
|
pattern = request.GET.get("pattern", 0)
|
|
|
|
|
|
|
|
if pattern is not None and len(pattern) >= 3:
|
|
|
|
results = Place.objects.filter(
|
|
|
|
Q(name__icontains=pattern) | Q(city__icontains=pattern)
|
|
|
|
)
|
|
|
|
place_list = [{"ID": x.id, "Label": str(x)} for x in results]
|
|
|
|
|
2022-01-08 08:23:30 +01:00
|
|
|
# JsonResponse
|
|
|
|
# json = simplejson.dumps(place_list)
|
|
|
|
# return HttpResponse(json, content_type="application/json")
|
|
|
|
return JsonResponse(place_list, safe=False)
|
2021-12-09 16:53:44 +01:00
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
@require_http_methods(["GET"])
|
|
|
|
def country_lookup(request):
|
|
|
|
"""
|
|
|
|
Récupère la liste des pays à la volée suivant des caractères de recherche entrés.
|
|
|
|
"""
|
|
|
|
pattern = request.GET.get("pattern", 0)
|
|
|
|
|
|
|
|
if pattern is not None and len(pattern) >= 3:
|
|
|
|
results = Country.objects.filter(
|
2021-12-19 09:30:51 +01:00
|
|
|
Q(name__icontains=pattern) | Q(nationality__icontains=pattern)
|
2021-12-09 16:53:44 +01:00
|
|
|
)
|
|
|
|
country_list = [{"id": x.id, "Label": str(x)} for x in results]
|
|
|
|
|
2022-01-08 08:23:30 +01:00
|
|
|
# json = simplejson.dumps(country_list)
|
|
|
|
# return HttpResponse(json, content_type="application/json")
|
|
|
|
return JsonResponse(country_list, safe=False)
|
2021-12-09 16:53:44 +01:00
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
@require_http_methods(["GET"])
|
|
|
|
def place_listing(request):
|
|
|
|
"""
|
|
|
|
Liste tous les lieux connus
|
|
|
|
"""
|
|
|
|
place_list = Place.objects.all()
|
|
|
|
context = {"place_list": place_list}
|
|
|
|
return render(request, "locations/places/list.html", context)
|
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
@require_http_methods(["GET", "POST"])
|
2022-02-01 11:08:02 +01:00
|
|
|
def place_create_or_update(request, place_id=None):
|
2021-12-09 16:53:44 +01:00
|
|
|
"""
|
|
|
|
Formulaire de création d'un nouveau lieu.
|
|
|
|
"""
|
|
|
|
|
2022-02-01 11:08:02 +01:00
|
|
|
if place_id:
|
|
|
|
place = get_object_or_404(Place, pk=place_id)
|
2021-12-09 16:53:44 +01:00
|
|
|
data = {"country_related": place.country}
|
|
|
|
else:
|
|
|
|
place = None
|
|
|
|
data = {}
|
|
|
|
|
|
|
|
if request.method == "POST":
|
|
|
|
form = PlaceForm(request.POST, instance=place)
|
|
|
|
|
|
|
|
if form.is_valid():
|
|
|
|
place = form.save()
|
2022-02-01 11:08:02 +01:00
|
|
|
return HttpResponseRedirect(reverse("place_details", args=(place.pk,)))
|
2021-12-09 16:53:44 +01:00
|
|
|
|
|
|
|
else:
|
|
|
|
form = PlaceForm(instance=place, initial=data)
|
|
|
|
|
2022-02-01 11:08:02 +01:00
|
|
|
context = {"form": form, "place_id": place_id}
|
2021-12-09 16:53:44 +01:00
|
|
|
return render(request, "locations/places/create.html", context)
|
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
@require_http_methods(["GET"])
|
2022-02-01 11:08:02 +01:00
|
|
|
def place_details(request, place_id):
|
2021-12-09 16:53:44 +01:00
|
|
|
"""
|
|
|
|
Récupère toutes les informations d'un lieu.
|
|
|
|
"""
|
2022-02-01 11:08:02 +01:00
|
|
|
place = get_object_or_404(Place, pk=place_id)
|
2021-12-09 16:53:44 +01:00
|
|
|
context = {"place": place}
|
|
|
|
return render(request, "locations/places/details.html", context)
|
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
@require_http_methods(["GET"])
|
|
|
|
def club_listing(request):
|
2021-12-19 09:30:51 +01:00
|
|
|
"""Liste tous les clubs connus"""
|
2021-12-09 16:53:44 +01:00
|
|
|
club_list = Club.objects.all()
|
|
|
|
context = {"club_list": club_list}
|
|
|
|
return render(request, "locations/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)
|
|
|
|
|
|
|
|
if pattern is not None and len(pattern) > 3:
|
|
|
|
model_results = Club.objects.filter(
|
2021-12-24 12:14:03 +01:00
|
|
|
Q(name__icontains=pattern)
|
|
|
|
| Q(place__city__icontains=pattern)
|
|
|
|
| Q(acronym__icontains=pattern)
|
2021-12-09 16:53:44 +01:00
|
|
|
)
|
|
|
|
results = [{"ID": x.id, "Name": str(x)} for x in model_results]
|
|
|
|
|
2022-01-08 08:23:30 +01:00
|
|
|
# json = simplejson.dumps(results)
|
|
|
|
# return HttpResponse(json, content_type="application/json")
|
|
|
|
return JsonResponse(results, safe=False)
|