1
#!/usr/bin/env python -tt
5
from django.shortcuts import render
6
from models import Availabilities
7
from django.contrib.auth.decorators import login_required
9
from datetime import datetime, timedelta
14
TIME_FORMAT = '%Y-%m-%dT%H'
20
def scheduling_main (request):
21
return render(request, 'wlscheduling/main.html')
24
def scheduling_find (request):
25
current_user = request.user
26
other_users_availabilities = {}
27
for a in Availabilities.objects.exclude(user=current_user).order_by('avail_time'):
28
user_utc_dt_avail_time = a.avail_time
29
if datetime.now() < user_utc_dt_avail_time:
31
current_user_timezone = current_user.wlprofile.time_zone
32
user_dt_avail_time = user_utc_dt_avail_time + timedelta(hours= current_user_timezone)
33
user_string_avail_time = datetime.strftime(user_dt_avail_time, TIME_FORMAT)
35
if not other_user.username in other_users_availabilities:
36
other_users_availabilities[other_user.username] = []
37
other_users_availabilities[other_user.username].append(user_string_avail_time)
38
return render(request, 'wlscheduling/find.html', {'other_users_availabilities': json.dumps(other_users_availabilities)})
41
def scheduling(request):
42
current_user = request.user
43
current_user_availabilities = []
44
user_timezone = current_user.wlprofile.time_zone
46
# Update of user's availabilities when post mode
47
if request.method == 'POST':
48
request_avail_times = []
49
for r in request.POST:
50
if r != "csrfmiddlewaretoken":
51
request_avail_times.append(request.POST[r])
54
current_user_availabilities = []
55
for avail_time in request_avail_times:
56
dt_avail_time = datetime.strptime(avail_time, TIME_FORMAT)
57
utc_dt_avail_time = dt_avail_time + timedelta(hours= - user_timezone)
59
# We append the string to the list because apparently datetime objects cannot be stored in a list?
60
utc_string_avail_time = datetime.strftime(utc_dt_avail_time, TIME_FORMAT)
61
current_user_availabilities.append(utc_string_avail_time)
64
for request_avail_time in request_avail_times:
65
dt_avail_time = datetime.strptime(request_avail_time, TIME_FORMAT)
66
# Actual change of timezone, we got back to UTC
67
utc_dt_avail_time = dt_avail_time + timedelta(hours= - user_timezone)
68
avail_time_already_exist = False
69
for a in Availabilities.objects.filter(user=current_user, avail_time=utc_dt_avail_time):
70
avail_time_already_exist = True
72
if not avail_time_already_exist:
73
a = Availabilities.objects.create(
75
avail_time=utc_dt_avail_time
79
# We remove any previously stored date that is not present in the request anymore
80
for a in Availabilities.objects.filter(user=current_user):
81
utc_dt_avail_time = a.avail_time
83
for utc_string_avail_time in current_user_availabilities:
84
request_utc_dt_avail_time = datetime.strptime(utc_string_avail_time, TIME_FORMAT)
85
if utc_dt_avail_time == request_utc_dt_avail_time:
92
current_user_availabilities = []
93
for a in Availabilities.objects.filter(user=current_user).order_by('avail_time'):
94
utc_dt_avail_time = a.avail_time
95
# We display the time with current user timezone
96
dt_avail_time = utc_dt_avail_time + timedelta(hours=user_timezone)
97
string_avail_time = datetime.strftime(dt_avail_time, TIME_FORMAT)
98
current_user_availabilities.append(string_avail_time)
100
other_users_availabilities = {}
101
for current_user_a in Availabilities.objects.filter(user=current_user).order_by('avail_time'):
102
current_user_utc_dt_avail_time = current_user_a.avail_time
103
for a in Availabilities.objects.filter(avail_time=current_user_utc_dt_avail_time).exclude(user=current_user).order_by('avail_time'):
104
user_utc_dt_avail_time = a.avail_time
106
current_user_timezone = current_user.wlprofile.time_zone
107
user_dt_avail_time = user_utc_dt_avail_time + timedelta(hours= current_user_timezone)
108
user_string_avail_time = datetime.strftime(user_dt_avail_time, TIME_FORMAT)
110
if not other_user.username in other_users_availabilities:
111
other_users_availabilities[other_user.username] = []
112
other_users_availabilities[other_user.username].append(user_string_avail_time)
115
return render(request, 'wlscheduling/scheduling.html', {'current_user_availabilities': json.dumps(current_user_availabilities),
116
'other_users_availabilities': json.dumps(other_users_availabilities)})
b'\\ No newline at end of file'