Allow players to retract their vote on a team. ()

Closes .
This commit is contained in:
Daniel Perelman 2016-09-18 01:03:20 -07:00 committed by GitHub
parent e8c21182b1
commit 6740b8e3fc
3 changed files with 32 additions and 23 deletions
avalon/avalon_game

View File

@ -31,10 +31,13 @@
<button type="submit" formaction="{% url 'retract_team' access_code=access_code player_secret=player_secret round_num=round_num vote_num=vote_num %}" class="button-cancel">Change team</button> <button type="submit" formaction="{% url 'retract_team' access_code=access_code player_secret=player_secret round_num=round_num vote_num=vote_num %}" class="button-cancel">Change team</button>
</div> </div>
{% endif %} {% endif %}
</form>
{% if player_vote %} {% if player_vote %}
<p>You are voting: {{ player_vote }}</p> <p>You are voting: {{ player_vote }}</p>
<div class="button-container">
<button type="submit" formaction="{% url 'vote' access_code=access_code player_secret=player_secret round_num=round_num vote_num=vote_num vote='cancel' %}" class="button-cancel-vote">Retract vote</button>
</div>
</form>
{% endif %} {% endif %}
{% endblock %} {% endblock %}

View File

@ -17,7 +17,7 @@ urlpatterns = [
url(r'^ready/$', views.ready, name='ready'), url(r'^ready/$', views.ready, name='ready'),
url(r'^cancel_game/$', views.cancel_game, name='cancel_game'), url(r'^cancel_game/$', views.cancel_game, name='cancel_game'),
url(r'^(?P<round_num>[1-5])/(?P<vote_num>[1-5])/', include([ url(r'^(?P<round_num>[1-5])/(?P<vote_num>[1-5])/', include([
url(r'^vote/(?P<vote>(approve|reject))/$', views.vote, name='vote'), url(r'^vote/(?P<vote>(approve|reject|cancel))/$', views.vote, name='vote'),
url(r'^choose/(?P<who>[0-9])/$', views.choose, name='choose'), url(r'^choose/(?P<who>[0-9])/$', views.choose, name='choose'),
url(r'^unchoose/(?P<who>[0-9])/$', views.unchoose, name='unchoose'), url(r'^unchoose/(?P<who>[0-9])/$', views.unchoose, name='unchoose'),
url(r'^finalize_team/$', views.finalize_team, name='finalize_team'), url(r'^finalize_team/$', views.finalize_team, name='finalize_team'),

View File

@ -483,28 +483,34 @@ def vote(request, game, player, round_num, vote_num, vote):
if vote_round.vote_status == VoteRound.VOTE_STATUS_VOTING\ if vote_round.vote_status == VoteRound.VOTE_STATUS_VOTING\
and vote_round.game_round.round_num == round_num\ and vote_round.game_round.round_num == round_num\
and vote_round.vote_num == vote_num: and vote_round.vote_num == vote_num:
accept = vote == "approve" if vote == "cancel":
vote_round.playervote_set\ try:
.update_or_create(defaults={'accept': accept}, vote_round.playervote_set.get(player=player).delete()
player=player) except PlayerVote.DoesNotExist:
team_approved = vote_round.team_approved() pass
if team_approved is not None: else:
# All players voted, voting round is over. accept = vote == "approve"
vote_round.vote_status = VoteRound.VOTE_STATUS_VOTED vote_round.playervote_set\
vote_round.save() .update_or_create(defaults={'accept': accept},
if team_approved: player=player)
# Team was approved team_approved = vote_round.team_approved()
game.game_phase = Game.GAME_PHASE_MISSION if team_approved is not None:
else: # All players voted, voting round is over.
# Team was rejected vote_round.vote_status = VoteRound.VOTE_STATUS_VOTED
if vote_round.is_final_vote(): vote_round.save()
game.game_phase = Game.GAME_PHASE_END if team_approved:
# Team was approved
game.game_phase = Game.GAME_PHASE_MISSION
else: else:
game.game_phase = Game.GAME_PHASE_PICK # Team was rejected
VoteRound.objects\ if vote_round.is_final_vote():
.create(game_round=vote_round.game_round, game.game_phase = Game.GAME_PHASE_END
vote_num=vote_round.vote_num+1, else:
leader=vote_round.next_leader()) game.game_phase = Game.GAME_PHASE_PICK
VoteRound.objects\
.create(game_round=vote_round.game_round,
vote_num=vote_round.vote_num+1,
leader=vote_round.next_leader())
game.save() game.save()
return redirect('game', access_code=game.access_code, return redirect('game', access_code=game.access_code,