[WIP] Add strength functionnality
This commit is contained in:
parent
480f085686
commit
42d4e26aba
|
@ -21,18 +21,16 @@
|
|||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
{% if quality_of_movement_list %}
|
||||
<table class="table tablesorter table-striped" data-sort="table" id="stability_table">
|
||||
<table class="table tablesorter table-striped" data-sort="table" id="qom_table">
|
||||
<thead class="text-primary">
|
||||
<tr>
|
||||
<th style="width: 3%"></th>
|
||||
<th class="header text-left" style="width: 8%">Date</th>
|
||||
<th class="header text-left" style="width: 20%">Gymnast</th>
|
||||
<th class="header text-left">overhead_squat</th>
|
||||
<th class="header text-left">sl_drop_jump</th>
|
||||
<th class="header text-left">sl_stability_right</th>
|
||||
<th class="header text-left">sl_stability_left</th>
|
||||
<!-- <th class="header text-left">sl_bridge</th>
|
||||
<th class="header text-left">side_plank_leg_raise</th> -->
|
||||
<th class="header text-left">SL Drop Jump</th>
|
||||
<th class="header text-left">SL Stability right</th>
|
||||
<th class="header text-left">SL Stability left</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
@ -45,12 +43,10 @@
|
|||
</td>
|
||||
<td class="text-left"><a href="{% url 'quality_of_movement_details' quality_of_movement.id %}">{{ quality_of_movement.date | date:"d-m-Y" }}</a></td>
|
||||
<td class="text-left"><a href="{% url 'gymnast_details_tab' quality_of_movement.gymnast.id 'physiological' %}">{{ quality_of_movement.gymnast }}</a></td>
|
||||
<!-- <td class="text-left">{{ quality_of_movement.overhead_squat.all }}</td>
|
||||
<td class="text-left">{{ quality_of_movement.single_leg_drop_jump.all }}</td> -->
|
||||
<!-- <td class="text-left">{{ quality_of_movement.overhead_squat.all }}</td> -->
|
||||
<!-- <td class="text-left">{{ quality_of_movement.single_leg_drop_jump.all }}</td> -->
|
||||
<td class="text-left">{{ quality_of_movement.single_leg_stability_right }}</td>
|
||||
<td class="text-left">{{ quality_of_movement.single_leg_stability_left }}</td>
|
||||
<!-- <td class="text-right">{{ quality_of_movement.sl_bridge }}</td>
|
||||
<td class="text-right">{{ quality_of_movement.side_plank_leg_raise }}</td> -->
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
@ -66,7 +62,7 @@
|
|||
{% block footerscript %}
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function () {
|
||||
$('#stability_table').tablesorter({
|
||||
$('#qom_table').tablesorter({
|
||||
headers: {
|
||||
0: { sorter: false }, // disable first column
|
||||
},
|
||||
|
@ -74,7 +70,7 @@
|
|||
sortList: [[1, 1]]
|
||||
});
|
||||
|
||||
$('#stability_table').DataTable({
|
||||
$('#qom_table').DataTable({
|
||||
scrollY: 500,
|
||||
paging: false,
|
||||
searching: false,
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
{% extends "base.html" %}
|
||||
{% load static %}
|
||||
{% load has_group %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-sm-12 col-md-8 col-lg-8 col-xl-6">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4 class="">{% if strength_id %}Edit{% else %}Add{% endif %} Strength</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<form action="{% if strength_id %}{% url 'strength_update' strength_id %}{% else %}{% url 'strength_create' %}{% endif %}" method="post" class="form-horizontal" id="formulaire" name="formulaire">
|
||||
{% csrf_token %}
|
||||
<div class="form-group row ">
|
||||
<label for="id_date" class="col-4 col-sm-3 col-form-label">Gymnast <span class="text-danger"><b>*</b></span></label>
|
||||
<div class="col-sm-8 col-md-6 col-lg-6 col-xl-6 {% if form.jumper.errors %}has-danger{% endif %}">
|
||||
{% if request.user|has_group:"trainer" %}
|
||||
{{ form.gymnast }}
|
||||
{{ form.gymnast_related }}
|
||||
{% if form.gymnast.errors %} <span class="btn btn-sm btn-danger-outline">{% for error in form.gymnast.errors %}{{ error }}{% endfor %}</span>{% endif %}
|
||||
{% else %}
|
||||
<input type="text" class="form-control" value="{{ request.user.first_name }} {{ request.user.last_name }}" readonly="readonly" />
|
||||
<input type="hidden" name="gymnast" id="gymnast" value="{{ request.user.gymnast.id }}" />
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row ">
|
||||
<label for="id_date" class="col-4 col-sm-3 col-form-label">{{ form.date.label }} <span class="text-danger"><b>*</b></span></label>
|
||||
<div class="col-sm-3 col-md-4 col-lg-4 col-xl-4 {% if form.date.errors %}has-danger{% endif %}">
|
||||
{{ form.date }}
|
||||
{% if form.date.errors %}<span class="btn btn-sm btn-danger-outline">{% for error in form.date.errors %}{{ error }}{% endfor %}</span>{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row ">
|
||||
<label for="id_overhead_squat" class="col-4 col-sm-3 col-form-label">{{ form.overhead_squat.label }}<span class="text-danger"><b>*</b></span></label>
|
||||
<div class="col-5 col-sm-3 col-md-2 col-lg-5 col-xl-5 {% if form.overhead_squat.errors %}has-danger{% endif %}">
|
||||
{{ form.overhead_squat }}
|
||||
{% if form.overhead_squat.errors %} <span class="btn btn-sm btn-danger-outline">{% for error in form.overhead_squat.errors %}{{ error }}{% endfor %}</span>{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row ">
|
||||
<label for="id_single_leg_drop_jump" class="col-4 col-sm-3 col-form-label">{{ form.single_leg_drop_jump.label }} <span class="text-danger"><b>*</b></span></label>
|
||||
<div class="col-5 col-sm-3 col-md-2 col-lg-5 col-xl-5 {% if form.single_leg_drop_jump.errors %}has-danger{% endif %}">
|
||||
{{ form.single_leg_drop_jump }}
|
||||
{% if form.single_leg_drop_jump.errors %} <span class="btn btn-sm btn-danger-outline">{% for error in form.single_leg_drop_jump.errors %}{{ error }}{% endfor %}</span>{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row ">
|
||||
<label for="id_single_leg_stability_right" class="col-4 col-sm-3 col-form-label">{{ form.single_leg_stability_right.label }}<span class="text-danger"><b>*</b></span></label>
|
||||
<div class="col-5 col-sm-3 col-md-2 col-lg-2 col-xl-2 {% if form.single_leg_stability_right.errors %}has-danger{% endif %}">
|
||||
{{ form.single_leg_stability_right }}
|
||||
{% if form.single_leg_stability_right.errors %} <span class="btn btn-sm btn-danger-outline">{% for error in form.single_leg_stability_right.errors %}{{ error }}{% endfor %}</span>{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row ">
|
||||
<label for="id_single_leg_stability_left" class="col-4 col-sm-3 col-form-label">{{ form.single_leg_stability_left.label }}<span class="text-danger"><b>*</b></span></label>
|
||||
<div class="col-5 col-sm-3 col-md-2 col-lg-2 col-xl-2 {% if form.single_leg_stability_left.errors %}has-danger{% endif %}">
|
||||
{{ form.single_leg_stability_left }}
|
||||
{% if form.single_leg_stability_left.errors %} <span class="btn btn-sm btn-danger-outline">{% for error in form.single_leg_stability_left.errors %}{{ error }}{% endfor %}</span>{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group text-center">
|
||||
<input type="submit" value="{% if stability_id %}Save{% else %}Add{% endif %}" class="btn btn-warning" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block footerscript %}
|
||||
<script type="text/javascript" >
|
||||
$(function(){
|
||||
blackDashboard.initDateTimePicker();
|
||||
});
|
||||
|
||||
const csrf_token = "{{ csrf_token|escapejs }}";
|
||||
const gymnast_lookup = "{% url 'gymnast_lookup' %}";
|
||||
const skill_lookup = "{% url 'skill_lookup' %}";
|
||||
</script>
|
||||
<script src="{% static "js/template_users/datepicker_maxdate_today.js" %}"></script>
|
||||
{% if request.session.template == 0 %}
|
||||
<script src="{% static "js/template_users/gymnast_autocomplete_black.js" %}"></script>
|
||||
<script src="{% static "js/template_users/skill_autocomplete_black.js" %}"></script>
|
||||
{% else %}
|
||||
<script src="{% static "js/template_users/gymnast_autocomplete.js" %}"></script>
|
||||
<script src="{% static "js/template_users/skill_autocomplete.js" %}"></script>
|
||||
{% endif %}
|
||||
{% endblock %}
|
|
@ -0,0 +1,56 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-12 col-sm-8 col-md-6">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h4 class="mb-0">Quality of Movement on {{ quality_of_movement.date | date:"j N Y" }}</h4>
|
||||
<a href="{% url 'gymnast_details_tab' quality_of_movement.gymnast.id 'physiological' %}">{{ quality_of_movement.gymnast }}</a>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-striped">
|
||||
<tr>
|
||||
<td>overhead Squat</td>
|
||||
<td>
|
||||
{% for overhead_squat in qof_overhead_squat %}
|
||||
{{ overhead_squat }}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Single Leg Drop Jump</td>
|
||||
<td>
|
||||
{% for single_leg_drop_jump in qof_single_leg_drop_jump %}
|
||||
{{ single_leg_drop_jump }}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Single leg stability right</td>
|
||||
<td>{{ quality_of_movement.single_leg_stability_right }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Single leg stability left</td>
|
||||
<td>{{ quality_of_movement.single_leg_stability_left }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="card-footer pl-0 pb-0">
|
||||
<a href="{% url 'quality_of_movement_list' %}">
|
||||
<button type="submit" value="add" class="btn btn-icon btn-warning ">
|
||||
<i class="tim-icons icon-double-left"></i>
|
||||
</button>
|
||||
</a>
|
||||
<a href="{% url 'quality_of_movement_create_for_gymnast' quality_of_movement.gymnast.id %}">
|
||||
<button type="submit" value="add" class="btn btn-icon btn-warning ">
|
||||
+
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -0,0 +1,104 @@
|
|||
{% extends "listing.html" %}
|
||||
|
||||
{% block datacontent %}
|
||||
<div class="card mb-0">
|
||||
<div class="card-header">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<h4 class=""> Strength Listing</h4>
|
||||
</div>
|
||||
<div class="col-1 ml-auto">
|
||||
<div class="text-right">
|
||||
<a href="{% url 'strength_create' %}">
|
||||
<button type="submit" value="add" class="btn btn-icon btn-warning">
|
||||
<i class="fas fa-plus"></i>
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="table-responsive">
|
||||
{% if strength_list %}
|
||||
<table class="table tablesorter table-striped" data-sort="table" id="strength_table">
|
||||
<thead class="text-primary">
|
||||
<tr>
|
||||
<th style="width: 3%"></th>
|
||||
<th class="header text-left" style="width: 8%">Date</th>
|
||||
<th class="header text-left" style="width: 20%">Gymnast</th>
|
||||
|
||||
<th class="header text-left">harmstring left</th>
|
||||
<th class="header text-left">harmstring right</th>
|
||||
<th class="header text-left">quadriceps left</th>
|
||||
<th class="header text-left">quadriceps right</th>
|
||||
|
||||
<th class="header text-left">hip adductor left</th>
|
||||
<th class="header text-left">hip adductor right</th>
|
||||
<th class="header text-left">hip abductor left</th>
|
||||
<th class="header text-left">hip abductor right</th>
|
||||
|
||||
<th class="header text-left">shoulder external rotator left</th>
|
||||
<th class="header text-left">shoulder external rotator right</th>
|
||||
<th class="header text-left">shoulder internal rotator left</th>
|
||||
<th class="header text-left">shoulder internal rotator right</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for strength in strength_list %}
|
||||
<tr role="row" class="{% cycle 'odd' 'even' %}">
|
||||
<td>
|
||||
<a href="{% url 'strength_update' strength.id %}">
|
||||
<span class="tim-icons icon-pencil text-warning"></span>
|
||||
</a>
|
||||
</td>
|
||||
<td class="text-left"><a href="{% url 'strength_details' strength.id %}">{{ strength.date | date:"d-m-Y" }}</a></td>
|
||||
<td class="text-left"><a href="{% url 'gymnast_details_tab' strength.gymnast.id 'physiological' %}">{{ strength.gymnast }}</a></td>
|
||||
|
||||
<td class="text-left">{{ strength.harmstring_left_prone }}</td>
|
||||
<td class="text-left">{{ strength.harmstring_right_prone }}</td>
|
||||
<td class="text-left">{{ strength.quadriceps_left_seated }}</td>
|
||||
<td class="text-left">{{ strength.quadriceps_right_seated }}</td>
|
||||
|
||||
<td class="text-left">{{ strength.hip_adductor_left }}</td>
|
||||
<td class="text-left">{{ strength.hip_adductor_right }}</td>
|
||||
<td class="text-left">{{ strength.hip_abductor_left }}</td>
|
||||
<td class="text-left">{{ strength.hip_abductor_right }}</td>
|
||||
|
||||
<td class="text-left">{{ strength.shoulder_external_rotator_left }}</td>
|
||||
<td class="text-left">{{ strength.shoulder_external_rotator_right }}</td>
|
||||
<td class="text-left">{{ strength.shoulder_internal_rotator_left }}</td>
|
||||
<td class="text-left">{{ strength.shoulder_internal_rotator_right }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% else %}
|
||||
<p class="muted-text">There are no injury corresponding to your criterias.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block footerscript %}
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function () {
|
||||
$('#strength_table').tablesorter({
|
||||
headers: {
|
||||
0: { sorter: false }, // disable first column
|
||||
},
|
||||
dateFormat: "uk",
|
||||
sortList: [[1, 1]]
|
||||
});
|
||||
|
||||
$('#strength_table').DataTable({
|
||||
scrollY: 500,
|
||||
paging: false,
|
||||
searching: false,
|
||||
ordering: false,
|
||||
"bInfo": false,
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
|
@ -179,6 +179,80 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row justify-content-center ml-1">
|
||||
<div class="col-md-6">
|
||||
<div class="card mb-4">
|
||||
<div class="card-header">
|
||||
<h4>Strength</h4>
|
||||
</div>
|
||||
<div class="card-body pt-0 pb-0 pr-0 pl-0">
|
||||
{% if strength_list %}
|
||||
<table class="table" id="previous_events">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th class='header text-left'>Date</th>
|
||||
<th class='header text-center'>???</th>
|
||||
<th class='header text-center'>???</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for strength in strength_list %}
|
||||
<tr>
|
||||
<td class="text-left">
|
||||
<a href="{% url 'strength_update' strength.id %}">
|
||||
<span class="tim-icons icon-pencil text-warning"></span>
|
||||
</a>
|
||||
</td>
|
||||
<td class="text-left">
|
||||
<a href="{% url 'strength_details' strength.id %}">
|
||||
{{ strength.date | date:"d-m-Y" }}
|
||||
</a>
|
||||
</td>
|
||||
<td class="text-center">{{ strength.quadriceps_left_seated }}</td>
|
||||
<td class="text-center">{{ strength.quadriceps_right_seated }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% else %}
|
||||
<p class="pl-3 text-muted">No strength recorded for this gymnast.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="card-footer text-right text-muted pt-0">
|
||||
{% if strength_list %}
|
||||
<a href="{% url 'strength_list_for_gymnast' gymnast_id %}">
|
||||
<button type="submit" value="list" class="btn btn-icon btn-warning mr-2">
|
||||
<i class="far fa-list-alt"></i>
|
||||
</button>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
<a href="{% url 'strength_create_for_gymnast' gymnast_id %}">
|
||||
<button type="submit" value="add" class="btn btn-icon btn-warning ">
|
||||
<i class="fas fa-plus"></i>
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="card mb-4">
|
||||
<div class="card-header">
|
||||
<h4>Mobility & Flexibility</h4>
|
||||
</div>
|
||||
<div class="card-body pt-0 pb-0 pr-0 pl-0">
|
||||
(under construction)
|
||||
</div>
|
||||
<div class="card-footer text-right text-muted pt-0">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row justify-content-center ml-1">
|
||||
<div class="col-md-12">
|
||||
<div class="card">
|
||||
|
|
|
@ -2,7 +2,6 @@ from django.contrib import admin
|
|||
|
||||
from django_admin_listfilter_dropdown.filters import (
|
||||
DropdownFilter,
|
||||
ChoiceDropdownFilter,
|
||||
RelatedDropdownFilter,
|
||||
)
|
||||
|
||||
|
@ -12,6 +11,7 @@ from .models import (
|
|||
Point,
|
||||
Chrono,
|
||||
Injury,
|
||||
Strength,
|
||||
SLBridge,
|
||||
WellBeing,
|
||||
Stability,
|
||||
|
@ -347,11 +347,39 @@ class QualityOfMovementAdmin(admin.ModelAdmin):
|
|||
autocomplete_fields = ("gymnast",)
|
||||
|
||||
|
||||
class StrengthAdmin(admin.ModelAdmin):
|
||||
model = Strength
|
||||
|
||||
list_display = (
|
||||
"date",
|
||||
"gymnast",
|
||||
"harmstring_left_prone",
|
||||
"harmstring_right_prone",
|
||||
"quadriceps_left_seated",
|
||||
"quadriceps_right_seated",
|
||||
"hip_adductor_left",
|
||||
"hip_adductor_right",
|
||||
"hip_abductor_left",
|
||||
"hip_abductor_right",
|
||||
"shoulder_external_rotator_left",
|
||||
"shoulder_external_rotator_right",
|
||||
"shoulder_internal_rotator_left",
|
||||
"shoulder_internal_rotator_right",
|
||||
)
|
||||
list_filter = (("gymnast", RelatedDropdownFilter),)
|
||||
search_fields = (
|
||||
"gymnast__firstname",
|
||||
"gymnast__lastname",
|
||||
)
|
||||
autocomplete_fields = ("gymnast",)
|
||||
|
||||
|
||||
admin.site.register(Plan, PlanAdmin)
|
||||
admin.site.register(Note, NoteAdmin)
|
||||
admin.site.register(Point, PointAdmin)
|
||||
admin.site.register(Chrono, ChronoAdmin)
|
||||
admin.site.register(Injury, InjuryAdmin)
|
||||
admin.site.register(Strength, StrengthAdmin)
|
||||
admin.site.register(WellBeing, WellBeingAdmin)
|
||||
admin.site.register(InjuryType, InjuryTypeAdmin)
|
||||
admin.site.register(LearnedSkill, LearnedSkillAdmin)
|
||||
|
|
|
@ -8,6 +8,7 @@ from .models import (
|
|||
Point,
|
||||
Chrono,
|
||||
Injury,
|
||||
Strength,
|
||||
WellBeing,
|
||||
Stability,
|
||||
HeightWeight,
|
||||
|
@ -365,6 +366,144 @@ class QualityOfMovementForm(forms.ModelForm):
|
|||
)
|
||||
|
||||
|
||||
class StrengthForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Strength
|
||||
fields = (
|
||||
"gymnast",
|
||||
"date",
|
||||
"harmstring_left_prone",
|
||||
"harmstring_right_prone",
|
||||
"quadriceps_left_seated",
|
||||
"quadriceps_right_seated",
|
||||
"hip_adductor_left",
|
||||
"hip_adductor_right",
|
||||
"hip_abductor_left",
|
||||
"hip_abductor_right",
|
||||
"shoulder_external_rotator_left",
|
||||
"shoulder_external_rotator_right",
|
||||
"shoulder_internal_rotator_left",
|
||||
"shoulder_internal_rotator_right",
|
||||
)
|
||||
widgets = {
|
||||
"date": forms.DateInput(
|
||||
attrs={
|
||||
"class": "form-control datepicker",
|
||||
"placeholder": date.today().strftime("%Y-%m-%d"),
|
||||
"value": date.today().strftime("%Y-%m-%d"),
|
||||
}
|
||||
),
|
||||
"gymnast": forms.HiddenInput(),
|
||||
"harmstring_left_prone": forms.NumberInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"placeholder": "x",
|
||||
"min": "0",
|
||||
"max": "10000",
|
||||
}
|
||||
),
|
||||
"harmstring_right_prone": forms.NumberInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"placeholder": "x",
|
||||
"min": "0",
|
||||
"max": "10000",
|
||||
}
|
||||
),
|
||||
"quadriceps_left_seated": forms.NumberInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"placeholder": "x",
|
||||
"min": "0",
|
||||
"max": "10000",
|
||||
}
|
||||
),
|
||||
"quadriceps_right_seated": forms.NumberInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"placeholder": "x",
|
||||
"min": "0",
|
||||
"max": "10000",
|
||||
}
|
||||
),
|
||||
"hip_adductor_left": forms.NumberInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"placeholder": "x",
|
||||
"min": "0",
|
||||
"max": "10000",
|
||||
}
|
||||
),
|
||||
"hip_adductor_right": forms.NumberInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"placeholder": "x",
|
||||
"min": "0",
|
||||
"max": "10000",
|
||||
}
|
||||
),
|
||||
"hip_abductor_left": forms.NumberInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"placeholder": "x",
|
||||
"min": "0",
|
||||
"max": "10000",
|
||||
}
|
||||
),
|
||||
"hip_abductor_right": forms.NumberInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"placeholder": "x",
|
||||
"min": "0",
|
||||
"max": "10000",
|
||||
}
|
||||
),
|
||||
"shoulder_external_rotator_left": forms.NumberInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"placeholder": "x",
|
||||
"min": "0",
|
||||
"max": "10000",
|
||||
}
|
||||
),
|
||||
"shoulder_external_rotator_right": forms.NumberInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"placeholder": "x",
|
||||
"min": "0",
|
||||
"max": "10000",
|
||||
}
|
||||
),
|
||||
"shoulder_internal_rotator_left": forms.NumberInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"placeholder": "x",
|
||||
"min": "0",
|
||||
"max": "10000",
|
||||
}
|
||||
),
|
||||
"shoulder_internal_rotator_right": forms.NumberInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"placeholder": "x",
|
||||
"min": "0",
|
||||
"max": "10000",
|
||||
}
|
||||
),
|
||||
}
|
||||
|
||||
gymnast_related = forms.CharField(
|
||||
required=False,
|
||||
widget=forms.TextInput(
|
||||
attrs={
|
||||
"class": "form-control",
|
||||
"placeholder": "Searching gymnast…",
|
||||
"data-ref": "#id_gymnast",
|
||||
}
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
class WellBeingForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = WellBeing
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
# Generated by Django 4.2 on 2023-10-03 13:10
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import ultron.tools.models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("people", "0008_alter_gymnast_orientation"),
|
||||
(
|
||||
"followup",
|
||||
"0048_rename_sl_drop_jump_qualityofmovement_single_leg_drop_jump_and_more",
|
||||
),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="Strength",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"date",
|
||||
models.DateField(
|
||||
default=ultron.tools.models.get_default_date,
|
||||
verbose_name="Date",
|
||||
),
|
||||
),
|
||||
("season", models.CharField(editable=False, max_length=9)),
|
||||
("week_number", models.PositiveSmallIntegerField(editable=False)),
|
||||
(
|
||||
"harmstring_left_prone",
|
||||
models.PositiveSmallIntegerField(blank=True, null=True),
|
||||
),
|
||||
(
|
||||
"harmstring_right_prone",
|
||||
models.PositiveSmallIntegerField(blank=True, null=True),
|
||||
),
|
||||
(
|
||||
"quadriceps_left_seated",
|
||||
models.PositiveSmallIntegerField(blank=True, null=True),
|
||||
),
|
||||
(
|
||||
"quadriceps_right_seated",
|
||||
models.PositiveSmallIntegerField(blank=True, null=True),
|
||||
),
|
||||
(
|
||||
"hip_adductor_left",
|
||||
models.PositiveSmallIntegerField(blank=True, null=True),
|
||||
),
|
||||
(
|
||||
"hip_adductor_right",
|
||||
models.PositiveSmallIntegerField(blank=True, null=True),
|
||||
),
|
||||
(
|
||||
"hip_abductor_left",
|
||||
models.PositiveSmallIntegerField(blank=True, null=True),
|
||||
),
|
||||
(
|
||||
"hip_abductor_right",
|
||||
models.PositiveSmallIntegerField(blank=True, null=True),
|
||||
),
|
||||
(
|
||||
"shoulder_external_rotator_left",
|
||||
models.PositiveSmallIntegerField(blank=True, null=True),
|
||||
),
|
||||
(
|
||||
"shoulder_external_rotator_right",
|
||||
models.PositiveSmallIntegerField(blank=True, null=True),
|
||||
),
|
||||
(
|
||||
"shoulder_internal_rotator_left",
|
||||
models.PositiveSmallIntegerField(blank=True, null=True),
|
||||
),
|
||||
(
|
||||
"shoulder_internal_rotator_right",
|
||||
models.PositiveSmallIntegerField(blank=True, null=True),
|
||||
),
|
||||
(
|
||||
"gymnast",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="strength",
|
||||
to="people.gymnast",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Strength",
|
||||
"verbose_name_plural": "Strength",
|
||||
},
|
||||
),
|
||||
]
|
|
@ -675,3 +675,30 @@ class QualityOfMovement(Seasonisable):
|
|||
|
||||
def __str__(self):
|
||||
return f"{self.gymnast} - {self.date}: {self.overhead_squat}"
|
||||
|
||||
|
||||
class Strength(Seasonisable):
|
||||
"""Classe représentant la Strength"""
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Strength"
|
||||
verbose_name_plural = "Strength"
|
||||
|
||||
gymnast = models.ForeignKey(
|
||||
Gymnast, on_delete=models.CASCADE, related_name="strength"
|
||||
)
|
||||
harmstring_left_prone = models.PositiveSmallIntegerField(null=True, blank=True)
|
||||
harmstring_right_prone = models.PositiveSmallIntegerField(null=True, blank=True)
|
||||
quadriceps_left_seated = models.PositiveSmallIntegerField(null=True, blank=True)
|
||||
quadriceps_right_seated = models.PositiveSmallIntegerField(null=True, blank=True)
|
||||
hip_adductor_left = models.PositiveSmallIntegerField(null=True, blank=True)
|
||||
hip_adductor_right = models.PositiveSmallIntegerField(null=True, blank=True)
|
||||
hip_abductor_left = models.PositiveSmallIntegerField(null=True, blank=True)
|
||||
hip_abductor_right = models.PositiveSmallIntegerField(null=True, blank=True)
|
||||
shoulder_external_rotator_left = models.PositiveSmallIntegerField(null=True, blank=True)
|
||||
shoulder_external_rotator_right = models.PositiveSmallIntegerField(null=True, blank=True)
|
||||
shoulder_internal_rotator_left = models.PositiveSmallIntegerField(null=True, blank=True)
|
||||
shoulder_internal_rotator_right = models.PositiveSmallIntegerField(null=True, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.gymnast} - {self.date}"
|
||||
|
|
|
@ -162,6 +162,32 @@ urlpatterns = [
|
|||
),
|
||||
#
|
||||
#
|
||||
# Strength
|
||||
path(r"strength/", views.strength_listing, name="strength_list"),
|
||||
path(
|
||||
r"strength/gymnast/<int:gymnast_id>/",
|
||||
views.strength_listing,
|
||||
name="strength_list_for_gymnast"
|
||||
),
|
||||
# path(r"stability/search/", views.injury_listing, name="quality_of_movement_search"),
|
||||
path(r"strength/add/", views.quality_of_movement_create_or_update, name="strength_create"),
|
||||
path(
|
||||
r"strength/add/<int:gymnast_id>/",
|
||||
views.strength_create_or_update,
|
||||
name="strength_create_for_gymnast",
|
||||
),
|
||||
path(
|
||||
r"strength/edit/<int:strength_id>/",
|
||||
views.strength_create_or_update,
|
||||
name="strength_update",
|
||||
),
|
||||
path(
|
||||
r"strength/<int:strength_id>/",
|
||||
views.strength_detail,
|
||||
name="strength_details"
|
||||
),
|
||||
#
|
||||
#
|
||||
# HEIGH/WEIGHT
|
||||
path(
|
||||
r"heightweight/gymnast/<int:gymnast_id>/",
|
||||
|
|
|
@ -17,6 +17,7 @@ from .models import (
|
|||
Point,
|
||||
Chrono,
|
||||
Injury,
|
||||
Strength,
|
||||
WellBeing,
|
||||
Stability,
|
||||
LearnedSkill,
|
||||
|
@ -32,6 +33,7 @@ from .forms import (
|
|||
ScoreForm,
|
||||
ChronoForm,
|
||||
InjuryForm,
|
||||
StrengthForm,
|
||||
StabilityForm,
|
||||
WellBeingForm,
|
||||
HeightWeightForm,
|
||||
|
@ -883,3 +885,67 @@ def quality_of_movement_create_or_update(request, quality_of_movement_id=None, g
|
|||
form = QualityOfMovementForm(instance=quality_of_movement, initial=data)
|
||||
context = {"form": form, "quality_of_movement_id": quality_of_movement_id}
|
||||
return render(request, "followup/quality_of_movement/create.html", context)
|
||||
|
||||
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def strength_listing(request, gymnast_id=None):
|
||||
"""Liste toutes les records de la table Quality of Movement"""
|
||||
|
||||
if gymnast_id is not None:
|
||||
gymnast = Gymnast.objects.get(pk=gymnast_id)
|
||||
strength_list = Strength.objects.filter(gymnast=gymnast_id)
|
||||
else:
|
||||
strength_list = Strength.objects.all()
|
||||
gymnast = None
|
||||
|
||||
context = {"strength_list": strength_list, "gymnast": gymnast}
|
||||
return render(request, "followup/strength/list.html", context)
|
||||
|
||||
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def strength_detail(request, strength_id):
|
||||
"""
|
||||
Récupère toutes les informations d'une Quality of Movement.
|
||||
"""
|
||||
strength = get_object_or_404(Strength, pk=strength_id)
|
||||
|
||||
context = {
|
||||
"strength": strength,
|
||||
}
|
||||
return render(request, "followup/strength/details.html", context)
|
||||
|
||||
|
||||
@login_required
|
||||
@require_http_methods(["GET", "POST"])
|
||||
def strength_create_or_update(request, strength_id=None, gymnast_id=None):
|
||||
"""
|
||||
Récupère toutes les informations d'une stability.
|
||||
"""
|
||||
if strength_id:
|
||||
strength = get_object_or_404(Strength, pk=strength_id)
|
||||
data = {
|
||||
"gymnast_related": strength.gymnast,
|
||||
}
|
||||
else:
|
||||
strength = None
|
||||
data = None
|
||||
if gymnast_id is not None:
|
||||
gymnast = get_object_or_404(Gymnast, pk=gymnast_id)
|
||||
data = {"gymnast": gymnast_id, "gymnast_related": str(gymnast)}
|
||||
|
||||
if request.method == "POST":
|
||||
form = StrengthForm(request.POST, instance=strength)
|
||||
|
||||
if form.is_valid():
|
||||
strength = form.save()
|
||||
return HttpResponseRedirect(
|
||||
reverse("strength_details", args=(strength.pk,))
|
||||
)
|
||||
else:
|
||||
return render(request, "followup/strength/create.html", {"form": form})
|
||||
|
||||
form = StrengthForm(instance=strength, initial=data)
|
||||
context = {"form": form, "strength_id": strength_id}
|
||||
return render(request, "followup/strength/create.html", context)
|
||||
|
|
|
@ -31,6 +31,7 @@ from ultron.followup.models import (
|
|||
Point,
|
||||
Chrono,
|
||||
Injury,
|
||||
Strength,
|
||||
Stability,
|
||||
WellBeing,
|
||||
LearnedSkill,
|
||||
|
@ -254,6 +255,7 @@ def gymnast_display_physiological(request, gymnast_id):
|
|||
)[:10]
|
||||
stability_list = Stability.objects.filter(gymnast=gymnast_id).order_by("date")[:10]
|
||||
quality_of_movement_list = QualityOfMovement.objects.filter(gymnast=gymnast_id).order_by("date")[:10]
|
||||
strength_list = Strength.objects.filter(gymnast=gymnast_id).order_by("date")[:10]
|
||||
|
||||
context = {
|
||||
"injuries_list": injuries_list,
|
||||
|
@ -261,6 +263,7 @@ def gymnast_display_physiological(request, gymnast_id):
|
|||
"stability_list": stability_list,
|
||||
"height_weight_list": height_weight_list,
|
||||
"quality_of_movement_list": quality_of_movement_list,
|
||||
"strength_list": strength_list,
|
||||
"gymnast_id": gymnast_id,
|
||||
}
|
||||
return render(request, "people/gymnasts/tabs/tab_physiological.html", context)
|
||||
|
|
Loading…
Reference in New Issue