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
15
def scheduling_main (request):
16
return render(request, 'wlscheduling/main.html')
19
def scheduling_find (request):
20
current_user = request.user
21
other_users_availabilities = {}
22
for a in Availabilities.objects.exclude(user=current_user).order_by('avail_time'):
23
user_utc_dt_avail_time = a.avail_time
24
if datetime.now() < user_utc_dt_avail_time:
26
current_user_timezone = current_user.wlprofile.time_zone
27
user_dt_avail_time = user_utc_dt_avail_time + timedelta(hours= current_user_timezone)
28
user_string_avail_time = datetime.strftime(user_dt_avail_time, '%Y-%m-%dT%H')
30
if not other_user.username in other_users_availabilities:
31
other_users_availabilities[other_user.username] = []
32
other_users_availabilities[other_user.username].append(user_string_avail_time)
35
return render(request, 'wlscheduling/find.html', {'other_users_availabilities': json.dumps(other_users_availabilities)})
38
def scheduling(request):
39
current_user = request.user
40
current_user_availabilities = []
41
user_timezone = current_user.wlprofile.time_zone
43
# remove obsoletes dates from db
44
for a in Availabilities.objects.filter(user=current_user):
45
if datetime.utcnow() > a.avail_time:
48
# Update of user's availabilities when post mode
49
if request.method == 'POST':
50
request_avail_times = []
51
for r in request.POST:
52
if r != "csrfmiddlewaretoken":
53
request_avail_times.append(request.POST[r])
56
current_user_availabilities = []
57
for avail_time in request_avail_times:
58
dt_avail_time = datetime.strptime(avail_time, '%Y-%m-%dT%H')
59
utc_dt_avail_time = dt_avail_time + timedelta(hours= - user_timezone)
61
# We append the string to the list because apparently datetime objects cannot be stored in a list?
62
utc_string_avail_time = datetime.strftime(utc_dt_avail_time, '%Y-%m-%dT%H')
63
current_user_availabilities.append(utc_string_avail_time)
66
for request_avail_time in request_avail_times:
67
dt_avail_time = datetime.strptime(request_avail_time, '%Y-%m-%dT%H')
68
# Actual change of timezone, we got back to UTC
69
utc_dt_avail_time = dt_avail_time + timedelta(hours= - user_timezone)
70
avail_time_already_exist = False
71
for a in Availabilities.objects.filter(user=current_user, avail_time=utc_dt_avail_time):
72
avail_time_already_exist = True
74
if not avail_time_already_exist:
75
a = Availabilities.objects.create(
77
avail_time=utc_dt_avail_time
81
# We remove any previously stored date that is not present in the request anymore
82
for a in Availabilities.objects.filter(user=current_user):
83
utc_dt_avail_time = a.avail_time
85
for utc_string_avail_time in current_user_availabilities:
86
request_utc_dt_avail_time = datetime.strptime(utc_string_avail_time, '%Y-%m-%dT%H')
87
if utc_dt_avail_time == request_utc_dt_avail_time:
94
current_user_availabilities = []
95
for a in Availabilities.objects.filter(user=current_user).order_by('avail_time'):
96
utc_dt_avail_time = a.avail_time
97
# We display the time with current user timezone
98
dt_avail_time = utc_dt_avail_time + timedelta(hours=user_timezone)
99
string_avail_time = datetime.strftime(dt_avail_time, '%Y-%m-%dT%H')
100
current_user_availabilities.append(string_avail_time)
102
other_users_availabilities = {}
103
for current_user_a in Availabilities.objects.filter(user=current_user).order_by('avail_time'):
104
current_user_utc_dt_avail_time = current_user_a.avail_time
105
for a in Availabilities.objects.filter(avail_time=current_user_utc_dt_avail_time).exclude(user=current_user).order_by('avail_time'):
106
user_utc_dt_avail_time = a.avail_time
108
current_user_timezone = current_user.wlprofile.time_zone
109
user_dt_avail_time = user_utc_dt_avail_time + timedelta(hours= current_user_timezone)
110
user_string_avail_time = datetime.strftime(user_dt_avail_time, '%Y-%m-%dT%H')
112
if not other_user.username in other_users_availabilities:
113
other_users_availabilities[other_user.username] = []
114
other_users_availabilities[other_user.username].append(user_string_avail_time)
117
return render(request, 'wlscheduling/scheduling.html', {'current_user_availabilities': json.dumps(current_user_availabilities),
118
'other_users_availabilities': json.dumps(other_users_availabilities)})
b'\\ No newline at end of file'