예제 #1
0
def overwrite_reservation(request):
    r_id = request.POST.get('id', None)
    if r_id is None:
        return http_badrequest(_('No request id provided.'))
    r = list(Reservation.objects.filter(id=int(r_id)))
    if len(r) < 1:
        return http_badrequest(_('No reservation with that id.'))
    reservation = r[0]

    if request.user.id == reservation.user_id:
        return http_forbidden(_('You may not overwrite your own reservations.'))
    elif reservation.is_solid():
        return http_forbidden(_('You may not overwrite solid reservations.'))

    # Dispatch to do_make_reservation which does all necessary testing for
    # overwrites anyway.
    return do_make_reservation(reservation.start, reservation.end, reservation.resource_id, request.user)
예제 #2
0
def overwrite_reservation(request):
    r_id = request.POST.get('id', None)
    if r_id is None:
        return http_badrequest(_('No request id provided.'))
    r = list(Reservation.objects.filter(id=int(r_id)))
    if len(r) < 1:
        return http_badrequest(_('No reservation with that id.'))
    reservation = r[0]

    if request.user.id == reservation.user_id:
        return http_forbidden(
            _('You may not overwrite your own reservations.'))
    elif reservation.is_solid():
        return http_forbidden(_('You may not overwrite solid reservations.'))

    # Dispatch to do_make_reservation which does all necessary testing for
    # overwrites anyway.
    return do_make_reservation(reservation.start, reservation.end,
                               reservation.resource_id, request.user)
예제 #3
0
def single_click_reservation(request):
    ts = request.POST.get('timestamp', None)
    resource_id = request.POST.get('resource_id', None)
    if None in [ts, resource_id]:
        return http_badrequest('')

    start = from_timestamp(int(ts))
    start = start.replace(minute=0)
    end = start + timedelta(hours=1)

    return do_make_reservation(start, end, resource_id, request.user)
예제 #4
0
def single_click_reservation(request):
    ts = request.POST.get('timestamp', None)
    resource_id = request.POST.get('resource_id', None)
    if None in [ts, resource_id]:
        return http_badrequest('')

    start = from_timestamp(int(ts))
    start = start.replace(minute=0)
    end = start + timedelta(hours=1)

    return do_make_reservation(start, end, resource_id, request.user)
예제 #5
0
def delete_reservation(request):
    r_id = request.POST.get('id', None)
    if r_id is None:
        return http_badrequest(_('No request id provided.'))
    r = list(Reservation.objects.filter(id=int(r_id)))
    for reservation in r:
        if request.user.id != reservation.user_id:
            return http_forbidden(_('You may only delete your own events.'))
    for reservation in r:
            reservation.delete_and_report()

    return http_json_response({'status': 'success', 'deleted': len(r)})
예제 #6
0
def delete_reservation(request):
    r_id = request.POST.get('id', None)
    if r_id is None:
        return http_badrequest(_('No request id provided.'))
    r = list(Reservation.objects.filter(id=int(r_id)))
    for reservation in r:
        if request.user.id != reservation.user_id:
            return http_forbidden(_('You may only delete your own events.'))
    for reservation in r:
        reservation.delete_and_report()

    return http_json_response({'status': 'success', 'deleted': len(r)})
예제 #7
0
def make_reservation(request):
    start = request.POST.get('start', None)
    end = request.POST.get('end', None)
    resource_id = request.POST.get('resource_id', None)

    if None in [start, end, resource_id]:
        return http_badrequest('')

    start = from_timestamp(int(start))
    end = from_timestamp(int(end))
    resource_id = int(resource_id)

    return do_make_reservation(start, end, resource_id, request.user)
예제 #8
0
def make_reservation(request):
    start = request.POST.get('start', None)
    end = request.POST.get('end', None)
    resource_id = request.POST.get('resource_id', None)

    if None in [start, end, resource_id]:
        return http_badrequest('')

    start = from_timestamp(int(start))
    end = from_timestamp(int(end))
    resource_id = int(resource_id)

    return do_make_reservation(start, end, resource_id, request.user)
예제 #9
0
def resource(request, resource_id=None):
    """
    Shows bookings for the specified resource.
    """
    if resource_id is None:
        return http_badrequest(_('No resource id given.'))
    mobile_requested = request.path_info.startswith('/m/')
    language = get_language()
    resources = Resource.objects.language(language).all()
    resource = get_object_or_404(Resource, resource_id)
    context = RequestContext(request, {
        'mobile_requested': mobile_requested,
        'resource': resource,
        'resources': resources})

    return render_to_response('resource.html', context)
예제 #10
0
def resource(request, resource_id=None):
    """
    Shows bookings for the specified resource.
    """
    if resource_id is None:
        return http_badrequest(_('No resource id given.'))
    mobile_requested = request.path_info.startswith('/m/')
    language = get_language()
    resources = Resource.objects.language(language).all()
    resource = get_object_or_404(Resource, resource_id)
    context = RequestContext(
        request, {
            'mobile_requested': mobile_requested,
            'resource': resource,
            'resources': resources
        })

    return render_to_response('resource.html', context)
예제 #11
0
def get_reservations(request, resource_id):
    start_time = int(request.GET.get('start'))
    end_time = int(request.GET.get('end'))
    resource_id = int(resource_id)
    if not resource_id or not start_time or not end_time:
        return http_badrequest('')

    start_datetime = from_timestamp(start_time)
    # We need to add a day to endtime because of djangoisms
    # see https://docs.djangoproject.com/en/dev/ref/models/querysets/#range
    end_datetime = from_timestamp(end_time) + timedelta(days=1)
    reservations = Reservation.objects.filter(
        deleted=False,
        resource=resource_id,
        start__range=(start_datetime, end_datetime))
    reservations = filter(lambda r: r.valid_user(), reservations)
    add_reservation_annotations(request.user, reservations)

    return http_json_response(reservations_to_json_struct(reservations))
예제 #12
0
def get_reservations(request, resource_id):
    start_time = int(request.GET.get('start'))
    end_time = int(request.GET.get('end'))
    resource_id = int(resource_id)
    if not resource_id or not start_time or not end_time:
        return http_badrequest('')

    start_datetime = from_timestamp(start_time)
    # We need to add a day to endtime because of djangoisms
    # see https://docs.djangoproject.com/en/dev/ref/models/querysets/#range
    end_datetime = from_timestamp(end_time) + timedelta(days=1)
    reservations = Reservation.objects.filter(deleted=False,
                                              resource=resource_id,
                                              start__range=(start_datetime,
                                                            end_datetime))
    reservations = filter(lambda r: r.valid_user(), reservations)
    add_reservation_annotations(request.user, reservations)

    return http_json_response(reservations_to_json_struct(reservations))
예제 #13
0
def resource_type(request, resource_t_id=None):
    """
    Shows bookings for the specified resource type.
    """
    if resource_t_id is None:
        return http_badrequest(_('No resource type id given.'))

    resource_type = get_object_or_404(ResourceType, resource_t_id)
    resources = list(resource_type.resources.all())
    # Sort resources by longitude so that calendar columns correspond to
    # the map shown above them.
    resources = sorted(resources, key=lambda r: r.longitude)
    min_lat = min(resources, key=lambda r: r.latitude)
    max_lat = max(resources, key=lambda r: r.latitude)
    min_long = min(resources, key=lambda r: r.longitude)
    max_long = max(resources, key=lambda r: r.longitude)

    # Calculate margins and calendar widths
    resource_count = len(resources)
    total_width = 100
    width_sans_margins = 58.2
    margin_width = total_width - width_sans_margins

    cal_width = width_sans_margins / resource_count
    if resource_count == 1:
        cal_margin = margin_width
    else:
        cal_margin = margin_width / (resource_count - 1)

    context = RequestContext(
        request, {
            'longitude': (max_long.longitude + min_long.longitude) / 2,
            'latitude': (max_lat.latitude + min_lat.latitude) / 2,
            'cal_width': cal_width,
            'cal_margin': cal_margin,
            'resource_type': resource_type,
            'resources': resources
        })

    return render_to_response('resource_type.html', context)
예제 #14
0
def resource_type(request, resource_t_id=None):
    """
    Shows bookings for the specified resource type.
    """
    if resource_t_id is None:
        return http_badrequest(_('No resource type id given.'))

    resource_type = get_object_or_404(ResourceType, resource_t_id)
    resources = list(resource_type.resources.all())
    # Sort resources by longitude so that calendar columns correspond to
    # the map shown above them.
    resources = sorted(resources, key=lambda r: r.longitude)
    min_lat = min(resources, key=lambda r: r.latitude)
    max_lat = max(resources, key=lambda r: r.latitude)
    min_long = min(resources, key=lambda r: r.longitude)
    max_long = max(resources, key=lambda r: r.longitude)

    # Calculate margins and calendar widths
    resource_count = len(resources)
    total_width = 100
    width_sans_margins = 58.2
    margin_width = total_width - width_sans_margins

    cal_width = width_sans_margins / resource_count
    if resource_count == 1:
        cal_margin = margin_width
    else:
        cal_margin = margin_width / (resource_count - 1)

    context = RequestContext(request, {
        'longitude': (max_long.longitude + min_long.longitude) / 2,
        'latitude': (max_lat.latitude + min_lat.latitude) / 2,
        'cal_width': cal_width,
        'cal_margin': cal_margin,
        'resource_type': resource_type,
        'resources': resources})

    return render_to_response('resource_type.html', context)