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)
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)
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)
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)})
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)
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)
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)
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))
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))
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)
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)