Add JS Script to Passe admin

This commit is contained in:
Gregory Trullemans 2024-03-10 13:20:09 +01:00
parent df8d5e68cf
commit cb410dd7c2
3 changed files with 78 additions and 25 deletions

View File

@ -207,6 +207,12 @@ class PasseAdmin(admin.ModelAdmin):
("difficulty", DropdownFilter), ("difficulty", DropdownFilter),
) )
class Media:
js = (
"js/core/jquery-3.6.0.min.js",
"js/admin/passe.js",
)
class TrainingProgramAdmin(admin.ModelAdmin): class TrainingProgramAdmin(admin.ModelAdmin):
model = TrainingProgram model = TrainingProgram

View File

@ -48,7 +48,7 @@ class Educative(Markdownizable):
""" """
AGE_CHOICES = ( AGE_CHOICES = [
(6, "6-7"), (6, "6-7"),
(7, "7-8"), (7, "7-8"),
(8, "8-9"), (8, "8-9"),
@ -61,7 +61,7 @@ class Educative(Markdownizable):
(15, "15-16"), (15, "15-16"),
(16, "16-17"), (16, "16-17"),
(17, "17+"), (17, "17+"),
) ]
class Meta: class Meta:
verbose_name = "Educatif" verbose_name = "Educatif"
@ -486,10 +486,10 @@ class Passe(Markdownizable):
self.difficulty = 0 self.difficulty = 0
self.number_of_skill = 0 self.number_of_skill = 0
super().save(*args, **kwargs) super().save(*args, **kwargs)
print("Dans le save") # print("Dans le save")
if self.educatives.count() == 0: if self.educatives.count() == 0:
print("educative is none") # print("educative is none")
present = False present = False
operation_list = self.regexp.split(" ") operation_list = self.regexp.split(" ")
for item in ROUTINE_TYPE_CHOICE: for item in ROUTINE_TYPE_CHOICE:
@ -498,7 +498,7 @@ class Passe(Markdownizable):
break break
if present and len(operation_list) == 2: if present and len(operation_list) == 2:
print("present") # print("present")
content = operation_list[1].replace("[", "").replace("]", "") content = operation_list[1].replace("[", "").replace("]", "")
ranks = content.split("-") ranks = content.split("-")
@ -724,47 +724,50 @@ class Passe(Markdownizable):
return False return False
# <-- # <--
operation_list = regexp.split(" ") argument_list = regexp.split(" ")
if len(operation_list) >= 3: if len(argument_list) >= 3:
return False return False
if len(operation_list) == 2: if len(argument_list) == 2 and educatives_list.count() == 1:
if not Passe.is_valid_dot(operation_list[0]): return Passe.is_valid_regexp_two_args(argument_list[0], argument_list[1])
return False
value = operation_list[0].replace(".", "")
is_valid_routine = Passe.is_valid_routine_type(value)
if is_valid_routine:
return Passe.is_valid_subset(operation_list[1])
else: else:
if ( if (
operation_list[0] == "WC" argument_list[0] == "WC"
and educatives_list is not None and educatives_list is not None
and len(educatives_list) == 2 and len(educatives_list) == 2
): ):
return True return True
if re.match(r"[1-9]+\|", operation_list[0]) and len(educatives_list) >= 1: if re.match(r"[1-9]+\|", argument_list[0]) and len(educatives_list) >= 1:
return True return True
if not Passe.is_valid_dot(operation_list[0]): if not Passe.is_valid_dot(argument_list[0]):
return False return False
value = operation_list[0].replace(".", "") value = argument_list[0].replace(".", "")
is_valid_routine = Passe.is_valid_routine_type(value) is_valid_routine = Passe.is_valid_routine_type(value)
if is_valid_routine: if is_valid_routine:
return True return True
return Passe.is_valid_subset(operation_list[0]) return Passe.is_valid_subset(argument_list[0])
return False return False
class TrainingProgram(Seasonisable, Markdownizable): class TrainingProgram(Seasonisable, Markdownizable):
"""Classe représentant un entraînement (ensemble de passage).""" """Classe représentant un entraînement (ensemble de passage).
TODO:
- renommer (supprimer/remettre) TrainingProgram en TrainingPasse
- supprimer Seasonisable
- supprimer Markdownizable
- supprimer le champ Gymnast
- supprimer score
- supprimer rank ??? (--> dans la M2M)
- supprimer difficulty ??? (--> dans la M2M)
"""
class Meta: class Meta:
verbose_name = "Training Program" verbose_name = "Training Program"
@ -774,13 +777,13 @@ class TrainingProgram(Seasonisable, Markdownizable):
] ]
unique_together = ["date", "gymnast", "rank"] unique_together = ["date", "gymnast", "rank"]
gymnast = models.ForeignKey("people.Gymnast", on_delete=models.CASCADE) gymnast = models.ForeignKey("people.Gymnast", on_delete=models.CASCADE) # TO DELETE
passe = models.ForeignKey(Passe, on_delete=models.CASCADE) passe = models.ForeignKey(Passe, on_delete=models.CASCADE)
repetition = models.PositiveSmallIntegerField(default=1) repetition = models.PositiveSmallIntegerField(default=1)
number_of_skill = models.PositiveSmallIntegerField(default=0) number_of_skill = models.PositiveSmallIntegerField(default=0)
difficulty = models.DecimalField(max_digits=4, decimal_places=1, default=0.0) difficulty = models.DecimalField(max_digits=4, decimal_places=1, default=0.0)
rank = models.PositiveSmallIntegerField(default=1) rank = models.PositiveSmallIntegerField(default=1) # TO DELETE
score = models.PositiveSmallIntegerField(blank=True, null=True) score = models.PositiveSmallIntegerField(blank=True, null=True) # TO DELETE
updated_at = models.DateTimeField(auto_now=True) updated_at = models.DateTimeField(auto_now=True)
def __str__(self): def __str__(self):
@ -794,3 +797,12 @@ class TrainingProgram(Seasonisable, Markdownizable):
self.difficulty = self.passe.difficulty * self.repetition self.difficulty = self.passe.difficulty * self.repetition
self.number_of_skill = self.passe.number_of_skill * self.repetition self.number_of_skill = self.passe.number_of_skill * self.repetition
super().save(*args, **kwargs) super().save(*args, **kwargs)
# class Training(Seasonisable, Markdownizable):
# """Classe représentant un entraînement."""
# gymnast = models.ForeignKey("people.Gymnast", on_delete=models.CASCADE)
# difficulty = models.DecimalField(max_digits=4, decimal_places=1, default=0.0)
# number_of_skill = models.PositiveSmallIntegerField(default=0)
# score = models.PositiveSmallIntegerField(default=1)

35
static/js/admin/passe.js Normal file
View File

@ -0,0 +1,35 @@
"use strict";
if (!$) {
const $ = django.jQuery;
}
$(function(){
$('#id_regexp').on("focusout", function(){
if($('#id_label').val() == "")
$('#id_label').val($('#id_regexp').val());
else
$('#id_label').val($('#id_label').val() + " " + $('#id_regexp').val());
var operators = $('#id_regexp').val().split(' ');
const pattern = /\[[2-9]+\-[2-9]+\]/
if(operators.length >= 2)
var subset = operators[1];
else
var subset = operators[0];
if(pattern.test(subset)){
subset = subset.replace("[", "").replace("]", "");
var values = subset.split("-");
if(values[1] != "")
if(values[0] != "")
$('#id_number_of_skill').val(parseInt(values[1]) - parseInt(values[0]));
else
$('#id_number_of_skill').val(parseInt(values[1]));
}
});
});