Add link to tab

This commit is contained in:
Gregory Trullemans 2022-10-12 17:21:27 +02:00
parent 0da064b3f8
commit 68f807650e
12 changed files with 34 additions and 34 deletions

View File

@ -40,7 +40,7 @@
</a>
</td>
<td class="text-left"><a href="{% url 'accident_details' accident.id %}">{{ accident.date | date:"d-m-Y" }}</a></td>
<td class="text-left"><a href="{% url 'gymnast_details' accident.gymnast.id %}">{{ accident.gymnast }}</a></td>
<td class="text-left"><a href="{% url 'gymnast_details_tab' accident.gymnast.id 'physiological' %}">{{ accident.gymnast }}</a></td>
<td class="text-left">
{% if accident.skill %}
<a href="{% url 'skill_details' accident.skill.id %}">{{ accident.skill }}</a>

View File

@ -42,10 +42,10 @@
</div>
</div>
<div class="form-group row ">
<label for="id_type" class="col-4 col-sm-3 col-form-label">Type</label>
<div class="col-8 col-sm-4 col-md-3 {% if form.type.errors %}has-danger{% endif %}">
{{ form.cando }}
{% if form.cando.errors %}&nbsp;<span class="btn btn-sm btn-danger-outline">{% for error in form.cando.errors %}{{error}}{% endfor %}</span>{% endif %}
<label for="id_learning_step" class="col-4 col-sm-3 col-form-label">Learning step</label>
<div class="col-8 col-sm-4 col-md-3 {% if form.learning_step.errors %}has-danger{% endif %}">
{{ form.learning_step }}
{% if form.learning_step.errors %}&nbsp;<span class="btn btn-sm btn-danger-outline">{% for error in form.learning_step.errors %}{{error}}{% endfor %}</span>{% endif %}
</div>
</div>
{% if plan_id %}

View File

@ -41,10 +41,10 @@
</div>
</div>
<div class="form-group row ">
<label for="id_type" class="col-4 col-sm-3 col-form-label">Type</label>
<div class="col-8 col-sm-4 col-md-3 {% if form.type.errors %}has-danger{% endif %}">
{{ form.cando }}
{% if form.cando.errors %}&nbsp;<span class="btn btn-sm btn-danger-outline">{% for error in form.cando.errors %}{{error}}{% endfor %}</span>{% endif %}
<label for="id_learning_step" class="col-4 col-sm-3 col-form-label">Learning step</label>
<div class="col-8 col-sm-4 col-md-3 {% if form.learning_step.errors %}has-danger{% endif %}">
{{ form.learning_step }}
{% if form.learning_step.errors %}&nbsp;<span class="btn btn-sm btn-danger-outline">{% for error in form.learning_step.errors %}{{error}}{% endfor %}</span>{% endif %}
</div>
</div>
<div class="form-group text-center">

View File

@ -451,7 +451,7 @@
data: {
gymnast_id: $(this).data('gymnastid'),
skill_id: $(this).data('skillid'),
cando: $(this).data('link'),
learning_step: $(this).data('link'),
csrfmiddlewaretoken: '{{ csrf_token }}'
},
type: 'POST',

View File

@ -11,7 +11,7 @@
<h4 class=""><i class="icon-primary fal fa-laugh-wink"></i> Hi {{ user.username }} !</h4>
</div>
<div class="card-body">
Welcome to Ultron v0.55 <span class="text-muted">(last update : 7-10-2022)</span><br />
Welcome to Ultron v0.57 <span class="text-muted">(last update : 12-10-2022)</span><br />
This application is here to help us to manage the gymnasts (evolution, evaluation, routines, scores, …). This tool is not perfect so feel free to make improvement proposals, bug reports, … by sending me an <a href="mailto:gregory@flyingacrobaticstrampoline.be">email</a>.<br/>
<br/>
</div>

View File

@ -46,12 +46,12 @@ class ChronoDetailsAdmin(admin.ModelAdmin):
class LearnedSkillAdmin(admin.ModelAdmin):
model = LearnedSkill
list_display = ("gymnast", "skill", "cando", "date")
list_display = ("gymnast", "skill", "learning_step", "date")
readonly_fields = ('season', 'week_number', 'created_at', 'updated_at')
list_filter = (
('gymnast', RelatedDropdownFilter),
('skill', RelatedDropdownFilter),
"cando"
"learning_step"
)
search_fields = ("gymnast", "skill")
autocomplete_fields = ("gymnast", "skill")

View File

@ -52,7 +52,7 @@ class ChronoForm(forms.ModelForm):
class LearnedSkillForm(forms.ModelForm):
class Meta:
model = LearnedSkill
fields = ("gymnast", "skill", "cando", "date")
fields = ("gymnast", "skill", "learning_step", "date")
widgets = {
"gymnast": forms.HiddenInput(),
"skill": forms.HiddenInput(),
@ -63,7 +63,7 @@ class LearnedSkillForm(forms.ModelForm):
"value": date.today().strftime("%Y-%m-%d"),
}
),
"cando": forms.Select(attrs={"class": "form-control selectpicker"}),
"learning_step": forms.Select(attrs={"class": "form-control selectpicker"}),
}
gymnast_related = forms.CharField(
@ -441,7 +441,7 @@ class PlanForm(forms.ModelForm):
class Meta:
model = Plan
fields = ("date", "gymnast", "educative", "cando", "is_done")
fields = ("date", "gymnast", "educative", "learning_step", "is_done")
widgets = {
"gymnast": forms.HiddenInput(),
"educative": forms.HiddenInput(),
@ -452,7 +452,7 @@ class PlanForm(forms.ModelForm):
"value": date.today().strftime("%Y-%m-%d"),
}
),
"cando": forms.Select(attrs={"class": "form-control selectpicker"}),
"learning_step": forms.Select(attrs={"class": "form-control selectpicker"}),
"is_done": forms.CheckboxInput(
attrs={"class": "form-control form-check-input ml-0 mt-0"}
),

View File

@ -148,7 +148,7 @@ class LearnedSkill(Seasonisable):
class Meta:
verbose_name = "Learned Skill"
verbose_name_plural = "Learned Skills"
unique_together = ("gymnast", "skill", "date", "cando")
unique_together = ("gymnast", "skill", "date", "learning_step")
gymnast = models.ForeignKey(
Gymnast,
@ -162,7 +162,7 @@ class LearnedSkill(Seasonisable):
related_name="known_by",
on_delete=models.CASCADE,
)
cando = models.PositiveSmallIntegerField(
learning_step = models.PositiveSmallIntegerField(
choices=LEARNING_STEP_CHOICES, verbose_name="Can do type"
)
created_at = models.DateTimeField(auto_now_add=True)
@ -192,7 +192,7 @@ class Plan(Seasonisable):
related_name="plan",
on_delete=models.CASCADE,
)
cando = models.PositiveSmallIntegerField(
learning_step = models.PositiveSmallIntegerField(
choices=LEARNING_STEP_CHOICES, verbose_name="Can do type", default=3
)
is_done = models.BooleanField(default=0)

View File

@ -222,13 +222,13 @@ def gymnast_learn_skill(request):
# utiliser un FORM pour cette fonction.
gymnast_id = request.POST.get("gymnast_id", None)
skill_id = request.POST.get("skill_id", None)
cando = request.POST.get("cando", 0)
learning_step = request.POST.get("learning_step", 0)
if gymnast_id and skill_id:
gymnast = get_object_or_404(Gymnast, pk=gymnast_id)
skill = Skill.objects.get(pk=skill_id)
learned_skill = LearnedSkill(
gymnast=gymnast, skill=skill, cando=cando, date=datetime.now()
gymnast=gymnast, skill=skill, learning_step=learning_step, date=datetime.now()
)
learned_skill.save()
return HttpResponse(status=200)

View File

@ -12,14 +12,14 @@ def generate_skill_doughnut(gymnast_id):
with help or no) à la dernière date connue et les renvoie pour en faire un graphique.
"""
base_queryset = LearnedSkill.objects.filter(gymnast=gymnast_id).order_by("-date")
total = 0
skills_capacity = [0] * 5
checked_skills = set()
for learned_skill in base_queryset:
if learned_skill not in checked_skills:
checked_skills.add(learned_skill)
skills_capacity[learned_skill.cando] += 1
skills_capacity[learned_skill.learning_step] += 1
total += 1
nb_skill = Skill.objects.all().count()

View File

@ -477,26 +477,26 @@ def gymnast_display_skill(request, gymnast_id):
).exclude(known_by__gymnast=gymnast.id)
skill_whith_help = (
Skill.objects.filter(known_by__gymnast=gymnast_id, known_by__cando=1)
.exclude(known_by__gymnast=gymnast.id, known_by__cando__gte=2)
Skill.objects.filter(known_by__gymnast=gymnast_id, known_by__learning_step=1)
.exclude(known_by__gymnast=gymnast.id, known_by__learning_step__gte=2)
.distinct()
)
skill_without_help = (
Skill.objects.filter(known_by__gymnast=gymnast_id, known_by__cando=2)
.exclude(known_by__gymnast=gymnast.id, known_by__cando=3)
Skill.objects.filter(known_by__gymnast=gymnast_id, known_by__learning_step=2)
.exclude(known_by__gymnast=gymnast.id, known_by__learning_step=3)
.distinct()
)
skill_not_chained = (
Skill.objects.filter(known_by__gymnast=gymnast_id, known_by__cando=2)
.exclude(known_by__gymnast=gymnast.id, known_by__cando=3)
Skill.objects.filter(known_by__gymnast=gymnast_id, known_by__learning_step=2)
.exclude(known_by__gymnast=gymnast.id, known_by__learning_step=3)
.distinct()
)
skill_chained = (
Skill.objects.filter(known_by__gymnast=gymnast_id, known_by__cando=3)
.exclude(known_by__gymnast=gymnast.id, known_by__cando=4)
Skill.objects.filter(known_by__gymnast=gymnast_id, known_by__learning_step=3)
.exclude(known_by__gymnast=gymnast.id, known_by__learning_step=4)
.distinct()
)

View File

@ -550,14 +550,14 @@ class GymnastReportDocument(PDFDocument):
| Q(plan__date__gte=date.today())
)
# .annotate(plan_date=F("plan__date"))
.annotate(plan_date=F("plan__date"), step=F("plan__cando"))
.annotate(plan_date=F("plan__date"), learning_step=F("plan__learning_step"))
.order_by("notation", "-plan__date").distinct('notation')[:6]
)
if planified_skills:
for planified_skill in planified_skills:
self.add_new_line(
X, planified_skill.short_label + " " + str(LEARNING_STEP_CHOICES[planified_skill.step][1]).lower() + " (" + planified_skill.notation + ") for " + planified_skill.plan_date.strftime("%d-%m-%Y")
X, planified_skill.short_label + " " + str(LEARNING_STEP_CHOICES[planified_skill.learning_step][1]).lower() + " (" + planified_skill.notation + ") for " + planified_skill.plan_date.strftime("%d-%m-%Y")
)
else:
self.add_new_line(