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>
<h4 class="card-title"> {{ skill.notation }}</h4>
</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="col-md-6">
<h4 class="mb-1">Détails</h4>
<!-- <h4 class="mb-1">Détails</h4> -->
<div class="row">
<div class="col-6">
<p>Notation : <a href="#">{{ skill.notation }}</a><br />
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 class="col-3 text-center">
<p>Notation : <a href="#">{{ skill.notation }}</a></p>
</div>
<div class="col-6">
<p>Difficulty : <a href="/skill/difficulty/exact/{{ skill.difficulty }}">{{ skill.difficulty }}</a><br />
Level : <a href="{% url 'skill_listing_by_key' 'level' 'exact' skill.level %}">{{ skill.level }}</a><br />
Rank : <a href="{% url 'skill_listing_by_key' 'rank' 'exact' skill.rank %}">{{ skill.level }}</a></p>
<div class="col-3 text-center">
<p>Difficulty : <a href="/skill/difficulty/exact/{{ skill.difficulty }}">{{ skill.difficulty }}</a></p>
</div>
<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>
<br />

View File

@ -26,8 +26,8 @@
<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"><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_boy }}</td>
<td class="text-right">{{ skill.age_girl_without_help }}</td>
<td class="text-right">{{ skill.age_boy_without_help }}</td>
<td class="text-center">{{ skill.notation }}</td>
<td class="text-center">{{ skill.difficulty }}</td>
<td class="text-center">{{ skill.level }}</td>

View File

@ -39,8 +39,14 @@ class SkillAdmin(ForeignKeyAutocompleteAdmin):
"notation",
"simplified_notation",
"is_competitive",
"age_boy",
"age_girl",
"age_boy_with_help",
"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",
"educatives",
)
@ -52,8 +58,6 @@ class SkillAdmin(ForeignKeyAutocompleteAdmin):
"level",
"rank",
"notation",
"age_boy",
"age_girl",
)
ordering = ("long_label", "short_label")
@ -67,8 +71,6 @@ class SkillAdmin(ForeignKeyAutocompleteAdmin):
"rotation",
"level",
"difficulty",
"age_boy",
"age_girl",
)
filter_horizontal = ("educatives", "prerequisites")

View File

@ -11,6 +11,21 @@ class Educative(Markdownizable):
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:
verbose_name = "Educatif"
verbose_name_plural = "Educatifs"
@ -29,11 +44,31 @@ class Educative(Markdownizable):
prerequisites = models.ManyToManyField(
"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(
blank=True, null=True, verbose_name="Girl's age"
age_boy_without_help = models.PositiveSmallIntegerField(
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):

View File

@ -80,17 +80,33 @@ def skill_details(request, skillid):
skill = get_object_or_404(Skill, pk=skillid)
for prerequisite in skill.prerequisites.all():
if prerequisite.level >= skill.level:
skill.level = prerequisite.level + 1
skill.level = max(prerequisite.level + 1, skill.level)
# if prerequisite.level >= skill.level:
# skill.level = prerequisite.level + 1
if prerequisite.rank >= skill.rank:
skill.rank = prerequisite.rank + 1
skill.rank = max(prerequisite.rank + 1, skill.rank)
# if prerequisite.rank >= skill.rank:
# skill.rank = prerequisite.rank + 1
if prerequisite.age_boy > skill.age_boy:
skill.age_boy = prerequisite.age_boy
skill.age_boy_with_help = max(skill.age_boy_with_help, prerequisite.age_boy_with_help)
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 = prerequisite.age_girl
skill.age_girl_with_help = max(skill.age_girl_with_help, prerequisite.age_girl_with_help)
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()
@ -158,20 +174,16 @@ def routine_details(request, routineid):
rank = 0
level = 0
difficulty = 0
age_boy = 0
age_girl = 0
difficulty = 0
is_competitive = True
for skill_link in routine.skill_links.all():
difficulty += skill_link.skill.difficulty
if skill_link.skill.level > level:
level = skill_link.skill.level
if skill_link.skill.rank > rank:
rank = skill_link.skill.rank + 1
level = max(skill_link.skill.level, level)
rank = max(skill_link.skill.rank + 1, rank)
if not skill_link.skill.is_competitive:
is_competitive = False
@ -189,12 +201,8 @@ def routine_details(request, routineid):
is_competitive = False
routine.difficulty = difficulty
if routine.level < level:
routine.level = level
if routine.rank is None or routine.rank < rank:
routine.rank = rank
routine.level = max(routine.level, level)
routine.rank = max(routine.rank, rank)
if routine.age_boy is None or 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 (
EventType,
Event,
Event_Participation,
EventParticipation,
)
@ -46,7 +46,7 @@ class EventAdmin(ForeignKeyAutocompleteAdmin):
class EventParticipationAdmin(admin.ModelAdmin):
model = Event_Participation
model = EventParticipation
fields = ("event", "gymnast", "rank")
list_display = ("event", "gymnast", "rank")
@ -54,4 +54,4 @@ class EventParticipationAdmin(admin.ModelAdmin):
admin.site.register(EventType, EventTypeAdmin)
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")
gymnasts = models.ManyToManyField(
Gymnast,
through="Event_Participation",
through="EventParticipation",
related_name="participate_to",
verbose_name="Participants",
)
@ -85,7 +85,7 @@ class Event(Markdownizable, Temporizable):
return get_number_of_weeks_between(today, self.datebegin.date())
class Event_Participation(models.Model):
class EventParticipation(models.Model):
""" """
class Meta:

View File

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