Adding ages field to objective model
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Gregory Trullemans 2022-01-08 11:40:10 +01:00
parent 9cc8ed4e2b
commit 5b775f2119
8 changed files with 132 additions and 52 deletions

View File

@ -6,21 +6,56 @@
<h3 class="mb-0">{{ skill.short_label }}</h3> <h3 class="mb-0">{{ skill.short_label }}</h3>
<h4 class="card-title"> {{ skill.notation }}</h4> <h4 class="card-title"> {{ skill.notation }}</h4>
</div> </div>
<div class="card-body pt-0 pb-0 mb-0"> <div class="card-body pb-0 mb-0">
<div class="row mr-1 ml-1 pb-0 mb-0"> <div class="row mr-1 ml-1 pb-0 mb-0">
<div class="col-md-6"> <div class="col-md-6">
<h4 class="mb-1">Détails</h4> <!-- <h4 class="mb-1">Détails</h4> -->
<div class="row"> <div class="row">
<div class="col-6"> <div class="col-3 text-center">
<p>Notation : <a href="#">{{ skill.notation }}</a><br /> <p>Notation : <a href="#">{{ skill.notation }}</a></p>
Age girl : <a href="/skill/difficulty/exact/{{ skill.difficulty }}">{{ skill.age_girl }}</a><br />
Age boy : <a href="{% url 'skill_listing_by_key' 'level' 'exact' skill.level %}">{{ skill.age_boy }}</a>
</p>
</div> </div>
<div class="col-6"> <div class="col-3 text-center">
<p>Difficulty : <a href="/skill/difficulty/exact/{{ skill.difficulty }}">{{ skill.difficulty }}</a><br /> <p>Difficulty : <a href="/skill/difficulty/exact/{{ skill.difficulty }}">{{ skill.difficulty }}</a></p>
Level : <a href="{% url 'skill_listing_by_key' 'level' 'exact' skill.level %}">{{ skill.level }}</a><br /> </div>
Rank : <a href="{% url 'skill_listing_by_key' 'rank' 'exact' skill.rank %}">{{ skill.level }}</a></p> <div class="col-3 text-center">
<p>Level : <a href="{% url 'skill_listing_by_key' 'level' 'exact' skill.level %}">{{ skill.level }}</a></p>
</div>
<div class="col-3 text-center">
<p>Rank : <a href="{% url 'skill_listing_by_key' 'rank' 'exact' skill.rank %}">{{ skill.level }}</a></p>
<!-- Age girl : <a href="/skill/difficulty/exact/{{ skill.difficulty }}">{{ skill.age_girl }}</a><br /> -->
<!-- Age boy : <a href="{% url 'skill_listing_by_key' 'level' 'exact' skill.level %}">{{ skill.age_boy }}</a> -->
</div>
</div>
<br />
<div class="row">
<div class="col-12">
<table class="table table-striped table-condensed" data-sort="table" id="skill_age_table">
<thead>
<th></th>
<th>With help</th>
<th>Without help</th>
<th>Chained</th>
<th>Masterised</th>
</thead>
<tbody>
<tr>
<td>Girl</td>
<td><a href="#">{{ skill.get_age_girl_with_help_display }}</a></td>
<td><a href="#">{{ skill.get_age_girl_without_help_display }}</a></td>
<td><a href="#">{{ skill.get_age_girl_chained_display }}</a></td>
<td><a href="#">{{ skill.get_age_girl_masterised_display }}</a></td>
</tr>
<tr>
<td>Boy</td>
<td><a href="#">{{ skill.get_age_boy_with_help_display }}</a></td>
<td><a href="#">{{ skill.get_age_boy_without_help_display }}</a></td>
<td><a href="#">{{ skill.get_age_boy_chained_display }}</a></td>
<td><a href="#">{{ skill.get_age_boy_masterised_display }}</a></td>
</tr>
</tbody>
</table>
<!-- Age girl : <a href="/skill/difficulty/exact/{{ skill.difficulty }}">{{ skill.age_girl }}</a><br /> -->
<!-- Age boy : <a href="{% url 'skill_listing_by_key' 'level' 'exact' skill.level %}">{{ skill.age_boy }}</a> -->
</div> </div>
</div> </div>
<br /> <br />

View File

@ -26,8 +26,8 @@
<tr role="row" class="{% cycle 'odd' 'even' %}"> <tr role="row" class="{% cycle 'odd' 'even' %}">
<td class="text-left">&nbsp;<a href="{% url 'skill_details' skill.id %}">{{ skill.long_label }}</a></td> <td class="text-left">&nbsp;<a href="{% url 'skill_details' skill.id %}">{{ skill.long_label }}</a></td>
<td class="text-left"><a href="{% url 'skill_details' skill.id %}">{{ skill.short_label }}</a></td> <td class="text-left"><a href="{% url 'skill_details' skill.id %}">{{ skill.short_label }}</a></td>
<td class="text-right">{{ skill.age_girl }}</td> <td class="text-right">{{ skill.age_girl_without_help }}</td>
<td class="text-right">{{ skill.age_boy }}</td> <td class="text-right">{{ skill.age_boy_without_help }}</td>
<td class="text-center">{{ skill.notation }}</td> <td class="text-center">{{ skill.notation }}</td>
<td class="text-center">{{ skill.difficulty }}</td> <td class="text-center">{{ skill.difficulty }}</td>
<td class="text-center">{{ skill.level }}</td> <td class="text-center">{{ skill.level }}</td>

View File

@ -39,8 +39,14 @@ class SkillAdmin(ForeignKeyAutocompleteAdmin):
"notation", "notation",
"simplified_notation", "simplified_notation",
"is_competitive", "is_competitive",
"age_boy", "age_boy_with_help",
"age_girl", "age_boy_without_help",
"age_boy_chained",
"age_boy_masterised",
"age_girl_with_help",
"age_girl_without_help",
"age_girl_chained",
"age_girl_masterised",
"prerequisites", "prerequisites",
"educatives", "educatives",
) )
@ -52,8 +58,6 @@ class SkillAdmin(ForeignKeyAutocompleteAdmin):
"level", "level",
"rank", "rank",
"notation", "notation",
"age_boy",
"age_girl",
) )
ordering = ("long_label", "short_label") ordering = ("long_label", "short_label")
@ -67,8 +71,6 @@ class SkillAdmin(ForeignKeyAutocompleteAdmin):
"rotation", "rotation",
"level", "level",
"difficulty", "difficulty",
"age_boy",
"age_girl",
) )
filter_horizontal = ("educatives", "prerequisites") filter_horizontal = ("educatives", "prerequisites")

View File

@ -11,6 +11,21 @@ class Educative(Markdownizable):
Classe `mère`. Classe `mère`.
""" """
AGE_CHOICES = (
(6, "6-7"),
(7, "7-8"),
(8, "8-9"),
(9, "9-10"),
(10, "10-11"),
(11, "11-12"),
(12, "12-13"),
(13, "13-14"),
(14, "14-15"),
(15, "15-16"),
(16, "16-17"),
(17, "17+"),
)
class Meta: class Meta:
verbose_name = "Educatif" verbose_name = "Educatif"
verbose_name_plural = "Educatifs" verbose_name_plural = "Educatifs"
@ -29,11 +44,31 @@ class Educative(Markdownizable):
prerequisites = models.ManyToManyField( prerequisites = models.ManyToManyField(
"self", related_name="prerequisite_of", blank=True, symmetrical=False "self", related_name="prerequisite_of", blank=True, symmetrical=False
) )
age_boy = models.PositiveSmallIntegerField(
blank=True, null=True, verbose_name="Boy's age" age_boy_with_help = models.PositiveSmallIntegerField(
choices=AGE_CHOICES, verbose_name="Boy's age with help", default=6
) )
age_girl = models.PositiveSmallIntegerField( age_boy_without_help = models.PositiveSmallIntegerField(
blank=True, null=True, verbose_name="Girl's age" choices=AGE_CHOICES, verbose_name="Boy's age without help", default=6
)
age_boy_chained = models.PositiveSmallIntegerField(
choices=AGE_CHOICES, verbose_name="Boy's age chained", default=6
)
age_boy_masterised = models.PositiveSmallIntegerField(
choices=AGE_CHOICES, verbose_name="Boy's age masterised", default=6
)
age_girl_with_help = models.PositiveSmallIntegerField(
choices=AGE_CHOICES, verbose_name="Girl's age with help", default=6
)
age_girl_without_help = models.PositiveSmallIntegerField(
choices=AGE_CHOICES, verbose_name="Girl's age without help", default=6
)
age_girl_chained = models.PositiveSmallIntegerField(
choices=AGE_CHOICES, verbose_name="Girl's age chained", default=6
)
age_girl_masterised = models.PositiveSmallIntegerField(
choices=AGE_CHOICES, verbose_name="Girl's age masterised", default=6
) )
def __str__(self): def __str__(self):

View File

@ -80,17 +80,33 @@ def skill_details(request, skillid):
skill = get_object_or_404(Skill, pk=skillid) skill = get_object_or_404(Skill, pk=skillid)
for prerequisite in skill.prerequisites.all(): for prerequisite in skill.prerequisites.all():
if prerequisite.level >= skill.level: skill.level = max(prerequisite.level + 1, skill.level)
skill.level = prerequisite.level + 1 # if prerequisite.level >= skill.level:
# skill.level = prerequisite.level + 1
if prerequisite.rank >= skill.rank: skill.rank = max(prerequisite.rank + 1, skill.rank)
skill.rank = prerequisite.rank + 1 # if prerequisite.rank >= skill.rank:
# skill.rank = prerequisite.rank + 1
if prerequisite.age_boy > skill.age_boy: skill.age_boy_with_help = max(skill.age_boy_with_help, prerequisite.age_boy_with_help)
skill.age_boy = prerequisite.age_boy skill.age_boy_without_help = max(
skill.age_boy_without_help,
prerequisite.age_boy_without_help
)
skill.age_boy_chained = max(skill.age_boy_chained, prerequisite.age_boy_chained)
skill.age_boy_masterised = max(skill.age_boy_masterised, prerequisite.age_boy_masterised)
# if prerequisite.age_boy > skill.age_boy:
# skill.age_boy = prerequisite.age_boy
if prerequisite.age_girl > skill.age_girl: skill.age_girl_with_help = max(skill.age_girl_with_help, prerequisite.age_girl_with_help)
skill.age_girl = prerequisite.age_girl skill.age_girl_without_help = max(
skill.age_girl_without_help,
prerequisite.age_girl_without_help
)
skill.age_girl_chained = max(skill.age_girl_chained, prerequisite.age_girl_chained)
skill.age_girl_masterised = max(skill.age_girl_masterised, prerequisite.age_girl_masterised)
# if prerequisite.age_girl > skill.age_girl:
# skill.age_girl = prerequisite.age_girl
skill.save() skill.save()
@ -158,20 +174,16 @@ def routine_details(request, routineid):
rank = 0 rank = 0
level = 0 level = 0
difficulty = 0
age_boy = 0 age_boy = 0
age_girl = 0 age_girl = 0
difficulty = 0
is_competitive = True is_competitive = True
for skill_link in routine.skill_links.all(): for skill_link in routine.skill_links.all():
difficulty += skill_link.skill.difficulty difficulty += skill_link.skill.difficulty
level = max(skill_link.skill.level, level)
if skill_link.skill.level > level: rank = max(skill_link.skill.rank + 1, rank)
level = skill_link.skill.level
if skill_link.skill.rank > rank:
rank = skill_link.skill.rank + 1
if not skill_link.skill.is_competitive: if not skill_link.skill.is_competitive:
is_competitive = False is_competitive = False
@ -189,12 +201,8 @@ def routine_details(request, routineid):
is_competitive = False is_competitive = False
routine.difficulty = difficulty routine.difficulty = difficulty
routine.level = max(routine.level, level)
if routine.level < level: routine.rank = max(routine.rank, rank)
routine.level = level
if routine.rank is None or routine.rank < rank:
routine.rank = rank
if routine.age_boy is None or routine.age_boy < age_boy: if routine.age_boy is None or routine.age_boy < age_boy:
routine.age_boy = age_boy routine.age_boy = age_boy

View File

@ -4,7 +4,7 @@ from django_extensions.admin import ForeignKeyAutocompleteAdmin
from .models import ( from .models import (
EventType, EventType,
Event, Event,
Event_Participation, EventParticipation,
) )
@ -46,7 +46,7 @@ class EventAdmin(ForeignKeyAutocompleteAdmin):
class EventParticipationAdmin(admin.ModelAdmin): class EventParticipationAdmin(admin.ModelAdmin):
model = Event_Participation model = EventParticipation
fields = ("event", "gymnast", "rank") fields = ("event", "gymnast", "rank")
list_display = ("event", "gymnast", "rank") list_display = ("event", "gymnast", "rank")
@ -54,4 +54,4 @@ class EventParticipationAdmin(admin.ModelAdmin):
admin.site.register(EventType, EventTypeAdmin) admin.site.register(EventType, EventTypeAdmin)
admin.site.register(Event, EventAdmin) admin.site.register(Event, EventAdmin)
admin.site.register(Event_Participation, EventParticipationAdmin) admin.site.register(EventParticipation, EventParticipationAdmin)

View File

@ -59,7 +59,7 @@ class Event(Markdownizable, Temporizable):
name = models.CharField(max_length=255, verbose_name="Nom") name = models.CharField(max_length=255, verbose_name="Nom")
gymnasts = models.ManyToManyField( gymnasts = models.ManyToManyField(
Gymnast, Gymnast,
through="Event_Participation", through="EventParticipation",
related_name="participate_to", related_name="participate_to",
verbose_name="Participants", verbose_name="Participants",
) )
@ -85,7 +85,7 @@ class Event(Markdownizable, Temporizable):
return get_number_of_weeks_between(today, self.datebegin.date()) return get_number_of_weeks_between(today, self.datebegin.date())
class Event_Participation(models.Model): class EventParticipation(models.Model):
""" """ """ """
class Meta: class Meta:

View File

@ -7,7 +7,7 @@ from ultron.people.models import Gymnast
from .models import ( from .models import (
Event, Event,
Event_Participation, EventParticipation,
) )
from .forms import EventForm from .forms import EventForm
@ -79,7 +79,7 @@ def link_gymnast_to_event(request, eventid, gymnastid):
try: try:
gymnast = get_object_or_404(Gymnast, pk=gymnastid) gymnast = get_object_or_404(Gymnast, pk=gymnastid)
event = get_object_or_404(Event, pk=eventid) event = get_object_or_404(Event, pk=eventid)
Event_Participation.objects.create(gymnast=gymnast, event=event) EventParticipation.objects.create(gymnast=gymnast, event=event)
except: except:
return HttpResponse(409) return HttpResponse(409)
@ -100,7 +100,7 @@ def remove_link_between_gymnast_and_event(request, eventid, gymnastid):
try: try:
gymnast = get_object_or_404(Gymnast, pk=gymnastid) gymnast = get_object_or_404(Gymnast, pk=gymnastid)
event = get_object_or_404(Event, pk=eventid) event = get_object_or_404(Event, pk=eventid)
link = Event_Participation.objects.get(event=event, gymnast=gymnast) link = EventParticipation.objects.get(event=event, gymnast=gymnast)
link.delete() link.delete()
except: except:
return HttpResponse(409) return HttpResponse(409)