Beispiel #1
0
def occupation(request, rid):
    room = get_object_or_404(Room, pk=rid)
    with ac_api_client(room.sco.acc) as api:
        api.poll_user_counts(room)
        d = {'nusers': room.user_count, 'nhosts': room.host_count}
        return respond_to(request,
                          {'text/html': 'apps/room/fragments/occupation.txt',
                           'application/json': json_response(d, request)},
                          d)
Beispiel #2
0
def go_by_path(request, path):
    rooms = Room.objects.filter(urlpath=path)
    if len(rooms) == 1:
        return goto(request, rooms[0])

    if len(rooms) == 0:
        return HttpResponseNotFound()

    return respond_to(request,
                      {'text/html': 'apps/room/choose.html',
                       'application/json': json_response([base_url(request, room.go_url()) for room in rooms])},
                      {'rooms': rooms})
Beispiel #3
0
def list_by_tag(request, tn):
    tags = tn.split('+')
    rooms = TaggedItem.objects.get_by_model(Room, tags).order_by('name').all().prefetch_related("creator", "sco",
                                                                                                "folder_sco",
                                                                                                "source_sco",
                                                                                                "deleted_sco")
    title = 'Rooms tagged with %s' % " and ".join(tags)
    return respond_to(request,
                      {'text/html': 'apps/room/list.html',
                       'application/json': json_response([_room2dict(request, room) for room in rooms], request)},
                      {'title': title,
                       'description': title,
                       'edit': False,
                       'active': len(rooms) == 1,
                       'baseurl': base_url(request),
                       'tagstring': tn,
                       'rooms': rooms})
Beispiel #4
0
def tagged_minutes_api(request):
    form = StatCaledarForm(request.GET) # convenient way to parse dates
    if not form.is_valid():
        return HttpResponseBadRequest()

    tags = filter(lambda x: bool(x), form.cleaned_data['tags'].strip().split("+"))
    sco = form.cleaned_data['sco']
    begin = form.cleaned_data['begin']
    end = form.cleaned_data['end']
    user = form.cleaned_data['user']

    qs = UserMeetingTransaction.objects

    if user:
        qs = qs.filter(user=user)
    if sco:
        qs = qs.filter(sco=sco)
    if begin:
        qs = qs.filter(date_created__gt=begin)
    if end:
        qs = qs.filter(date_closed__lt=end)

    if len(tags) > 0:
        qs = UserMeetingTransaction.tagged.with_all(tags,qs)

    series = []
    d_created  = None
    d_closed = None
    ms = 0
    curdate = None
    t_ms = 0
    rc = {}
    uc = {}

    for tx in qs.all().prefetch_related("sco").prefetch_related("user"):
        rc[tx.sco.id] = True
        uc[tx.user.username] = True
        ts_created = _dt2ts(tx.date_created)
        ts_closed = _dt2ts(tx.date_closed)

        d1 = tx.date_created
        if d_created is None:
            d_created = d1

        d2 = tx.date_closed
        if d_closed is None:
            d_closed = d2

        if curdate is None:
            curdate = d1

        if curdate != d1:
            series.append([_dt2ts(curdate),int(ms/60)])
            ms = 0
            curdate = d1

        if d1 == d2: #same date
            diff = (ts_closed - ts_created)
            ms += diff
            t_ms += diff
        else: # meeting spanned midnight
            ts_date_ts = _dt2ts(d2)
            ms += ts_date_ts - ts_created
            series.append([_dt2ts(d1),int(ms/60)])
            t_ms += ms
            curdate = d2
            ms = (ts_closed - ts_date_ts)

    if curdate is not None and ms > 0:
        series.append([_date_ts(curdate),int(ms/60)])

    return json_response({'data': sorted(series,key=lambda x: x[0]),
                          'rooms': len(rc.keys()),
                          'begin': naturalday(begin),
                          'end': naturalday(end),
                          'users': len(uc.keys()),
                          'minutes': int(t_ms/60)},request)