~widelands-dev/widelands-website/trunk

« back to all changes in this revision

Viewing changes to wlscheduling/views.py

  • Committer: gschmitlin at gmail
  • Date: 2017-12-23 09:15:02 UTC
  • mto: This revision was merged to the branch mainline in revision 480.
  • Revision ID: gschmitlin@gmail.com-20171223091502-j1zscwdies0625nv
added scheduling module in a clean way

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
#########
 
13
# Views #
 
14
#########
 
15
def scheduling_main (request):
 
16
    return render(request, 'wlscheduling/main.html')
 
17
 
 
18
@login_required
 
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:
 
25
            other_user = a.user
 
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')
 
29
                
 
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)
 
33
        else:
 
34
            a.delete()
 
35
    return render(request, 'wlscheduling/find.html', {'other_users_availabilities': json.dumps(other_users_availabilities)})
 
36
 
 
37
@login_required
 
38
def scheduling(request):
 
39
    current_user = request.user
 
40
    current_user_availabilities = []
 
41
    user_timezone = current_user.wlprofile.time_zone
 
42
    
 
43
    # remove obsoletes dates from db
 
44
    for a in Availabilities.objects.filter(user=current_user):
 
45
        if datetime.utcnow() > a.avail_time:
 
46
            a.delete()
 
47
        
 
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])
 
54
 
 
55
 
 
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)
 
60
 
 
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)
 
64
        
 
65
        
 
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
 
73
            
 
74
            if not avail_time_already_exist:
 
75
                a = Availabilities.objects.create(
 
76
                    user=current_user,
 
77
                    avail_time=utc_dt_avail_time
 
78
                )
 
79
                a.save()
 
80
        
 
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
 
84
            to_remove = True
 
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:
 
88
                    to_remove = False
 
89
            if to_remove:
 
90
                a.delete()
 
91
 
 
92
        
 
93
 
 
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)
 
101
 
 
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
 
107
            other_user = a.user
 
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')
 
111
             
 
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)
 
115
 
 
116
 
 
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'