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),
)
class Media:
js = (
"js/core/jquery-3.6.0.min.js",
"js/admin/passe.js",
)
class TrainingProgramAdmin(admin.ModelAdmin):
model = TrainingProgram

View File

@ -48,7 +48,7 @@ class Educative(Markdownizable):
"""
AGE_CHOICES = (
AGE_CHOICES = [
(6, "6-7"),
(7, "7-8"),
(8, "8-9"),
@ -61,7 +61,7 @@ class Educative(Markdownizable):
(15, "15-16"),
(16, "16-17"),
(17, "17+"),
)
]
class Meta:
verbose_name = "Educatif"
@ -486,10 +486,10 @@ class Passe(Markdownizable):
self.difficulty = 0
self.number_of_skill = 0
super().save(*args, **kwargs)
print("Dans le save")
# print("Dans le save")
if self.educatives.count() == 0:
print("educative is none")
# print("educative is none")
present = False
operation_list = self.regexp.split(" ")
for item in ROUTINE_TYPE_CHOICE:
@ -498,7 +498,7 @@ class Passe(Markdownizable):
break
if present and len(operation_list) == 2:
print("present")
# print("present")
content = operation_list[1].replace("[", "").replace("]", "")
ranks = content.split("-")
@ -724,47 +724,50 @@ class Passe(Markdownizable):
return False
# <--
operation_list = regexp.split(" ")
argument_list = regexp.split(" ")
if len(operation_list) >= 3:
if len(argument_list) >= 3:
return False
if len(operation_list) == 2:
if not Passe.is_valid_dot(operation_list[0]):
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])
if len(argument_list) == 2 and educatives_list.count() == 1:
return Passe.is_valid_regexp_two_args(argument_list[0], argument_list[1])
else:
if (
operation_list[0] == "WC"
argument_list[0] == "WC"
and educatives_list is not None
and len(educatives_list) == 2
):
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
if not Passe.is_valid_dot(operation_list[0]):
if not Passe.is_valid_dot(argument_list[0]):
return False
value = operation_list[0].replace(".", "")
value = argument_list[0].replace(".", "")
is_valid_routine = Passe.is_valid_routine_type(value)
if is_valid_routine:
return True
return Passe.is_valid_subset(operation_list[0])
return Passe.is_valid_subset(argument_list[0])
return False
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:
verbose_name = "Training Program"
@ -774,13 +777,13 @@ class TrainingProgram(Seasonisable, Markdownizable):
]
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)
repetition = models.PositiveSmallIntegerField(default=1)
number_of_skill = models.PositiveSmallIntegerField(default=0)
difficulty = models.DecimalField(max_digits=4, decimal_places=1, default=0.0)
rank = models.PositiveSmallIntegerField(default=1)
score = models.PositiveSmallIntegerField(blank=True, null=True)
rank = models.PositiveSmallIntegerField(default=1) # TO DELETE
score = models.PositiveSmallIntegerField(blank=True, null=True) # TO DELETE
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
@ -794,3 +797,12 @@ class TrainingProgram(Seasonisable, Markdownizable):
self.difficulty = self.passe.difficulty * self.repetition
self.number_of_skill = self.passe.number_of_skill * self.repetition
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]));
}
});
});