mirror of
				https://gitlab.com/animath/si/plateforme.git
				synced 2025-11-04 09:02:11 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			359 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			359 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
{% load i18n %}
 | 
						|
 | 
						|
<div  id="banner-not-started-{{ tournament.id }}" class="alert alert-warning{% if tournament.draw %} d-none{% endif %}">
 | 
						|
    {# This div is visible iff the draw is not started. #}
 | 
						|
    {% trans "The draw has not started yet." %}
 | 
						|
 | 
						|
    {% if user.registration.is_volunteer %}
 | 
						|
        {# Volunteers have a form to start the draw #}
 | 
						|
        <form id="format-form-{{ tournament.id }}">
 | 
						|
            <div class="col-md-3">
 | 
						|
                <div class="input-group">
 | 
						|
                    <label class="input-group-text" for="format-{{ tournament.id }}">
 | 
						|
                        {% trans "Configuration:" %}
 | 
						|
                    </label>
 | 
						|
                    {# The configuration is the size of pools per pool, for example 3+3+3 #}
 | 
						|
                    <input type="text" class="form-control" id="format-{{ tournament.id }}"
 | 
						|
                           pattern="^[345](\+[345])*$"
 | 
						|
                           placeholder="{{ tournament.best_format }}"
 | 
						|
                           value="{{ tournament.best_format }}">
 | 
						|
                    <button class="btn btn-success input-group-btn">{% trans "Start!" %}</button>
 | 
						|
                </div>
 | 
						|
            </div>
 | 
						|
        </form>
 | 
						|
    {% endif %}
 | 
						|
</div>
 | 
						|
 | 
						|
<div id="draw-content-{{ tournament.id }}" class="{% if not tournament.draw %}d-none{% endif %}">
 | 
						|
    {# Displayed only if the tournament has started #}
 | 
						|
    <div class="container">
 | 
						|
        <div class="card col-md-12 my-3">
 | 
						|
            <div class="card-header">
 | 
						|
                <h2>{% trans "Last dices" %}</h2>
 | 
						|
            </div>
 | 
						|
            <div class="card-body">
 | 
						|
                <div id="dices-{{ tournament.id }}" class="row">
 | 
						|
                    {# Display last dices of all teams #}
 | 
						|
                    {% for td in tournament.draw.current_round.team_draws %}
 | 
						|
                        <div class="col-md-1" style="order: {{ forloop.counter }};">
 | 
						|
                            <div id="dice-{{ tournament.id }}-{{ td.participation.team.trigram }}"
 | 
						|
                                 class="badge rounded-pill text-bg-{% if td.last_dice %}success{% else %}warning{% endif %}"
 | 
						|
                                 {% if request.user.registration.is_volunteer %}
 | 
						|
                                 {# Volunteers can click on dices to launch the dice of a team #}
 | 
						|
                                 onclick="drawDice({{ tournament.id }}, '{{ td.participation.team.trigram }}')"
 | 
						|
                                 {% endif %}>
 | 
						|
                                {{ td.participation.team.trigram }} 🎲 {{ td.last_dice|default:'??' }}
 | 
						|
                            </div>
 | 
						|
                        </div>
 | 
						|
                    {% endfor %}
 | 
						|
                </div>
 | 
						|
            </div>
 | 
						|
        </div>
 | 
						|
        <div class="row">
 | 
						|
            <div class="col-md-5 my-3">
 | 
						|
                <div class="card">
 | 
						|
                    <div class="card-header">
 | 
						|
                        Recap
 | 
						|
                        {% if user.registration.is_volunteer %}
 | 
						|
                            <button id="cancel-last-step-{{ tournament.id }}"
 | 
						|
                                    class="badge rounded-pill text-bg-warning"
 | 
						|
                                    onclick="cancelLastStep({{ tournament.id }})">
 | 
						|
                                🔙 {% trans "Cancel last step" %}
 | 
						|
                            </button>
 | 
						|
                        {% endif %}
 | 
						|
                    </div>
 | 
						|
                    <div class="card-body">
 | 
						|
                        <div id="recap-{{ tournament.id }}-round-list" class="row">
 | 
						|
                            {% for round in tournament.draw.round_set.all %}
 | 
						|
                                {# For each round, add a recap of drawn problems #}
 | 
						|
                                <div id="recap-{{ tournament.id }}-round-{{ round.number }}"
 | 
						|
                                     class="col-md-6 px-3 py-3 {% if tournament.draw.current_round == round %} text-bg-secondary{% endif %}"
 | 
						|
                                     data-tournament="{{ tournament.id }}">
 | 
						|
                                    <strong>{{ round }}</strong>
 | 
						|
                                    <ul id="recap-{{ tournament.id }}-round-{{ round.number }}-pool-list"
 | 
						|
                                        class="list-group list-group-flush">
 | 
						|
                                        {% for pool in round.pool_set.all %}
 | 
						|
                                            {# Add one item per pool #}
 | 
						|
                                            <li id="recap-{{ tournament.id }}-round-{{ round.number }}-pool-{{ pool.get_letter_display }}"
 | 
						|
                                                class="list-group-item px-3 py-3 {% if tournament.draw.current_round.current_pool == pool %} list-group-item-success{% endif %}"
 | 
						|
                                                data-tournament="{{ tournament.id }}">
 | 
						|
                                                <strong>{{ pool }}</strong>
 | 
						|
                                                <ul id="recap-{{ tournament.id }}-round-{{ round.number }}-pool-{{ pool.get_letter_display }}-team-list"
 | 
						|
                                                    class="list-group list-group-flush">
 | 
						|
                                                    {% for td in pool.team_draws.all %}
 | 
						|
                                                        {# Add teams of the pool #}
 | 
						|
                                                        <li id="recap-{{ tournament.id }}-round-{{ round.number }}-team-{{ td.participation.team.trigram }}"
 | 
						|
                                                            class="list-group-item{% if tournament.draw.current_round.current_pool.current_team == td %} list-group-item-info{% endif %}"
 | 
						|
                                                            data-tournament="{{ tournament.id }}">
 | 
						|
                                                            {# Add the accepted problem, if existing #}
 | 
						|
                                                            <div id="recap-{{ tournament.id }}-round-{{ round.number }}-team-{{ td.participation.team.trigram }}-accepted"
 | 
						|
                                                                 class="badge rounded-pill text-bg-{% if td.accepted %}success{% else %}warning{% endif %}">
 | 
						|
                                                                {{ td.participation.team.trigram }} 📃 {{ td.accepted|default:'?' }}
 | 
						|
                                                            </div>
 | 
						|
                                                            {# Add the rejected problems #}
 | 
						|
                                                            <div id="recap-{{ tournament.id }}-round-{{ round.number }}-team-{{ td.participation.team.trigram }}-rejected"
 | 
						|
                                                                 class="badge rounded-pill text-bg-danger">
 | 
						|
                                                                🗑️ {{ td.rejected|join:', ' }}
 | 
						|
                                                            </div>
 | 
						|
                                                            {% if td.penalty %}
 | 
						|
                                                                {# If needed, add the penalty of the team #}
 | 
						|
                                                                <div id="recap-{{ tournament.id }}-round-{{ round.number }}-team-{{ td.participation.team.trigram }}-penalty"
 | 
						|
                                                                     class="badge rounded-pill text-bg-info">
 | 
						|
                                                                    ❌ {{ td.penalty }}
 | 
						|
                                                                </div>
 | 
						|
                                                            {% endif %}
 | 
						|
                                                        </li>
 | 
						|
                                                    {% endfor %}
 | 
						|
                                                </ul>
 | 
						|
                                            </li>
 | 
						|
                                        {% endfor %}
 | 
						|
                                    </ul>
 | 
						|
                                </div>
 | 
						|
                            {% endfor %}
 | 
						|
                        </div>
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
            </div>
 | 
						|
            <div class="col-md-7 my-3">
 | 
						|
                <div class="card">
 | 
						|
                    <div class="card-body">
 | 
						|
                        <div id="messages-{{ tournament.id }}" class="alert alert-info">
 | 
						|
                            {# Display the insctructions of the draw to the teams #}
 | 
						|
                            {{ tournament.draw.information|safe }}
 | 
						|
                        </div>
 | 
						|
 | 
						|
                        <div id="launch-dice-{{ tournament.id }}"
 | 
						|
                             {% if tournament.draw.get_state != 'DICE_SELECT_POULES' and tournament.draw.get_state != 'DICE_ORDER_POULE' %}class="d-none"
 | 
						|
                             {% else %}{% if not user.registration.is_volunteer and user.registration.team.trigram not in tournament.draw.current_round.current_pool.trigrams %}class="d-none"{% endif %}{% endif %}>
 | 
						|
                            {# Display the dice interface if this is the time for it #}
 | 
						|
                            {# ie. if we are in the state where teams must launch a dice to choose the passage order or the choice order and we are in a team in the good pool, or a volunteer #}
 | 
						|
                            <div class="text-center">
 | 
						|
                                <button class="btn btn-lg" style="font-size: 100pt" onclick="drawDice({{ tournament.id }})">
 | 
						|
                                    🎲
 | 
						|
                                </button>
 | 
						|
                            </div>
 | 
						|
                            <h2 class="text-center">
 | 
						|
                                {% trans "Launch dice" %}
 | 
						|
                            </h2>
 | 
						|
                        </div>
 | 
						|
 | 
						|
                        <div id="draw-problem-{{ tournament.id }}"
 | 
						|
                                {% if tournament.draw.get_state != 'WAITING_DRAW_PROBLEM' %}class="d-none"
 | 
						|
                                {% else %}{% if user.registration.team.participation != tournament.draw.current_round.current_pool.current_team.participation and not user.registration.is_volunteer %}class="d-none"{% endif %}{% endif %}>
 | 
						|
                            {# Display the box only if needed #}
 | 
						|
                            <div class="text-center">
 | 
						|
                                <button class="btn btn-lg" style="font-size: 100pt" onclick="drawProblem({{ tournament.id }})">
 | 
						|
                                    🗳️
 | 
						|
                                </button>
 | 
						|
                            </div>
 | 
						|
                            <h2 class="text-center">
 | 
						|
                                {% trans "Draw a problem" %}
 | 
						|
                            </h2>
 | 
						|
                        </div>
 | 
						|
 | 
						|
                        <div id="buttons-{{ tournament.id }}"
 | 
						|
                             {% if tournament.draw.get_state != 'WAITING_CHOOSE_PROBLEM' %}class="d-none"
 | 
						|
                             {% else %}{% if user.registration.team.participation != tournament.draw.current_round.current_pool.current_team.participation and not user.registration.is_volunteer %}class="d-none"{% endif %}{% endif %}>
 | 
						|
                            {# Display buttons if a problem has been drawn and we are waiting for its acceptation or reject #}
 | 
						|
                            <div class="d-grid">
 | 
						|
                                <div class="btn-group">
 | 
						|
                                    <button class="btn btn-success" onclick="acceptProblem({{ tournament.id }})">
 | 
						|
                                        {% trans "Accept" %}
 | 
						|
                                    </button>
 | 
						|
                                    <button class="btn btn-danger" onclick="rejectProblem({{ tournament.id }})">
 | 
						|
                                        {% trans "Decline" %}
 | 
						|
                                    </button>
 | 
						|
                                </div>
 | 
						|
                             </div>
 | 
						|
                        </div>
 | 
						|
                    </div>
 | 
						|
                    {% if user.registration.is_volunteer %}
 | 
						|
                        {# Volunteers can export the draw if possible #}
 | 
						|
                        <div id="export-{{ tournament.id }}"
 | 
						|
                             class="card-footer text-center{% if not tournament.draw.exportable %} d-none{% endif %}">
 | 
						|
                            <button class="btn btn-info text-center" onclick="exportDraw({{ tournament.id }})">
 | 
						|
                                📁 {% trans "Export" %}
 | 
						|
                            </button>
 | 
						|
                        </div>
 | 
						|
                        {% if tournament.final %}
 | 
						|
                            {# Volunteers can continue the second round for the final tournament #}
 | 
						|
                            <div id="continue-{{ tournament.id }}"
 | 
						|
                                 class="card-footer text-center{% if tournament.draw.get_state != 'WAITING_FINAL' %} d-none{% endif %}">
 | 
						|
                                <button class="btn btn-success text-center" onclick="continueFinal({{ tournament.id }})">
 | 
						|
                                    ➡️ {% trans "Continue draw" %}
 | 
						|
                                </button>
 | 
						|
                            </div>
 | 
						|
                        {% endif %}
 | 
						|
                    {% endif %}
 | 
						|
                </div>
 | 
						|
            </div>
 | 
						|
        </div>
 | 
						|
 | 
						|
        <div id="tables-{{ tournament.id }}" class="row">
 | 
						|
            {# Display tables with the advancement of the draw below #}
 | 
						|
            {% for round in tournament.draw.round_set.all %}
 | 
						|
                <div class="card col-md-6">
 | 
						|
                    <div class="card-header">
 | 
						|
                        <h2>
 | 
						|
                            {{ round }}
 | 
						|
                        </h2>
 | 
						|
                    </div>
 | 
						|
                    <div id="tables-{{ tournament.id }}-round-{{ round.number }}" class="card-body d-flex flex-wrap">
 | 
						|
                        {% for pool in round.pool_set.all %}
 | 
						|
                            {# Draw one table per pool #}
 | 
						|
                            {% if pool.teamdraw_set.count %}
 | 
						|
                                <div class="card w-100 my-3 order-{{ pool.letter }}">
 | 
						|
                                    <div class="card-header">
 | 
						|
                                        <h3>
 | 
						|
                                            {{ pool }}
 | 
						|
                                        </h3>
 | 
						|
                                    </div>
 | 
						|
                                    <div class="card-body">
 | 
						|
                                        <table id="table-{{ tournament.id }}-{{ round.number }}-{{ pool.get_letter_display }}" class="table table-striped">
 | 
						|
                                            <thead>
 | 
						|
                                                {# One column per phase #}
 | 
						|
                                                <tr>
 | 
						|
                                                    <th class="text-center" rowspan="{% if pool.size == 5 %}3{% else %}2{% endif %}">{% trans "team"|capfirst %}</th>
 | 
						|
                                                    <th class="text-center"{% if pool.size == 5 %} colspan="2"{% endif %}>Phase 1</th>
 | 
						|
                                                    <th class="text-center"{% if pool.size == 5 %} colspan="2"{% endif %}>Phase 2</th>
 | 
						|
                                                    <th class="text-center">Phase 3</th>
 | 
						|
                                                    {% if pool.size == 4 %}
 | 
						|
                                                        <th class="text-center">Phase 4</th>
 | 
						|
                                                    {% endif %}
 | 
						|
                                                </tr>
 | 
						|
                                                {% if pool.size == 5 %}
 | 
						|
                                                    <tr>
 | 
						|
                                                        <th class="text-center">{% trans "Room" %} 1</th>
 | 
						|
                                                        <th class="text-center">{% trans "Room" %} 2</th>
 | 
						|
                                                        <th class="text-center">{% trans "Room" %} 1</th>
 | 
						|
                                                        <th class="text-center">{% trans "Room" %} 2</th>
 | 
						|
                                                        <th class="text-center">{% trans "Room" %} 1</th>
 | 
						|
                                                    </tr>
 | 
						|
                                                {% endif %}
 | 
						|
                                                <tr>
 | 
						|
                                                    {% for td in pool.team_draws.all %}
 | 
						|
                                                        <th class="text-center">
 | 
						|
                                                            Pb.
 | 
						|
                                                            <span id="table-{{ tournament.id }}-round-{{ round.number }}-problem-{{ td.participation.team.trigram }}">{{ td.accepted|default:"?" }}</span>
 | 
						|
                                                        </th>
 | 
						|
                                                    {% endfor %}
 | 
						|
                                                </tr>
 | 
						|
                                            </thead>
 | 
						|
                                            <tbody>
 | 
						|
                                                {# Draw the order regarding the pool size #}
 | 
						|
                                                {% for td in pool.team_draws %}
 | 
						|
                                                    <tr>
 | 
						|
                                                        <td class="text-center">{{ td.participation.team.trigram }}</td>
 | 
						|
                                                        {% if pool.size == 3 %}
 | 
						|
                                                            {% if forloop.counter == 1 %}
 | 
						|
                                                                <td class="text-center">Déf</td>
 | 
						|
                                                                <td class="text-center">Rap</td>
 | 
						|
                                                                <td class="text-center">Opp</td>
 | 
						|
                                                            {% elif forloop.counter == 2 %}
 | 
						|
                                                                <td class="text-center">Opp</td>
 | 
						|
                                                                <td class="text-center">Déf</td>
 | 
						|
                                                                <td class="text-center">Rap</td>
 | 
						|
                                                            {% elif forloop.counter == 3 %}
 | 
						|
                                                                <td class="text-center">Rap</td>
 | 
						|
                                                                <td class="text-center">Opp</td>
 | 
						|
                                                                <td class="text-center">Déf</td>
 | 
						|
                                                            {% endif %}
 | 
						|
                                                        {% elif pool.size == 4 %}
 | 
						|
                                                            {% if forloop.counter == 1 %}
 | 
						|
                                                                <td class="text-center">Déf</td>
 | 
						|
                                                                <td></td>
 | 
						|
                                                                <td class="text-center">Rap</td>
 | 
						|
                                                                <td class="text-center">Opp</td>
 | 
						|
                                                            {% elif forloop.counter == 2 %}
 | 
						|
                                                                <td class="text-center">Opp</td>
 | 
						|
                                                                <td class="text-center">Déf</td>
 | 
						|
                                                                <td></td>
 | 
						|
                                                                <td class="text-center">Rap</td>
 | 
						|
                                                            {% elif forloop.counter == 3 %}
 | 
						|
                                                                <td class="text-center">Rap</td>
 | 
						|
                                                                <td class="text-center">Opp</td>
 | 
						|
                                                                <td class="text-center">Déf</td>
 | 
						|
                                                                <td></td>
 | 
						|
                                                            {% elif forloop.counter == 4 %}
 | 
						|
                                                                <td></td>
 | 
						|
                                                                <td class="text-center">Rap</td>
 | 
						|
                                                                <td class="text-center">Opp</td>
 | 
						|
                                                                <td class="text-center">Déf</td>
 | 
						|
                                                            {% endif %}
 | 
						|
                                                        {% elif pool.size == 5 %}
 | 
						|
                                                            {% if forloop.counter == 1 %}
 | 
						|
                                                                <td class="text-center">Déf</td>
 | 
						|
                                                                <td></td>
 | 
						|
                                                                <td class="text-center">Rap</td>
 | 
						|
                                                                <td class="text-center">Opp</td>
 | 
						|
                                                                <td></td>
 | 
						|
                                                            {% elif forloop.counter == 2 %}
 | 
						|
                                                                <td></td>
 | 
						|
                                                                <td class="text-center">Déf</td>
 | 
						|
                                                                <td></td>
 | 
						|
                                                                <td class="text-center">Rap</td>
 | 
						|
                                                                <td class="text-center">Opp</td>
 | 
						|
                                                            {% elif forloop.counter == 3 %}
 | 
						|
                                                                <td class="text-center">Opp</td>
 | 
						|
                                                                <td></td>
 | 
						|
                                                                <td class="text-center">Déf</td>
 | 
						|
                                                                <td></td>
 | 
						|
                                                                <td class="text-center">Rap</td>
 | 
						|
                                                            {% elif forloop.counter == 4 %}
 | 
						|
                                                                <td class="text-center">Rap</td>
 | 
						|
                                                                <td class="text-center">Opp</td>
 | 
						|
                                                                <td></td>
 | 
						|
                                                                <td class="text-center">Déf</td>
 | 
						|
                                                                <td></td>
 | 
						|
                                                            {% elif forloop.counter == 5 %}
 | 
						|
                                                                <td></td>
 | 
						|
                                                                <td class="text-center">Rap</td>
 | 
						|
                                                                <td class="text-center">Opp</td>
 | 
						|
                                                                <td></td>
 | 
						|
                                                                <td class="text-center">Déf</td>
 | 
						|
                                                            {% endif %}
 | 
						|
                                                        {% endif %}
 | 
						|
                                                    </tr>
 | 
						|
                                                {% endfor %}
 | 
						|
                                            </tbody>
 | 
						|
                                        </table>
 | 
						|
                                    </div>
 | 
						|
                                </div>
 | 
						|
                            {% endif %}
 | 
						|
                        {% endfor %}
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
            {% endfor %}
 | 
						|
        </div>
 | 
						|
    </div>
 | 
						|
 | 
						|
    {% if user.registration.is_volunteer %}
 | 
						|
        {# Volunteers can click on this button to abort the draw #}
 | 
						|
        <div class="text-center mt-3">
 | 
						|
            <button id="abort-{{ tournament.id }}" class="badge rounded-pill text-bg-danger" data-bs-toggle="modal" data-bs-target="#abort{{ tournament.id }}Modal">
 | 
						|
                {% trans "Abort" %}
 | 
						|
            </button>
 | 
						|
        </div>
 | 
						|
    {% endif %}
 | 
						|
</div>
 | 
						|
 | 
						|
<div id="abort{{ tournament.id }}Modal" class="modal fade" tabindex="-1" role="dialog">
 | 
						|
    <div class="modal-dialog" role="document">
 | 
						|
        <div class="modal-content">
 | 
						|
            <div class="modal-header">
 | 
						|
                <h5 class="modal-title">{% trans "Are you sure?" %}</h5>
 | 
						|
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
 | 
						|
            </div>
 | 
						|
            <div class="modal-body">
 | 
						|
                {% trans "This will reset the draw from the beginning." %}
 | 
						|
                {% trans "This operation is irreversible." %}
 | 
						|
                {% trans "Are you sure you want to abort this draw?" %}
 | 
						|
            </div>
 | 
						|
            <div class="modal-footer">
 | 
						|
                <button type="submit" class="btn btn-danger" data-bs-dismiss="modal" onclick="abortDraw({{ tournament.id }})">{% trans "Abort" %}</button>
 | 
						|
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{% trans "Close" %}</button>
 | 
						|
            </div>
 | 
						|
        </div>
 | 
						|
    </div>
 | 
						|
</div>
 |