source: asadb/space/views.py

space-accessstablestage
Last change on this file was f6982d4, checked in by Alex Dehnert <adehnert@…>, 13 years ago

Describe the lock types and list on space summary

  • Create a page that displays the list of lock types, their descriptions, whether the DB handles them, etc.
  • List the lock type next to each office on the space assignments page
  • Link the lock types list from the homepage and the space assignments page
  • Property mode set to 100755
File size: 4.9 KB
Line 
1# Create your views here.
2from django.contrib.auth.decorators import user_passes_test, login_required, permission_required
3from django.core.exceptions import PermissionDenied
4from django.shortcuts import render_to_response, get_object_or_404, redirect
5from django.template import RequestContext, Context, Template
6from django.http import Http404, HttpResponseRedirect, HttpResponse
7from django.core.urlresolvers import reverse
8from django.core.mail import EmailMessage, mail_admins
9from django import forms
10from django.forms import ValidationError
11from django.db import connection
12from django.db.models import Q
13from django.utils.safestring import mark_safe
14
15import django_filters
16
17import groups.models
18import space.models
19import space.dump_locker_access
20import space.dump_office_access
21
22# Note: Not a view.
23def process_access_changes(request, group, assignment, entries, changes, extras_indices, ):
24    for entry in entries:
25        key = "grant[%d][%d]" % (assignment.pk, entry.pk)
26        if key in request.POST:
27            pass
28        else:
29            changes.append(('Expire', assignment.space, entry))
30            entry.expire()
31    for index in extras_indices:
32        key = "new[%d][%d]" % (assignment.pk, index)
33        name = request.POST.get(key+"[name]", "")
34        if name:
35            entry = space.models.SpaceAccessListEntry(
36                group=group,
37                space=assignment.space,
38            )
39            entry.name = name
40            entry.card_number = request.POST.get(key+"[card]", "")
41            changes.append(('Add', assignment.space, entry))
42            entry.save()
43
44@login_required
45def manage_access(request, pk, ):
46    group = get_object_or_404(groups.models.Group, pk=pk)
47
48    priv_view = request.user.has_perm('groups.view_group_private_info', group)
49    priv_admin = request.user.has_perm('groups.admin_group', group)
50    priv_rw = priv_admin
51    if not (priv_view or priv_admin):
52        raise PermissionDenied
53
54    office_access = group.officers(role='office-access')
55    locker_access = group.officers(role='locker-access')
56    assignments = space.models.SpaceAssignment.current.filter(group=group)
57    office_pairs = []
58    locker_pairs = []
59    changes = []
60    if priv_rw:
61        extras_indices = range(6)
62    else:
63        extras_indices = []
64    if request.method == 'POST' and priv_rw:
65        edited = True
66    else:
67        edited = False
68    for assignment in assignments:
69        entries = space.models.SpaceAccessListEntry.current.filter(group=group, space=assignment.space)
70        if assignment.is_locker():
71            pairs = locker_pairs
72        else:
73            pairs = office_pairs
74        if edited:
75            process_access_changes(
76                request, group,
77                assignment, entries.filter(),
78                changes, extras_indices,
79            )
80        pair = (assignment, entries)
81        pairs.append(pair)
82    allow_edit = priv_rw and ((len(office_pairs) + len(locker_pairs)) > 0)
83    context = {
84        'group': group,
85        'office': office_access,
86        'locker': locker_access,
87        'office_pairs': office_pairs,
88        'locker_pairs': locker_pairs,
89        'changes': changes,
90        'allow_edit': allow_edit,
91        'extras_indices': extras_indices,
92        'pagename':'groups',
93    }
94    return render_to_response('space/manage-access.html', context, context_instance=RequestContext(request), )
95
96@permission_required('groups.view_group_private_info')
97def dump_locker_access(request, ):
98    response = HttpResponse(mimetype='text/csv')
99    space_users = space.dump_locker_access.gather_users()
100    space.dump_locker_access.print_info(space_users, response)
101    return response
102
103@permission_required('groups.view_group_private_info')
104def dump_office_access(request, ):
105    response = HttpResponse(mimetype='text/csv')
106    space.dump_office_access.print_info(response)
107    return response
108
109def summary(request, ):
110    assignments = space.models.SpaceAssignment.current.order_by(
111        'space__number',
112        'locker_num',
113        'group__name',
114    ).select_related('space', 'space__lock_type', 'group')
115    office_assignments = assignments.filter(locker_num='')
116
117    locker_assignments = assignments.exclude(locker_num='')
118    locker_rooms = []
119    room = None
120    for assignment in locker_assignments:
121        if room != assignment.space:
122            room = assignment.space
123            locker_rooms.append((room, []))
124        locker_rooms[-1][1].append(assignment)
125
126    context = {
127        'offices': office_assignments,
128        'lockers': locker_rooms,
129        'pagename':'groups',
130    }
131    return render_to_response('space/summary.html', context, context_instance=RequestContext(request), )
132
133def lock_types(request, ):
134    lock_types = space.models.LockType.objects.order_by('name')
135    context = {
136        'lock_types': lock_types,
137        'pagename': 'groups',
138    }
139    return render_to_response('space/lock_types.html', context, context_instance=RequestContext(request), )
Note: See TracBrowser for help on using the repository browser.