From 89f32b40ce44b5db528449cb982b7dbc7abd490e Mon Sep 17 00:00:00 2001
From: Trullemans Gregory
Date: Fri, 12 Nov 2021 15:32:24 +0100
Subject: [PATCH] Adding new functionnalityies.
---
followup/urls.py | 2 +-
jumpers/forms.py | 42 ++++++++++
jumpers/models.py | 2 +-
jumpers/urls.py | 7 +-
jumpers/views.py | 59 +++++++++++++-
templates/jumpers/create.html | 135 +++++++++++++++++++++++++++++++++
templates/jumpers/details.html | 17 ++++-
templates/jumpers/list.html | 6 +-
templates/skills/details.html | 2 +-
9 files changed, 262 insertions(+), 10 deletions(-)
create mode 100644 jumpers/forms.py
create mode 100644 templates/jumpers/create.html
diff --git a/followup/urls.py b/followup/urls.py
index 16d387c3a4..f2f4251512 100644
--- a/followup/urls.py
+++ b/followup/urls.py
@@ -6,7 +6,7 @@ chrono_urlpatterns = [
path(r"", views.chrono_listing, name='chrono_list'),
path(r"create/", views.chrono_create_or_update, name='chrono_create'),
path(r"create//", views.chrono_create_or_update, name='chrono_create'),
- path(r"edit/", views.chrono_create_or_update, name="chrono_update"),
+ path(r"edit//", views.chrono_create_or_update, name="chrono_update"),
]
skill_urlpatterns = [
diff --git a/jumpers/forms.py b/jumpers/forms.py
new file mode 100644
index 0000000000..2e3855d375
--- /dev/null
+++ b/jumpers/forms.py
@@ -0,0 +1,42 @@
+"""Formulaires de gestion des données entrantes pour les gymnastes et accidents."""
+
+from django import forms
+
+from .models import (
+ Jumper
+)
+
+class JumperForm(forms.ModelForm):
+
+ class Meta:
+ model = Jumper
+ fields = (
+ 'last_name',
+ 'first_name',
+ 'birthdate',
+ 'gender',
+ 'is_active',
+ 'club',
+ )
+
+ widgets = {
+ "last_name": forms.TextInput(
+ attrs={"class": "form-control", "placeholder": "Lastname"}
+ ),
+ "first_name": forms.TextInput(
+ attrs={"class": "form-control", "placeholder": "Firstname"}
+ ),
+ "birthdate": forms.DateInput(attrs={"class": "form-control datepicker"}),
+ "gender": forms.Select(attrs={"class": "form-control"}),
+ }
+
+ club_related = forms.CharField(
+ widget=forms.TextInput(
+ attrs={
+ "class": "form-control",
+ "placeholder": "Searching club…",
+ "data-ref": "#id_club",
+ }
+ )
+ )
+
diff --git a/jumpers/models.py b/jumpers/models.py
index 0defc6e847..a21f82a98a 100644
--- a/jumpers/models.py
+++ b/jumpers/models.py
@@ -53,4 +53,4 @@ class Club(models.Model):
active = models.BooleanField(default=1, verbose_name="Active")
def __str__(self):
- return "%s (%s)" % (self.name, self.acronym)
\ No newline at end of file
+ return "%s (%s) - %s" % (self.name, self.acronym, self.city)
\ No newline at end of file
diff --git a/jumpers/urls.py b/jumpers/urls.py
index 6bb441154a..c76f6b88be 100644
--- a/jumpers/urls.py
+++ b/jumpers/urls.py
@@ -6,8 +6,13 @@ jumper_urlpatterns = [
path(r"", views.jumper_listing, name="jumper_list"),
path(r"lookup/", views.jumper_lookup),
path(r"details//", views.jumper_details, name="jumper_details"),
+ path(r"add/", views.jumper_create_or_update, name="jumper_create"),
+ path(
+ r"edit//", views.jumper_create_or_update, name="jumper_update"
+ ),
]
club_urlpatterns = [
path(r"", views.club_listing, name="club_list"),
-]
\ No newline at end of file
+ path(r"lookup/", views.club_lookup),
+]
\ No newline at end of file
diff --git a/jumpers/views.py b/jumpers/views.py
index cc2ebae7be..a2bff0b7b1 100644
--- a/jumpers/views.py
+++ b/jumpers/views.py
@@ -2,10 +2,12 @@ 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 .models import Club, Jumper
from followup.models import Chrono, LearnedSkill
+from .forms import JumperForm
import simplejson
@@ -20,6 +22,28 @@ def club_listing(request):
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):
@@ -61,13 +85,44 @@ def jumper_details(request, 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
+ 'routine_score': routine_score,
+ 'best_routine': best_routine,
+ 'best_straightjump': best_straightjump
}
- return render(request, "jumpers/details.html", context)
\ No newline at end of file
+ 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)
+ else:
+ jumper = None
+
+ if request.method == "POST":
+ gymnast_form = JumperForm(request.POST, instance=jumper)
+
+ if gymnast_form.is_valid():
+ jumper = gymnast_form.save()
+
+ return HttpResponseRedirect("/jumper/details/" + str(jumper.id))
+
+ else:
+ form = JumperForm(instance=jumper)
+
+ context = {"form": form, "jumperid": jumperid}
+ return render(request, "jumpers/create.html", context)
\ No newline at end of file
diff --git a/templates/jumpers/create.html b/templates/jumpers/create.html
new file mode 100644
index 0000000000..47311d3cbb
--- /dev/null
+++ b/templates/jumpers/create.html
@@ -0,0 +1,135 @@
+{% extends "base.html" %}
+
+{% block content %}
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/jumpers/details.html b/templates/jumpers/details.html
index 9c46bc89cd..851135e144 100644
--- a/templates/jumpers/details.html
+++ b/templates/jumpers/details.html
@@ -23,9 +23,18 @@
{{ jumper.age }} years ({{ jumper.birthdate | date:"d F Y" }})
{{ jumper.get_orientation_display }}
+ {{ jumper.club.name }} - {{ jumper.club.city }}
- {% if jumper.address %}
- {{ jumper.address }} - {{ jumper.postal }} {{ jumper.city }}
+ {% if best_routine or best_straightjump %}
+
Bests Scores
+
+ {% if best_straightjump %}
+ - Straight : {{ best_straightjump.0.date | date:"d-m-Y" }} - {{ best_straightjump.0.tof }}
+ {% endif %}
+ {% if best_routine %}
+ - Routine : {{ best_routine.0.date | date:"d-m-Y" }} - {{ best_routine.0.tof }}
+ {% endif %}
+
{% endif %}
New
@@ -48,7 +57,7 @@
{% for learnedskill in learnedskills_list %}
{{ learnedskill.date | date:"d-m-Y" }} |
- {{ learnedskill.skill.name }} |
+ {{ learnedskill.skill.short_label }} |
{{ learnedskill.get_cando_display }} |
{% endfor %}
@@ -95,6 +104,7 @@
+{% if chronos_list %}
+{% endif %}
{% endblock %}
{% block footerscript %}
diff --git a/templates/jumpers/list.html b/templates/jumpers/list.html
index 12a8870c04..422139dca3 100644
--- a/templates/jumpers/list.html
+++ b/templates/jumpers/list.html
@@ -21,7 +21,11 @@
{% for jumper in jumper_list %}
- |
+
+
+
+
+ |
{{ jumper.last_name }} |
{{ jumper.first_name }} |
{{ jumper.age }} |
diff --git a/templates/skills/details.html b/templates/skills/details.html
index b694896b7c..5dac7dfd5e 100644
--- a/templates/skills/details.html
+++ b/templates/skills/details.html
@@ -24,7 +24,7 @@
Ancestor
{% endif %}