Jarvis/jarvis/people/templates/gymnasts/tabs/tab_routines_scores.html

496 lines
19 KiB
HTML

{% load has_group %}
{% load is_user_equal_to_gymnast %}
<div class="row justify-content-center">
<div class="col-md-6 pl-0">
<div class="card mb-3">
<div class="card-header">
<h4>Scores</h4>
</div>
<div class="card-body pt-0 pb-0 pr-0 pl-0">
{% if score_list %}
<div><canvas id="chart_score_competition" class="chartjs" width="400" height="200"></canvas></div>
{% else %}
<p class="pl-3 text-muted">No score recorded for this gymnast.</p>
{% endif %}
</div>
<div class="card-footer text-right text-muted pt-0">
{% if score_list %}
<a href="{% url 'score_list_for_gymnast' gymnast_id %}">
<button type="submit" value="add" class="btn btn-icon btn-warning mr-2">
<i class="fal fa-crosshairs"></i>
</button>
</a>
{% endif %}
{% if request.user|has_group:"trainer" or request.user|is_user_equal_to_gymnast:gymnast_id %}
<a href="{% url 'score_create_for_gymnast' gymnast_id %}">
<button type="submit" value="add" class="btn btn-icon btn-warning ">
<i class="fas fa-plus"></i>
</button>
</a>
{% endif %}
</div>
</div>
</div>
<div class="col-md-6 pl-0">
<div class="card mb-3">
<div class="card-header">
<h4>Routine's statistics</h4>
</div>
<div class="card-body pt-0 pb-0 pr-0 pl-0">
{% if routine_one_done_list or routine_two_done_list %}
<div><canvas id="chart_routine_done" class="chartjs" width="400" height="200"></canvas></div>
{% else %}
<p class="pl-3 text-muted">There are no routine's statistics associated to this gymnast.</p>
{% endif %}
</div>
<div class="card-footer pt-0 row">
{% if ghr_list %}
<div class="col-md-6 text-muted pt-0">
{% if has_routine_1 %}
<a href="#">
<button type="submit" value="list" class="btn btn-icon btn-success mr-2 action-button"
data-routine_type="1" data-success="1">
+R1
</button>
</a>
{% endif %}
{% if has_routine_2 %}
<a href="#">
<button type="submit" value="list" class="btn btn-icon btn-success mr-4 action-button"
data-routine_type="2" data-success="1">
+R2
</button>
</a>
{% endif %}
&nbsp;&nbsp;
{% if has_routine_1 %}
<a href="#">
<button type="submit" value="list" class="btn btn-icon btn-danger mr-2 action-button"
data-routine_type="1" data-success="0">
+R1
</button>
</a>
{% endif %}
{% if has_routine_2 %}
<a href="#">
<button type="submit" value="list" class="btn btn-icon btn-danger action-button"
data-routine_type="2" data-success="0">
+R2
</button>
</a>
{% endif %}
</div>
{% endif %}
<div class="col-md-6 {% if not ghr_list %}offset-md-6{% endif %} text-right text-muted pt-0">
{% if routine_one_done_list or routine_two_done_list %}
<a href="{% url 'routinedone_list_for_gymnast' gymnast_id %}">
<button type="submit" value="list" class="btn btn-icon btn-warning mr-2">
<i class="far fa-chart-bar"></i>
</button>
</a>
{% endif %}
{% if request.user|has_group:"trainer" or request.user|is_user_equal_to_gymnast:gymnast_id %}
<a href="{% url 'routinedone_create_for_gymnast' gymnast_id %}">
<button type="submit" value="add" class="btn btn-icon btn-warning ">
<i class="fas fa-plus"></i>
</button>
</a>
{% endif %}
</div>
</div>
</div>
</div>
</div>
<div class="row justify-content-center">
<div class="col-md-12 pl-0">
<div class="card">
<div class="card-header row">
<div class="col-8">
<h4>Active routines</h4>
</div>
<div class="col-4 text-right">
<h3 class="mb-0">
{% if ghr_list %}
<a href="{% url 'routine_list_for_gymnast' gymnast_id %}">
<i class="tim-icons icon-components text-warning"></i> <!-- Routines -->
</a>
{% endif %}
{% if request.user|has_group:"trainer" or request.user|is_user_equal_to_gymnast:gymnast_id %}
&nbsp;
<a href="{% url 'link_routine_to_gymnast' gymnast_id %}">
<i class="fas fa-plus text-warning"></i>
</a>
{% endif %}
</h3>
</div>
</div>
<div class="card-body pb-0 pr-0 pl-0">
{% if ghr_list %}
<div class="pr-1 pl-1">
<table class="table tablesorter table-striped table-condensed" data-sort="table" id="routine_table">
<thead>
<tr>
<th style="width: 8%" class="header text-left">Type</th>
<th style="width: 30%" class="header text-left">Label</th>
<th style="width: 15%" class="header text-left">From</th>
<th style="width: 10%" class="header text-center">Diff.</th>
</tr>
</thead>
<tbody>
{% for ghr in ghr_list %}
<tr>
<td class="text-center">{{ ghr.get_routine_type_display }}</td>
<td class="text-left"><a href="{% url 'combination_details' ghr.routine.id %}">{{ ghr.routine.short_label }}</a></td>
<td class="text-center">{{ ghr.date_begin | date:"d-m-Y"}}</td>
<td class="text-center"><b>{{ ghr.routine.difficulty }}</b></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<p class="pl-3 text-muted">There are no routines associated to this gymnast.</p>
{% endif %}
</div>
</div>
</div>
</div>
<script type="text/javascript">
$(document).ready(function () {
$('#routine_table').tablesorter({
// headers: {
// 0: { sorter: false }, // disable first column
// },
dateFormat: "uk",
sortList: [[0, 0],]
});
$('#stats_table').tablesorter({
// headers: {
// 0: { sorter: false }, // disable first column
// },
dateFormat: "uk",
sortList: [[0, 1],]
});
$('.action-button').click(function () {
$.ajax({
url: "{% url 'increment_routinedone' %}",
method: "POST",
data: {
gymnast_id: {{ gymnast_id }},
success: $(this).data("success"),
routine_type: $(this).data("routine_type"),
csrfmiddlewaretoken: '{{ csrf_token }}'
},
}).done(function () {
//
// RELOAD DE L'ONGLET
//
//
location.reload(); // recharge TOUTE la page... Overkill !
// tab_url = {% url 'gymnast_details_tab' gymnast_id 'routine' %};
// tab_div = '#routine';
// $.ajax({
// url: tab_url,
// dataType: "html",
// success: function(data) {
// $(tab_div).replaceWith($(tab_div).html(data));
// },
// error: function (exception) {
// console.log(exception);
// }
// });
});
});
});
var timeFormat = 'DD-MM-YYYY';
{% if score_list %}
var ctx = document.getElementById('chart_score_competition').getContext('2d');
var gradient_stroke_1 = ctx.createLinearGradient(0, 230, 0, 50);
var gradient_stroke_2 = ctx.createLinearGradient(0, 230, 0, 50);
var gradient_stroke_3 = ctx.createLinearGradient(0, 230, 0, 50);
gradient_stroke_1.addColorStop(1, 'rgba(255, 99, 132, 0.4)');
gradient_stroke_1.addColorStop(0.75, 'rgba(255, 99, 132, 0.3)');
gradient_stroke_1.addColorStop(0.5, 'rgba(255, 99, 132, 0.2)');
gradient_stroke_1.addColorStop(0.25, 'rgba(255, 99, 132, 0)');
gradient_stroke_2.addColorStop(1, 'rgba(255, 159, 64, 0.4)');
gradient_stroke_2.addColorStop(0.75, 'rgba(255, 159, 64, 0.3)');
gradient_stroke_2.addColorStop(0.5, 'rgba(255, 159, 64, 0.2)');
gradient_stroke_2.addColorStop(0.25, 'rgba(255, 159, 64, 0)');
gradient_stroke_3.addColorStop(1, 'rgba(54, 162, 235, 0.4)');
gradient_stroke_3.addColorStop(0.75, 'rgba(54, 162, 235, 0.3)');
gradient_stroke_3.addColorStop(0.5, 'rgba(54, 162, 235, 0.2)');
gradient_stroke_3.addColorStop(0.25, 'rgba(54, 162, 235, 0)');
var compulsory_routine_scrore = [
{% for score in score_routine1_list %}
{
x: '{{ score.event.date_begin | date:"d-m-Y" }}',
y: '{{ score.total }}'
},
{% endfor %}
];
var voluntary_routine_scrore = [
{% for score in score_routine2_list %}
{
x: '{{ score.event.date_begin | date:"d-m-Y" }}',
y: '{{ score.total }}'
},
{% endfor %}
];
var final_routine_scrore = [
{% for score in score_routine3_list %}
{
x: '{{ score.event.date_begin | date:"d-m-Y" }}',
y: '{{ score.total }}'
},
{% endfor %}
];
var score_values = {
datasets: [
{% if score_routine1_list %}
{
label: 'Q1R1',
cubicInterpolationMode: 'monotone',
backgroundColor: gradient_stroke_1,
borderColor: 'rgb(255, 99, 132)',
pointBackgroundColor: 'rgb(255, 99, 132)',
fill: true,
data: compulsory_routine_scrore
},
{% endif %}
{% if score_routine2_list %}
{
label: 'Q1R2',
cubicInterpolationMode: 'monotone',
backgroundColor: gradient_stroke_2,
borderColor: 'rgb(255, 159, 64)',
pointBackgroundColor: 'rgb(255, 159, 64)',
fill: true,
data: voluntary_routine_scrore
},
{% endif %}
{% if score_routine3_list %}
{
label: 'Q2R1',
cubicInterpolationMode: 'monotone',
backgroundColor: gradient_stroke_3,
borderColor: 'rgb(54, 162, 235)',
pointBackgroundColor: 'rgb(54, 162, 235)',
fill: true,
data: final_routine_scrore
},
{% endif %}
],
}
new Chart(ctx, {
type: 'line',
data: score_values,
options: {
scales: {
x: {
type: 'time',
display: true,
scaleLabel: {
display: true,
labelString: 'Date',
ticks: {
autoSkip: true,
source: 'data',
},
},
time: {
parser: timeFormat,
tooltipFormat: 'LL',
round: 'day',
},
},
},
plugins: {
legend: {
display: true,
position: 'bottom',
}
}
},
});
{% endif %}
{% if routine_one_done_list or routine_two_done_list %}
var ctx = document.getElementById('chart_routine_done').getContext('2d');
var border_color_pink = 'rgb(255, 99, 132)';
var gradient_stroke_pink = ctx.createLinearGradient(0, 230, 0, 50);
gradient_stroke_pink.addColorStop(1, 'rgba(255, 99, 132, 0.4)');
gradient_stroke_pink.addColorStop(0.75, 'rgba(255, 99, 132, 0.3)');
gradient_stroke_pink.addColorStop(0.5, 'rgba(255, 99, 132, 0.2)');
gradient_stroke_pink.addColorStop(0.25, 'rgba(255, 99, 132, 0)');
var border_color_orange = 'rgb(255, 159, 64)';
var gradient_stroke_orange = ctx.createLinearGradient(0, 230, 0, 50);
gradient_stroke_orange.addColorStop(1, 'rgba(255, 159, 64, 0.4)');
gradient_stroke_orange.addColorStop(0.75, 'rgba(255, 159, 64, 0.3)');
gradient_stroke_orange.addColorStop(0.5, 'rgba(255, 159, 64, 0.2)');
gradient_stroke_orange.addColorStop(0.25, 'rgba(255, 159, 64, 0)');
var border_color_green = 'rgb(75, 192, 192)';
var gradient_stroke_green = ctx.createLinearGradient(0, 230, 0, 50);
gradient_stroke_green.addColorStop(1, 'rgba(75, 192, 192, 0.4)');
gradient_stroke_green.addColorStop(0.75, 'rgba(75, 192, 192, 0.3)');
gradient_stroke_green.addColorStop(0.5, 'rgba(75, 192, 192, 0.2)');
gradient_stroke_green.addColorStop(0.25, 'rgba(75, 192, 192, 0)');
var border_color_blue = 'rgb(54, 162, 235)';
var gradient_stroke_blue = ctx.createLinearGradient(0, 230, 0, 50);
gradient_stroke_blue.addColorStop(1, 'rgba(54, 162, 235, 0.4)');
gradient_stroke_blue.addColorStop(0.75, 'rgba(54, 162, 235, 0.3)');
gradient_stroke_blue.addColorStop(0.5, 'rgba(54, 162, 235, 0.2)');
gradient_stroke_blue.addColorStop(0.25, 'rgba(54, 162, 235, 0)');
var border_color_yellow = 'rgb(255, 205, 86)';
var gradient_stroke_yellow = ctx.createLinearGradient(0, 230, 0, 50);
gradient_stroke_yellow.addColorStop(1, 'rgba(255, 205, 86, 0.4)');
gradient_stroke_yellow.addColorStop(0.75, 'rgba(255, 205, 86, 0.3)');
gradient_stroke_yellow.addColorStop(0.5, 'rgba(255, 205, 86, 0.2)');
gradient_stroke_yellow.addColorStop(0.25, 'rgba(255, 205, 86, 0)');
{% if routine_one_done_list %}
var routine_one_try = [
{% for routine_done in routine_one_done_list %}
{
x: '{{ routine_done.date | date:"d-m-Y" }}',
y: '{{ routine_done.number_of_try }}'
},
{% endfor %}
];
var routine_one_success = [
{% for routine_done in routine_one_done_list %}
{
x: '{{ routine_done.date | date:"d-m-Y" }}',
y: '{{ routine_done.number_of_successes }}'
},
{% endfor %}
];
{% endif %}
{% if routine_two_done_list %}
var routine_two_done = [
{% for routine_done in routine_two_done_list %}
{
x: '{{ routine_done.date | date:"d-m-Y" }}',
y: '{{ routine_done.number_of_try }}'
},
{% endfor %}
];
var routine_two_success = [
{% for routine_done in routine_two_done_list %}
{
x: '{{ routine_done.date | date:"d-m-Y" }}',
y: '{{ routine_done.number_of_successes }}'
},
{% endfor %}
];
{% endif %}
var score_values = {
datasets: [
{% if routine_one_done_list %}
{
label: 'Q1R1 Try',
cubicInterpolationMode: 'monotone',
backgroundColor: gradient_stroke_pink,
borderColor: border_color_pink,
pointBackgroundColor: border_color_pink,
fill: true,
data: routine_one_try,
},
{
label: 'Q1R1 success',
cubicInterpolationMode: 'monotone',
backgroundColor: gradient_stroke_orange,
borderColor: border_color_orange,
pointBackgroundColor: border_color_orange,
fill: true,
data: routine_one_success,
},
{% endif %}
{% if routine_two_done_list %}
{
label: 'Q1R2 Try',
cubicInterpolationMode: 'monotone',
backgroundColor: gradient_stroke_green,
borderColor: border_color_green,
pointBackgroundColor: border_color_green,
fill: true,
data: routine_two_done,
},
{
label: 'Q1R2 Success',
cubicInterpolationMode: 'monotone',
backgroundColor: gradient_stroke_blue,
borderColor: border_color_blue,
pointBackgroundColor: border_color_blue,
fill: true,
data: routine_two_success,
},
{% endif %}
],
}
new Chart(ctx, {
type: 'line',
data: score_values,
options: {
scales: {
x: {
type: 'time',
display: true,
scaleLabel: {
display: true,
labelString: 'Date',
ticks: {
autoSkip: true,
source: 'data',
},
},
time: {
parser: timeFormat,
tooltipFormat: 'LL',
round: 'day',
},
},
},
plugins: {
legend: {
display: true,
position: 'bottom',
}
}
},
});
{% endif %}
</script>