def booking_submit(request): if request.method == "POST": form = BookingForm(request.POST) if not request.user.is_authenticated(): return render(request, "booking_submitted.html", {"success":False}) if form.is_valid(): booking = form.save(commit=False) booking.user = request.user # Verify that this booking will not conflict with any others # ie in the same room, with overlapping times # to do this quickly, find all bookings in same room, excluding those with start date after new end date and end date before new start date. This makes sense, I promise... conflicting_bookings = Booking.objects.filter(room=booking.room).exclude(start_date__gte=booking.end_date).exclude(end_date__lte=booking.start_date) print conflicting_bookings if len(conflicting_bookings) > 0: print "conflicts found" return render(request, "booking_submitted.html", {"success":False}) print "no conflicts" booking.save() # block bookings - adds copies of the booking for x number of weeks. TODO conflict res if request.POST['repeat'] == "10times": print "block booking" block_id = uuid.uuid4().int for i in range(1,10): form = BookingForm(request.POST) booking = form.save(commit=False) booking.user = request.user booking.start_date += timedelta(days=7*i) booking.block_booking = block_id booking.save() print booking return render(request, "booking_submitted.html", {"success":True}) return render(request, "booking_submitted.html", {"success":False}) else: return redirect('bookings.views.booking_calendar')
def index(request): template = 'booking/index.html' form = BookingForm(request.POST or None) if form.is_valid(): booking = form.save(commit=False) booking.user = request.user booking.save() messages.success(request, "Your booking was completed successfully!") return redirect('/bookings/') context = {'form': form} return render(request, template, context)
def booking_form(request): """ Creation d'un formulaire de reservation """ form = BookingForm(request.POST or None) if form.is_valid(): envoi = True booking = form.save(commit=False) booking.author = request.user.username booking.save() return render(request, 'booking/bookingForm.html', locals())
def post(self, request, *args, **kwargs): try: email_form = EmailForm(request.POST, instance=request.user) phone_form = PhoneForm(request.POST, instance=request.user.profile) booking_form = BookingForm(request.POST) tz = pytz.timezone(settings.TIME_ZONE) my_bookings = Booking.objects.filter( madeBy=request.user, start__gt=datetime.now(tz), app_config=self.config).order_by('start') delete_booking = DeleteBooking(request.POST) except AttributeError: return render(request, 'bookings.html') if email_form.is_valid() and phone_form.is_valid( ) and booking_form.is_valid(): email_form.save() phone_form.save() new_booking = booking_form.save(commit=False) if new_booking.start and new_booking.end: new_booking.app_config = self.config free = Booking.objects.free(new_booking.app_config, new_booking.start, new_booking.end) a_booking_spot = BookingConfig.objects.filter( booking_spots__start__exact=new_booking.start.time(), booking_spots__end__exact=new_booking.end.time()).exists() if free and a_booking_spot: new_booking.made_by = request.user Booking.objects.add_booking(new_booking.app_config, new_booking.name, new_booking.made_by, new_booking.start, new_booking.end) if delete_booking.is_valid(): Booking.objects.filter( id__exact=delete_booking.cleaned_data['id']).delete() return render( request, 'bookings.html', { 'email_form': email_form, 'phone_form': phone_form, 'booking_form': booking_form, 'my_bookings': my_bookings, 'delete_booking': delete_booking })
def addBooking(request): if request.method == "POST": f = BookingForm(request.POST, initial={'booker':request.user, 'room':0}) if f.is_valid(): first_booking = 0 #relatedBookings = [] submittedBookings = [] for room in f.cleaned_data['room']: newBooking = Booking(name=f.cleaned_data['name'], notes=f.cleaned_data['notes'], date=f.cleaned_data['date'], start=f.cleaned_data['start'], end=f.cleaned_data['end'], booker=get_object_or_404(User, pk=request.user.id), approved=False, category=get_object_or_404(BookingCategory, pk=request.POST['category']), room=get_object_or_404(Room, pk=room.pk)) #auto-approve if admin if request.user.is_staff: newBooking.approved = True newBooking.save() if first_booking == 0: first_booking = newBooking submittedBookings.append(newBooking) #relatedBookings.append([newBooking]) if (f.cleaned_data['repeat']): # repeat is specified curr_date = f.cleaned_data['date'] ''' Timestep will be the increment for the repeat ''' if f.cleaned_data['repeat_frequency_unit'] == 'day': timestep = datetime.timedelta(days=f.cleaned_data['repeat_frequency']) elif f.cleaned_data['repeat_frequency_unit'] == 'week': timestep = datetime.timedelta(weeks=f.cleaned_data['repeat_frequency']) elif f.cleaned_data['repeat_frequency_unit'] == 'month': timestep = datetime.timedelta(weeks=4 * f.cleaned_data['repeat_frequency']) while curr_date + timestep <= f.cleaned_data['repeat_end'] and timestep: curr_date += timestep ''' TODO: check if this booking conflicts with any others ''' repeatBooking = Booking(name=f.cleaned_data['name'], notes=f.cleaned_data['notes'], date=curr_date, start=f.cleaned_data['start'], end=f.cleaned_data['end'], booker=get_object_or_404(User, pk=request.user.id), approved=False, category=get_object_or_404(BookingCategory, pk=request.POST['category']), room=get_object_or_404(Room, pk=room.pk)) if request.user.is_staff: repeatBooking.approved = True repeatBooking.save() submittedBookings.append(repeatBooking) RepeatBooking(source=newBooking, target=repeatBooking).save() # relatedBookings[-1].append(repeatBooking) # #if len(relatedBookings[0]) > 1: # for i in range(0, len(relatedBookings)): # for j in range(1, len(relatedBookings[i])): # if not relatedBookings[i][j] is None: # RepeatBooking(source=relatedBookings[i][0], target=relatedBookings[i][j]).save() #if len(relatedBookings) > 1: # for j in range(0, len(relatedBookings[0])): # for i in range(1, len(relatedBookings)): # if not relatedBookings[i][j] is None: # MultiRoomBooking(source=relatedBookings[0][j], target=relatedBookings[i][j]).save() # notify all admins of booking request, dont send if admin makes a booking admins = User.objects.filter(is_staff=True) subject = "East Scarborough Storefront - Booking Request" message = request.user.username + " has requested a booking.\n\nBooking info:\nName: " + newBooking.name + "\nNotes: " + newBooking.notes + "\nDate: " + str(newBooking.date) +"\nTime: " + str(newBooking.start) + " - " + str(newBooking.end) + "\nCategory: " + newBooking.category.name + "\nRoom: " + newBooking.room.name if newBooking.booker.is_staff == False: for a in admins: a.email_user(subject, message, settings.DEFAULT_FROM_EMAIL) return render(request, 'juakstore/booking_add.html', {'form':BookingForm(), 'all_bookings':Booking.objects.all().filter(approved=True), 'year': datetime.datetime.now().year, 'month': datetime.datetime.now().month, 'day': datetime.datetime.now().day, 'submittedBookings': submittedBookings, }) else: return render(request, 'juakstore/booking_add.html', {'form': f, 'all_bookings':Booking.objects.all().filter(approved=True), 'year': datetime.datetime.now().year, 'month': datetime.datetime.now().month, 'day': datetime.datetime.now().day, }) else: return HttpResponseRedirect(reverse('juakstore:bookingCreate'))