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'
19
def scheduling_main (request):
20
return render(request, 'wlscheduling/main.html')
23
def scheduling_find (request):
24
current_user = request.user
25
other_users_availabilities = {}
26
for a in Availabilities.objects.exclude(user=current_user).order_by('avail_time'):
27
user_utc_dt_avail_time = a.avail_time
28
if datetime.now() < user_utc_dt_avail_time:
30
current_user_timezone = current_user.wlprofile.time_zone
31
user_dt_avail_time = user_utc_dt_avail_time + timedelta(hours= current_user_timezone)
32
user_string_avail_time = datetime.strftime(user_dt_avail_time, TIME_FORMAT)
34
if not other_user.username in other_users_availabilities:
35
other_users_availabilities[other_user.username] = []
36
other_users_availabilities[other_user.username].append(user_string_avail_time)
37
return render(request, 'wlscheduling/find.html', {'other_users_availabilities': json.dumps(other_users_availabilities)})
40
def scheduling(request):
41
current_user = request.user
42
current_user_availabilities = []
43
user_timezone = current_user.wlprofile.time_zone
45
# Update of user's availabilities when post mode
46
if request.method == 'POST':
47
request_avail_times = []
48
for r in request.POST:
49
if r != "csrfmiddlewaretoken":
50
request_avail_times.append(request.POST[r])
53
current_user_availabilities = []
54
for avail_time in request_avail_times:
55
dt_avail_time = datetime.strptime(avail_time, TIME_FORMAT)
56
utc_dt_avail_time = dt_avail_time + timedelta(hours= - user_timezone)
58
# We append the string to the list because apparently datetime objects cannot be stored in a list?
59
utc_string_avail_time = datetime.strftime(utc_dt_avail_time, TIME_FORMAT)
60
current_user_availabilities.append(utc_string_avail_time)
63
for request_avail_time in request_avail_times:
64
dt_avail_time = datetime.strptime(request_avail_time, TIME_FORMAT)
65
# Actual change of timezone, we got back to UTC
66
utc_dt_avail_time = dt_avail_time + timedelta(hours= - user_timezone)
67
avail_time_already_exist = False
68
for a in Availabilities.objects.filter(user=current_user, avail_time=utc_dt_avail_time):
69
avail_time_already_exist = True
71
if not avail_time_already_exist:
72
a = Availabilities.objects.create(
74
avail_time=utc_dt_avail_time
78
# We remove any previously stored date that is not present in the request anymore
79
for a in Availabilities.objects.filter(user=current_user):
80
utc_dt_avail_time = a.avail_time
82
for utc_string_avail_time in current_user_availabilities:
83
request_utc_dt_avail_time = datetime.strptime(utc_string_avail_time, TIME_FORMAT)
84
if utc_dt_avail_time == request_utc_dt_avail_time:
91
current_user_availabilities = []
92
for a in Availabilities.objects.filter(user=current_user).order_by('avail_time'):
93
utc_dt_avail_time = a.avail_time
94
# We display the time with current user timezone
95
dt_avail_time = utc_dt_avail_time + timedelta(hours=user_timezone)
96
string_avail_time = datetime.strftime(dt_avail_time, TIME_FORMAT)
97
current_user_availabilities.append(string_avail_time)
99
other_users_availabilities = {}
100
for current_user_a in Availabilities.objects.filter(user=current_user).order_by('avail_time'):
101
current_user_utc_dt_avail_time = current_user_a.avail_time
102
for a in Availabilities.objects.filter(avail_time=current_user_utc_dt_avail_time).exclude(user=current_user).order_by('avail_time'):
103
user_utc_dt_avail_time = a.avail_time
105
current_user_timezone = current_user.wlprofile.time_zone
106
user_dt_avail_time = user_utc_dt_avail_time + timedelta(hours= current_user_timezone)
107
user_string_avail_time = datetime.strftime(user_dt_avail_time, TIME_FORMAT)
109
if not other_user.username in other_users_availabilities:
110
other_users_availabilities[other_user.username] = []
111
other_users_availabilities[other_user.username].append(user_string_avail_time)
114
return render(request, 'wlscheduling/scheduling.html', {'current_user_availabilities': json.dumps(current_user_availabilities),
115
'other_users_availabilities': json.dumps(other_users_availabilities)})
b'\\ No newline at end of file'