|
@@ -1,4 +1,5 @@
|
|
|
import random
|
|
|
+import datetime
|
|
|
from django.db import IntegrityError
|
|
|
from django.http import HttpResponseNotFound, HttpResponseRedirect, JsonResponse, HttpResponseNotAllowed
|
|
|
from django.shortcuts import render
|
|
@@ -24,7 +25,12 @@ def create_event(request):
|
|
|
n = 0
|
|
|
while n<10:
|
|
|
try:
|
|
|
- event = Event.objects.create(name=data['event_name'])
|
|
|
+ event = Event.objects.create(
|
|
|
+ name=data['event_name'],
|
|
|
+ start_time=datetime.time(int(data['start_time']), 0),
|
|
|
+ end_time=datetime.time(int(data['end_time']), 0),
|
|
|
+ slot_interval=datetime.timedelta(minutes=int(data['slot_interval'])),
|
|
|
+ )
|
|
|
for date in data['event_date']:
|
|
|
event.date_set.create(date=date)
|
|
|
event.save()
|
|
@@ -43,17 +49,17 @@ def event(request, url):
|
|
|
return render(request, 'zitap/event-not-found.html')
|
|
|
|
|
|
# Check if the user is logged in
|
|
|
- if 'participant_id' in request.session:
|
|
|
- participant = Participant.objects.get(id=request.session['participant_id'])
|
|
|
+ if 'user_id' in request.session:
|
|
|
+ participant = Participant.objects.get(user_id=request.session['user_id'], event=event)
|
|
|
login_form = None
|
|
|
- update_form = UpdateSlotsForm(initial={'slots': participant.slots})
|
|
|
+ update_form = UpdateSlotsForm(initial={'slots': slots2string(participant, get_slot_count(event))}, participant=participant)
|
|
|
else:
|
|
|
login_form = LoginForm()
|
|
|
update_form = None
|
|
|
return render(
|
|
|
request,
|
|
|
'zitap/event.html',
|
|
|
- {'event': event, 'grid': slots2grid(event), 'login_form': login_form, 'update_form': update_form}
|
|
|
+ {'event': event, 'grid': slots2grid(event, event.participant_set.all()), 'login_form': login_form, 'update_form': update_form}
|
|
|
)
|
|
|
|
|
|
def login(request, url):
|
|
@@ -77,14 +83,14 @@ def login(request, url):
|
|
|
return render(
|
|
|
request,
|
|
|
'zitap/event.html',
|
|
|
- {'event': event, 'grid': slots2grid(event), 'login_form': form, 'update_form': None}
|
|
|
+ {'event': event, 'grid': slots2grid(event, event.participant_set.all()), 'login_form': form, 'update_form': None}
|
|
|
)
|
|
|
|
|
|
auth_login(request, user)
|
|
|
participant, created = Participant.objects.get_or_create(event=event, user=user)
|
|
|
- participant.slots = random.getrandbits(get_slot_count(event)).to_bytes(get_slot_count(event) // 8, 'big')
|
|
|
+ participant.slots = random.getrandbits(get_slot_count(event)).to_bytes((get_slot_count(event)+7) // 8, 'big')
|
|
|
participant.save()
|
|
|
- request.session['participant_id'] = participant.id
|
|
|
+ request.session['user_id'] = user.id
|
|
|
return HttpResponseRedirect(f'/{event.url}')
|
|
|
|
|
|
def logout(request, url):
|
|
@@ -93,8 +99,8 @@ def logout(request, url):
|
|
|
except Event.DoesNotExist:
|
|
|
return render(request, 'zitap/event-not-found.html')
|
|
|
|
|
|
- if 'participant_id' in request.session:
|
|
|
- del request.session['participant_id']
|
|
|
+ if 'user_id' in request.session:
|
|
|
+ del request.session['user_id']
|
|
|
return HttpResponseRedirect(f'/{event.url}')
|
|
|
|
|
|
def update_slots(request, url):
|
|
@@ -106,10 +112,10 @@ def update_slots(request, url):
|
|
|
if request.method != 'POST':
|
|
|
return HttpResponseNotAllowed(['POST'])
|
|
|
|
|
|
- form = UpdateSlotsForm(request.POST)
|
|
|
+ participant = Participant.objects.get(user_id=request.session['user_id'], event=event)
|
|
|
+ form = UpdateSlotsForm(request.POST, participant=participant)
|
|
|
if form.is_valid():
|
|
|
data = form.cleaned_data
|
|
|
- participant = Participant.objects.get(id=request.session['participant_id'])
|
|
|
participant.slots = string2slots(data['slots'], get_slot_count(event))
|
|
|
participant.save()
|
|
|
return HttpResponseRedirect(f'/{event.url}')
|
|
@@ -125,9 +131,9 @@ def slots_api(request, url):
|
|
|
slot_count = get_slot_count(event)
|
|
|
|
|
|
# Check if the user is logged in and wants to update their slots
|
|
|
- if 'participant_id' in request.session and request.method == 'POST':
|
|
|
- participant = Participant.objects.get(id=request.session['participant_id'])
|
|
|
- form = UpdateSlotsForm(request.POST)
|
|
|
+ if 'user_id' in request.session and request.method == 'POST':
|
|
|
+ participant = Participant.objects.get(user_id=request.session['user_id'], event=event)
|
|
|
+ form = UpdateSlotsForm(request.POST, participant=participant)
|
|
|
if form.is_valid():
|
|
|
data = form.cleaned_data
|
|
|
participant.slots = string2slots(data['slots'], slot_count)
|