~widelands-dev/widelands-website/django_staticfiles

« back to all changes in this revision

Viewing changes to wlscheduling/views.py

  • Committer: franku
  • Date: 2016-04-18 13:29:23 UTC
  • mto: This revision was merged to the branch mainline in revision 409.
  • Revision ID: somal@arcor.de-20160418132923-bfzkb5mvdr7l8mz4
added migrations to each app

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
 
@login_required
20
 
def scheduling_main (request):
21
 
    return render(request, 'wlscheduling/main.html')
22
 
 
23
 
@login_required
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:
30
 
            other_user = a.user
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)
34
 
                
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)})
39
 
 
40
 
@login_required
41
 
def scheduling(request):
42
 
    current_user = request.user
43
 
    current_user_availabilities = []
44
 
    user_timezone = current_user.wlprofile.time_zone
45
 
        
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])
52
 
 
53
 
 
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)
58
 
 
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)
62
 
        
63
 
        
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
71
 
            
72
 
            if not avail_time_already_exist:
73
 
                a = Availabilities.objects.create(
74
 
                    user=current_user,
75
 
                    avail_time=utc_dt_avail_time
76
 
                )
77
 
                a.save()
78
 
        
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
82
 
            to_remove = True
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:
86
 
                    to_remove = False
87
 
            if to_remove:
88
 
                a.delete()
89
 
 
90
 
        
91
 
 
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)
99
 
 
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
105
 
            other_user = a.user
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)
109
 
             
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)
113
 
 
114
 
 
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'