Adding ages field to objective model
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
9cc8ed4e2b
commit
5b775f2119
|
@ -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 />
|
||||||
|
|
|
@ -26,8 +26,8 @@
|
||||||
<tr role="row" class="{% cycle 'odd' 'even' %}">
|
<tr role="row" class="{% cycle 'odd' 'even' %}">
|
||||||
<td class="text-left"> <a href="{% url 'skill_details' skill.id %}">{{ skill.long_label }}</a></td>
|
<td class="text-left"> <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>
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue