6 changed files with 180 additions and 11 deletions
@ -1,7 +1,8 @@
@@ -1,7 +1,8 @@
|
||||
from django.contrib import admin |
||||
|
||||
from .models import Zone, Distance |
||||
from .models import Zone, Distance, Equipe, Challenge |
||||
|
||||
admin.site.register(Zone) |
||||
admin.site.register(Distance) |
||||
|
||||
admin.site.register(Equipe) |
||||
admin.site.register(Challenge) |
||||
|
||||
@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
|
||||
from django.apps import AppConfig |
||||
|
||||
|
||||
class AppConfig(AppConfig): |
||||
default_auto_field = 'django.db.models.BigAutoField' |
||||
name = 'app' |
||||
nb_challenges = 5 |
||||
|
||||
@ -1,3 +1,128 @@
@@ -1,3 +1,128 @@
|
||||
from django.shortcuts import render |
||||
import random |
||||
from django.db.models import Max; |
||||
from django.http import HttpResponse |
||||
from django.template import loader |
||||
from django.contrib import admin |
||||
from django.conf import settings |
||||
from django.shortcuts import redirect |
||||
from django.contrib import messages |
||||
from .forms import LoginForm |
||||
from .models import * |
||||
from django.apps import apps |
||||
from .functions import * |
||||
|
||||
# Create your views here. |
||||
""" |
||||
Fonction displayZone |
||||
Cette vue permet de charger les données d'une zone |
||||
Si zone_id n'est pas fourni, cela affiche la première vue du jeu qui démarre le chrono de l'équipe |
||||
et qui |
||||
""" |
||||
def displayZone(request, zone_id=None): |
||||
if 'equipe_code' not in request.session: |
||||
return redirect('app:setEquipe') |
||||
|
||||
equipe = Equipe.objects.get(code=request.session['equipe_code']) |
||||
template = loader.get_template('app/zone.html') |
||||
context = { |
||||
'zone':None |
||||
} |
||||
challenge = getMaxChallenge(equipe) |
||||
|
||||
if zone_id is None: |
||||
messages.error(request, "Merci d'indiquer une zone à charger !") |
||||
else: |
||||
try: |
||||
zone = Zone.objects.filter(code=challenge.zone.code)[0] |
||||
if zone_id == zone.code: |
||||
startChallengeTime(challenge) |
||||
context = { |
||||
'zone':zone, |
||||
'title': "Bienvenue dans la zone "+zone.nom, |
||||
} |
||||
else: |
||||
messages.warning(request, "Mauvaise zone ! vous devez vous rendre dans la zone "+zone.nom) |
||||
except Zone.DoesNotExist: |
||||
messages.error(request, "Cette zone n'existe pas !") |
||||
|
||||
return HttpResponse(template.render(context, request)) |
||||
|
||||
""" |
||||
Fonction setEquipe |
||||
Fonction permettant d'enregistrer une équipe et de lui donner la prochaine zone de destination. |
||||
Lors de la première exécution, la fonction démarre le chrono de l'équipe. |
||||
""" |
||||
def setEquipe(request): |
||||
template = loader.get_template('app/setEquipe.html') |
||||
if 'equipe_code' not in request.session: |
||||
if request.method == 'POST': |
||||
form = LoginForm(request.POST) |
||||
if form.is_valid(): |
||||
equipe = Equipe.objects.get(code=int(form.cleaned_data['equipe'])) |
||||
request.session['equipe_code'] = equipe.code |
||||
request.session['equipe_nom'] = equipe.nom |
||||
|
||||
challenge = getMaxChallenge(equipe) |
||||
if challenge is None: |
||||
startEquipeTime(equipe) |
||||
challenge = createChallenge(equipe) |
||||
|
||||
context = { |
||||
'zone': challenge.zone.nom, |
||||
'equipe_nom': request.session['equipe_nom'], |
||||
} |
||||
else: |
||||
context = { |
||||
'form': LoginForm(request.POST), |
||||
} |
||||
else: |
||||
context = { |
||||
'form': LoginForm(), |
||||
} |
||||
else: |
||||
context = { |
||||
'zone': getMaxChallenge(Equipe.objects.get(code=request.session['equipe_code'])).zone.nom, |
||||
'equipe_nom': request.session['equipe_nom'], |
||||
} |
||||
return HttpResponse(template.render(context, request)) |
||||
|
||||
def dashboard(request): |
||||
if not request.user.is_authenticated & request.user.is_superuser: |
||||
return redirect("/admin/login/?next=/dashboard") |
||||
template = loader.get_template('app/dashboard.html') |
||||
liste_equipe = Equipe.objects.all() |
||||
context = { |
||||
'liste_equipe': liste_equipe |
||||
} |
||||
return HttpResponse(template.render(context, request)) |
||||
|
||||
""" |
||||
Fonction createNewGame |
||||
Cette fonction efface les challenges présents en base pour en créer de nouveaux pour chacune des équipes |
||||
""" |
||||
def createNewGame(request): |
||||
|
||||
#On efface toutes les session existantes |
||||
request.session.flush() |
||||
|
||||
#On efface les challenges existants |
||||
Challenge.objects.all().delete() |
||||
|
||||
#On libère toutes les zones |
||||
liste_zone = Zone.objects.all() |
||||
for zone in liste_zone.iterator(): |
||||
zone.etat='L' |
||||
zone.save() |
||||
|
||||
liste_equipe = Equipe.objects.all() |
||||
for equipe in liste_equipe.iterator(): |
||||
equipe.start_time=None |
||||
equipe.end_time=None |
||||
equipe.save() |
||||
|
||||
#On vérifie que le nombre de zones soit au moins égal aun nombre d'équipe +1 |
||||
if len(liste_zone) < len(liste_equipe)+1: |
||||
messages.error(request, "Pas assez de zone pour créer un nouveau jeu") |
||||
else: |
||||
messages.info(request, 'Création du jeu OK.') |
||||
|
||||
return redirect('app:dashboard') |
||||
|
||||
Loading…
Reference in new issue