~widelands-dev/widelands-website/django_staticfiles

« back to all changes in this revision

Viewing changes to wlscheduling/views.py

  • Committer: franku
  • Author(s): trimard
  • Date: 2018-02-17 10:52:15 UTC
  • mfrom: (478.1.16 module_scheduling)
  • Revision ID: somal@arcor.de-20180217105215-8luihqojg51ipu6j
merged the scheduling module by trimard

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python -tt
 
2
# encoding: utf-8
 
3
#
 
4
 
 
5
from django.shortcuts import render
 
6
from models import Availabilities
 
7
from django.contrib.auth.decorators import login_required
 
8
import json
 
9
from datetime import datetime, timedelta
 
10
 
 
11
###########
 
12
# Options #
 
13
###########
 
14
TIME_FORMAT = '%Y-%m-%dT%H'
 
15
 
 
16
#########
 
17
# Views #
 
18
#########
 
19
def scheduling_main (request):
 
20
    return render(request, 'wlscheduling/main.html')
 
21
 
 
22
@login_required
 
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:
 
29
            other_user = a.user
 
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)
 
33
                
 
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)})
 
38
 
 
39
@login_required
 
40
def scheduling(request):
 
41
    current_user = request.user
 
42
    current_user_availabilities = []
 
43
    user_timezone = current_user.wlprofile.time_zone
 
44
        
 
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])
 
51
 
 
52
 
 
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)
 
57
 
 
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)
 
61
        
 
62
        
 
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
 
70
            
 
71
            if not avail_time_already_exist:
 
72
                a = Availabilities.objects.create(
 
73
                    user=current_user,
 
74
                    avail_time=utc_dt_avail_time
 
75
                )
 
76
                a.save()
 
77
        
 
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
 
81
            to_remove = True
 
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:
 
85
                    to_remove = False
 
86
            if to_remove:
 
87
                a.delete()
 
88
 
 
89
        
 
90
 
 
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)
 
98
 
 
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
 
104
            other_user = a.user
 
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)
 
108
             
 
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)
 
112
 
 
113
 
 
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'