6 changed files with 180 additions and 11 deletions
@ -1,7 +1,8 @@ |
|||||||
from django.contrib import admin |
from django.contrib import admin |
||||||
|
|
||||||
from .models import Zone, Distance |
from .models import Zone, Distance, Equipe, Challenge |
||||||
|
|
||||||
admin.site.register(Zone) |
admin.site.register(Zone) |
||||||
admin.site.register(Distance) |
admin.site.register(Distance) |
||||||
|
admin.site.register(Equipe) |
||||||
|
admin.site.register(Challenge) |
||||||
|
|||||||
@ -1,6 +1,6 @@ |
|||||||
from django.apps import AppConfig |
from django.apps import AppConfig |
||||||
|
|
||||||
|
|
||||||
class AppConfig(AppConfig): |
class AppConfig(AppConfig): |
||||||
default_auto_field = 'django.db.models.BigAutoField' |
default_auto_field = 'django.db.models.BigAutoField' |
||||||
name = 'app' |
name = 'app' |
||||||
|
nb_challenges = 5 |
||||||
|
|||||||
@ -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