def new_tagged_booking(step, booking_name, building, place_name, start_date, end_date, username, tag): booking = Booking() booking.user = User() booking.user = User.objects.get(username=username) booking.name = booking_name booking.start_date = start_date booking.end_date = end_date booking.place = Place() booking.place.name = place_name booking.place.building = Building() booking.place.building.name = building booking.responsible = username booking.save() tag_o = Tag(name=tag) tag_o.save() booking.tags.add(tag_o) for day in range(0, 10): book = BookTime() book.date_booking = parser.parse(start_date) + timedelta(days=day) book.start_hour = "20:00" book.end_hour = "22:00" book.save() booking.time.add(book) booking.save()
def book(request, bookable): if not request.user.is_authenticated: return render(request, 'modals/forbidden.html') booking = Booking() bookable_obj = get_object_or_404(Bookable, id_str=bookable) context = { 'url': request.path, 'bookable': bookable_obj, 'user': request.user, } if request.method == 'GET': booking.start = dateutil.parser.parse(request.GET['st']) if 'st' in request.GET else datetime.now() booking.end = dateutil.parser.parse(request.GET['et']) if 'et' in request.GET else start + timedelta(hours=1) booking.bookable = bookable_obj booking.user = request.user form = BookingForm(instance=booking) status = 200 elif request.method == 'POST': form = BookingForm(request.POST, instance=booking) if form.is_valid(): form.save() return HttpResponse() else: status = 400 else: raise Http404 context['form'] = form return render(request, 'book.html', context=context, status=status)
def post(self, request, bookable): booking = Booking() booking.user = self.context['user'] booking.bookable = self.context['bookable'] form = get_form_class(booking.bookable.metadata_form)(request.POST, instance=booking) self.context['form'] = form if form.is_valid(): booking = form.instance booking.metadata = json.dumps(form.get_cleaned_metadata()) if request.POST.get('repeat') and _is_admin(request.user, booking.bookable): repeatdata = { 'frequency': request.POST.get('frequency'), 'repeat_until': request.POST.get('repeat_until') } repeat_form = RepeatingBookingForm(repeatdata) if repeat_form.is_valid(): # Creates repeating bookings as specified, adding all created bookings to group skipped_bookings = repeat_form.save_repeating_booking_group(booking) return JsonResponse({'skipped_bookings': skipped_bookings}) else: return render(request, self.template, context=self.context, status=400) else: form.save() else: return render(request, self.template, context=self.context, status=400) booking.bookable.notify_external_services() return HttpResponse()
def test_booking_creation(self): time_period = datetime.timedelta(30) b = Booking() b.user = self.test_user b.start_date = datetime.datetime.now() b.end_date = datetime.datetime.now()+time_period b.save() items = Kit.objects.all() b.kits = items b.save()
def get(self, request, bookable): booking = Booking() booking.start = dateutil.parser.parse( request.GET['st']) if 'st' in request.GET else datetime.now() booking.end = dateutil.parser.parse( request.GET['et'] ) if 'et' in request.GET else booking.start + timedelta(hours=1) booking.bookable = self.context['bookable'] booking.user = request.user form = get_form_class(booking.bookable.metadata_form)(instance=booking) self.context['form'] = form if _is_admin(request.user, booking.bookable): self.context['repeatform'] = RepeatingBookingForm() return render(request, self.template, context=self.context)
def save(self, user, force_insert=False, force_update=False, commit=True): booking = Booking() booking.user = user booking.name = self.cleaned_data.get("name") booking.start_date = self.cleaned_data.get("start_date") booking.end_date = self.cleaned_data.get("end_date") booking.place = self.cleaned_data.get("place") weekdays = self.cleaned_data.get("week_days") #if user.profile_user.is_admin(): # booking.engineering = self.cleaned_data.get("engineering_choice") # booking.responsible = self.cleaned_data.get("responsible") # name = re.search('[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+', # booking.responsible) # if name is not None: # name = name.group() # users = User.objects.filter(username=name) # ONE_FOUND = 1 # if user.profile_user.is_admin() and (users.count() is ONE_FOUND): # booking.user = users[0] #else: # booking.engineering = user.profile_user.engineering # booking.responsible = str(user.profile_user) book = BookTime() book.date_booking = booking.start_date book.start_hour = self.cleaned_data.get("start_hour") book.end_hour = self.cleaned_data.get("end_hour") try: booking.save() if booking.exists(book.start_hour, book.end_hour, weekdays): booking.delete() return None else: for day in date_range(book.date_booking, booking.end_date): if (day.isoweekday() - 1 in map(int, weekdays)): newBookTime = BookTime(start_hour=book.start_hour, end_hour=book.end_hour, date_booking=day) newBookTime.save() booking.time.add(newBookTime) #tags = self.cleaned_data['tags'] #if tags: # tags = ast.literal_eval(tags) # for name in tags: # if not Tag.objects.filter(name=name).exists(): # tag = Tag(name=name) # tag.save() # tag = Tag.objects.get(name=name) # booking.tags.add(tag) #booking.save() except Exception as e: booking.delete() msg = _('Failed to book selected period') print(e) raise forms.ValidationError(msg) return None return booking