2022-11-06 14:07:16 +01:00
|
|
|
from django.contrib import messages
|
2022-11-02 23:52:28 +01:00
|
|
|
from django.contrib.auth.decorators import login_required
|
2022-11-03 00:02:28 +01:00
|
|
|
from django.shortcuts import get_object_or_404, redirect, render
|
2023-01-17 10:55:10 +01:00
|
|
|
from django.views.decorators.http import require_GET, require_http_methods
|
2022-11-02 23:52:28 +01:00
|
|
|
|
2022-11-06 14:42:29 +01:00
|
|
|
from character.models import Character, HarmfulState
|
2023-01-16 18:02:14 +01:00
|
|
|
from party.forms import BattleEffectForm, PartyForm
|
2023-01-17 11:11:07 +01:00
|
|
|
from party.models import BattleEffect, Party
|
2022-11-02 23:52:28 +01:00
|
|
|
|
|
|
|
|
2023-01-17 10:55:10 +01:00
|
|
|
@require_GET
|
2022-11-02 23:52:28 +01:00
|
|
|
@login_required
|
|
|
|
def parties_list(request):
|
|
|
|
context = {
|
|
|
|
"managed_parties": Party.objects.managed_by(request.user),
|
2022-11-06 14:30:17 +01:00
|
|
|
"played_parties": Party.objects.played_by(request.user).distinct(),
|
2022-11-06 15:35:32 +01:00
|
|
|
"invited_to": Party.objects.invited_to(request.user).distinct(),
|
2022-11-02 23:52:28 +01:00
|
|
|
}
|
|
|
|
return render(request, "party/parties_list.html", context)
|
|
|
|
|
|
|
|
|
2023-01-17 10:55:10 +01:00
|
|
|
@require_http_methods(["GET", "POST"])
|
2022-11-02 23:52:28 +01:00
|
|
|
@login_required
|
|
|
|
def party_create(request):
|
|
|
|
if request.method == "GET":
|
|
|
|
form = PartyForm()
|
|
|
|
else:
|
|
|
|
form = PartyForm(request.POST)
|
|
|
|
if form.is_valid():
|
|
|
|
party = form.save(commit=False)
|
|
|
|
party.game_master = request.user
|
|
|
|
party.save()
|
|
|
|
form.save_m2m()
|
|
|
|
return redirect("party:list")
|
|
|
|
context = {"form": form}
|
2022-11-06 14:30:17 +01:00
|
|
|
return render(request, "party/party_form.html", context)
|
2022-11-03 00:02:28 +01:00
|
|
|
|
|
|
|
|
2023-01-17 10:55:10 +01:00
|
|
|
@require_GET
|
2022-11-03 00:02:28 +01:00
|
|
|
@login_required
|
|
|
|
def party_details(request, pk):
|
|
|
|
party = get_object_or_404(Party.objects.related_to(request.user), pk=pk)
|
2022-11-06 14:42:29 +01:00
|
|
|
context = {
|
|
|
|
"party": party,
|
|
|
|
"all_states": HarmfulState.objects.all(),
|
|
|
|
}
|
2022-11-03 00:02:28 +01:00
|
|
|
return render(request, "party/party_details.html", context)
|
2022-11-06 14:07:16 +01:00
|
|
|
|
|
|
|
|
2023-01-17 10:55:10 +01:00
|
|
|
@require_http_methods(["GET", "POST"])
|
2022-11-06 14:07:16 +01:00
|
|
|
@login_required
|
|
|
|
def party_delete(request, pk):
|
|
|
|
party = get_object_or_404(Party.objects.managed_by(request.user), pk=pk)
|
|
|
|
context = {"party": party}
|
|
|
|
if request.method == "POST":
|
|
|
|
name = party.name
|
|
|
|
party.delete()
|
|
|
|
messages.success(request, f"Le groupe {name} a été supprimé.")
|
|
|
|
return redirect("party:list")
|
|
|
|
return render(request, "party/party_delete.html", context)
|
2022-11-06 14:13:30 +01:00
|
|
|
|
|
|
|
|
2023-01-17 10:55:10 +01:00
|
|
|
@require_http_methods(["GET", "POST"])
|
2022-11-19 10:23:01 +01:00
|
|
|
@login_required
|
|
|
|
def party_reset_stats(request, pk):
|
|
|
|
party = get_object_or_404(Party.objects.managed_by(request.user), pk=pk)
|
|
|
|
context = {"party": party}
|
|
|
|
if request.method == "POST":
|
|
|
|
name = party.name
|
|
|
|
party.reset_stats()
|
|
|
|
message = f"Les stats de tous les membres de {name} ont été réinitialisées."
|
|
|
|
messages.success(request, message)
|
|
|
|
return redirect(party)
|
|
|
|
return render(request, "party/party_reset_stats.html", context)
|
|
|
|
|
|
|
|
|
2023-01-17 10:55:10 +01:00
|
|
|
@require_http_methods(["GET", "POST"])
|
2023-01-16 18:02:14 +01:00
|
|
|
@login_required
|
|
|
|
def party_add_effect(request, pk):
|
|
|
|
party = get_object_or_404(Party.objects.played_or_mastered_by(request.user), pk=pk)
|
|
|
|
context = {"party": party}
|
|
|
|
if request.method == "GET":
|
|
|
|
form = BattleEffectForm()
|
|
|
|
else:
|
|
|
|
form = BattleEffectForm(request.POST or None)
|
|
|
|
if form.is_valid():
|
|
|
|
effect = form.save(commit=False)
|
|
|
|
effect.party = party
|
|
|
|
effect.created_by = request.user
|
|
|
|
effect.save()
|
|
|
|
return render(request, "party/snippets/effects.html", context)
|
|
|
|
context["form"] = form
|
|
|
|
return render(request, "party/snippets/add_effect_form.html", context)
|
|
|
|
|
|
|
|
|
2023-01-17 10:55:10 +01:00
|
|
|
@require_GET
|
|
|
|
@login_required
|
|
|
|
def party_increase_rounds(request, pk):
|
2024-03-05 19:00:39 +01:00
|
|
|
party = get_object_or_404(Party.objects.played_or_mastered_by(request.user), pk=pk)
|
2023-01-17 10:55:10 +01:00
|
|
|
party.effects.increase_rounds()
|
|
|
|
return render(request, "party/snippets/effects.html", {"party": party})
|
|
|
|
|
|
|
|
|
|
|
|
@require_GET
|
|
|
|
@login_required
|
|
|
|
def party_decrease_rounds(request, pk):
|
2024-03-05 19:00:39 +01:00
|
|
|
party = get_object_or_404(Party.objects.played_or_mastered_by(request.user), pk=pk)
|
2023-01-17 10:55:10 +01:00
|
|
|
party.effects.decrease_rounds()
|
|
|
|
return render(request, "party/snippets/effects.html", {"party": party})
|
|
|
|
|
|
|
|
|
2023-01-17 11:11:07 +01:00
|
|
|
@require_GET
|
|
|
|
@login_required
|
|
|
|
def party_delete_effect(request, pk, effect_pk):
|
2024-03-05 19:00:39 +01:00
|
|
|
party = get_object_or_404(Party.objects.played_or_mastered_by(request.user), pk=pk)
|
2023-01-17 11:11:07 +01:00
|
|
|
BattleEffect.objects.filter(pk=effect_pk).delete()
|
|
|
|
return render(request, "party/snippets/effects.html", {"party": party})
|
|
|
|
|
|
|
|
|
2023-01-17 10:55:10 +01:00
|
|
|
@require_http_methods(["GET", "POST"])
|
2022-11-06 14:30:17 +01:00
|
|
|
@login_required
|
|
|
|
def party_change(request, pk):
|
|
|
|
party = get_object_or_404(Party.objects.managed_by(request.user), pk=pk)
|
|
|
|
context = {"party": party}
|
|
|
|
if request.method == "GET":
|
|
|
|
form = PartyForm(instance=party)
|
|
|
|
else:
|
|
|
|
form = PartyForm(request.POST or None, instance=party)
|
|
|
|
if form.is_valid():
|
|
|
|
form.save()
|
|
|
|
messages.success(request, "Groupe modifié.")
|
|
|
|
return redirect("party:list")
|
|
|
|
context["form"] = form
|
|
|
|
return render(request, "party/party_form.html", context)
|
|
|
|
|
|
|
|
|
2023-01-17 10:55:10 +01:00
|
|
|
@require_http_methods(["GET", "POST"])
|
2022-11-06 14:13:30 +01:00
|
|
|
@login_required
|
|
|
|
def party_leave(request, pk, character_pk):
|
2022-11-06 15:35:32 +01:00
|
|
|
party = get_object_or_404(Party.objects.played_by(request.user).distinct(), pk=pk)
|
2022-11-06 14:13:30 +01:00
|
|
|
character = get_object_or_404(
|
2023-02-28 12:34:45 +01:00
|
|
|
Character.objects.owned_by(request.user),
|
|
|
|
pk=character_pk,
|
2022-11-06 14:13:30 +01:00
|
|
|
)
|
|
|
|
context = {"party": party, "character": character}
|
|
|
|
if request.method == "POST":
|
|
|
|
character.parties.remove(party)
|
|
|
|
messages.success(request, f"{character} a quitté le groupe {party}.")
|
|
|
|
return redirect("party:list")
|
|
|
|
return render(request, "party/party_leave.html", context)
|
2022-11-06 15:35:32 +01:00
|
|
|
|
|
|
|
|
2023-01-17 10:55:10 +01:00
|
|
|
@require_GET
|
2022-11-06 15:35:32 +01:00
|
|
|
@login_required
|
|
|
|
def party_join(request, pk, character_pk):
|
|
|
|
party = get_object_or_404(Party.objects.invited_to(request.user).distinct(), pk=pk)
|
|
|
|
character = get_object_or_404(
|
2023-02-28 12:34:45 +01:00
|
|
|
Character.objects.owned_by(request.user),
|
|
|
|
pk=character_pk,
|
2022-11-06 15:35:32 +01:00
|
|
|
)
|
|
|
|
party.characters.add(character)
|
|
|
|
party.invited_characters.remove(character)
|
|
|
|
messages.success(request, f"{character} a rejoint le groupe {party}.")
|
|
|
|
return redirect("party:list")
|
|
|
|
|
|
|
|
|
2023-01-17 10:55:10 +01:00
|
|
|
@require_GET
|
2022-11-06 15:35:32 +01:00
|
|
|
@login_required
|
|
|
|
def party_refuse(request, pk, character_pk):
|
|
|
|
party = get_object_or_404(Party.objects.invited_to(request.user).distinct(), pk=pk)
|
|
|
|
character = get_object_or_404(
|
2023-02-28 12:34:45 +01:00
|
|
|
Character.objects.owned_by(request.user),
|
|
|
|
pk=character_pk,
|
2022-11-06 15:35:32 +01:00
|
|
|
)
|
|
|
|
party.invited_characters.remove(character)
|
|
|
|
messages.success(request, f"{character} a refusé l'invitation au groupe {party}.")
|
|
|
|
return redirect("party:list")
|