Add new fields to Gymnast class and prepare new class season and season_info

This commit is contained in:
Gregory Trullemans 2022-10-31 14:49:25 +01:00
parent a4fd5c4350
commit 50bc851c29
5 changed files with 107 additions and 26 deletions

View File

@ -30,23 +30,23 @@ $(function(){
});
$('#id_rotation, #id_twist').keyup(function(){
setDifficulty();
setLevel();
setNotation();
set_difficulty();
set_level();
set_notation();
});
$('#id_position').change(function(){
setDifficulty();
setLevel();
setNotation();
set_difficulty();
set_level();
set_notation();
});
$('#id_rotation_type').change(function(){
setNotation();
set_notation();
});
$('#difficulty').change(function(){
setLevel();
set_level();
});
$('#id_level').keyup(function(){
@ -103,12 +103,11 @@ $(function(){
});
const setDifficulty = function()
const set_difficulty = function()
{
if(typeof($('#id_rotation').val()) === "undefined" || typeof($('#id_twist').val()) === "undefined")
return
// console.log('------------------------------------------------------------------------------------------')
var sum = 0;
var position = $('#id_position').val();
var nb_twist = parseInt($('#id_twist').val());
@ -133,7 +132,7 @@ $(function(){
};
const setLevel = function()
const set_level = function()
{
var level = 0;
@ -149,7 +148,7 @@ $(function(){
}
const setNotation = function()
const set_notation = function()
{
var rotation_type = parseInt($('#id_rotation_type').children(':selected').val());
var nb_rotation = parseInt($('#id_rotation').val());

View File

@ -9,18 +9,24 @@ class Educative(Markdownizable):
Classe `mère` educative. En trampoline tout est un éducatif : un saut, un enchainement, une
série de compétition, .
Level : Toutes les figures appartiennent à un niveau. Un niveau peut contenir plusieurs
figures.
Exemple : les trois sauts de base (saut groupé, saut carpé joint et saut écart)
sont dans le même niveau, salto avant groupé et salto arrière groupé appartiennent au même
niveau.
Le niveau dune figure est calculé par rapport aux prérequis : par défaut le niveau
dune figure est égal au niveau maximum de ses prérequis.
Level (skill) :
Toutes les figures appartiennent à un niveau. Un niveau peut contenir plusieurs
figures. Par défaut, le niveau d'une figure est son coéficient de difficulté (exprimé en 10ème
pour avoir des nombres entiers) auquel on ajoute 1 pour les positions tendue.
Exemple :
- saut groupé, saut carpé joint et saut écart ==> niveau 5
- salto avant groupé, salto arrière groupé ==> niveau 10
- salto avant carpé, barani groupé, salto arrière carpé ==> niveau 11
- salto avant tendu, barani carpé, salto arrière tendu ==> niveau 12
En plus de cela, il y a une limite minimum pour un niveau : le niveau dune figure ne peut pas
être plus petit que le niveau maximum de ses prérequis.
Le niveau, avec le rang, ont pour but daider les coaches à planifier lévolution et
lapprentissage des figures les unes par rapport aux autres.
Rank : Le rang permet, en plus du `level` (niveau), de classer les figures entre elles, de leur
Rank (skill) :
Le rang permet, en plus du `level` (niveau), de classer les figures entre elles, de leur
donner un ordre (informatif). Le rang dune figure est calculé par rapport aux prérequis et au
niveau : par défaut le rang dune figure est le maximum entre le niveau maximum de ses
prérequis plus un et le niveau de la figure.

View File

@ -0,0 +1,28 @@
# Generated by Django 4.1.1 on 2022-10-31 13:40
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("people", "0004_gymnast_email_trainer"),
]
operations = [
migrations.AddField(
model_name="gymnast",
name="orientation",
field=models.PositiveSmallIntegerField(
blank=True,
choices=[(None, "Unknown"), (0, "Left"), (1, "Right")],
null=True,
verbose_name="Twist side",
),
),
migrations.AddField(
model_name="gymnast",
name="year_of_practice",
field=models.PositiveSmallIntegerField(default=0),
),
]

View File

@ -0,0 +1,22 @@
# Generated by Django 4.1.1 on 2022-10-31 13:48
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
("people", "0005_gymnast_orientation_gymnast_year_of_practice"),
]
operations = [
migrations.AddField(
model_name="gymnast",
name="created_at",
field=models.DateTimeField(
auto_now_add=True, default=django.utils.timezone.now
),
preserve_default=False,
),
]

View File

@ -30,7 +30,21 @@ class Gymnast(Markdownizable):
verbose_name_plural = "Gymnasts"
GENDER_CHOICES = ((0, "Male"), (1, "Female"))
# CATEGORY_CHOICES = ((9, "I9"), (10, "I10"), (11, "A11"), (12, "A12"), (13, "A13-14"), (15, "A15-16"), (18, "Senior"))
ORIENTATION_CHOICES = ((None, "Unknown"), (0, "Left"), (1, "Right"))
# CATEGORY_CHOICES = (
# (9, "I9"),
# (10, "I10"),
# (11, "A11"),
# (12, "A12"),
# (13, "A13-14"),
# (15, "A Junior"),
# (18, "A Senior"),
# (21, "B11"),
# (22, "B12"),
# (23, "B13-14"),
# (24, "B Junior"),
# (25, "B Senior"),
# )
user = models.OneToOneField(
User, on_delete=models.SET_NULL, related_name="gymnast", blank=True, null=True
@ -42,19 +56,31 @@ class Gymnast(Markdownizable):
choices=GENDER_CHOICES, verbose_name="Sexe"
)
is_active = models.BooleanField(default=1, verbose_name="Active")
club = models.ForeignKey(
Club, null=True, on_delete=models.SET_NULL, related_name="gymnast"
orientation = models.PositiveSmallIntegerField(
choices=ORIENTATION_CHOICES,
null=True,
blank=True,
verbose_name="Twist side",
)
# category = models.PositiveSmallIntegerField(
# choices=CATEGORY_CHOICES, verbose_name="Category"
# )
email_trainer = models.EmailField(
max_length=254, null=True, blank=True, verbose_name="Trainer's email"
)
year_of_practice = models.PositiveSmallIntegerField(default=0)
created_at = models.DateTimeField(auto_now_add=True)
#
#
# TODO: traingin_by_week and hours_by_week --> classe de saison
trainings_by_week = models.PositiveSmallIntegerField(
verbose_name="# Training by week"
)
hours_by_week = models.PositiveSmallIntegerField(verbose_name="# Hours by week")
# category = models.PositiveSmallIntegerField(
# choices=CATEGORY_CHOICES, verbose_name="Category"
# )
club = models.ForeignKey(
Club, null=True, on_delete=models.SET_NULL, related_name="gymnast"
)
def __str__(self):
return "%s %s" % (self.first_name, self.last_name)