diff --git a/src/objective/views.py b/src/objective/views.py index ce8c715..c9335ac 100644 --- a/src/objective/views.py +++ b/src/objective/views.py @@ -352,6 +352,7 @@ def random_skill(request, number=None): def __construct_routine( current_routine, max_routine_length, + max_skill_difficulty, total_difficulty_score=None, competition=True, logic=True, @@ -361,85 +362,72 @@ def __construct_routine( Args: current_routine (array): la série en cours de création. - routine_length (int): nombre de sauts qui compose la série. + max_routine_length (int): nombre de saut souhaités dans la série. + max_skill_difficulty (int): difficulté du saut le plus difficile à considérer. total_difficulty_score (int): score total de difficulté souhaité de la série EN DIXIEME (/!\). competition (bool): indique si la série doit respecter les règles de compétition. logic (bool): indique si la série doit suivre les règles de logique (sportive). gymnast (gymnast): gymnaste. Returns: - ??? (list): liste des séries correspondantes aux criètres. + ??? (list ?): liste des séries correspondantes aux criètres. """ - # print("Il reste " + str(max_routine_length - len(current_routine)) + " sauts à trouver.") - print("Il reste " + str(total_difficulty_score) + " dixièmes à trouver.") - - if not total_difficulty_score or total_difficulty_score <= 0: - print("Total score négatif ou None !") - return if len(current_routine) == max_routine_length: print(current_routine) return - # print('1') + + if total_difficulty_score / max_skill_difficulty > max_routine_length: + return + + if total_difficulty_score <= 0: + return # Total score négatif, on est au dela du total score demandé + if current_routine: skill_list = Skill.objects.filter( departure = current_routine[-1].landing ) # , difficulty__lte = total_difficulty_score if len(current_routine) == (max_routine_length - 1): skill_list = skill_list.filter(landing__longLabel="Debout") - if logic and current_routine[-1].landing == "Debout": + if logic and current_routine[-1].landing.longLabel == "Debout": skill_list = skill_list.exclude(rotationType = current_routine[-1].rotationType) else: - skill_list = Skill.objects.filter(departure__longLabel = "Debout") - # print('2') + skill_list = Skill.objects.filter(departure__longLabel="Debout") + if competition: - skill_list = skill_list.filter(is_competitive = True) - # skill_list = skill_list.exclude(position="L").exclude(position="c") - # print('3') + skill_list = skill_list.filter(is_competitive=True) + if logic and total_difficulty_score: - if gymnast: - max_skill_difficulty = Educative.objects.filter(cando__gymnast=gymnast).order_by( - "-difficulty" - )[:1] + if len(current_routine) == max_routine_length - 1: + min_diff_skill = total_difficulty_score + max_diff_skill = total_difficulty_score + 3 else: - max_skill_difficulty = Skill.objects.values('difficulty').order_by("-difficulty")[:1][0]["difficulty"] * 10 - print("Max Skill diff.: " + str(max_skill_difficulty)) + if math.ceil(total_difficulty_score / max_routine_length) < max_skill_difficulty: + min_diff_skill = math.ceil(max((total_difficulty_score / max_routine_length) - 5, 0)) + else: + return - if math.ceil(total_difficulty_score / max_routine_length) < max_skill_difficulty: - min_diff_skill = math.ceil(max((total_difficulty_score / max_routine_length) - 5, 0)) - print("Min diff.: " + str(min_diff_skill)) - else: - return - - if (math.ceil(total_difficulty_score / max_routine_length) + 2) <= max_skill_difficulty: - max_diff_skill = math.ceil(total_difficulty_score / max_routine_length) + 2 - print("Max. diff.: " + str(max_diff_skill)) - else: - print("Score demandé:" + str(total_difficulty_score)) - print("# de sauts:" + str(max_routine_length)) - print("Pré-condition:" + str((total_difficulty_score / max_routine_length) + 2)) - print("Condition: " + str(math.ceil(total_difficulty_score / max_routine_length) + 2)) - print("RETURN…") - return + if (math.ceil(total_difficulty_score / max_routine_length) + 2) <= max_skill_difficulty: + max_diff_skill = math.ceil(total_difficulty_score / max_routine_length) + 2 + else: + return skill_list = skill_list.filter( difficulty__gte = (min_diff_skill / 10), difficulty__lte = (max_diff_skill / 10) ) - # print('4') - # if gymnast: - # skill_list = skill_list.filter(can_do__gymnast = gymnast) - # skill_list = skill_list[0:3] + if gymnast: + skill_list = skill_list.filter(cando__gymnast = gymnast) for skill in skill_list: - print("On sélectionne : " + str(skill)) current_routine.append(skill) __construct_routine( current_routine, max_routine_length, - total_difficulty_score - (skill.difficulty * 10) if total_difficulty_score else None, + max_skill_difficulty, + total_difficulty_score - (skill.difficulty * 10) if total_difficulty_score is not None else None, competition, logic, gymnast, @@ -452,7 +440,7 @@ def __construct_routine( def suggest_routine( request, - max_routine_length = 2, + max_routine_length = 3, total_difficulty_score=None, competition=True, logic=True, @@ -473,32 +461,38 @@ def suggest_routine( >>> http://127.0.0.1:8000/routine/suggest/ """ - # routines = [] - # routines.append(__construct_routine( - # routine_length, - # total_difficulty_score, - # competition, - # logic, - # gymnast, - # None - # ) - # ) - routine = [] - # if not total_difficulty_score: - # total_difficulty_score = 15 - difficulty_scores = range(5, 45, 5) - for total_difficulty_score in difficulty_scores: - print("===============================================================================================") - print(total_difficulty_score) - __construct_routine( - routine, - max_routine_length, - total_difficulty_score, - competition, - logic, - gymnast, - ) + routine = [] + + if not gymnast: + gymnast = Gymnast.objects.get(pk=14) + total_difficulty_score = 30 + + if gymnast: + max_skill_difficulty = Educative.objects.values('difficulty').filter(cando__gymnast=gymnast).order_by( + "-difficulty" + )[:1][0]["difficulty"] * 10 + else: + max_skill_difficulty = Skill.objects.values('difficulty').order_by("-difficulty")[:1][0]["difficulty"] * 10 + + # print(max_skill_difficulty) + # if not total_difficulty_score: + # total_difficulty_score = 30 + # max_routine_length = 3 + + + # difficulty_scores = range(5, 45, 5) + # for total_difficulty_score in difficulty_scores: + # print("===============================================================================================") + __construct_routine( + routine, + max_routine_length, + max_skill_difficulty, + total_difficulty_score, + competition, + logic, + gymnast, + ) # print(routines) diff --git a/src/people/forms.py b/src/people/forms.py index 5f4acc6..79ae729 100644 --- a/src/people/forms.py +++ b/src/people/forms.py @@ -76,8 +76,8 @@ class GymnastForm(forms.ModelForm): ) widgets = { "id": forms.HiddenInput(), - "lastname": forms.TextInput(attrs={"class": "form-control"}), - "firstname": forms.TextInput(attrs={"class": "form-control"}), + "lastname": forms.TextInput(attrs={"class": "form-control", "placeholder":"Lastname"}), + "firstname": forms.TextInput(attrs={"class": "form-control", "placeholder":"Firstname"}), "birthdate": forms.DateInput(attrs={"class": "form-control datepicker"}), "gender": forms.Select(attrs={"class": "form-control"}), "address": forms.TextInput(attrs={"class": "form-control"}),