|
15 | 15 | from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden, Http404 |
16 | 16 | from django.contrib import messages |
17 | 17 | from django.core.urlresolvers import reverse |
18 | | -from django.db.models import Q |
| 18 | +from django.db.models import Q, Min, Max |
19 | 19 | from django.template import RequestContext |
20 | 20 | from django.template.loader import render_to_string |
21 | 21 | from django.conf import settings |
22 | | -from django.db.models import Max |
23 | 22 | from django.forms.models import modelform_factory |
24 | 23 | from django.views.decorators.csrf import ensure_csrf_cookie |
25 | 24 | from django.forms import ModelForm |
@@ -612,6 +611,59 @@ def week_view(request, num=None): |
612 | 611 | return render_to_response(template, |
613 | 612 | {"timeslots":timeslots,"render_types":["Session","Other","Break","Plenary"]}, context_instance=RequestContext(request)) |
614 | 613 |
|
| 614 | +@role_required('Secretariat') |
| 615 | +def room_view(request, num=None): |
| 616 | + meeting = get_meeting(num) |
| 617 | + |
| 618 | + rooms = meeting.room_set.order_by('functional_name','name') |
| 619 | + if rooms.count() == 0: |
| 620 | + raise Http404 |
| 621 | + |
| 622 | + scheduledsessions = meeting.agenda.scheduledsession_set.all() |
| 623 | + unavailable = meeting.timeslot_set.filter(type__slug='unavail') |
| 624 | + if (unavailable.count() + scheduledsessions.count()) == 0 : |
| 625 | + raise Http404 |
| 626 | + |
| 627 | + earliest = None |
| 628 | + latest = None |
| 629 | + |
| 630 | + if scheduledsessions: |
| 631 | + earliest = scheduledsessions.aggregate(Min('timeslot__time'))['timeslot__time__min'] |
| 632 | + latest = scheduledsessions.aggregate(Max('timeslot__time'))['timeslot__time__max'] |
| 633 | + |
| 634 | + if unavailable: |
| 635 | + earliest_unavailable = unavailable.aggregate(Min('time'))['time__min'] |
| 636 | + if not earliest or ( earliest_unavailable and earliest_unavailable < earliest ): |
| 637 | + earliest = earliest_unavailable |
| 638 | + latest_unavailable = unavailable.aggregate(Max('time'))['time__max'] |
| 639 | + if not latest or ( latest_unavailable and latest_unavailable > latest ): |
| 640 | + latest = latest_unavailable |
| 641 | + |
| 642 | + if not (earliest and latest): |
| 643 | + raise Http404 |
| 644 | + |
| 645 | + base_time = earliest |
| 646 | + base_day = datetime.datetime(base_time.year,base_time.month,base_time.day) |
| 647 | + |
| 648 | + day = base_day |
| 649 | + days = [] |
| 650 | + while day <= latest : |
| 651 | + days.append(day) |
| 652 | + day += datetime.timedelta(days=1) |
| 653 | + |
| 654 | + unavailable = list(unavailable) |
| 655 | + for t in unavailable: |
| 656 | + t.delta_from_beginning = (t.time - base_time).total_seconds() |
| 657 | + t.day = (t.time-base_day).days |
| 658 | + |
| 659 | + scheduledsessions = list(scheduledsessions) |
| 660 | + for ss in scheduledsessions: |
| 661 | + ss.delta_from_beginning = (ss.timeslot.time - base_time).total_seconds() |
| 662 | + ss.day = (ss.timeslot.time-base_day).days |
| 663 | + |
| 664 | + template = "meeting/room-view.html" |
| 665 | + return render(request, template,{"meeting":meeting,"unavailable":unavailable,"scheduledsessions":scheduledsessions,"rooms":rooms,"days":days}) |
| 666 | + |
615 | 667 | def ical_agenda(request, num=None, name=None, ext=None): |
616 | 668 | meeting = get_meeting(num) |
617 | 669 | schedule = get_schedule(meeting, name) |
|
0 commit comments